项目简介

这是一个基于 Model Context Protocol (MCP) 标准构建的服务器,专门用于连接支持 MCP 的人工智能(AI)或大型语言模型(LLM)客户端与标准的 Modbus 工业设备。它将 Modbus 设备的复杂通信抽象化,通过标准化的 MCP 接口提供工具和数据访问能力,使 AI 能够理解并操作工业环境中的数据点(如传感器读数、控制状态)。

主要功能点

  • Modbus 数据读写: 能够读取 Modbus 设备的保持寄存器、输入寄存器、线圈的状态和值。
  • Modbus 控制: 能够向 Modbus 设备的保持寄存器或线圈写入数据,实现对设备的控制。
  • 多种连接方式: 支持 Modbus TCP、UDP 或串行 (RTU/ASCII) 等多种物理连接方式。
  • AI 数据分析: 提供 Prompt 模板,帮助 AI 理解并分析从 Modbus 设备读取到的数值。

安装步骤

  1. 安装 'uv' 工具: 打开终端,运行以下命令安装 Python 包管理器 'uv':
    curl -LsSf https://astral.sh/uv/install.sh | sh
    请确保 'uv' 被添加到您的系统 PATH 中。
  2. 克隆项目仓库: 在终端中,导航到您希望存放项目的目录,然后克隆仓库:
    git clone https://github.com/kukapay/modbus-mcp.git
    cd modbus-mcp
  3. 安装依赖: 进入项目目录后,使用 'uv' 安装项目所需的所有依赖:
    uv sync

服务器配置

Modbus MCP 服务器需要知道如何连接到您的实际 Modbus 设备。这些连接参数通过环境变量或项目目录下的 '.env' 文件进行配置。常用的配置包括:

  • 'MODBUS_TYPE': 指定 Modbus 连接类型,可选值有 'tcp', 'udp', 或 'serial'。这是必须配置项。
  • 'MODBUS_HOST': 如果 'MODBUS_TYPE' 是 'tcp' 或 'udp',需要指定 Modbus 服务器的 IP 地址或主机名。
  • 'MODBUS_PORT': 如果 'MODBUS_TYPE' 是 'tcp' 或 'udp',需要指定端口号 (Modbus TCP 标准端口是 502)。
  • 'MODBUS_DEFAULT_SLAVE_ID': 指定默认的 Modbus 从站 ID (设备 ID),如果 MCP 客户端调用工具时未明确指定 slave_id,则使用此默认值。
  • 'MODBUS_SERIAL_PORT': 如果 'MODBUS_TYPE' 是 'serial',需要指定串行端口名称 (例如 Linux 下的 '/dev/ttyUSB0' 或 Windows 下的 'COM1')。
  • 'MODBUS_BAUDRATE': 串行连接的波特率 (例如 '9600')。
  • 'MODBUS_PARITY': 串行连接的奇偶校验 ('N', 'E', 或 'O')。
  • 'MODBUS_STOPBITS': 串行连接的停止位 ('1' 或 '2')。
  • 'MODBUS_BYTESIZE': 串行连接的数据位 ('7' 或 '8')。
  • 'MODBUS_TIMEOUT': 串行连接的超时时间 (秒)。

您可以直接在运行 MCP 客户端的环境中设置这些环境变量,或者在项目根目录下创建一个名为 '.env' 的文件,将配置信息按 '变量名=值' 的格式写入。例如:

MODBUS_TYPE=tcp
MODBUS_HOST=192.168.1.100
MODBUS_PORT=502
MODBUS_DEFAULT_SLAVE_ID=1

对于 MCP 客户端 (如支持 MCP 的 LLM 应用) 的配置

MCP 客户端需要一个配置来知道如何启动并连接到 Modbus MCP 服务器。您通常需要在客户端的配置界面或文件中添加一个新的 MCP 服务器条目,提供启动该服务器进程所需的信息。这些信息通常包括:

  • 服务器名称: 给这个 MCP 连接起一个名字,比如“我的Modbus设备”。
  • 启动命令 (command): 执行服务器的命令。在本例中,通常是 'uv' (如果您通过 'uv' 安装并在 PATH 中)。
  • 命令参数 (args): 传递给启动命令的参数列表。对于本项目,常用的参数是 '--directory /path/to/modbus-mcp run modbus-mcp'。请务必将 '/path/to/modbus-mcp' 替换为您实际将项目仓库克隆到的文件路径。'run modbus-mcp' 参数告诉 'uv' 运行项目内的 'modbus_mcp' 模块作为主程序。
  • 环境变量 (env): 一个可选的 JSON 对象,允许您在这里设置或覆盖传递给服务器进程的环境变量,特别是 Modbus 连接参数。例如 '{"MODBUS_HOST": "192.168.1.101", "MODBUS_PORT": 502}'。在这里设置的环境变量将优先于 '.env' 文件中的设置。

请查阅您的 MCP 客户端的具体文档,了解如何添加和配置自定义 MCP 服务器,并根据上述说明填写相应的字段。

基本使用方法

一旦 Modbus MCP 服务器通过 MCP 客户端成功启动并连接,您就可以通过客户端与 Modbus 设备进行交互。客户端将您的请求转化为对 MCP 服务器提供的“工具”或“Prompt”的调用。

  1. 调用工具: 在 MCP 客户端的用户界面中,您可以直接调用暴露出来的 Modbus 工具。例如,如果您想读取 Modbus 地址 40001 的保持寄存器值,您可能会在客户端以自然语言(如果客户端支持)或通过结构化输入请求执行 'read_register' 工具,并提供参数 '{ "address": 40000, "slave_id": 1 }' (注意 Modbus 地址通常在通信中需要减一)。服务器会执行 Modbus 读取操作,并将结果(寄存器的值或错误信息)返回给客户端,供您或 AI 使用。同样的方式可以调用 'write_register', 'read_coils' 等工具来控制设备或读取其他类型的数据。
  2. 使用 Prompt: 服务器提供 'analyze_register' Prompt。当您通过工具读取到一个 Modbus 寄存器的值后,如果需要 AI 帮助理解这个数值可能代表什么(例如,是温度、压力还是设备状态码),客户端可以使用这个 Prompt。服务器会根据读取到的值,构造一段包含该数值和分析请求的文本(Prompt),发送给 AI 模型,引导 AI 给出解释。

通过这些标准化的工具和 Prompt,Modbus MCP 服务器将复杂的 Modbus 协议转化为 AI 友好的接口,极大地简化了工业自动化与 AI 系统的集成。

信息

分类

AI与计算