Гуру форума, помогите. Не умею расшифровывать буфер данных из ТРМ202. Опрашиваю ТРМку с ПЛК63 бибкой modbus функцией 3 mb_rd_hold_regs один параметр типа int получить удалось воспользовавшись примером ниже:
Код:
0: (* функция 03 инт - ФБ считывает значение параметра типа int из прибора с адресом 2 в регистр с номером 8 по протоколу Modbus-ASCII*)
get1_modbus(
Enable:=enabl , (* разрешение работы блока *)
Mode:=MB_rtu , (*режим передачи*)
DevAddr:=2 , (*адрес*)
FirstAddr:=1 , (*номер регистра*)
Quantity:=6, (*количество регистров*)
ComHandle:=Settings.Port , (*номер COM-порта*)
TimeOut:=TimeOut , (*Таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
ByteCnt=>DataSize ); (*кол-во считанных байтов *)
(*если установлен признак завершения операции, то *)
IF cmpl THEN
IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)
PV1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8); (*ПОЛУЧИЛ ДАННЫЕ PV1*)
Научите расшифровывать буфер данных типа int, нужны параметры pv2, sp1, sp2.
PV2:=BYTE_TO_WORD(BUFFER[...]) OR SHL(BYTE_TO_WORD(BUFFER[...]),8);
SP1:=BYTE_TO_WORD(BUFFER[...]) OR SHL(BYTE_TO_WORD(BUFFER[...]),8);
SP2:=BYTE_TO_WORD(BUFFER[...]) OR SHL(BYTE_TO_WORD(BUFFER[...]),8);
Правильно ли я понимаю что опросить нужно 6 регистров начиная с 1 и расшифровать 1,2,5 и 6? Какие биты расставить и сдвинуть?
Также получил параметр в формате float однако обнаружил ошибку в карте регистров, согласно карте pv1 соответствует адрес 16#100A, однако по факту 16#100С.