自动化工程师:SIEMENS S7-1500PLC干货,学好Modbus-RTU必备实例
此次讲解以项目为例,主要阐述关于SIEMENS S7-1500PLC 实现 Modbus-RTU 通信的配置步骤、程序编写及注意事项,详细的系统配置如下图 。
图 1 实例系统构成
该实例中, Modbus-RTU 主站为安装在 S7-1500 主机架上的 CM PtPRS422/485 HF ,Modbus-RTU 从站模块(站地址为 2)为安装在 ET 200SP 分布式 IO 上的 CM PtP ,接口类型为 RS485 ,通信波特率为 9600bit/s ,无奇偶校验。
该实例所用的软件及硬件
SIMATIC 部件
硬件组态步骤
按照系统配置图,首先组态 S7-1516 CPU 主机架,在主机架上配置点对点通信模块,并将该模块的协议设置为 “Modbus ”,如下图 2 。
图 2 S7-1500 CPU 主机架点对点通信模块组态
然后激活 CPU 的“系统和时钟存贮器功能”,如下图 3 。(本例程中使用了CPU 首次扫描位来实现 Modbus 的初始化,使用 CPU 的时钟信号来控制发送频率,该方法供参考。)
图 3 激活 CPU 的系统和时钟存储器
然后组态 ET 200SP 分布式 IO 站,并在该分布式 IO 上组态点对点通信模块,并将该模块的通信协议设置为 “Modbus ”,如下图 4。
图 4 ET200 SP 分布式 IO 站点对点模块组态,至此硬件配置已完成。
软件编写
S7-1500 实现 Modbus-RTU 功能,需要调用以下指令,见下表 3,其中 “Modbus_Comm_Load ”指令用于通信模块的组态, “Modbus_Master ” 指令和“Modbus_Slave ” 指令分别实现 Modbus 主站通信和 Modbus 从站通信“Modbus_Comm_Load ”指令和 “Modbus_Master ”/ “ Modbus_Slave ”指令是通过 “Modbus_Comm_Load ”指令的 “MB_DB ”参数来实现关联的。
表 3. Modbus-RTU 相关指令
在此,首先编写 Modbus 主站程序,添加一个新 FB ,将其命名为“ModbusMaster ”,如下图 5。
图 5 添加 Modbus-Master 功能块
在该 FB 中以多重背景方式调用 “Modbus_Comm_Load ”指令,该指令在指令目录下“通信 —〉通信处理器 —〉Modbus (RTU )”下,如下图 6。
图 6 调用 “Modbus_Comm_Load ”
在该 FB 中以多重背景方式调用 “Modbus_Master ”指令,该指令在指令目录下“通信—〉通信处理器—〉 Modbus (RTU )”下,如下图 7。
图 7 调用 “Modbus_Master ”指令
然后对 “ Modbus_Comm_Load ”指令进行参数化,由于该指令参数较多,在此只列出必须要关注的参数,如下表 4 所示,其它参数解释见手册或在线帮助。
表 4. Modbus_Comm_Load 主要参数列表
首先要为 “Modbus_Comm_Load ”指令指定端口,即该指令是针对哪个点对点模块进行参数化的。在硬件配置中,每个硬件均有一个硬件标识符,该硬件标识符在硬件属性中可以查看到,如下图 8。
图 8 在硬件属性中查看模块硬件标识符
同样,该硬件标识符也可以在 “PLC 变量 —〉显示所有变量 —〉系统变量”下可以查看到,如下图 9。
图 9 PLC 变量表中查看系统常量
所以可以通过如图 10 所示方法,通过拖拽的方式,将 Modbus 主站接口的硬件标识符拖至 “Modbus_Comm_Load ”指令的 “Port”接口参数处,如下图 10。
图 10 为“ Modbus_Comm_Load ”指定端口
接下来,定义端口的工作模式,本示例中,点对点模块的工作模式为 RS485 ,所以需要将 “Modbus_Comm_Load ”背景数据中静态变量的 “MODE ”参数赋值为 4,赋值既可以通过 “Move ”指令来完成,也可以通过直接修改该静态变量的默认值来实现,本实例使用后一种方法,参见下图 11。
图 11 定义 Modbus-RTU 主站端口工作模式为 RS485
接下来,通过对 “Modbus_Comm_Load ”指令的 “MD_DB ”参数赋值,将 “Modbus_Comm_Load ”指令与 “Modbus_Master ”指令进行关联,即将 “Modbus_Master ”指令的背景 DB 块中静态变量 “MB_DB ”赋值给 “Modbus_Comm_Load ”指令的 “MD_DB ”,可以通过拖拽的方式来实现,拖拽路径如下图 12。
图 12 对“ Modbus_Comm_Load ”指令的 “ MD_DB ”参数赋值除以上操作外,对于 “Modbus_Comm_Load ”指令的 “REQ ”参数,本实例使用 PLC 的首个扫描位来完成。其它参数如波特率,奇偶校验等,请根据实际使用情况对这些参数进行赋值,因本实例波特率为 9600bit/s ,无奇偶校验,所以以上参数使用缺省设置即可。
接下来,对指令 “Modbus_Master ”进行参数设置,该指令主要参数如下表 5所示。
表 5. Modbus_Master 主要参数列表
由于 Modbus 指令读取或写入的数据区必须为指针寻址,所以必须是有绝对地址的区域方可访问,而 S7-1500 创建的 DB 块缺省为优化的 DB 块,变量没有绝对地址,无法直接使用。本例中我们创建 DB 块,并在该 DB 块内创建一个名为 “M_Data ”的数组,类型为 WORD ,长度为 100 ,即创建了 100 个字的存储空间。然后在该 DB 块点右键,在属性中将“优化的块访问”前的勾去掉,重新编译该 DB 块,该 DB 块就会生成,可以看到每个变量都有偏移地址了,如下图 13。
图 13 创建一个标准 DB 块
根据下表 6 所示的 Modbus 功能码,本实例需要 Modbus 主站读取 Modbus 从站保持寄存器从起始地址开始的 10 个字的内容到创建的 “Master_Data ”中,即 Modbus 功能码 03 的功能:
表 6. Modbus 功能码的选择
根据以上要求,则 “Modbus_Master ”指令应按如下赋值:
“REQ ”:本实例使用 PLC 时钟信号来完成,即下图中的 M0.5 ;
“MB_ADDR ”: 2 // 访问的从站地址;
“MODE ”: 0; // 与“DATA_ADDR ”参数一起决定 Modbus 功能码为 03
“DATA_ADDR ”:40001 // Modbus 地址
“DATA_LEN ”: 10 // 数据长度为 10 个字
“DATA_PTR ”:该参数可以通过拖拽的方式,将创建的标准 DB 内的变量 “M_Data ”拖拽到 “DATA_PTR ”处,拖拽路径如下图 14。
图 14 为“ Modbus_Master ”指令进行参数赋值
接下来,编写 Modbus_RTU 从站程序,参照主站的程序,添加一个新 FB2“Modbus-Slave ”,在该 FB 中以多重背景方式调用 “Modbus_Comm_Load ”指令,同样为该指令选择 ET 200SP 的硬件地址,其它通信参数如波特率、奇偶校验等与主站的 “Modbus_Comm_Load ”指令相同,如下图 15 。
图 15 在从站 FB 中调用 “Modbus_Comm_Load ”指令
使用定义主站端口的工作模式相同的方法,将从站点对点模块的工作模式定义为RS485 ,所以需要将 “Modbus_Comm_Load ”背景数据中静态变量的 “MODE”参数赋值为 4,如下图 16。
图 16 定义 Modbus-RTU 从站端口工作模式为 RS485
然后,以多重背景的方式调用从站指令 “ Modbus_Slave ”指令,并设置Modbus 从站地址为 2,并为从站创建一个标准的 DB 块“Slave Data ”,长度根据实际情况定,本例中在 “Slave Data ”中创建了一个长度为 200 字的数组,并将该变量以拖拽的形式(也可以通过指针 P# 的方式),将该变量填在“Modbus_Slave ”的“MB_HOLD_REG ”参数处,如下图 17。
图 17 调用 “Modbus_Slave ”指令
然后对 “ Modbus_Comm_Load ”指令的 “ MD_DB ”参数赋值,将 “Modbus_Comm_Load ”指令与 “Modbus_ Slave ”指令进行关联,即将 “Modbus_Slave ”指令的背景 DB 块中静态变量 “ MB_DB ”赋值给 “Modbus_Comm_Load ”指令的 “MD_DB ”,可以通过拖拽的方式来实现,拖拽路径如下图 18。
图 18 将“ Modbus_Slave ” 指令和 “Modbus_Comm_Load ”指令关联在 OB1 中分别调用 Modbus 主站程序块和 Modbus 从站程序块,并为其分配全局 DB 块,如下图 19。
图 19 在 OB1 中分别调用主站程序和从站程序
至此,程序编写基本结束,建立 2 个变量监视表,分别用来监视 Modbus 主站数据和 Modbus 从站数据,将该例程下载到 PLC 后,可以看到通信模块对应的收发 LED 指示灯在闪烁,表示端口正在发送 / 接收数据。将 DB 块“Slave Data ”中的变量赋值,监视主站 “Master Data ”中的变量,可以看到主站已经读取到从站的数据,如下图 20。
图 20 使用变量监视表测试,主站侧已成功读取到从站数据Modbus 其它功能码使用方法类似,请参照表 6 修改相应的变量即可,此处不再一一举例。也可以根据此例程,举一反三,编写 Modbus-RTU 轮询程序。
以上,欢迎动动手分享及收藏!
PLC编程控制设计,西门子S7-200 modbus主从站例子程序案例
Modbus 主站读写程序
1、Modbus RTU主站功能是通过智玲库中预先编好的程序功能块实现的,该库只针对Port 0口有效
2、Modbus RTU 主站使用了一些用户中断,在用户程序中不能禁止中断
3、该例程访问的为一个从站,若访问不同的从站,可通过改变从站地址来实现
以下我们就来看看主从站的例子程序
主站程序
从站程序
以上,欢迎分享及收藏。
如有关于PLC的相关学习问题,也可以告知小编哦!
相关问答
如何使用step7v11为simatics7-1200建立modbus-rtu通讯?
硬件组态,必须选择CB1241或CM1241通讯块。硬件组态完成后,软件编程,用MB_COMM_LOAD指令初始化通信口,然后用通讯指令MB_MASTER指令实现读写,一般采用轮询方...
三菱plc中Modbus-Rtu的crc检查码如何编写程序?
感谢邀请!记得上次回答过三菱plc中Modbus通信中ASCII码模式LRC校验码程序的编写,与LRC相比,Rtu模式中的crc校验码的计算较为复杂,它需要一系列的异或计算。...2...
三菱PLC与变频器485通讯程序怎么编写?
三菱PLC和变频器之间的通信可以使用ModbusRTU协议通过RS485总线进行通信。以下是使用GXWorks3编写PLC与变频器之间的通信程序的步骤:在GXWorks3中创建一个...
带modbusrtu的温控器怎样和plc通讯?
走485通信,接两根线就可以了。温控器与PLC通信站号,通信格式,通信模式。设置一至。然后在PLC中编程MODBUS程度。编写程序的内容主要是写:站号,功能码,通信...
什么是RTU?
RTU英文全称RemoteTerminalUnit,中文全称为远程终端控制系统。RTU具有的特点是:1、通讯距离较长2、用于各种环境恶劣的工业现场3、模块...通常变电站...
如何实现组态王用串口通过modbusRTU方式与PLC或者第三方设备通讯?
将设备的16进制地址转换为10进制:0003H(16进制数,H没用,只是说明该数为16进制数)=0003。设备定义PLC----莫迪康---Mobus-rtu----串口。变量定义:变量类型选...
RTU是什么啊?
RTU(RemoteTerminalUnit)是一种远端测控单元装置,负责对现场信号、工业设备的监测和控制。与常用的可编程控制器PLC相比,RTU通常要具有优良的通讯能力和更大...
RTU是什么?
[回答]RTU英文全称RemoteTerminalUnit,中文全称为远程终端控制系统。RUT具有的特点是:1:通讯距离较长2:用于各种恶劣的工业现场2:模块结构化设计,便...
字符串在plc编程中有哪些应用案例?
PLC主要有几大部分的功能模块输入、输出、通信和显示。输入和输入有模拟量和数字量,其中模拟量可能有浮点型或者有符号/无符号的整形,数字量是二进制的0或者1...
横河CENTUMVP与PLC进行Modbus通讯的问题-盖德问答-化工人互...
DCS系统通讯模件为ALR121,与机组的PLC进行Modbus-RTU通讯。DCS只是需要从PLC读取数据,无需写入横河CENTUMVP与PLC进行Modbus通讯的问题DCS系统通讯模件为...