You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取PLC标签子元素名称前缀数字实现点位自动映射

实现场景说明

待处理的子元素统一采用[数字编号]_[子元素名]的命名格式,示例如下:

  • 001_Child1
  • 030_Child2
  • 109_Child3
    需要配置单一通用库属性,提取名称开头的数字编号,映射到对应PLC点位,映射规则为:编号值为N的子元素,指向PLC(N).Cnt,示例对应关系:
  • 001_Child1 → PLC(1).Cnt
  • 030_Child2 → PLC(30).Cnt
  • 109_Child3 → PLC(109).Cnt
之前方案的问题

之前尝试的两类方案都存在硬编码逻辑缺陷:

  • 基于Left指令做前导零替换:逻辑没有区分「无意义前导零」和「数字有效位的0」,会误删数字中间的有效0,比如030被错误处理为3、109被错误处理为19
  • 固定长度截取删除前两位字符:完全没有适配不同编号的长度差异,会出现030截取后得到0、109截取后得到9的错位问题
正确实现方案

不要手工做字符串裁剪、零值替换,直接用内置函数按分隔符定位+数值类型自动转换即可,单属性表达式如下:

PLC(VAL(LEFT(THIS.Name, FIND(THIS.Name, "_")-1))).Cnt

执行逻辑说明

  1. FIND(THIS.Name, "_"):定位子元素名称中下划线的位置,自动适配任意长度的数字编号段,不存在固定长度截取的错位问题
  2. LEFT(..., 上述返回值-1):截取从名称开头到下划线前的完整数字字符串,001/030/109这类完整数字段会被全部取出,不会丢失任何字符
  3. VAL(上述截取的字符串):将数字字符串转为数值类型,转换过程会自动丢弃无意义的前导零,同时完整保留数字中间、末尾的有效0:"001"转成数值1、"030"转成数值30、"109"转成数值109,不会出现误删有效0的问题
  4. 转换后的数值直接作为PLC数组的索引传入,即可完成正确映射

该方案为单一属性配置,不需要额外辅助变量、脚本逻辑,适配任意长度的带前导零数字编号场景,全场景通用。

内容的提问来源于stack exchange,提问作者Maverick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:12:36