1

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

4

1 回答 1

1

这是因为您已经停止调用打开文件的功能块。您在这里所做的是您在步骤 1 中调用 FB_FileOpen,但随后停止调用它。bBusy 标志在第 1 步中变为高电平(真),但永远不能更改为其他任何值,因为您再也不会调用 FB。您还需要在第 2 步中调用它。请记住,bExecute 也是 ADS 命令的触发器,因此一旦您在第 2 步中完成了它,您可以在第 2 步中将 bExecute-input 设置为 FALSE,并在您已经触发命令时继续前进。

...
2:
    fileOpen(bExecute := false);
    IF NOT fileOpen.bBusy AND NOT fileOpen.bError THEN (* bBusy stays true*)
        counter := 3;
    END_IF
...

还请记住,Beckhoffs FB_FileOpen 假定目录 C:\test 存在(虽然不是文件 test.txt,如果您使用 FOPEN_MODEWRITE 打开它,它将自动创建)。要创建所有必要的目录(如果它们不存在),请使用 TwinCATs FB_CreateDir。

于 2018-07-16T12:21:28.213 回答