1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

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

Закрыто

Автор темы
Flat
Сообщения: 1
Зарегистрирован: 09 сен 2021, 10:03
Имя: Семен

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

Сообщение Flat »

Всем добрый день. Только начал изучение beckhoff.
Необходимо писать логи в файл. Написал функцию, но проблема в том что запись происходит только 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

Sergy6661
read only
read only
Сообщения: 577
Зарегистрирован: 19 фев 2019, 22:38
Имя: Сергей
Страна: Россия
город/регион: Краснодар
Благодарил (а): 17 раз
Поблагодарили: 77 раз

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

Сообщение Sergy6661 »

Flat писал(а): 09 сен 2021, 10:12 Уже все перепробовал. Подскажите кто в курсе.
Вызов ФБ выполнять после проверки условия выполнения "Занято чи ни".
Т.к получается что переход bExecute из 0 в 1 ФБ получает только при первом вызове.
Посмотрите состояние ФБ в онлайне, 100% что bExecute= TRUE.
Закрыто

Вернуться в «Beckhoff»