📢 转载信息
原文作者:Aparajithan Vaidyanathan, Divakaran Ullampuzha Mana, Charu Dixit, Debasish Mishra, Rejin Surendran, and Bakrudeen K
本文由 Rejin Surendran(来自 Wipro Enterprises Limited)和 Bakrudeen K(来自 ShellKode)共同撰写。
在制造业环境中,工业自动化工程师面临着一个重大挑战:如何快速地将复杂的流程需求转换为可编程逻辑控制器(PLC)梯形图文本代码。这种传统的、手动流程通常需要 3-4 天处理每个查询,给生产工作流程造成瓶颈。复杂性源于多种因素:工程师必须将高级需求一丝不苟地转换为精确的机器指令,同时管理多个状态和转换;促进符合国际 PLC 编程标准 IEC 61131-3;处理复杂的变量声明;维护详细的工业合规性文档;并对安全协议和执行路径进行彻底测试。
Wipro PARI 是全球最大的自动化公司之一,拥有 1,300 多名员工和遍布全球的三个设施,总部位于印度浦那。Wipro PARI 的愿景是利用其专业知识和资源,为客户带来自动化和机器人领域的最佳解决方案。
在本文中,我们将分享 Wipro 如何利用 Amazon Bedrock,通过实施先进的提示工程技术、自定义验证逻辑和自动化代码校正,来大规模简化工业自动化代码的开发。我们将介绍架构以及关键用例,解释核心组件和工作流程,并分享展示对制造运营的变革性影响的真实结果。
为什么 Wipro PARI 选择 Amazon Bedrock?
Wipro PARI 与 AWS 和 ShellKode 合作,开发了一个创新的解决方案,利用人工智能彻底改变了这种耗时的 PLC 代码生成过程。使用 Amazon Bedrock 和 Anthropic 的 Claude 模型,我们开发了一个系统,该系统:
- 将 PLC 代码生成时间从 3–4 天减少到每个需求大约 10 分钟
- 将代码准确率提高到 85%
- 针对行业标准自动化验证
- 自动处理复杂的状态管理和转换逻辑
- 促进正确的变量声明和命名约定
- 维护合规性文档和审计跟踪
- 为工业工程师提供用户友好的界面
Wipro PARI 选择 Amazon Bedrock 作为此 PLC 代码生成解决方案的基础,因为它具有与工业自动化要求相符的企业级功能组合。凭借 Amazon Bedrock 中提供的广泛模型选择,团队可以使用 Anthropic 的 Claude 3.5 Sonnet 进行复杂的代码生成,同时保持灵活性,以便在未来出现更新、功能更强大的版本时,无需更改基础设施即可切换模型。完全托管的服务减少了托管和扩展机器学习(ML)基础设施的操作开销,帮助 Wipro PARI 的工程师专注于特定领域的自动化逻辑,而不是模型部署。
对于工业应用来说至关重要的是,Amazon Bedrock 确保客户数据——包括专有的控制逻辑和制造规范——保留在 AWS 环境内,并且不会用于训练底层基础模型(FM),从而保持严格的数据隐私和知识产权保护。这种安全态势,加上 AWS 合规性认证,为处理敏感运营数据的制造环境提供了企业级治理要求。
解决方案概述
在本节中,我们将介绍 Wipro PLC 代码生成器的解决方案架构和用户工作流程。下图说明了端到端架构。

架构组件
该架构由以下关键组件组成:
- 前端客户端层 – 前端客户端层由一个基于 React 的响应式 Web 应用程序组成,使工业工程师能够上传控制逻辑电子表格、配置生成设置,并带有完整可追溯性的方式验证生成的梯形图代码。
- 后端应用程序服务层 – WIPRO PARI 解决方案实施了基于 React 和 FastAPI 的微服务架构,其中超过 30 个专用 API 部署在安全虚拟私有云(VPC)环境中负载均衡的 Amazon Elastic Compute Cloud(Amazon EC2)实例上,用于工业自动化 PLC 代码生成,并计划在未来迭代中迁移到 Amazon Elastic Container Service(Amazon ECS)。VPC 配置包括公有和私有子网隔离,并带有堡垒服务器访问控制,用于安全远程管理工业控制系统开发服务。后端应用程序服务层组织成不同的组件,包括用于请求处理的控制器、用于业务逻辑的核心服务、用于用户管理的身份验证模块、用于电子表格处理的文件处理引擎,以及用于从工业自动化文档中提取控制逻辑规范的电子表格解析器。
- AI/ML 处理层 – 该解决方案包含一个专用的 AI/ML 处理层,与 Amazon Bedrock 集成,并根据任务的复杂性和要求使用多个 Anthropic Claude 模型。大型语言模型(LLM)集成服务将控制逻辑需求转换为中间结构化伪查询,然后通过多迭代处理转换为标准化的 PLC 梯形图文本代码。该系统处理复杂的工业自动化场景,包括制造控制系统中常见的并行执行路径、分叉/解除分叉逻辑和布尔表达式。
- 数据和存储层 – 生成的 PLC 代码会经过智能校正,以修复特定于梯形图编程的语法和逻辑错误,然后根据预定义的工业准则进行系统验证,以促进代码质量和安全合规性。Amazon Simple Storage Service(Amazon S3)存储桶用于存储生成的代码工件、模板和工业项目管理的版本历史记录。该系统使用 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 数据库进行持久状态管理、项目跟踪以及控制逻辑规范与生成代码之间关系的维护。
用户工作流程
代码生成工作流程包括以下步骤:
- 用户输入和身份验证 – 工业工程师登录 React Web 应用程序,通过基于角色的访问控制进行身份验证,并上传 Excel 电子表格。
- 数据处理和转换 – 系统通过 Excel 解析器处理包含 PLC 编程要求的控制逻辑规范的上传电子表格。它提取控制逻辑数据,根据工业标准验证输入规范,并将原始数据转换为适合 AI 处理的结构化格式。
- AI 驱动的代码生成 – LLM 集成服务使用 Anthropic 的 Claude 3.5 Sonnet 将结构化需求发送给 Amazon Bedrock,模型生成中间伪查询,将其转换为标准化的 PLC 梯形图文本代码,并处理复杂的工业自动化场景,包括并行执行路径和布尔表达式。伪查询是用于将人类可读的控制逻辑需求从 Excel 电子表格转换为可供 AI 模型处理以生成 PLC 代码的标准化格式的中间结构化表示。
- 示例规范 – 当温度 > 80°C 且 压力 < 5 bar 时,打开冷却泵
- 伪查询 –
IF (TEMP_SENSOR > 80) AND (PRESSURE_SENSOR < 5) THEN SET COOLING_PUMP = TRUE
- 验证和存储 – 生成的 PLC 代码经过针对 IEC 61131-3 标准的自动质量验证,智能校正修复语法和逻辑错误,经验证的代码工件以版本控制和可追溯性的方式存储在 Amazon S3 中。
- 工程师审查 – 工业工程师通过 Web 界面审查生成的梯形图代码,验证代码质量和安全合规性,下载经验证的 PLC 代码以进行部署,并为工业合规性要求维护带有完整审计跟踪的项目历史记录。
下面的 GIF 演示了从 Excel 上传到 PLC 代码生成和下载的完整用户工作流程。

安全性和合规性
用户身份验证和授权通过 Amazon Cognito 进行管理,该服务验证用户凭据并执行基于角色的访问控制,以确保只有授权人员才能访问 PLC 代码生成功能和敏感的工业自动化数据。安全性通过管理工程师权限的 AWS Identity and Access Management(IAM)基于访问控制以及用于工业数据保护的服务到服务身份验证来实现。Amazon GuardDuty 提供持续的威胁检测,AWS CloudTrail 维护对代码生成活动的全面审计日志,以满足工业合规性要求。
在接下来的部分中,我们将详细分解每一项功能。解决方案中使用的模块通过简化的工作流程集成,以最大限度地提高自动化和准确性。
数据格式化器
该解决方案首先处理伪查询输入,如下所示。这个关键的第一步将各种输入格式转换为可以被语言模型有效处理的标准化结构。

工作流程遵循以下步骤:
- 用户通过 UI 界面上传电子表格中可用的控制逻辑作为输入。
- 格式化器从上传的电子表格中智能提取状态定义、转换编号、相关操作以及分叉/解除分叉路径关系。提取的信息在下游流程中用于验证 PLC 代码。
- 提取的信息存储在 S3 存储桶中以供持久化和将来参考。
- 数据格式化器构建一个包含原始电子表格数据和特定处理指令的综合提示。
- 该提示发送给 Anthropic 的 Claude 3.5 Sonnet,以将控制逻辑转换为结构化的伪查询格式。为符合 PLC 变量命名约定,冗长的描述被缩写为 20 个字符。
- 数据格式化器然后将控制权传递给 PLC 代码生成器模块。
以下代码是样本中间伪查询(数据格式化器模块的输出)。该伪查询实现了一个工业机械的安全监控系统,确保机器仅在满足安全条件时运行。它监控安全门和紧急按钮,并在安全违规后包含适当的复位程序。每个状态网络包含状态编号、转换变量以及每种转换要执行的操作。
State Number: 25
Description: Machine Safety Check
State Name: MchSafetyCheck
Action:
Transitions:
- Condition: IF iSafetyDoorClosed & iEmergencyButtonReleased
- Goto State Number: 28
- Condition: IF !iSafetyDoorClosed | iEmergencyButtonPressed
- Goto State Number: 26 State Number: 26
Description: Machine Safety Violation
State Name: MchSafetyViolation
Action:
- SET oAlarmLight = TRUE
- SET oMachineStop = TRUE
Transitions:
- Condition: IF iAcknowledgeButton & iSafetyDoorClosed & iEmergencyButtonReleased
- Goto State Number: 27
PLC 代码生成器
为最大限度地提高梯形图文本生成的准确性,该解决方案采用了复杂的提示工程技术,并使用 Anthropic 的 Claude 3.5 Sonnet 进行代码生成。此解决方案部分的工作流程步骤如下所示。

提示创建
提示创建过程包括以下步骤:
- 从数据格式化器将中间伪查询传递给 PLC 代码生成器模块,该模块启动提示创建过程。
- 提示构建器构建一个详细的任务提示,用于生成初始批次的 PLC 代码以及后续批次。它包括:
- PLC 编程领域知识(状态/转换变量命名约定、用于分叉/解除分叉的网络创建模式、条件网络结构)。
- 演示伪查询到梯形图文本转换的少样本示例。
- 有关处理状态转换、变量声明和复杂布尔表达式的明确说明。
- 提示构建器还会创建一个续写提示,指示 FM 从前一次迭代的停止位置继续生成 PLC 代码。
少样本采样
我们采用少样本学习策略,通过在提示上下文提供相关示例来生成特定于领域的输出。将伪查询和相关元数据(包括结构特征)索引到向量存储中。在推理时,混合检索策略将语义相似性和词法匹配与元数据相结合,以获取最相关的结构对齐示例及其对应的 PLC 代码,然后将其动态注入到提示中。请看以下代码:
PLC_PROMPT = """You are expert in writing code in PLC text ladder code …
##DYNAMIC EXAMPLES
{retrieved_examples}
##DOMAIN VARIABLES
{business_specific_variables}
##USER INPUT
{user_pseudo_code}
##FUNCTIONAL GUIDELINES
{custom_instructions}
"""
PLC 代码生成
PLC 代码生成过程包括以下步骤(如上图所示):
- 将任务提示传递给 Anthropic 的 Claude 3.5 Sonnet,该模型处理提示以生成包含多达 4,096 个 token(FM 的最大输出 token 限制)的初始梯形图文本代码。
- 由于梯形图文本通常会超出此限制,我们的解决方案实施了具有专门的续写提示的迭代生成方法。系统检查生成是否完成,并在需要时请求额外的续写提示。
- 这种续写方法在连续生成之间保持上下文,有助于整个代码库的一致性。
- 该过程会持续迭代,直到 PLC 梯形图代码完全生成。然后将完成的代码段合并并传递给代码校正器模块进行进一步处理。
以下代码块显示了生成的 PLC 代码示例:
FUNCTION_BLOCK "Machine_Safety_Monitoring"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT iSafetyDoorClosed : Bool;
iEmergencyButtonReleased : Bool;
iEmergencyButtonPressed : Bool;
iAutoRunning : Bool;
iReset_fault : Bool;
END_VAR VAR s25_MchSafetyCheck : Bool;
s25_MchSafetyCheck_T1 : Bool;
s25_MchSafetyCheck_T2 : Bool;
SEQ01_ResetComplete : Bool;
sStWtResetRel_T1 : Bool;
END_VAR NETWORK
TITLE = Transition for STATE Num:25 Machine Safety Check
A #s25_MchSafetyCheck;
AN #sStWtResetRel;
A #sSst;
A #iSafetyDoorClosed;
A #iEmergencyButtonReleased;
= #s25_MchSafetyCheck_T1;
A #s25_MchSafetyCheck;
AN #sStWtResetRel;
A #sSst;
AN #iSafetyDoorClosed;
O #iEmergencyButtonPressed;
= #s25_MchSafetyCheck_T2;
NETWORK
TITLE = STATE Num:25 Machine Safety Check
A(;
O #s25_MchSafetyCheck;
O #sStWtResetRel_T1;
);
AN #sStWtResetRel;
AN #s25_MchSafetyCheck_T1;
AN #s25_MchSafetyCheck_T2;
= %L1.0;
A %L1.0;
BLD 102;
= #s25_MchSafetyCheck;
A %L1.0;
JNB Label_25;
L 25;
T #StateNo;
Label_25: NOP 0;
代码校正器
由于 PLC 梯形图逻辑本质上很复杂,LLM 在初始代码生成过程中可能会遗漏关键功能。该解决方案包含一个复杂的校正系统,用于解决这些差距并促进高质量的输出。校正采用了自定义逻辑(包含业务准则)和 FM 相结合的混合方法来执行校正任务。下图说明了工作流程。

校正模块执行以下步骤以帮助提高代码准确性:
- 由生成器模块生成的 PLC 代码被传输到校正模块进行增强。
- 该模块通过调用 Anthropic 的 Claude 3.7 Sonnet(它提供了处理复杂并行执行路径校正所需的增强推理能力),并使用专门的提示和生成的 PLC 代码,来促进对并行执行路径的适当处理,即序列分裂成多个分支然后重新汇合,在整个 PLC 程序中保持正确的逻辑流程。使用节点/网络映射脚本来跟踪状态转换和序列跟踪。
- 该模块利用格式化器提取的数据(包括存储在 Amazon S3 中的转换变量的源状态和目标状态),通过以下阶段:
- 识别阶段 – 使用专门的 Python 算法分析 PLC 代码结构,并将转换变量与其声明的源状态和目标状态进行交叉引用,标记不正确的连接。
- 修复阶段 – 采用有针对性的 Python 例程来系统地移除不正确的连接,同时保持整体逻辑结构的完整性。
- 重构阶段 – 实施自定义 Python 逻辑,以遵循正确的顺序执行模式在状态之间建立适当的连接。
- 生成的代码可能包含语法错误、未声明的变量或不合规的命名。使用 Anthropic 的 Claude 3.5 Sonnet 和自定义逻辑,此过程涉及:
- 识别代码中使用了但未声明的缺失变量。
- 将缺失的变量添加到声明部分。
- 标准化变量名称,以确保变量遵循西门子 S7-1517 PLC 命名约定。
- 校正后的 PLC 代码和相关元数据存储在 Amazon S3 中。
代码评估器
校正后,代码将经过一个全面的验证过程:
- 验证器模块根据关键准则分析校正后的梯形图文本:
- 唯一状态标志 – 验证每个状态都有一个唯一的标识符,没有重复。
- 唯一转换标志 – 确认转换标识符在整个代码中是唯一的。
- 正确连接验证 – 验证每个转换都连接到正确的目标状态。
- 输入转换完整性 – 确保每个状态至少有一个输入转换条件来触发状态更改。
- 互斥条件 – 检查同一状态内的转换变量是否互斥,以帮助防止逻辑冲突。
- 对于每个验证检查,系统都会生成带有检测到问题的具体信息的详细通过/失败结果。
- 汇编一份全面的验证报告,突出显示可能需要工程师手动关注的剩余问题,并清晰指示代码中问题的位置和性质。
- 这种多层校正和验证方法极大地有助于提高生成的梯形图文本的质量,减少了手动干预的需要,并加速了整体代码开发过程。
UI 和用户交互
该解决方案提供了一个直观的用户界面,帮助工程师高效地与系统交互。此部分的工作流程遵循以下步骤:
- 用户访问基于 Web 的界面以上传控制逻辑电子表格或结构化文本输入。
- 界面提供了选择不同模型和调整参数以优化生成的选项。
- 高级用户可以直接编辑提示,以定制生成过程。
- 系统显示生成的梯形图文本、伪查询和验证报告,允许工程师快速评估输出质量。
从上传到验证代码的整个过程通常在 3-7 分钟内完成,具体取决于输入查询的复杂程度。下面的 GIF 演示了设置界面,用户可以在其中配置模型参数(包括温度、Top-P、Top-K 值)、选择不同的模型以及为各种项目自定义提示设置。

结果和业务影响
该解决方案改进了 Wipro PARI 以前的方法,在各种测试用例中展示了一致的性能:
- 跨测试用例的平均验证完成率为 85%
- 处理时间从 3–4 天减少到每个查询大约 10 分钟
- 每个查询生成的成本约为 $0.40–$0.60
- 在“传送带控制”等不太复杂的查询上实现了完美的(100%)验证分数
- 即使是具有多个状态转换的复杂查询也达到了 70–90% 的验证分数
这种自动化方法彻底改变了 Wipro PARI 的 PLC 编程工作流程,带来了可衡量的业务影响,包括在项目中节省了 5,000 工时,同时最大限度地减少了手动编码错误。该解决方案帮助其 200 名工程师专注于高价值任务,如代码设计和应用程序开发,同时加速了代码生成过程。它还帮助 Wipro PARI 赢得了关键的汽车客户,并为复杂的自动化项目创造了竞争优势。他们计划未来扩展到其他主要的 PLC 系统,包括 Rockwell Automation、Schneider Electric 和 ABB,以帮助 Wipro PARI 扩展其汽车行业专业知识。
结论
在本文中,我们探讨了 AWS 如何与 Wipro PARI 合作,开发一个人工智能驱动的 PLC 代码生成器,该生成器将根据给定的控制逻辑创建梯形图文本代码的耗时过程进行了改造。通过将 Amazon Bedrock 与多个 Anthropic Claude 模型和自定义验证框架结合使用,该解决方案实现了 85% 的平均准确率,同时将代码生成时间从 3–4 天减少到每个查询大约 10 分钟。
Wipro PLC 代码生成器代表了工业自动化编程的一个里程碑,直接解决了 Wipro PARI 工程顾问面临的生产力挑战。该解决方案的方法——结合了提示工程、迭代代码生成、自动化校正和系统验证——创建了一个强大的框架,可以应用于各种 PLC 编程场景。
在当前实现的基础上,Wipro PARI 计划利用其他 Amazon Bedrock 功能来扩展解决方案的能力。该团队将实施 Amazon Bedrock Guardrails,以帮助执行内容过滤策略,防止生成不安全的控制逻辑,并在模型输出级别促进符合 IEC 61131-3 标准。路线图包括使用 AWS Strands Agents(一个专为自主 AI 代理设计的开源 SDK)构建多代理工作流程,其中专门的代理将处理不同的任务:一个代理用于需求分析,另一个用于代码生成,第三个用于自动化文档生成。为了在生产中扩展这些代理,Wipro PARI 将使用 Amazon Bedrock AgentCore,它提供用于部署和扩展代理的无服务器基础设施,具备企业级安全、会话隔离和内置身份管理功能。Amazon Bedrock AgentCore Memory 将使系统能够在工程会话中保持上下文,允许代理记住先前的交互并以前面的工作为基础,而 Amazon Bedrock AgentCore gateway 将帮助安全地将代理连接到现有 PLC 验证工具和内部资... [内容被截断]
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区