Последний раз редактировалось kondor3000; 08.01.2024 в 14:02.
Вот скрин "OPC Server". изображение_2024-01-08_113344340.png На нём видно что CRC передаётся старшим байтом вперёд =24А0=, а нужно =А024=.
Вот скрин прослушивания линии "Terminal V1.9", изображение_2024-01-08_114011482.png Здесь видим тоже самое.
еще раз, в калькулятор и запрос и ответ и вы поймете, что в документации ошибка. ошибка в данных CRC
а потом правильные посылки в парсер Modbus и увидите, что запрос вполне адекватный протоколу.
В ответе так же CRC идёт младшим байтом вперёд. изображение_2024-01-08_134413328.png
Предполагаю что это не ошибка, а протокол от "SIEMENS". И для работы с LMV+AZL его надо выполнять.
Последний раз редактировалось Юрий_66; 08.01.2024 в 13:43.
Если не получается как с модбас работать, то придётся писать общение самостоятельно как работу через сокет и прочее. Если просто считывать данные, то там проблем нет, а хотите полноценное общение со всеми плюсами... То придётся руками всё описывать в программе.
Я при общении с нестандартными протоколами жёстко прописываю посылку с требуемой CRC, а при получении ответа не проверяю на правильность. Иначе это затянется на............
Добрый день.
По вашему совету, жёстко прописал посылку и ...
Не могу добиться ответа от LMV5.. (Причём с другими устройствами, ОВЕН КТР-121. Частотники AD800 и VM1000, всё работает. )
Отправляю запрос точно по инструкции:
CRC младшим байтом вперёд - нет ответа,
CRC старшим байтом вперёд - нет ответа,
все байты младшим битом вперёд - нет ответа,
все байты старшим битом вперёд - нет ответа.
Вопрос - что я делаю не так?
Юрий_66 вас не удивляет, что в ответе CRC в правильной последовательности, а в запросе в неправильной ПРИ ОДИНАКОВОМ КОДЕ РАСЧЕТА?
я про документацию, которую составляли люди... Адрес устройства у вас 11, что вы мучаете OPC сервер и все остальное?
Последний раз редактировалось melky; 08.01.2024 в 14:14.
Теоретически - понятно. А практически пока не получается реализовать.
С КТР-121 всё получилось нормально стандартными средствами. КТР опрашивается и на СПК выводятся данные.
Всем спасибо за ответы. Буду разбираться.
Пример функции перестановки байт в регистре, точно так же можно например, переставить регистры (байты) в переменной FLOAT (только тип переменных поменять)
Код:FUNCTION Sw_Byte : WORD //выход функции с переставленными Byte VAR_INPUT wIn : WORD ; //входная переменная типа Word END_VAR VAR pInput : POINTER TO ARRAY[0..1] OF BYTE; // вспомогательные переменные pOutput : POINTER TO ARRAY[0..1] OF BYTE; END_VAR ____________________________________________________________________________ pInput :=ADR(wIn); pOutput := ADR( Sw_Byte); pOutput^[ 0 ] := pInput^[ 1 ]; // Перестановка BYTE местами pOutput^[ 1 ] := pInput^[ 0 ];
Последний раз редактировалось kondor3000; 08.01.2024 в 16:49.