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

和modScan进行MODBUS TCP通信

star star star star star
0 分
  • 通信(通讯)
  • 使用操作
  • 综合介绍
  • 基础理论
  • 产品推广
  • S7-1200 G2
发布时间:2025年12月22日
  • 1
  • 876
本章节讲解 S7-1200 G2 作为 MODBUS TCP 服务器和 modScan 进行 MODBUS TCP 通信

1.MB_SERVER 介绍

“MB_SERVER” 指令作为 Modbus TCP 服务器通过 PROFINET 接口与客户端通信。“MB_SERVER”指令将处理 Modbus TCP 客户端的连接请求,接收并处理客户端请求并发送响应。

本测试基于以下测试环境:

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

通信连接如下:

A computer screen shot of a computer

AI-generated content may be incorrect.

2.MB_SERVER 功能块调用

2.1 添加 PLC 并建立通讯变量

(1)在 TIA Portal 中添加 S7-1200 G2 PLC。

A screenshot of a computer

AI-generated content may be incorrect.

图2.1.1 TIA Portal 中添加 S7-1200 G2

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

A screenshot of a computer

AI-generated content may be incorrect.

图2.1.2 配置 S7-1200 G2 属性

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

A screenshot of a computer

AI-generated content may be incorrect.

A screenshot of a computer

AI-generated content may be incorrect.

图2.1.3 配置 S7-1200 G2 属性

2.2 建立通信参数 DB

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

A screenshot of a computer

AI-generated content may be incorrect.

图2.2.1 通信连接参数

参数说明
InterfaceId网口硬件标识符; 对于本示例网口为 64。
ID连接 ID,本 CPU 上通信的 ID 是唯一的,取值范围 1~4095: 本示例使用 ID 值 1
Connection Type连接类型:TCP 连接默认为:16#0B
ActiveEstablished该处参数设置为 0。主动连接为 1(客户端),被动连接为 0(服务器):本示例服务器为被动连接,使用默认值 0
ADDR远程客户端的 IP 地址:使用默认值 0,可以与任意客户端连接,本示例使用默认值 0
RemotePort远程客户端的端口号;使用默认值 0,客户端可以使用任意端口连接,本示例使用默认值 0
LocalPort本地 PLC 服务器的端口号:本示例服务器端口为 502

表2.2.1 通信连接参数设置

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

A screenshot of a computer

AI-generated content may be incorrect.

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

2.3 调用 MB_SERVER 功能块

(1)从指令库中拖拽 MB_SERVER 指令到程序段,建立背景实例

A computer screen with a red line

AI-generated content may be incorrect.

图2.3.1 插入 MB_SERVER 指令

(2)连接功能块引脚

A screenshot of a computer

AI-generated content may be incorrect.

图2.3.2 MB_SERVER 指令引脚

功能块引脚定义如下表:

参数说明
DISCONNET0(默认):建立通讯连接,打开端口;1:终止连接。
MB_HOLD_REG指向 Modbus 保持寄存器的数据区。可以设为数据块或 M 存储区地址。数据块可以为优化的数据块,也可以为非优化的数据块。对于优化数据块只能是基本数据类型的数组。对于非优化的数据块没有要求,一般通过 P# 指针的形式输入。具体参见表 2.3.2。
CONNECT指向连接描述结构的指针。使用 TCON_IP_v4 数据类型。
NDR0:无新写入的数据;1:Modbus 客户端写入了新的数据。
DR0:未读取数据;1: Modbus 客户端读取了数据
ERROR错误位:0:无错误;1:出现错误(仅在作业出错时输出一个周期),错误原因查看 STATUS。
STATUS指令的详细状态信息。

表2.3.1 MB_SERVER 指令引脚定义

(3)Modbus TCP 服务器数据区定义:

表2.3.2 MB_SERVER 数据区默认定义

地址区定义说明
输出位Q0.0 开始Q0.0 为地址 1,Q0.1 为地址 2,Q0.7 为地址 8,Q1.0 为地址 9...
输入位I0.0 开始I0.0 为地址 10001,I0.1 为地址 10002,I0.7 为地址 10008,I1.0 为地址 10009...
输入寄存器IW0 开始IW0 为地址 30001,IW2 为地址 30002,IW4 为地址 30003...
保持寄存器由 MB_HOLD_REG 定义指针指向的第一个字为 40001,第二个字为 40002...
例如:MB_HOLD_REG 为 P#M100.0 WORD 8,则 MW100 为 40001,MW102 为 40002,MW104 为 40003...MW114 为 40008
例如:MB_HOLD_REG 为 优化 DB 中 INT 数组[0..7],数组名为 “XXX”.AA,则 “XXX”.AA[0] 为 40001,“XXX”.AA[1] 为 40002,“XXX”.AA[2] 为 40003...“XXX”.AA[7] 为 40008

2.4 通信结果

监视通信 DB 中的变量及 ModScan 软件。

本示例中连接 DB1 的变量 dataBuffer 数组,元素 dataBuffer[0]~ dataBuffer[9] 对应的 Modbus 地址范围为 40001~40010,读取结果如下:

A screenshot of a computer

AI-generated content may be incorrect.

图2.4.1 监视通信结果

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

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

A screenshot of a computer

AI-generated content may be incorrect.

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

错误代码查询如下表:

STATUS
(W#16#)
发送到Modbus客户端的响应代码
(B#16#)
错误说明
7001 MB_SERVER 正在等待Modbus客户机连接到指定的TCP端口,仅在第一次执行连接或断开操作时才报告此代码
7002
MB_SERVER 正在等待Modbus客户机连接到指定的TCP端口,等待连接或断开操作完成时,将针对任何后续执行报告此代码
7003
断开操作已成功完成(仅在一个PLC扫描周期内有效)
80BB
连接参数中的 “ActiveEstablished” 参数无效;只允许对服务器建立被动连接 (active_established = FALSE)
8187
参数MB_HOLD_REG中的指针无效,数据区过小
8389
数据区域定义无效
818C
参数MB_HOLD_REG指向优化的区域(必须为“标准与S7- 300/400兼容”的DB或M区)或因执行超时出错(55秒)
83811不支持此功能代码
83823数据长度错误
83832数据地址错误或访问了保持寄存器(MB_HOLD_REG参数)地址以外的区域
83843数据值错误
83853不支持此数据诊断代码值(功能FC08)

表3.1 错误代码

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

Modbus Server 还支持修改保持性寄存器的起始地址、限制 IO 过程映像区的访问、使用数据块中的数据区等功能,如需使用这些功能,可参考以下章节。

4.MB_SERVER 静态变量

4.1 修改保持性寄存器的起始地址

可以通过修改静态变量“HR_Start_Offset”,修改保持性寄存器的起始地址。

A screenshot of a computer

AI-generated content may be incorrect.

图3.1.1 HR_Start_Offset 变量在线修改

例如此处在线值修改为 16#000A(十进制的值 10),保持性寄存器对应的客户端访问地址为 40001+10 开始。

通信结果如下图:

A screenshot of a computer

AI-generated content may be incorrect.

图3.1.2 新的保持性寄存器对应关系

4.2 限制输入输出寻址范围

QB_Read_Start:可由远程 MODBUS 设备读取的过程映像输出中的第一个字节的地址(应用于功能代码 01);

QB_Read_Count:可由远程 MODBUS 设备读取的过程映像输出中的字节数(应用于功能代码 01);

IB_Read_Start:可由远程 MODBUS 设备读取的过程映像输入中的第一个字节的地址(应用于功能代码 02 和 04);

IB_Read_Count:可由远程 MODBUS 设备读取的过程映像输入中的字节数(应用于功能代码 02 和 04)。

A screenshot of a computer

AI-generated content may be incorrect.

图3.2.1 限制输入输出的寻址范围

例如图3.2.1中的值设置,Q 区可以写的范围为 QB20-QB29, Q 区允许读的范围为 QB20~QB24, I 区允许读取的范围为 IB30~IB35。

4.3 Modbus 地址使用数据块中的数据区

通过该功能,用户可以直接访问数据块中的数据区,而不用直接访问过程映像和保持性寄存器。

使用该功能,有以下限制:

必须禁用数据块的“优化块访问”(Optimized block access) 属性;

请求到达时,尚未定义相应功能代码的 MODBUS 数据类型的数据区域,请求会按之前的指令版本处理;

最多可在不同数据块中定义八个数据区域,每个数据块只能包含一个数据区域;

使用的数据区域不到八个,则所需数据区域必须紧密相连。

Data_Area_Array 字段包含八个元素:Data_Area_Array[1] 到 Data_Area_Array[8],每个字段元素 Data_Area_Array[x](其中 1 <= x <= 8)都是 MB_DataArea 类型的 UDT,结构如下表:

表3.3.1 Data_Area_Array 结构

参数数据类型含义
data_typeUInt映射到此数据区域的 MODBUS 数据类型的标识符:
• 0:空字段元素或未使用数据区域的标识符。此时,db、start和length的值无效。
• 1:过程映像输出(与功能代码 1、5 和 15 一起使用)
• 2:过程映像输入(与功能代码 2 一起使用)
• 3:保持寄存器(与功能代码 3、6 和 16 一起使用)
• 4:输入寄存器(与功能代码 4 一起使用)
dbUInt映射的数据区编号,该DB必须是非优化DB
startUInt映射到数据块中的首个 MODBUS 地址,从0开始
lengthUIntBool数(对于data_type 1或者2),Word数(data_type 3或者4)

以下是使用 ModScan 访问的示例:

在项目中创建两个 DB 数据块,分别用于输入寄存器区,和保持性寄存器区访问

A screenshot of a computer

AI-generated content may be incorrect.

图3.3.1 创建用于通讯的 DB 块

A screenshot of a computer

AI-generated content may be incorrect.

图3.3.2 关闭“优化的块访问”

A screenshot of a computer

AI-generated content may be incorrect.

图3.3.2 Data_Area_Array 中的配置

示例1:data_type = 4,db = 5,start = 0,length = 11

输入寄存器 (data_type = 4) 映射在数据块 5 (db = 5);

Modbus 地址 30001 (start = 0) 位于数据块中的字 0;

最后有效的 Modbus 地址 30011 (length = 10) 位于数据块中的字 10,输出结果见下图3.3.3。

示例2:data_type = 3,db = 6,start = 1,length = 11

输入 (data_type = 3) 映射在数据块 6 (db = 6);

Modbus 地址 40002 (start = 1) 位于数据块中的字 0;

最后有效的 Modbus 地址 40012 (length = 11) 位于数据块中的字11,输出结果见下图3.3.4。

A screenshot of a computer

AI-generated content may be incorrect.

图3.3.3 输入寄存器读取结果

A screenshot of a computer

AI-generated content may be incorrect.

图3.3.4 保持性寄存器读取结果

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

  • 评论
更多
  • 分享

    扫码分享

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