这次我们来看一个能显著提升PLC编程效率的技术组合:Claude Code + MCP + 西门子博途。如果你正在从事工业自动化、PLC编程,或者对如何用AI辅助生成梯形图程序感兴趣,这篇文章会直接告诉你这套方案能不能用、怎么用、以及实际效果如何。
Claude Code是Anthropic公司推出的智能编程助手,而MCP(Model Context Protocol)则是一个新兴的协议,它允许Claude Code这类AI助手安全、可控地访问外部工具、数据和系统。当我们将MCP服务器与西门子TIA Portal(博途)连接起来,目标就非常明确:让AI能够理解我们的控制需求,并直接生成或辅助编写梯形图(LAD)程序。这不再是简单的代码补全,而是迈向“自然语言描述控制逻辑,AI自动生成PLC程序”的关键一步。
对于PLC工程师来说,最核心的吸引力在于三点:第一,能否将复杂的起保停、联锁、顺控逻辑用文字描述出来就让AI实现;第二,生成的程序是否规范、可读,并且符合IEC 61131-3标准;第三,整个流程是否顺畅,是否需要复杂的配置。本文将围绕这三点,带你完成从环境搭建、MCP服务器配置、Claude Code连接,到实际生成梯形图并导入博途测试的全过程。
1. 核心能力速览
在深入细节之前,我们先通过一个表格快速了解这套方案的核心特性和要求:
| 能力项 | 说明 |
|---|---|
| 核心功能 | 通过自然语言或结构化描述,由AI(Claude Code)辅助生成西门子博途(TIA Portal)兼容的梯形图程序。 |
| 技术栈 | Claude Code (AI助手) + MCP Server (桥梁) + 西门子 TIA Portal (PLC编程环境)。 |
| 硬件门槛 | 无特殊GPU要求。主要依赖CPU和内存。运行Claude Code需要能正常访问其服务,本地部署MCP服务器对机器性能要求极低。 |
| 启动与连接方式 | 1. 确保Claude Code可用(通常是浏览器或IDE插件)。 2. 在本地或服务器启动自定义的MCP服务器(一个Python/Node.js进程)。 3. 在Claude Code中配置MCP服务器连接信息。 |
| “显存”占用 | 不涉及AI模型本地推理,无显存占用概念。主要资源消耗在Claude Code的云端服务和本地的TIA Portal软件运行上。 |
| 接口能力 | MCP服务器提供标准化的API接口。Claude Code通过MCP协议调用这些接口,将“生成梯形图”的请求发送到服务器,服务器再与TIA Portal或离线逻辑引擎交互。 |
| 批量任务 | 支持。可以通过脚本批量向Claude Code发送不同设备的控制逻辑描述,自动生成多个程序块。 |
| 适合场景 | 1.快速原型开发:用文字描述验证控制逻辑思路。 2.代码重构与标准化:将老旧或不规范的程序转换为标准梯形图。 3.辅助培训与学习:新手通过描述生成示例程序进行学习。 4.文档与程序同步:根据设计文档自动生成基础程序框架。 |
2. 适用场景与使用边界
这套方案并非要完全取代工程师,而是作为一个强大的“副驾驶”。它最适合以下几类场景:
- 逻辑描述到程序块的快速转换:当你有一个清晰的逻辑描述(如“按下启动按钮I0.0,电机Q0.0运行;按下停止按钮I0.1,电机停止;需增加过载保护I0.2”),可以直接让AI生成对应的梯形图网络,省去手动拖拽指令的时间。
- 复杂算法或数据处理程序的辅助编写:对于涉及循环、比较、计算的功能块(如流量累计、PID参数整定逻辑),用文字描述算法后,AI可以生成结构化的STL或SCL代码,再集成到梯形图中。
- 程序模板和重复模式的生成:在多台相同设备编程时,可以快速生成基础框架,如电机控制模板、阀门控制模板、报警处理模板等。
需要明确的使用边界:
- 安全关键逻辑不能依赖AI:涉及安全停机、紧急切断、安全联锁等SIL或PL等级要求的逻辑,必须由专业安全工程师严格按照安全规范设计和验证。AI生成的内容仅可作为参考,绝不能直接用于最终的安全相关程序。
- 硬件配置与网络拓扑需人工确认:AI无法知道你的实际PLC型号、模块配置、IO地址分配和现场网络情况。这些必须由工程师在TIA Portal中正确配置。
- 生成代码必须经过严格验证和测试:AI可能误解描述,或生成非最优、甚至存在潜在缺陷的逻辑。所有生成的程序必须在TIA Portal中进行仿真(如PLCSim)和逻辑验证,并在实际设备上空载测试后,方可投入运行。
- 知识产权与合规性:确保你的使用方式符合Claude Code的服务条款,并且生成的程序用于合法的工业自动化项目。
3. 环境准备与前置条件
开始之前,请确保你的开发环境满足以下条件:
软件环境:
- 操作系统:Windows 10/11 (64位)。这是运行西门子TIA Portal的硬性要求。
- 西门子TIA Portal:V15及以上版本已安装并授权。这是我们的目标编程环境和验证平台。
- Python环境:推荐Python 3.8-3.11。用于开发和运行我们的MCP服务器。需安装
pip。 - 代码编辑器或IDE:Visual Studio Code (VS Code) 是首选,因为它对Claude Code插件和Python开发支持良好。
- Claude Code访问权限:确保你拥有有效的Claude Code使用权限,并能在VS Code中或通过Web端正常使用。
网络与账户:
- 稳定的网络连接,用于Claude Code服务通信。
- (可选但推荐)Git,用于管理MCP服务器代码和版本控制。
概念准备:
- 基本了解西门子PLC编程(梯形图LAD/功能块图FBD/结构化文本STL)。
- 了解IEC 61131-3标准中的基本数据类型和程序组织单元(POU)。
- 对HTTP API和简单的客户端-服务器通信有概念性认识。
4. 安装部署与启动方式
我们的核心是构建一个MCP服务器,作为Claude Code与TIA Portal(或一个模拟生成器)之间的桥梁。下面以创建一个简单的、能够生成梯形图XML(TIA Portal可导入的格式)的MCP服务器为例。
4.1 创建MCP服务器项目
首先,创建一个新的项目目录并初始化Python环境。
# 创建项目目录 mkdir tia-mcp-server cd tia-mcp-server # 创建虚拟环境(推荐) python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: # source venv/bin/activate # 安装核心依赖:MCP协议SDK pip install mcp4.2 编写MCP服务器主程序
创建一个名为server.py的文件,实现一个简单的MCP服务器,它提供一个名为generate_ladder_logic的工具。
# server.py import asyncio from mcp.server import Server, NotificationOptions from mcp.server.models import TextContent import mcp.server.stdio import json # 创建一个简单的梯形图生成函数 # 这里只是一个演示,实际需要生成符合TIA Portal XML Schema (`.xlsx` 内部格式) 或直接生成AWL/STL代码 def generate_ladder_from_description(description: str) -> str: """ 根据自然语言描述生成梯形图逻辑的文本表示。 在实际应用中,这里应集成更复杂的逻辑解析和代码生成引擎。 """ logic_summary = f"// 根据描述生成的逻辑摘要:\n// {description}\n\n" # 示例:简单的起保停逻辑生成 if "启动" in description and "停止" in description and "电机" in description: # 这是一个极度简化的示例,实际需要生成完整的STL或LAD XML logic_summary += """NETWORK 1: 电机起保停控制 TITLE: 主运行逻辑 // 假设: I0.0=启动, I0.1=停止, Q0.0=电机 A I0.0 // 检查启动按钮 S Q0.0 // 置位电机输出 A I0.1 // 检查停止按钮 R Q0.0 // 复位电机输出 """ else: logic_summary += f"// 已接收描述: '{description}'\n// 提示:请确保描述中包含明确的输入(如I地址)、输出(如Q地址)和逻辑关系(如与、或、非、置位、复位)。" return logic_summary async def main(): # 初始化MCP服务器 server = Server("tia-ladder-generator") # 注册一个工具(Tool),Claude Code可以调用这个工具 @server.list_tools() async def handle_list_tools(): return [ { "name": "generate_ladder_logic", "description": "根据文本描述生成西门子PLC梯形图逻辑程序。描述应包含输入输出地址和逻辑关系。", "inputSchema": { "type": "object", "properties": { "description": { "type": "string", "description": "用自然语言描述控制逻辑,例如:'当启动按钮I0.0按下时,电机Q0.0运行,直到停止按钮I0.1按下。过载信号I0.2为1时立即停止电机。'" } }, "required": ["description"] } } ] # 处理工具调用 @server.call_tool() async def handle_call_tool(name: str, arguments: dict): if name == "generate_ladder_logic": description = arguments.get("description", "") result_text = generate_ladder_from_description(description) # 返回结果给Claude Code return [ TextContent( type="text", text=result_text ) ] else: raise ValueError(f"未知工具: {name}") # 使用标准输入输出与Claude Code通信 async with mcp.server.stdio.stdio_server() as (read_stream, write_stream): await server.run(read_stream, write_stream, NotificationOptions()) if __name__ == "__main__": asyncio.run(main())4.3 启动MCP服务器
在项目目录下,运行你的服务器:
python server.py服务器启动后,会等待通过标准输入输出(stdio)接收来自MCP客户端的连接。它不会主动监听网络端口,这是一种安全的本地通信方式。
5. 功能测试与效果验证
现在,我们需要配置Claude Code来连接我们刚刚启动的MCP服务器,并进行功能测试。
5.1 配置Claude Code连接MCP服务器
配置方式取决于你使用Claude Code的界面。通常在Claude Code的设置或配置文件中,可以添加MCP服务器。这里以概念性配置为例:
你需要告诉Claude Code,存在一个本地的MCP服务器,其命令是启动你的server.py脚本。
// 示例配置位置:Claude Code 设置中的 MCP 服务器配置部分 { "mcpServers": { "tiaLadderGenerator": { "command": "python", "args": ["/你的绝对路径/tia-mcp-server/server.py"], "env": { "PYTHONPATH": "/你的绝对路径/tia-mcp-server" } } } }关键点:配置中的command和args必须能正确启动你的Python脚本。配置完成后,重启Claude Code或重新加载配置。
5.2 在Claude Code中调用工具进行测试
在Claude Code的对话界面中,你可以直接要求它使用我们注册的工具。
测试对话示例:
你(用户):“请使用
generate_ladder_logic工具,帮我生成一个电机起保停的梯形图程序。描述是:当常开点I0.0(启动按钮)接通时,输出线圈Q0.0(电机)得电并自锁;当常闭点I0.1(停止按钮)断开时,Q0.0失电。另外,当常闭点I0.2(过载保护)断开时,电机也应停止。”Claude Code(识别到工具并调用):
我将使用
generate_ladder_logic工具来根据您的描述生成梯形图逻辑。调用工具generate_ladder_logic参数:{“description”: “当常开点I0.0(启动按钮)接通时,输出线圈Q0.0(电机)得电并自锁;当常闭点I0.1(停止按钮)断开时,Q0.0失电。另外,当常闭点I0.2(过载保护)断开时,电机也应停止。”}MCP服务器返回结果(通过Claude Code显示):
// 根据描述生成的逻辑摘要: // 当常开点I0.0(启动按钮)接通时,输出线圈Q0.0(电机)得电并自锁;当常闭点I0.1(停止按钮)断开时,Q0.0失电。另外,当常闭点I0.2(过载保护)断开时,电机也应停止。 NETWORK 1: 电机起保停控制 TITLE: 主运行逻辑 // 假设: I0.0=启动, I0.1=停止, Q0.0=电机 A I0.0 // 检查启动按钮 S Q0.0 // 置位电机输出 A I0.1 // 检查停止按钮 R Q0.0 // 复位电机输出 // 注意:当前示例生成器未完全解析过载保护I0.2的逻辑,需要更复杂的解析引擎。
5.3 验证与下一步:导入TIA Portal
目前我们的示例服务器返回的是文本化的STL指令注释。在实际生产中,MCP服务器的generate_ladder_from_description函数需要升级为一个真正的梯形图生成引擎。这个引擎可以:
- 解析自然语言:使用更专业的NLP模型或规则引擎,将描述解析为逻辑操作树。
- 生成标准代码:根据解析出的逻辑树,生成符合IEC 61131-3标准的STL(语句表)或SCL(结构化文本)代码。这些代码可以直接被TIA Portal识别。
- 生成TIA Portal XML:更高级的做法是直接生成TIA Portal项目文件(
.apXX)中梯形图网络对应的XML结构,然后通过TIA Portal Openness API(官方自动化接口)导入项目。
一个更实用的generate_ladder_from_description函数改进思路:
def generate_ladder_from_description_v2(description: str): # 1. 调用本地或云端的专业NLP服务进行逻辑解析 # parsed_logic = call_logic_parser(description) # 示例解析结果: parsed_logic = { “outputs”: [{"name": “Motor”, “address”: “Q0.0”}], “logic”: [ {“type”: “AND”, “inputs”: [{“address”: “I0.0”, “normally_open”: True}]}, {“type”: “OR”, “inputs”: [{“address”: “I0.1”, “normally_closed”: True}, {“address”: “I0.2”, “normally_closed”: True}]} ] } # 2. 根据解析结果生成STL代码 stl_code = generate_stl_from_parsed_logic(parsed_logic) # 3. 或者,调用TIA Portal Openness API创建程序块 # create_block_via_openness(project_path, block_name, stl_code) return stl_code6. 接口API与批量任务
我们的MCP服务器本身就是一个标准化的API接口。除了通过Claude Code交互,我们也可以将其扩展为独立的HTTP服务,供其他系统调用,实现批量任务。
6.1 扩展为HTTP MCP服务器
我们可以修改服务器,使其同时支持stdio(供Claude Code)和HTTP(供脚本调用)。这里使用mcp[cli]和uvicorn等库来实现。
# 安装额外依赖 pip install “mcp[cli]” uvicorn fastapi创建一个新的文件http_server.py:
# http_server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from .server import generate_ladder_from_description # 导入之前的函数 import asyncio from contextlib import asynccontextmanager from mcp import ClientSession, StdioServerParameters from mcp.client import stdio app = FastAPI() class GenerationRequest(BaseModel): description: str project_id: str | None = None # 可选,指定TIA项目 @app.post(“/generate”) async def generate_ladder_logic(request: GenerationRequest): “”“HTTP接口,用于批量生成任务”“” try: # 调用核心生成函数 result = generate_ladder_from_description(request.description) # 这里可以添加将结果保存到文件或数据库的逻辑 # if request.project_id: # integrate_with_tia_openness(request.project_id, result) return {“status”: “success”, “code”: result} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # 保留原有的stdio服务器功能,供Claude Code连接 # ... (可以将之前server.py的async main逻辑封装成函数在此调用) if __name__ == “__main__”: import uvicorn uvicorn.run(app, host=“127.0.0.1”, port=8000)6.2 批量任务处理
启动HTTP服务器后,你可以编写Python脚本进行批量生成。
# batch_generate.py import requests import json import time # 假设你的HTTP服务器运行在本地8000端口 BASE_URL = “http://127.0.0.1:8000” # 从文件读取批量描述 def read_descriptions_from_file(file_path): with open(file_path, ‘r’, encoding=‘utf-8’) as f: # 假设每行是一个描述 return [line.strip() for line in f if line.strip()] descriptions = read_descriptions_from_file(“control_logic_descriptions.txt”) for idx, desc in enumerate(descriptions): print(f“正在处理第 {idx+1} 个逻辑: {desc[:50]}...”) payload = {“description”: desc} try: response = requests.post(f“{BASE_URL}/generate”, json=payload, timeout=30) if response.status_code == 200: result = response.json() # 将生成的代码保存到文件 filename = f“generated_logic_{idx+1}.awl” with open(filename, ‘w’, encoding=‘utf-8’) as f: f.write(result.get(“code”, “”)) print(f“ 已保存到 {filename}”) else: print(f“ 请求失败: {response.status_code}, {response.text}”) except requests.exceptions.RequestException as e: print(f“ 网络错误: {e}”) time.sleep(1) # 避免请求过快 print(“批量处理完成。”)7. 资源占用与性能观察
由于本方案的核心是Claude Code的云端推理和本地的轻量级MCP服务器/逻辑生成引擎,因此资源占用主要集中在两个方面:
- Claude Code服务端:其资源消耗对用户透明,取决于Anthropic的云端基础设施。通常响应速度在几秒内,与网络状况和问题复杂度相关。
- 本地MCP服务器与TIA Portal:
- MCP服务器(Python进程):内存占用通常很小(几十MB到百MB级别),CPU占用仅在处理请求时短暂升高。使用
task manager或htop即可观察。 - TIA Portal:这是资源消耗大户。尤其是打开大型项目或进行仿真时,可能占用数GB内存和较高的CPU。这是整个工作流中最需要关注的性能点。
- TIA Portal Openness API:如果你实现了通过Openness API自动导入代码,该API调用会额外增加TIA Portal进程的负载,并可能因项目编译而短暂卡顿。
- MCP服务器(Python进程):内存占用通常很小(几十MB到百MB级别),CPU占用仅在处理请求时短暂升高。使用
性能优化建议:
- 将MCP服务器部署在与运行TIA Portal的同一台高性能工作站上,减少网络延迟。
- 对于批量任务,合理安排请求间隔,避免对TIA Portal进行高频并发操作,可能导致其无响应。
- 生成的代码先保存为文本文件,然后由工程师择机在TIA Portal中统一导入、编译和测试,而不是每生成一个就自动导入一次。
8. 常见问题与排查方法
在搭建和使用过程中,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Claude Code无法识别MCP工具 | 1. MCP服务器未启动。 2. Claude Code配置错误。 3. 命令路径不正确。 | 1. 检查python server.py进程是否在运行。2. 检查Claude Code中MCP服务器配置的 command和args是否指向正确的脚本路径。3. 查看Claude Code的错误日志或开发者控制台。 | 1. 确保服务器在Claude Code启动前已运行。 2. 使用绝对路径配置 args。3. 重启Claude Code并重新加载配置。 |
| 调用工具后无响应或报错 | 1. MCP服务器代码存在语法或运行时错误。 2. 工具函数 handle_call_tool未正确处理请求。3. 输入参数格式不符合 schema定义。 | 1. 在运行server.py的控制台查看是否有Python报错信息。2. 在 handle_call_tool函数中添加print语句调试。3. 检查Claude Code发送的参数是否包含 description字段。 | 1. 根据控制台报错修复服务器代码。 2. 确保工具函数正确返回 List[TextContent]。3. 确保请求参数是合法的JSON对象。 |
| 生成的代码无法导入TIA Portal | 1. 生成的代码语法不符合IEC 61131-3标准。 2. 地址格式错误(如I0.0在特定PLC中无效)。 3. 使用了TIA Portal不支持的指令。 | 1. 将生成代码粘贴到TIA Portal的STL编辑器中,查看编译错误。 2. 核对PLC硬件配置中的IO地址范围。 3. 查阅TIA Portal指令手册。 | 1. 改进MCP服务器的代码生成器,使其遵循严格的标准。 2. 在逻辑描述中明确PLC型号和地址范围,或在生成器中加入地址验证。 3. 限定生成器只使用一组经过验证的核心指令。 |
| TIA Portal Openness API调用失败 | 1. TIA Portal未安装或版本不匹配。 2. Openness DLL未正确注册或引用。 3. 项目文件被占用或路径无权限。 | 1. 检查Openness开发环境是否搭建正确。 2. 使用简单的Openness示例程序测试。 3. 检查项目文件是否被TIA Portal GUI打开。 | 1. 安装正确版本的TIA Portal和Openness开发包。 2. 确保Python能通过 comtypes或pywin32正确调用COM接口。3. 先关闭TIA Portal GUI,再通过API操作项目,或操作项目的副本。 |
| 批量处理时速度慢 | 1. 网络延迟(如果MCP服务器在远端)。 2. TIA Portal编译每次生成的项目耗时。 3. 逻辑描述过于复杂,解析和生成耗时。 | 1. 使用ping或time命令测试网络。2. 观察任务管理器中的TIA Portal进程CPU/内存占用。 3. 对单个复杂描述进行计时。 | 1. 将MCP服务器部署在本地。 2. 批量生成代码文件,最后统一导入和编译一次项目。 3. 优化生成器算法,或对复杂逻辑进行拆分描述。 |
9. 最佳实践与使用建议
为了高效、安全地使用这套AI辅助编程方案,遵循以下建议:
- 从简单到复杂:先用“电机起保停”、“闪烁电路”、“两地控制”等经典逻辑测试流程,确保整个链路(描述 -> AI -> MCP -> 代码)跑通,再尝试更复杂的顺控、模拟量处理逻辑。
- 描述标准化:给AI提供清晰、结构化、无歧义的描述。最好能形成自己的“描述模板”,例如:“当[输入条件1]与[输入条件2]同时成立时,则置位[输出1];当[输入条件3]成立时,则复位[输出1]。” 这能极大提高生成代码的准确率。
- 结果必须验证:这是铁律。无论AI生成的代码看起来多完美,都必须经过TIA Portal的严格编译检查、PLCSim仿真测试,并在安全的环境下进行实物测试。将AI视为一个高级的“代码起草员”,你才是最终的“审核法官”。
- 版本控制:使用Git等工具对MCP服务器代码、生成的PLC程序块、以及对应的自然语言描述进行版本管理。这便于回溯、比较不同生成策略的效果,以及团队协作。
- 构建自己的逻辑库:将经过验证的、由AI生成的高质量程序块(如标准的报警处理FB、通用的PID功能块)保存到公司的全局库中。后续可以直接复用或让AI基于这些标准块进行组合生成,提高效率和质量。
- 关注合规与安全:明确内部规定,哪些类型的程序允许使用AI辅助生成,哪些(特别是安全相关)绝对禁止。对所有生成的代码进行来源标注。
10. 总结与下一步
Claude Code + MCP + 西门子博途的组合,为PLC编程打开了一扇新的大门。它的核心价值不在于完全自动化,而在于大幅降低从设计思路到可执行代码之间的摩擦。工程师可以更专注于逻辑设计和系统架构,将繁琐的、模式化的代码编写工作交给AI助手。
最值得尝试的第一步:不是去实现一个完美的全自动生成系统,而是先搭建起最小可行链路。就像本文所示,一个能返回文本化STL代码的MCP服务器,加上Claude Code的调用,已经能让你直观感受到“用说话来编程”的潜力。在此基础上,逐步强化自然语言解析和代码生成引擎,最终与TIA Portal Openness深度集成,实现从描述到项目文件的一键生成。
最容易踩的坑:对AI生成代码的盲目信任。切记,工业控制程序的错误可能导致严重的物理损害和安全事故。始终保持审慎,让AI辅助,而非主导。
后续扩展方向:
- 集成更多PLC品牌:将MCP服务器扩展为支持三菱、欧姆龙、汇川等品牌的代码生成。
- 可视化逻辑确认:在生成代码后,MCP服务器可以同时生成一个简单的SVG或图片,可视化展示梯形图网络,供工程师快速确认逻辑是否正确。
- 从图纸生成代码:结合OCR和CV技术,让MCP服务器能读取电气原理图或旧的梯形图打印稿,自动生成新的TIA Portal程序。
- 调试与注释辅助:不仅生成代码,还能根据在线调试的变量值,用自然语言解释某一段程序正在执行什么逻辑,辅助故障排查。
这套技术栈仍处于早期,但方向已经清晰。对于积极拥抱效率工具的自动化工程师来说,现在正是开始探索和积累经验的最佳时机。建议收藏本文,从搭建第一个能返回“Hello, Ladder Logic”的MCP服务器开始你的实践。