我想从我的 PLC 中导出一些数据,方法是将其写入文本文件并将其保存到 USB 记忆棒中。我设法创建了文本文件,但我不能写任何东西。
我在以下代码中使用来自 TwinCAT 标准库的函数:
PROGRAM P_WriteFile
VAR
nStateP : INT := 1;
fbOpenFile : FB_FileOpen; // open or create file
fbWriteFile : FB_FilePuts; // write to file
fbCloseFile : FB_FileClose; // Close file
sPath : STRING := '\Hard Disk2\foobar.txt'; // target path
sAmsNetID : STRING := '1.23.34.456.1.1';
sOutput : STRING := 'foo';
bDone : BOOL;
END_VAR
CASE nStateP OF
1:
// open/create file
fbOpenFile(sNetId := sAmsNetID, sPathName := sPath, nMode := 2, bExecute := TRUE, tTimeout := INT_TO_TIME(200), bBusy =>, bError => , nErrId =>, hFile => );
IF fbOpenFile.bBusy THEN
nStateP := 2;
END_IF
2:
// write to file
IF NOT fbOpenFile.bError THEN
fbWriteFile(sNetId := sAmsNetID, hFile := fbOpenFile.hFile, sLine := sOutput, bExecute := TRUE, tTimeout := INT_TO_TIME(200), bBusy =>, bError =>, nErrId =>);
fbOpenFile(bExecute := FALSE);
END_IF
IF fbWriteFile.bBusy THEN
nStateP := 3;
END_IF
3:
// Close file
IF NOT fbWriteFile.bBusy AND NOT fbWriteFile.bError THEN
fbCloseFile(sNetId := sAmsNetID, hFile := fbOpenFile.hFile, bExecute := TRUE, tTimeout := INT_TO_TIME(200), bBusy =>, bError =>, nErrId =>);
END_IF
IF fbWriteFile.bBusy THEN
nStateP := 4;
END_IF
4:
IF NOT fbCloseFile.bBusy AND NOT fbCloseFile.bError THEN
bDone := TRUE;
nStateP := 1;
ELSE
bDone := FALSE;
END_IF
END_CASE
程序进入所有状态,但结果是一个空的文本文件,我无法在控制面板上打开它。("访问 \Hard Disk2\foobar.txt 时发生共享冲突")
此外,函数的 bBusy - 变量(例如 FB_FileOpen.bBusy)不会变回“FALSE”。
如果有人可以帮助我,那就太好了!谢谢 :)