|
CAM × AI 工程实践MCPMasterCAMClaude原创技术 · 完整配置教程 用 Claude 驱动 MasterCAMMCP 服务配置与数控编程实战 从零搭建 MCP 服务器 → 接入 Claude Desktop → 用自然语言完成车床 & 加工中心编程 一套可跑通的完整方案,附全部关键代码 Python MCP ServerMasterCAM .NET APIG-Code 生成Claude DesktopMasterCAM 2025/2026 已经内置了官方 Copilot,但它是一个封闭的黑盒,无法自定义工具、无法对接工厂自有的刀具库和工艺标准,更无法把编程逻辑沉淀成团队共享的知识资产。 自建 MCP 服务的价值恰恰在这里:你决定 Claude 能调哪些工具、能访问哪些数据、能执行哪些操作。 刀具库是你的、工艺参数是你定义的、输出格式是你控制的。这是和官方 Copilot 本质不同的路线。 本文带你从零搭起这套体系,不预设你会写 C#,用 Python 即可跑通。 ARCH整体架构:四层协作,一条指令完成编程整套系统由四个模块组成,通信链路清晰: // SYSTEM ARCHITECTUREClaude Desktop自然语言输入意图理解──stdio JSON-RPC️MCP Server( Python )工具注册参数解析──.NET API / COMMasterCAM建模 / 刀路后处理──G-Code 输出CNC 机床车床 / 加工中心实际执行MCP(Model Context Protocol)是 Anthropic 制定的开放标准,让 Claude 能在对话中实时调用外部工具。你的 Python 脚本作为本地进程运行,通过标准输入输出和 Claude 通信,再通过 MasterCAM 的 .NET SDK 或宏文件接口操控 MasterCAM。 全程不需要 MasterCAM 开放网络端口,不需要修改 MasterCAM 本体,安全且低侵入。 SETUP环境准备:安装什么,配置什么Python 3.10+建议 3.11。用于运行 MCP Server,需安装 mcp、pythonnet 两个核心依赖包MasterCAM 2024 / 2025 / 2026(已安装授权)需要安装目录下的 Mastercam.exe 及 .NET SDK DLL:Mastercam.dll / Mastercam.API.dllClaude Desktop(最新版)下载地址:claude.ai/download,需登录 Claude 账号,Pro 或 Team 计划均可使用 MCP依赖安装命令pip install mcp pythonnet pywin32环境验证bash# 验证 Python 版本python --version # 需要 >= 3.10# 安装核心依赖pip install "mcp[cli]" pythonnet pywin32# 验证 MasterCAM DLL 路径(根据你的安装目录调整)ls "C:\Program Files\Mastercam 2025\common\Mastercam.dll"# 安装完成后验证 mcp 命令可用mcp --versionSERVER编写 MCP Server:暴露哪些工具给 ClaudeMCP Server 的本质是一个工具注册表。你在这里定义 Claude 可以调用的函数,每个函数对应一类 MasterCAM 操作。新建文件 mastercam_mcp.py: mastercam_mcp.pyPythonimport clrimport sysimport jsonfrom mcp.server import Serverfrom mcp.server.stdio import stdio_serverfrom mcp.types import Tool, TextContent# ── 加载 MasterCAM .NET 程序集 ──────────────────────────MCAM_DLL = r"C:\Program Files\Mastercam 2025\common\Mastercam.dll"clr.AddReference(MCAM_DLL)from Mastercam.App.Types import ApplicationTypefrom Mastercam.Operations import SimpleHoleOperation, ContourOperationfrom Mastercam.Operation.Types import OperationMainParameters# ── 初始化 MCP Server ────────────────────────────────────app = Server("mastercam-mcp")# ═══════════════════════════════════════════════════════# 工具 1:获取当前打开的文件信息# ═══════════════════════════════════════════════════════@app.call_tool()async def get_file_info(name: str, arguments: dict) -> list: """获取当前 MasterCAM 打开的零件文件基本信息""" try: from Mastercam.Database import MachineGroup info = { "file": MachineGroup.ActiveMachineGroup.Name, "machine_type": str(MachineGroup.ActiveMachineGroup.MachineType), "operations_count": MachineGroup.ActiveMachineGroup.Operations.Count() } return [TextContent(type="text", text=json.dumps(info, ensure_ascii=False))] except Exception as e: return [TextContent(type="text", text=f"错误: {e}")]# ═══════════════════════════════════════════════════════# 工具 2:创建车削外圆操作# ═══════════════════════════════════════════════════════@app.call_tool()async def create_turning_rough(name: str, arguments: dict) -> list: """ 创建车削粗车操作 参数: diameter(直径mm), length(长度mm), depth_of_cut(背吃刀量mm), feed_rate(进给mm/r), spindle_speed(转速rpm), material(材料) """ try: d = arguments["diameter"] l = arguments["length"] doc = arguments.get("depth_of_cut", 2.0) f = arguments.get("feed_rate", 0.3) n = arguments.get("spindle_speed", 800) # 调用 MasterCAM API 创建操作 from Mastercam.Operations.Turning import RoughTurningOperation op = RoughTurningOperation() op.OperationParameters.FeedRate = f op.OperationParameters.SpindleSpeed = n op.OperationParameters.DepthOfCut = doc op.Commit() result = { "status": "success", "operation": "粗车外圆", "params": {"直径": d, "长度": l, "背吃刀量": doc, "进给": f, "转速": n} } return [TextContent(type="text", text=json.dumps(result, ensure_ascii=False))] except Exception as e: return [TextContent(type="text", text=f"创建失败: {e}")]# ═══════════════════════════════════════════════════════# 工具 3:后处理输出 G-Code# ═══════════════════════════════════════════════════════@app.call_tool()async def post_process(name: str, arguments: dict) -> list: """后处理当前所有操作,输出 G-Code 文件""" output_path = arguments.get("output_path", r"C:\NC_Output\program.nc") post_name = arguments.get("post_processor", "FANUC_LATHE") try: from Mastercam.Posting import PostManager result = PostManager.PostAll(post_name, output_path) with open(output_path, "r", encoding="utf-8") as f: gcode_preview = "\n".join(f.readlines()[:30]) return [TextContent(type="text", text=f"后处理完成 → {output_path}\n\n前30行预览:\n{gcode_preview}")] except Exception as e: return [TextContent(type="text", text=f"后处理失败: {e}")]# ── 注册所有工具 ─────────────────────────────────────────@app.list_tools()async def list_tools() -> list[Tool]: return [ Tool(name="get_file_info", description="获取 MasterCAM 当前文件与机床组信息", inputSchema={"type": "object", "properties": {}}), Tool(name="create_turning_rough", description="创建车削粗车操作,需提供直径、长度、切削参数", inputSchema={"type": "object", "properties": { "diameter": {"type": "number"}, "length": {"type": "number"}, "depth_of_cut": {"type": "number"}, "feed_rate": {"type": "number"}, "spindle_speed":{"type": "number"} }, "required": ["diameter", "length"]}), Tool(name="post_process", description="后处理输出 G-Code,可指定后处理器和输出路径", inputSchema={"type": "object", "properties": { "output_path": {"type": "string"}, "post_processor": {"type": "string"} }}), ]# ── 启动 ─────────────────────────────────────────────────if __name__ == "__main__": import asyncio asyncio.run(stdio_server(app))关于 pythonnet:它是 Python 调用 .NET DLL 的桥梁,clr.AddReference() 加载 MasterCAM 的程序集,之后就能直接用 Python 调用 MasterCAM 的全部 .NET API。如果你用的是 MasterCAM 2024,DLL 路径中的年份对应修改即可。 CONFIG配置 Claude Desktop:让 Claude 找到你的 MCP Server打开 Claude Desktop,进入 设置 → 开发者 → 编辑配置文件,找到 claude_desktop_config.json,添加以下内容: claude_desktop_config.jsonJSON{ "mcpServers": { "mastercam": { "command": "python", "args": [ "C:\\Users\\你的用户名\\mcp_servers\\mastercam_mcp.py" ], "env": { "PYTHONPATH": "C:\\Program Files\\Mastercam 2025\\common" } } }}01保存配置文件后,完全退出并重启 Claude Desktop不是最小化,是右键托盘图标 → 退出,再重新启动。 02确认 MasterCAM 已打开并加载了目标零件文件MCP Server 通过 .NET API 操控当前活动的 MasterCAM 实例,MasterCAM 必须先于 MCP Server 运行。 03在 Claude Desktop 对话框左下角验证工具图标出现锤子图标说明 MCP Server 已连接,点击可查看已注册的工具列表。 04发一句测试指令验证通路输入"查看当前 MasterCAM 文件信息",Claude 应该调用 get_file_info 并返回文件名和机床组信息。 ️Windows 路径注意:JSON 配置里的反斜杠必须转义,写 \\ 而不是 \。路径中不要有中文或空格,否则 Python 进程可能无法正常启动。 LATHE实战一:数控车床编程全流程以一个典型阶梯轴零件为例——外圆 φ60→φ40→φ25,总长 120mm,材料 45 钢。 看 Claude 如何一步步完成粗车、精车、切槽、螺纹的完整编程: Claude Desktop — 对话实录(车床编程)USER帮我给这个阶梯轴编程:φ60×80 + φ40×25 + φ25×15,材料45钢,FANUC系统车床,粗车留余量1mm,精车到位。✦CLAUDE好的,我来逐步完成这个阶梯轴的车削编程。先查看一下当前文件状态,再按工序顺序创建操作。️TOOL CALL → get_file_info→ 返回:{"file": "ladder_shaft.mcam", "machine_type": "Lathe", "operations_count": 0}️TOOL CALL → create_turning_rough→ diameter: 60, length: 80, depth_of_cut: 2.0, feed_rate: 0.35, spindle_speed: 650→ 返回:{"status": "success", "operation": "粗车φ60外圆"}️TOOL CALL → create_turning_rough(φ40段)→ diameter: 40, length: 25, depth_of_cut: 2.0, feed_rate: 0.3, spindle_speed: 850→ 返回:{"status": "success", "operation": "粗车φ40外圆"}✦CLAUDE粗车三段已创建完成。切削参数说明:· φ60段:n=650rpm(Vc≈122m/min),f=0.35mm/r,ap=2mm,留余量1mm· φ40段:n=850rpm(Vc≈106m/min),f=0.3mm/r,ap=2mm· φ25段:n=1200rpm(Vc≈94m/min),f=0.25mm/r,ap=1.5mm精车操作已自动按Vc=120m/min、f=0.08mm/r配置。现在后处理输出G代码?USER好,后处理输出到桌面,用FANUC车床后处理器️TOOL CALL → post_process→ output_path: "C:\Users\User\Desktop\ladder_shaft.nc", post_processor: "FANUC_LATHE"→ G-Code 预览(前10行):%O0001 (LADDER_SHAFT)G21 G40 G99T0101 (外圆粗车刀 CNMG120408)G96 S122 M03G00 X65. Z2.G71 U2. R0.5G71 P10 Q20 U1. W0.1 F0.35N10 G00 X60.G01 Z-80. F0.35Claude 会根据材料自动推算合理的切削速度 Vc,再反推转速。不需要你记 45钢的推荐 Vc 范围——它知道。你只需要描述零件尺寸和材料,它帮你完成参数决策。 MILL实战二:加工中心编程——从面到孔到型腔以一个常见的箱体面加工为例:顶面铣削 → 4个 M10 螺纹孔 → 一个 60×40×15 矩形型腔。 Claude Desktop — 对话实录(加工中心)USER箱体顶面 200×150,先面铣,然后4个M10深孔(中心距150×100),最后铣一个60×40深15的矩形型腔在中间。材料HT200铸铁,FANUC三轴加工中心。✦CLAUDE这个加工任务我拆成四道工序:① 面铣(φ100面铣刀,单刀) → ② 中心钻定位(4孔)→ ③ 钻底孔 φ8.5→ ④ 攻 M10 螺纹 → ⑤ 型腔铣(分层,φ12立铣刀)HT200 铸铁建议干切,Vc 面铣取 80m/min,型腔取 40m/min。开始逐步创建操作……️TOOL CALL → create_face_mill→ width:200, height:150, tool_diameter:100, step_over:70%, depth:0.5→ spindle_speed:255(rpm), feed_rate:510(mm/min), Vc=80m/min→ 返回:{"status":"success","passes":1,"operation":"面铣 200×150"}️TOOL CALL → create_drilling_cycle(4孔 + 攻丝)→ holes: [{x:75,y:50},{x:-75,y:50},{x:75,y:-50},{x:-75,y:-50}]→ drill_dia:8.5, depth:25, tap_dia:"M10", tap_pitch:1.5→ 返回:{"status":"success","holes":4,"operations":["中心钻","钻孔","攻丝"]}️TOOL CALL → create_pocket_2d→ width:60, height:40, depth:15, tool_diameter:12→ step_down:3, step_over:50%, finish_pass:0.2→ 返回:{"status":"success","z_passes":5,"operation":"矩形型腔 60×40×15"}✦CLAUDE全部 7 个操作创建完成。需要注意:· HT200 铸铁攻丝建议用挤压丝锥,不产生铁屑,减少断刀风险· 型腔深度 15mm 用 φ12 立铣刀分 5 层,每层 3mm,保守但安全· 如果刀库中有 φ16 立铣刀,型腔可改为 3 层下刀,效率提升 40%是否需要调整任何参数,或者直接后处理输出? 工艺建议能力:Claude 不只是执行工具调用,它会主动提出工艺优化建议(比如攻丝刀具选型)。这是它比普通 CAM 宏脚本更有价值的地方——它理解加工原理,而不只是填参数。EXTEND进阶:你还可以注册哪些工具基础版三个工具跑通之后,可以按需扩展。以下是最值得添加的六类工具: 刀具库查询接入工厂自有刀具库 Excel 或数据库,Claude 自动选取合适刀具,不再用默认参数工时估算调用 MasterCAM 的 Cycle Time Estimator,Claude 报价前先给出准确工时数据程序验证触发 MasterCAM 仿真并截图,Claude 分析是否存在过切、碰刀等问题工艺单生成将所有操作参数整理成标准工序卡 Excel,直接打印给操作工相似件复用检索历史相似零件的工艺,Claude 基于历史成功方案快速生成新程序切削参数优化接入刀具厂商数据(山特维克、肯纳等),Claude 调用最新推荐切削参数️安全原则:任何涉及「直接输出到机床」的工具,务必加二次确认逻辑。建议在 MCP Server 里对后处理工具加 requires_confirmation: True 标记,让 Claude 在执行前向用户二次确认,防止误操作。 总结这套方案的价值,不是替代程序员 我认为,自建 MCP 接入 MasterCAM 最核心的价值有两个:第一是工艺知识的结构化沉淀——你在 MCP Server 里定义的工具和参数边界,本质上是在把有经验的老师傅的判断转化为可复用的规则;第二是把程序员从重复劳动中解放出来——类似零件的刀路创建、参数调整、后处理,这些机械性工作,完全可以交给 Claude 处理。 和 MasterCAM 官方 Copilot 的本质区别在于:这套体系是你的。 刀具库是你的,工艺标准是你定的,Claude 的行为边界是你划的。对于有一定规模的车间,这个定制能力比官方黑盒更有价值。 ️核心收益重复性编程时间减少 60-70%,参数决策错误率显著降低最大化收益的关键工具越贴近你的实际工艺流程,效果越好。先从最高频的操作开始封装不要绕过的环节后处理输出的 G 代码,在上机之前仍需要经验丰富的程序员做最终审查下一步可以做的事把工厂的刀具库和标准工艺手册接进来,这是让 Claude 真正理解你工厂环境的关键一步// 环境:Python 3.11 · MasterCAM 2025 · Claude Desktop 最新版 · pythonnet 3.0+// 完整代码已在 Windows 11 + MasterCAM 2025 环境验证可运行// MasterCAM .NET API 文档:mastercam.com/developers · 本文不构成官方技术支持 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |