Форум АО "ВЗЛЕТ"

Приборы ЗАО "Взлет" => Отдел программистов => Тема начата: Petricheg от 27.10.2017, 18:14:42



Название: Пример связи расходомера Взлёт МР с Simatic S7-1200 через CM1241 RS485
Отправлено: Petricheg от 27.10.2017, 18:14:42
Пример связи ультразвукового расходомера Взлёт МР с Simatic S7-1200 через коммуникационный модуль связи CM1241 RS485 в режиме Точка-к-Точке в формате Modbus в среде программирования TIA Portal v14/
В данном примере инициализация CM1241 происходит при первом проходе программы по флагу FirstScan
(для реальных приложений надо использовать флаг для принудительной инициализации в любое время)
(http://i7.5cm.ru/t/01it.jpg) (http://5cm.ru/view/i7/01it.jpg)

Затем надо активировать возможность CM1241 оператором "Set_Features"самому аппаратно подсчитывать контрольные суммы при передаче и приёме
то есть программист будет думать только о собственно адресах, фамилиях, явках
(http://i7.5cm.ru/t/TBMp.jpg) (http://5cm.ru/view/i7/TBMp.jpg)

Данные для запроса размещены в блоке данных, который для оператора "Send_P2P" задаётся абсолютным адресом на первый байт блока данных, за которым после пробела указывается длина передаваемых полезных данных (в данном случае 6 байт)
В первом байте указывается сетевой адрес расходомера в сети RS485  (в данном случае "1")
Во втором байте задаётся номер функции Modbus
Рабочий опрос значений регистров 3***** и 4***** производится заданием значения функции:
 "3" для регистров  "4*****"
"4" для регистров  "3*****"
дальше два байта с абсолютным номером регистра
дальше два байта с длиной запрашиваемых данных
(http://i7.5cm.ru/t/G9Ej.jpg) (http://5cm.ru/view/i7/G9Ej.jpg)

В ответ на запрос Взлёт должен послать ответ, который CM1241 оператором "Receive_P2P" перешлёт в блок данных, который надо адресовать абсолютным адресом первого байта блока
В первом байте будет сетевой адрес отправителя
Вторым байтом будет номер функции, по которой был запрос в  "Send_P2P" или будет код ошибки, если запрос был некорректным
Третьим байтом будет длина переданных расходомером данных в байтах
(http://i7.5cm.ru/t/JIQH.jpg) (http://5cm.ru/view/i7/JIQH.jpg)

===================
Почему в данном случае использовал операторы Точка-к-Точке, а не специализированные операторы "Modbus_*"  MB_COMM_LOAD, MB_MASTER, ?
Сначала попробовал именно ими:
+ регистры 4***** читаются
- а вот регистры 3***** не читаются :(
надо разбираться кто не прав и что делать... смотреть на шину логическим анализатором посылки...

==================

с этим расходомером столкнулся впервые - есть непонятности и неясности где какие данные должны лежать и в каком формате... тут селёдка была завёрнута... это не смотреть...
приходиться выяснять все варианты методом тыка и выявлять несоответствия или замалчивания в таблице регистров Список ModBus-регистров ModBus_ursv1xx.pdf
(http://i7.5cm.ru/t/r6Je.jpg) (http://5cm.ru/view/i7/r6Je.jpg)

и есть расхождения по цифрам в читаемых данных из регистров и отображаемых данных на экране расходомера... по документации сопоставить соответствие экранных значений ячейкам регистров не получается...
толщина стенки 2,0 или 6,0 ?
(http://i7.5cm.ru/t/4M2Z.jpg) (http://5cm.ru/view/i7/4M2Z.jpg)