Гуру форума, помогите. Не умею расшифровывать буфер данных из ТРМ202. Опрашиваю ТРМку с ПЛК63 бибкой modbus функцией 3 mb_rd_hold_regs один параметр типа int получить удалось воспользовавшись примером ниже:
Научите расшифровывать буфер данных типа int, нужны параметры pv2, sp1, sp2.Код: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*)
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С.


Ответить с цитированием