Здравствуйте.
Столкнулся с непонятным явлением. Исходный текст:
VAR_OUTPUT
Rate:REAL; (* рабочий расход *)
NormRate:REAL; (* нормализованный расход *)
Pressure:REAL; (* давление *)
Temperature:REAL; (* температура *)
TimeError:WORD; (* нерабочее время *)
Acc:BYTE; (* признак ошибки по питанию *)
END_VAR
VAR
Response:STRING[1024]; (* буфер для приёма данных, считанных с порта *)
pnt_Data_Byte:POINTER TO BYTE;
pnt_Data_Word:POINTER TO WORD;
pnt_Data_Real:POINTER TO REAL;
END_VAR
(************************************************* *********************************)
(************************************************* *********************************)
(* если добрались до сюда, то извлекаем данные из ответа *)
pnt_Data_Real:= ADR(Response)+15;
(*!!!*) Rate:= pnt_Data_Real^;
pnt_Data_Real:= pnt_Data_Real+4;
NormRate:= pnt_Data_Real^;
pnt_Data_Real:= pnt_Data_Real+4;
Pressure:= pnt_Data_Real^;
pnt_Data_Real:= pnt_Data_Real+4;
Temperature:= pnt_Data_Real^;
pnt_Data_Word:= ADR(Response)+31;
TimeError:= pnt_Data_Word^;
pnt_Data_Byte:= ADR(Response)+33;
Acc:=pnt_Data_Byte^;
Когда программа выполняет строку, помеченную восклицательными знаками, контроллер пикает и перезагружается, а CoDeSys выбрасывает окно обрыва коммуникации. Причем, все четыре байта, на которые в этот момент указывает pnt_Data_Real равны нулю, это я проверил.
В чём может быть дело?
Проект на текущий момент.
Опрос Гобой-1 ПЛК 100 Р.rar