Skip to Content
技术文档04 · 数据处理内存计算
本页目录

内存计算

打开“开发配置 → 内存计算”。这里的变量保存在网关内部,不需要连接 PLC,可用于人工设置值、计算结果或规则中间状态。

创建并计算内存变量

按采集组查找变量

左侧“内存变量”按采集组显示普通变量及数量,也可选择未分组变量;系统自动生成的只读变量在“系统内存变量”中查看。分组目录覆盖全部普通变量,不随右侧搜索或分页缩小。选择组后,再按名称和状态查找;移动端使用分组选择入口。

导出前核对当前选择的组和筛选条件。按当前组导出只包含该范围,完整备份使用“导出全部”;导出不会修改变量的采集组。配置保存后刷新目录,再核对所属组与数量。

新增一个可手动写入的变量

  1. 点击“新增变量”,名称填 ManualValue,所属设备保持“内存设备”,不需要另外新增设备。
  2. 数据类型保持 Object,初始值填 0,保持“使能”开启。内存变量在这里使用 Object,不用另选 Double。
  3. 读写权限选择允许读写,读表达式和写表达式先留空。
  4. 点击“确定”,回到列表找到 ManualValue。
  5. 点击这一行的“写入”,在“写入值”填 12.5,再点击弹窗中的“写入”。输入数字时不要加引号。
  6. 刷新列表,当前值应为 12.5。

写入窗口会自动识别数字、true / false 和 JSON 对象或数组。表格的“运行时数据类型”表示实际保存的值类型,例如本例写入后显示 Decimal,不是新增表单里需要另选的配置。

这里写的是内部变量。但如果该变量已被规则引用,写入仍可能触发下游动作。练习时使用新变量,不使用生产规则正在监听的变量。

根据已有变量计算

需要计算结果自动变化时,给内存变量选择“内存变量”类型的读表达式。不要选择采集变量使用的“数据转换”类型。

  1. 先确认参与计算的源变量已经存在并正常更新。
  2. 到脚本管理,新增“内存变量”类型的脚本,按内存变量示例编译并保存。
  3. 返回内存计算,新增或编辑结果变量,在“读表达式”中选择这个脚本。
  4. 填写脚本所需输入参数。要固定周期计算,触发方式选择定时,执行间隔先填 1000 毫秒。
  5. 保存后等待一个周期,检查“当前值”“采集时间”和“错误信息”。

读表达式为空时不会自动计算。一个变量尽量只由一种方式更新,避免人工写入后立即被计算脚本覆盖。

变量配置参考

新增和编辑变量

点击列表行的“编辑”修改。弹窗中的“保存”会保存并留在弹窗内,“确定”会保存并关闭。

配置项怎么设置
变量名称同一设备内唯一,被脚本或规则引用后不要随意改名
数据类型、初始值数据类型保持 Object;初始值按实际内容填写,例如数字 0、布尔值 false
单位按需填写,例如 kPa
读写权限人工写入或规则写入时必须允许写
读表达式自动计算这个变量的脚本;人工赋值可留空
写表达式写入时需要校验或转换才配置
读取前 / 写入后表达式链主动计算前校验,以及成功写入后的延时联动;与原有读写转换链分别配置
遥控保险关联另一变量;每次命令主动读取其来源,按自定义允许值和可选的有效期放行
触发方式、执行间隔决定计算何时执行;定时计算的间隔单位为毫秒
报警配置根据数值或布尔条件配置,报警表达式使用“数据转换”脚本。
值过滤采集数值过滤规则;手动内存写入后,按实际值类型核对写入结果。

选择计算触发方式

触发方式决定什么时候运行公式,执行间隔决定周期调度。检查效果时同时看采集时间、变化时间、质量和错误;公式再次执行但结果相同,变化时间可以保持。

触发方式有变量依赖时的行为
变化时更新脚本通过 Tag 引用的输入变化后计算;即使填了 4000,稳定输入也不会因此每四秒重算。
间隔更新按毫秒数或包含秒字段的六段 Cron 执行;输入改变后等待下一次调度。
间隔或变化时更新周期到达或依赖变化都可以触发计算。

执行间隔例如 1000 表示一秒,*/2 * * * * * 表示每两秒。留空时使用内存设备的默认间隔。没有通过 Tag 读取输入的脚本按周期执行,包括返回当前时间的脚本。

条件分支中的依赖

仅当前分支实际通过 Tag 读取的输入会触发变化计算。决定分支的开关也应通过 Tag 读取,以便切换时重新计算。

例如公式先读取选择开关,再从 A、B 中选择一路:选择 A 时改变 A 应触发计算,改变 B 不应因该分支触发;切换到 B 后反向核对,同时观察采集时间和执行错误。

脚本读取中途失败时,已通过 Tag 读取的输入变化仍可触发重算;尚未执行部分的旧输入不再触发变化计算。没有有效输入依赖时,按周期检查恢复。先修复输入质量或脚本错误;循环依赖应先修改公式解除,再验证各级结果。

验证两路输入和多级计算

  1. 创建可写的 Memory.InputA、Memory.InputB,初始值分别为 10、20。
  2. 创建“内存变量”脚本,按内存脚本示例读取两个真实变量,明确转换为数值后求和并返回。
  3. 创建只读结果 Memory.Total,绑定脚本并保存。质量正常时应得到 30。
  4. 只把 A 改为 15,确认 B 仍为 20、Total 为 35;再把 B 改为 25,确认 Total 为 40。
  5. 分别选择三种触发方式。在稳定输入和单路变化两种条件下观察时间,区分立即响应与等待周期。
  6. 需要多级计算时,让第二级脚本读取 Total,逐级核对输入和结果。避免直接或间接循环依赖。

计算结果设为只读可阻止外部写入,计算任务仍可更新它。输入离线或脚本异常时,先处理质量和错误,再核对重新计算后的值。

内存写表达式与权限

内存读计算选择“内存变量”脚本,写表达式选择“数据转换”脚本,两者绑定位置不同。手动输入值先经过写表达式,再进入内存当前值。

例如写脚本将输入乘以参数 Scale:绑定 2 后写入 5,实际值应为 10;只把当前变量参数改成 3,再次写入 5 应为 15。清除写表达式并保存后,同样输入得到 5,原脚本仍保留在目录中。

分别检查“RPC写入使能”、变量读写权限和系统只读身份。配置为“只写”的变量仍可在内存列表中显示最近保存值。Object 可以保存布尔、字符串、数组和对象,写入后核对运行时类型。配置报警前先解除不需要的倍率,确保报警边界使用预期的换算结果。

操作链与遥控保险

内存变量也可独立使用读取前、写入后表达式和遥控保险。例如用“延时写入变量”在写入 1 三秒后恢复 0,再用命令的写表达式检查该内存保险;选线请求等待写回完成再返回,命令需在等待期间由另一请求下发。若选择变量级保险,可自定义允许值、关闭值,并通过“到期写回”决定是否由 TG 计时复位。变量级保险的计时不依赖选线请求等待,关闭“到期写回”后仅跟随每次主动读取的外部状态。

初始值与最新快照

“初始值”决定变量装载时的起点;运行中的当前值不会因为显示在列表中就自动成为下次起点。

保存设置作用
保存初始值关闭当前值可以变化,配置中的初始值保持原值;强制保存值会关闭且不可用。
保存初始值开启,强制保存值关闭按周期保存最新快照,默认约 30 分钟,可随部署设置调整。
保存初始值、强制保存值均开启约每秒保存各变量的最新快照,连续更新只保留最新值;写值后需等待保存完成。

采集变量的快照来自原始值。例如读表达式把 1234 换算成当前值 12.34,保存的起点仍为 1234;重建后,等待新采集和换算完成,再读取当前工程量。

快照用于任务重建后恢复状态,不是逐条历史。快速连续写入的中间值可能被合并,需要完整变化记录时另行配置历史数据存储。关闭保存不会清除已经持久化的旧初值;需要新的起点时,应明确编辑初始值。

验收时先记录初始值和当前值,写入一个不同的安全测试值,等待保存后在维护窗口重启数据任务,再核对同一变量恢复的值。数据任务重启会重建采集和仿真任务;同时检查源端运行状态及新采集恢复情况。

设备和通道状态变量

新增或编辑采集设备、通道后,系统会在 Memory 设备下自动生成对应的只读系统变量。系统会定期读取当前状态并更新变量,通常约每秒刷新一次。用户不需要手工创建或修改这些变量。

对象变量名称数据类型可能的值说明
采集设备<DeviceName>_DSString(字符串)Default、OnLine、OffLine、Pause表示设备当前状态。
通道<ChannelName>_TSBoolean(布尔)true(在线)、false(离线)表示通道在线状态。

变量名称中的设备名称和通道名称来自对应资源,不需要手工填写。实际名称、描述和当前值可在内存变量列表中查看。

操作步骤

  1. 登录 TGateway Web,进入“开发配置 → 内存计算”。
  2. 在左侧选择“系统内存变量”,清除搜索条件,点击“刷新”。
  3. 在变量列表中查找以 _DS 或 _TS 结尾的变量,查看“描述”和“当前值”。
  4. 设备或通道状态发生变化后,等待约一个刷新周期,再查看“当前值”。

设备状态变量和通道在线变量都不能手工写入、编辑或删除。需要在规则、脚本或数据转发中使用时,直接选择对应的变量名称即可。

两种状态的区别

查看项表示
设备状态采集设备自身的运行状态,可能为初始化、在线、离线或暂停。
通道在线状态通讯通道是否在线。同一通道被多个设备共用时,该变量仍只对应这一条通道。

设备名称或通道名称修改后,对应变量名称会同步改为新的名称和后缀,变量描述也会同步更新。删除设备或通道后,对应的状态变量会自动消失。

通道类型提示

不需要普通通讯连接的通道,其在线状态可能显示为 true。这表示该通道不需要外部连接,不代表某个采集设备已经在线。

维护与使用

批量修改与备份

少量相似变量可使用行内“复制”。批量修改时先勾选变量,再选择“批量编辑”,只修改本次需要调整的字段。

Excel 操作:

  1. 先导出一份现有内存变量,保留原文件作备份。
  2. 在副本中保留工作表和列名,新增变量时使用不重复的名称;不要修改系统自动生成的状态变量。
  3. 点击“导入变量”选择文件,等待导入结果。选择后即开始导入,不是预览。
  4. 按失败行修正文件,成功后回到列表检查变量和值。

“导出变量”导出当前页及筛选范围内的内存变量;要完整备份内存变量,使用“导出全部”。通道、设备和普通点表的导入规则见采集配置 → 导入导出。

用于规则、报警或上传

创建好内存变量后,可在规则或转发组中按 Memory.变量名 选择它。需要上传时,仍要将它加入转发组成员,不是创建后就自动上传。

报警在该变量的“报警配置”中设置,步骤见报警查询。

数值枚举可使用状态映射,例如 100 表示维护、101 表示故障。需要温度与压力同时满足条件时,先建立只读布尔计算点,再启用布尔开报警,按组合条件矩阵逐项改变两路真实输入。

常见问题

现象先检查
当前值不更新是否启用,是否配置读表达式,定时触发和执行间隔是否正确
写入失败读写权限、数据类型、输入值格式,以及是否为只读系统变量
脚本报找不到变量脚本中的设备名与变量名是否与现有配置完全一致
列表找不到变量清空筛选条件后刷新
转发中没有这个变量检查组范围是否包含这个内存变量
想删除变量先检查脚本、规则和转发引用,导出备份后再删除

相关链接