跳到主要内容

完整采集项目与交付验收

本例把温度采集、华氏温度计算、MQTT 上传、历史、报警及风机控制放在同一工程中完成。各阶段沿用相同设备和变量,便于检查数据是否从现场一路到达接收系统并完成控制反馈。

先按采集第一个点理解通道、设备和变量。下列温度、线圈地址和值用于测试,连接实际设备时按现场点表替换,并先确认控制对象允许联调。

变量与计算​

1. 建立过程变量与执行变量​

进入“开发配置 → 采集配置”,创建 Modbus 通道和设备,设置正确的远程地址、站号及执行周期。示例设备名称使用 Demo_Modbus_Device。

变量示例配置
Demo_Modbus_Value保持寄存器 40001,Int16,标量数组长度 0,源值 1234。用于确认基础通信。
Temperature保持寄存器 40011,Int16,标量数组长度 0,源值 75。单位 ℃。
Fan线圈 00001,Boolean,标量数组长度 0,初始源状态 false。测试控制时允许读写并开启 RPC 写入。

先用源端或独立客户端核对这三个点,再确认网关当前值、原始值、质量及新的采集时间。温度值与风机状态都应来自实际协议读取。

2. 计算华氏温度​

  1. 到“脚本管理”创建内存变量计算脚本,通过 Tag 引用同一设备的 Temperature,按摄氏温度乘 9、除 5、加 32 计算并返回结果。具体编写方式见内存变量脚本。
  2. 编译并保存,确认脚本可在读取转换链中选择。
  3. 在“内存计算”新增只读的 Temperature_F,保持 Object 类型,选择刚保存的计算脚本。
  4. 触发方式选择变化更新,单位填写 ℉,保存后等待结果。

脚本编辑器中填写方法体,先转成浮点数,避免整数除法丢失小数:

// 按源温度计算华氏值,使用浮点运算保留换算后的小数。
var temperature = Convert.ToDouble(Tag("Demo_Modbus_Device", "Temperature").Value);
return Math.Round(temperature * 9.0 / 5.0 + 32.0, 1);
源端温度应得到的计算结果
75 ℃167 ℉
76 ℃168.8 ℉
85 ℃185 ℉
65 ℃149 ℉

修改单位不会执行换算。应分别改变源温度并检查计算结果、质量和时间,不能只确认脚本已经编译。

上传、存储与报警​

3. 上传同一批变量​

在“数据转发”创建手动范围组,加入 Temperature、Fan 和 Temperature_F,保存后添加 MQTT 客户端目标。

  1. 配置实际 Broker 地址、唯一客户端 ID 和测试 Topic。
  2. 先保持默认 JSON,启用组和目标。
  3. 在独立订阅端核对三个变量的设备、名称和值。
  4. 将源温度改为 85,确认收到 85 和计算结果 185 的新消息,再恢复 75。

目标在线、手工发布成功都不能代替组内变量实际上传。字段格式需要定制时,再按上传模板调整。

4. 保存历史与曲线​

在包含上述变量的转发范围下添加历史数据目标,使用独立数据库或独立表名,设置保留周期和时区。

  1. 按 75 → 85 → 65 → 75 改变真实源温度,每次等待采集和入库。
  2. 打开“数据与告警 → 数据查询 → 历史数据”,选择本工程的 组名/目标名。
  3. 只选择 Temperature,查询覆盖整个变化过程的时间窗口。
  4. 对照表格、原始趋势和数据库记录,核对变化顺序与采样时间。

图表应使用覆盖整个时间窗口的独立序列查询。选择“原始点”后,核对实际返回的聚合方式、点数和截断标志;表格当前页只包含分页记录,不能把当前页当作完整曲线。

本例数值历史的时区偏移为 +08:00,SQLite 物理字段保存东八区时间文本,类型化历史查询返回 UTC 时间。直接查数据库时,先按该偏移换算为同一时刻,再比较变量 ID、采集时间及历史创建时间。报警历史目标可以使用不同偏移,本例使用 +00:00,应分别核对。

同一温度变量的历史曲线显示 75、85、65、75 四个阶段

下载时核对当前页及文件行数,其他页分别导出。详见数据入库与查询。

5. 配置报警并完成一个生命周期​

编辑 Temperature 的报警配置,仅启用本次测试用的高限条件。

先添加并启用历史报警目标,把 Temperature 纳入其转发组,最低报警等级设为 3,本例时区偏移为 +00:00。确认目标已启动,再执行下面的报警过程,历史目标才能收到全过程事件。

参数示例值
高限80
报警等级3
延时0 毫秒
报警文本工程约定的高温说明
  1. 将源温度改为 85,到实时报警页确认变量、当前值、限值和发生时间。
  2. 打开详情,执行确认并填写处理说明。
  3. 保持 85,确认操作本身不会降低温度或解除现场条件。
  4. 恢复温度 75,检查恢复状态。
  5. 到历史报警查询刚才的目标,核对同一生命周期的发生、确认和恢复。

三条状态记录应对应同一报警身份,不能仅凭相同变量名拼接不同事件。保留天数是清理策略,刚入库的记录不能证明已经完成到期清理。

实时报警显示 Temperature 为 85、高限为 80

报警与风机控制分别配置。确认表示人员已处理该事件,恢复表示触发条件已经解除,详细流程见报警查询。

控制与故障演练​

6. 建立风机回差控制​

在“规则引擎”建立测试流程,连线和参数完成前先禁用流程。

节点或连接配置
变量通知规则限定 Demo_Modbus_Device 和 Temperature。
JSON 数值提取将通知的数值转换为后续比较使用的数值输入;完整快照与值端口不要混用。
阈值触发Threshold=75、Hysteresis=5、CompareOperator=>。
变量 RPC选择本工程的 Fan,将阈值节点的 Triggered 布尔输出连到 WriteData。

保存、启用并重开检查连线。先用 85 跨过上界,再用 65 跨过下界,分别核对规则运行结果、RPC、源端线圈和网关采集回读。

阈值触发的布尔输出连接到风机变量 RPC 写回节点

连续输入风机反馈
85开启 true。
从 85 回到 75在回差区保持开启。
降至 65关闭 false。
从 65 回到 75在回差区保持关闭。

该例使用严格大于比较;边界值的行为应按所选比较符验证。回差用于减少阈值附近反复开关,不能代替独立的设备联锁与现场许可。

7. 验证故障与主备​

测试通过条件
MQTT 接收端断开离线期间写入 76、77、78,恢复后逐条核对来源身份和时间,记录缺失、重复及积压回落。
通信短时中断恢复后出现新采样,计算、报警、控制及发送继续工作。
Runtime 工作机停止备用机接管同一工程,新温度能引起报警与真实风机动作;确认没有双工作状态。
原主机恢复核对当前工作方及同步状态,按配置和确认流程交回,避免把进程启动当成已完成接管。

具体方法见离线缓存与补传及冗余与主备。

有限输入的补传验收​

为便于清点本次输入,将同一转发组暂时改为变化触发、全部分批。MQTT 目标启用失败重试缓存,文件最大行数设为 10000、内存队列上限 1000、上传分片大小 1000、并发上传数量 1,QoS 选择 1,关闭保留消息。

  1. 在独立订阅端接收消息,并通过当前数据请求主题发送一次快照请求。请求包含 Source: "TGateway" 和本次唯一的 32 位小写 RequestId,结构见 MQTT 当前数据请求。
  2. 确认收到基线温度、风机及对应请求编号的完成回执,目标缓存为空,记录接收边界。
  3. 停止本次测试的 Broker,依次输入 76、77、78,每次等到采集值与时间更新后再输入下一个值。
  4. 恢复同一 Broker,让独立订阅端先完成重连并确认订阅成功,再放开网关连接,使缓存开始发送。关闭保留消息时,订阅尚未建立会漏掉已经发布的补传消息。
  5. 在接收边界之后按变量 ID、值和来源变化时间逐次匹配,分别统计缺失和重复,观察缓存回落;不要用新的当前数据请求代替离线旧值。
  6. 恢复原过程值及生产使用的组触发策略。

容量应足以容纳故障窗口内的输入。QoS 1 与失败缓存允许重发,验收时应保留重复统计,不能据这次有限实验认定所有情况下都恰好投递一次。

主备交接检查​

同步工程后,分别核对两端通道、设备、变量、脚本、组、目标和规则的原 ID、参数及关系;相同名称不能代替对象身份一致。工程同步不复制外部历史数据库文件,历史保护按对应目标单独配置。

停止当前工作机后,用新的温度输入验证备用机采集、计算、上传、报警和风机写回。原工作机按原数据目录启动后,先检查实际工作授权:另一端仍持有有效授权时,恢复的节点应保持待机。需要交回时执行手动切换并确认,之后再次检查单工作状态与真实反馈。

备份与交付​

8. 备份和恢复​

配置数据库恢复​

“系统设置 → 系统控制 → 备份配置数据库”仅支持 SQLite 配置库,下载包含已提交 WAL 数据的一致性单文件快照,包含工程配置及账号权限。恢复时选择由该入口生成的配置备份,并确认当前配置库仍为 SQLite。采用其他类型配置库的工程按该数据库的备份恢复流程处理。独立历史库、缓存、证书文件和整个程序目录需要另行保全。

  1. 下载配置备份,记录所属网关和文件标识。
  2. 在允许恢复测试的环境中保存一项明确变化,例如修改测试变量的单位。
  3. 选择原备份并恢复,确认覆盖范围,只提交一次,等待软件实际重启。提交成功表示恢复请求已接受,应继续检查重启后的登录入口。
  4. 使用备份中的账号重新登录,确认测试差异消失,并逐项比较原 ID、设备参数、变量关系、计算源码和规则定义。
  5. 重新执行 85 → 75 → 65,验证采集、计算、MQTT、报警与真实风机反馈。

完整运行目录恢复​

完整目录快照用于一并保全程序及目录内的数据。下面的验收范围为同一 Windows 账号、同一路径恢复;跨主机、账号或路径部署时,还需处理证书私钥及受保护配置的使用条件。

  1. 停止所属网关实例,确认其已经退出,再复制完整运行目录。保留程序、配置、证书、数据库及其 WAL、目录内的历史库和缓存,并保全密钥环境。
  2. 为快照记录相对路径、文件长度和 SHA256,妥善保管包含账号及密钥的备份。外部现场源、Broker 和目录外数据库另行备份。
  3. 先保全恢复前的原目录,再把快照恢复到原位置。核对文件清单与摘要一致后启动实例。
  4. 使用备份账号重新登录,核对工程配置和全部对象 ID;按原变量及时间定位恢复前的历史记录。
  5. 再执行新的 85 → 75 → 65 输入,检查计算、报警、MQTT、风机开启、回差保持及关闭。旧曲线和快照值不能代替恢复后的新业务。

配置库恢复与完整目录恢复应分别验收。配置库单文件不包含整个运行环境,目录恢复成功也应继续核对外部连接及实际业务结果。

交付检查​

交付内容核对方法
点表与连接清单设备、地址、类型、单位、周期及控制权限与现场一致。
配置备份能实际恢复并重新登录;恢复后业务继续执行。
脚本和规则源码、依赖变量、参数和启用状态明确,输入及实际反馈对应。
上传和数据库外部接收、表模型、字段类型、时区、历史保留和断线补传均已核对。
证书与账号用途、有效期、保管位置及运维权限明确。
故障处理留有接管、恢复、日志定位和重新连接的方法。