Юрий_66 вас не удивляет, что в ответе CRC в правильной последовательности, а в запросе в неправильной ПРИ ОДИНАКОВОМ КОДЕ РАСЧЕТА?
я про документацию, которую составляли люди... Адрес устройства у вас 11, что вы мучаете OPC сервер и все остальное?
Юрий_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.
Так у него проблема не в том, что данные перевернуты, а в то, что перевернуты данные в самом протоколе в CRC. А это внутренний механизм самого протокола, и ТС просит показать, где в настройках это перевернуть, если это есть. А вы ему предлагаете функцию для переворачивания данных в слове. Как он её воткнет во внутренний протокол кодесиса?
Существует вероятность, что это опечатка или ТС ошибся, но тут 50 на 50.
Перевёрнутые байты в CRC стали Китайцы часто делать! Несколько раз уже это встречал: обычный Modbus, но CRC перевёрнуто!
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Да ничего там на перевёрнуто, простая ошибка документации, все должно быть ровно.
Здравствуйте.
Столкнулся с проблемой, которую не понимаю как решать. Суть в следующем: Имеем СПК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-устройства. Как решить данную проблему? Спасибо заранее.
Последний раз редактировалось ShivA; 13.01.2024 в 18:39.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Простой вопрос к опытным программистам.
Поменять "слова", типа xSwapWord, можно только через "Функция SWAP_DATA" (раздел 5.8.5 "CODESYS V3.5 Настройка обмена по протоколу Modbus", версия 3.2) ?
Или есть другие инструменты?