EPICS变量控制服务器

一个基于Python的服务器,用于与EPICS(实验物理和工业控制系统)过程变量(PVs)交互,提供获取、设置PV值及获取PV详细信息的功能,适用于大型控制系统或工作流集成。

  • by eunsang284
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 eunsang284/epics-mcp-server

使用说明

EPICS MCP服务器

概述

  • EPICS MCP服务器是一个基于Python的服务器,旨在与EPICS(实验物理和工业控制系统)过程变量(PV)交互。它提供了一组工具来检索PV值、设置PV值和获取有关PV的详细信息。服务器已构建 使用mcp框架并通过stdio进行通信,使其适合集成到更大的控制系统或工作流中。

  • 该工具在EPICS PV用于监测和控制硬件或软件参数的环境中特别有用。

特性

  • EPICS MCP服务器提供以下工具:
  1. get_pv_value

    • 在存储库中创建或更新单个文件
    • 输入:
      • pv_name (string):PV变量的名称。
    • 返回:一个包含状态的JSON对象(success 或 error)以及检索到的值或错误消息。
  2. set_pv_value

    • 为指定的PV设置新值。
    • 输入:
      • pv_name (string):PV变量的名称。
      • pv_value (string):要为PV设置的新值。
    • 返回:一个包含状态的JSON对象(success 或 error)以及确认消息或错误消息。
  3. get_pv_info

    • 获取指定PV的详细信息。
    • 输入:
      • pv_name (string):PV变量的名称。
    • 返回:一个包含状态的JSON对象(success 或 error)以及关于PV的详细信息或错误消息。

与Langchain一起使用

  • 要将其与Langchain一起使用,您必须安装项目所需的依赖项。
pip install -r requirements.txt
  • Langchain

server_params = StdioServerParameters(
    command="python",
    # Make sure to update to the full absolute path to your math_server.py file
    args=["/path/server.py"],
)
  • 史诗

  • 在使用EPCIS mcp服务器之前,您必须在本地计算机上成功安装EPCIS,确保IOC可以正常启动,并验证以下功能 caget, caput,以及 cainfo 工作正常。有关详细的安装说明,请参阅 https://epics-controls.org/resources-and-support/base/.
jiangyan@DESKTOP-84CO9VB:~$ softIoc -d ~/EPICS/DB/test.db
Starting iocInit
############################################################################
## EPICS R7.0.8
## Rev. 2025-02-13T14:29+0800
## Rev. Date build date/time:
############################################################################
iocRun: All initialization complete
epics>
jiangyan@DESKTOP-84CO9VB:~$ caget temperature:water
temperature:water              88
jiangyan@DESKTOP-84CO9VB:~$ caput temperature:water 100
Old : temperature:water              88
New : temperature:water              100
jiangyan@DESKTOP-84CO9VB:~$ cainfo temperature:water
temperature:water
    State:            connected
    Host:             127.0.0.1:5056
    Access:           read, write
    Native data type: DBF_DOUBLE
    Request type:     DBR_DOUBLE
    Element count:    1

测试结果

  • Mcp客户端:
async def run():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # Initialize the connection
            await session.initialize()

            # Get tools
            tools = await load_mcp_tools(session)

            # Create and run the agent
            agent = create_react_agent(model, tools)
            agent_response = await agent.ainvoke({"messages": "To query the value of a PV (Process Variable) named temperature:water"})
            return agent_response
)
  • 结果:
================================ Human Message =================================

To query the value of a PV (Process Variable) named temperature:water
================================== Ai Message ==================================
Tool Calls:
 get_pv_value (call_vvbXwi51CyYUxEM0hcyvCFCY)
Call ID: call_vvbXwi51CyYUxEM0hcyvCFCY
 Args:
   pv_name: temperature:water
================================= Tool Message =================================
Name: get_pv_value

{
 "status": "success",
 "value": 88.0
}
================================== Ai Message ==================================

The current value of the PV named `temperature:water` is 88.0.