睿远研究院丨IO-Link消息处理模块
前言
本周来到消息处理模块,通信世界的精髓就是消息的处理,如何把0,1,0,1解析成有意义的数据,就是消息模块需要打下的基础。
消息处理模块要根据在物理层已经转变成byte的内容,进行消息解析,特别是固定的协议一般都有协议的报文头和报文尾,根据简单规则过滤该报文是否为合法报文,避免进一步的深度解析,减少MCU的处理压力。
01 M-Sequence定义
主站与从站的交互,通过一系列的消息来交换数据,因此我们称之为“M-Sequence”,它也是IO-Link里的重要概念。
IO-Link属于典型的一问一答式交互,主站发送消息,从站回应消息,如果主站不发送消息,从站就不会回应消息。
一个M-Sequence包含了主站的消息和从站的消息:
⭐️主站消息由若干个UARTFrame组成
⭐️第一个UART为MC(M序列控制字),表示当前报文的类型,简单理解为功能码,表示本次M序列的功能是什么,读写ISDU还是读Event等;
⭐️第二个UART的前2个bit,表示当前的M序列Type,决定了当前主站和从站的报文长度;
⭐️根据第一个UART和第二个UART就基本确定了功能和数据长度,后续就是填充数据即可。
02 M-Sequence类型
M-Sequence定义了不同阶段的报文类型,虽然规范总共罗列了10种,但其实一般也就用其中的3种,包括TYPE_0、TYPE_1_V、TYPE_2_V,其他的类型在目前IO-Link v1.1.4中基本无用武之地。
TYPE_1_1是完全交互PD,不交互OD,仅在IO-Link v1.0规范中使用。
TYPE_0
一般在Startup使用,主站和从站还没有协商数据时使用,一般用于读取DPP数据;双方来回只交互一个OD数据。
TYPE_1_V
一般在PRE-OP使用,没有PD数据交互,只有OD数据,OD可以是1,2,8,32字节;通常很多厂商都是用8字节OD来交互,提高效率,又不浪费字节。
TYPE_2_V
一般在OP使用,主要交互PD数据,中间夹杂OD数据,确保PD按照固定数据传输数据,同时又可以传输OD的数据。
03 MC解析
MC报文的Bit 7作为区分读写操作的标志位。
MC报文的Bit 6和Bit5作为通讯通道的标志,因为每次循环都有OD数据,因此每次通信的通道都是3 ISDU通道;而当需要上报事件时候才会进行2 Diagnosis通道传输;最后是1 Page通道,在Startup阶段通过1 Page通道读取DPP1,2参数,如果在正常通信状态下,要读取DPP参数,也是采用1 Page通道。
最后5个bit作为地址标识,或者在进行ISDU传输时作为计数器,让双方知道当前已经发送到哪个报文了,不至于紊乱。
上图为根据具体的标志位展示的所有可能的报文类型,大家在抓到相关IO-Link报文时可以根据这个表格去判断当前的通道和读写状态。
04 CKT解析
主站的第二个消息包含两部分内容:
M-Sequence Type,根据所处的状态确定其值,一般来说,Startup阶段是0,PreOP阶段为1,OP阶段为2;当然这个不是绝对的,只是大部分这么使用而已。
Checksum,主站发送所有消息并加上一个种子值0x52一起异或,为了节约消息的开销,又对8bit的异或值做了运算得到一个6bit的checksum和M-SequenceType拼接到一起。
异或值的计算如下:
END
本篇内容就先到这里啦,消息处理模块是IO-Link通信的重中之重,建议大家多花时间学习和消化。
如果有相关疑问,或者对IO-Link产品有需求,欢迎随时通过微信公众号:Rasight,与我们联系交流。

提交
睿远研究院丨IO-Link主从状态机解析
睿远研究院丨IO-Link数据链路层解析
睿远研究院丨IO-Link物理层编码解析
【睿远研究院】IO-Link物理层概览
IO-Link通信技术概述