【导读】IO-Link数据链路层是连接物理层与应用层的核心枢纽,负责主从站间的可靠数据传递。它通过消息处理、模式转换、过程数据与按需数据四大模块,实现设备状态管理、过程数据交换和按需参数读写。该层具备自动波特率检测机制,支持三种标准速率自适应与自定义速率扩展,并通过错误检测与重传机制确保传输可靠性。数据链路层作为协议栈的功能主体,承载着约90%的通信协议实现,是构建稳定IO-Link通信系统的关键技术基础。
01 链路层总览
数据链路层(Data Link Layer,DL)在IO-Link协议栈中承担承上启下的作用,负责在主站与从站之间通过物理链路传递消息。该层包括消息处理模块、模式转换模块、过程数据处理模块(PD)及按需数据处理模块(OD)。
—— DL层的主要功能与职责 ——
DL层定义了一组供应用层(AL)使用的DL服务,用于交换过程数据(PD)和按需数据(OD)。
同时,DL层还定义了另一组供系统管理(SM)使用的DL服务,用于获取设备识别参数以及配置数据链路内部的状态机。
DL层利用物理层服务(PL-Services)控制物理层(PL),并完成UART帧的交换。
DL层还负责消息的错误检测(包括内部协议错误及物理层上报的错误),并采取相应纠错措施(例如重传)。
整个协议栈的开发中,约90%的代码集中在数据链路层。该层包含四大模块:On-RequestData、ProcessData、DL-Mode和Message。其中,OD模块进一步划分为三个子模块:ISDU、CMD和Event。
Message模块:与物理层交互,负责处理物理层传递的消息,包括解码、解析与缓存,并将数据分发给其他模块(如PD和OD);同时也接收其他模块的数据,进行打包和校验后交由物理层发送。
On-request模块:根据Message模块传递的数据进行分类,分别交由ISDU、CMD和Event三个子模块处理。
DL-mode模块:与SystemManagement模块交互,确定当前主站或从站的状态,例如Pre-Operate或Operate等。
Process Data模块:负责处理输入和输出的过程数据。
02 DL-Mode
DL-Mode的首要任务是检测唤醒信号,并按照规定的速率依次探测从站的通信速率。
当主站尝试与从站建立IO-Link通信时,首先发送一个唤醒信号,随后立即发送第一条消息(0xA2 0x00),该消息用于读取从站的CycleTime。
在唤醒请求(WURQ)之后,DL模块在TREN时间和TDMT时间之后,按照COM3、COM2、COM1的指定传输速率依次发送测试消息,直至收到从站的响应报文。具体步骤如下:
主站以COM3速率(230400 bit/s)发送消息;
主站以COM2速率(38400 bit/s)发送消息;
主站以COM1速率(4800 bit/s)发送消息;
从站以COM1速率响应。
根据图示,主站每间隔500ms重复执行上述探测流程,直到收到从站响应为止。每次500ms周期内的探测过程具体如下:
在一个发送周期内包含三个重试子周期,即规范中所称的“三次重试”。若三次重试均未成功,主站将重新进入SIO状态,并再次发起唤醒和探测流程。
进一步观察每个重试子周期的具体序列,其顺序为:先发送唤醒信号,再依次以三种不同速率进行探测。
基于上述机制,理论上可调整探测报文的通信速率。若同时修改主站和从站的速率,即可实现自定义IO-Link通信速率。目前我们已在400Kbps速率下成功实现IO-Link通信。
在数据链路层的时间检测方面,需严格遵循以下规则:
(此处原有图表或规则未展开,建议补充具体时间参数或规范条目)
03 Fallback
根据规范,IO-Link主站具备发送Fallback指令的能力,该指令可强制设备切换至SIO模式。尽管该指令在实际应用中较少使用,但对主站而言具有实际意义:发送Fallback后,主站将终止IO-Link通信,切换至DI/DO模式。从站也需同步切换至DI/DO模式,即将Pin4由串口模式切换为DI/DO模式。
规范要求,设备在接收到Fallback指令后,必须在500ms内完成向SIO模式的切换。