1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Modbus на ILC 151 ETH

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить

Автор темы
Majesto
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 11 фев 2017, 05:48
Имя: Дмитрий
город/регион: Южно-Сахалинск
Благодарил (а): 2 раза

Modbus на ILC 151 ETH

Сообщение Majesto »

Добрый день. У меня на объекте возникла следующая проблема - весьма нестабильно работает 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 в программе, либо косяк в самом коде программы. Подтвердить первое или найти косяк во втором я не могу - перепробовал уже все. Товарищи специалисты, подскажите где может крыться проблема?

Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 5631
Зарегистрирован: 07 окт 2011, 09:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 600 раз
Поблагодарили: 756 раз

Modbus на ILC 151 ETH

Сообщение Ryzhij »

Обычно делают так, чтобы коммуникационные блоки в программе работали строго по одному, поочередно.
Дело в том, что связь работает абсолютно асинхронно от цикла программы.
Вы в программе приняли меры к этому?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Majesto
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 11 фев 2017, 05:48
Имя: Дмитрий
город/регион: Южно-Сахалинск
Благодарил (а): 2 раза

Modbus на ILC 151 ETH

Сообщение Majesto »

Первоначально делал используя функцию Polling в фениксовской библиотеке. Согласно их мануалу, если активирован Polling - блоки активируются по очереди самостоятельно. Когда обнаружил проблему с записью - попробовал настроить очередность путем создания счетчика и блоков сравнения - эффекта нет, программа работает точно также, запись не идет.
В общем согласен с вами, на других контроллерах всегда организую обмен строго по одному блоку, каждый предыдущий разрешает обмен следующему после исполнения или ошибки. На фениксах всегда использовал Polling, на менее загруженных обменах проблем не возникало.

Автор темы
Majesto
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 11 фев 2017, 05:48
Имя: Дмитрий
город/регион: Южно-Сахалинск
Благодарил (а): 2 раза

Modbus на ILC 151 ETH

Сообщение Majesto »

Рад сообщить что проблема записи параметра решилась. Загвоздка крылась в настройках модуля 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. Мудрено все у Феникса с модбасом...
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»