FB_FileClose только в первый раз занят

Я работаю с TwinCAT 3 и ST, чтобы сохранить данные из сокета. Сокеты работают и части экономии тоже, но не все. Первый массив, который я пытаюсь сохранить, работает нормально. Но если я хочу сохранить еще один, это не удается. FB_FileClose не идет bBusy.

IF reset THEN // I reset the FB after it saved one array.
    bSuccess := FALSE;
    iError := 0;
    step := 1;
    reset := FALSE;
    MEMSET(ADR(saveArray), 0, SIZEOF(saveArray));
    RETURN;
END_IF
CASE step OF
1:
    IF path = '' THEN
        bSuccess := FALSE;
        iError := 12;
        step := 1;
    END_IF
    fbFileOpen.sPathName := path;
    fbFileOpen.nMode := FOPEN_MODEAPPEND OR FOPEN_MODEPLUS;
    fbFileOpen.bExecute := TRUE;
    fbFileOpen.tTimeout := T#2S;
    fbFileOpen();
    step := 2;

2:
    fbFileOpen(bExecute := FALSE);
    IF NOT fbFileOpen.bBusy AND NOT fbFileOpen.bError THEN 
        step := 3;
    ELSE 
        iError := fbFileOpen.nErrId;
    END_IF

3:
    fbWriteFile.hFile := fbFileOpen.hFile;
    fbWriteFile.bExecute := TRUE;
    fbWriteFile.pWriteBuff := ADR(saveArray);
    fbWriteFile.cbWriteLen := SIZEOF(saveArray);
    fbWriteFile.tTimeout := T#2S;
    fbWriteFile();
    step := 4;

4:
    fbWriteFile(bExecute := FALSE);
    IF NOT fbWriteFile.bBusy AND NOT fbWriteFile.bError THEN
        step := 5;
    END_IF

5:
    fbCloseFile.hFile := fbFileOpen.hFile;
    fbCloseFile.bExecute := TRUE;
    fbCloseFile.tTimeout := T#3S;
    fbCloseFile();
    IF fbCloseFile.bBusy THEN //Gets suck here at the second run. And if I remove it, the FB doesn't get busy and doesn't close my hFile.
        step := 6;
    END_IF


6:
    fbCloseFile(bExecute := FALSE);
    IF NOT fbCloseFile.bBusy AND NOT fbCloseFile.bError THEN
        bSuccess := TRUE;
    ELSE
        iError := fbCloseFile.nErrId;
    END_IF
END_CASE

Я также заметил, что FB_FileOpen открывает один и тот же hFile два раза подряд. Второе из этого не может быть закрыто от FB_FileClose. При следующем запуске он получает новый hFile, а затем может сохранить данные. Следующий не может и так далее. В чем моя ошибка в этом?

Спасибо!

1 ответ

Решение

Нашел решение самостоятельно после небольшого взлома. Прежде чем я установил все параметры для FB_FileOpen, FB_FileWrite а также FB_FileClose Я установил для выполнения значение false, как это:

1:
    IF path = '' THEN
        bSuccess := FALSE;
        iError := 12;
        step := 1;
    END_IF
    fbFileOpen(bExecute := FALSE); // Set this to false before.
    fbFileOpen.sPathName := path;
    fbFileOpen.nMode := FOPEN_MODEAPPEND OR FOPEN_MODEPLUS;
    fbFileOpen.bExecute := TRUE;
    fbFileOpen.tTimeout := T#2S;
    fbFileOpen();
    step := 2;

Теперь это работает.

Другие вопросы по тегам