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

相关阅读

运放与比较器的区别

运算放大器和比较器无论外观或图纸符号都差不多,那么它们究竟有什么区别,在实际应用中如何区分?今天我来图文全面分析一下,夯实大家的基础,让工程师更上一层楼。 先看一下...
2023-06-20
运放与比较器的区别

涨知识!为啥中国民用电压是220V 美国日本只有110V?哪种更安全

经常出国溜达的小伙伴都知道,到某些国家一定要带上电源转换器。 由于世界各国及地区的电力环境不同,民用电压也存在差异,各国电器的电压适用范围也不同。 先来看一组各国民...
2023-06-11
涨知识!为啥中国民用电压是220V 美国日本只有110V?哪种更安全

关于火力发电厂机组的启动和停运,你知道多少?重温一下

机组的启动 火力发电机组的启动是指将锅炉和汽轮发电机组由静止状态转变为运行状态的过程,主要包括锅炉上水、点火、升压,蒸汽系统暖管,汽轮机冲转、升速,发电机与电力系统...
2023-06-13
关于火力发电厂机组的启动和停运,你知道多少?重温一下

讲得太好了!电容,去耦和退耦的注意事项

01 什么是去耦电容,为什么要去耦 1.简介 去耦(decoupling)电容也称退耦电容,一般都安置在元件附近的电源处,用来滤除高频噪声,使电压稳定干净,保证元件的正常工作。 2.分析 对...
2023-03-31
讲得太好了!电容,去耦和退耦的注意事项

5张图片解说弱电工程防雷接地系统,简单易懂

弱电工程是电力应用的一个分类。电力应用按照电力输送功率的强弱可以分为强电与弱电两类。建筑及建筑群用电一般指交流220V50Hz及以下的弱电。主要向人们提供电力能源,将电能转...
2023-06-11
5张图片解说弱电工程防雷接地系统,简单易懂

热销商品

广东珠江电线电缆阻燃国标定制BYJBV BVR YJV YJY RVV RVS RV KVV

广东珠江电线电缆,专注于阻燃国标定制,产品涵盖BYJBVBVRYJVYJYRVVRVSRVKVV等多种规格。我们采用先进生产技术,严格遵循国家标准,确保产品质量可靠、性能稳定。产品适...
¥ 1

可换头防静电塑胶镊子ESD-7A/242/249/259防划伤夹IC硅晶片陶瓷头

ESD-7A/242/249/259是一款专为半导体行业设计的防静电塑胶镊子,有效防止静电对敏感电子元件的损害。其独特之处在于可更换的镊子头,包括专为夹持IC硅晶片和陶瓷元件...
¥ 2

公牛官方旗舰店开关插座空调16A插座五孔10A面板暗装多孔G12白灰

公牛官方旗舰店提供一系列高质量的开关插座和空调配件。这款16A插座五孔面板采用暗装设计,适用于多种安装环境,如墙面、天花板等。它具有10A的电流容量,可以满足家庭...
¥ 5.55

L型套筒扳手铣口烟斗双头弯头7字穿孔机修六角汽修轮胎工具6-19mm

L型套筒扳手是一款常用于工业领域的多功能工具,具备双头设计,可高效完成铣口、烟斗等多种工件孔位加工,适用六角汽修、轮胎等场景。其套筒尺寸为6-19mm,精准适配各类...
¥ 3.5

西门子开关插座无框皓彩米绒白亚光二三插USB10A五孔一开旗舰店

西门子开关插座无框皓彩米绒白亚光二三插USB10A五孔一开旗舰店,作为西门子品牌的专卖店,提供了一系列高品质、设计新颖的家居电气产品。这里销售的开关插座采用无框...
¥ 8.77

网站栏目