在 Beckhoff CX8190 上的 twincat 3 中写入文件的问题

问题描述 投票:0回答:1

我尝试使用 TwinCAT 3 ST 语言记录数据。在我看来,Beckhoff 文档有点不完整。 当我尝试保存 txt 文件并使用预装的记事本(在 Windows CE 7.0 中称为记事本)读取它时,我看到记事本读取该文件并出现错误窗口(无法打开文档) 尝试打开文本文档foobar01.txt

你能看一下代码并告诉我错误在哪里吗?或者也许您有比倍福信息系统更好的文件处理教程?

代码如下:

//declarations of variables
PROGRAM MAIN
VAR
    nStage          :   INT :=0;
    fbFileOpen      :   FB_FileOpen;    // open or create file
    fbFileWrite     :   FB_FileWrite;    // write to file
    fbFileClose     :   FB_FileClose;   // Close file

    sPath           :   STRING  :=  '\temp\foobar01.txt';    // target path
    sAmsNetID       :   STRING  := '5.109.203.84.1.1';
    
    nVariable       :   INT := 0;
    
    bWriteError     :   BOOL;
    bOpenError      :   BOOL;
    
    sDataToWrite    :   STRING:='All work and no play makes Jack a dull boy';
    
    nErrId          :   UDINT   :=  0;
    bError          :   BOOL    :=  FALSE;
    hDataFileRefnum :   UINT    :=  0;
END_VAR

//-----end of declaration, main code-----

CASE nStage OF
    0:  fbFileOpen(bExecute := FALSE);
        fbFileOpen  (
                    sNetId := '',
                    sPathName := sPath,
                    nMode := FOPEN_MODEWRITE OR FOPEN_MODETEXT,
                    ePath := PATH_GENERIC,
                    bExecute := TRUE
                    );
        nInc(nStage);
    
    1:  fbFileOpen(bExecute := FALSE);
        IF fbFileOpen.bBusy = FALSE AND fbFileOpen.bError = TRUE THEN
            nErrId  :=  fbFileOpen.nErrId;
            bError  :=  TRUE;
            nStage  :=  10;
        END_IF;
        IF fbFileOpen.bBusy = FALSE AND fbFileOpen.bError = FALSE THEN
            hDataFileRefnum := fbFileOpen.hFile;
            nInc(nStage);
        END_IF;
    2:  fbFileWrite( bExecute := FALSE);
        fbFileWrite (
                        sNetId      :=  sAmsNetId,
                        hFile       :=  hDataFileRefnum,
                        pWriteBuff  :=  ADR(sDataToWrite),
                        cbWriteLen  :=  SIZEOF(sDataToWrite),
                        bExecute    :=  TRUE
                    );
        nInc(nStage);
 
    3:  fbFileWrite(bExecute := FALSE); 
        IF fbFileWrite.bBusy = FALSE AND fbFileWrite.bError = TRUE THEN
            nErrId  :=  fbFileWrite.nErrId;
            bError  :=  TRUE;
            nStage  :=  10;
        END_IF
        IF fbFileWrite.bBusy = FALSE AND fbFileWrite.bError = FALSE THEN
            nInc(nStage);
        END_IF
    4:  fbFileClose( bExecute := FALSE);
        fbFileClose( sNetId := sAmsNetID, hFile := hDataFileRefnum, bExecute:=TRUE);
        IF fbFileClose.bBusy = FALSE AND fbFileClose.bError = TRUE THEN
            nErrid  :=  fbFileClose.nErrId;
            bError  :=  TRUE;
            nStage  :=  10;
        END_IF
        IF fbFileClose.bBusy = FALSE AND fbFileClose.bError = FALSE THEN
            fbFileClose.hFile   :=  0;
            nStage  :=  9;
        END_IF
    9:  (*Normal ending*)   
        nStage := nStage;
    10: nErrId;
        bError; 
END_CASE
file logging twincat
1个回答
0
投票

我尝试过这个,你所要做的就是用 LEN(sDataToWrite) 替换 SIZEOF(sDataToWrite)

SIZEOF 是字符串变量的预定义大小。 LEN 是字符串到空字符的长度。

然后在 CX8190 上的 WinCE 中用记事本打开它

如果在 TwinCAT 中读回文件,则会添加“ ”。

© www.soinside.com 2019 - 2025. All rights reserved.