Здравствуйте, коллеги.

Есть задача написать проект полностью на ST. Приходится мучиться с опросом блоков, открытием портов и т.д.

не могу кое с чем разобраться. Помогите пожалуйста. В коде снизу опрашиваю блок МВ110-8а по модбас. Компиляцию проходит, но проверить правильность я не могу.

(*Объявил переменные, как в примерах*)

Ia1: REAL; (*считанное значение,вход 1*)
Ia2: REAL; (*считанное значение,вход 2*)
Ia3: REAL; (*считанное значение,вход 3*)
Ia4: REAL; (*считанное значение,вход 4*)
Ia5: REAL; (*считанное значение,вход 5*)
Ia6: REAL; (*считанное значение,вход 6*)
Ia7: REAL; (*считанное значение,вход 7*)
Ia8: REAL; (*считанное значение,вход 8*)

ptr_D:POINTER TO BYTE;


(* функция 03 флоат - ФБ считывает значение параметра типа int из прибора с адресом 16 из регистра с номером 4 по протоколу Modbus-ASCII *)
mv110_modbus(
Enable:=enabl , (* разрешение работы блока *)
Mode:=MB_ASCII , (*режим передачи*)
DevAddr:=16 , (*адрес блока*)
FirstAddr:=4 , (*номер регистра*)
Quantity:=43, (*количество регистров*)
ComHandle:=Settings.Port , (*номер COM-порта*)
TimeOut:=TimeOut , (*Таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
ByteCnt=>DataSize ); (*кол-во считанных байтов *)
(*если установлен признак завершения операции, то *)
IF cmpl THEN
IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа FLOAT*)
(*1й вход,регистр 4,5 -измеренное значение типа Float*)
ptr_D:=ADR(Ia1);
ptr_D^:=buffer[1];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[0];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[3];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[2];

(*2й вход,регистр 10,11*)
ptr_D:=ADR(Ia2);
ptr_D^:=buffer[13];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[12];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[15];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[14];

(*3й вход,регистр 16,17*)
ptr_D:=ADR(Ia3);
ptr_D^:=buffer[24];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[25];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[27];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[26];

и т.д. Есть ли ошибки?Не совсем понимаю эту конструкцию.