3. IO-Link协议分层与报文结构

IO-Link 虽然物理上只用一根 C/Q 线,但它并不是“一根线随便传点数据”的简单接口,而是一套严格分层的串行通信协议。理解它的分层结构,是后续开发设备固件、调试通信故障、设计参数化流程的基础。IO-Link 协议在逻辑上划分为三层:物理层(Physical Layer)、数据链路层(Data Link Layer)和应用层(Application Layer)。每一层各司其职,层与层之间通过明确的接口交互,这种划分让设备开发者可以聚焦于某一层的问题,而不必每次都从电气信号一路查到应用语义。

三层结构的分工

物理层负责电气与信号层面的定义:采用 24V 供电、C/Q 单线双向传输、符合 IEC 61131-2 的数字输入输出电平特性,并规定了 UART 的波特率(COM1 为 4.8 kbit/s、COM2 为 38.4 kbit/s、COM3 为 230.4 kbit/s)。物理层还定义了唤醒信号(Wake-up)的时序,以及 C/Q 线在 SIO 模式与 SDCI 模式之间的切换条件。

数据链路层负责帧的封装、寻址、差错检测与重传。它把上层要发送的数据打包成 M 序列(M-sequence),加上校验字段,通过 UART 帧格式发送出去,并在接收端完成校验与应答。数据链路层还管理通信的启动、周期数据交换的节奏以及通信超时后的恢复。

应用层则定义设备参数、过程数据、事件、诊断信息以及 ISDU(Indexed Service Data Unit)的读写语义。应用层不关心信号怎么翻转,只关心“读哪个索引”“写什么参数”“过程数据代表什么物理量”。

IO-Link 协议分层与报文封装关系 应用层 Application Layer 过程数据(PD)· 参数/ISDU 读写 · 事件与诊断 · 设备状态机 语义:索引 Index、子索引 Subindex、数据类型、访问权限 数据链路层 Data Link Layer M 序列封装:MC(主站命令)+ CKT(校验类型)+ 数据 + CKS(校验和) 寻址:主站端口 / 设备地址 · 应答与重传 · 通信超时监控 周期数据交换(PD)与非周期服务(ISDU、事件)复用同一链路 物理层 Physical Layer C/Q 单线双向 · 24V 供电 · UART 帧格式(起始位/数据位/停止位) 波特率:COM1 4.8k / COM2 38.4k / COM3 230.4k bit/s SIO 模式(DI/DO)与 SDCI 模式(IO-Link)复用同一根 C/Q 线 M 序列结构: MC CKT 数据 Data CKS

M 序列与 UART 帧格式

数据链路层最核心的概念是 M 序列(M-sequence)。一次 IO-Link 报文交换由主站发起,M 序列就是主站发出的请求帧结构。它通常包含:MC(Master Command),指明本次操作类型(读、写、周期数据交换等);CKT(Checksum Type),指明校验类型;数据字段,承载过程数据或 ISDU 内容;以及 CKS(Checksum),用于差错检测。设备收到 M 序列后,返回对应的应答帧,主站据此判断通信是否成功。

M 序列最终要通过 UART 帧发送。IO-Link 的 UART 帧是标准异步串行格式:1 个起始位、8 个数据位、1 个停止位,无奇偶校验(校验由 CKS 承担)。这意味着开发者用普通 UART 外设即可实现物理层收发,但必须严格遵守波特率与位时序,否则会出现帧错误。下面是一段典型的帧参数配置示例:

UART 配置(IO-Link 设备侧)
波特率   : 38400 bps (COM2)
数据位   : 8
停止位   : 1
校验位   : None
流控     : None
电平     : 24V C/Q,经收发器转换为 MCU 的 3.3V TTL

C/Q 与 DI/DO 信号复用

IO-Link 最巧妙的设计之一,是让 C/Q 线同时兼容传统数字输入/输出和 IO-Link 通信。上电后,主站端口默认处于 SIO 模式,此时 C/Q 表现为普通 DI/DO:设备可以像标准传感器一样输出开关量,主站也可以读取其电平。当主站需要进入 IO-Link 通信时,会先发送 唤醒信号(Wake-up),设备检测到该信号后切换到 SDCI 模式,双方开始 UART 通信。通信结束后,端口可退回 SIO 模式。这种复用让 IO-Link 设备能向下兼容传统布线,降低改造成本。

开发提示:设备固件必须在 SIO 模式下持续监听 C/Q 线上的唤醒脉冲,且唤醒检测不能依赖 UART 外设,通常需要用边沿中断或比较器实现,否则会错过模式切换时机。

校验、错误处理与周期/非周期通信

IO-Link 的差错检测主要依靠 CKS 校验和。主站与设备各自计算校验值并比对,不一致则判定该帧无效。数据链路层还定义了超时机制:若设备在规定时间内未应答,主站会重试或报通信错误。常见错误包括校验失败、帧错误、超时、设备未就绪等,设备端应通过事件机制上报诊断信息。

通信在时间上分为两类:周期通信用于过程数据交换,主站按固定周期读取设备的过程数据(如测量值、状态字),保证实时性;非周期通信用于参数读写、ISDU 访问、事件上报等,按需发起,不占用固定时隙。两者复用同一条 C/Q 链路,由数据链路层调度。

对比项 周期通信 非周期通信
典型用途 过程数据(PD)交换 参数读写、ISDU、事件
触发方式 主站按固定周期轮询 按需发起
实时性 高,周期稳定 较低,可容忍延迟
数据方向 设备→主站为主,可双向 双向读写
典型帧 过程数据 M 序列 ISDU 读写 M 序列

案例与常见误区

假设一个 IO-Link 温度变送器,周期通信每 2 ms 上报一次温度过程数据,同时主站偶尔通过 ISDU 读取其量程参数。若开发者把 ISDU 读写也塞进周期时隙,会导致过程数据抖动甚至超时。正确做法是让数据链路层区分两类服务,周期数据优先,非周期服务在空闲时隙插入。

常见误区:认为“IO-Link 就是 UART 加个协议”。实际上 UART 只解决物理层位传输,M 序列封装、CKS 校验、模式切换、周期/非周期调度都属于数据链路层与应用层,缺一不可。调试时若只抓 UART 波形而不解析 M 序列,很难定位参数读写失败的原因。

复盘来看,掌握三层划分后,排障可以分层进行:先确认物理层波特率与电平是否正常,再检查数据链路层 M 序列与 CKS 是否正确,最后核对应用层索引与数据类型是否匹配。这种分层思路能显著缩短设备开发与现场调试的时间。