Здравствуйте. Пришлось создать свой контроллер с обменом по Модбас RTU. Смысл контроллера: собрал данные с 7 датчиков, разместил их в регистрах. Параллельно в другой группе регистров разместил статусы датчиков. Контроллер всегда slave. Используются только две стандартные функции: - чтение Holding-регистров (код функции 0х03), допускается только чтение; - запись в одиночный Presect-регистр (код функции 0х06), допускается только запись.
Данные - float, статусы(обрыв, переполнение и проч.) - UINT. Мною в программе девайса установлены ограничения: - количество регистров при чтении данных- 2 - при чтении статусов - 1 - при записи - 1. Да, расположение байтов в float-числах в стандарте HB-Controller (Litle-Endian).
При проверке с компом, на котором установлен Мастер-симулятор - все четко работает, читаются требуемые значения, коды статусов, записываются требуемые коды в соотв. регистры. При этом - только при условии соблюдения соответствующего количества регистров в запросах Мастера, что, собственно и неудивительно.
Проблема в следующем: попробовал подключить к СКАДе Zenon (от COPA DATA), создавая простейший рантайм. Скажу сразу - в СКАДАх не силен, недавно прошел "курс молодого бойца", умею создавать небольшие проекты в Zenon-е. Ситуация такая: - сначала создал всего лишь одно числовое поле для float-значений . СКАДА общается с моим девайсом, все ОК; - создал второе поле для UINT-значений. СКАДА общается с девайсом (видно по светодиоду), но ничего не отображает, типа ошибка. Потанцевал с бубном, установив в настройках "Maximum block size" - 2 (я так понимаю 2 регистра при запросе) - радость! отображаются оба значения. Но радость была недолгой. При попытке добавить в проект Zenon-а следующие подобные числовые поля - снова перестали отображаться значения. И танцы вокруг смены чисел в "Maximum block size" ничего не дали. Да, сразу скажу, что все с адресами драйвер переменных, заданных СКАДе - в порядке, тип переменных - тоже установлен правильно.
Вопросы: может быть количество числовых полей (ну, или переменных, тэгов) автоматически задает в поле запроса количество считываемых подряд регистров из слэйва? И СКАДА читает все одним потоком? (тогда мне придется корректировать прогу контроллера). Просто об этом я инфы вразумительной нигде не нашел. Или я чего-то не так устанавливаю в настройках в СКАДЕ? Все ли (или большинство) СКАД читают все одним потоком и не позволяют читать поочередно одиночные значения из Holding-регистров слэйва?
Прошу знатоков подсказать, где я наступаю на грабли. Или посоветовать как быть в такой ситуации. У меня задача - чтобы контроллер (естественно, при моем подробном описании его в паспорте) легко мог быть использован потребителями для как можно большего числа разновидностей СКАД. Не сочтите за наглость. Спасибо!
|