西门子PLC的“ModbusRTU通讯”和“轮询”

时间:2023-03-04作者:佚名
Modbus是plc应用中常用的通讯手段,轮询是在进行一个控制器连接多个从站的通讯时常用的编程手段,由于ST语言在数据处理上的优势,此方法变得更为简单。下面以西门子S7 1214C PLC的ModbusRTU通讯为例,展现ST语言下的modbus通讯和轮询。
硬件连接
要准备的硬件和软件:
1.西门子plc 1214C;
2.通讯板CB1241;
3.USB转RS485转换器;
4.Modscan2/Modsim32电脑模拟软件模拟主/从站,
5.SPU(serial port Utility),监视通讯报文。
PLC作为主站,使用软件Modsim32模拟从站,使用两芯线(最好是带屏蔽双绞线)进行连接:

西门子PLC的“ModbusRTU通讯”和“轮询”
硬件连接
将通讯板的AB两端与转换器的AB两端进行连接,要注意AB两端区分正负极,反接不会烧坏设备,但是无法正常通讯。
编写程序
1.设备组态
在博图软件中配置西门子PLC和通讯板。modbus通讯需要设置波特率、数据位、停止位和校验位等通讯参数,在博图中的设备组态中设置此参数,主从站设置一致即可通讯。

西门子PLC的“ModbusRTU通讯”和“轮询”
通讯参数
设置波特率9600,数据位8位,停止位1位,无校验,在PLC离线模式下下载硬件组态。

西门子PLC的“ModbusRTU通讯”和“轮询”
下载组态信息
2.调用modbus功能块
西门子的通讯一般都需要调用系统功能块,在“指令”-“通信”-“通信处理器”下可以找到modbus通讯功能块:

西门子PLC的“ModbusRTU通讯”和“轮询”
通讯功能块
可以看到这里提供两套modbus通讯模块,这两套都可以使用(暂不清楚具体的区别),本文选用的是下面的版本较低的模块。
新建程序段,将配置模块MB_COMM_LOAD和主站模块MB_MASTER拖入程序中:

西门子PLC的“ModbusRTU通讯”和“轮询”
调用功能块
功能块调用后要对必要的引脚进行赋值,各个引脚的功能可以按F1查看,建立一个DB数据块,声明一些变量连接功能块的引脚:

西门子PLC的“ModbusRTU通讯”和“轮询”
声明变量
上面声明了两个容量为5的字数组,用于数据的发送和接受,这个容量可以根据需求任意设置。然后将这写变量写入模块引脚:

西门子PLC的“ModbusRTU通讯”和“轮询”
模块赋值
配置模块MB_COMM_LOAD的触发REQ只需要在连接时触发一次啊,因此直接将系统内置的变量“firstscan”写入即可,上电后执行一次。
由于通讯的读和写都由主站模块MB_MASTER完成,因此我们对这个模块进行两次赋值,第一次实现读的功能,由modbus地址40100开始,读5个数据,写入"ModbusData".Read_Data中;第二次实现写的功能,将"ModbusData".Sent_Data中的数据写入由modbus地址40110开始的5个数据中。
程序写到这里已经可以进行通讯了,如果想要在线实验一下,可以将变量写入监控表,手动触发读写触发引脚变量,观察模块的输出状态,这里就不演示了。
3.编写轮询程序
所谓轮询就是依次询问,假设我们有3个设备作为modbus从站,从站地址(站号)依次为1,2,3,使用case语句依次对这3个设备进行读写操作,而读出和写入的数据分别存入3套不同的变量当中。

西门子PLC的“ModbusRTU通讯”和“轮询”
建立设备变量
使用一个结构体来描述一个设备的所有信息,包括5个状态字(states:Array[0..4] of Word)和5个控制字(ctrl:Array[0..4] of Word),将结构体声明为数量为3的数组,存放3个设备的数据。
在整个循环开始前,设定起始设备地址,然后按照“读操作触发,读数据,读设备地址 1,延时,写数据,写操作触发,写设备地址 1,延时”的顺序持续循环,按照设备地址号选择上面的结构体变量:

西门子PLC的“ModbusRTU通讯”和“轮询”
读操作
iStep=0时,关闭读写触发,设定读写设备地址为1;
iStep=10时,读操作触发,模块发出读数据命令,模块置位busy信号;
iStep=11时,等待读操作完成,模块读到设备数据后会置位done信号,复位busy信号,根据信号状态将读到的数据(Read_Data)写入设备数据结构体(DeviceData.states),如果设备地址=1,则写入DeviceData[1].states,设备地址变化,写入的结构体也会相应的变化,保证不同设备的数据不会互相干涉。这里加一个判断,一段时间读不到数据返回10步骤重新进行读操作。
iStep=12时,用计数的方式做一个简单的延时功能,避免因读写频率太快导致设备反应不过来。

西门子PLC的“ModbusRTU通讯”和“轮询”
写操作
向设备写入信息,在写入操作触发前要先将相应设备结构体中的数据(DeviceData.ctrl)写入发送数据缓存区(Sent_Data),然后再进行写操作,与读操作类似,写入完成后设备地址 1,跳转下一步骤。
运行程序
将程序编译写入后重启PLC,可以看到通讯板的指示灯已经开始闪烁,而轮询步骤iStep始终在10,11两步,证明读数据命令已经发出,但是没有接受到设备的反馈,始终在进行第一个设备的读操作。

西门子PLC的“ModbusRTU通讯”和“轮询”
虽然能够看到通讯灯在闪,但我们仍然不能直观的看到这个网络中的状态,这是就需要前面提到的SPU软件,监视串口网络中的报文。

西门子PLC的“ModbusRTU通讯”和“轮询”
监视报文
设定端口号,选择Hex数据格式,点击开始,可以看到当前网络中所有报文,根据modbus协议的规格(可以自行百度),可以判断这些报文就是plc发出的读命令。
想要读到数据必须要有从站,我们使用modsim软件模拟出3个从站:

西门子PLC的“ModbusRTU通讯”和“轮询”
modsim
将3个模拟从站地址分别设为1,2,3,起始modbus地址与程序设为一致:40100,长度设为20,这样读写地址都能看到。点击connection设定通讯参数(波特率,数据位,停止位,校验位与程序中设为一致)。点击确定后能后看到通讯板和转换器的接受发送指示灯开始闪烁,程序中的设备地址也在1-3中循环变化:

西门子PLC的“ModbusRTU通讯”和“轮询”
通讯指示灯
由于动图的帧率选的较低,会漏掉几个灯的状态。。。

西门子PLC的“ModbusRTU通讯”和“轮询”
变化的设备地址
监看程序中设备地址,能够看到地址在1-3之间循环变化。可惜的是modsim与SPU不能共用一个串口,看不到modsim反馈的报文了。
接下来我们在modsim中改变几个地址的值,看看PLC的设备数据结构体中能否进行相应的变化,将设备1的数据设定为:
40100设置为110,
40101设置为111,
40102设置为112,
40103设置为113,
40104设置为114,

西门子PLC的“ModbusRTU通讯”和“轮询”
设定数据
数据设定后在PLC的DB块中监视DeviceData的值:

西门子PLC的“ModbusRTU通讯”和“轮询”
读取数据
可以看到DeviceData[1].states的值已经变化(16进制),而DeviceData[2]和DeviceData[3]并没有变化。
下面进行写数据的验证,在程序中将DeviceData[2].ctrl任意赋值,然后再modsim中查看:

西门子PLC的“ModbusRTU通讯”和“轮询”
写入数据赋值

西门子PLC的“ModbusRTU通讯”和“轮询”
写入成功
可以看到modsim 3中相应地址的数据也已经变化,而其他模拟设备中并没有改变。
其他
在实际的项目中,例如变频器控制,通讯参数和数据地址一般都是设备(从站)规定好的,我们需要查阅设备手册,在程序中做相应的设置即可,通过通讯获取的数据可以有触摸屏显示出来,方便操作人员监控设备状态,也可以做一写判断,用于设备的报警等处理。

相关阅读

老电工必备:铜铝线辨别+电线质量把关+国标阻值速查(全是现场干货)

干电工这行,最头疼的就是遇到假电线、铝包铜、非标线,轻则发热跳闸,重则烧设备、出安全事故。下面全是一线摸爬滚打出来的硬技能,没有虚的,现场直接能用。 一、一眼辨真假:铜线、...
2026-04-17
老电工必备:铜铝线辨别+电线质量把关+国标阻值速查(全是现场干货)

零线不带电,为什么还要拉一条?直接用地做零线不是更省钱?

直接用一根火线再接一根地线的用电方式,曾经有部分用电不规范的区域使用过,但很久以前这种方式就被取消了,因为这种方式看起来确实是生了零线这一路物理线路的投资,但却增加极大...
2026-04-11
零线不带电,为什么还要拉一条?直接用地做零线不是更省钱?

【轨道电路】电气绝缘节和机械绝缘节区别

在ZPW-2000A里,电气绝缘节=无绝缘(调谐区),机械绝缘节=有物理绝缘接头,两者核心区别在结构、原理、应用场景与维护。 一、核心定义与结构 电气绝缘节(无绝缘节) - 全称:29m调谐区(无...
2026-05-23

单端、推挽、桥式拓扑结构变压器对比

单端正激式 单端  :通过一只开关器件单向驱动脉冲变压器。 正激  :脉冲变压器的原/付边相位关系,确保在开关管导通,驱动脉冲变压器原边时,变压器付边同时对负载供电。 该电...
2023-06-07
单端、推挽、桥式拓扑结构变压器对比

电厂风机的基础知识,你还了解吗?我来科普

及作用: 2、轴承箱:调节叶片安装角,改变风机性能。 4、导 叶:使气流旋向进入叶轮,轴向流出。 6、联轴器:用来联接不同机构中的两根轴,使之共同旋转以传递扭矩的机械零件。...
2023-06-13
电厂风机的基础知识,你还了解吗?我来科普

热销商品

连发瓦斯枪通用瓦斯射钉钢钉枪瓦斯气体高强度瓦斯射钉枪165气罐

连发瓦斯枪是一款专为高强度瓦斯射钉设计的工具,其特点在于能够连续发射瓦斯气体,适用于多种需要快速穿透和固定材料的场景。这款瓦斯枪配备了165气罐,容量足够满足...
4.5

黄铜镀镍金属电缆防水接头EWM密封格兰头HSM电线固定填料函M20M16

黄铜镀镍金属电缆防水接头EWM密封格兰头(HSM型)是一款高性能电线固定与密封装置,适用于M16和M20螺纹规格。采用优质黄铜材质并表面镀镍处理,具备优异的防腐蚀性、机械...
1.14

消防配件二氧化碳灭火器2 3 5 7KG弯头喷管24Kg干冰CO2外喷头喷嘴

二氧化碳灭火器配件中的2357KG弯头喷管与24Kg干冰CO₂外喷头喷嘴,是专业消防设备的重要组成部分。该弯头喷管采用高强度耐腐蚀材料制造,连接灵活,适用于高压CO₂灭火...
4.5

雷士照明led筒灯孔灯客厅吊顶天花灯嵌入式过道筒灯射灯桶灯家用

雷士照明LED筒灯是一款专为现代家居设计的嵌入式照明产品,适用于客厅、吊顶、过道、卧室等空间。采用高品质LED光源,光线柔和均匀,显色指数高,有效还原真实色彩,营造舒...
5.78

雷士照明嵌入式防眩筒灯射灯窄边过道灯深杯客厅无主灯天花灯米雪

雷士照明嵌入式防眩筒灯射灯——“米雪”系列,专为现代无主灯设计打造。采用窄边深杯结构,有效控制杂散光,实现精准防眩,营造舒适柔和的光环境。适用于客厅、过道、天...
25.67

网站栏目