MCP服务器应用开发

·7 min read

MCP服务器应用开发

概念

  1. MCP服务器:Model Context Protocol服务器是实现AI与工业控制系统交互的中间层,使大型语言模型能够与PLC进行双向通信。它将自然语言指令转化为PLC可执行的操作,并将PLC数据呈现给AI模型。

    1. AI与MCP服务器有工具,资源等多种操作机制.工具是最基本的操作,目前我们仅实现工具的功能,其它机制视以后的需求状况待定.
    2. AI与MCP服务器有stdio和sse两种方式.stdio方式依赖操作系统的控制台,不适用工业场合.新规范增加了streamable模式,正在评估中,后续可能使用streamable取代sse.
  2. 工具:在MCP架构中,工具(Tool)是AI模型可以调用的预定义功能集合,相当于传统的API接口.

  3. AI大模型服务: 运行大模型服务的主机,需要较高的硬件资源.可选在线服务如DeepSeek.OpenAi等等.工业场合也可以自备主机,安装开源的大模型文件,自建大模型服务.

  4. AI客户端:与AI大模型实现对话的软件,MCP服务器的管理与调用也是AI客户端来完成的.测试环境可以使用kVPAC IDE.生产环境可以使用kVPAC Client或者定制开发.

开发步骤

1. 新建工程

  1. 启动kVPAC IDE
  2. 点击"文件" > "新建" > "空白工程"
  3. 设置工程名称、存储位置和基础配置
  4. 选择目标PLC型号和通信协议

新建MCP工程界面

2. 完成工程编码

  1. 创建PLC程序
  2. 标记MCP可访问变量
    • 使用专用注释标记可被AI访问的变量
    • 配置变量的读写权限
    • 添加变量描述信息(用于AI理解变量含义)

3. 添加MCP服务器

  1. 在项目资源管理器中右键点击工程名称
  2. 选择"添加" > "MCP服务器组件"
  3. 双击新增的"MCPServer"节点进入MCP服务器组态画面.

4. 设置MCP服务器信息

  1. 输入服务器名称,只能使用英文字符,AI通过这个标识符调用MCP服务器,所以在系统中需要是唯一的.
  2. 添加MCP服务器提示词,帮助AI了解MCP服务器的功能和作用.
    • 添加系统概述、关键组件和主要功能描述
    • 设置AI操作的边界条件和规范

5. 添加工具

  1. 目前提供的工具有变量读取,变量写入和函数调用三种工具,根据需求后续会增加工具类型.
  2. 变量读取可以一次读取一个或多个变量值.
  3. 变量写入建议一次只写入一个变量.
  4. 函数调用从PLC的任务表中选择任务,等同于单次任务.
  5. 工具提示词输入工具功能的描述,帮助AI了解工具功能.

测试

1. 打开测试页面

  1. 在工程浏览器中双击MCP服务器徐建
  2. 选择打开"测试"标签页
  3. 测试控制台将在IDE中打开

MCP测试控制台界面

2. 连接MCP服务器

  1. 点击测试页面上的"连接服务器"按钮
  2. 输入服务器URL(默认为http://localhost:8078
  3. 输入API密钥(如已配置)
  4. 点击"连接"按钮

3. 服务器连接成功后会自动读取工具列表

成功连接后,测试页面将显示:

  • 可用工具列表
  • 服务器状态信息

4. 工具测试

  1. 从工具列表中选择要测试的工具
  2. 填写必要的参数
  3. 点击"执行"
  4. 查看结果和执行日志
  5. 对于写入和执行类工具,验证PLC中的变量是否按预期变化

工具测试界面

5. 对话测试

  1. 切换到"对话测试"标签
  2. 输入自然语言指令,如:
    • "请告诉我生产线1区域当前温度是多少?"
    • "将2号泵的速度设置为75%"
    • "分析过去一天的生产效率并提供改进建议"
  3. 观察AI的响应及其调用的工具
  4. 验证PLC操作是否符合预期

对话测试界面

6. 安全性测试

  1. 尝试各种边界条件:
    • 请求超出范围的值
    • 尝试访问未授权变量
    • 发送格式错误的请求
  2. 确认安全策略正常工作
  3. 检查日志中的异常行为记录

部署生产环境

2. 安全加固

  1. 启用TLS/SSL加密
  2. 配置访问控制列表
  3. 设置IP白名单
  4. 实施Token轮换策略

故障排除

连接问题

| 问题 | 可能原因 | 解决方法 | | ---------- | -------- | ------------- | | 无法连接MCP服务器 | 服务未启动 | 检查服务进程状态 | | | 网络问题 | 验证网络连接和防火墙设置 | | | 端口冲突 | 更改监听端口 | | 连接超时 | 处理请求时间过长 | 增加超时设置或优化处理逻辑 | | 认证失败 | API密钥错误 | 验证密钥是否正确 |

常见连接问题诊断图

工具执行问题

| 问题 | 可能原因 | 解决方法 | | ------ | -------- | ------------ | | 工具返回错误 | PLC变量不存在 | 检查变量映射配置 | | | 参数范围错误 | 验证参数是否在允许范围内 | | | PLC通信故障 | 检查PLC连接状态 | | 工具执行缓慢 | 数据量大 | 优化数据查询或处理逻辑 | | | 资源竞争 | 检查系统负载和优先级设置 |

工具执行问题决策树

最佳实践

  1. 命名约定

    • 使用明确而有描述性的工具名称
    • 保持参数名称与PLC变量命名风格一致
  2. 错误处理

    • 为每个工具提供清晰的错误消息
    • 实现优雅的失败处理机制
  3. 性能优化

    • 避免在单个工具中查询大量数据
    • 合理缓存常用数据
  4. 安全考虑

    • 严格限制写操作权限
    • 对关键操作实施双重验证
    • 记录所有敏感操作
  5. 可维护性

    • 为每个工具添加详细文档
    • 保持工具功能单一,避免过度复杂

示例应用场景

场景一:智能温度控制系统

通过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 | 性能警告 | 工具执行时间超过预期,考虑优化 |

错误代码参考卡