Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроллер собственной разработки и СКАДА
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
olki
Здравствуйте.
Пришлось создать свой контроллер с обменом по Модбас 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-регистров слэйва?

Прошу знатоков подсказать, где я наступаю на грабли. Или посоветовать как быть в такой ситуации.
У меня задача - чтобы контроллер (естественно, при моем подробном описании его в паспорте) легко мог быть использован потребителями для как можно большего числа разновидностей СКАД. Не сочтите за наглость.
Спасибо!

WRybkin

"Мною в программе девайса установлены ограничения:
- количество регистров при чтении данных- 2
- при чтении статусов - 1
- при записи - 1."


Все проблемы начинаются, когда появляются отступления от стандартного протокола. Если Вы сумели написать программу обмена по модбас, у Вас не должно быть проблем с созданием единственного ограничения - ответ (буфер для передачи) не длиннее 255 байт. В Вашем случае даже меньше, байт 40 хватит. Зачем самому себе подставлять грабли и спрашивать, каким путём их лучше обойти?
Олег_
Модбас пакетный протокол, желательно читать все данные одним запросом, т.е. реальная скорость обмена со всеми приборами обычно важна.
и не только скады будут пытаться вместо кучи запросов слать всего один, если номера регистров идут подряд.

Обойти это можно, раскидав номера регистров с каким то интервалом, но я бы такое не купил.
Кстати такую хрень встречал на каких то модулях ОВЕН.

Цитата
- чтение Holding-регистров (код функции 0х03), допускается только чтение;
...................................
- при чтении статусов - 1

Вообще не феншуйно. Какие огранияения ставить в мастерах, чтобы он часть регистров читал по два, другую часть по одному, одним и тем же кодом 03? (только раскидать адреса подальше друг от друга, чтобы половина людей не покупали ваш прибор)

не забудьте проверить живучесть обмена с несколькими вашими и не вашими приборами в сети. Написать шустрого RTU слейва не так просто, например в Овене не смогли.
spectrum48k
автор, установи Lectus Modbus OPC/DDE сервер для отладки. 30 дней работает бесплатно, потом по 30 минут (перезапуск). В Лектусе есть возможность гибко настраивать варианты опроса и ведется лог запросов-ответов и мониторинг текущих значений
WRybkin
Цитата(Олег_ @ 27.8.2014, 10:17) *
не забудьте проверить живучесть обмена с несколькими вашими и не вашими приборами в сети. Написать шустрого RTU слейва не так просто, например в Овене не смогли.


Делал слейва RTU на Mege. При корректном использовании прерываний время от конца получения команды до начала ответа легко уменьшить до 10-50 мкс, в зависимости от загруженности процессора другими задачами, работающим по прерываниям. Когда я узнал, что стандарт не допускает ответ ранее, чем через 3,5 мс, был неприятно удивлён от таких потерь времени. Когда узнал, что реальные таймауты у Овена 20мс и больше, был в шоке и понял, почему Модбус ругают за низкую скорость обмена.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.