西门子代理商-工业商城一站式的工业品在线采买平台 CPU 1211C 1212C 1214C 1215C 1217C
| 更新时间 2025-01-10 08:00:00 价格 请来电询价 PLC触摸屏代理商 西门子代理商 伺服电机驱动电缆 西门子一级代理商 变频器直流调速器 西门子一级总代理商 联系电话 13922889745 联系手机 18475208684 联系人 向小姐 立即询价 |
S7-1200 作 MODBUS TCP客户端
S7-1200 Modbus TCP 通信指令块STEP 7 V13 SP1 软件版本中的 Modbus TCP 库指令目前Zui新的版本已升至V4.0,该版本的使用需要具备以下两个条件:
1. 软件版本:STEP 7 V13 SP1及其以上
2. 固件版本:S7-1200 CPU 的固件版本V4.1及其以上
图1. Modbus TCP V4.0 版本指令块
S7-1200 Modbus TCP 实验环境下面以两台S7-1200之间进行 Modbus TCP 通信为例,详细阐述客户端与服务器侧如何编程及通信的过程。表格列出了具体的实验环境:
操作系统 | WIN7 SP1 专业版 64位 |
编程软件 | STEP 7 Professional V13 SP1 Update 5 |
系统硬件 | 1.CPU1215C 6ES7215-1AG40-0XB0 V4.1 2.CPU1212C 6ES7212-1AE40-0XB0 V4.1 3.CSM1277 6GK7277-1aa10-0aa0 |
表1. Modbus TCP 通信的实验环境
CPU类型 | IP地址 | 端口号 | 硬件标识符 | |
客户端 | CPU 1212C | 192.168.0.6 | 0 | 64 |
服务器 | CPU 1215C | 192.168.0.4 | 502 | 64 |
表2. Modbus TCP 通信双方的基本配置
硬件标识符是在“设备组态”中,双击 PROFINET 接口,然后在“属性”中的“硬件标识符”中查看。
图2. S7-1200设备的PROFINET接口硬件标识符
S7-1200 Modbus TCP 客户端编程S7-1200 客户端侧需要调用MB_CLIENT指令块,该指令块主要完成客户机和服务器的TCP连接、发送命令消息、接收响应以及控制服务器断开的工作任务。
1. 将MB_CLIENT 指令块在“ 程序块 -> OB1 ”中的程序段里调用,调用时会自动生成背景DB ,点击确定即可。
图3. Modbus TCP 客户端侧指令块
该功能块各个引脚定义如下:
REQ | 与服务器之间的通信请求,上升沿有效。 |
DISCONNECT | 通过该参数,可以控制与 Modbus TCP服务器建立和终止连接。0(默认):建立连接;1:断开连接。 |
MB_MODE | 选择 Modbus 请求模式(读取、写入或诊断)。0:读;1:写。 |
MB_DATA_ADDR | 由“MB_CLIENT”指令所访问数据的起始地址。 |
MB_DATA_LEN | 数据长度:数据访问的位或字的个数。 |
MB_DATA_PTR | 指向 Modbus 数据寄存器的指针。 |
CONNECT | 指向连接描述结构的指针。TCON_IP_v4(S7-1200) |
DONE | Zui后一个作业成功完成,立即将输出参数 DONE 置位为“1”。 |
BUSY | 作业状态位:0:无正在处理的“MB_CLIENT”作业;1:“MB_CLIENT”作业正在处理。 |
ERROR | 错误位:0:无错误;1:出现错误,错误原因查看STATUS。 |
STATUS | 指令的详细状态信息。 |
表4. MB_CLIENT 各引脚定义说明
2. CONNECT 引脚的指针类型
第一步,先创建一个新的全局数据块 DB2:
图4. 创建全局数据块
第二步,双击打开新生成的DB块,定义变量名称为“aa",数据类型为“TCON_IP_v4”(可以将 TCON_IP_v4 拷贝到该对话框中),然后点击“回车”按键。该数据类型结构创建完毕。如图5所示:
图5. 创建 MB_CLIENT 中的TCP连接结构的数据类型
各个引脚定义说明如下:
InterfaceId | 硬件标识符。 |
ID | 连接ID,取值范围1~4095 |
Connection Type | 连接类型。TCP连接默认为:16#0B |
ActiveEstablished | 建立连接。主动为1(客户端),被动为0(服务器)。 |
ADDR | 服务器侧的IP地址 |
RemotePort | 远程端口号 |
LocalPort | 本地端口号 |
表4. TCON_IP_v4 数据结构的引脚定义
本文远程服务器的IP地址为192.168.0.4,远程端口号设为502。所以客户端侧该数据结构的各项值为:
图6. MB_CLIENT 侧 CONNECT 引脚数据定义
注意: CONNECT引脚的填写需要用符号寻址的方式。
3. 创建 MB_DATA_PTR 数据缓冲区
第一步,创建一个全局数据块 DB3,创建方法可以参考上面的图3,数据块的名称如图7所示:
图7. 生成的两个DB块名称
第二步,建议一个数组的数据类型,以便通信中存放数据,请参考图8所示:
图8. MB_DATA_PTR 数据缓冲区结构
注意:MB_DATA_PTR指定的数据缓冲区可以为DB块或M存储区地址中。DB块可以为优化的数据块,也可以为标准的数据块结构。若为优化的数据块结构,编程时需要以符号寻址的方式填写该引脚;若为标准的数据块结构(可以右键单击DB块,“属性”中将“优化的块访问”前面的勾去掉,如下图9所示),需要以地址的方式填写该引脚。本文以标准的数据块(默认)为例进行编程。
图9. 修改 DB 块属性为标准的块结构
4. 客户端侧完成指令块编程
调用 MB_CLIENT 指令块,实现从 Modbus TCP 通信服务器中读取2个保持寄存器的值,如图10所示:
图10. MB_CLIENT 指令块编程
5. 将整个项目下载到S7-1200
待Modbus TCP 服务器侧准备就绪,给MB_CLIENT指令块的REQ引脚一个上升沿,将读取到的数据放入 MB_DATA_PTR引脚指定的DB 块中。具体的实验结果可以查看S7-1200 服务器侧编程。
常见问题MB_CLIENT 指令的背景数据块中的 "MB_Unit_ID" 有什么功能?
S7-1200 CPU 作为 Modbus TCP 客户端与 Modbus TCP 服务器通信,当尝试访问比 Modbus TCP 服务器更低端的串行子网中的设备,会有报错 "无法建立连接"。
这种情况下, Modbus TCP 服务器作为 Modbus RTU 协议中的网关,"MB_Unit_ID" 参数相当于 Modbus RTU 协议中的从站地址。
Modbus TCP 客户端直接向 Modbus TCP 服务器发送请求,Modbus TCP 服务器通过识别 "MB_UNIT_ID" 参数,将请求转发到从站设备。
在 S7-1200 项目中,选择系统块,双击打开 MB_CLIENT 指令的背景数据块“MB_CLIENT_DB”, 在静态变量Static下可以找到 MB_Unit_ID (默认起始值16#FF,等于十进制 255)。如下图 11 所示:
图 11. MB_Unit_ID
例如,当 S7-1200 做客户端与电脑上的 Modbus TCP 调试软件 Modsim 通信时,会遇到如上“无法建立连接”的问题。
这时,修改调试软件 Modsim 中Device Id 为255,使之等于 MB_Unit_ID 的值,即可建立联系。如下图 12 所示:
图 12. Device Id
注意:如果 Modbus TCP 服务器无法更改 Device Id 的值, 则修改S7-1200 项目中MB_Unit_ID数值, 使双方的参数一致。
=========================================
补充知识:
描述 在 Modbus TCP 通信实例中,Modbus 块 'MB_CLIENT' 的背景数据块中的 'MB_UNIT_ID' 并不是很重要,因为通过 IP 地址就可以寻址到 Modbus TCP 服务器。该参数有默认值 'MB_CLIENT' 0xFF。......
描述
在 Modbus TCP 通信实例中,Modbus 块 "MB_CLIENT" 的背景数据块中的 "MB_UNIT_ID" 并不是很重要,因为通过 IP 地址就可以寻址到 Modbus TCP 服务器。该参数有默认值 "MB_CLIENT" 0xFF。
图 01
如果 S7-1500 作为 Modbus TCP 客户端与 Modbus TCP 服务器通信,并且尝试访问比 Modbus TCP 服务器更低端的串行子网中的设备,那么在此情形下会有报错 "无法建立连接"。这种情况下,就要使用 "MB_CLIENT" 参数了。"MB_UNIT_ID" 参数相当于 Modbus RTU 协议中的从站地址。如果将 Modbus TCP 服务器当做 Modbus RTU 协议中的网关,那么从站设备可以通过 "MB_UNIT_ID" 参数来识别。Modbus TCP 客户端直接向Modbus TCP 服务器发送请求,而Modbus TCP 服务器通过 "MB_UNIT_ID" 参数将请求转发到从站设备。
图 02
注意事项
一些 Modbus TCP 设备在某些范围内进行初始化是需要使用 "MB_UNIT_ID" 参数。
====
Modbus TCP通信概述
MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品,显而易见,它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的Zui通用用途是为诸如PLC’s,I/O模块,以及连接其它简单域总线或I/O模块的网关服务的。
MODBUS/TCP 使MODBUS_RTU协议运行于以太网,MODBUS TCP使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUS TCP结合了以太网物理网络和网络标准TCP/IP以及以MODBUS作为应用协议标准的数据表示方法。MODBUS TCP通信报文被封装于以太网TCP/IP数据包中。与传统的串口方式,MODBUS TCP插入一个标准的MODBUS报文到TCP报文中,不再带有数据校验和地址。
1. 通讯所使用的以太网参考模型Modbus TCP传输过程中使用了TCP/IP以太网参考模型的5层:
第一层:物理层,提供设备物理接口,与市售介质/网络适配器相兼容
第二层:数据链路层,格式化信号到源/目硬件址数据帧
第三层:网络层,实现带有32位IP址IP报文包
第四层:传输层,实现可靠性连接、传输、查错、重发、端口服务、传输调度
第五层:应用层,Modbus协议报文
2. Modbus TCP数据帧Modbus数据在TCP/IP以太网上传输,支持Ethernet II和802.3两种帧格式,Modbus TCP数据帧包含报文头、功能代码和数据3部分,MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节,如图1所示:
图1: MODBUS TCP报文
由于使用以太网TCP/IP数据链路层的校验机制而保证了数据的完整性,MODBUS TCP 报文中不再带有数据校验”CHECKSUM”,原有报文中的“ADDRESS”也被“UNIT ID”替代而加在MODBUS应用协议报文头中。
3. Modbus TCP使用的通讯资源端口号在Modbus服务器中按缺省协议使用Port 502 通信端口,在Modbus客户器程序中设置任意通信端口,为避免与其他通讯协议的冲突一般建议2000开始可以使用。
4. Modbus TCP使用的功能代码按照使用的通途区分,共有3种类型分别为:
1) 公共功能代码:已定义好功能码,保证其唯一性,由Modbus.org认可;
2) 用户自定义功能代码有两组,分别为65~72和100~110,无需认可,但不保证代码使用唯一性,如变为公共代码,需交RFC认可;
3) 保留功能代码,由某些公司使用某些传统设备代码,不可作为公共用途。
按照应用深浅,可分为3个类别:
1) 类别0,客户机/服务器Zui小可用子集:读多个保持寄存器(fc.3);写多个保持寄存器(fc.16)。
2) 类别1,可实现基本互易操作常用代码:读线圈(fc.1);读开关量输入(fc.2);读输入寄存器(fc.4);写线圈(fc.5);写单一寄存器(fc.6)。
3) 类别2,用于人机界面、监控系统例行操作和数据传送功能:强制多个线圈(fc.15);读通用寄存器(fc.20);写通用寄存器(fc.21);屏蔽写寄存器(fc.22);读写寄存器(fc.23)。
5. Modbus TCP通讯应用举例在读寄存器的过程中,以Modbus TCP请求报文为例,具体的数据传输过程如下:
1) Modbus TCP客户端实况,用Connect()命令建立目标设备TCP 502端口连接数据通信过程;
2) 准备Modbus报文,包括7个字节MBAP内请求;
3) 使用send()命令发送;
4) 同一连接等待应答;
5) 同recv()读报文,完成一次数据交换过程;
6) 当通信任务结束时,关闭TCP连接,使服务器可以为其他服务。
联系方式
- 电 话:13922889745
- 经理:向小姐
- 手 机:18475208684
- 微 信:18475208684