PDA

Просмотр полной версии : Сбой обмена по 485 Modbus СПК107[M01]



MagNetiC
26.11.2020, 09:10
Здравствуйте. Стоит панель СПК107[M01] 1.2.0803.1220 таргет 3.5.14.30-10, (на панелях с прошивкой 1.2.0623.1009 такая же ситуация).
Панель настроена в Slave 485-1, адрес 10.
Master ПЛК обменивается с панелью раз 2 сек. двумя сообщениями пример:
1) 0A 04 00 00 00 14 F1 7E
2) 0A 10 00 00 00 49 92 FF FF FF FF FF FF FF FF 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 01 41 BD 41 C7 00 02 00
02 5A FB 48 3E 48 0D 00 01 00 00 00 00 00 00 00 01 00 01 00 02 FF 98 FF 98 FF 98 FF 98 57 9B 55 55 57 9B 55 55 55 55 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AE
13 61 47 38 51 3E 85 7F FF 00 00 00 00 00 00 00 00 00 00 01 03 53 E5
После перезагрузки СПК, СПК перестает отвечать на данные сообщения. Пока не отключить 485, перезагрузить СПК, и обратно подсоединить 485.
Получается если во время перезагрузки СПК на порт 485 прилетают эти сообщения, после загрузки исполнительной программы СПК перестает отвечать.
В CODESYS не нашел ошибок в работе Modbus, SerialPort.

Если временно не отсылать 2-ой запрос 0A 10 00 00 00 49 ......, а ждать пока СПК ответит на первый запрос, обмен не прекращается. Сложность в том, что на некоторых объектах нет возможности изменить прошивку ПЛК, со старыми панелями СПК все работает нормально.

MagNetiC
26.11.2020, 11:30
Пауза выдерживается в основном 2-3 сек между первым и вторым запросом. Даже если поставить как на скрине 6-10 сек. обмен прекращается, спк перестает отвечать до перезагрузки.

Если больше 10 сек. примерно, во время перезагрузки спк, не успевают отправится за это время запросы, и панель нормально работает. Но 10 сек ждать обновления показаний датчиков тоже не вариант.)

Евгений Кислов
26.11.2020, 11:33
Добрый день.

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

После перезагрузки СПК по питанию все продолжает работать корректно - без каких-либо проблем.

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

MagNetiC
26.11.2020, 11:55
(а откуда тогда такие посылки)
на 25 сек. 0A 04 00 00 00 14 F1 7E - Запрос без ответа
на 27 сек запрос с ответом.

На рис Прослушка_MB3.png запросы без ответов.
(по интерфейсу приходит помеха) на вряд ли! Экранированный кабель длинна не больше метра. После "остановки" обмена на прямую подключаюсь USB-485 к панели и она не отвечает на другие запросы. В принципе на скрине я USB-485 слушаю интерфейс.

Евгений Кислов
26.11.2020, 12:06
После "остановки" обмена на прямую подключаюсь USB-485 к панели и она не отвечает на другие запросы.

А если переинициализировать COM-порт?
http://www.owen.ru/forum/showthread.php?t=28167&p=272286&viewfull=1#post272286

MagNetiC
26.11.2020, 13:18
А если переинициализировать COM-порт?
http://www.owen.ru/forum/showthread.php?t=28167&p=272286&viewfull=1#post272286

А как переинициализировать COM-порт в режиме Slave?
"поставьте точку и из выпадающего списка выберите нужную переменную диагностики:" в слейве только процедуры как на рис.

Евгений Кислов
26.11.2020, 13:20
Да, вы правы - для слэйва в текущих версиях так сделать нельзя. Я об этом забыл.
Тогда предлагаю для теста поднять слэйв через библиотеку OwenCommunication - его переинициализировать можно без проблем:
https://youtu.be/NzDdo6Hllm8

MagNetiC
27.11.2020, 09:20
Попробовал повторить вашу ситуацию.
Настроил на СПК слэйв, запустил на ПК ModbusTester..........
После перезагрузки СПК по питанию все продолжает работать корректно - без каких-либо проблем.

ModbusTester вроде не отправляет запрос на запись, если не считал в первом запросе? Снял вторую панель, подключил на прямую к USB-485 к компу и эмитировал программно запросы на запись во время перезагрузки, на скрине тот же сбой.
При небольшом запросе не всегда происходит сбой. ИМХО сбой происходит при перезагрузке когда приходит запрос в какое-то неподходящее время или переполнение каково то буфера т.к. при небольшом количестве запросов сбой не повторяется.


Тогда предлагаю для теста поднять слэйв через библиотеку OwenCommunication - его переинициализировать можно без проблем:


можно переинициализировать? В библиотеке OwenCommunication у OCL.COM_Control и OCL.MB_Serial_ Slave не нашел функции переинициализации, возможно только попробовать вкл\выкл блоков xEnable. Возможно по позже попробую,на данный момент времени не хватает.


В Итоге пока 3 решения:
1) Не отправлять запросы на запись 0x10 вовремя перезагрузки и до ответа СПК (правда есть проекты где панель работает только на отображение информации, и используется только эта функция)
2) Прошить СПК в версию 1.1.0611.1056 (на этой версии все работает без проблем)
3) Ждать исправления в след.прошивках, если данный сбой еще где-нибудь выявится.

Евгений Кислов
27.11.2020, 09:45
ModbusTester вроде не отправляет запрос на запись, если не считал в первом запросе?

Отправляет.



возможно только попробовать вкл\выкл блоков xEnable.

Да, я имел в виду именно это.


Ждать исправления в след.прошивках, если данный сбой еще где-нибудь выявится.

Чтобы исправить - нужно воспроизвести.
Я пока, к сожалению, не понимаю, как это сделать.


2) Прошить СПК в версию 1.1.0611.1056 (на этой версии все работает без проблем)

Я бы не рекомендовал это решение - если действовать неаккуратно, то можно окирпичить прибор.
См. здесь:
https://owen.ru/forum/showthread.php?t=28167&p=334198&viewfull=1#post334198

В следующей прошивке обратной совместимости с SP11 не будет.

MagNetiC
27.11.2020, 13:25
Чтобы исправить - нужно воспроизвести.
Я пока, к сожалению, не понимаю, как это сделать.


Ну может кто-то еще попробует, для этого выложил тестовую прошивку (вырезал все лишнее), запрос (без контрольной сумма CRC-16 программа сама рассчитает), соединил 485-1 с преобразователем USB на комп. запрос отправлял раз 2 сек. из программы termite от s2-team, после чего не останавливая опрос перезагружал СПК по питанию.
Настройки на скрине.

Евгений Кислов
27.11.2020, 14:05
Мы проведем тест с вашим проектом, запросом и утилитой в начале след. недели.

Евгений Кислов
30.11.2020, 13:17
Мы смогли воспроизвести у себя описываемую вами ситуацию.
Пока можно только сказать, что она как-то связана с содержимым запроса - если все записываемые регистры имеют нулевые значения, то проблема не повторяется.
Я бы рекомендовал вам попробовать разбить этот запрос на несколько отдельных.

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