MCP服务器应用开发
MCP服务器应用开发
概念
-
MCP服务器:Model Context Protocol服务器是实现AI与工业控制系统交互的中间层,使大型语言模型能够与PLC进行双向通信。它将自然语言指令转化为PLC可执行的操作,并将PLC数据呈现给AI模型。
- AI与MCP服务器有工具,资源等多种操作机制.工具是最基本的操作,目前我们仅实现工具的功能,其它机制视以后的需求状况待定.
- AI与MCP服务器有stdio和sse两种方式.stdio方式依赖操作系统的控制台,不适用工业场合.新规范增加了streamable模式,正在评估中,后续可能使用streamable取代sse.
-
工具:在MCP架构中,工具(Tool)是AI模型可以调用的预定义功能集合,相当于传统的API接口.
-
AI大模型服务: 运行大模型服务的主机,需要较高的硬件资源.可选在线服务如DeepSeek.OpenAi等等.工业场合也可以自备主机,安装开源的大模型文件,自建大模型服务.
-
AI客户端:与AI大模型实现对话的软件,MCP服务器的管理与调用也是AI客户端来完成的.测试环境可以使用kVPAC IDE.生产环境可以使用kVPAC Client或者定制开发.
开发步骤
1. 新建工程
- 启动kVPAC IDE
- 点击"文件" > "新建" > "空白工程"
- 设置工程名称、存储位置和基础配置
- 选择目标PLC型号和通信协议
2. 完成工程编码
- 创建PLC程序
- 标记MCP可访问变量
- 使用专用注释标记可被AI访问的变量
- 配置变量的读写权限
- 添加变量描述信息(用于AI理解变量含义)
3. 添加MCP服务器
- 在项目资源管理器中右键点击工程名称
- 选择"添加" > "MCP服务器组件"
- 双击新增的"MCPServer"节点进入MCP服务器组态画面.
4. 设置MCP服务器信息
- 输入服务器名称,只能使用英文字符,AI通过这个标识符调用MCP服务器,所以在系统中需要是唯一的.
- 添加MCP服务器提示词,帮助AI了解MCP服务器的功能和作用.
- 添加系统概述、关键组件和主要功能描述
- 设置AI操作的边界条件和规范
5. 添加工具
- 目前提供的工具有变量读取,变量写入和函数调用三种工具,根据需求后续会增加工具类型.
- 变量读取可以一次读取一个或多个变量值.
- 变量写入建议一次只写入一个变量.
- 函数调用从PLC的任务表中选择任务,等同于单次任务.
- 工具提示词输入工具功能的描述,帮助AI了解工具功能.
测试
1. 打开测试页面
- 在工程浏览器中双击MCP服务器徐建
- 选择打开"测试"标签页
- 测试控制台将在IDE中打开
2. 连接MCP服务器
- 点击测试页面上的"连接服务器"按钮
- 输入服务器URL(默认为
http://localhost:8078
) - 输入API密钥(如已配置)
- 点击"连接"按钮
3. 服务器连接成功后会自动读取工具列表
成功连接后,测试页面将显示:
- 可用工具列表
- 服务器状态信息
4. 工具测试
- 从工具列表中选择要测试的工具
- 填写必要的参数
- 点击"执行"
- 查看结果和执行日志
- 对于写入和执行类工具,验证PLC中的变量是否按预期变化
5. 对话测试
- 切换到"对话测试"标签
- 输入自然语言指令,如:
- "请告诉我生产线1区域当前温度是多少?"
- "将2号泵的速度设置为75%"
- "分析过去一天的生产效率并提供改进建议"
- 观察AI的响应及其调用的工具
- 验证PLC操作是否符合预期
6. 安全性测试
- 尝试各种边界条件:
- 请求超出范围的值
- 尝试访问未授权变量
- 发送格式错误的请求
- 确认安全策略正常工作
- 检查日志中的异常行为记录
部署生产环境
2. 安全加固
- 启用TLS/SSL加密
- 配置访问控制列表
- 设置IP白名单
- 实施Token轮换策略
故障排除
连接问题
| 问题 | 可能原因 | 解决方法 | | ---------- | -------- | ------------- | | 无法连接MCP服务器 | 服务未启动 | 检查服务进程状态 | | | 网络问题 | 验证网络连接和防火墙设置 | | | 端口冲突 | 更改监听端口 | | 连接超时 | 处理请求时间过长 | 增加超时设置或优化处理逻辑 | | 认证失败 | API密钥错误 | 验证密钥是否正确 |
工具执行问题
| 问题 | 可能原因 | 解决方法 | | ------ | -------- | ------------ | | 工具返回错误 | PLC变量不存在 | 检查变量映射配置 | | | 参数范围错误 | 验证参数是否在允许范围内 | | | PLC通信故障 | 检查PLC连接状态 | | 工具执行缓慢 | 数据量大 | 优化数据查询或处理逻辑 | | | 资源竞争 | 检查系统负载和优先级设置 |
最佳实践
-
命名约定
- 使用明确而有描述性的工具名称
- 保持参数名称与PLC变量命名风格一致
-
错误处理
- 为每个工具提供清晰的错误消息
- 实现优雅的失败处理机制
-
性能优化
- 避免在单个工具中查询大量数据
- 合理缓存常用数据
-
安全考虑
- 严格限制写操作权限
- 对关键操作实施双重验证
- 记录所有敏感操作
-
可维护性
- 为每个工具添加详细文档
- 保持工具功能单一,避免过度复杂
示例应用场景
场景一:智能温度控制系统
通过MCP服务器,操作人员可以使用自然语言指令来控制复杂的温度控制系统:
用户: "最近3号区域温度波动较大,请分析原因并调整控制参数"
AI: "我已分析3号区域过去24小时的温度数据。发现温度波动在15:30-18:30之间达到峰值(±5°C)。
这与外部环境温度变化高度相关。建议:
1. 已将PID控制器的比例带从10调整为12
2. 积分时间从60秒增加到75秒
3. 启用了前馈控制以提前响应环境变化
这些调整已应用,预计将减少波动范围至±2°C以内。我会持续监控效果。"
温度控制系统工作流程
┌──────────┐ ┌─────────┐ ┌───────────┐ ┌────────────────┐
│ 用户指令 │───>│ AI解析 │───>│ MCP服务器 │───>│ 读取温度数据 │
└──────────┘ └─────────┘ └───────────┘ └────────┬───────┘
│
┌──────────────────────┐ ┌───────────┐ ┌───────────▼───────┐
│ 应用新控制参数并监控 │<───│ 调整PID │<───│ 分析温度波动原因 │
└──────────────────────┘ │ 控制参数 │ └───────────────────┘
└───────────┘
场景二:预测性维护
用户: "1号生产线的电机振动值是否正常?需要安排维护吗?"
AI: "我已检查1号生产线电机的振动数据:
当前振动值:4.8mm/s RMS
正常范围:0-3.5mm/s RMS
过去两周趋势:振动值增加了27%
分析结果表明:
- 振动频谱在1750Hz处出现异常峰值
- 这通常与轴承内圈故障相关
- 根据退化模型,预计轴承剩余寿命约为160小时
建议:
1. 在下周计划停机期间安排轴承更换
2. 在更换前减少负载至80%以延长剩余寿命
3. 准备备件:型号SKF-6309-J/C3
是否需要我帮您创建维护工单?"
常见错误代码
错误代码详细说明
| 错误代码 | 说明 | 解决方案 | | -------- | ------- | ---------------- | | MCP-E001 | 服务器启动失败 | 检查配置文件格式和端口设置 | | MCP-E101 | 工具定义无效 | 检查工具定义JSON格式 | | MCP-E201 | 变量访问被拒绝 | 检查访问权限设置 | | MCP-E301 | PLC通信失败 | 验证PLC连接状态和地址设置 | | MCP-E401 | 参数验证失败 | 检查参数是否符合定义的类型和范围 | | MCP-E501 | API密钥无效 | 更新或重新生成API密钥 | | MCP-W101 | 性能警告 | 工具执行时间超过预期,考虑优化 |