Показано с 1 по 5 из 5

Тема: Чтение и запись файлов при помощи библиотеки OwenLibFileAsync

  1. #1

    По умолчанию Чтение и запись файлов при помощи библиотеки OwenLibFileAsync

    Доброго дня!

    Обучаюсь работе с файлами на ПЛК110-32 [M02].

    На основе примеров собрал свой минимальный тестовый пример.
    Устанавливаю биты команд записи bWriteFile и чтения bReadFile по которым запускается обмен с файлом.
    Файл разместил в RAM области.
    Для быстрого изменения переменной - удваиваю её установкой бита bDoubleTime.
    Но переменная не восстанавливается.
    Код:
    PROGRAM PLC_PRG
    VAR
    	tTime: TIME;
    	blinkTest: BLINK;
    
    	bReadFile: BOOL;
    	bWriteFile: BOOL;
    	bDoubleTime: BOOL;
    
    	res: ASYNC_RET_VALUE;
    	iResult:DWORD;
    	sFileName:STRING := 'ram:configure.dat';
    
    	iFileReadState:INT;
    	iReadHandle:DWORD:=0;
    	state_resRead: INT;
    
    	iFileWriteState: INT;
    	iWriteHandle: DWORD := 0;
    	state_resWrite: INT;
    END_VAR
    Код:
    (* сохраняемая в файле переменная tTime: её использование и быстрое изменение для теста *)
    blinkTest(enable:=TRUE, timelow:=tTime, timehigh:=tTime);
    (*out:=blinkTest.OUT;*)
    IF tTime<t#500ms THEN
    	tTime := t#500ms;
    END_IF;
    IF bDoubleTime THEN
    	bDoubleTime:=FALSE;
    	tTime:=tTime+tTime;
    END_IF;
    
    (* конечный автомат чтения переменной *)
    CASE iFileReadState OF
    	10: (* ожидание "внешней" команды чтения *)
    		IF bReadFile THEN
    			state_resRead:=20;
    			bReadFile:=FALSE;
    		END_IF;
    	20: (* открытие файла для чтения - 1 этап *)
    		res:=OwenFileOpenAsync(sFileName, 'r', ADR(iReadHandle));
    		IF res=ASYNC_WORKING THEN
    			state_resRead:=30;
    		END_IF;
    	30: (* открытие файла для чтения - 2 этап *)
    		res:=OwenFileOpenAsync(sFileName, 'r', ADR(iReadHandle));
    		IF res=ASYNC_DONE THEN
    			IF iReadHandle<>0 THEN
    	 			state_resRead:=40;
     			ELSE
     				state_resRead:=20;
    			END_IF
    		 ELSIF res<0 THEN
    			state_resRead:=10;
    		END_IF
    	40: (* чтение из файла - 1 этап *)
    		res:=OwenFileReadAsync(iReadHandle,ADR(tTime),SIZEOF(tTime),ADR(iResult));
    		IF res=ASYNC_WORKING THEN
    			state_resRead:=41;
    		ELSE
    			state_resRead:=50;
    		END_IF
    	41:
    		res:=OwenFileReadAsync(iReadHandle,ADR(tTime),SIZEOF(tTime),ADR(iResult));
    		IF res=ASYNC_DONE THEN
    			IF iResult>=0 THEN
    				state_resRead:=50;
    			ELSE
    				state_resRead:=50;
    			END_IF
    		ELSIF res<0 THEN
    			state_resRead:=50;
    		END_IF
    	50: (* закрытие *)
    		res:=OwenFileCloseAsync(iReadHandle,ADR(iResult));
    		IF res=ASYNC_DONE THEN
    			IF iResult=0 THEN
    				state_resRead:=10;
    			ELSE
    				state_resRead:=10;
    			END_IF
    		ELSIF res<0 THEN
    			state_resRead := 10;
    		END_IF;
    ELSE
    		state_resRead:=10;
    END_CASE;
    
    
    CASE iFileWriteState OF
    	10:
    		IF bWriteFile THEN
    			state_resWrite:=20;
    			bWriteFile:=FALSE;
    		END_IF;
    	20:
    		res:=OwenFileOpenAsync(sFileName, 'w', ADR(iWriteHandle));
    		IF res=ASYNC_WORKING THEN
    			state_resWrite:=30;
    		END_IF;
    	30:
    		res:=OwenFileOpenAsync(sFileName, 'w', ADR(iWriteHandle));
    		IF res=ASYNC_DONE THEN
    			IF iReadHandle<>0 THEN
    	 			state_resWrite:=40;
     			ELSE
     				state_resWrite:=10;
    			END_IF
    		 ELSIF res<0 THEN
    			state_resWrite:=10;
    		END_IF
    	40:	(* запись *)
    	res:=OwenFileWriteAsync(iWriteHandle,ADR(tTime),SIZEOF(tTime),ADR(iResult));
    	IF res=ASYNC_WORKING THEN
    		state_resWrite:=41;
    	ELSE
    		state_resWrite:=50;
    	END_IF
    	41: (* запись - 2 этап *)
    		res:=OwenFileWriteAsync(iWriteHandle,ADR(tTime),SIZEOF(tTime),ADR(iResult));
    		IF res=ASYNC_DONE THEN
    			IF iResult>=0 THEN
    				state_resWrite:=50;
    			ELSE
    				state_resWrite:=50;
    			END_IF
    		ELSIF res<0 THEN
    			state_resWrite:=50;
    		END_IF
    
    	50: (* закрытие *)
    		res:=OwenFileCloseAsync(iWriteHandle,ADR(iResult));
    		IF res=ASYNC_WORKING THEN
    			state_resWrite:=51;
    		ELSE
    			state_resWrite:=10;
    		END_IF;
    	51: (* закрытие *)
    		res:=OwenFileCloseAsync(iWriteHandle,ADR(iResult));
    		IF res=ASYNC_DONE THEN
    			IF iResult=0 THEN
    				state_resWrite:=10;
    			ELSE
    				state_resWrite:=10;
    			END_IF
    		ELSIF res<0 THEN
    			state_resWrite := 10;
    		END_IF;
    ELSE
    		state_resWrite:=10;
    END_CASE;
    
    (* обновление стадий чтения или записи *)
    iFileReadState:=state_resRead;
    iFileWriteState:=state_resWrite;
    Не могу понять в какой части ошибка и какая.

  2. #2

    По умолчанию

    Прошу прощения - глупая ошибка.
    При копировании исходника в записи файла на шаге 30 не поменял переменную описателя файла в условии на iWriteHandle.

  3. #3

    По умолчанию

    Подскажите, как сохранять разнородные данные?

    Хотел сделать два массива - указателей на переменные и размеры переменных.
    Но определение указателя требует указания типа. И получается, что массив указателей не соберу.

    Как же поступить, чтобы не сохранять/считывать по одной переменной?

  4. #4
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,318

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Подскажите, как сохранять разнородные данные...
    struct
    ...

  5. #5

    По умолчанию

    Спасибо!
    ......

Похожие темы

  1. Чтение файлов из директории
    от tomas111 в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 18.03.2019, 15:39
  2. ПРОШУ помощи чтение и запись значений.
    от shamilnizaev@mail.ru в разделе Master SCADA 3
    Ответов: 11
    Последнее сообщение: 31.10.2018, 11:21
  3. Чтение файлов в SCADA'е
    от VanoKing в разделе Master SCADA 3
    Ответов: 30
    Последнее сообщение: 08.09.2011, 19:09
  4. Чтение и запись файлов по протоколу ModBus
    от Денис_NTS в разделе Помощь Разработчикам
    Ответов: 23
    Последнее сообщение: 09.08.2011, 07:30
  5. Ответов: 1
    Последнее сообщение: 24.12.2008, 18:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •