跳到主要内容

协议仿真器

协议仿真器用于在 GatewayRuntime 内直接建立 Modbus 或 Siemens S7 从站,向 PLC、上位机、组态软件、采集程序和协议测试工具提供可读写的仿真数据。它适合协议联调、点表验证、异常场景复现、培训演示和自动化测试,不需要额外安装独立仿真软件。

页面采用统一的三级配置模型:

层级作用
仿真通道管理监听端点、串口、启动状态、安全限制、诊断容量和故障注入。
内置协议插件从下拉框选择 Modbus SlaveS7Slave,决定协议报文和地址空间。
仿真变量定义协议地址、数据类型、初始值、访问权限和自动变化规律。
与采集配置的区别

协议仿真器把 GatewayRuntime 作为协议服务端或从站使用;“采集配置”通常把 GatewayRuntime 作为客户端或主站读取现场设备。协议仿真通道、协议插件和仿真变量只在本页面管理。

功能入口

登录 GatewayRuntime Web,进入“开发配置 → 协议仿真器”。

协议仿真器工作台

截图说明

本页截图来自当前 GatewayRuntime 的实际运行页面,用于展示工作台布局、默认参数和配置入口。截图中的示例通道处于停止状态且未配置变量,实际运行数据以用户自己的通道和客户端为准。

页面左侧是仿真通道列表,顶部是刷新、导入、编辑和运行命令,右侧工作区包含以下内容。

区域说明
运行摘要显示监听端点、当前客户端、请求数、请求速率、协议错误、预留内存和运行中的发生器数量。
变量分页查看变量、当前值、变化模式和访问模式,并执行新增、批量新增、写值、暂停、继续、保存当前值和删除。
原始内存按协议内存区读取十六进制和 ASCII 数据;具有权限时可预览并写入原始字节。
客户端查看连接端点、会话阶段、S7 协商 PDU、请求数、错误数和收发流量。
报文与事件按页查询生命周期、连接、请求、协议错误、变量变化和安全拒绝事件。
配置查看当前通道的协议、安全、诊断和完整配置摘要。

当浏览器宽度不超过 1024px 时,通道列表会自动收进当前通道名称左侧的通道按钮。点击该按钮可在抽屉中切换或新建通道;工作区会独占剩余宽度,筛选器、分页和表单按两列或单列重新排列。

配置前准备

配置前先确定测试客户端的协议、网络位置和目标点表。

信息需要确认的内容
协议角色测试程序必须作为 Modbus 主站或 S7 客户端连接 GatewayRuntime。
协议插件Modbus 客户端选择 Modbus Slave;S7 客户端选择 S7Slave
通道类型网络监听使用 TcpService;Modbus RTU 串口测试使用 SerialPort
监听端点确认可用网卡地址、端口、防火墙和端口占用情况。
地址空间确认 Modbus 站号和功能区,或 S7 的 I/Q/M/DB 区及 DB 号。
写入范围明确哪些变量允许客户端写入,哪些变量只能由页面或发生器修改。
数据规律确定固定值、波形、随机量、序列、脉冲或字符串模板及更新周期。
事件规模长期压测前确定事件容量、是否记录成功请求、是否捕获原始报文。

新建仿真通道

  1. 在左侧“协议仿真器”标题右侧点击“新增”。
  2. 在“通道配置”中填写通道名称。
  3. 在“协议插件”下拉框中选择 Modbus SlaveS7Slave
  4. 进入“传输配置”,选择通道类型并填写监听或串口参数。
  5. 按所选协议完成 Modbus 或 S7 Slave 参数。
  6. 检查“权限与安全”“诊断”和“故障注入”。
  7. 点击“保存”。保存后先配置变量,再启动通道。

新建仿真通道

通道配置

配置项说明
通道名称当前仿真通道的唯一名称,建议包含协议和用途,例如 modbus-line-demo
协议插件下拉选择 Modbus SlaveS7Slave。创建后如需改用另一协议,应新建通道并重新核对变量地址。
自动启动开启后,GatewayRuntime 启动时自动启动该仿真通道。正式启用前应确认监听端口和变量配置无误。
说明记录测试对象、负责人、端口用途或联调范围。

传输配置

通道类型属于“传输配置”。网络服务与串口是通道能力,不是协议插件。

仿真通道传输配置

通道类型适用协议关键参数说明
TcpServiceModbus、S7Slave监听地址、端口、监听队列、TCP NoDelay、握手超时GatewayRuntime 监听端口,等待客户端主动连接。
SerialPortModbus串口、波特率、数据位、校验位、停止位、流控、接收超时、帧间隔用于 Modbus RTU 串口从站仿真。S7Slave 不使用串口。

TcpService 常用设置:

配置项说明
监听地址127.0.0.1 只允许本机连接;局域网联调填写指定网卡地址;监听全部网卡可填写 0.0.0.0
端口Modbus TCP 常用 502,S7 常用 102;非管理员测试环境可使用未占用的高位端口。
监听队列控制等待接受的连接数量。一般保持默认值,集中压测时再按计划客户端数调整。
TCP NoDelay减少小报文等待时间,协议联调通常保持开启。
握手超时客户端连接后完成协议握手的最长等待时间。网络延迟较高时可适当增大。
端口与网络暴露

监听 0.0.0.0 会向所有可达网卡开放端口。生产网络中应同时配置“允许网段”、操作系统防火墙和边界访问策略,不要只依赖端口不公开。

配置 Modbus Slave

选择 Modbus Slave 后,通道支持以下组合。

仿真方式通道类型报文格式
Modbus TCPTcpServiceModbus TCP
RTU over TCPTcpServiceModbus RTU
Modbus RTU SerialSerialPortModbus RTU

Modbus 参数

配置项说明
站号可配置一个或多个从站号,范围为 1247,同一通道内不能重复。
线圈数量分配 Coil 地址空间,用于可读写布尔量。
离散输入数量分配 Discrete Input 地址空间,用于只读布尔量。
输入寄存器数量分配 Input Register 地址空间,用于只读寄存器数据。
保持寄存器数量分配 Holding Register 地址空间,用于可读写寄存器数据。
默认字节序设置多寄存器数值的默认字节/字顺序;单个变量仍可单独配置。
严格地址模式开启后拒绝超出已分配空间或没有有效映射的访问。

变量地址可使用结构化格式,例如:

地址示例含义
S=1;F=1;0站号 1,功能区 1,偏移 0 的线圈。
S=1;F=2;0站号 1,功能区 2,偏移 0 的离散输入。
S=1;F=3;0站号 1,功能区 3,偏移 0 的保持寄存器。
S=1;F=4;0站号 1,功能区 4,偏移 0 的输入寄存器。
S=1;F=3;10.3保持寄存器偏移 10 中的第 3 位。

配置 S7Slave

选择 S7Slave 后,GatewayRuntime 作为真实 S7 从站/服务端运行,通过 ISO-on-TCP 建立连接,并处理 COTP、Setup Communication、Read Var 和 Write Var。它不是把 S7 地址转换成 Modbus 地址。

S7Slave 配置

配置项说明
机架号 / 槽号用于确定本地 S7 连接标识,应与客户端连接参数一致。
本地 TSAPGatewayRuntime 使用的本地 TSAP,例如 0x0101
允许的远端 TSAP可限制允许建立会话的客户端 TSAP;留空时按现场安全策略评估。
最大 PDU 长度S7 会话协商的最大 PDU 长度,客户端设置不能超过服务端能力。
输入区字节分配 I 区容量。
输出区字节分配 Q 区容量。
标志区字节分配 M 区容量。
数据块配置一个或多个 DB 号和每个 DB 的字节数。
严格地址模式开启后拒绝超出 I/Q/M/DB 分配范围的访问。

S7Slave 变量可映射到以下地址区:

地址示例含义
IX0.0输入区第 0 字节第 0 位。
QW10输出区偏移 10 的字。
MD20标志区偏移 20 的双字。
DB1.DBX0.0DB1 第 0 字节第 0 位。
DB1.DBW2DB1 偏移 2 的字。
DB1.DBD4DB1 偏移 4 的双字。

权限与安全

“权限与安全”控制协议客户端能否接入和写入;系统角色权限控制登录用户能否在 Web 中执行管理命令。两者应同时配置。

仿真通道权限与安全

通道安全参数

配置项说明
允许网段允许连接的 IPv4/IPv6 CIDR。默认回环网段适合本机测试;局域网联调时只增加实际需要的网段。
允许外部协议写入总开关。关闭时客户端的协议写请求不会修改变量;开启后还要检查变量访问模式和外部写策略。
最大客户端数当前通道允许同时连接的客户端总数。
单 IP 客户端数同一源 IP 允许建立的最大连接数。
空闲超时客户端长时间无活动后断开连接的秒数。
单客户端每秒请求单个连接的持续请求速率限制。
突发容量允许短时突发的请求数量。
无效帧断开阈值同一连接连续产生过多无效报文时主动断开。

Web 角色权限

进入“系统管理 → 角色管理”,为需要使用协议仿真器的角色分配页面和按钮权限。建议按职责最小授权。

权限组可执行操作
查看与刷新查看通道、变量、运行状态、内存、客户端和分页事件。
通道管理新增、编辑、删除仿真通道。
变量管理新增、编辑、批量新增和删除变量。
运行控制启动、停止和重启通道。
数据写入页面写值、原始内存写入。
发生器控制暂停或继续所选变量的发生器。
保存当前值把当前运行值保存为下次启动使用的初始值。
客户端管理断开指定客户端或断开全部客户端。
事件管理清空当前通道的诊断事件。
导入与导出导入/导出 JSON 通道配置和 Excel 变量点表。
只读联调账号

只需要观察运行结果的用户,可仅授予查看与刷新权限。页面会隐藏或禁用没有权限的新增、写入、运行控制、断开和清空命令。

配置仿真变量

通道保存后,在“变量”页点击“新增变量”或“批量建变量”。结构配置只能在通道停止时修改,避免地址空间在客户端通信过程中改变。

  1. 填写唯一的变量名称。
  2. 使用地址助手选择协议区域、站号或 DB 号、偏移和位号,也可直接填写规范地址。
  3. 选择数据类型和数组长度。
  4. 对 Modbus 多字节数据选择字节序;对字符串填写内存格式。
  5. 设置访问模式、外部写策略和初始值。
  6. 需要自动变化时,进入“数据变化设计器”启用发生器。
  7. 检查占用范围、越界和地址冲突提示,然后保存。

数据类型

数据类型说明
Boolean布尔值,可映射到位地址、线圈或离散输入。
Byte8 位无符号整数。
Int16 / UInt1616 位有符号/无符号整数。
Int32 / UInt3232 位有符号/无符号整数。
Int64 / UInt6464 位有符号/无符号整数,页面按精确十进制值处理。
Float / Double单精度/双精度浮点数。
Decimal高精度十进制数,适合需要精确十进制表达的测试值。
String固定或带长度头的字符串,也支持 S7 WSTRING。

“数组长度”大于 1 时,变量按固定长度数组占用连续地址。增加数组长度前应检查后续地址是否已被其他变量占用。

字节序与字符串

配置项说明
字节序Modbus 多字节变量可选择 ABCDBADCCDABDCBA。S7 按协议字节序处理。
每个元素字节数为字符串的每个数组元素预留固定空间。
编码可选择或填写 UTF-8ASCIIUTF-16BE 等编码。
带长度头在字符串内存中保存实际长度信息,客户端解析方式必须一致。
S7 WSTRING仅 S7Slave 使用,按 S7 宽字符串格式分配和编码。

访问模式与外部写策略

配置项行为
只读客户端和页面都不能把该变量作为普通可写点使用。
读写页面可写;通道允许外部协议写入时,客户端也可按外部写策略写入。
页面可写、外部拒绝Web 页面可以写值,Modbus/S7 客户端写入会被拒绝。
接受并继续变化接受客户端写值,发生器仍按原时间线继续更新。
接受并暂停发生器接受客户端写值,同时暂停该变量发生器,便于保持客户端下发值。
拒绝外部写入即使通道允许外部写入,该变量仍拒绝客户端写请求。
三层写入检查

协议写入成功需要同时满足:角色或页面操作权限、通道“允许外部协议写入”、变量访问模式/外部写策略。涉及控制逻辑的测试点应优先使用只读或外部拒绝模式。

配置数据变化与种子

每个变量可以独立启用发生器。公共参数包括更新周期、启动延迟、恢复策略、算法版本和种子。

变化模式适用场景
Fixed保持固定值。
Ramp按步长递增或递减,可选择钳位、循环、往返或越界报错。
Sine按中心值、振幅、周期和相位生成正弦波。
Triangle生成三角波。
Sawtooth生成锯齿波。
Square按高低值、周期和占空比生成方波。
Random在范围内按均匀或高斯分布生成随机值。
RandomWalk从初始值开始按最大步长随机游走。
Toggle在布尔真/假之间按周期翻转。
Pulse按周期、高电平时长和初始电平生成脉冲。
Sequence按步骤值和保持时间顺序播放,可循环、往返或保持末值。
Template使用计数器和模拟时间生成字符串,例如批次号或时间标签。

确定性种子

RandomRandomWalk、噪声修饰器和故障注入都可以配置种子。相同算法版本、种子和配置会产生可重复的序列,适合自动化回归和问题复现。

操作建议
固定种子记录在测试用例中,保证每次运行得到相同变化轨迹。
生成种子用于临时探索不同随机序列;确认问题后应记录生成值。
分离种子主发生器、噪声和故障注入使用不同种子,便于单独复现。
修改算法版本会改变序列结果,回归测试中应与种子一起固定。

数值发生器还可叠加缩放、偏移、噪声、最小/最大钳位、量化步长和小数位数。先配置基础波形,再逐项增加修饰器并查看预览,能更快定位参数问题。

启动与运行控制

  1. 确认通道处于“已停止”,完成通道和变量结构配置。
  2. 点击顶部“启动”。启动成功后摘要区显示监听端点和预留内存。
  3. 使用实际 Modbus 主站或 S7 客户端连接该端点并读写变量。
  4. 在变量列表中观察当前值和发生器状态;选择变量后可暂停、继续或保存当前值为初始值。
  5. 修改结构配置前先停止通道;仅需重新建立监听和会话时可使用“重启”。
命令说明
启动分配协议内存并开始监听或打开串口。
停止关闭监听和客户端连接,允许修改通道与变量结构。
重启停止后按当前配置重新启动。
写值对单个可写变量设置当前值,可选择是否应用外部写策略。
暂停 / 继续批量控制所选变量的发生器。
保存当前值为初始值把当前值持久化,供下次启动恢复。大批量保存时建议按业务分组选择。

原始内存与客户端

原始内存

“原始内存”用于排查变量值与协议字节是否一致。

协议可选内存区
ModbusCoils、Discrete Inputs、Holding Registers、Input Registers,并选择站号。
S7SlaveInputs、Outputs、Markers、Data Block;Data Block 还需选择 DB 号。

填写字节偏移和读取字节数后点击“读取内存”。写入十六进制前,页面会检查覆盖范围;与变量映射相交时会要求再次确认。原始内存写入会直接影响对应变量,只应在明确了解地址布局时使用。

客户端

“客户端”页显示每个连接的远端端点、连接时间、最近活动、请求/错误数量和收发字节。S7Slave 还会显示会话阶段和协商 PDU。需要终止异常连接时,可断开单个客户端或断开全部客户端。

报文与事件

在通道“诊断”中决定记录范围。

协议仿真器诊断配置

配置项说明
捕获原始报文保存请求和响应的十六进制内容。只在联调排错时开启,避免记录不必要的数据。
事件容量当前通道保留的最大事件数。达到容量后覆盖最旧事件,不会无限增长。
单方向最大捕获字节限制单个请求或响应保存的原始字节数。
记录变量变化记录发生器、页面写值和协议写入引起的变量变化。高频点较多时可关闭。
记录成功请求记录正常协议请求。长时间高频压测时可关闭,只保留错误和关键事件。

“报文与事件”页支持关键字、事件类型筛选和服务端分页。

协议仿真器事件分页

事件内容说明
时间与类型区分生命周期、客户端连接/断开、协议请求、协议错误、变量变化、发生器状态、安全拒绝和缓冲覆盖。
消息与客户端显示事件摘要和关联客户端。
变量与错误码显示关联变量和协议错误码。
处理耗时显示请求处理耗时,便于定位异常慢请求。
请求/响应报文点击事件后查看捕获的十六进制请求与响应。

事件列表每次只加载当前页。切换页码、页大小或筛选条件会重新查询服务端;自动刷新会取消过期请求,不会并发堆积重复刷新。页面还会提示已经被环形缓冲覆盖的旧事件数量。

故障注入

故障注入用于可重复地验证客户端超时、重连和异常处理,不应在生产联调通道中长期启用。

配置项说明
启用故障注入总开关。关闭后不应用延迟、抖动、丢响应和主动断开。
故障种子固定随机故障序列,便于复现同一测试过程。
固定延迟每个请求增加固定处理延迟。
随机抖动在固定延迟基础上增加随机等待。
丢响应概率按概率不发送响应,用于验证客户端超时和重试。
处理请求数后断开达到指定请求数后主动断开客户端,验证自动重连。

导入与导出

顶部“导入 JSON”可导入完整通道配置;“更多”菜单提供导出 JSON、导入 Excel、导出 Excel和删除通道。

格式用途注意事项
JSON备份或复制通道、协议、安全、诊断、故障和变量配置。导入前可选择新建通道或覆盖同协议的已停止通道,并先执行预览。
Excel批量维护变量点表。只处理变量;导入结构配置前必须停止通道。先导出模板再填写可减少格式错误。

导入时如果其他用户已经修改同一通道,页面会提示配置版本冲突。刷新并核对最新配置后再重新导入,不要直接覆盖未知改动。

大规模仿真与性能建议

场景建议
变量很多使用批量建变量或 Excel 导入;通过名称、地址、类型和访问模式筛选,按页管理,不要依赖一次显示全部变量。
高频自动变化只为需要动态行为的变量启用发生器,合理设置更新周期,避免所有点都使用毫秒级变化。
长期协议压测设置固定事件容量;非排错阶段关闭原始报文、成功请求或高频变量变化记录。
事件查询使用事件类型和关键字缩小范围,保持分页;页面只保留当前页,不会把全部历史事件累积到浏览器。
自动刷新选择与测试速率匹配的刷新周期。上一轮尚未完成时不会并发发起重复刷新。
多客户端按计划连接数设置总数、单 IP 限制和请求速率,逐步增加负载并观察请求速率、错误和内存摘要。

常见问题

现象处理建议
客户端无法连接检查通道是否已启动、监听地址和端口、操作系统防火墙、允许网段、最大客户端数和端口占用。
Modbus 请求返回地址错误检查站号、报文格式、功能区、偏移、已分配数量和严格地址模式。
S7 客户端握手失败检查端口、机架/槽号、本地与远端 TSAP、最大 PDU、允许网段和握手超时。
S7 读取地址失败检查 I/Q/M/DB 地址格式、DB 是否存在、DB 容量和严格地址模式。
客户端写值被拒绝依次检查通道“允许外部协议写入”、变量访问模式、外部写策略和请求地址/数据类型。
写入后值又发生变化外部写策略为“接受并继续变化”。需要保持写入值时改为“接受并暂停发生器”。
随机结果无法复现固定算法版本、发生器种子、噪声种子、故障种子和启动时的初始值。
页面事件太多降低事件容量,关闭成功请求或变量变化记录,并使用类型/关键字筛选和分页。
无法编辑通道或变量先停止通道,再检查当前角色是否具有对应管理权限。

相关链接