This is topic Передача массива по Modbus TCP с контролем in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Задача: RTM передает массив в PLC, по одному элементу, дополнительно передает индекс элемента в массив - PLC должен восстановить массив у себя в памяти.
Протокол MOdbus.
Вопрос: как передать в PLC массив чисел, и при этом быть уверенным, что PLC данные принял верно, не считывая значение из PLC?
Иными словами, существует-ли способ узнать, что данные по Modbus доставлены адресату верно, не производя контрольные считывания тэга в PLC, куда были отправлены данные?
Использование числа Modbus тэгов по числу элементов массива нежелательно, т.к. размер массива может варьироваться и быть большим(в этом случае можно было-бы организовать групповую передачу, но это сильно увеличит количество каналов и источников, и не решает проблему контроля правильности. Вроде...).
Пока только один способ на ум приходит: 1. Отправляем число и индекс по Modbus; 2. Читаем в цикле эти же тэги, до совпадения значений с отправленными; 3. Шлем контроллеру в тэг флаг "Данные выставлены" 4. Ждем от PLC ответ (в тэге) "Данные получены" 5. Снимаем флаг "Данные выставлены"; 6. Ждем снятия флага "Данные получены" 7. Цикл передачи с контролем закончен, на п. 1.
Смахивает на перевозку одной картошки "Камазом". Может можно проще?
З.Ы. Только не отсылайте меня к изучению спецификации на Модбас, пальцем покажите плиз .
Posted by AI (Участник № / Member № 3594) on :
Я у себя проверяю по контрольной сумме. Со скады отправляю пакет информации и в двух регистрах - контрольную сумму и счетчик запросов. На контроллере считаю сумму и сравниваю с контрольной. Если совпадает, значит данные пришли верно и в обратную связь выставляю полученный счетчик. Скада запускает таймер и смотрит, если за отведенное время пришел нужный счетчик в обратной связи, значит данные получены, если нет то -таймаут. (кроме счетчика пересылается и код ошибок, если конфигурационные данные были неверные).
Posted by Поляков Илья (Участник № / Member № 3358) on :
Как пакет отправляете?
Posted by AI (Участник № / Member № 3594) on :
Я для обмена информацией выделил десяток регистров для записи и для чтения (как на скаде, так и на контроллере). В зависимости от кода команды (чтение конфигурации оборудования/сигнала/регулятора и т.п., запись конфигурации) я записываю туда нужные данные, код команды, индекс переменной/оборудования, счетчик команд и контрольную сумму. На контроллере читаю эти регистры, считаю контрольную сумму и сравниваю с контрольной, которая пришла со скады. Если всё ОК, распихиваю значения регистров в соответствующие переменные и посылаю в обратную связь на скаду счетчик, который пришел.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Справка Обмен по протоколу MODBUS TCP/IP
файл IP_modBus
<произвольное_число> CSC
отработка пакетов ответа от контроллеров, формирующих контрольную сумму во фрагменте Modbus-пакета Modbus/TCP (по стандарту в части пакета TCP, отведенного под Modbus, контрольная сумма не формируется). По умолчанию, монитор не создает эту строку в файле IP_modBus.
Пример: 2 CSC
Posted by Поляков Илья (Участник № / Member № 3358) on :
AI! Спасибо! Все понятно.
Хелп изучаю, ответы на вопросы похоже нашел. Поторопился с постом. Спасибо!
Posted by siver.1998 (Участник № / Member № 9213) on :
Добрый день. имеется проект с графическим экраном, требуется попробовать передать с другого компьютера по TCP/ip данные. Не получается передать данные, хотя атрибут А изменяет значения и обнуляется
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Уточните, по какому протоколу из какого ПО будут передаваться данные, какие данные? Опишите более подробно.