odbus协议是一项应用层报文传输协议,包括ascii、rtu、tcp三种报文类型。标准的modbus协议物理层接口有rs232、rs422、rs485和以太网接口,采用master/slave方式通信。modbus设备可分为主站(master)和从站(slave),主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用tcp通信时,主站为client端,主动建立连接;从站为server端,等待连接。对于这三种通信在数据模型和功能调用上都是相同的,只有封装方式是不同的。modbus tcp协议是一个运行在tcp/ip网络连接中的一种协议,与传统的串口方式相比,modbus tcp插入一个标准的modbus报文头到 tcp报文中,不再带有差错校验和地址域,如图1所示。mbap为报文头,长度为7字节,组成如下表1。
图1. modbus 报文帧
表1.报文头mbap
内容 解释
事务处理标识(2bytes) 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符(2bytes) 00 00表示modbustcp协议。
长度(2bytes) 表示接下来的数据长度,单位为字节。
单元标识符(1byte) 可以理解为设备地址。
simatic s7-1500 modbustcp 通信使用要求
从tia portal v12 sp1开始软件中增加了s7-1500的modbus tcp块库(v3.0及以上版本),用于s7-1500与支持modbus tcp的通信伙伴进行通信,如下图2所示。s7-1500支持modbustcp指令的所有库版本,在用户程序中调用和参数化mb_client和mb_server指令。
mb_client指令通过cpu 或 cm/cp 的本地接口作为modbustcp客户端进行通信,无需要任何额外的硬件支持。使用mb_client指令在客户端和服务器之间建立连接,发送请求和接收响应,并控制断开连接。
mb_server指令通过cpu 或 cm/cp 的本地接口作为modbustcp服务器进行通信,无需要任何额外的硬件支持。mb_server指令处理modbustcp客户端的连接请求,接收modbus客户端的请求并发送响应消息。
图2. 通信指令
modbus tcp 实验环境和内容
在本应用实例中,通过以下产品进行modbus tcp编程,实现了s7-1500通过cp1543-1分别作为客户端和服务器与第三方测试软件进行通信。
软件:
tia v16 professional
modbus poll
modbus slave
硬件:
cpu 1511-1 pn v2.8
cp 1543-1 v2.2
modbus tcp 通信程序
1、cp1543-1作为服务器
1.1、打开 tia portal v16软件,新建一个项目命名为 modbustcp,在项目中添加 cpu1511-1pn v2.8 及cp1543-1 v2.2,为cp1543-1以太网接口新建一个子网并设置 ip地址为 192.168.0.3,如下图 3 所示。
图3. 分配ip地址
1.2、在 cpu1511-1pn的 ob1组织块中添加modbus tcp server功能块 mb_server,软件将提示会为该 fb块增加一个背景数据块,本例中为 db1mb_server_db,如下图4所示。接下来为指令块分配引脚,各引脚的具体含义如下表 2 所示。
图4. 指令创建
1.3、保持性寄存器存储区与mb_server管脚参数mb_hold_reg进行映射,对于线圈、离散输入、输入寄存器等通过功能块均已经与 s7-1500的过程映像区进行了映射,其映射地址对应如表 3 所示。
表3.cpu的modbus地址映射表
modbus功能 s7-1500 cpu
功能码 功能 数据区 地址空间 数据区 cpu地址
01 读取:位 output 1~9999 过程映像输出 q0.0~q1249.6
02 读取:位 input 10001~19999 过程映像输入 i0.0~i1249.6
03 读取:word 保持性寄存器 40001~49999 400001~465535 全局数据(db、过程映像、m区) 与指令引脚mb_hold_reg关联
04 读取:word input 30001~39999 过程映像输入 iw0~iw19996
05 写入:位 output 1~9999 过程映像输出 q0.0~q1249.6
06 写入:word 保持性寄存器 40001~49999 400001~465535 全局数据(db、过程映像、m区) 与指令引脚mb_hold_reg关联
15 写入:位 output 1~9999 过程映像输出 q0.0~q1249.6
16 写入:word 保持性寄存器 40001~49999 400001~465535 全局数据(db、过程映像、m区) 与指令引脚mb_hold_reg关联
1.4、使用上述指令实现cp1543-1为modbus tcp的 server与通信伙伴建立通信,通过表2可知connect参数的设定有两种方式,下面分别介绍这两种方式如何创建connect参数。
(1)使用tcon_ip_v4结构创建连接参数。
添加一个全局数据块用于匹配功能块mb_server的管脚connect,本例中为数据块db2(块名称:mb_connect),打开该数据块,创建变量 mb_server,手动在数据类型框中输入tcon_ip_v4,并将该变量关联到功能块mb_server的管脚参数connect上,如下图5所示。数据类型“tcon_ip_v4”的各参数含义及本例中设置如下表4所示。
图5. 创建“tcon_ip_v4”类型的connect参数
表4.tcon_ip_v4数据类型的参数设置
tcon_ip_v4结构 含义 本例为 server时的设置
interfaceid 本地接口的硬件标识符(参见图 6)。 259
id 引用该连接(取值范围:1 到 4095)。
该参数将唯一确定 cpu 中的连接。指令 mb_server的每个实例必须使用唯一的 id。该 id 还不得被不同通信类型的其他指令同时使用。 1
connectiontype 连接类型,对于 tcp,选择 11(十进制)。不允许使用其它连接类型。如果使用了其它连接类型(如 udp),该指令的 status 参数将输出相应的错误消息。 16#0b
activeestablished 建立连接的方式所对应的 id,对于被动连接建立,应选择 false。 false
remoteaddress 连接伙伴的 ip 地址,例如 192.168.0.1:
addr[1] = 192
addr[2] = 168
addr[3] = 0
addr[4] = 1
如果指令mb_server要接受来自任何连接伙伴的连接请求,应将0.0.0.0 用作 ip 地址。 0.0.0.0
remoteport 远程连接伙伴的端口号(取值范围:1 - 49151)。
如果指令mb_server要接受来自远程伙伴任何端口的连接请求,应将0用作端口号。 0
localport 本地连接伙伴的端口号(取值范围:1 - 49151)。
此 ip 端口号定义 modbus 客户端连接请求中要监视的 ip 端口。默认值为 502。 502
图6. 硬件接口标识符
(2)通过网络视图创建tcp连接后,再使用tcon_configured结构创建连接参数。
在网络视图窗口,左上侧选择连接按钮,选择”tcp连接“,然后在cpu上点击鼠标右键并选择添加新连接。如下图7所示。
图7. 添加新连接
在添加新连接窗口中,类型选择为tcp连接,伙伴选择未指定,本地接口选择cp1543-1,以太网接口_1[x1],分配本地连接id,服务器为被动连接,点击 添加创建tcp 连接,如下图8所示。
图8. 创建tcp连接
tcp_连接_1为建立的连接,选中该连接,在属性的地址详细信息中可以设置该tcp 连接的相关信息,如下图9所示。
图9. tcp连接参数设置
添加一个全局数据块用于匹配功能块mb_server的管脚connect,本例中为数据块db2(块名称:mb_connect),打开该数据块,创建变量 mb_server,手动在数据类型框中输入tcon_configured,并将该变量关联到功能块mb_server的管脚参数connect上,如下图10所示。数据类型“tcon_configured”的各参数含义及本例中设置如下表5所示。
图10. 创建“tcon_configured”类型的connect参数
表5.tcon_configured数据类型的参数设置
tcon_configured结构 含义 本例为 server时的设置
interfaceid 本地接口的硬件标识符(参见图 6)。 259
id 引用该连接(取值范围:1 到 4095)。
id 在 cpu 范围内必须是唯一的。id 还不得被不同通信类型的其他指令同时使用。输入现有连接的连接 id。 256(16#100)
connectiontype 连接类型,对于组态连接,选择 254(十进制)。 254
1.5、仿真软件设置,如下图11所示。
图11. 仿真软件连接设置
1.6、测试结果
图12. 测试结果
2、cp1543-1 作为客户端
2.1、打开 tia portal v16软件,新建一个项目命名为 modbustcp,在项目中添加 cpu1511-1pn v2.8 及cp1543-1 v2.2,为cp1543-1以太网接口新建一个子网并设置 ip地址为 192.168.0.3,如上图 13 所示。
图13. 分配ip地址
2.2、在 cpu1511-1pn 的 ob1组织块中添加modbus tcp client功能块 mb_client,软件将提示会为该 fb块增加一个背景数据块,本例中为 db1mb_client_db,如下图14所示。接下来为指令块分配引脚,各引脚的具体含义如下表 6 所示。
图14. 指令创建
2.3、参数 mb_mode、mb_data_addr 和 mb_data_len 的组合定义了 mb_mode 值为 0、1 和 2 时,当前 modbus 消息中所用的 modbus 功能代码,对应关系如下表7所示。
mb_mode 中包含有关读写操作的信息。mb_mode=0:读取,mb_mode=1 和 2:写入(注:mb_mode=2 时,modbus 功能 15 和 05 或 modbus 功能 16 和 06 无区别。)
mb_data_addr 中包含有关待读取/写入的目标信息,以及“mb_client”指令用于计算远程地址的地址信息。
mb_data_len 包含要读/写的值的数量。
2.4、使用上述指令实现cp1543-1为modbus tcp的 client与通信伙伴建立通信,通过表6可知connect参数的设定有两种方式,下面分别介绍这两种方式如何创建connect参数。
(1)使用tcon_ip_v4结构创建连接参数。
添加一个全局数据块用于匹配功能块mb_client的管脚connect,本例中为数据块db2(块名称:mb_connect),打开该数据块,创建变量 mb_client,手动在数据类型框中输入tcon_ip_v4,并将该变量关联到功能块mb_client的管脚参数connect上,如下图15所示。数据类型“tcon_ip_v4”的各参数含义及本例中设置如下表8所示。
图15. 创建“tcon_ip_v4”类型的connect参数
表8.tcon_ip_v4数据类型的参数设置
tcon_ip_v4结构 含义 本例为 server时的设置
interfaceid 本地接口的硬件标识符(参见图 16)。 259
id 引用该连接(取值范围:1 到 4095)。
该参数将唯一确定 cpu 中的连接。指令 mb_client的每个实例必须使用唯一的 id。 1
connectiontype 连接类型,对于 tcp,选择 11(十进制)。不允许使用其它连接类型。如果使用了其它连接类型(如 udp),该指令的 status 参数将输出相应的错误消息。 16#0b
activeestablished 建立连接的方式所对应的 id,对于被动连接建立,应选择 false。 true
remoteaddress 连接伙伴(modbus 服务器)的 ip 地址,例如,192.168.0.1:
addr[1] = 192
addr[2] = 168
addr[3] = 0
addr[4] = 1 192.168.0.100
remoteport 远程连接伙伴的端口号(取值范围:1 - 49151)。
使用客户端通过 tcp/ip 协议与其建立连接并最终通信的服务器的 ip 端口号(默认值:502)。 502
localport 本地连接伙伴的端口号:端口号:1 至 49151;任意端口:“0” 。 0
图16. 硬件接口标识符
(2)通过网络视图创建tcp连接后,再使用tcon_configured结构创建连接参数。
在网络视图窗口,左上侧选择连接按钮,选择”tcp连接“,然后在cpu上点击鼠标右键并选择添加新连接。如下图17所示。
图17. 添加新连接
在添加新连接窗口中,类型选择为tcp连接,伙伴选择未指定,本地接口选择cp1543-1,以太网接口_1[x1],分配本地连接id,服务器为被动连接,点击 添加创建tcp 连接,如下图18所示。
图18. 创建tcp连接
tcp_连接_2为建立的连接,选中该连接,在属性的地址详细信息中可以设置该tcp 连接的相关信息,如下图19所示。
图19. tcp连接参数设置
添加一个全局数据块用于匹配功能块mb_client的管脚connect,本例中为数据块db2(块名称:mb_connect),打开该数据块,创建变量 mb_client,手动在数据类型框中输入tcon_configured,并将该变量关联到功能块mb_client的管脚参数connect上,如下图20所示。数据类型“tcon_configured”的各参数含义及本例中设置如下表9所示。
图20. 创建“tcon_configured”类型的connect参数
表9.tcon_configured数据类型的参数设置
tcon_configured结构 含义 本例为client时的设置
interfaceid 本地接口的硬件标识符(参见图 6)。 259
id 引用该连接(取值范围:1 到 4095)。
输入现有连接的连接 id。 256(16#100)
connectiontype 连接类型,对于组态连接,选择 254(十进制)。 254
1.5、仿真软件设置,如下图21所示。
图21. 仿真软件连接设置
图22. 参数设置
1.6、测试结果
图23. 测试结果
常见问题
1、cp1543-1可以与串口进行modbustcp通信吗?
如果 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 参数将请求转发到从站设备。
恩智浦半导体在符合GSMA标准的eSIM解决方案领域取得突破
看切屑判断加工,高手都具备的技能!
无畸变长线
温度传感芯片在智慧农业中的应用
奇瑞7sport这款车是奇瑞的王牌,重回国产巅峰,售价9万元谁还买哈弗H6
Modbus TCP通信概述
华为Mate30Pro评测 难以复制的跨世机皇
2021网络安全威胁趋势预测,远程办公安全风险加剧
西门子G120如何进行参数备份?
疯米科技发布两款无线耳机 外观设计引人注目
紫光展锐正在积极拥抱全新的科技浪潮努力打造一个新展锐
立昂微电专注于半导体硅片和半导体分立器件芯片的研发
连接器产品选型该如何选择
苹果iPhone XI系列存储升级 最低128GB起
人工智能发展现状及利弊分析
晃晃手掌就可以完成身份认证的识别技术,听说过吗
挑战与机遇并存人工智能的健康发展很重要
驰为发布LarkBook笔记本
CCD机器视觉在线检测薄膜瑕疵缺检测仪检测薄膜类型
降压转换器和升压转换器是如何工作的?