我尝试使用 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
我尝试过这个,你所要做的就是用 LEN(sDataToWrite) 替换 SIZEOF(sDataToWrite)
SIZEOF 是字符串变量的预定义大小。 LEN 是字符串到空字符的长度。
然后在 CX8190 上的 WinCE 中用记事本打开它
如果在 TwinCAT 中读回文件,则会添加“ ”。