PTP и MODBUS на одном коммуникационнике.

Инженерное программное обеспечение
Ответить
САМ
Любитель
Сообщения: 26
Зарегистрирован: 20 фев 2017, 19:05

PTP и MODBUS на одном коммуникационнике.

Сообщение САМ »

Добрый день всем! (отдельно приветствую "беженцев" с "утонувшего" форума Сименс.ru!)

Не могу решить такую вот проблему.
Имеется простенький стенд на S71214. На ЦПУ установлен модуль СВ 1241 Modbus.
Требуется организовать связь с двумя устройствами - одно со стандартным RS485 и встроенным Modbus на борту, второе с RS232 и протоколом ASCII.
Задача связи самая простая - запрос текущего параметра с приемом ответа.
Все получилось прекрасно - связь с Modbus заработала сразу после конфигурирования и задания параметров, с ASCII пришлось повозиться, использовав преобразователь 232<->485, найдя в библиотеке прием для PTP и преобразование для ASCII. Все делалось по мануалам и техописаниям, "ожило" и начало работать наотлично до тех пор, пока для каждого протокола программа отрабатывалась в отдельных проектах. Но вот с попыткой совместить два канала связи в одном проектом закончилась полным обломом!
Кратко опишу програмку:
1. Прием/передача PTP - использованы ф-ции SEND_PTP + RCV_PTP, настроенные на порт СВ 1241. Функции вызываются один раз в цикле 250 мс.
2. Прием/передача MODBUS - использованы MB_COMM_LOAD + MB_MASTER. Вызываются в том же цикле но с достаточным разнесением (примерно 100 мс) относительно вызова РТР. Повторяю - сами по себе - в разных проектах - оба пункта работают наотлично. В одном проекте MODBUS не работает ну никак!

Что я уже сделал и что выяснил.

1. Что характерно - именно РТР-коммуникация мешает MODBUS и не наоборот. При этом нет именно запросов (не мигает светодиод).
2. Перепробовал обе ф-ции динамической настройки порта PORT_CONF и PORT_config, пытаясь перенастроить порт перед каждым вызовом MODBUS-коммуникации. Потом попробовал вызывать Resive_Reset с той же целью. Безрезультатно.
3. Выяснял как именно РТР мешает работать Модбасу и обнаружил главное - мешает именно ф-ция приема RCV_PTP. Причем даже без запросов - т.е. если SEND_PTP заблокировать, но оставить RCV_PTP, связь MODBUS работать не будет - не будет отправлять запросы. Но стоит удалить или просто заблокировать "нулем" по входу EN ф-цию RCV_PTP, вуаля - связь MODBUS начинает работать, правда только после рестарта ЦПУ. И длаже если включить работу SEND_PTP.
При этом отключение ф-ции RCV_PTP вышеуказанным способом на период работы MODBUS не дает результатов - первый же вызов RCV_PTP затыкает порт для MODBUS до следующего полного перезапуска процессора.

Не знаю теперь даже куда копать... Рассуждаю что RCV_PTP своей работой затыкает порт таким образом, что он становится недоступным для MODBUS коммуникаций....

Чувствую что беда моя в чемто очень простом, и вдвойне обидно, т.к. получилось самое сложное - получить через порт RS485 нужные данные из RS232 с ASCII...

Вобщем, у кого какие мысли, посоветуйте. Заранее благодарю всех небезучастных!

Михайло
Администратор
Сообщения: 4100
Зарегистрирован: 19 сен 2012, 19:16

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение Михайло »

САМ писал(а):Чувствую что беда моя в чемто очень простом, и вдвойне обидно, т.к. получилось самое сложное - получить через порт RS485 нужные данные из RS232 с ASCII...
Простота была в том, что протоколы нельзя перемешивать. Надо было купить два коммуникационных модуля.
Все-таки PTP подразумевает Point-To-Point, работает видимо просто, без оглядки на других.

САМ
Любитель
Сообщения: 26
Зарегистрирован: 20 фев 2017, 19:05

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение САМ »

Михайло писал(а): Надо было купить два коммуникационных модуля.
Все-таки PTP подразумевает Point-To-Point, работает видимо просто, без оглядки на других.
Решил таки проблему. Все, как я и думал, было просто - ф-ция динамической перестройки порта работает, но не консистентно, потому ее надо вызывать на порядка 50 мс раньше вызова MODBUS-коммнуникации.

dis8008
Профан
Сообщения: 3
Зарегистрирован: 02 мар 2017, 19:32

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение dis8008 »

Поздравляю!!!! Отличный результат!!! Сам с подобной проблемой(организовать взаимодействие с Modbus и Modbus-подобными устройствами на RS-485 шине с одного порта ) измучился. Можете подкинуть пример или хотя бы подробнее описать алгоритм/последовательность действий.

САМ
Любитель
Сообщения: 26
Зарегистрирован: 20 фев 2017, 19:05

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение САМ »

dis8008

Наверное я поздновато отвечаю (редко сюда захожу), но если еще актуально, то пример найду и вышлю в виде проектика.
Но появился нюанс, который не позволил применить такой вариант. Дело в том что MODBUS-устройство иногда (у меня раз в несколько секунд) чтото посылает в сеть самопроизвольно. Проявляется сия проблема в том что вот у меня на выходе наблюдается текущая масса от весов работающих по РТР и весов от MODBUS, с MODBUS никаких проблем никогда. А вот в регистре актуального веса от РТР раз в несколько секунд проскакивают совершенно "левые" цифры. Еще хуже дела если выключить во время работы прибор с MODBUS - тогда уже порт контроллера останавливает соединение из-за прекращения ответа от MODBUS-клиента. Короче, я посоветовался с продвинутым в этом вопросе человеком, он сказал что идея кривая изначально и надо докупать модуль под RS-232. Я вышел из ситуации еще проще - договорился с заказчиком что организуем работу участка т.о., что не придется использовать весы с разными протоколами одновременно. Т.е, если при работе с РТР устройством не включать в программе связь с устройством MODBUS - никаких проблем!

Но если у Вас все же есть мотивы "побороться", то можно наверное, что называется, дожать. Пробленма, напоминаю, только с PTP, ему "мешает" MODBUS. Причем кратковременно. Тогда в принципе можно попытаться дописать программу так, чтоб анализировать не сразу принятое значение на выходе, а некую выборку этих значений. Например, организовать массив из 10 значений, сдвигающихся по принципу стека в каждом цикле опроса. Это просто. Чуть сложнее отсеять из массива ошибочные числа. Для этого есть разные алгоритмы. Самые простые - вычислять среднее значение и с его помощью игнорировать результаты, отличающиеся явно. Другой метод - фильтр. Самый простой это когда после каждого нового значения в вышеуказанном массиве вычисляется усредненное значение и флуктуация "толкнет" результат в сторону не на значение ошибки, а на величину в N раз меньшую, где N равно объему выборки. Второй метод чуть проще, стабильнее, но он во-первых, сильно сглаживает результат и потому приемлем лишь лдля медленно изменяющихся процессов (измерение температуры например). К тому же для того чтоб его параметры имели разумные значения, результат надо предварительно ограничивать некоторым "коридором" - диапазоном, достаточно узким. Т.е. если это масса как у меня, то ожидаемый результат может иметь значения от 0 до 5000 например. Сбой в работе РТР-канала может дать все 32767 (или сколько там можно записать в слово). Т.е. предварительно ко всему мне надо написать программный ограничитель типа все значения выше 5000 равны 5000.
Сами видите какие это "танцы с бубном". Но, если это того стоит, можно попробовать.

dis8008
Профан
Сообщения: 3
Зарегистрирован: 02 мар 2017, 19:32

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение dis8008 »

Тема, еще актуальна, хочу попытаться дожать. У меня ситуация несколько проще Вашей. Мне надо чтобы заработал опрос Modbus и Modbus-подобных (у них не совпадают только коды и форматы команд, а адресация и даже подсчет контрольных сумм, как у modbus). Поэтому даже появляющийся мусор (хотя я его не заметил), не блокирует устройства. Я понимаю так, что в одном проходе OB необходимо инициализировать порт под modbus устройства, опросить их, а в следующем инициализировать порт под PtP, опросить Modbus-подобные ус-ва, и.т.д. Вроде так и делаю, но ptp не опрашивает, хотя когда опрос через modbus закоментарю начинает работать.
Пример, можно отправить на dis8008 собака майл.ру

САМ
Любитель
Сообщения: 26
Зарегистрирован: 20 фев 2017, 19:05

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение САМ »

Совершенно верно - MODBUSу ничего не мешает, от телеграмм с другими протоколами страдает только РТР. Одно уточнение. Порт не нужно конфигурировать под РТР, только под MODBUS. Причем делать это желательно не чаще чем один раз после окончания работы РТР (по классике это вообще делается один раз в момент старта контроллера). Лично я начинал с того что задавал периодически опрос медленный, раз в секунду, а перед ним на всякий случае ставил конфигурацию порта. А потом, когда все заработало, добавлял скорость и постепенно убирал вызов конфигурирования порта. Остановился на однократном, в момент включения устройства MODBUS в работу.
Проектик вышлю сегодня-завтра в личку.

dis8008
Профан
Сообщения: 3
Зарегистрирован: 02 мар 2017, 19:32

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение dis8008 »

САМ писал(а):Совершенно верно - MODBUSу ничего не мешает, от телеграмм с другими протоколами страдает только РТР. Одно уточнение. Порт не нужно конфигурировать под РТР, только под MODBUS. Причем делать это желательно не чаще чем один раз после окончания работы РТР (по классике это вообще делается один раз в момент старта контроллера). Лично я начинал с того что задавал периодически опрос медленный, раз в секунду, а перед ним на всякий случае ставил конфигурацию порта. А потом, когда все заработало, добавлял скорость и постепенно убирал вызов конфигурирования порта. Остановился на однократном, в момент включения устройства MODBUS в работу.
Проектик вышлю сегодня-завтра в личку.
Спасибо большое за пояснения. В личку писать не могу (нет прав). Тема еще актуальна. Пример, можно выслать на:
dis8008 собака mail.ru

Михайло
Администратор
Сообщения: 4100
Зарегистрирован: 19 сен 2012, 19:16

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение Михайло »

Вы сделали три сообщения, значит получили право писать личные сообщения.

elwasic
Профан
Сообщения: 1
Зарегистрирован: 19 мар 2021, 12:06

Re: PTP и MODBUS на одном коммуникационнике.

Сообщение elwasic »

САМ, может и поздно, но отправь пож-ста пример программы с ptp на почту. Я новичок, разбираюсь с аски. Буду признателен. clear.sky201@yandex.ru

Ответить