Просмотр полной версии : Передача команд ПЛК, как значений регистров.
Идея следующая. Из программы команда передается как ряд значений для двух и более регистров (функцией WriteMultipleRegisters, 0x17). В первый регистр пишем код команды, в последующие - ее параметры. На ПЛК из определенного регистра получаем код команды, на основании него снимаем значения параметров из остальных регистров, исполняем команду и обнуляем регистры.
Судя по протоколу такой метод достаточно надежен и ситуации, когда часть параметров запишется в одной итерации цикла исполнения, а другая в следующем, возникнуть не должно. Я правильно понимаю?
Запись, как мне кажется, транзакционна, да. но если ответ от ПЛК придет до того, как команда будет исполнена, то из программы может прийти следующая команда. А потом еще одна. Короче, если ответы формируются на уровне "драйвера" Модбаса по записи в регистры, можно прозевать команду. Как ьы не пришлось опрашивать ПЛК на предмет готовности к приему новой команды.
Как бы не пришлось опрашивать ПЛК на предмет готовности к приему новой команды.
Да, действительно.
Write Multiple Registers 16 (0x10)
Точно. 0x17 - это Read/Write Multiple registers. И в выбранной мною библиотеке для записи используется она. Надо разобраться, почему автор ее выбрал.
Надо разобраться, почему автор ее выбрал.
Чтоб читать/писать за раз. Чего разбиратся то. Тока эта нестандартная функция - а значит не все слейвы поддерживают ((
Запись, как мне кажется, транзакционна, да. но если ответ от ПЛК придет до того, как команда будет исполнена, то из программы может прийти следующая команда.Просто не надо этот подход использовать для пакетной передачи большого числа команд. А небольшое число можно передавать с заведомо большим интервалом. Работает нормально, есть опыт (http://owen.ru/forum/showthread.php?t=22311&p=182227#post182227).
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot