您好,欢迎访问一九零五行业门户网

西门子S7-1200 MODBUS通信的一个应用案例分享

s7-1200 设计紧凑、组态灵活,tia在库函数中嵌套了modbus-rtu 和modbus-tcp功能库,在做数据采集的项目中是非常好用的。
做过一个换热站设备运行监测的项目,需采集管网一次侧和二次侧的供水压力、温度以及abb变频器的工作状态。现场各类变送器已经接到了原有的智能仪表上,因此采用1200plc通过modbus-rtu 与现场智能仪表和变频器通信是比较经济的方案,并且可通过modbus-tcp与远程上位机通信。
智能仪表及变频器作为从站,只需在设定中选择modbus-rtu通信协议并且为设备分配不重复的站地址即可。1200 plc作为主站必须配备rs485通信模块,其通信的基本原理是:首先程序开始运行时,调用一次modbus库中的功能块mb_comm_load来组态rs485模块上的端口;其次调用库中的功能块mb_master作为modbus主站与设备进行通信。
1200plc作为主站通信是由data_addr(从站中的起始modbus地址)和mode(读、写、诊断模式)参数一起确定实际modbus消息中使用的功能代码。data_ptr(数据指针)指向要写入或读取的数据的cpu db地址,该db必须为“非仅符号访问”db类型。在tia v12以上平台中,将该db属性中的“优化的块访问”选项取消。
plc主站发送带有站地址标识的数据来寻址不同的从站,同时不同的从站通过响应带有站地址标识的数据给主站,以完成整个通信过程。这种轮询通信,可以根据发送和接收完成的标志来完成,也可以以固定的时间间隔进行轮询,实际应用时需要考虑cpu的性能以及轮循modbus子站时间。程序编好后先用modbus调试工具测试一下,正常后再开始接线。
在接线时遇到一个小插曲:plc及变频器的485接线端子b为正,a为负,很多厂家仪表的485接线端子是a为正,b为负,一开始通信始终不正常,当查看仪表说明书时才发现。
项目中我使用的是modbus-tcp通过plc上pn接口与上位机进行通信,modbus-tcp使用开放式用户通信连接作为modbus通信路径。在s7-1200 plc的库函数中嵌套了modbus-tcp功能块库, 它包含了server 和client的库函数, 编程时可以直接调用该库函数可实现与上位机的modbus-tcp通信。
在该系统应用中s7-1200 plc作为 modbus tcp server (服务器),调用 “mb_server”指令处理modbus-tcp客户机的连接请求、接收modbus功能的请求并发送响应,设置连接id、ip端口等参数,使用起来比较简单。
s7-1200 plc作为网络的服务器端,上位机可以按需建立连接访问plc的数据区,这样在上位机对多个换热站的plc连接中不会占用太多的资源。前提是plc必需要有固定的ip才行,如果是动态拨号连接上位机,plc端就需要作为客户端,通过修改mode管脚的值改变发送或接收状态,按照主机的请求来按需向主机发送数据或主动接收主机的改写数据就比较麻烦了。
这是我在modbus通信协议项目应用中的一点小体会,一些观点或许过于幼稚,望各位同行多我指正,仅以此文起到抛砖引玉的作用。
其它类似信息

推荐信息