loveplc

 找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 198|回复: 0

S71200之间MODBUS_TCP通信

[复制链接]

284

主题

317

帖子

986

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
986
发表于 2019-9-30 21:29:23 | 显示全部楼层 |阅读模式
S7-1200 Modbus TCP 通信指令块
STEP 7 V13 SP1 软件版本中的 Modbus TCP 库指令目前最新的版本已升至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
最后一个作业成功完成,立即将输出参数 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数值, 使双方的参数一致。


S7-1200 Modbus TCP 通信指令块
STEP 7 V13 SP1 软件版本中的Modbus TCP库指令目前最新的版本已升至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 服务器编程
“MB_SERVER”指令将处理 Modbus TCP 客户端的连接请求、接收并处理 Modbus 请求并发送响应。
1. 在“ 程序块-> OB 1"中调用“MB_SERVER”指令块,然后会生成相应的背景DB块,点击确定,如图3所示。
图3. 调用MB_SERVER指令块
该功能块的各个引脚定义如下:
DISCONNET
为0代表被动建立与客户端的通信连接;为1代表终止连接。
MB_HOLD_REG
指向 Modbus 保持寄存器的指针。
CONNECT
指向连接描述结构的指针。TCON_IP_v4(S7-1200)
NDR
为0代表无数据;为1代表从 Modbus 客户端写入新的数据。
DR
为0代表无读取的数据;为1代表从 Modbus 客户端读取的数据
ERROR
错误位:0:无错误;1:出现错误,错误原因查看STATUS。
STATUS
指令的详细状态信息。
表3. MB_SERVER 各个引脚定义说明
2. CONNECT 引脚的指针类型
第一步,先创建一个新的全局数据块 DB2,如图4所示:
图4. 创建全局数据块
第二步,双击打开新生成的 DB2 数据块,定义变量名称为“ss",数据类型为“TCON_IP_v4”(可以将 TCON_IP_v4 拷贝到该对话框中),然后点击“回车”按键。该数据类型结构创建完毕。如图5所示:
图5. 创建 MB_SERVER 中的 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.6,端口号为0,所以 MB_SERVER 服务器侧该数据结构的各项值如图6所示。
图6. MB_SERVER 服务器侧的 CONNECT 数据结构定义
3. S7-1200 服务器侧 MB_SERVER 编程
调用MB_SERVER指令块,实现被客户端读取2个保持寄存器的值,如图7所示。
图7. MB_SERVER 服务器侧编程
注意:MB_HOLD_REG 指定的数据缓冲区可以设为 DB 块或 M 存储区地址。DB 块可以为优化的数据块,也可以为标准的数据块结构。
S7-1200 MODBUS TCP 通信调试
S7-1200 MODBUS TCP 服务器侧准备数据,用于客户端读访问,如图8所示。
图8. 服务器侧监控表
S7-1200 MODBUS TCP 客户端侧,给 MB_CLIENT 指令块中 REQ 引脚一个上升沿,监控数据读取成功。如图9所示。
图9. 客户端侧监控表

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

京ICP备17066637号-1|京公网安备|手机版|Archiver|小黑屋|loveplc

GMT+8, 2025-12-6 14:49 , Processed in 0.022697 second(s), 18 queries .

Powered by Discuz! Comsenz Inc.

© 2019 技高志远.

快速回复 返回顶部 返回列表