CAA oder SysFile bitte um Hilfe

MrAnderson0815

Level-2
Beiträge
13
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein Problemchen / Herausforderung.

Da ich ehr aus der Beckhoff Richtung kommen, stelle ich mich mit Codesys vielleicht einfach nur dusselig an, aber ich versuche gerade ein Logging Programm zu erstellen, welches im ersten Schritt den Logging Ordner erstellen soll. Da hapert es schon. Ich bekomme immer den Fehler 5113 "ASM_CREATEJOB_FAILED"

Ich habe jetzt verschiedene Beispiele versucht, um das zu verstehen.
https://product-help.schneider-electric.com
die File Beispiele aus dem Codesys Store
Oder der Teil von @wollvieh nur eben auf create folder angepasst, den er in einem anderen Thema gepostet hat. Aber immer kommt der Fehler.
https://www.sps-forum.de/threads/codesys-caa-file-bitte-hilfe.104576/

Ich habe einen Win10 64bit PC (ist eigentlich eine VM) -> habe aber dort Adminrechte)
Codesys ist die V3.5 SP12 (32bit) -> (muss ich nehmen, da das Programm auf eine Pilzsteuerung soll)

Update:
SysFile funktioniert, wie im Beispiel : https://support.crosscontrol.com/kb/file-utility-example
Also direkt ohne Ordner erstellen, sondern gleich die Datei.

Wenn ich aber versuche die Datei zu Öffnen, via CAA bleibt er hängen.
Hier mal mein Code (ist erst einmal nur ein Test und aus den Beispielen)

Code:
VAR
    sFirstFileName     : STRING; //Variable to create a text file.
    xWriteTest        : BOOL;
    xTest2Done        : BOOL:=FALSE;
    iFilesCount        : INT;
  
    sDirEntry        : STRING(1024);
    stDirInfo        : DirInfo;
    udiResult        : __XWORD;
    udiDirHandle    : RTS_IEC_HANDLE;
    udiFileHandle    : RTS_IEC_HANDLE; 
    udiReadResult    : UDINT; 
    xStartTest        : BOOL:= FALSE; (* true, if a button is pressed *)
    xTestDone        : BOOL:= FALSE;
    xError            : BOOL;
    ErrorCode : RTS_IEC_RESULT;
    udiCreateError: UDINT;
    udiReadError: UDINT;
    udiCloseError: UDINT;
    udiRenameError: UDINT;
    udiDeleteError1: UDINT;
    udiDeleteError2: UDINT;
    udiDirDeleteError: UDINT;
    szTestLine: STRING;
    hFile            : RTS_IEC_HANDLE := RTS_INVALID_HANDLE;
    udiBytesRead     : __XWORD;
    udiBytesCopied    : __XWORD;
    udiWrite        : __XWORD;
    udiFileSize      : __XWORD;
    udiPos        : __XWORD;
  
    udiPosError             : RTS_IEC_RESULT;
    udi_pos_write        : RTS_IEC_RESULT;
    udiCopyError        : RTS_IEC_RESULT;
    udiWriteError1        : RTS_IEC_RESULT;
    udiWriteError2        : RTS_IEC_RESULT;
    udiWriteError3        : RTS_IEC_RESULT;
    udiOpenError1        : RTS_IEC_RESULT;
    udiOpenError2        : RTS_IEC_RESULT;
    udiOpenError3        : RTS_IEC_RESULT;
    udiOpenError4        : RTS_IEC_RESULT;

    udiReadError1    : RTS_IEC_RESULT;
    udiReadError2    : RTS_IEC_RESULT;
    udiReadError3    : RTS_IEC_RESULT;
    udiCloseError1    : RTS_IEC_RESULT;
    udiCloseError2    : RTS_IEC_RESULT;
    udiCloseError3    : RTS_IEC_RESULT;
    udiCloseError4    : RTS_IEC_RESULT;
    udiSizeError : RTS_IEC_RESULT;
// mein Versuch
    n_step    : INT    := 0;
    n_step_last: INT;
    n_step_old: INT;
  
    szFileSize1:        CAA.SIZE := 0;
  
    fb_open    : FILE.Open;
    fb_write    : FILE.Write;
    fb_close    : FILE.Close;
  
    handleFile          : DWORD;
      handleFileInternal  : DWORD;
END_VAR

(* This program uses the synchronous functions for directory modification*)

IF xStartTest THEN
    sFirstFileName     := '/Test File.txt'; //Name given for the text file.
    xTestDone := FALSE;
    sFirstFileName := CONCAT(g_sMainDirectory, sFirstFileName); //Concatenation of two strings allows for the file to be in directory defined in the Global Variable List (GVL)
  
(* File is created and stored into the directory*)
    udiFileHandle := SysFileOpen(szFile:=sFirstFileName, am:=FILE.AM_WRITE_PLUS, pResult:=ADR(ErrorCode)); //Built-in function SysFileOpen, with options to Write/Read/Append,Copy look at app. note for more info.
    IF udiFileHandle <> RTS_INVALID_HANDLE    THEN
        SysFileClose(hFile:=udiFileHandle);
    END_IF 
    xTestDone := TRUE; //Used for buttons
END_IF

(* This is where you write to a file*)

IF xWriteTest
THEN     
    szTestLine := 'HELLO WORLD!!!';
(*     
    hFile := SysFileOpen(szFile:=sFirstFileName, am:=FILE.AM_WRITE_PLUS, pResult:=ADR(udiOpenError1)); //Built-in function to open file and write to it.
    IF hFile <> RTS_INVALID_HANDLE    THEN
        udiPosError := SysFileGetPos(hFile:=hFile, pulPos:=ADR(udiPos)); //test for error, this is optional
        udi_pos_write    := SysFileSetPos(hFile:= hFile, ulOffset:= udiPosError);
        udiWrite := SysFileWrite(hFile:=hFile, pbyBuffer:=ADR(szTestLine), ulSize:=INT_TO_UDINT(LEN(szTestLine)), pResult:=ADR(udiWriteError1));
        udiCloseError  := SysFileClose(hFile:=hFile);
    END_IF
    (* Close the directory *)
    udiCloseError := SysDirClose(hDir:= udiDirHandle);
    xTest2Done:=TRUE; //Used for buttons.
*) 
    n_step    := 1; 
END_IF



CASE n_step OF
    0: // nix
    1: // Datei öffnen
        fb_open.sFileName:=sFirstFileName;
        fb_open.eFileMode:=FILE.MODE.MAPPD;
        fb_open.xExclusive:=TRUE;
        fb_open(xExecute:=TRUE);
        IF fb_open.xDone
        THEN
            hFile:=fb_open.hFile;
            n_step    := 2;
        END_IF
        IF fb_open.xError
        THEN
            ;
        END_IF
      
  
    2: // in Datei schreiben
        fb_write.hFile:=hFile;
        fb_write.pBuffer:=ADR(szTestLine);
        szFileSize1:=SIZEOF(szTestLine);
        fb_write.szSize:=szFileSize1;
        fb_write.udiTimeOut:=100000;    (* 100ms Timeout *)
        fb_write( xExecute:=TRUE);
      
        IF fb_write.xDone
        THEN
            n_step    := 3;
        END_IF
      
        IF fb_write.xError
        THEN
        (* error handling*)
        ;
        END_IF
      
    3:    // close Datei
        fb_close.hFile:=hFile;
        fb_close( xExecute:=TRUE);
      
        IF fb_close.xDone
        THEN
            n_step    := 0;
            xTest2Done:=TRUE; //Used for buttons.
        END_IF
      
        IF fb_close.xError
        THEN
        (* error handling*)
            ;
        END_IF             
END_CASE
 
Zuletzt bearbeitet:
Zurück
Oben