Коллеги, приветствую!
Что-то я подзапутался в своей задаче, поэтому прошу, если будут какие мысли или критика - изложите плз. Спасибо!
Итак, панель Панель MT8102iE. 20 однотипных устройств, подключение ко всем - Ethernet ModBUS TCP. Задача: опрашивать все, отображать, отчёты и журналы не нужны.
Особенность устройств в том, что они могут отваливаться (выключаться), а то, что устройство подключено и работает, ещё не означает, что оно будет отвечать. В каждом устройстве есть особый регистр, который говорит что данные достоверны и могут быть прочитаны (пока они не достоверны - устройство вообще ничего не ответит на другие запросы, кроме как на запрос этого регистра контроля достоверности).
Соответственно, если всё сделать только стандартными средствами и прямой привязкой объектов к устройствам, отвал хотя бы одного устройства серьезно затормозит работу панели, пока она будет таймауты обрабатывать.
Поэтому, делаю я так:
1. Проверяю, активен ли собственный Ethernet-порт панели, если он не активен то обмен данными запрещён, для всех устройств выставляются флаги "нет связи".
2. Из макросов циклически опрашиваю каждое устройство по адресу регистра контроля достоверности. Если получен ответ "данные достоверны" - выставляется флаг "связь с устройством есть".
3. При наличии флага "связь с устройством есть" выполняется опрос устройства, полученные данные складываются во внутренние регистры панели. Если флага "связь есть" нет, то устройство не опрашивается, а соответствующие регистры панели обнуляются.
4. Все дальнейшие расчёты и отображения графики привязаны только к внутренним регистрам панели.
5. Всё это я делаю скриптами.
Собственно, вопросы таковы. Есть ситуации, когда связь с устройством на момент работы скрипта проверки связи была, но потом пропала и попытка чтения данных неудачна. До тех пор, пока не отработает скрипт контроля связи, панель притормаживает. И второе. Если связи с устройствами нет (нет ответа "данные достоверны"), то и тут панелька притормаживает, спотыкаясь на каждом устройстве. В связи с этим всем главный вопрос: Я всё делаю ручками, а какие всё-таки штатные средства панели можно применить? Может в системных регистрах есть возможность "отключить" устройство (сделать его "Оффлайн"), но при этом контролировать ответ по регистру "данные достоверны")?
И я контролирую связь со всеми 20-ю устройствами в одном скрипте, работающем периодически (1 раз в секунду). Какие таймауты есть смысл выставить в настройках каждого устройства? Мне достаточно одной попытки опроса, после неудачи пытаться ещё раз не надо - нет ответа значит всё, устройства нет. Где задаётся кол-во попыток опроса устройства? И поскольку это 100-мбитный Ethernet, а объём опроса не слишком большой, то и таймаут в 1 секунду считаю избыточным. 0,5 секунды может тоже много.
Попутный вопрос. Как сделать гигабитную связь от панельки до коммутатора? Коммутатор Moxa EDS-508.
Премного благодарен за Ваши мысли по этому поводу!
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Панель MT8102iE - организация связи
Модераторы: Глоб.модераторы, специалисты Weintek