关键字:S7-200 SMART;Modbus TCP;Modbus Slave;Modbus Poll。
系列文章目录
基于S7-200 SMART实现一键启停
顺序功能图——(二)设计机组延时关机程序
基于S7-200 SMART实现MATLAB写入与读取PLC数据
文章目录
前言
Modbus TCP作为工业中的重要通信协议已经受到了广泛的运用,西门子系列的PLC大多也支持免费的Modbus TCP通信,本文将基于S7-200 SMART实现PLC与PC的Modbus TCP通信。
一、Modbus通信协议简介
首先我们需要对通信有一个简单的认识,通信其实在我们生活中很常见,就像我们平时QQ微信的聊天、打电话甚至是写信,都可以是通信。如果我们以写信为例就能提取出三个重要部分:发信人、信息、发信人。对于现在的工业通信也有类似于此的主体,称之为:主站、从站、数据或者是服务端、客户端、数据。
一般主站、从站进行的的通信我们称之为主从通信方式,在Modbus协议中的Modbus RTU和Modbus ASCII都属于这种通信方式,在这种通信方式中,主站和从站可以理解为雇主和随从的关系,只能由雇主向随从提要求——由主站向从站发起通信(打工人落泪😵💫)。
Modbus TCP则是通过服务端、客户端的方式进行通信,在这种通信方式中,服务端和客户端可以理解为商店和顾客之间的关系,只能顾客向商店提要求——由客户端向服务端发起通信(顾客是上帝😎)。
二、工程环境
以下的案例基于:
- PC操作系统:WIN11
- PLC:S7-200 SAMRT CPU ST60
- 通信介质:普通网线一根
- PLC编程软件:STEP 7-Micro/WIN SMART V2.8
- PC端客户端模拟软件:Modbus Poll 7.0
- PC端服务端模拟软件:Modbus Slave 6.2
三、PLC——Server、PC——Client
1.流程
②将MBUS_SERVER拖入程序窗口并设置参数
- EN:功能块使能端
- Connect:是否开始通信
- IP_Port:IP端口号
- MaxIQ:设置输入/输出线圈
- MaxAI:设置输入寄存器
- MaxHold:设置保持寄存器
- HoldStart:设置被操作的保持寄存器的起始地址
- Done:通信是否结束的标志
- Error:错误报文
输入线圈、输出线圈、输入寄存器、保持寄存器是Modbus协议中定义的四种不同的数据类型:
注意上述程序中使用的数据是通过数据块进行设置的:
而且需要注意,如同使用高速计数器、PID等,要为MBUS_SERVER功能块分配空间用于设定相关参数:
图3.6 分配地址
④查找PLC
⑤与PLC建立通信连接
⑥下载程序
⑦运行PLC
⑧在STEP 7中监视
⑨设置触点
⑩设置触点为ON
⑪打开ModbusPoll
⑫点击Connect
⑭读取默认读写情况下的数据
⑮设置读写参数
⑯设置读写参数
⑰读取结果
2.报文分析
Modbus TCP的报文形式
- 事务处理标识箱:Modbus请求/响应事务处理的标识
- 协议标识符:0=Modbus协议
- 长度:当前之后的字节总数
- 单元标识符:串行链路活其它总线的从站识别
- 功能码:1——读取输出线圈、2——读取输入线圈、3——读取保持寄存器、4——读取输入寄存器、5——写入单线圈、6——写入单寄存器、15——写入多线圈、16——写入多寄存器
- 数据:根据功能码不同
TX发送报文
- 00 03:事务处理标识箱
- 00 00:Modbus协议
- 00 06:后面有6个字节的数据
- 01:1号从站
- 03:读取保持寄存器
- 00 0A:从0AH=10地址开始
- 00 14:读取14H=20个数据
需要注意的是,虽然这里我们报文中显示是从地址10开始,但实际上开始的地址需要结合PLC中MBUS_SERVER功能块的端口设置的开始地址,例如本文中图3.2设置的是VB10000,在软件Modbus Poll中的操作的起始地址是VB10000+2×20=VB10020(数据是以两字节为一单元)。
RX接收报文
- 00 03:事务处理标识箱
- 00 00:Modbus协议
- 00 06:后面有6个字节的数据
- 01:1号从站
- 03:读取保持寄存器
- 28:后面有40个字节的数据
- 00 0A:第一个数据10
- 00 0B:第二个数据11
- 00 0C:第三个数据12
- 00 0D:第四个数据13
- 00 0E:第五个数据14
- 00 0F:第六个数据15
- 00 10:第七个数据16
- 00 11:第八个数据17
- 00 12:第九个数据18
- 00 13:第十个数据19
- 00 14:第十一个数据20
- 00 15:第十二个数据21
- 00 16:第十三个数据22
- 00 17:第十四个数据23
- 00 18:第十五个数据24
- 00 19:第十六个数据25
- 00 1A:第十七个数据26
- 00 1B:第十八个数据27
- 00 1C:第十九个数据28
- 00 1D:第二十个数据29
注意由于窗口不够长这里的RX部分报文没有显示出来
四、PLC——Client、PC——Server
1.流程
PLC作为客户端PC作为服务端的流程类似,只不过在程序中需要调用的是MBUS_CLIENT功能块而在PC中需要使用的是Modbus Slave软件。
在STE7中的程序:
上述功能块的各端口含义:
不同情况下的端口设置:
根据图4.2可知,图4.1中的程序设置了客户端需要的服务端的IP为192.168.2.2、IP端口为502、写入数据、从第1个地址开始、写入10个数据、写入的数据存放在以VB6000为开始的V寄存器中。
2.报文分析
TX发送报文
- 11 64:事务处理标识箱
- 00 00:Modbus协议
- 00 06:后面有06H=6个字节的数据
- FF:255号从站
- 10:写入多个保持寄存器
- 00 00:从00H=0地址开始
- 00 0A:读取0AH=10个数据
RX接收报文
- 11 64:事务处理标识箱
- 00 00:Modbus协议
- 00 1B:后面有1BH=27个字节的数据
- FF:255号从站
- 00 00:从00H=0地址开始
- 00 0A:读取0AH=10个数据
- 16:后面有16H=20个字节数据
- 00 14:第一个数据20
- 00 16:第二个数据22
- 00 18:第三个数据24
- 00 1A:第四个数据26
- 00 1C:第五个数据28
- 00 1E:第六个数据30
- 00 20:第七个数据32
- 00 22:第八个数据34
- 00 24:第九个数据36
- 00 26:第十个数据38
图4.7 显示报文
总结
本文基于S7-200 SMART和Modbu Poll、Modbus Slave实现了PC与PLC之间的Modbus TCP通信。过程比较详细,提供给适合刚刚入门的小白食用,包学包会,学不会,那就再学学😁