Юрий_66 вас не удивляет, что в ответе CRC в правильной последовательности, а в запросе в неправильной ПРИ ОДИНАКОВОМ КОДЕ РАСЧЕТА?
я про документацию, которую составляли люди... Адрес устройства у вас 11, что вы мучаете OPC сервер и все остальное?
Юрий_66 вас не удивляет, что в ответе CRC в правильной последовательности, а в запросе в неправильной ПРИ ОДИНАКОВОМ КОДЕ РАСЧЕТА?
я про документацию, которую составляли люди... Адрес устройства у вас 11, что вы мучаете OPC сервер и все остальное?
Теоретически - понятно. А практически пока не получается реализовать.
С КТР-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 ];
Так у него проблема не в том, что данные перевернуты, а в то, что перевернуты данные в самом протоколе в CRC. А это внутренний механизм самого протокола, и ТС просит показать, где в настройках это перевернуть, если это есть. А вы ему предлагаете функцию для переворачивания данных в слове. Как он её воткнет во внутренний протокол кодесиса?
Существует вероятность, что это опечатка или ТС ошибся, но тут 50 на 50.
Перевёрнутые байты в CRC стали Китайцы часто делать! Несколько раз уже это встречал: обычный Modbus, но CRC перевёрнуто!
Да ничего там на перевёрнуто, простая ошибка документации, все должно быть ровно.
Здравствуйте.
Столкнулся с проблемой, которую не понимаю как решать. Суть в следующем: Имеем СПК107 m01 + переферия из разных внешних модулей. Для организации обмена с SCADA добавил ModbusTCP_Slave_Device. Чтобы holding регистры и coils стали доступны для изменения из программы контроллера, устанавливаю галочку "Запись" в настройках компонента Modbus TCP Slave Device. При компиляции возникает ошибка -
"[ERROR] Internal error:System.IndexOutOfRangeException: Индекс находился вне границ массива. в _3S.CoDeSys.DeviceObject.DoubleAddressChecker.Chec kByte(Int64 lStartBit)................
Компиляция завершена -- 1 ошибок, 95 предупреждений : загрузка невозможна"
галочку "Запись" убираю, компиляция проходит без ошибок, но теряю возможность записыватьть в регистры со стороны slave-устройства. Как решить данную проблему? Спасибо заранее.
Простой вопрос к опытным программистам.
Поменять "слова", типа xSwapWord, можно только через "Функция SWAP_DATA" (раздел 5.8.5 "CODESYS V3.5 Настройка обмена по протоколу Modbus", версия 3.2) ?
Или есть другие инструменты?