一、现象
做MES项目,甲方负责PLC,我们负责上位机。
甲方给的就是这样的东西:
某个西门子DB块的点位表PDF,里面写着:变量名、数据类型、偏移量、起始值——几十个字段,十几个DB块,每个DB块结构不同。
我的任务:把这些PDF里定义的点位,一条条输入到KingIOServer的TAG_TABLE导入模板中,生成一个可以直接导入KingIOServer的Excel文件。
听起来很简单?不就是把PDF里的内容抄到Excel里吗?
但实际做起来才知道有多坑:
-
变量名、数据类型、地址偏移、位号,一个都不能错
-
String类型的地址格式是
DB块.偏移.长度,Bool类型是DB块.字节.位号,Int/Real 是DB块.偏移——不同数据类型地址格式不一样 -
甲方PDF里可能还有结构体数组(Array of Struct),一个材料数组展开就是8个点位
-
如果一个项目有40个工位,每个工位80个字段,就是3200个点位——手动敲,敲到怀疑人生
以前一个项目下来,光整理点表就要花两三天,而且眼睛盯久了,很容易敲错地址或者漏掉某个点位,导入后通讯不上,又要回头一个个排查,非常痛苦。
二、问题分析
这类工作的本质是:「格式转换」。
甲方PDF的格式(TIA Portal DB定义):
| 名称 | 数据类型 | 偏移量 | 起始值 |
|---|---|---|---|
| 工单ID | String[12] | 0.0 | '' |
| 状态 | Int | 14.0 | 0 |
| 申请 | Bool | 16.0 | false |
| 任务完成 | Bool | 16.1 | false |
KingIOServer导入格式(TAG_TABLE,51列):
| TagName | TagDataType | ItemDataType | ItemName | ItemAccessMode | ... |
|---|---|---|---|---|---|
| XXX_工单ID | IOString | STRING | DB[N].0.14 | 读写 | ... |
| XXX_状态 | IOShort | SHORT | DB[N].14 | 读写 | ... |
| XXX_申请 | IODisc | BIT | DB[N].16.0 | 读写 | ... |
| XXX_任务完成 | IODisc | BIT | DB[N].16.1 | 读写 | ... |
核心映射规则:
| TIA类型 | KIO类型 | 地址格式 | 量程 |
|---|---|---|---|
| String[n] | IOString/STRING | DB块.偏移.长度(2+n) | 无 |
| Int | IOShort/SHORT | DB块.偏移 | ±32767 |
| Real | IOFloat/FLOAT | DB块.偏移 | ±1e9 |
| Bool | IODisc/BIT | DB块.字节.位号 | 无 |
| Byte | IOByte/BYTE | DB块.偏移 | 0~255 |
| DInt | IOLong/LONG | DB块.偏移 | ±999999999 |
| DWord | IODWord/LONG | DB块.偏移 | 0~999999999 |
这些规则固定不变,完全可以自动化。
三、解决方案
我用的工具是Hermes Agent(一个开源的AI Agent工具),它可以在本地运行,连接DeepSeek等大模型,帮我执行自动化任务。
核心思路:让AI解析PDF → 按映射规则生成Excel,一步到位。
3.1 解析PDF
甲方PDF是西门子TIA Portal导出的DB定义,结构固定:属性表(DB编号、名称)+ 字段表(名称、数据类型、偏移量)。
AI自动提取这两个信息,得到DB编号和字段列表。
3.2 按规则转换
对于每个字段,按上述映射规则生成对应的KIO行:
-
String[n] →
IOString,地址DB{N}.{偏移}.{n+2} -
Int →
IOShort,地址DB{N}.{偏移} -
Bool →
IODisc,地址DB{N}.{字节}.{位号} -
Real →
IOFloat,地址DB{N}.{偏移} -
说明性字段(如"原料 库位申请")→ 不建点,存入Description列
3.3 处理复杂结构
实际项目中,甲方点表不止简单的平铺字段,还有几种复杂情况,AI都能处理:
① 结构体数组(Array of Struct)
一个材料数组包含ID、长、宽、厚度4个子字段,共2个元素 → 自动展开为 材料0_ID、材料0_长、材料0_宽、材料0_厚度、材料1_ID……共8个点位,地址自动匹配。
② 分组重复字段
同一个DB里有"托盘1"和"托盘2"两组,每组都有"状态"和"到位"字段 → 自动加前缀:托盘1_状态、托盘1_到位、托盘2_状态、托盘2_到位,避免重名。
③ 40个工位×80个字段
最夸张的一个点表:40个工位,每个工位74个字段,共2960个点位。如果手动敲,眼睛绝对看花。AI自动为每个工位加前缀(工位数据0_工单ID、工位数据1_工单ID…),一次生成,5分钟搞定。
④ 自动识别访问模式
有些甲方的PDF注释列里会写R/W、R(读写/只读),AI自动识别,直接配置到对应的ItemAccessMode列,不用手动指定。
四、效果对比
| 对比项 | 手动整理 | AI自动生成 |
|---|---|---|
| 1个DB(50个点) | 约1小时 | 30秒 |
| 10个DB | 1天 | 5分钟 |
| 40工位×74字段(2960点) | 2~3天 | 5分钟 |
| 准确率 | 凭眼力,难免出错 | 100%(规则化) |
| 重复劳动 | 每个项目来一遍 | 一次配置,永久复用 |
实际项目数据:一个MES项目的配盘系列点表,共18个DB块,6000+个点位,AI全部转换完成,耗时不到1小时(主要是解析PDF的时间,生成Excel本身几秒钟)。
五、总结
这次经历让我最大的感触是:
工控人也要学会"借力"——不是所有问题都要靠加班解决。
重复性工作(格式转换、数据整理、批量录入)是AI最擅长的。把精力解放出来,去解决真正的业务逻辑问题,效率翻倍,人也轻松。
当然,AI不是万能的:
-
甲方的PDF格式五花八门,需要不断补充规则
-
生成完成后的验证还是得人工做(抽查几个点位地址)
-
涉及保密数据,建议在本地运行AI,不要上传到云端
但总体而言,这个工作流已经把"几天"变成了"几分钟",投入产出比非常高。
如果你也在做KingIOServer的点表整理,或者有类似的重复性数据转换工作,可以试试这个思路——让AI帮你做苦力,你做更有价值的事。
附录:转换规则速查表
| TIA类型 | TagDataType | ItemDataType | 量程 | 地址格式 |
|---|---|---|---|---|
| String[n] | IOString | STRING | 无 | DB{N}.{偏移}.{2+n} |
| Int | IOShort | SHORT | 32767/-32768 | DB{N}.{偏移} |
| Real | IOFloat | FLOAT | ±1e9 | DB{N}.{偏移} |
| Bool | IODisc | BIT | 无 | DB{N}.{字节}.{位号} |
| Byte | IOByte | BYTE | 255/0 | DB{N}.{偏移} |
| DInt | IOLong | LONG | ±999999999 | DB{N}.{偏移} |
| DWord | IODWord | LONG | 0~999999999 | DB{N}.{偏移} |
注意:地址在 KIO 的 ItemName 列,RegName 恒为 DB,RegType 恒为 3,不要填反。