内容
<p align="center">
<img src="docs/assets/te1000-banner.png" alt="TE1000 MCP — TwinCAT XAE / TE1000 Automation Interface MCP server" width="100%">
</p>
# te1000-mcp
> 一个适用于 **Beckhoff TwinCAT 3** 工程自动化的 [Model Context Protocol](https://modelcontextprotocol.io) 服务器 — 通过 AI 代理或任何 MCP 客户端驱动 **TE1000 / XAE Automation Interface**。
[](https://github.com/Edge-JB/TwinCAT-XAE-MCP/actions/workflows/ci.yml)
[](https://modelcontextprotocol.io)
[](https://nodejs.org)
[](https://www.beckhoff.com/twincat)
[](LICENSE)
`te1000-mcp` 将 TwinCAT XAE 工程表面 — 系统管理器树、PLC 项目创作、IO/EtherCAT 配置、变量链接、构建和运行时部署 — 暴露为一组紧凑的 MCP 工具。它通过 TE1000 自动化接口(COM/DTE)与正在运行的 **XAE Shell** 通信,这样代理可以像工程师在 GUI 中一样配置和构建 TwinCAT 项目。
一个 Node MCP 前端(`index.js`)拥有 MCP 协议、工具模式和确认守卫;COM/DTE 工作在 **持久的本地 C#/.NET 守护进程**(`Te1000Daemon.exe`)中,前端通过 Windows 命名管道与之通信。守护进程是唯一的后端。参见 [工作原理](#工作原理)。
> [!IMPORTANT]
> 该服务器驱动一个**真正的工程工具**,可以激活或下载到 **TwinCAT 运行时**。每个涉及目标运行时的操作(激活、重启、下载、删除、许可)都是**确认门控**的,默认情况下是关闭的。
> 参见 [安全性与防护](#安全性和防护)。
---
## 目录
- [亮点](#亮点)
- [工作原理](#工作原理)
- [需求](#需求)
- [安装](#安装)
- [构建守护进程](#构建守护进程)
- [配置您的 MCP 客户端](#配置您的MCP客户端)
- [环境变量](#环境变量)
- [快速入门](#快速入门)
- [工具参考](#工具参考)
- [安全性和防护](#安全性和防护)
- [可靠性:对话框监视器和 PLC 会话控制](#可靠性和对话框监视器和PLC会话控制)
- [故障排除](#故障排除)
- [示例](#示例)
- [文档](#文档)
- [贡献](#贡献)
- [许可证](#许可证)
---
## 亮点
- **25 个名词分组工具**,涵盖可自动化的 TE1000 表面 — 树、IO/EtherCAT、链接、PLC 项目和 POU 编写、库、任务、映射、路由、现场总线、TcCOM、C++、测量/范围、许可和变体。
- **批量优先** — 每个多项操作都有一个 `*_batch` 形式,可以在一次 DTE 附件中运行 N 个操作,并返回一个紧凑的继续错误滚动, 而不是为每个调用支付进程生成 + 附件费用。
- **本地 EtherCAT 构建器** — `tc_ethercat` 从设备的 ESI 中为任何设备类创建完全填充的 EtherCAT 框(正确的身份、同步管理器、FMMU、PDO)。
- **外科手术 PLC 代码编辑** — `plc_pou` 读取、搜索和修补声明/实现文本,并仅返回更改的区域,保持代理上下文小。
- **默认安全** — 破坏性和运行时影响操作是确认门控的;安全项目永远不会被写入, 按策略。
- **具有 GUI 模态的弹性** — 对话框监视器检测并(可选)自动关闭模态对话框,否则将永远挂起同步 COM 调用。
- **持久的本地守护进程** — 一个长寿命的 C#/.NET 守护进程持有 COM 会话并缓存项目树和 POU 源文本,因此温暖的 `plc_pou 搜索` 运行速度大约快 **500 倍**,比旧的每次调用生成模型。
## 工作原理
```
MCP 客户端(代理)
│ 标准输入输出(JSON-RPC,MCP)
▼
index.js ───────────────► Te1000Daemon.exe ──COM/DTE──► XAE Shell(TE1000)
(Node 20) 命名管道 (持久的,x64, 运行的 TwinCAT 项目
守护进程客户端.js 网络472,STA COM 会话)
工具模式.js
```
两个协作进程:
- **Node MCP 前端(`index.js`)** — 通过标准输入输出发出 MCP/JSON-RPC, 使用 [zod](https://zod.dev) 验证输入,从 `toolSchemas.js` 单一来源每个工具的输入模式, 强制执行确认令牌防护,并将每个工具的 `action` 映射到细粒度的桥接操作名称。 它通过命名管道(`daemonClient.js`)将这些操作路由到守护进程。
- **本地守护进程(`daemon/Te1000Daemon.exe`)** — 一个持久的 net472/x64 进程,获取 DTE + `ITcSysManager` **一次** 并保持它们, 在内部线程上运行对话框监视器,缓存系统管理器树和 POU 源文本,并通过管道为前端提供服务。 它实现了 **相同的 164 个桥接操作** 并返回 **相同的 JSON**,因此工具表面保持不变。
### 管道协议
前端和守护进程通过 `\\.\pipe\te1000-mcp`(名称可通过 `TE1000_DAEMON_PIPE` 重写)交换 **换行分隔的 JSON**:
```
请求: {"id": "<n>", "action": "<bridge_action>", "payload": { … }}
响应: {"id": "<n>", "ok": true, "result": { … }}
| {"id": "<n>", "ok": false, "error": "…", "errorKind": "com_error|dialog_blocked|timeout", "dialog": { … }}
```
响应通过 `id` 相关联。 守护进程通过单个 **STA 工作线程** 序列化每个 COM 调用,因此并发管道客户端是安全的(XAE 序列化)。 守护进程还回答两个无 COM 的元操作,用于健康检查:`ping` 和 `list_actions`。
### 为什么使用守护进程 — 性能提升
早期模型在 **每次** 调用时生成一个全新的 32 位 `powershell.exe` 桥接器(加上第二个监视器进程)。 每个生成都重新获取 DTE/`ITcSysManager` COM 句柄(运行对象表遍历 + `Marshal.GetActiveObject`),JIT 编译内联 `Add-Type` Win32 助手,并 — 对于 `plc_pou.find`/`search` — 重新遍历整个项目树从根目录(`O(tree-size)`,完整项目约 2900 次 COM 往返),因此延迟随着项目大小增长。
持久守护进程消除了所有这些热点:
- **持久 COM 会话**(`ComSession.cs`)- DTE + 系统管理器获取一次, 通过廉价的属性读取进行健康检查,并在需要时透明地重新连接。
- **两层树缓存**(`TreeCache.cs`)- 每个对象的声明/实现源文本 **和** 项目代码对象的扁平枚举都被记忆化,因此温暖的完整项目搜索执行 *零* COM 树遍历。 这是 **~500 倍** 温暖 `search` 速度提升。
- **编辑监视器**(`EditWatcher.cs`)- 按需 `DTE.Documents`/`.Saved` 脏检查 + 项目目录的文件系统监视器使缓存失效,以便它永远不会为正在编辑的对象提供陈旧源(或在磁盘上更改)。
- **内部对话框监视器**(`DialogWatcher.cs`)- 在其自己的线程上运行,因此没有每次调用的监视器进程。 参见 [可靠性](#可靠性和对话框监视器和PLC会话控制)。
使用 `daemon/build.ps1` 构建守护进程(内部 .NET Framework MSBuild — 无需 SDK/NuGet)。 守护进程需要 **64 位** TcXaeShell(DTE.17.0)。 参见 **[docs/architecture.md](docs/architecture.md)** 获取端到端设计和 **[docs/csharp-daemon-validation.md](docs/csharp-daemon-validation.md)** 获取构建/切换/验证指南。
## 需求
| | |
|---|---|
| **操作系统** | Windows |
| **TwinCAT** | TwinCAT 3 XAE Shell / XAE 已安装,带有 TE1000 自动化接口 |
| **Node.js** | 20 或更新版本(MCP 前端;守护进程不删除 Node 依赖) |
| **正在运行的 XAE Shell** | 服务器附加到一个已经打开的实例(它不启动 XAE) |
| **守护进程(必需的后端)** | **64 位** TcXaeShell,一个 .NET Framework 4.x 安装(用于内部 MSBuild + net472 运行时),以及 `TCatSysManagerLib.dll`(随 TwinCAT 捆绑) |
XAE ProgID 默认值为 `TcXaeShell.DTE.17.0`。 如果您的安装不同,请使用环境变量 `TE1000_PROGID` 重写。
守护进程 **不是** 自动构建的 — 使用 `daemon/build.ps1` 构建一次(参见 [构建守护进程](#构建守护进程));之后,MCP 前端在首次使用时自动生成 `Te1000Daemon.exe`。 如果 exe 丢失,请在前端可以提供调用之前构建它。
## 安装
```powershell
git clone https://github.com/Edge-JB/TwinCAT-XAE-MCP.git
cd TwinCAT-XAE-MCP
npm install
```
验证服务器启动:
```powershell
node index.js
# -> te1000-mcp 服务器正在标准输入输出上运行(Ctrl-C 退出)
```
服务器通过标准输入输出进行通信,通常由 **MCP 客户端** 启动,而不是手动。 直接运行它只是等待标准输入上的客户端。
## 构建守护进程
本地守护进程是后端,您需要 **一次** 构建:
```powershell
powershell -ExecutionPolicy Bypass -File daemon\build.ps1
# -> daemon\bin\Release\Te1000Daemon.exe (发行版,x64,net472)
```
- 使用内部 .NET Framework MSBuild(`C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe`)- **无需 .NET SDK,无需 NuGet,无需互联网**。 csproj 是旧式(非 SDK)并针对 `net472`; 生成的 x64 exe 也在 net48 运行时上运行。
- 引用 `TCatSysManagerLib.dll`(嵌入式互操作)用于少数仅限 vtable 的 `IUnknown` 接口,延迟绑定 `dynamic` 无法访问(`ITcPlcProject`等)。 `build.ps1` 探测已知的 TwinCAT 安装路径;如果您的路径不同,请编辑 `daemon/Te1000Daemon.csproj` 中的 `<HintPath>` 并重建。 传递 `-Debug` 以生成调试版本。
- 构建后,MCP 前端 **自动生成** exe(分离,`windowsHide`)并在第一个调用时连接到其管道。 守护进程 **单实例每管道名称**(命名互斥),因此重复生成是无害的,它是 **分离的**,因此它在 MCP 前端重启后存活。 使用以下命令独立验证它,无需附加 XAE:
```powershell
node daemon\test-ping.js # 在测试管道上生成守护进程,往返 ping
```
> [!NOTE]
> 运行中的守护进程 **锁定** `Te1000Daemon.exe`。 要在代码更改后重建,请先停止任何正在运行的实例:`Get-Process Te1000Daemon | Stop-Process`。
## 配置您的 MCP 客户端
将您的客户端指向克隆中 `index.js` 的绝对路径。 示例(Claude Desktop / Claude Code / 任何读取此形状的 MCP 客户端):
```jsonc
{
"mcpServers": {
"te1000": {
"command": "node",
"args": ["C:\\path\\to\\TwinCAT-XAE-MCP\\index.js"]
}
}
}
```
一个可直接编辑的副本位于 [`examples/mcp-config.json`](examples/mcp-config.json)。
### 环境变量
所有变量均为可选。 第一组由 Node 前端(`index.js` / `daemonClient.js`)读取; 第二组由本地守护进程读取。 默认值来自源代码。
**由 Node 前端读取:**
| 变量 | 默认值 | 目的 |
|---|---|---|
| `TE1000_PROGID` | `TcXaeShell.DTE.17.0` | 要附加到的 XAE Shell COM ProgID(传递给守护进程为 `progId`)。 |
| `TE1000_DAEMON_PIPE` | `te1000-mcp` | 命名管道名称。 前端和它生成的守护进程共享此值,因此自定义值同时适用于两者。 |
| `TE1000_DAEMON_CONNECT_MS` | `20000` | 客户端等待连接(并在需要时生成)守护进程直到超时前的时间,单位毫秒。 |
| `TE1000_DAEMON_REQUEST_MS` | `1900000` | Node 端每个请求的上限: 如果在指定时间内没有收到匹配的响应,则请求失败。 设置为舒适的上述守护进程的上限 180 秒以上,以便它永远不会抢先一个合法的长调用。 `0` 禁用它。 |
| `TE1000_DIALOG_WATCH` | 开启 | `0` 禁用守护进程的内部模态对话框监视器。 |
| `TE1000_DIALOG_AUTODISMISS` | 开启 | `0` = 仅检测 + 报告对话框,不会自动点击允许列表中的对话框。 |
| `TE1000_DIALOG_GRACE_MS` | `4000` | 阻塞对话框必须持续多久,守护进程才会回收其 COM 工作线程。 |
**由守护进程读取:**
| 变量 | 默认值 | 目的 |
|---|---|---|
| `TE1000_MCP_SOLUTION_PATH` | 未设置 | 当多个 XAE 实例运行时,首选已打开解决方案的完整路径匹配此路径(否则守护进程首选任何具有已打开解决方案的实例)。 |
| `TE1000_DAEMON_DEBUG` | 未设置 | `1` 在 `%TEMP%\te1000-daemon-<pipe>.log` 处启用诊断日志。 |
| `TE1000_DAEMON_LOG` | 未设置 | 守护进程诊断日志的显式路径(意味着日志开启,覆盖默认位置)。 |
> 守护进程还接受 CLI 标志(`--pipe`、`--no-watch`、`--no-autodismiss`、`--grace-ms`、`--allowlist`)。 前端在生成守护进程时从上面的对话框监视环境变量中设置这些标志 - 您通常不需要手动传递它们。
>
> **警告 - 仅在生成时。** `TE1000_DIALOG_WATCH`、`TE1000_DIALOG_AUTODISMISS` 和 `TE1000_DIALOG_GRACE_MS` 仅在 Node 前端 **生成守护进程时** 读取,并且转换为守护进程的 `--no-watch` / `--no-autodismiss` / `--grace-ms` 标志。 守护进程是每管道单实例,因此更改其中一个 **对已经运行的守护进程** 无效 - 杀死该守护进程并让前端重新生成它,然后新值生效。
## 快速入门
在您的解决方案上打开 XAE Shell,代理可以驱动完整的配置 → 构建循环。 典型的会话(显示工具名称 + 参数):
```text
# 1. 确认服务器已附加并且已打开解决方案
xae action: "status"
# 2. 检查 IO 树
tc_tree action: "children" path: "TIID^Device 2 (EtherCAT)"
# 3. 从其 ESI 添加一个填充的 EtherCAT 机架(数字/模拟 + 模拟)
tc_ethercat racks: [{
parent: "TIID^Device 2 (EtherCAT)^R01.Main.N01 (EK1200)",
modules: [{ type: "EL1008" }, { type: "EL2008" }, { type: "EL3064" }]
}]
save: true
# 4. 将 PLC 输入链接到终端通道
tc_link action: "link"
a: "TIPC^MyPlc^MyPlc Instance^PlcTask Inputs^MAIN.bStart"
b: "TIID^Device 2 (EtherCAT)^Term 1^Channel 1^Input"
# 5. 构建解决方案
xae_build action: "build"
# 6. (可选,保护)下载到目标运行时
plc_download confirm: "ALLOW_PLC_DOWNLOAD"
```
更多端到端配方 - 批量链接,`set_xml` 参数编辑,POU 编写 - 在 [`examples/`](examples/) 中。
## 工具参考
系统管理器树中的路径使用 `^` 分隔符,例如 `TIID^Device 2 (EtherCAT)^Box 1^Term 5^Channel 1`。前导标记是树根(`TIPC` = PLC,`TIID` = IO,`TINC` = NC,`TIRC` = 实时/许可等)。
### 工程和构建
| 工具 | 目的 | 关键操作 |
|---|---|---|
| `xae` | XAE Shell 和解决方案控制 | `status`, `open_solution`, `save_all`, `active_document`, `selected_items`, `error_list`, `clear_error_list`, `list_commands` |
| `xae_build` | 编译活动配置 | `clean`, `build`, `rebuild` |
| `xae_command` | 运行原始 DTE 命令 🔒 | 任何命令名称(保护) |
### 系统管理器树、IO 和链接
| 工具 | 目的 | 关键操作 |
|---|---|---|
| `tc_tree` | 读取/写入任何树项目(标识、XML 参数、重命名、创建、删除) | `get`, `children`, `exists`, `get_xml`, `set_xml`, `rename`, `create`, `delete`, `import`, `export`, `focus` - 每个都有一个 `*_batch` 形式 |
| `tc_ethercat` | 从其 ESI 构建完全填充的 EtherCAT 框 | `racks: [{ parent, modules: [{ type, name?, revision? }] }]` |
| `tc_link` | 链接/取消链接变量;验证现有链接 | `link`, `unlink`, `resolve`, `links`, `link_batch`, `unlink_batch` |
| `tc_system` | 目标和重新扫描帮助器 | `get_netid`, `set_netid`, `errors`, `rescan_plc`, `scan_io_boxes` |
| `tc_mapping` | 批量变量映射 | `produce`, `consume`, `clear` |
| `nc` | NC 运动树 | `tasks`, `axes`, `axis` |
### PLC 项目和代码
| 工具 | 目的 | 关键操作 |
|---|---|---|
| `plc_project` | PLC 项目生命周期 | `create_from_template`, `open`, `info`, `set_boot_flags`, `generate_boot_project` 🔒, `online` 🔒, `plcopen_export`, `plcopen_import`, `save_as_library` |
| `plc_pou` | 创作 + 外科手术编辑 POU/DUT/GVL(离线) | 作者(`create`,`import_template`),读取(`get_decl`,`get_impl`,`outline`,`get_graphical`),外科手术(`replace`,`replace_lines`,`insert`,`append`),发现(`tree`,`find`,`search`),生命周期(`rename`,`move`,`delete` 🔒) |
| `plc_library` | 库引用/占位符/仓库 | `list`, `scan`, `add_library`, `add_placeholder`, `set_resolution`, `freeze`, `remove_reference`, `install_library` 🔒, … |
| `plc_download` | 部署活动 PLC 项目 🔒 | 默认引导项目或传统命令路由 |
| `plc_session` | 通过 UI 自动化进行在线会话控制 | `status`, `logout` 🔒 |
## 安全性和防护
## 可靠性和对话框监视器和PLC会话控制
## 故障排除
## 示例
## 文档
## 贡献
## 许可证
### 实时、现场总线和平台
| 工具 | 用途 | 关键操作 |
|---|---|---|
| `tc_task` | 实时任务 / 核心 / 链接任务 | `list`, `get`, `create`, `set_params`, `add_image_var`, `get/set_rt_settings`, `bind_cpu`, `get/set_linked_task` |
| `tc_route` | ADS 路由 | `list`, `broadcast_search`, `search_host`, `add_route` 🔒, `add_project_route` 🔒 |
| `tc_settings` | 工程设置和存档 | `get/set_silent_mode`, `get/set_target_platform`, `save_solution_archive`, `save_plc_archive`, `get/set_independent_file`, `get/set_disabled` |
| `tc_fieldbus` | 非 EtherCAT 现场总线(PROFINET/PROFIBUS/CANopen/DeviceNet/EAP) | `create_device`, `create_gsd_box`, `add_netvar`, `set_station_address`, `import_dbc`, `get/set_xml` |
| `tc_module` | TcCOM 模块对象 | `list`, `create`, `get/set_xml`, `enable_symbols`, `set_context` 🔒 |
| `tc_cpp` | TwinCAT C++ 项目/模块 | `create_project`, `create_module`, `tmc_codegen`, `set_props`, `build`, `publish` 🔒 |
| `tc_measurement` | 示波器 + 分析(TIAN) | `scope_create`, `scope_record` 🔒, `analytics_create`, `logger_create`, `stream_create`, … |
| `tc_license` | TwinCAT 许可 | `list`, `add`, `activate_response` 🔒 |
| `tc_variant` | 项目变体管理 | `get_config`, `get_current`, `set_config`, `select`, `enable`, `disable` |
### 运行时(受保护)
| 工具 | 用途 |
|---|---|
| `twincat_activate_configuration` 🔒 | 在目标上激活配置 |
| `twincat_restart_runtime` 🔒 | 启动/重启 TwinCAT 运行时 |
🔒 = 需要确认。参见 [安全性和保护](#安全性和保护)。完整的动作签名、批处理语义和返回形状在 **[docs/tools.md](docs/tools.md)** 中有记录。
## 安全性和保护
服务器 **从不自动激活、自动重启或自动部署**。任何更改目标运行时、删除节点或更改许可的动作都会被阻止,除非您传递匹配的 `confirm` 令牌:
| 确认令牌 | 解锁 |
|---|---|
| `ALLOW_TWINCAT_ACTIVATE` | `twincat_activate_configuration` |
| `ALLOW_TWINCAT_RESTART` | `twincat_restart_runtime` |
| `ALLOW_PLC_DOWNLOAD` | `plc_download`, `plc_project` 启动/在线 |
| `ALLOW_XAE_COMMAND_EXEC` | `xae_command` |
| `ALLOW_PLC_LOGOUT` | `plc_session logout` |
| `ALLOW_TWINCAT_DELETE` | 节点/对象删除(或使用 `dryRun: true` 预览) |
| `ALLOW_PLC_LIBRARY_REPO` | 机器范围的库存储库管理 |
| `ALLOW_TWINCAT_ROUTE_WRITE` | ADS 路由写入 |
| `ALLOW_TWINCAT_MODULE_CONTEXT` | TcCOM 上下文更改 |
| `ALLOW_CPP_PUBLISH` | C++ 驱动程序发布 |
| `ALLOW_MEASUREMENT_RECORD` | 实时示波器采集 |
| `ALLOW_LICENSE_ACTIVATE` | 许可激活 |
**安全项目策略。** 此工具链中的任何内容都不写入 TwinSAFE 安全项目。每个作者工具都拒绝安全根路径(`TISC`)通过内部保护。安全功能仅限只读/诊断。
## 可靠性:对话框监视器和 PLC 会话控制
同步 DTE/COM 调用在 XAE 的模态消息循环中被阻塞,如果 XAE 引发模态对话框(保存更改、“文件已外部更改”、“激活确认”、“许可提示”等)——这将无限期挂起 MCP 调用和调用代理。
- **对话框监视器。** 此监视器作为守护进程的**内部线程**运行(`DialogWatcher.cs`),它轮询(约 750 毫秒) XAE 进程拥有的应用程序模态对话框。它检测 XAE 拥有的应用程序模态对话框,并**自动关闭**它们(如果它们与 `dialog-allowlist.json` 中的规则匹配),或将对话框的标题、正文和按钮报告回代理并放弃调用。如果非允许列表的模态对话框在 `TE1000_DIALOG_GRACE_MS` 后持续存在,守护进程会回收其 COM 工作线程(在新的 STA 线程上重新获取会话)**而不**杀死守护进程,以便后续调用在对话框清除后恢复。检测是对话框驱动的,而不是时钟超时,因此永远不会杀死合法的长时间构建。允许列表**为空**(默认仅报告),并且永远不会自动回答激活/运行模式/重启/下载/安全提示。
- **交互式解决。** 当对话框**不**在允许列表中时,报告的错误会告诉代理**询问用户**应该按哪个按钮(以及是否记住),然后调用 **`xae dialog_resolve {button, remember?}`**。该操作会点击实时对话框上的所选按钮;如果 `remember: true`,它会将自动关闭规则追加到 `dialog-allowlist.json` 并热应用到正在运行的监视器(无需重启)。破坏性提示(激活/运行模式/重启/下载/安全)**拒绝自动记住** — 仍然会发生一次性点击,但不会持久化规则(报告 `rememberRefused`)。使用 `xae dialog_probe`(只读)检查当前对话框。
- **PLC 会话控制** (`powershell/plc-session.ps1`) 使用 UI 自动化读取和切换登录/注销状态(64 位 shell 上无法访问 DTE 登录/注销命令)。`plc_download` 默认情况下会自动注销(延迟源编辑编译在生成启动项目之前)。它永远不会登录。
完整详细信息: **[docs/operations.md](docs/operations.md)**。
## 故障排除
- **`Te1000Daemon.exe not found`** — 编译它:`daemon\build.ps1`。前端无法提供调用,直到守护进程编译完成。
- **Build fails on `TCatSysManagerLib`** — DLL 未在探测的 TwinCAT 路径中找到。编辑 `<HintPath>` 在 `daemon/Te1000Daemon.csproj` 中,指向您的安装路径,然后重新编译。
- **Rebuild fails with the exe locked** — 仍然有一个守护进程正在运行。首先停止它:`Get-Process Te1000Daemon | Stop-Process`,然后重新编译。
- **Daemon won't start / stale behavior** — 杀死它(上面)并让前端在下一次调用时重新生成一个新的守护进程。启用 `TE1000_DAEMON_DEBUG=1` 以捕获 `%TEMP%\te1000-daemon-<pipe>.log`。
- **Wrong XAE instance picked** (多个打开)— 设置 `TE1000_MCP_SOLUTION_PATH` 为解决方案的完整路径,将守护进程固定到该实例。
- **A modal dialog is blocking calls** — 在机器上清除它,或将规则添加到 `dialog-allowlist.json`(永远不要用于激活/重启/下载/安全提示)。守护进程会拾取允许列表在启动时。
## 示例
[`examples/`](examples/) 目录包含:
- [`mcp-config.json`](examples/mcp-config.json) — 一个可插入的客户端配置。
- [`README.md`](examples/README.md) — 可复制粘贴的配方:构建 EtherCAT 机架、批量链接 IO、通过 `set_xml` 编辑终端参数、编写 POU 和安全构建 → 激活 → 下载流程。
## 文档
| 文档 | 内容 |
|---|---|
| [docs/architecture.md](docs/architecture.md) | Node-front + 持久化 C#/ .NET 守护进程设计端到端 — 管道协议、COM 会话、缓存、编辑监视 |
| [docs/tools.md](docs/tools.md) | 完整的工具和动作参考 — 签名、批处理语义、返回形状 |
| [docs/operations.md](docs/operations.md) | 对话框监视器、PLC 会话控制和安全/保护模型深入解析 |
| [docs/automation-interface.md](docs/automation-interface.md) | TE1000 自动化接口的全面调查(这些工具的菜单来源) |
| [docs/csharp-daemon-coverage.md](docs/csharp-daemon-coverage.md) | 164 个动作端口覆盖检查列表(桥接动作 → C# 处理程序) |
| [docs/csharp-daemon-validation.md](docs/csharp-daemon-validation.md) | 守护进程的编译、切换和实时 XAE 烟雾测试指南 |
| [docs/notes.md](docs/notes.md) | 运行中的工程笔记/积压发现的真实项目 |
| [CHANGELOG.md](CHANGELOG.md) | 版本历史 |
## 贡献
欢迎贡献 — 参见 [CONTRIBUTING.md](CONTRIBUTING.md),了解架构、守护进程编译/开发循环、动作处理程序合约和每个更改必须遵守的安全规则。简而言之:
```powershell
npm run check # node --check index.js — 语法验证前端
node daemon\test-ping.js # 守护进程 + 管道 + JSON 往返(无 XAE)
powershell -ExecutionPolicy Bypass -File daemon\build.ps1 # 在 C# 更改后重新编译守护进程
```
## 许可
[MIT](LICENSE) © Edge Automation.
## 法律和商标
这是**独立的第三方项目**。它**不隶属于、不被认可、不赞助、不支持贝克霍夫自动化有限公司**。
所有产品名称、徽标和品牌均为其各自所有者的财产:
- **贝克霍夫®**、**TwinCAT®**、**TE1000** 和 **XAE Shell** 是 **贝克霍夫自动化有限公司** 的商标或注册商标。
- **EtherCAT®** 是 **贝克霍夫自动化有限公司** 拥有的注册商标和专利技术,获得许可。
这些名称仅用于识别和描述目的;其使用并不意味着与商标持有者有任何关联或认可。
该项目**不**包含、不捆绑或重新分发任何贝克霍夫软件。它自动化了一个单独安装和许可的 TwinCAT 3 / TE1000 环境,您必须从贝克霍夫自行获得。**您负责**遵守所有适用的贝克霍夫许可条款以及该工具对您的工程或运行时系统执行的任何操作。
软件按 [MIT License](LICENSE) 提供,不提供任何形式的保证。参见 [NOTICE](NOTICE) 以获取完整的归属信息。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器