Beispiel: Dateisuche (FB_EnumFindFileEntry, FB_EnumFindFileList)

Die kompletten Sourcen finden Sie hier: Sample02.zip

 

Beispiel für FB_EnumFindFileEntry:

Auf dem lokalen TwinCAT System sollen alle Dateien im Verzeichnis C:\Windows\System32\ aufgelistet werden. Die Dateinamen sollen als Meldungen ins TwinCAT System Manager Logger Ausgabe geschrieben werden. Es soll möglich sein diesen Vorgang abzubrechen.

PROGRAM P_TestEnumEntry
VAR
    fbEnum : FB_EnumFindFileEntry := ( sNetID := '', tTimeout := T#5s, sPathName := 'C:\Windows\System32\*.*' );
    bEnum : BOOL;
    bAbort : BOOL;
    nState : BYTE;
END_VAR

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.

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 System Manager Logger Ausgabe:

Beispiel: Dateisuche (FB_EnumFindFileEntry, FB_EnumFindFileList) 1:

 

Beispiel für FB_EnumFindFileList:

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: