PTP и MODBUS на одном коммуникационнике.
Добавлено: 20 фев 2017, 20:02
Добрый день всем! (отдельно приветствую "беженцев" с "утонувшего" форума Сименс.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...
Вобщем, у кого какие мысли, посоветуйте. Заранее благодарю всех небезучастных!
Не могу решить такую вот проблему.
Имеется простенький стенд на 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...
Вобщем, у кого какие мысли, посоветуйте. Заранее благодарю всех небезучастных!