beckhoff и Twincat Проблема при работе с файлом.
-
-
09.09.2021 #87991
Николай
КлючникFlat
Всем добрый день. Только начал изучение beckhoff.
Необходимо писать логи в файл. Написал функцию, но проблема в том что запись происходит только 1 раз, при первом запуске программы. При повторном вызове все команды отрабатывают, ошибок в вызове функциональных блоков нет, новая строка для записи формируется, но в файле ничего не добавляется. После остановки и повторного запуска программы- она снова записывает строчку 1 раз.
Уже все перепробовал. Подскажите кто в курсе.Код: Выделить всё
IF iBusy=1 THEN (*Процесс записи 1: *) fbFileOpen.sNetId:='',(*Необязательная переменная для работы с фалом*) fbFileOpen.sPathName:='Hard DiskLogs1.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
Sergy6661
Flat писал(а): 09 сен 2021, 10:12 Уже все перепробовал. Подскажите кто в курсе.Вызов ФБ выполнять после проверки условия выполнения ‘Занято чи ни’.
Т.к получается что переход bExecute из 0 в 1 ФБ получает только при первом вызове.
Посмотрите состояние ФБ в онлайне, 100% что bExecute= TRUE.
-
Viewing 0 reply threads
- Вы должны войти в систему, чтобы ответить в этой теме.