beckhoff и Twincat Проблема при работе с файлом.

    • #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&lt,&gt,0 THEN (*Если файл открыт*) iBusy:=2, (*Сдвиггаем флаг процесса записи*) fbFileOpen.bExecute:=FALSE, END_IF END_IF IF iBusy=2 THEN (*Процесс записи 2: Формируем строку*) fbGetSystemTime(timeLoDW=&gt,fileTime.dwLowDateTime, timeHiDW=&gt,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&gt,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
  • Вы должны войти в систему, чтобы ответить в этой теме.
Интepecнoe нa фopумe:
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля
×