MATCH PDT MCP服务器
HYDAC PDT的MCP服务器 .hdb 项目文件。查询和修改CAN消息、信号、错误定义和ECU配置。
运作原理
一 .hdb 文件是一个包含XML配置文件和二进制文件的ZIP存档 .dat 文件夹。服务器:
- 将XML文件(去除空填充)解析为索引查找字典
- 反序列化
.dat文件通过a。使用PDT程序集的NET帮助程序 - 通过MCP stdio传输(延迟加载、缓存)提供读/写查询
- 对于写入:创建
.hdb.bak备份、就地修改XML、重写ZIP
为什么使用它而不是读取生成的代码?
PDT生成C代码 AUTO_CEN_* 文件夹——结构体、枚举、配置数组。对于 CAN消息、信号和错误定义,MCP服务器更快、更方便。对于其他区域(引脚、块),生成的代码仍然是更好的源代码。
这有什么好处:
- CAN信号查找 --一个查询中的缩放公式、位位置、单位和父消息。在生成的代码中,这分散在
App_CanSigRec.c,Cfg_CRcv.c,Cfg_CSnd.c. - 信号搜索 --在所有消息中按名称子字符串查找信号,可选择按消息过滤。
- 消息详细信息 --CAN ID、DLC、循环时间、方向和所有连接在一起的信号。在生成的代码中,您将交叉引用多个文件。
- 错误定义 --SPN、描述、严重性、去抖动时间和阈值。在生成的代码中,这被拆分为
App_ErrDefine.h和Cfg_Err.c没有PDT元数据。 - XML修改 --直接编辑CAN消息、信号、数据库和其他基于XML的配置。
- 始终为最新 --阅读
.hdb直接,因此即使代码尚未重新生成,它也反映了最新的PDT保存。
仍然需要生成代码的内容:
- 引脚配置(
project.dat使用复杂。无法在外部加载的.NET类型。NET框架4.8) - 数据库中的软件块和详细参数条目
还可以修改什么(binary.dat--通过.NET助手):
- 中的数据库变量
project.dat--在NvMem/RAM数据库中添加、更新、删除参数 - 自定义错误定义——使用错误模板、检测方法和ERR TBlocks添加自定义错误(修改两者
project.dat和Errors.dat原子)
无法修改的内容:
- ISOBUS配置(
Isobus.dat)
安装
先决条件
必修的:
- Python 3.10+
mcp包裹
可选(适用于.dat文件工具):
- .NET SDK 8.0+(构建针对.NET Framework 4.8的帮助程序)
- 已安装HYDAC PDT(提供.NET程序集
.dat反序列化)
没有。NET SDK,除 list_errors 和 get_error --它们返回错误消息,而不是使服务器崩溃。
pip install "mcp[cli]"建造。NET帮助程序(可选)
如果不需要错误定义工具,请跳过此步骤(list_errors, get_error).
cd Match_PDT_MCP/dotnet-helper
dotnet build -c Release使用Claude Code注册(每个项目)
添加a .mcp.json 项目根目录中的文件:
{
"mcpServers": {
"Match_PDT_MCP": {
"type": "stdio",
"command": "python",
"args": [
"C:/Match/Tools/MCP/Match_PDT_MCP/server.py"
]
}
}
}服务器会自动发现:
- HDB路径 --首先
*.hdb工作目录中的文件 - PDT_DIR --与项目的PDT版本相匹配(来自
info.xml),退回到中安装的最新版本C:\Program Files\Hydac\Project Definition Tool\
如果项目有多个 .hdb 文件或非标准位置,显式设置环境变量:
{
"mcpServers": {
"Match_PDT_MCP": {
"type": "stdio",
"command": "python",
"args": ["C:/Match/Tools/MCP/Match_PDT_MCP/server.py"],
"env": {
"HDB_PATH": "C:/Match/Projects/MyProject/SpecificFile.hdb",
"PDT_DIR": "C:/Program Files/Hydac/Project Definition Tool/2.12.100"
}
}
}
}相同 .mcp.json 适用于任何MATCH项目——只需将其放入项目根目录中,Claude Code就会自动启动服务器。
可用工具
CAN读取工具(来自XML)
| 工具 | 参数 | 说明 |
|---|---|---|
list_can_buses | *(无)* | 列出所有CAN总线,包括消息计数、ECU ID和发送/接收缓冲区ID。将公交车号码与其他工具一起使用。 |
get_can_message | name: str, can_id: int | 按名称(不区分大小写,子字符串匹配)或CAN ID(十进制)查找消息。返回详细信息+所有信号+方向。 |
list_can_messages | direction: str, name_filter: str, bus: int | 列出所有消息。按方向过滤(send/receive)、名称子字符串或总线号。 |
get_can_signal | name: str, message: str | 按名称查找信号(不区分大小写)。返回缩放、位、单位、父消息。使用 message 以消除重复。 |
search_can_signals | query: str, message: str | 按名称子字符串搜索信号。可选择限制为特定消息中的信号。 |
CAN写入工具
| 工具 | 参数 | 说明 |
|---|---|---|
add_can_message | name, can_id, direction, dlc, cycle_time, signals, bus | 将带有信号的完整CAN消息添加到特定总线。在中创建条目 CanMessages.xml, CanMessageEcuLinks.xml,以及 CanSignals.xml.创建 .hdb.bak 在第一次写入之前进行备份。 |
add_can_message 细节:
name(必填):消息名称,例如。"VcuSendTestData"can_id(必填):CAN ID为十进制。如果大于0x7FF,则扩展帧direction:"SendCyclically"(默认),"SendEventBased",或"Receive"dlc:数据长度代码,0-8(默认值8)cycle_time:循环时间(毫秒)(默认值100)signals:逗号分隔的信号定义为name:startbit:sizebitsbus:总线编号,1索引(默认1)。使用list_can_buses查看可用的巴士
总线ID、ECU ID和发送/接收缓冲区ID是从HDB动态发现的,没有硬编码的项目特定常量。这意味着服务器适用于任何MATCH项目,包括多总线项目。
例子:
add_can_message(
name="VcuSendTestData",
can_id=419365500,
direction="SendCyclically",
dlc=8,
cycle_time=100,
signals="testValue:0:16,status:16:8,mode:24:4",
bus=1
)这将创建:
- 总线1上的消息定义(CAN ID 0x18FF017C,扩展,Intel字节顺序)
- ECU与该总线的正确发送缓冲区连接
- 3个信号:
testValue(位0处为16位),status(位16处为8位),mode(第24位为4位)
重要--PDT中的消息块分配:
创建的新邮件的使用情况与 direction 论点(Receive, SendCyclically,或 SendEventBased)--当前PDT版本在项目加载时拒绝任何其他值。但是,CSND/CRCV软件块(存储在 project.dat 如。NET二进制序列化) 不能 仅从XML创建,因此在PDT处理之前,消息仍然不完整。要完成消息:
- 在PDT中打开项目
- 转到消息→ 网络 标签
- 重新选择 用法 (关闭并返回
TXCfor send/RXC接收) - PDT自动创建消息块
在此步骤之后,消息已完全配置,代码生成将包括 gCSnd_t* / gCRcv_t* 结构。
视觉漫游:
添加来自Claude Code的CAN消息:
Claude Code adding a CAN message
PDT中的结果消息:
数据库和ECU工具(通过.NET助手从XML+.dat)
| 工具 | 参数 | 说明 |
|---|---|---|
list_databases | *(无)* | 列出NvMem/RAM参数数据库及其地址和设置。 |
list_db_variables | database: str | 列出数据库中的所有变量(如果为空,则列出所有数据库),包括类型、默认值、范围和单位。 |
get_db_variable | database: str, variable: str | 获取单个变量的详细信息,包括访问级别和数据集值。 |
add_db_variable | database, name, type, default, min, max, unit, description | 向数据库添加新变量。从同一类型的现有变量克隆。创建 .hdb.bak 备份。 |
update_db_variable | database, variable, default, min, max, unit, description | 更新现有变量的属性。仅更改提供的字段。 |
delete_db_variable | database: str, variable: str | 从数据库中删除变量。 |
get_ecu_config | *(无)* | ECU应用程序配置:循环时间、监视器、协议、协议参数、项目信息。 |
错误工具(通过.NET助手从.dat获取——需要.NET SDK 8.0+和HYDAC PDT)
这些工具是可选的。没有。NET SDK,返回错误消息;所有其他工具仍然可用。
| 工具 | 参数 | 说明 |
|---|---|---|
list_errors | spn_filter: int, description_filter: str | 列出错误定义,包括SPN、描述、严重性、去抖动、阈值。 |
get_error | spn: int | 按SPN编号查找特定错误。返回完整详细信息。 |
list_error_templates | *(无)* | 列出自定义错误块模板。 |
list_detection_methods | filter: str | 列出带有位位置和FMI值的检测方法。 |
list_fmi_definitions | *(无)* | 列出带有GUID的FMI和FMI扩展定义。 |
add_custom_error | template, dm_name, bit, spn, block_name, description, severity, fmi, fmi_extended,deboze/threshold参数 | 添加带有检测方法、错误模板和ERR TBlock的自定义错误。适用于有或没有现有自定义错误的项目。 |
add_custom_error 细节:
在PDT项目中创建完整的自定义错误条目(原子操作--修改两者 project.dat 和 Errors.dat).创建 .hdb.bak 在第一次写入之前进行备份。
template(必填):错误模板/块名称,例如。"Error index us"。如果未找到,则创建新模板。dm_name(必填):检测方法名称,例如。"DM_US_HINDEX_EOB"。必须是唯一的。bit(必填):块内的位位置(0-7)。spn(必填):SPN编号。在所有错误中必须是唯一的。block_name:软件错误块名称,例如。"ERR_INDEX_US"。创建新模板时需要。用作代码生成的TBlock名称。description:错误描述文本。severity:1=信息,3=警告(默认),5=严重。fmi:FMI名称,默认值"FMI_31_CONDITION_EXISTS".fmi_extended:FMI扩展,默认"FMIEX_GLOBAL".- 去抖动/阈值:
set_debounce_ms(500),release_debounce_ms(0),set_threshold(500),release_threshold(1000).
创建内容:
- 错误模板 在
Custom.ErrorTemplates(如果是新的) - 检测方法条目 在
Custom.DetectionMethods以及模板的Error列表 - 错误输入 在
Errors.dat具有SPN、严重性、FMI、去抖动设置 - ERR TBlock 具有8个检测方法槽(位0-7)、块参数(SW_MODULE、block_NAME、ERROR_COUNT)和标准库ERR蓝图
- 模板到TBlock链接 通过
LinkedBlockIds
当项目没有现有的ERR块时,该工具会自动发现具有ERR块的兄弟项目(在 C:\Match\Projects\)并从那里克隆块结构,包括TBlockParamSections和TDetectionMethods。
例子:
add_custom_error(
template="Error test dummy",
dm_name="DM_TEST_DUMMY_ALARM",
bit=0,
spn=2000,
block_name="ERR_TEST_DUMMY",
description="Dummy test alarm for validation",
severity=3
)XML写入工具
| 工具 | 参数 | 说明 |
|---|---|---|
list_hdb_xml_files | *(无)* | 列出HDB存档中所有XML文件的大小。 |
read_hdb_xml | file: str, xpath: str | 读取原始XML内容,可选择通过XPath过滤。 |
update_hdb_xml | file, xpath, action, tag, text, attributes | 修改XML元素: set_text, set_attr, add_child, remove.创建 .hdb.bak 备份。 |
实用工具
| 工具 | 参数 | 说明 |
|---|---|---|
search_hdb | pattern: str | 正则表达式搜索HDB存档中的所有XML内容(最多100个结果)。 |
reload_hdb | *(无)* | 在PDT中保存后强制重新解析所有数据。 |
HDB档案结构
XML文件(通过Python读/写)
| 文件 | 内容 |
|---|---|
CanMessages.xml | CAN消息定义(ID、DLC、循环时间、字节顺序) |
CanSignals.xml | 信号定义(比特位置、缩放、单位、最小/最大) |
CanMessageEcuLinks.xml | 每条消息的发送/接收方向、ECU分配和缓冲块(用于动态总线发现) |
DatabaseLists.xml | NvMem/RAM数据库布局 |
EcuApplications.xml | ECU配置(循环时间、监视器) |
Protocols.xml | 协议实例(MST、ISO总线) |
ProtocolParameters.xml | 协议设置(源地址、缓冲区配置) |
PinEcuApplicationLinks.xml | I/O引脚映射(仅限GUID) |
info.xml | PDT版本和文件格式 |
二进制.dat文件(通过.NET助手)
| 文件 | 状态 | 内容 |
|---|---|---|
Errors.dat | 读+写 | 错误定义(SPN、严重性、阈值、反应)。自定义错误可以通过以下方式添加 add_custom_error. |
CompileConfig.dat | 精心阅读 | 构建模式、日志级别、标志 |
Isobus.dat | 精心阅读 | ISOBUS配置 |
project.dat | 读+写 | 主要项目数据(引脚、块、FMI定义)。数据库变量是读/写的。 |
| 所有.dat文件 | 通用转储 | 通过以下方式进行完整JSON转储 dump / dump-all 命令 |
HDB差异工具
比较两个 .hdb 文件语义:
python hdb_diff.py [--output report.md]比较所有XML文件(按ID/名称在元素级别)和所有.dat文件(JSON深度差异)。输出一个标记报告,显示添加/删除/更改的元素。
局限性
- 大多数
.dat文件是只读的 —project.dat(数据库变量、自定义错误/模板)和Errors.dat(错误条目)支持回写。通用的dump命令可以将所有.dat文件读取为JSON进行差异化。 - PDT版本匹配 --服务器会自动将PDT安装与项目的版本(从
info.xml).如果未安装确切版本,它将回退到最新可用版本并记录警告。 - ERR块克隆 --当向没有现有ERR块的项目添加自定义错误时,该工具会在兄弟项目中搜索要从中克隆结构的ERR块。如果没有找到参考项目,则仍然会创建错误模板和检测方法,但不会创建TBlock。
- 引脚名称解析 需要通过以下方式交叉引用GUID
project.datThedump project.dat命令现在公开引脚数据。 - 错误GUID字段 (Fmi、检测方法、机器功能、受限模式)中的参考对象
project.dat无法解析为名称。 - 信号名称重复 --许多信号在不同的消息中共享相同的名称。使用
message参数在get_can_signal为了消除歧义。 - CAN消息块 —
add_can_message无法创建CSND/CRCV软件块(存储在project.dat二进制格式)。新消息使用Usage编写=Receive/SendCyclically/SendEventBased匹配directionarg,但用户仍必须重新触摸PDT的“网络”选项卡中的“使用”字段,以便PDT生成消息块。
依赖项
必修的:
- Python 3.10+
mcp包装(pip install "mcp[cli]")
可选(用于.dat文件工具和diff):
- .NET SDK 8.0+(用于构建辅助工具)
- HYDAC PDT安装(提供用于反序列化的.NET程序集)
免责声明
本项目与HYDAC International GmbH没有任何关联或认可。
该软件的创建不是为了与HYDAC项目定义工具(PDT)或任何其他商业软件竞争。它是一个实用程序,可以帮助使用MATCH控制器的开发人员以编程方式与他们的项目文件进行交互。
.dat文件功能需要安装HYDAC PDT——此项目不包括或重新分发任何HYDAC专有文件。
