CiA 309 Part 3:CANopen-TCP/IP 网关 ASCII 映射规范

CiA 309 定义 CANopen 网络与 TCP/IP 网络互联的网关规范,共三部分:Part 1 通用原理与服务、Part 2 Modbus/TCP 映射、Part 3 ASCII 映射(本篇,V1.1.0,2006-12-12 发布为公开草案)。Part 3 定位是给 CORBA/OPC 这类重型方案提供一个轻量级文本协议替代:网关设备暴露一个 ASCII 命令接口,客户端用可读字符串即可完成 SDO/PDO/NMT 全部操作。

命令语法核心

  • 命令是不区分大小写的 ASCII 串(ISO/IEC 646),以 CRLF 结束,token 间任意空白分隔。文本协议天然规避字节序、数据尺寸、对齐问题。
  • 请求结构:[<sequence 4字节>] [[net] node] <command> [参数]。序号包在方括号里,响应必须原样回传同一序号;net/node 在网关只有单一接口或客户端预设时可省略;net/node 取值 0 表示广播所有网络/节点。
  • 长命令 = 短命令(1-2 字母)+ 方括号部分拼接,如 r[ead]、w[rite]。
  • 数据类型语法直接映射 CANopen 类型:b/u8..u64/i8..i64 基本整型(u8/u16/u32/i8/i16/i32 为强制支持,其余可选)、r32/r64 浮点、t 时刻、td 时差、vs 可见字符串、os 八位串、us Unicode、d 域。domain/octet string/unicode 一律用 MIME base64(RFC 2045)编码并去掉换行。
  • 数字支持十进制、0x 十六进制、多种浮点写法(1.22、.22e10、22e3)。含空格的字符串用双引号包裹,内嵌双引号翻倍转义。

响应与错误码

响应 = 序号 + 值/OK/错误串/EMCY 列表。内部错误码分段:100-103 请求类(不支持/语法错/内部状态/超时)、200-205 守护与心跳类(丢失守护报文/断连/心跳开始与丢失/Boot-up)、300-305 CAN 总线类(error passive/bus off/缓冲溢出/初始化)、400-401 PDO 类(PDO 已占用/长度超限)。bus-off 后需发 init 复位 CAN 控制器。

事件触发消息

不带序号,由网络错误或被订阅的通讯对象产生:<event> ::= EMCY | ERROR | PDO | SYNC | USER。EMCY 事件返回 <emcy-code> <error-register> <m-error-code>(厂商错误码为 5 个十进制值)。

命令族速查

族命令示例说明
SDOr 0x1000 0 u32 / w 0x1016 0 u16 100读写带数据类型断言;set sdo_timeout <ms>
PDOset rpdo 1 0x180 event 3 u8 u8 u16从网关视角命名:RPDO 收、TPDO 发;tx-type 为 rtr/event/sync0-240;删除 PDO 用 COB-ID bit31
NMTstart / stop / preop / reset node / reset comm以及 enable guarding <t> <f>、enable heartbeat <ms>
接口配置init <bitrate>(CiA305 波特率表索引)、`store/restore CFGPDO
网关管理set network / set node / info versionversion 响应依次含 1018h 对象四件套+网关等级+协议版本
厂商自定义命令以下划线 _ 开头,事件用 USER避免与标准命令语法冲突

工程要点

  • 规范明确不推荐支持 RTR(建议置 COB-ID bit30 禁用)。
  • 每个请求有且仅有一个响应,是同步语义——与 Modbus 映射(Part 2)相比 ASCII 映射更适合调试与脚本化集成(telnet 即可操作网关)。
  • 与本机已有笔记的 CiA-102-CAN物理层规范工业应用、CANopen-CiA301-V4.2.0-中文注释版 构成协议栈上下层关系:301 是对象字典与通讯 profile 本体,309 是把它们桥到以太网的网关侧语法。

可行动点

  • 自研 LIS/上位机要连 CANopen 网关时,先确认网关是否实现 CiA309-3 ASCII 接口,可直接用 socket 发文本命令调 SDO,无需 CAN 协议栈。
  • 排查 bus-off 后通信不恢复的问题:检查应用是否有 init 复位逻辑。