Добрый день. У меня на объекте возникла следующая проблема - весьма нестабильно работает Modbus обмен на контроллере ILC 151 ETH.
Исходные данные следующие:
Контроллер ILC 151 ETH, коммуникационный модуль RS-485 используем IB IL RS UNI-PAC, библиотека для работы с модулем Modbus 1.07, скачана с сайта Phoenix Contact. Идет опрос 7 частотников Danfoss FC-202 (по 12 слов с каждого), трех УФ обеззараживателей ЛИТ и одного УПП Danfoss MCD 500. Изначально после организации обмена в программе чтение идет нормально, однако запись параметра уставки (параметр 20-21, пишем 16 функцией 2 слова т.к. параметр 32 битный) не работает, блок возвращает ошибку по тайм ауту. Далее стало только хуже, при увеличении количества блоков обмена - заводил управление каскадным контроллером Danfoss, опрос ДГУ - стали отказывать ранее работающие блоки, причем вообще не выдавая никакой ошибки, просто не опрашиваясь. Обмен организован через Polling на блоках библиотеки. При создании пустой программы только с коммуникацией на неработающие параметры все работает, однако создав на её основе новую программу - все также отключается. Удаление блока Modbus из старой программы и создание его заново - нет эффекта.
Из всего вышеперечисленного я могу сделать только 2 вывода - либо есть ограничения на количество блоков Modbus в программе, либо косяк в самом коде программы. Подтвердить первое или найти косяк во втором я не могу - перепробовал уже все. Товарищи специалисты, подскажите где может крыться проблема?
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Modbus на ILC 151 ETH
-
- почётный участник форума
- Сообщения: 5639
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 602 раза
- Поблагодарили: 760 раз
Modbus на ILC 151 ETH
Обычно делают так, чтобы коммуникационные блоки в программе работали строго по одному, поочередно.
Дело в том, что связь работает абсолютно асинхронно от цикла программы.
Вы в программе приняли меры к этому?
Дело в том, что связь работает абсолютно асинхронно от цикла программы.
Вы в программе приняли меры к этому?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- здесь недавно
- Сообщения: 9
- Зарегистрирован: 11 фев 2017, 05:48
- Имя: Дмитрий
- город/регион: Южно-Сахалинск
- Благодарил (а): 2 раза
Modbus на ILC 151 ETH
Первоначально делал используя функцию Polling в фениксовской библиотеке. Согласно их мануалу, если активирован Polling - блоки активируются по очереди самостоятельно. Когда обнаружил проблему с записью - попробовал настроить очередность путем создания счетчика и блоков сравнения - эффекта нет, программа работает точно также, запись не идет.
В общем согласен с вами, на других контроллерах всегда организую обмен строго по одному блоку, каждый предыдущий разрешает обмен следующему после исполнения или ошибки. На фениксах всегда использовал Polling, на менее загруженных обменах проблем не возникало.
В общем согласен с вами, на других контроллерах всегда организую обмен строго по одному блоку, каждый предыдущий разрешает обмен следующему после исполнения или ошибки. На фениксах всегда использовал Polling, на менее загруженных обменах проблем не возникало.
-
- здесь недавно
- Сообщения: 9
- Зарегистрирован: 11 фев 2017, 05:48
- Имя: Дмитрий
- город/регион: Южно-Сахалинск
- Благодарил (а): 2 раза
Modbus на ILC 151 ETH
Рад сообщить что проблема записи параметра решилась. Загвоздка крылась в настройках модуля IB IL RS UNI PAC и используемой библиотеке. По умолчанию модуль настроен на режим 7 слов, а старая библиотека Modbus 1.07 насколько я понял не умеет работать с режимами 15 и 31 слово. В проекте происходило чтение более чем 7 слов. После переведения DIP переключателей на боковой панели модуля в нужный режим (31 слово) и использования библиотеки Modbus 2.02 все заработало так, как надо. Информация о том, в каком положении должны быть DIP переключатели находится в "Техническом описании" модуля, которое можно скачать с сайта Phoenix Contact. После перевода DIP переключателей из дефолтного положения библиотека Modbus 1.07 более не может работать с модулем, необходима библиотека Modbus 2.0x.
P.S. Мудрено все у Феникса с модбасом...
P.S. Мудрено все у Феникса с модбасом...