File Handling, Datein Schreiben/Lesen/ Kopieren TWINCAT2

Hendrik

Level-1
Beiträge
219
Reaktionspunkte
19
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin ich bin momentan damit beschäftigt Strings in .csv Datein zu schaufeln.... Das funktioniert schon mal einfandfrei.

Jetzt bin ich auf der Suche nach einer Lösung um diese Datein vom Flash auf einen USB-Stick zu schreiben usw.

Hierfür brauche ich, aber um Auswählen zu können welche Datein (es sind einige), hilfe.

Genaugenommen möchte ich ein Verzeichnis z.b. /bla/bla/Log auslesen (welche Datein enthält das Verzeichnis) um dann mit den Namen der Datein eine
Liste alle Datein zu erstellen.
Mit der Liste möchte ich dann eine Auswahl treffen zu können. Um dann diese Auswahl auf einen USB-Stick zu kopieren.

Primär geht es hier um das Verzeichnis auslesen und dann eine Liste alle vorhandennen Datein zu erstellen.

Programmiere mit TwinCat 2 in ST.

Vielen Dank für eine Hilfe!
 
Hallo habe schon etwas gefunden bei Beckhoff.

Code:
 FB_EnumFindFileList

Kennt sich jemand damit aus? gibt es Erfahrungen?

Mfg
Hendrik
 
Doch der Baustein ist super.

Habe da jetzt ein weiteres Problem wo ich nach langer sucher noch keine Antwort gefunden habe mir fehlt wahrscheinlich das passende Stichwort!


Wie kann ich über TwinCat im Programm Verzeichnisse anlegen lassen?
bzw. Verzeichnisse Löchen?

MfG
Hendrik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey Schakel

Kann den fb_FileCopy nicht nutzen.... (TwinCAT 2.11)

Hat noch jemand einen Ansatz für mich?

suche einen Fb oder eine Code um ein komplettes Verzeichniss mit seinen Unterverzeichnisen von a nach b zu kopieren.

Danke im Vorraus!!

Mfg
Hendrik
 
Hallo Hendrik,

Ich habe auch TwinCAT 2.11, und ich kann FB_FileCopy gebrauchen.
Aber, auf die site von Beckhoff kannst du ein sample programm downloaden.
Die .Exe ausfuhren und der .PRO extracten.

Dann in PLC control öffnen und fertig.
Sollte gehen... :)

Grusse aus Holland
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

Ich habe gerade ein Problem mit der Umsetztung der Fb_EnumFindFileList

bekomme immer den ADS_Error 1803
Code:
FUNCTION_BLOCK FB_DateinFinden
VAR_INPUT
    VerzeichnisNamen: ARRAY [0..31] OF STRING; (*Unterverzeichnis auflistung*)
    FreigabeFileFind: BOOL;
END_VAR
VAR_OUTPUT
    nErrID: UDINT;
    nFindFiles      : UDINT;
END_VAR
VAR
    PathName: STRING;
    FindCase : INT;
    VerzeichnissZeiger : INT;

    FB_EnumFindFileList1: FB_EnumFindFileList;
    b_EXECUT: BOOL;
    cbFindList : UDINT;
    pFindList       : ARRAY [1..10] OF ST_FindFileEntry;
    bError: BOOL;
END_VAR
Code:
IF FreigabeFileFind THEN
    b_EXECUT:= TRUE;

    CASE FindCase OF
    
    0:
        IF FB_EnumFindFileList1.bEOE = TRUE THEN
            VerzeichnissZeiger := VerzeichnissZeiger + 1;
        END_IF
    
        PathName := VerzeichnisNamen[VerzeichnissZeiger];
        PathName := CONCAT (PathName, '\*.csv');
        FindCase := 5;
    
    5:
        FB_EnumFindFileList1.bExecute := FALSE;
            IF b_EXECUT THEN
                FB_EnumFindFileList1.bExecute := TRUE;
                FindCase:= 10;
            END_IF
    10:
        FB_EnumFindFileList1.bExecute := FALSE;
    
                IF NOT FB_EnumFindFileList1.bBusy THEN
                    IF FB_EnumFindFileList1.bError THEN
                        nErrID := FB_EnumFindFileList1.nErrId;
                        bError := TRUE;
                        FindCase := 50;
                    ELSE
                        FindCase := 15;
                    END_IF
                END_IF

    END_CASE

FB_EnumFindFileList1(
    sPathName:= PathName ,
    eCmd:= eEnumCmd_First,
    pFindList:= ADR (pFindList),
    cbFindList:= SIZEOF (cbFindList) ,
    tTimeout:= t#5s,
    nFindFiles=> nFindFiles);

END_IF

Vll kann mir hier jemand kurz helfen?

Danke und beste Grüße aus dem Norden =)
Hendrik
 
Code:
cbFindList:=SIZEOF(cbFindList),
Hier musst Du die Grösse von pFindList angeben.
Ausserdem musst Du nach dem ersten Aufruf eCmd auf den Wert eENumCmd_Next setzen.
 
Hey Danke StructruedTrash

ich habe da mal eine weitere Frage. Da ich den Ganzen Aufwand zum Daten kopieren machen.

Ich habe ein Verzeichnis mit Unterordnern Maximal 31.
Hier drin wiederrum sind bis zu 43200 Datein wenn jemand schnell ist :p

jetzt muss ich ja eine Liste der Zu kopierenden Datein erstellen. Was denkst du ist besser bei dieser Anzahl an möglichen DateinNamen
ein Array ist zu klein also besser auf dem Flash als z.b. csv speicher und für kopieren wieder auslesen?
oder abschnittsweise ein Array wieder beschreiben und löschen wenn der Kopiervorgang abgeschlossen ist?

Vielen Dank im Vorraus!

Hendrik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das kann ich so nicht beantworten. Hängt von Deinen RAM-/Flash-Speicherreserven ab, vielleicht auch davon, ob Du berücksichtigen musst, dass der Rechner beim Kopieren möglicherweise ausgeschaltet wird.
Eine weitere Möglichkeit wäre noch, nach dem Finden einer Datei diese sofort zu kopieren.
 
Zurück
Oben