协议仿真器
打开“开发配置 → 协议仿真器”,在网关内建立 Modbus 或 S7 测试从站,不需要连接真实 PLC。第一次使用可直接跟着采集第一个点完成本机读数。
准备与选择任务
使用顺序
- 新建仿真通道,选择协议和监听地址,先保存但不启动。
- 在这个通道下新增仿真变量,设置地址、类型和初始值。
- 启动仿真通道,确认变量当前值正确。
- 让采集程序或协议客户端连接这个监听地址,并读取相同的地址与类型。
- 需要自动变化时,再为变量配置发生器。
这里创建的是从站,普通“采集配置”创建的是读取它的客户端。两边地址与类型要对应,不能只创建采集点、不提供从站数据。

按任务查找
| 想做什么 | 操作位置 |
|---|---|
| 新建 TCP 或串口测试从站 | 新建仿真通道 |
| 配置 Modbus 站号与寄存器 | 配置 Modbus Slave |
| 配置 S7 的 DB 与连接参数 | 配置 S7Slave |
| 添加点位和初始值 | 配置仿真变量 |
| 让数据自动变化 | 配置数据变化与种子 |
本机练习使用 127.0.0.1 和空闲高位端口。让局域网客户端连接时才改为实际网卡地址,并按需放行防火墙和允许网段。
小屏幕上看不到左侧通道列表时,点击当前通道名称左侧的通道按钮,在抽屉中切换或新增通道。
配置仿真通道与协议
新建仿真通道
- 在左侧“协议仿真器”标题右侧点击“新增”。
- 在“通道配置”中填写通道名称。
- 在“协议插件”下拉框中选择
Modbus Slave或S7Slave。 - 进入“传输配置”,选择通道类型并填写监听或串口参数。
- 按所选协议完成 Modbus 或 S7 Slave 参数。
- 检查“权限与安全”“诊断”和“故障注入”。
- 点击“保存”。保存后先配置变量,再启动通道。

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

| 通道类型 | 适用协议 | 关键参数 | 说明 |
|---|---|---|---|
TcpService | Modbus、S7Slave | 监听地址、端口、监听队列、TCP NoDelay、握手超时 | TGateway 监听端口,等待客户端主动连接。 |
SerialPort | Modbus | 串口、波特率、数据位、校验位、停止位、流控、接收超时、帧间隔 | 用于 Modbus RTU 串口从站仿真。S7Slave 不使用串口。 |
TcpService 常用设置:
| 配置项 | 说明 |
|---|---|
| 监听地址 | 127.0.0.1 只允许本机连接;局域网联调填写指定网卡地址;监听全部网卡可填写 0.0.0.0。 |
| 端口 | Modbus TCP 常用 502,S7 常用 102;非管理员测试环境可使用未占用的高位端口。 |
| 监听队列 | 控制等待接受的连接数量。一般保持默认值,集中压测时再按计划客户端数调整。 |
| TCP NoDelay | 减少小报文等待时间,协议联调通常保持开启。 |
| 握手超时 | 毫秒,同时约束连接握手和分段报文收齐前的缓存等待。Modbus TCP 没有 S7 会话协商,但仍需在该窗口内收齐完整帧;它不是主站等待读取响应的超时。 |
监听 0.0.0.0 会向所有可达网卡开放端口。生产网络中应同时配置“允许网段”、操作系统防火墙和边界访问策略,不要只依赖端口不公开。
串口 RTU 参数
选择 SerialPort 后,客户端与仿真器应使用匹配的串口格式。真实串口按接线分别打开两端端口;使用虚拟串口时,需要预先安装成对端口,端口名称本身不会建立连接。
| 配置项 | 说明 |
|---|---|
| 串口 | 默认 COM1,选择仿真器实际打开的系统端口;客户端打开连接对端,不能同时占用同一端口。 |
| 波特率 | 默认 9600,两端一致,并确认操作系统驱动和设备支持。 |
| 数据位 | 默认 8。表单允许 5~8,Modbus RTU 应使用完整的 8 位二进制字节,不能因两端都选 7 位就认为可以正确传输 RTU。 |
| 校验位 | 支持无、奇、偶、固定 1、固定 0;两端选择相同值,字符校验与 RTU 报文 CRC 分别生效。 |
| 停止位 | 按设备和驱动支持选择 1、1.5 或 2;例如 8 数据位与 1.5 停止位的组合可能被驱动拒绝。 |
| 流控 | 支持无、软件流控、RTS/CTS 及组合;启用硬件流控时还需正确接线,虚拟串口回读不代表已经验证物理控制线。 |
| 接收超时 | 默认 1000 毫秒,范围 100~60000;控制分段 RTU 报文收齐前的缓存期限,与客户端等待响应的超时分别配置。 |
| 帧间隔 | 默认 4 毫秒,必须大于 0。当前可保存该字段,但不改变实际帧间等待;分段报文过期由接收超时控制。 |
保存并启动后,用独立主站回读固定点;修改串口参数时先停止通道,重新打开两端端口再验证。
配置 Modbus Slave
选择 Modbus Slave 后,通道支持以下组合。
| 仿真方式 | 通道类型 | 报文格式 |
|---|---|---|
| Modbus TCP | TcpService | Modbus TCP |
| RTU over TCP | TcpService | Modbus RTU |
| Modbus RTU Serial | SerialPort | Modbus 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 地址。

| 配置项 | 说明 |
|---|---|
| 机架号 / 槽号 | 用于确定本地 S7 连接标识,应与客户端连接参数一致。 |
| 本地 TSAP | TGateway 使用的本地 TSAP,例如 0x0101。 |
| 允许的远端 TSAP | 可限制允许建立会话的客户端 TSAP;留空时按现场安全策略评估。 |
| 最大 PDU 长度 | S7 会话协商的最大 PDU 长度,客户端设置不能超过服务端能力。 |
| 输入区字节 | 分配 I 区容量。 |
| 输出区字节 | 分配 Q 区容量。 |
| 标志区字节 | 分配 M 区容量。 |
| 数据块 | 配置一个或多个 DB 号和每个 DB 的字节数。 |
| 严格地址模式 | 当前运行不使用该开关拒绝未建模位置;I/Q/M/DB 的实际容量与 DB 是否存在决定访问范围。 |
S7Slave 变量可映射到以下地址区:
| 地址示例 | 含义 |
|---|---|
IX0.0 | 输入区第 0 字节第 0 位。 |
QW10 | 输出区偏移 10 的字。 |
MD20 | 标志区偏移 20 的双字。 |
DB1.DBX0.0 | DB1 第 0 字节第 0 位。 |
DB1.DBW2 | DB1 偏移 2 的字。 |
DB1.DBD4 | DB1 偏移 4 的双字。 |
权限与安全
“权限与安全”控制协议客户端能否接入和写入;系统角色权限控制登录用户能否在 Web 中执行管理命令。两者应同时配置。

通道安全参数
| 配置项 | 说明 |
|---|---|
| 允许网段 | 允许连接的 IPv4/IPv6 CIDR。默认回环网段适合本机测试;局域网联调时只增加实际需要的网段。 |
| 允许外部协议写入 | 总开关。关闭时客户端的协议写请求不会修改变量;开启后还要检查变量访问模式和外部写策略。 |
| 最大客户端数 | 当前通道允许同时连接的客户端总数。 |
| 单 IP 客户端数 | 同一源 IP 允许建立的最大连接数。 |
| 空闲超时 | 客户端长时间无活动后断开连接的秒数。 |
| 单客户端每秒请求 | 单个连接的持续请求速率限制。 |
| 突发容量 | 允许短时突发的请求数量。 |
| 无效帧断开阈值 | 同一连接连续产生过多无效报文时主动断开。 |
Web 角色权限
进入“系统管理 → 角色管理”,为需要使用协议仿真器的角色分配页面和按钮权限。建议按职责最小授权。
| 权限组 | 可执行操作 |
|---|---|
| 查看与刷新 | 查看通道、变量、运行状态、内存、客户端和分页事件。 |
| 通道管理 | 新增、编辑、删除仿真通道。 |
| 变量管理 | 新增、编辑、批量新增和删除变量。 |
| 运行控制 | 启动、停止和重启通道。 |
| 数据写入 | 页面写值、原始内存写入。 |
| 发生器控制 | 暂停或继续所选变量的发生器。 |
| 保存当前值 | 把当前运行值保存为下次启动使用的初始值。 |
| 客户端管理 | 断开指定客户端或断开全部客户端。 |
| 事件管理 | 清空当前通道的诊断事件。 |
| 导入与导出 | 导入/导出 JSON 通道配置和 Excel 变量点表。 |
只需要观察运行结果的用户,可仅授予查看与刷新权限。页面会隐藏或禁用没有权限的新增、写入、运行控制、断开和清空命令。
配置变量与数据变化
配置仿真变量
通道保存后,在“变量”页点击“新增变量”或“批量建变量”。结构配置只能在通道停止时修改,避免地址空间在客户端通信过程中改变。
- 填写唯一的变量名称。
- 使用地址助手选择协议区域、站号或 DB 号、偏移和位号,也可直接填写规范地址。
- 选择数据类型和数组长度。
- 对 Modbus 多字节数据选择字节序;对字符串填写内存格式。
- 设置访问模式、外部写策略和初始值。
- 需要自动变化时,进入“数据变化设计器”启用发生器。
- 检查占用范围、越界和地址冲突提示,然后保存。
数据类型
| 数据类型 | 说明 |
|---|---|
Boolean | 布尔值,可映射到位地址、线圈或离散输入。 |
Byte | 8 位无符号整数。 |
Int16 / UInt16 | 16 位有符号/无符号整数。 |
Int32 / UInt32 | 32 位有符号/无符号整数。 |
Int64 / UInt64 | 64 位有符号/无符号整数,页面按精确十进制值处理。 |
Float / Double | 单精度/双精度浮点数。 |
Decimal | .NET 十六字节布局,Modbus 占八个寄存器,不是通用 PLC 浮点格式;使用精确十进制文本配置。 |
String | 按每元素字节容量和编码存储。长度头与 WSTRING 的当前限制见下表。 |
“数组长度”大于 1 时,变量按固定长度数组占用连续地址。增加数组长度前应检查后续地址是否已被其他变量占用。
字节序与字符串
| 配置项 | 说明 |
|---|---|
| 字节序 | Modbus 多字节变量可选择 ABCD、BADC、CDAB、DCBA。S7 按协议字节序处理。 |
| 每个元素字节数 | 为字符串的每个数组元素预留固定空间。 |
| 编码 | 可选择或填写 UTF-8、ASCII、UTF-16BE 等编码。 |
| 带长度头 | Modbus 普通字符串当前不消费该标志,两种设置的初始字节相同;S7 读取解释会受影响。 |
| S7 WSTRING | 影响 S7 字符串读取解释;当前初值写入仍是普通编码字节,不自动构造标准 WSTRING 长度头。 |
先用两个字符串选项关闭的固定字节模式完成回读。需要长度头时逐项核对实际内存与客户端解析,不能把读取失败后页面回退显示的初值当作真实当前值。固定容量按字节计算,UTF-8 中文通常占多个字节;内容超出容量会被校验拒绝。字符串数组还需逐元素核对切分结果,不能只检查列表形状。
访问模式与外部写策略
| 配置项 | 行为 |
|---|---|
| 只读 | 客户端和页面都不能把该变量作为普通可写点使用。 |
| 读写 | 页面可写;通道允许外部协议写入时,客户端也可按外部写策略写入。 |
| 页面可写、外部拒绝 | Web 页面可以写值,Modbus/S7 客户端写入会被拒绝。 |
| 接受并继续变化 | 接受客户端写值,发生器仍按原时间线继续更新。 |
| 接受并暂停发生器 | 接受客户端写值,同时暂停该变量发生器,便于保持客户端下发值。 |
| 拒绝外部写入 | 即使通道允许外部写入,该变量仍拒绝客户端写请求。 |
外部协议写入需要满足通道“允许外部协议写入”和点位访问模式、外部写策略;Web 页面写入另受登录角色权限控制。涉及控制逻辑的测试点应优先使用只读或外部拒绝模式。
配置数据变化与种子
每个变量可以独立启用发生器。公共参数包括更新周期、启动延迟、恢复策略、算法版本和种子。
| 变化模式 | 适用场景 |
|---|---|
| Fixed | 自动变化开启时,每次更新重新提交已保存初值;关闭发生器后,运行写值才可持续保留。 |
| Ramp | 按步长递增或递减,可选择钳位、循环、往返或越界报错。 |
| Sine | 按中心值、振幅、周期和相位生成正弦波。 |
| Triangle | 生成三角波。 |
| Sawtooth | 生成锯齿波。 |
| Square | 按高低值、周期和占空比生成方波。 |
| Random | 在范围内按均匀或高斯分布生成随机值。 |
| RandomWalk | 从初始值开始按最大步长随机游走。 |
| Toggle | 每个更新周期翻转一次布尔值,一个完整真假周期需要两次更新。 |
| Pulse | 按周期、高电平时长和初始电平生成脉冲。 |
| Sequence | 按步骤值和保持时间顺序播放,可循环、往返或保持末值。 |
| Template | 使用计数器和模拟时间生成字符串,例如批次号或时间标签。 |
Ramp、Sine、Triangle、Sawtooth、Square、RandomWalk 仅支持数值标量;Random 支持数值或 Boolean 标量;Toggle、Pulse 仅支持 Boolean 标量,Template 仅支持 String 标量。数组仅支持 Fixed 和 Sequence。数组长度是元素数,例如三个 Double 占十二个 Modbus 寄存器;序列每步填写完整数组,使全部元素共同切换。
配置周期、边界和数值修饰
| 参数 | 配置方法 |
|---|---|
| 更新周期 | 毫秒,决定发生器推进频率,不等于客户端读取或页面刷新周期。 |
| 启动延迟 | 从当前启动时间开始等待;延迟内保留点位初始值,随后才进入发生器起点。 |
| Ramp 起点、步长与范围 | 起点在有效范围内,步长为非零有符号增量;负值表示下降。 |
| Ramp/RandomWalk 边界行为 | 钳位停在边界,循环携带越界量,往返反射;越界报错可使点位进入错误并保留最后成功值。 |
| 波形周期与相位 | 周期为完成一轮的毫秒数,相位以度表示,与更新周期分别设置。 |
| Square 占空比 | 决定一轮中高值所占比例;Pulse 另以活动窗口毫秒数和周期定义脉冲。 |
| Pulse 初始电平 | 非活动窗口使用初始电平,活动窗口取反。初始电平为假时活动窗口为真,初始电平为真时输出极性反转。 |
| Random 的布尔概率 | 仅布尔随机点使用,0 恒假、1 恒真;数值随机使用自己的范围与分布。 |
| Sequence 保持时间 | 每一步独立填写毫秒数;结束行为可循环、往返或保持末值并完成。 |
| Template 计数器与模拟时间 | 从菜单插入计数器、补零计数器或模拟时间,不执行任意表达式。模拟 UTC 起点和时间步长不等于系统墙钟。 |
数值修饰按“缩放与偏移 → 噪声 → 钳位 → 量化 → 小数位”执行。以基础值 1.3456 分别单独测试:缩放 2 得 2.6912;量化步长 0.5 得 1.5;保留三位小数得 1.346。比较某项时恢复其他修饰器,避免上次设置残留。
钳位上下界成对填写或成对清空,量化步长必须大于零。均匀噪声受正负幅度限制,高斯噪声的幅度是尺度,样本可能超出正负幅度;需要限制结果时另设钳位。量化位于钳位之后,舍入后的值仍需按最终结果检查。
确定性种子
Random、RandomWalk、噪声修饰器和故障注入都可以配置种子。相同算法版本、种子和配置会产生可重复的序列,适合自动化回归和问题复现。
| 操作 | 建议 |
|---|---|
| 固定种子 | 记录在测试用例中,保证每次运行得到相同变化轨迹。 |
| 生成种子 | 用于临时探索不同随机序列;确认问题后应记录生成值。 |
| 分离种子 | 主发生器、噪声和故障注入使用不同种子,便于单独复现。 |
| 记录算法版本 | 页面只读显示当前算法版本;复现时与种子、完整参数一起记录。 |
数值修饰器仅用于数值类型的 Ramp、Sine、Triangle、Sawtooth、Random、RandomWalk;Square、Fixed、Sequence 和 Boolean 随机点等不使用该修饰链。小数位只适用于 Float、Double、Decimal,范围为 0~28。先配置基础波形,再逐项增加修饰器并查看预览。
用真实协议验证变化
设计器预览用于检查草稿。保存点位并重新启动通道后,运行内存和外部客户端读数才反映实际生效的配置。
- 先使用固定数值点,例如保持寄存器中的
1234,确认独立客户端可读,采集点质量正常。 - 给该点启用斜坡,设置明确范围、步长和更新周期,保存并重启。连续读数应按预期方向推进,再核对边界处的钳位、循环或往返行为。
- 使用正弦、三角、锯齿或方波时,保持更新周期不变,只修改波形周期,在相同观察时长内比较峰谷或跳变次数。波形周期是一整圈所需时间,不是页面刷新周期。
- 使用随机或随机游走时,按种子
7、99、7分别重新建立时间线。同一配置和种子应重现连续片段,不同种子应改变序列;客户端读取可能跳过发生器更新,不必要求第一条读数对应内部第一步。 - 先不叠加噪声,再单独开启噪声并记录它自己的种子。不要用随机模式种子替代噪声种子。
外部写入与暂停恢复
外部协议写入需同时满足实例的“允许外部写入”、点位访问模式及外部写策略。页面“写值”还受 Web 角色权限控制,并可选择是否应用外部写策略。
| 操作或策略 | 验证方法 |
|---|---|
| 接受并继续变化 | 客户端写入后立即回读,再等多个更新周期;发生器会继续按原时间线覆盖写入值。 |
| 接受并暂停发生器 | 写入后检查“外部写暂停”状态,等待多个周期仍保持该值。 |
| 拒绝外部写入 | 独立客户端收到拒绝,发生器仍继续;实例总开关开启不能覆盖该限制。 |
| 暂停 | 发生器停止推进,服务仍可读取当前值。 |
| 继续当前时间线 | 从暂停前的进度继续。 |
| 重新开始时间线 | 从起点建立新的序列。 |
运行写值、编辑初始值和“保存当前值为初始值”分别影响当前内存、已保存起点和下次启动状态。写成功后没有保存为初始值,停止再启动仍按已保存配置装载。
运行调试与故障注入
启动与运行控制
- 确认通道处于“已停止”,完成通道和变量结构配置。
- 点击顶部“启动”。启动成功后摘要区显示监听端点和预留内存。
- 使用实际 Modbus 主站或 S7 客户端连接该端点并读写变量。
- 在变量列表中观察当前值和发生器状态;选择变量后可暂停、继续或保存当前值为初始值。
- 修改结构配置前先停止通道;仅需重新建立监听和会话时可使用“重启”。
| 命令 | 说明 |
|---|---|
| 启动 | 分配协议内存并开始监听或打开串口。 |
| 停止 | 关闭监听和客户端连接,允许修改通道与变量结构。 |
| 重启 | 停止后按当前配置重新启动。 |
| 写值 | 对单个可写变量设置当前值,可选择是否应用外部写策略。 |
| 暂停 / 继续 | 批量控制所选变量的发生器。 |
| 保存当前值为初始值 | 把当前值持久化,供下次启动恢复。大批量保存时建议按业务分组选择。 |
原始内存与客户端
原始内存
“原始内存”用于排查变量值与协议字节是否一致。
| 协议 | 可选内存区 |
|---|---|
| Modbus | Coils、Discrete Inputs、Holding Registers、Input Registers,并选择站号。 |
| S7Slave | Inputs、Outputs、Markers、Data Block;Data Block 还需选择 DB 号。 |
填写字节偏移和读取字节数后点击“读取内存”。写入十六进制前,页面会检查覆盖范围;与变量映射相交时会要求再次确认。原始内存写入会直接影响对应变量,只应在明确了解地址布局时使用。
原始偏移按字节,Modbus 保持寄存器偏移 4 对应原始字节偏移 8;线圈与离散输入的原始视图则以每个布尔量一个字节展示,不能按寄存器宽度换算。写未映射位置会改变内存但不创建变量,也不自动保存初值;写映射位置时先检查受影响点,取消确认应保持原值,确认后再从独立客户端回读。S7 还需选择正确区域及 DB 号,一个字节只有位 0~7,不能套用 Modbus 寄存器位 0~15。
原始内存写入受单独的 Web“数据写入”权限控制。它直接修改所选区域,不使用普通点位写值的只读检查,也不受通道“允许外部协议写入”和点位“拒绝外部写入”策略阻止。因此,这些设置不能用来限制具有原始内存写权限的管理用户。确认覆盖后,受影响点若选择“接受并暂停发生器”,其发生器也会暂停;其他运行中的发生器仍可能在后续周期覆盖刚写入的字节。分别检查内存、点位值和发生器状态,再用独立客户端回读。
客户端
“客户端”页显示每个连接的远端端点、连接时间、最近活动、请求/错误数量和收发字节。S7Slave 还会显示会话阶段和协商 PDU。需要终止异常连接时,可断开单个客户端或断开全部客户端。
报文与事件
在通道“诊断”中决定记录范围。

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

| 事件内容 | 说明 |
|---|---|
| 时间与类型 | 区分生命周期、客户端连接/断开、协议请求、协议错误、变量变化、发生器状态、安全拒绝和缓冲覆盖。 |
| 消息与客户端 | 显示事件摘要和关联客户端。 |
| 变量与错误码 | 显示关联变量和协议错误码。 |
| 处理耗时 | 显示请求处理耗时,便于定位异常慢请求。 |
| 请求/响应报文 | 点击事件后查看捕获的十六进制请求与响应。 |
事件列表每次只加载当前页。切换页码、页大小或筛选条件会重新查询服务端;自动刷新会取消过期请求,不会并发堆积重复刷新。页面还会提示已经被环形缓冲覆盖的旧事件数量。
故障注入
故障注入用于可重复地验证客户端超时、重连和异常处理,不应在生产联调通道中长期启用。
| 配置项 | 说明 |
|---|---|
| 启用故障注入 | 总开关。关闭后不应用延迟、抖动、丢响应和主动断开。 |
| 故障种子 | 固定随机故障序列,便于复现同一测试过程。 |
| 固定延迟 | 每个请求增加固定处理延迟。 |
| 随机抖动 | 在固定延迟基础上增加随机等待。 |
| 丢响应概率 | 按概率不发送响应,用于验证客户端超时和重试。 |
| 处理请求数后断开 | 达到指定请求数后主动断开客户端,验证自动重连。 |
验证故障和恢复
- 保持同一个端点、固定点和客户端超时,先记录无故障时的多次往返。
- 配置例如
300毫秒延迟,分别关闭、开启故障总开关,保存并重启后比较多次实际往返。只改参数草稿不能说明故障已生效。 - 测试丢响应时记录成功和超时请求,不要期待短窗口严格符合所填概率。故障种子还受连接建立顺序和请求顺序影响,复现时应保持这些条件一致。
- 测试断开连接后,核对客户端重连与采集质量恢复;延迟、抖动、丢响应和断开应分别测试。
- 完成后关闭故障注入和不再需要的发生器,保存并重启,再独立回读固定值及新采集。保留点位配置便于下次复验。
复用配置与扩大规模
导入与导出
顶部“导入 JSON”可导入完整通道配置;“更多”菜单提供导出 JSON、导入 Excel、导出 Excel和删除通道。
批量建立点位
- 停止通道,打开批量建变量,填写名称模式,例如
Tag{n}或Tag{n:000},编号从1开始。 - 填写创建数量、起始地址、类型、数组长度和初值。创建数量表示独立变量数,不是一个数组的长度。
- 地址步长
0按完整类型宽度自动推进。例如两元素 Int32 每点占四个寄存器,从偏移200批量三点应为200、204、208。 - 显式步长用于留空。Boolean 步长按 bit,寄存器第
14位开始连续四点会跨到下一寄存器第1位;S7 则按八位字节进位。 - 检查全部候选的名称、容量及相交范围后提交,重启并逐点回读。预览可能只显示部分候选,校验仍针对整组,冲突会阻止整组保存。
“下一空闲地址”按区域内已有点的最大末端向后推进,不承诺寻找中间最小空洞。批量发生器草稿复制给各个点,各自保持独立时间线。
| 格式 | 用途 | 注意事项 |
|---|---|---|
| JSON | 备份或复制通道、协议、安全、诊断、故障和变量配置。 | 导入前可选择新建通道或覆盖同协议的已停止通道,并先执行预览。 |
| Excel | 批量维护变量点表。 | 只处理变量;导入结构配置前必须停止通道。先导出模板再填写可减少格式错误。 |
导入时如果其他用户已经修改同一通道,页面会提示配置版本冲突。刷新并核对最新配置后再重新导入,不要直接覆盖未知改动。
JSON 导出保存通道和点位配置,不包含当前运行内存、客户端列表和事件历史。新建导入会生成独立对象身份,文件中的旧 ID 不会指定覆盖对象;覆盖导入必须明确选择同协议、已停止的目标,按当前修订提交整份替换。先预检再确认,取消预检确认不会保存。
Excel 使用导出的 Points 表,不要套用采集配置模板。主要列为 Id、Name、Address、DataType、ArrayLength、DataFormat、AccessMode、ExternalWritePolicy、InitialValueJson、StringOptionsJson、GeneratorOptionsJson、Sort、Description。保留身份与类型化 JSON,预检通过并确认后重新启动,核对修改点及其他未改点;越界文件应被拒绝且原配置不变。
大规模仿真与性能建议
| 场景 | 建议 |
|---|---|
| 变量很多 | 使用批量建变量或 Excel 导入;通过名称、地址、类型和访问模式筛选,按页管理,不要依赖一次显示全部变量。 |
| 高频自动变化 | 只为需要动态行为的变量启用发生器,合理设置更新周期,避免所有点都使用毫秒级变化。 |
| 长期协议压测 | 设置固定事件容量;非排错阶段关闭原始报文、成功请求或高频变量变化记录。 |
| 事件查询 | 使用事件类型和关键字缩小范围,保持分页;页面只保留当前页,不会把全部历史事件累积到浏览器。 |
| 自动刷新 | 选择与测试速率匹配的刷新周期。上一轮尚未完成时不会并发发起重复刷新。 |
| 多客户端 | 按计划连接数设置总数、单 IP 限制和请求速率,逐步增加负载并观察请求速率、错误和内存摘要。 |
排障与相关文档
常见问题
| 现象 | 处理建议 |
|---|---|
| 客户端无法连接 | 检查通道是否已启动、监听地址和端口、操作系统防火墙、允许网段、最大客户端数和端口占用。 |
| Modbus 请求返回地址错误 | 检查站号、报文格式、功能区,以及偏移加完整类型宽度是否超过分配容量;严格地址开关不控制当前访问范围。 |
| S7 客户端握手失败 | 检查端口、机架/槽号、本地与远端 TSAP、最大 PDU、允许网段和握手超时。 |
| S7 读取地址失败 | 检查 I/Q/M/DB 地址格式、DB 是否存在,以及完整类型占用是否超出对应区域容量;严格地址开关不隔离未建模位置。 |
| 客户端写值被拒绝 | 依次检查通道“允许外部协议写入”、变量访问模式、外部写策略和请求地址/数据类型。 |
| 写入后值又发生变化 | 外部写策略为“接受并继续变化”。需要保持写入值时改为“接受并暂停发生器”。 |
| 随机结果无法复现 | 固定算法版本、发生器种子、噪声种子、故障种子和启动时的初始值。 |
| 页面事件太多 | 降低事件容量,关闭成功请求或变量变化记录,并使用类型/关键字筛选和分页。 |
| 无法编辑通道或变量 | 先停止通道,再检查当前角色是否具有对应管理权限。 |