TwinCAT FTP Client: Auslesen einer Dateiliste von einem FTP Server

In diesem Beispiel wird eine Dateiliste von einem FTP Server gelesen.

Um dieses Beispiel ausführen zu können, sollten Sie einen Benutzer mit dem Namen "TestUser" und dem Passwort "TestPwd123" bei Ihrem FTP Server eingerichtet haben.

Mit einer positiven Flanke an der startstop Variablen wird eine Dateiliste erzeugt.
Zunächst wird eine Verbindung zum FTP Server mit dem FB_FTP_Open erzeugt. Danach werden alle Dateien ausgegeben die die Endung "*.txt" haben, mit dem Baustein FB_FTP_FileList vom FTP Server geladen.
Zum Schluss wird noch die Verbindung zum FTP Server mit dem Baustein FB_FTP_Close geschlossen.

Achten Sie darauf, dass der TestUser Schreib- und Leserechte besitzt.

Variablendeklaration

PROGRAM MAIN
VAR
    RisingEdge          : R_TRIG;
    startstop           : BOOL;

    state           : BYTE;

    FB_FTP_Open1        : FB_FTP_Open;
    FB_FTP_FileList1        : FB_FTP_FileList;
    FB_FTP_Close1       : FB_FTP_Close;

    busy            : BOOL;
    err             : BOOL;
    errid           : UDINT;

    handle          : T_HFTP;
    
    FileList            : ARRAY [0..MAX_FILELIST_ITEMS] OF STRING;
    Items           : UDINT;
END_VAR

SPS Programm

RisingEdge(CLK:= startstop);
IF RisingEdge.Q THEN
    state := 1;
END_IF

CASE state OF
    0:
        ;

    1:
        FB_FTP_Open1(
            sNetID:= '5.0.252.142.1.1',
            sHost:= '172.16.9.223',
            nPort:= 21,
            sUsername:= 'TestUser',
            sPassword:= 'TestPwd123',
            bExecute:= TRUE,
            tTimeout:= T#15s,
            bBusy=> busy,
            bError=> err,
            nErrId=> errid,
            hFTP=> handle);

        IF NOT busy AND NOT err THEN
            FB_FTP_Open1(bExecute:= FALSE);
            state := 2;
        END_IF

    2:
        FB_FTP_FileList1(
            sNetID:= '5.0.252.142.1.1',
            hFTP:= handle,
            sMask:= '*.txt',
            nIndex:= 0,
            pList:= ADR(FileList),
            cbList:= SIZEOF(FileList),
            bExecute:= TRUE,
            tTimeout:= T#15s,
            bBusy=> busy,
            bError=> err,
            nErrID=> errid,
            nItems=> Items);

        IF NOT busy AND NOT err THEN
            FB_FTP_FileList1(bExecute:= FALSE);
            state := 3;
        END_IF

    3:
        FB_FTP_Close1(
            sNetID:= '5.0.252.142.1.1',
            hFTP:= handle,
            bExecute:= TRUE,
            tTimeout:= T#15s,
            bBusy => busy,
            bError => err,
            nErrId => errid);

        IF NOT busy AND NOT err THEN
            FB_FTP_Close1(bExecute:= FALSE);
            state := 0;
        END_IF

END_CASE

Einzubindende Bibliothek ist die "TcFTPClient.lib", "TcSystem.lib", "TcBase.lib" und "STANDARD.lib"