跳到主要内容

协议仿真器

打开“开发配置 → 协议仿真器”,在网关内建立 Modbus 或 S7 测试从站,不需要连接真实 PLC。第一次使用可直接跟着采集第一个点完成本机读数。

使用顺序​

  1. 新建仿真通道,选择协议和监听地址,先保存但不启动。
  2. 在这个通道下新增仿真变量,设置地址、类型和初始值。
  3. 启动仿真通道,确认变量当前值正确。
  4. 让采集程序或协议客户端连接这个监听地址,并读取相同的地址与类型。
  5. 需要自动变化时,再为变量配置发生器。

这里创建的是从站,普通“采集配置”创建的是读取它的客户端。两边地址与类型要对应,不能只创建采集点、不提供从站数据。

协议仿真器工作台

按任务查找​

想做什么操作位置
新建 TCP 或串口测试从站新建仿真通道
配置 Modbus 站号与寄存器配置 Modbus Slave
配置 S7 的 DB 与连接参数配置 S7Slave
添加点位和初始值配置仿真变量
让数据自动变化配置数据变化与种子

本机练习使用 127.0.0.1 和空闲高位端口。让局域网客户端连接时才改为实际网卡地址,并按需放行防火墙和允许网段。

小屏幕上看不到左侧通道列表时,点击当前通道名称左侧的通道按钮,在抽屉中切换或新增通道。

新建仿真通道​

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

新建仿真通道

通道配置​

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

传输配置​

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

仿真通道传输配置

通道类型适用协议关键参数说明
TcpServiceModbus、S7Slave监听地址、端口、监听队列、TCP NoDelay、握手超时TGateway 监听端口,等待客户端主动连接。
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 参数​

配置项说明
站号可配置一个或多个从站号,范围为 1 至 247,同一通道内不能重复。
线圈数量分配 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 后,TGateway 作为真实 S7 从站/服务端运行,通过 ISO-on-TCP 建立连接,并处理 COTP、Setup Communication、Read Var 和 Write Var。它不是把 S7 地址转换成 Modbus 地址。

S7Slave 配置

配置项说明
机架号 / 槽号用于确定本地 S7 连接标识,应与客户端连接参数一致。
本地 TSAPTGateway 使用的本地 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 多字节变量可选择 ABCD、BADC、CDAB、DCBA。S7 按协议字节序处理。
每个元素字节数为字符串的每个数组元素预留固定空间。
编码可选择或填写 UTF-8、ASCII、UTF-16BE 等编码。
带长度头在字符串内存中保存实际长度信息,客户端解析方式必须一致。
S7 WSTRING仅 S7Slave 使用,按 S7 宽字符串格式分配和编码。

访问模式与外部写策略​

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

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

配置数据变化与种子​

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

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

确定性种子​

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

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

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

启动与运行控制​

  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 容量和严格地址模式。
客户端写值被拒绝依次检查通道“允许外部协议写入”、变量访问模式、外部写策略和请求地址/数据类型。
写入后值又发生变化外部写策略为“接受并继续变化”。需要保持写入值时改为“接受并暂停发生器”。
随机结果无法复现固定算法版本、发生器种子、噪声种子、故障种子和启动时的初始值。
页面事件太多降低事件容量,关闭成功请求或变量变化记录,并使用类型/关键字筛选和分页。
无法编辑通道或变量先停止通道,再检查当前角色是否具有对应管理权限。

相关链接​