IO-Link 应用层OD
前言
上回聊到的EVENT状态机和ISDU状态机,这俩都属于OD这个模块的内容,OD又分为数据链路层和应用层两块,今天我们就展开聊一下应用层的OD和EVENT部分。
01 应用层的OD模块状态机
下图先看一下主站应用层的OD模块:
从这个状态机,我们看到AL应用层的OD部分,仅仅包含了ISDU和DPP两方面。
对于index 00和01的读写,划归到DL Param部分,对于其他的划归于ISDU部分,当主站发起AL Service时,协议栈开始构建DL Service,根据index来确定是走左边,还是走右边。
当进入await状态时,不允许第二个AL Service来访问,否则就会被禁止,直接告知客户主站正忙。
再来看下从站AL的OD模块,如下图所示:
从站和主站类似,也有await状态;对于参数的读写分别进入await_AL_Write_rsp_1和await_AL_Read_rsp_2;而对于ISDU的读写,则进入Await_AL_RW_rsp_3。
四个状态如下:
02 应用层的OD传输序列
那么主站和从站的ISDU和DPP是如何交互的呢?
ISDU的传输
✅ 主站APP发起读取ISDU参数(Index>1)指令;
✅主站AL层调用DL的DL_ISDUTransport_req函数
✅ 主站DL层把命令封装到消息中发送给从站
✅ 从站调用DL_ISDUTransport_ind函数对主站的ISDU读命令进行解析;
✅ 解析后上送给AL层进行数据查询
✅ 上层的App进行数据读取,返回给AL层并继而由物理层发给主站
✅ 主站接到从站的回应,解析报文,上送APP层。
DPP的传输
✅ 主站APP发起读取DPP参数(Inde≤1)指令;
✅ 主站AL层面调用DL的DL_ReadParam函数
✅ 主站DL层把命令封装到消息中发送给从站
✅ 从站调用DL_ReadParam函数对主站的DPP读命令进行解析;
✅ 解析后上送给AL层进行数据查询
✅ 上层的App进行数据读取,返回给AL并继而由物理层发给主站
✅ 主站接到从站的回应,解析报文,上送APP层
关于AL Abort
查询ISDU是有时间限制的,如果查询从站的ISDU没有在规定的时间内返回,则主站发送一个Abort命令,终止ISDU的查询。
03 应用层的EVENT模块
AL应用层也有单独的Event处理机制,我们分别看一下主站AL Event和从站的AL Event。
主站AL EVENT
从站AL EVENT
事件上报过程
🌟从站的App创建一个事件,并开始发送请求信息
🌟该请求信息从AL传递到DL层,并把事件缓存到内存中
🌟从站的AL激活EventTrigger服务,置位EventFlag
🌟主站读取从站的EventFlag后,开始读取从站的StatusCode以及相关EventCode
🌟主站把相关Event继续上报给网关,网关应用确认事件消息
🌟主站把事件确认消息同步给从站,写入StatusCode信息,即清除事件标志,等待下一个事件的上报
结语
本篇主要对AL应用层的OD和Event做了介绍,从状态机看比DL层稍微简单些,主要管理应用层面的事务,对DL的数据进行管理和控制。

提交
睿远研究院丨IO-Link 事件解读
睿远研究院丨IO-Link ISDU详解
睿远研究院丨IO-Link OD模块解析
睿远研究院丨IO-LinkPD处理模块
睿远研究院丨IO-Link M序列解析