TwinCAT 3:块保持繁忙

时间:2018-07-16 10:20:32

标签: plc st twincat

我想将一些数据保存到.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。问题出在哪里?

1 个答案:

答案 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。