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

Прочие PLC и HMI на русском
Flat
Posts: 2
Joined: Thu Sep 09, 2021 7:48 am

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

Post by Flat »

Всем добрый день. у меня такая проблема. Написал функцию записи в файл лога, но записывает она почему то только 1 раз при старте программы. При повторном вызове записи не происходит. Ошибок в выходах функциональных блоков нет, новая строка формируется, а запись не идет.
Подскажите куда копать.

Code: Select all

IF iBusy=1 THEN (*Процесс записи 1: *)
	fbFileOpen.sNetId:='5.94.148.102.1.1';(*Необязательная переменная для работы с фалом*)
	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:='5.94.148.102.1.1';(*Необязательная переменная для работы с файлом*)
	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:='5.94.148.102.1.1';(*Необязательная переменная для работы с файлом*)
	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