Beckhoff TwinCAT/ADS
ADS (Automation Device Specification) 是德国 Beckhoff 的 TwinCAT 运行时所使用的通信协议。主要用于运行 TwinCAT 2 / 3 的工业计算机 (IPC) 及 EtherCAT 主站环境。
汽车生产线 / 半导体 / 风电 / 运动控制等基于 PC 的控制环境中,几乎都是 ADS。
注册表单输入项
| 输入栏 | 填写内容 | 示例 |
|---|---|---|
| IP 地址 | 运行 TwinCAT 的 IPC 的 IP | 192.168.0.80 |
| 端口 | ADS TCP 端口 | 48898 (标准 / 不建议更改) |
| Target AMS NetId (target-netid) | 目标 IPC 的 AMS NetId — 留空则自动使用 IP주소.1.1 | 192.168.0.80.1.1 |
| Target AMS 端口 (target-port) | TwinCAT 运行时端口 | 851 (TwinCAT 3 PLC) / 801 (TwinCAT 2 PLC1) |
其他选项:source-netid / source-port (网关侧的 AMS 标识符 — 默认 32905)、
connect-timeout / read-timeout (ms,默认 3000)。旧的选项键写法
(ams-net-id / ams-port / target-ams-net-id / timeout-request) 已废弃。
AmsNetId 格式
采用 a.b.c.d.1.1 形式的 6 个八位组。通常是在 IPC 的 IP 地址后加上 .1.1,但以 TwinCAT System Manager 中显示的 NetId 为准。查看位置:系统托盘的 TwinCAT 图标 → Properties → AMS NetId。
Route 注册(必需)
ADS 要求双方互相知晓对方的 NetId 才能通信。网关首次呼叫 PLC 时,PLC 侧会弹出 Add Route Dialog 或直接被拒绝。请在 TwinCAT System Manager → Routes → Add 中添加网关的 IP / NetId,并确认 TwinCAT 许可证处于 valid 状态。
对于 TwinCAT 3,30 天试用版到期后 ADS 响应会中断。请先在 License Manager 中检查许可证状态。
标签的 PLC 地址表示法
ADS 支持两种访问方式。
1. 内存区域直接访问 (Indexed)
| 表示法 | 含义 |
|---|---|
M0:4 | 内存区域 (M%) offset 0,4 byte |
I0:2 | 输入区域 offset 0,2 byte |
Q0:2 | 输出区域 offset 0,2 byte |
格式为 <area>:<offset>:<size>。size 以 byte 为单位。
2. 符号访问 (Symbolic)
| 表示法 | 含义 |
|---|---|
MAIN.fCounter | MAIN 程序的 fCounter 变量 |
MAIN.fCounter:REAL | 指定数据类型 (32-bit 实数) |
GVL.bRunning:BOOL | Global Variable List 中的 bRunning |
使用符号表示法时,PLC 侧必须具备 TPY (TwinCAT 2) 或已完成符号下载 (TwinCAT 3 → Build → Activate Configuration)。
数据格式匹配
| PLC 中的值 | 数据格式 | 格式辅助 | PLC 地址示例 |
|---|---|---|---|
| BOOL | Boolean | (留空) | GVL.bRunning:BOOL |
| BYTE / SINT | Integer | B | MAIN.bByte:BYTE |
| INT (16-bit) | Integer | (留空) | MAIN.nCount:INT |
| DINT (32-bit) | Integer | DW | MAIN.nTotal:DINT |
| REAL (32-bit 实数) | Float | REAL | MAIN.fTemp:REAL |
| LREAL (64-bit 实数) | Double | LREAL | MAIN.fPos:LREAL |
| STRING(80) | String | STR[80] | MAIN.sName:STRING |
常见问题与解决方法
| 现象 / 消息 | 可能原因 | 解决方法 |
|---|---|---|
| “No route to host” | 未注册 Route | 在 TwinCAT System Manager → Routes 中添加网关 |
| “Target port not found” | AmsPort 与系列不匹配 | 重新确认 TC2 = 801,TC3 = 851 |
| “Symbol not found” | 未执行符号下载 | 在 TwinCAT 3 中执行 Activate Configuration 后重试 |
| 所有值为 0 | TwinCAT 不处于 RUN,而是 STOP / CONFIG 模式 | 在 System Manager 中切换到 RUN |
| 许可证错误 | 试用版到期 | 在 License Manager 中更新许可证 |
常用示例
| 标签名称 | PLC 地址 | 数据格式 | 格式辅助 |
|---|---|---|---|
| 运行中标志 | GVL.bRunning:BOOL | Boolean | (留空) |
| 计数器 | MAIN.nCount:DINT | Integer | DW |
| 温度 | MAIN.fTemp:REAL | Float | REAL |
| 批次名称 | MAIN.sBatch:STRING | String | STR[80] |
更详细的示例 / 自动化注册
请参考高级 — REST API 中的 ADS 示例。