跳到主要内容

内存计算

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

创建并计算内存变量​

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

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

ManualValue 写入后当前值为 12.5,数据类型为 Object

写入窗口会自动识别数字、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 后反向核对。观察采集时间和执行错误,不能只凭结果未变化判断公式没有执行。

读取链发生异常时,已实际访问的来源仍可触发后续恢复,尚未执行部分的旧来源不继续触发。没有有效来源依赖时,按周期调度检查恢复;循环依赖应先修改公式解除,再验证各级结果。

验证两路输入和多级计算​

  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 可以保存布尔、字符串、数组和对象,写入后同时核对运行时类型。配置报警前先解除不需要的倍率,避免报警边界使用了意外的换算结果。

初始值与最新快照​

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

保存设置作用
保存初始值关闭当前值可以变化,配置中的初始值保持原值;强制保存值会关闭且不可用。
保存初始值开启,强制保存值关闭后台按普通周期保存最新快照,默认周期约 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 表示故障。需要温度与压力同时满足条件时,先建立只读布尔计算点,再启用布尔开报警,按组合条件矩阵逐项改变两路真实输入。

常见问题​

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

相关链接​