目 录CONTENT

文章目录

Wipro PARI 如何利用 Amazon Bedrock 加速 PLC 代码生成

Administrator
2025-11-22 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/how-wipro-pari-accelerates-plc-code-generation-using-amazon-bedrock/

原文作者: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代码生成器的解决方案架构和用户工作流程。下图说明了端到端架构。

Solution Architecture

架构组件

该架构由以下关键组件组成:

  • 前端客户端层 – 前端客户端层由一个基于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则维护代码生成活动的全面审计日志,以满足工业合规性要求。

在接下来的部分中,我们将详细分解每个功能。解决方案中使用的模块通过简化的工作流程集成,以最大限度地提高自动化和准确性。

数据格式化器

解决方案始于处理伪查询输入,如下所示。这一关键的第一步将各种输入格式转换为可被语言模型有效处理的标准结构。

Data Formatter

工作流程遵循以下步骤:

  1. 用户通过 UI 界面上传电子表格中可用的控制逻辑作为输入。
  2. 从上传的电子表格中,格式化器智能地提取状态定义、转换编号、相关操作以及分叉/合并路径关系。提取的信息在下游流程中用于验证 PLC 代码。
  3. 提取的信息存储在 S3 存储桶中,以实现持久性和未来参考。
  4. 数据格式化器构建一个包含原始电子表格数据和特定处理指令的综合提示。
  5. 该提示发送给 Anthropic 的 Claude 3.5 Sonnet,以将控制逻辑转换为结构化的伪查询格式。冗长的描述被缩写为 20 个字符,以符合 PLC 变量命名约定。
  6. 数据格式化器随后将控制权交给 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 Code Generator

提示创建

提示创建过程包括以下步骤:

  1. 从数据格式化器将中间伪查询传递给 PLC 代码生成器模块,该模块启动提示创建过程。
  2. 提示构建器构建一个详细的任务提示,以生成初始批次的 PLC 代码以及后续批次。它包括:
    • PLC 编程领域知识(状态/转换变量命名约定、用于分叉/合并的网络创建模式、条件网络结构)。
    • 演示伪查询到梯形图文本转换的少样本示例。
    • 关于处理状态转换、变量声明和复杂布尔表达式的明确说明。
  3. 提示构建器还会创建一个延续提示,指示 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 代码生成过程包括以下步骤(如前图中编号所示):

  1. 任务提示传递给 Anthropic 的 Claude 3.5 Sonnet,后者处理提示以生成初始梯形图文本代码,其中包含最多 4,096 个 token(FM 的最大输出 token 限制)。
  2. 由于梯形图文本通常会超过此限制,我们的解决方案实现了具有专业延续提示的迭代生成方法。系统会检查生成是否完成,并在需要时请求额外的延续提示。
  3. 这种延续方法在连续生成之间保持上下文,有助于整个代码库的一致性。
  4. 该过程迭代进行,直到 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 Code Rectifier

校正器模块通过以下步骤帮助提高代码准确性:

  1. 由生成器模块生成的 PLC 代码被传输到校正器模块进行增强。
  2. 该模块有助于正确处理并行执行路径,即序列分裂成多个分支然后重新会合,在整个 PLC 程序中保持正确的逻辑流程。这是通过调用 Anthropic 的 Claude 3.7 Sonnet 来实现的,它提供了纠正复杂并行执行路径所需的增强推理能力,并使用了专门的提示和生成的 PLC 代码。使用节点/网络映射脚本来跟踪状态转换和序列跟踪。
  3. 该模块利用格式化器提取的数据(包括存储在 Amazon S3 中的转换变量的源状态和目标状态)通过以下阶段:
    • 识别阶段 – 使用专门的 Python 算法分析 PLC 代码结构,并将转换变量与其声明的源状态和目标状态进行交叉引用,标记不正确的连接。
    • 修复阶段 – 采用有针对性的 Python 例程来系统地删除不正确的连接,同时保持整体逻辑结构的完整性。
    • 重构阶段 – 实施自定义 Python 逻辑,以按照正确的顺序执行模式建立状态之间的适当连接。
  4. 生成的代码可能包含语法错误、未声明的变量或不符合规范的命名。使用 Anthropic 的 Claude 3.5 Sonnet 和自定义逻辑,此过程涉及:
    • 识别代码中使用但未声明的缺失变量。
    • 将缺失的变量添加到声明部分。
    • 标准化变量名称,以确保变量遵循西门子 S7-1517 PLC 命名约定。
  5. 校正后的 PLC 代码和相关元数据存储在 Amazon S3 中。

代码评估器

校正后,代码会经过一个全面的验证过程:

  1. 验证器模块根据关键指南分析校正后的梯形图文本:
    • 唯一状态标志 – 验证每个状态都有一个唯一的标识符,没有重复项。
    • 唯一转换标志 – 确认转换标识符在整个代码中是唯一的。
    • 正确连接验证 – 验证每个转换是否连接到正确的目标状态。
    • 输入转换完整性 – 确保每个状态至少有一个输入转换条件来触发状态更改。
    • 互斥条件 – 检查同一状态内的转换变量是否互斥,以帮助防止逻辑冲突。
  2. 对于每个验证检查,系统都会生成带有检测到的问题具体信息的详细通过/失败结果。
  3. 编制一份全面的验证报告,突出显示可能需要工程师手动处理的剩余问题,并在代码中明确指明其位置和性质。
  4. 这种多层校正和验证方法极大地有助于提高生成的梯形图文本的质量,减少了手动干预的需要,并加速了整体代码开发过程。

UI 和用户交互

该解决方案提供了一个直观的用户界面,帮助工程师高效地与系统交互。此部分的工作流程遵循以下步骤:

  1. 用户访问基于 Web 的界面以上传控制逻辑电子表格或结构化文本输入。
  2. 界面提供了选择不同模型和调整参数以优化生成的选项。
  3. 高级用户可以直接编辑提示以自定义生成过程。
  4. 系统显示生成的梯形图文本、伪查询和验证报告,允许工程师快速评估输出质量。

从上传到验证代码的整个过程通常在 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 系统,包括罗克韦尔自动化、施耐德电气和 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+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区