chrisk - 2019-05-01

filrd.szSize is always read as zero, I am wondering why this is happening.

Also I am confused about what the how the pBuffer in filrd works. when I set the pBuffer to "" it is the a number 22 greater than the pBuffer for the initial write.

Any help with this issue would be appreciated thanks.

(* example of how to use the CAA_FILE-library - file standard function blocks *)
PROGRAM PLC_PRG
VAR
    xFileStdInit:   BOOL:=FALSE;
    uiFileStdState: UINT:=0;
    sFileName:  CAA.FILENAME:= '/home/pi/TestDirectory/newtester3.txt';
    hFile:      CAA.HANDLE;
    sFileTestString:    STRING:='Hello CAA library user';
    sFileString:    STRING:='';
    szFileSize1:    CAA.SIZE := 0;
    szFileSize2:    CAA.SIZE := 0;
    filop:      FILE.Open;
    filwr:      FILE.Write;
    filrd:      FILE.Read;
    filcl:      FILE.Close;   
END_VAR
IF NOT xFileStdInit THEN
    filop(xExecute:=FALSE);
    filcl(xExecute:=FALSE);
    filwr(xExecute:=FALSE);
    filrd(xExecute:=FALSE);
    xFileStdInit:=TRUE;
    uiFileStdState:=0;
ELSE
    CASE uiFileStdState OF
    0: (* create a new file *)
        filop.sFileName:=sFileName;
        filop.eFileMode:=FILE.MODE.MRDWR;
        filop.xExclusive:=FALSE;
        filop( xExecute:=TRUE);
        IF filop.xDone THEN
            hFile:=filop.hFile;
            uiFileStdState:=1;
        END_IF
        IF filop.xError THEN
            (* error handling*)
            ;
        END_IF
    1:(* write text in the file *)
        filwr.hFile:=hFile;
        filwr.pBuffer:=ADR(sFileTestString);
        szFileSize1:=INT_TO_UINT(STANDARD.LEN(sFileTestString));
        filwr.szSize:=szFileSize1;
        filwr.udiTimeOut:=100000;       (* 100ms Timeout *)
        filwr( xExecute:=TRUE);
        IF filwr.xDone THEN
            uiFileStdState:=2;
        END_IF
        IF filwr.xError THEN
            (* error handling*)
            ;
        END_IF
    2:(* read file - TestFile.txt*)
        filrd.hFile:=hFile;
        filrd.udiTimeOut:=100000;       (* 100ms Timeout *)
        filrd.pBuffer:=ADR(sFileString);
        filrd.szBuffer:=255;
        filrd( xExecute:=TRUE);
        IF filrd.xDone THEN
            szFileSize2:=filrd.szSize;
            IF szFileSize2 = szFileSize1 THEN
                uiFileStdState:=3;
            ELSE
                (* error handling*)
                ;
            END_IF
        END_IF
        IF filrd.xError THEN
            (* error handling*)
            ;
        END_IF
    3:  (* close file  - TestFile.txt *)
        filcl.hFile:=hFile;
        filcl( xExecute:=TRUE);
        IF filcl.xDone THEN
            uiFileStdState:=4;
        END_IF
        IF filcl.xError THEN
            (* error handling*)
            ;
        END_IF
    4:  (* end of example *)
                ;
    END_CASE
END_IF