【文献笔记】LLM-based control code generation using image recognition
LLM-based control code generation using image recognition
原文代码
标题翻译:基于图像识别的LLM控制代码生成
1. 内容介绍
1.1. 简介
论文提出了一种基于LLM的新方法,通过图像识别从管道仪表图(Piping and Instrumentation Diagrams, P&IDs )的拓扑结构生成IEC 61131-3结构化文本(Structured Text, ST)控制逻辑代码,旨在减少工业自动化中控制逻辑的手动编程工作量。
1.2. 背景与问题
1.2.1. 工业自动化的挑战
控制工程师通常使用标准化的编程语言(如IEC 61131-3 ST)手动编写控制逻辑,工作量巨大且容易出错。ST语言受Pascal和C语言启发,适合表达如PID控制、互锁(interlocks)和顺序逻辑(sequential logic)等控制策略。
1.2.2. P&IDs的作用和局限
过程工程师通过P&IDs(管道仪表图)指定控制策略需求,P&IDs包含管道、容器、阀门、传感器等元素。通常是CAD画出来的,然后图纸通常以纸质或PDF格式分发,难以直接用于算法处理。
P&IDs示例图
除了P&ID,过程工程师还使用I/O表和控制叙述来表达自动化需求。I/O表通常是一个大型表格,其中每个条目代表与特定传感器或执行器相关的模拟或数字信号。这些表格指定了I/O信号的特性,可能已经包含了报警限制阈值和期望设定点。
控制叙述(control narratives)是使用自然语言表达的所需控制策略,它是独立于特定的控制系统进行制定的,并且必须翻译成供应商特定的编程符号和控制功能块。【另一篇就是从控制叙述中生成控制代码,另一篇的笔记】
1.2.3. 现有方法
现有方法大致可以分为三类:
- 从P&IDs生成控制逻辑:这些方法未使用LLM,依赖特定格式或规则
- P&ID图像识别:仅限于图像识别上面的符号,也没有生成控制代码
- 其他领域的图像识别代码生成:从网页草图生成HTML、从UML图生成代码、使用LLM生成P&IDs,这些方法都未处理P&ID的复杂图形或生成控制逻辑
1.2.4. LLM的潜力
近年来,大型语言模型(如GPT-4)集成了图像识别、领域知识和代码生成能力,为从P&IDs自动生成控制代码提供了可能。论文提出利用LLM的这些能力,结合图像识别,生成符合IEC 61131-3标准的控制逻辑代码
2. 研究方法
论文提出利用LLM的领域知识和代码生成能力,结合图像识别,生成符合IEC 61131-3标准的控制逻辑代码。替代人工解读P&IDs和编写代码,提升效率和代码质量。
- 预处理(Step 1):
将纸质P&IDs扫描为数字图像,或对PDF格式的P&IDs进行颜色和对比度调整以提高图像识别质量;对于复杂P&IDs,可能需要分割为较小的图像块,以适应LLM的处理能力。 - 代码生成(Step 2):
- 子步骤2.1:生成控制回路(Control Loops):
LLM识别P&ID中明确指定的控制回路(如图1中的LIC_B115),为每个回路分配预定义的PID功能块,生成相应的ST代码 - 子步骤2.2:生成互锁逻辑(Interlocks):
LLM识别P&ID中的互锁需求(在特定条件满足或不满足时,自动触发某些动作以防止设备损坏、工艺失控或安全事故;如防止储罐溢出的泵关闭逻辑),生成相应的ST代码 - 子步骤2.3:生成顺序逻辑(Sequential Logic):
LLM分析P&ID的工艺流程,生成启动/关闭过程的顺序逻辑代码
- 子步骤2.1:生成控制回路(Control Loops):
- 代码导入(Step 3):将LLM生成的ST代码导入控制逻辑开发环境(IDE),如OpenPLC
- 代码编译(Step 4):将ST代码编译为C代码或机器代码
- 测试与调试(Step 5):在IDE的仿真环境中测试代码,验证功能和非功能需求
- 部署(Step 6):将通过测试的代码部署到工业控制器,用于实际生产过程控制
优点:灵活性
- 该方法不依赖特定的P&ID符号、编程语言或LLM。
- 可扩展到其他输入(如I/O列表、控制叙述)或输出(如功能块图、顺序功能图)。
- 未来可生成测试代码或人机界面代码
缺点:当前论文提出的代码生成方法尚未完全自动化,仍然需要人工与LLM(如GPT-4)交互,通过手动编写提示(prompt)来指导LLM识别P&IDs并生成代码。例如,他们可能会上传P&ID图像,并编写类似以下的提示:“这是xxx图,识别一下帮我生成xxx代码”。因此,当前流程依赖人工与LLM的交互,属于交互式操作。
3. 实验与评估
论文通过三个工业P&ID案例研究评估了方法的有效性,使用的LLM为2023年11月版本的GPT-4,开发环境为开源的OpenPLC。评估采用探索性方法,通过交互式ChatGPT界面进行
3.1. 案例1:Eastman Chemical
3.1.1. P&ID描述
来自Eastman Chemical公司的工艺工厂,包含三个蒸馏塔、两个分离器和多个循环流,14个控制执行器和15个指示器
3.1.2. 任务与结果
-
控制回路:
- GPT-4正确识别了14个控制点(7个流量、3个液位、2个压力、2个温度)。
- 识别前馈级联控制方案(feedforward cascading control)时,仅正确识别1个,漏识4个,需人工纠正。
- 为温度控制器TC-1和流量控制器FC-5生成46行ST代码,语法正确,满足了最低功能规格,可在OpenPLC中编译和仿真。
-
互锁:
- 正确指定蒸馏塔E-7的液位和温度互锁,但错误添加了不存在的压力传感器互锁。
- 生成76行ST代码,逻辑合理。
-
顺序逻辑:
- 正确识别工艺起点(In_2_Feed和阀门V-1),生成9步启动序列。
- 为第2步(启动蒸馏塔1)生成55行ST代码,逻辑简单但符合P&ID。
问题:
- GPT-4难以识别复杂拓扑结构,偶尔误认管道标签或虚构控制点。
- 生成的代码较抽象,需更多上下文(如设定点、报警限值)。
3.2. 案例2:DEXPI
3.2.1. P&ID描述
由DEXPI组织提供,基于ISO 10628标准,包含一个大储罐、两个泵、两个换热器和四个仪表,用于测试数据交换。
3.2.2. 任务与结果
1. 控制回路:
- GPT-4正确识别温度控制器TICSA 4750.03和压力控制器PICSA 4712.02,但误将手开关和压力指示器识别为控制器。
- 为PICSA 4712.02生成38行ST代码,但输入/输出信号引用错误(如误用流量孔板标签)。
2. 互锁:
- 缺乏储罐T4750功能信息,生成通用互锁列表(液位、压力、温度等)。
- 提供储罐尺寸和设计压力后,生成66行ST代码(图6),合理设置报警限值(如90%储罐高度)。
3. 顺序逻辑:
-
正确识别泵P4711和P4712的启动顺序,生成抽象的储罐填充代码。
问题:
- 图像识别错误(如误判连接线)导致信号引用错误。
- 未能正确识别管道路径和喷嘴列表(虚构不存在的N4喷嘴)。
- 代码抽象,需更多上下文。
3.3. 案例3:Butane Regeneration
3.3.1. P&ID描述:
韩国工程公司提供的丁烷再生空气和水冷系统P&ID,包含两个水冷器、一个带两个风扇的空气冷却器
3.3.2. 任务与结果
1. 控制回路:
- 完整P&ID识别时,GPT-4虚构多个控制器。使用图7切片后,错误减少,但仍误将温度变送器识别为控制器。
- 为温度控制器TIC2911生成ST代码,语法正确但标签错误。
2. 互锁:
- 为容器E-234-009生成13个互锁,包括不可实现的扇形互锁(因缺少传感器)。
- 生成的ST代码包含合理的过程参数范围。
3. 顺序逻辑:
- 生成10步启动序列,正确包括进料建立和冷却器启动。
- 初始ST代码(77行)过于通用,含并行启动错误。
- 优化提示后,生成83行ST代码(图8),包含状态机和定时器,修复错误。
问题:
- 图像识别不准确,误认风扇为泵。
- 需更具体的提示以生成实用代码。
3.4. 讨论
限制:
- 内部有效性:LLM的非确定性可能导致结果差异。
- 构造有效性:仅测试PDF格式P&IDs,未包括智能P&IDs;未使用库功能块,代码偏低级。
- 外部有效性:方法适用于多种P&ID符号和自动化子领域,但具体表现依赖LLM训练数据。
4. 结论与未来工作
4.1. 结论
- 论文提出了一种基于LLM的控制代码生成方法,通过图像识别从P&IDs生成IEC 61131-3 ST代码。
- 三个案例研究证明了方法的可行性,GPT-4能在秒级生成可编译的代码。
- 图像识别存在问题(如误认控制器、管道路径),生成的代码偏抽象,需更多上下文。
- 方法可通过批处理实现高度自动化,降低工程成本。
4.2. 意义
- 实践者:可将方法应用于项目,基于论文提示定制自己的提示。
- 开发者:可开发工具支持方法自动化。
- 研究者:可结合深度学习图像识别和工业代码生成,优化方法。
4.3. 未来方向
- 在更大P&ID数据集上测试,优化提示设计。
- 实现非交互式批处理,自动生成大量代码文件。
- 集成I/O列表、控制叙述等输入,采用检索增强生成(RAG)提高代码准确性。
- 支持特定供应商的功能块,生成仿真或人机界面代码。
- 开发自动验证工具,检查代码的正确性和兼容性。