我想将一些数据保存到.txt文件中。我可以创建它,但是由于FB保持忙碌而无法向其中写入文本。
CASE counter OF
1:
fileOpen.sNetId := '';
fileOpen.sPathName := 'C:\test\test.txt';
fileOpen.nMode := FOPEN_MODEWRITE;
fileOpen.bExecute := TRUE;
fileOpen.tTimeout := T#200MS;
fileOpen();
counter := 2;
2:
IF NOT fileOpen.bBusy AND NOT fileOpen.bError THEN (* bBusy stays true*)
counter := 3;
END_IF
3:
fileOpen.bExecute := FALSE;
fbPutFile(sNetId := '', hFile := fileOpen.hFile, sLine := 'FOO', bExecute := TRUE, tTimeout := INT_TO_TIME(200), bBusy =>, bError =>, nErrId =>);
END_CASE
我进入步骤2,但无法进入步骤3。问题出在哪里?
答案 0 :(得分:1)
这是因为您已停止调用功能块来打开文件。您在这里所做的是在步骤1中调用FB_FileOpen,但是随后停止调用它。在步骤1中,bBusy标志变为高(true),但由于您再也不会调用FB,因此无法将其更改为其他任何标志。您还需要在步骤2中对其进行调用。请记住,bExecute也是ADS命令的触发器,因此,在步骤2中完成操作之后,您可以在步骤2中将bExecute-input设置为FALSE,并在触发命令后进行转发。
GroupList = new ObservableCollection<Group>();
还请记住Beckhoffs FB_FileOpen假定目录C:\ test存在(但是如果使用FOPEN_MODEWRITE打开它,则不会自动创建文件test.txt)。要创建所有必需的控制器(如果尚不存在),请使用TwinCAT FB_CreateDir。