Панель Weintek как слейв MODBUS RTU
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Панель Weintek как слейв MODBUS RTU
Всем привет!
Столкнулся с проблемой "подвисания" обмена данными по Modbus RTU на панели Weintek, которая используется как слейв. Сервером Modbus RTU служит ПЛК Siemens S7-1200 с коммуникационным модулем CM 1241 (RS422/485). В обмене данными, в качестве слейва, участвует еще одно устройство, измерительный блок, измеряющий физические параметры среды и передающий их посредством Modbus RTU. Когда панель работает одна, проблем нет. Когда панель отключена и в обмене участвуют ПЛК и блок (или два блока), проблем тоже нет. Но при включении в обмен панели, на сервере постоянно возникает ошибка "Slave timeout" при ее опросе (хелп рекомендует проверить целостность проводов, правильность подключения, параметры порта и т.д.). Ну, с этим все ясно, настройки коммуникации для всех устройств одинаковы. Но... все равно, не понятно, в чем же тут дело? У кого-нибудь может было что похожее и как с этим бороться?
Столкнулся с проблемой "подвисания" обмена данными по Modbus RTU на панели Weintek, которая используется как слейв. Сервером Modbus RTU служит ПЛК Siemens S7-1200 с коммуникационным модулем CM 1241 (RS422/485). В обмене данными, в качестве слейва, участвует еще одно устройство, измерительный блок, измеряющий физические параметры среды и передающий их посредством Modbus RTU. Когда панель работает одна, проблем нет. Когда панель отключена и в обмене участвуют ПЛК и блок (или два блока), проблем тоже нет. Но при включении в обмен панели, на сервере постоянно возникает ошибка "Slave timeout" при ее опросе (хелп рекомендует проверить целостность проводов, правильность подключения, параметры порта и т.д.). Ну, с этим все ясно, настройки коммуникации для всех устройств одинаковы. Но... все равно, не понятно, в чем же тут дело? У кого-нибудь может было что похожее и как с этим бороться?
Re: Панель Weintek как слейв MODBUS RTU
Не на сервере, а на клиенте. Точнее мастере.Весенний Программист писал(а):на сервере постоянно возникает ошибка "Slave timeout"
Ну банальный вопрос: Slave ID разный у слейвов? Они должны быть разными.Весенний Программист писал(а):Ну, с этим все ясно, настройки коммуникации для всех устройств одинаковы.
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
Ну да. На мастере. Мне все время хочется мастера обозвать сервером. Slave ID конечно разные, иначе обмена вообще бы не было, наверное. Но данные передаются. В программе слейвы опрашиваются по очереди, сначала запись потом чтение с данного узла, и вот, когда очередь доходит до панели, процесс "подвисает". Бывает, несколько "подходов" к панели проходят без лага. Но все же, ясно что это не нормальная работа.
Re: Панель Weintek как слейв MODBUS RTU
Подвисает или виснет? При каких условиях "развисает"?
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
В общем, провел эксперимент с двумя панелями, условно назовем их №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 начинает сопротивляться?
В общем, придется еще поэкспериментировать.
В обе панели залит один и тот же проект (но 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
.Может быть, в алгоритме программы ПЛК есть какой-то недостаток
Добавьте в программу ПЛК принудительный сброс соединения при превышении таймаута. То есть алгоритм такой - отправка запроса - контроль времени ответа - превышение времени ответа - сброс порта и переход к опросу следующего слейва. Если ответ приходит в течении времени контроля ответа то переход к опросу следующего слейва.
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
Относительно программы, в общем-то, так и есть.
Пробовал вместо ПЛК использовать симулятор мастера 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 сами с собой не дружат.
Пока, как говорится, будем посмотреть. Может быть еще что интересное удастся выяснить.
Пробовал вместо ПЛК использовать симулятор мастера 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
Попробуйте увеличить таймауты до 1 с. Куда так торопиться?Весенний Программист писал(а):Потому что в параметрах как мастера так и порта указано время (response time и wait time) 100 мс.
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
В общем, что-то подобное я делал. Только не таймауты увеличивал. Для управления алгоритмом и более удобного наблюдения за процессом использовал в программе генератор f=0,5 Гц, импульсы которого служили как команда запроса для мастера. И таки оно работало! Причем, увеличение частоты приводило к появлению той же ошибки по таймауту слейва, уже начиная с 0,625 Гц.
Но... сами понимаете, такой хоккей нам не нужен. Панель использовалась еще и для индикации состояния контакторов, и время отклика 2 с - не годится. Да и вообще, это должно работать! Без всяких костылей! Другие девайсы работают, и не жужжат. Будем думать дальше.
Но... сами понимаете, такой хоккей нам не нужен. Панель использовалась еще и для индикации состояния контакторов, и время отклика 2 с - не годится. Да и вообще, это должно работать! Без всяких костылей! Другие девайсы работают, и не жужжат. Будем думать дальше.
Re: Панель Weintek как слейв MODBUS RTU
Попробуйте поиграть со скоростями передачи. Возможно на более низкой или наоборот высокой скорости обмен будет стабильнее.
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
Пробовали уже. Скорость у нас 9,6. Пробовал и побольше, 115,2.
Это без толку, поскольку причина тут в чем-то другом.
Это без толку, поскольку причина тут в чем-то другом.
Re: Панель Weintek как слейв MODBUS RTU
В следующий раз закладывайте панели с Ethernet (iE-серия), все-таки поток информации большой, надо использовать более быстрые интерфейсы.
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
Да в общем-то, и тут есть Ethernet - панель MT8090XE. Но надо использовать modbus и точка.
Только вот, интересное кино получается. Если на ДРУГОМ (!) слейве возникает ошибка касательно протокола modbus, например "Error in the data address or address outside the valid range" (это я пытался вычитать данных больше чем размер буфера слейва), то для панели тут же возникает ошибка "Slave timeout". В связи с этим вопрос (к китайским товарищам, в поддержку) - КАКОЕ ДЕЛО ПАНЕЛИ (КАК ОДНОМУ ИЗ СЛЕЙВОВ) ДО ОШИБОК НА ДРУГОМ СЛЕЙВЕ??? Это наблюдалось как при работе с ПЛК так и с симуляцией мастера на компе.
Роем дальше.
Только вот, интересное кино получается. Если на ДРУГОМ (!) слейве возникает ошибка касательно протокола modbus, например "Error in the data address or address outside the valid range" (это я пытался вычитать данных больше чем размер буфера слейва), то для панели тут же возникает ошибка "Slave timeout". В связи с этим вопрос (к китайским товарищам, в поддержку) - КАКОЕ ДЕЛО ПАНЕЛИ (КАК ОДНОМУ ИЗ СЛЕЙВОВ) ДО ОШИБОК НА ДРУГОМ СЛЕЙВЕ??? Это наблюдалось как при работе с ПЛК так и с симуляцией мастера на компе.
Роем дальше.
Re: Панель Weintek как слейв MODBUS RTU
Один вопрос. Почему панель слейв? Обычно наоборот.
Re: Панель Weintek как слейв MODBUS RTU
По всей видимости потому, что один мастер уже есть. А 2 мастера в последовательном интерфейсе быть не могут.Один вопрос. Почему панель слейв? Обычно наоборот.
Мне кажется, что эти slave нужно разводить. Т.е. контроллер с измерительным блоком работает по одной линии в качестве мастера, а с панелью по другой, в качестве слейва.
Re: Панель Weintek как слейв MODBUS RTU
Weintek - "гений протоколов". Я что-то не могу понять, почему случилась какая-то проблема. Попробуйте Slave ID задать 3 и 4 вместо 1 и 2, например.
Re: Панель Weintek как слейв MODBUS RTU
Мне кажется это все таки преувеличение. У Weintek все хорошо, когда ты находишься в рамках стандартной конфигурации.Weintek - "гений протоколов".
Я как то экспериментировал с Weintek в рамках модели мастер - слейв. Вариант Weinetk - мастер - сработал сразу и без затыков,
обратный у меня запустить не получилось.
Re: Панель Weintek как слейв MODBUS RTU
Я только так и делаю.Т.е. контроллер с измерительным блоком работает по одной линии в качестве мастера, а с панелью по другой, в качестве слейва.
Re: Панель Weintek как слейв MODBUS RTU
А почему, собс-но модбас у вас ассоциируется только с 485? Модбас - протокол, а среда передачи может быть любой...
Вот моя подпись...
-
- Дилетант
- Сообщения: 15
- Зарегистрирован: 09 мар 2019, 00:59
Re: Панель Weintek как слейв MODBUS RTU
Что-то в этом есть... В общем, интересная особенность выявилась. Если адрес блока задавать значениями 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 (коммуникационник Сименса), то эта "особенность" не проявляется (как у панели так и ублока).Михайло писал(а):Weintek - "гений протоколов". Я что-то не могу понять, почему случилась какая-то проблема. Попробуйте Slave ID задать 3 и 4 вместо 1 и 2, например.
В общем, что-то, неровно с модбасом и у панели и у блока.
По вопросу ошибки таймаута на панели при ошибке протокола модбас на другом слейве, ждем ответа от китайской поддержки...