• {{item.name}}
自动化系统 {{item.name}}
{{item2.name}}
更多

和modsim进行MODBUS TCP通信

star star star star star
5.0 分
  • 通信(通讯)
  • 使用操作
  • 综合介绍
  • 基础理论
  • 产品推广
  • S7-1200 G2
发布时间:2025年12月22日
  • 1
  • 708
本章节讲解 S7-1200 G2 作为 MODBUS TCP 客户端和 modsim 通信

1.MB_CLIENT 介绍

“MB_CLIENT”指令作为 Modbus TCP 客户端通过 PROFINET 接口进行通信。通过“MB_CLIENT”指令,可以与 MODBUS TCP 服务器之间建立连接、发送 Modbus 请求、接收响应。

本测试基于以下测试环境,如表1-1所示

TIA Portal 版本:V20
S7-1200 G2:CPU 1214C DC/DC/DC
6ES7 214-1AH50-0XB0 V1.0.2
MB_CLIENT 版本:V6.0

通信连接如图1.1所示:

A diagram of a computer

AI-generated content may be incorrect.

图1.1 S7-1200 G2 与 ModSim 做 Modbus TCP 通信仿真

2.MB_CLIENT 功能块调用

2.1 添加 PLC 并建立通信变量

(1)在 TIA Portal 中添加 S7-1200 G2 PLC,如图2.1.1所示。

image.png

图2.1.1 TIA Portal 中添加 S7-1200 G2

(2)设置 CPU 的 IP 地址,勾选“启用系统存储器字节”,如图2.1.2所示

image.png

图2.1.2 配置 S7-1200 G2 属性

(3)建立通信用变量,本示例通信 10 个字的数据,数据类型为 Int 数组,如图2.1.3所示

image.png

image.png

图2.1.3 创建 DB 数据块

2.2 建立通信参数 DB

(1)新加入用于通信连接参数的 DB,在 DB 块中输入数据类型为“TCON_IP_V4”的变量,生成如下 DB 变量结构,该结构需要自动生成,不能手动创建,如图2.2.1所示,具体通信连接参数参见表2.2.1所示。

image.png

图2.2.1 通信连接参数

表2.2.1 通信连接参数

参数说明
InterfaceId网口硬件标识符:对于本示例使用网口 64。
ID连接 ID,本 CPU 上通信的 ID 是唯一的,取值范围 1~4095:本示例使用 1
Connection Type连接类型:TCP 连接默认为:16#0B
ActiveEstablished该处参数设置为 1。主动连接为 1(客户端),被动连接为 0(服务器):本示例 PLC 作为 Client 主动连接,配置值为 1
ADDR服务器侧的 IP 地址:本示例中 ModSim 所在 PC 的地址为 192.168.0.11
RemotePort远程服务器端口号:本示例中 ModSim 使用端口号为 502
LocalPort本地 PLC 的端口号:如果服务器没有端口要求,不需要设置,采用默认值 0,使用随机端口

(2)InterfaceId 可以在 CPU 的变量中查询到,查询方式如下图:

image.png

图2.2.2 通信接口硬件标识符查询

2.3 调用 MB_CLIENT 功能块

(1)从指令库中拖拽 MB_CLIENT 指令到程序段,建立背景实例,如图2.3.1所示。

image.png

图2.3.1 插入 MB_CLIENT 指令

(2)连接功能块引脚,如图2.3.2所示。

A screenshot of a computer

AI-generated content may be incorrect.

图2.3.2 MB_CLIENT 指令引脚

功能块引脚定义如下表:

表2.3.1 MB_CLIENT 指令引脚定义

参数说明
REQ与服务器之间的通信请求,可以上升沿触发(仅触发一次),也可以用常 1,常1时会循环触发作业
DISCONNECT通过该参数,可以控制与 Modbus TCP 服务器建立和终止连接。 0:建立连接;1:断开连接
MB_MODE选择 Modbus 请求模式(读取、写入或诊断)
MB_DATA_ADDR由“MB_CLIENT”指令所访问数据的起始地址
MB_DATA_LEN数据长度: 数据访问的位或字的个数
MB_DATA_PTR本地收发数据缓冲区的指针
CONNECT指向连接描述结构的指针,使用 TCON_IP_v4 数据类型结构
DONE作业完成且没错误,仅出一个周期“1”
BUSY作业状态位:0:无正在处理的“MB_CLIENT”作业;1:“MB_CLIENT”作业正在处理
ERROR错误位:0:无错误;1:出现错误(仅在作业出错时输出一个周期),错误原因查看STATUS
STATUS指令的详细状态信息

注意:

  • 本示例从 modbus 服务器保持性寄存器读取10个字的数据,起始地址为40001,基于此,引脚参数配置

MB_MODE 为 0

MB_DATA_ADDR 为 40001

MB_DATA_LEN 为 10。

  • MB_CLIENT 引脚 MB_MODE/ MB_DATA_ADDR/ MB_DATA_LEN 参数设置,参考“10.1.4.3 MB_MODE、MB_DATA_ADDR、MB_DATA_LEN、 Modbus TCP 功能码等之间的关系”
  • MB_CLIENT 引脚 DONE, ERROR,在功能块引用时,仅输出一个周期 True,使用博途软件直接监视,可能无法监视到为 True,需要抓取或者置位操作;STATUS 输出,在 ERROR 为 True 的 1个周期输出错误代码,查询错误代码需要抓取,参考第3章节。
  • MB_DATA_PTR 引脚,也可以连接指针形式的参数,例如 P#DB1.DBX0.0 WORD 10,但需要注意关闭数据块属性中的“优化的块访问”。

(3)当 Modbus TCP 服务器侧需要配置 DeviceID 时,MB_CLIENT 背景参数 MB_Unit_ID 必须设置,默认为 16#FF,本示例 ModSim 作为服务器,必须使用 Device ID,ModSim 的 DeviceID 默认为 1,所以将 MB_Unit_ID 改为 1,如图2.3.3所示。

image.png

图2.3.3 MB_Unit_ID 设置

注意,MB_Unit_ID 的起始值和监视值必须同时与服务器 DeiviceID 相同

image.png

图2.3.4 ModSim 的 DeviceID 查询

2.4 通信结果

监视通信 DB 中的变量及 ModSim 软件,读取结果如图2.4.1所示。

image.png

图2.4.1 监视通信结果

3.MB_CLIENT 状态及错误代码抓取

MB_CLIENT 功能块的 Done 位,Error 位,及错误状态输出仅存在一个周期,在博途软件中通常无法直接监视,需要使用如下方法抓取查看,如图3.1和3.2所示。

A screenshot of a computer

AI-generated content may be incorrect.

图3.1 Done 位状态计数

A screenshot of a computer

AI-generated content may be incorrect.

图3.2 Error 位状态计数及错误代码抓取

错误代码查询如下表:

表3.1 协议错误代码

STATUS
(W#16#)
Modbus 服务器返回的代码
(B#16#)
错误说明
838101不支持功能代码
838203数据长度错误
838302数据地址错误或访问的数据超出 MB_DATA_PTR 的地址区
838403数据值错误
838503不支持诊断错误代码(功能代码 08)

表3.2 参数错误代码

STATUS
(W#16#)
错误说明
7001MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求,仅在第一次执行连接或断开操作时才报告此代码
7002MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求,等待连接或断开操作完成时,将针对任何后续执行报告此代码
7003断开操作已成功完成(仅在一个 PLC 扫描周期内有效)
80C8服务器在指定的时间内无响应,请检查与 Modbus 服务器设备的连接,尝试过任何组态的重试操作后,才报告此错误
8188参数 MB_MODE 的值无效
8189参数 MB_DATA_ADDR 的值无效
818A参数 MB_DATA_LEN 的长度无效
818B参数 MB_DATA_PTR 中的指针无效
818C参数 MB_DATA_PTR 指向优化的区域,必须为“标准与 S7- 300/400 兼容”的 DB 或 M 区
8200端口正在处理另一个 Modbus 请求
8380接收到的 Modbus 帧有缺陷或接收到的字节太少
8387指定的连接 ID 与用于先前请求的ID不同,只能有一个单个连接 ID 与每个 MB_CLIENT 背景数据块配合使用
8388Modbus 服务器返回一些和请求内容不同的数据,这只适合 Modbus 功能 15 或 16

除了上面列出的错误外,也可以从底层传输通信指令(TCON、TDISCON、TSEND和TRCV)返回错误,参考相应指令的错误代码。

4. MB_CLIENT 轮询

对同一个服务器读取超过单次读取变量数量最大值,或者同时需要读写操作时,需要做轮询处理。以下是对同一服务器,读取并同时写操作的轮询程序示例,如图4.1所示。

轮询操作需要注意以下事项:

  • 所有参与轮询的功能块需要使用相同的背景数据块;
  • 功能块的 REQ 需要使用上升沿,仅执行一次;
  • “CONNECT”引脚,必须使用完全相同的参数;

A screenshot of a computer

AI-generated content may be incorrect.

图4.1 MB_Client 轮询示例程序

说明:ModSim 做 Modbus TCP server 测试软件,Modscan32 做 Modbus TCP Client 测试软件,两者都是第三方软件,需要用户自行从 internet 网络上下载。

  • 评论
更多
  • 分享

    扫码分享

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。