Beispiel: Dateisuche (FB_EnumFindFileEntry, FB_EnumFindFileList)

Hier können Sie die kompletten Sourcen entpacken: EnumFindFile.zip

Beispiel: FB_EnumFindFileEntry (ST)

Auf dem lokalen TwinCAT System sollen alle Dateien im Verzeichnis C:\Windows\System32\ aufgelistet werden. Die Dateinamen sollen als Meldungen ins TwinCAT XAE Error Liste geschrieben werden. Es soll möglich sein diesen Vorgang abzubrechen. Bei einer steigenden Flanke an der bEnum-Variablen beginnt die Auflistung der gefundenen Dateien. Bei einer steigenden Flanke an der bAbort-Variablen wird der Vorgang abgebrochen.

PROGRAM P_TestEnumEntry
VAR
    fbEnum: FB_EnumFindFileEntry := ( sNetID := '', tTimeout := T#5s, sPathName := 'C:\Windows\System32\*.*' );
    bEnum : BOOL;
    bAbort: BOOL;
    nState: BYTE;
END_VAR
CASE nState OF
    0:
        IF bEnum THEN             (* flag set ? *)
            bEnum       := FALSE;         (* reset flag *)
            fbEnum.eCmd := eEnumCmd_First;    (* enum first entry *)
            nState      := 1;
        END_IF

    1:    (* enum one entry *)
        IF bAbort THEN
            bAbort      := FALSE;
            fbEnum.eCmd := eEnumCmd_Abort;
        END_IF
        fbEnum( bExecute := FALSE );
        fbEnum( bExecute := TRUE );
        nState     := 2;

    2:    (* wait until function block not busy *)
        fbEnum( bExecute := FALSE );
        IF NOT fbEnum.bBusy THEN
            IF NOT fbEnum.bError THEN
                IF NOT fbEnum.bEOE THEN
                    ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG, 'FB_EnumFindFileEntry, find file name: %s', fbEnum.stFindFile.sFileName );
                    fbEnum.eCmd := eEnumCmd_Next; (* enum next entry *)
                    nState      := 1;
                ELSE (* no more entries *)
                    nState      := 0;
                END_IF
            ELSE (* log error *)
                ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'FB_EnumFindFileEntry error:%s', DWORD_TO_HEXSTR( fbEnum.nErrID, 0, FALSE ) );
                nState     := 0;
            END_IF
        END_IF
END_CASE

Die geschriebenen Logmeldungen in der TwinCAT XAE Error Liste:

Beispiel: Dateisuche (FB_EnumFindFileEntry, FB_EnumFindFileList) 1:

Beispiel: FB_EnuFindFileList (FUP)

Bei einer steigenden Flanke an der bFirst-Variablen wird der Funktionsbaustein aktiviert. Beim Erfolg werden die Dateinamen in die fileList-Arrayvariable eingetragen.

PROGRAM P_TestEnumList
VAR
    fbEnum      : FB_EnumFindFileList;
    filesList   : ARRAY[1..10] OF ST_FindFileEntry;
    bFirst      : BOOL;
    bNext       : BOOL;
    bAbort      : BOOL;
    bBusy       : BOOL;
    bError      : BOOL;
    nErrID      : UDINT;
    bEOE        : BOOL;
    nFindFiles  : UDINT;
END_VAR

Onlineansicht:

Beispiel: Dateisuche (FB_EnumFindFileEntry, FB_EnumFindFileList) 2:

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System)