Необходимо писать логи в файл. Написал функцию, но проблема в том что запись происходит только 1 раз, при первом запуске программы. При повторном вызове все команды отрабатывают, ошибок в вызове функциональных блоков нет, новая строка для записи формируется, но в файле ничего не добавляется. После остановки и повторного запуска программы- она снова записывает строчку 1 раз.
Уже все перепробовал. Подскажите кто в курсе.
Код: Выделить всё
IF iBusy=1 THEN (*Процесс записи 1: *)
fbFileOpen.sNetId:='';(*Необязательная переменная для работы с фалом*)
fbFileOpen.sPathName:='\Hard Disk\Logs\1.txt';(*Путь к файлу*)
fbFileOpen.nMode:=FOPEN_MODEAPPEND OR FOPEN_MODEPLUS;(*Тип открытия файла APPEND*)
fbFileOpen.bExecute:=TRUE; (*Установка флага выполнения*)
fbFileOpen.tTimeout:=t#200MS; (*Установка таймаута*)
k:=k+1; (*начинаем счет попыток записи*)
fbFileOpen(); (*Пытаемся открыть файл*)
IF fbFileOpen.hFile<>0 THEN (*Если файл открыт*)
iBusy:=2; (*Сдвиггаем флаг процесса записи*)
fbFileOpen.bExecute:=FALSE;
END_IF
END_IF
IF iBusy=2 THEN (*Процесс записи 2: Формируем строку*)
fbGetSystemTime(timeLoDW=>fileTime.dwLowDateTime, timeHiDW=>fileTime.dwHighDateTime );(*Получаем дату и время*)
sTime :=SYSTEMTIME_TO_STRING( FILETIME_TO_SYSTEMTIME( fileTime ) );(*Переводим из TIME в STRING(Взято готовое с сайта бекхофа)*)
sFileput:='$0A';
sFileput:=CONCAT(sFileput, sTime);
sTime:=' Errors: ';
sFileput:=CONCAT(sFileput, sTime);
sFileput:=CONCAT(sFileput, INT_TO_STRING(iErr220v));
sFileput:=CONCAT(sFileput, INT_TO_STRING(iBoxOH));
sFileput:=CONCAT(sFileput, INT_TO_STRING(iFilterLAP));
sFileput:=CONCAT(sFileput, INT_TO_STRING(iOpticLAP));
sFileput:=CONCAT(sFileput, INT_TO_STRING(iLiquidLF));
sFileput:=CONCAT(sFileput, INT_TO_STRING(iLiquidOH));
sFileput:=CONCAT(sFileput, INT_TO_STRING(iCameraOH));
sFileput:=CONCAT(sFileput,sFileput2);
iBusy:=3;
END_IF
IF iBusy=3 THEN (*Процесс записи 3:Записываем строку*)
fbFilePuts.sLine:=sFileput;
fbFilePuts.sNetId:='';(*Необязательная переменная для работы с файлом*)
fbFilePuts.hFile:=fbFileOpen.hFile;
fbFilePuts.bExecute:=TRUE; (*Установка флага выполнения*)
fbFilePuts.tTimeout:=t#200MS; (*Установка таймаута*)
k:=k+1; (*начинаем счет попыток записи*)
fbFilePuts();
IF fbFilePuts.bBusy=FALSE THEN (*Если строка записана*)
iBusy:=4; (*Сдвиггаем флаг процесса записи*)
fbFilePuts.bExecute:=FALSE;
END_IF
END_IF
IF iBusy=4 THEN (*Процесс записи 4:Закрываем файл*)
fbFileClose.sNetId:='';(*Необязательная переменная для работы с файлом*)
fbFileClose.hFile:=fbFileOpen.hFile;
fbFileClose.bExecute:=TRUE; (*Установка флага выполнения*)
fbFileClose.tTimeout:=t#200MS; (*Установка таймаута*)
k:=k+1; (*начинаем счет попыток записи*)
fbFileClose();
IF fbFileClose.bBusy=FALSE THEN (*Если строка записана*)
iBusy:=0; (*Сдвиггаем флаг процесса записи*)
fbFileClose.bExecute:=FALSE;
END_IF
END_IF
IF K>100 THEN (*Если прошлоо более 100 попыток, все обнуляем и выходим*)
k:=0;
iBusy:=0;
END_IF