Страница 1 из 2

Панель Weintek как слейв MODBUS RTU

Добавлено: 09 мар 2019, 18:30
Весенний Программист
Всем привет!
Столкнулся с проблемой "подвисания" обмена данными по Modbus RTU на панели Weintek, которая используется как слейв. Сервером Modbus RTU служит ПЛК Siemens S7-1200 с коммуникационным модулем CM 1241 (RS422/485). В обмене данными, в качестве слейва, участвует еще одно устройство, измерительный блок, измеряющий физические параметры среды и передающий их посредством Modbus RTU. Когда панель работает одна, проблем нет. Когда панель отключена и в обмене участвуют ПЛК и блок (или два блока), проблем тоже нет. Но при включении в обмен панели, на сервере постоянно возникает ошибка "Slave timeout" при ее опросе (хелп рекомендует проверить целостность проводов, правильность подключения, параметры порта и т.д.). Ну, с этим все ясно, настройки коммуникации для всех устройств одинаковы. Но... все равно, не понятно, в чем же тут дело? У кого-нибудь может было что похожее и как с этим бороться?

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 10 мар 2019, 14:37
Михайло
Весенний Программист писал(а):на сервере постоянно возникает ошибка "Slave timeout"
Не на сервере, а на клиенте. Точнее мастере.
Весенний Программист писал(а):Ну, с этим все ясно, настройки коммуникации для всех устройств одинаковы.
Ну банальный вопрос: Slave ID разный у слейвов? Они должны быть разными.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 10 мар 2019, 17:23
Весенний Программист
Ну да. На мастере. Мне все время хочется мастера обозвать сервером. Slave ID конечно разные, иначе обмена вообще бы не было, наверное. Но данные передаются. В программе слейвы опрашиваются по очереди, сначала запись потом чтение с данного узла, и вот, когда очередь доходит до панели, процесс "подвисает". Бывает, несколько "подходов" к панели проходят без лага. Но все же, ясно что это не нормальная работа.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 10 мар 2019, 19:03
Михайло
Подвисает или виснет? При каких условиях "развисает"?

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 11 мар 2019, 20:00
Весенний Программист
В общем, провел эксперимент с двумя панелями, условно назовем их №1 (с ней работал раньше) и №2 (была добавлена).
В обе панели залит один и тот же проект (но Slave ID у каждой свой). Панель пересылает значение своего системного тега LW-9017 (local second) в тег, который затем читает мастер.

Так вот, наблюдая в TIA Portal за буфером панели №2 вижу счетчик секунд панели, который "подвисает" аж на 7 секунд, т.е. значения отображаются с разрывом - 0, 7, 14, 21 и т.д. И на мастере ошибка "Slave timeout".

Но, в то же время, счетчик панели №1 читается без видимых задержек. Т.е., видимое изменение значений секунд наблюдается как и положено с секундным интервалом (здесь подчеркну слово видимое). Потому что в параметрах как мастера так и порта указано время (response time и wait time) 100 мс. Я так понимаю, за это время слейв должен ответить мастеру. Иначе на мастере возникает ошибка "Slave timeout".
Т.е., мастер все-таки опрашивает панель №1 без задержек (точнее с лагом 100 мс из-за таймаута на на панели №2), в то же время при опросе панели №2 в течение 7 секунд(!) попытки оказываются неудачными (выдается ошибка "Slave timeout").

А до этого (в исходном варианте системы), я полагал, что из-за ошибки на панели опрос другого слейва тоже задерживается на это время (где-то 7 секунд). А выходит что это не так.

Пробовал вместо панели №2 использовать симулятор слейва modbus - ошибок нет.
В общем, прояснились некоторые детали, но понятнее не стало. Может быть, в алгоритме программы ПЛК есть какой-то недостаток, из-за которого возникает "неправильное" обращение с мастером и как следствие неадекватное поведение слейвов? Но тогда почему это проявляется только с панелью?
Почему панель №1 в паре с блоком "не хочет" делиться данными с мастером, а в паре с другой панелью работает нормально, зато панель №2 начинает сопротивляться?

В общем, придется еще поэкспериментировать.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 12 мар 2019, 09:25
pkl
Может быть, в алгоритме программы ПЛК есть какой-то недостаток
.
Добавьте в программу ПЛК принудительный сброс соединения при превышении таймаута. То есть алгоритм такой - отправка запроса - контроль времени ответа - превышение времени ответа - сброс порта и переход к опросу следующего слейва. Если ответ приходит в течении времени контроля ответа то переход к опросу следующего слейва.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 12 мар 2019, 16:15
Весенний Программист
Относительно программы, в общем-то, так и есть.

Пробовал вместо ПЛК использовать симулятор мастера modbus - панель №1 работает, панель №2 дает ошибку по таймауту.
Продолжил с дополнительным вторым ПЛК и двумя дополнительными коммуникационниками CM 1241 (RS422/485), выполняющими роль слэйвов (условно назовем CM1 и CM2).
CM1 - использовался вместо панели №1, CM2 использовался вместо панели №2 и измерительного блока.
Для начала попробовал сочетание слэйвов CM1 и CM2.
Результат - все работает. Это более-менее подтверждает адекватность алгоритма.
Сочетание панели №1 и CM2 - работает. Сочетание CM1 и измерительного блока - работает.

По итогу, неработающими вариантами оказались сочетания: В1 - панель №1 и измерительный блок; В2 - панель №1 и панель №2.

В общем, на мой взгляд, с вероятностью близкой к 100% можно утверждать что панели Weintek в качестве слэйвов MODBUS RTU сами с собой не дружат.

Пока, как говорится, будем посмотреть. Может быть еще что интересное удастся выяснить.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 14 мар 2019, 05:07
Михайло
Весенний Программист писал(а):Потому что в параметрах как мастера так и порта указано время (response time и wait time) 100 мс.
Попробуйте увеличить таймауты до 1 с. Куда так торопиться?

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 14 мар 2019, 07:55
Весенний Программист
В общем, что-то подобное я делал. Только не таймауты увеличивал. Для управления алгоритмом и более удобного наблюдения за процессом использовал в программе генератор f=0,5 Гц, импульсы которого служили как команда запроса для мастера. И таки оно работало! Причем, увеличение частоты приводило к появлению той же ошибки по таймауту слейва, уже начиная с 0,625 Гц.
Но... сами понимаете, такой хоккей нам не нужен. Панель использовалась еще и для индикации состояния контакторов, и время отклика 2 с - не годится. Да и вообще, это должно работать! Без всяких костылей! Другие девайсы работают, и не жужжат. Будем думать дальше.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 14 мар 2019, 08:26
pkl
Попробуйте поиграть со скоростями передачи. Возможно на более низкой или наоборот высокой скорости обмен будет стабильнее.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 14 мар 2019, 11:02
Весенний Программист
Пробовали уже. Скорость у нас 9,6. Пробовал и побольше, 115,2.
Это без толку, поскольку причина тут в чем-то другом.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 15 мар 2019, 05:07
Михайло
В следующий раз закладывайте панели с Ethernet (iE-серия), все-таки поток информации большой, надо использовать более быстрые интерфейсы.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 15 мар 2019, 12:31
Весенний Программист
Да в общем-то, и тут есть Ethernet - панель MT8090XE. Но надо использовать modbus и точка.
Только вот, интересное кино получается. Если на ДРУГОМ (!) слейве возникает ошибка касательно протокола modbus, например "Error in the data address or address outside the valid range" (это я пытался вычитать данных больше чем размер буфера слейва), то для панели тут же возникает ошибка "Slave timeout". В связи с этим вопрос (к китайским товарищам, в поддержку) - КАКОЕ ДЕЛО ПАНЕЛИ (КАК ОДНОМУ ИЗ СЛЕЙВОВ) ДО ОШИБОК НА ДРУГОМ СЛЕЙВЕ??? Это наблюдалось как при работе с ПЛК так и с симуляцией мастера на компе.
Роем дальше.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 15 мар 2019, 14:29
pkl
Один вопрос. Почему панель слейв? Обычно наоборот.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 15 мар 2019, 22:39
petr2off
Один вопрос. Почему панель слейв? Обычно наоборот.
По всей видимости потому, что один мастер уже есть. А 2 мастера в последовательном интерфейсе быть не могут.
Мне кажется, что эти slave нужно разводить. Т.е. контроллер с измерительным блоком работает по одной линии в качестве мастера, а с панелью по другой, в качестве слейва.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 16 мар 2019, 04:41
Михайло
Weintek - "гений протоколов". Я что-то не могу понять, почему случилась какая-то проблема. Попробуйте Slave ID задать 3 и 4 вместо 1 и 2, например.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 16 мар 2019, 06:23
petr2off
Weintek - "гений протоколов".
Мне кажется это все таки преувеличение. У Weintek все хорошо, когда ты находишься в рамках стандартной конфигурации.
Я как то экспериментировал с Weintek в рамках модели мастер - слейв. Вариант Weinetk - мастер - сработал сразу и без затыков,
обратный у меня запустить не получилось.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 18 мар 2019, 08:19
pkl
Т.е. контроллер с измерительным блоком работает по одной линии в качестве мастера, а с панелью по другой, в качестве слейва.
Я только так и делаю.

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 19 мар 2019, 08:15
mr_Frodo
А почему, собс-но модбас у вас ассоциируется только с 485? Модбас - протокол, а среда передачи может быть любой...

Re: Панель Weintek как слейв MODBUS RTU

Добавлено: 19 мар 2019, 10:25
Весенний Программист
Михайло писал(а):Weintek - "гений протоколов". Я что-то не могу понять, почему случилась какая-то проблема. Попробуйте Slave ID задать 3 и 4 вместо 1 и 2, например.
Что-то в этом есть... В общем, интересная особенность выявилась. Если адрес блока задавать значениями 1, 2, 4, 8, 16,.., и т.д. то ошибка "Slave timeout" на панели возникает. Если посмотреть на эти значения вооруженным глазом, то можно увидеть что в двоичном представлении их значения 2#0000_0000_0000_0001, 2#0000_0000_0000_0010, 2#0000_0000_0000_0100, 2#0000_0000_0000_1000, 2#0000_0000_0001_0000,... Такое чувство, что кто-то из устройств "не замечает" байт из нулей в слове адреса. А может еще как-то неправильно интерпретируется адрес в таком виде. Причем, это происходит в паре с блоком в качестве второго слейва. Если же вторым слейвом взять, например, CM2 (коммуникационник Сименса), то эта "особенность" не проявляется (как у панели так и ублока).
В общем, что-то, неровно с модбасом и у панели и у блока.
По вопросу ошибки таймаута на панели при ошибке протокола модбас на другом слейве, ждем ответа от китайской поддержки...