Здравствуйте.
Пришлось создать свой контроллер с обменом по Модбас 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-регистров слэйва?
Прошу знатоков подсказать, где я наступаю на грабли. Или посоветовать как быть в такой ситуации.
У меня задача - чтобы контроллер (естественно, при моем подробном описании его в паспорте) легко мог быть использован потребителями для как можно большего числа разновидностей СКАД. Не сочтите за наглость.
Спасибо!