工控网首页
>

应用设计

>

睿远研究院丨IO-LinkPD处理模块

睿远研究院丨IO-LinkPD处理模块

2025/6/23 16:46:38

 前言

一年一度的IO-Link成员大会即将在德国法兰克福召开,如果有小伙伴要前去观摩的,欢迎评论区举手留言哈!

1 主站消息状态机回顾

上回我们讲到消息处理模块最重要的M-Sequence Type以及主从站的消息状态机,主站的消息状态机会稍微复杂一点,我们在开发主站协议栈的时候,也碰到一些无法理解的规则。

在规范中DL_WRITE和DL_READ都是通过Page通道读写通信参数的,应该都是在Startup阶段才能进行,是不允许在PREOP和OP阶段进行的。但是小编在1.1.3版本时就发现一个问题,从PREOP切换到OP时,需要DL_WRITE发送切换模式的命令,同时发送一个masterCycletime的写入指令,这个指令也是DL_Write的命令。

这就造成了一个困惑,虽然在状态机中DL_Write_DeviceMode这个命令属于单独的命令,在PREOP阶段也适用,但是DL_Write(0x01, "MasterCycleTime")可是确确实实的DL_Write,理论上不应该出现在PREOP阶段的它,却出现了,直到目前最新的1.1.4版本尚未给任何说明。

具体如下图,DL_Write(0x01, "MasterCycleTime")这条命令是在从PREOP切换到OP前发出的,也就是其还在PREOP阶段。图片

好了,我们希望下个版本能够解决这个问题,同时各位小伙伴也可以测试一下自家的主站是否会发出DL_Write(0x01, "MasterCycleTime")这个命令。

这条命令仅仅在这个图中出现了一次,在其他地方再无提及,猜测这个命令未必是必须的,因为主站通知从站我的mastercycletime也没有多大作用,毕竟从站都是被动式应答,只有主站询问了,从站才会回答。

2 关于ProcessData

下面来讲讲PD处理模块,在1.0时代,IO-Link规范规定了PD交互的多种方式,要求每次交互就2字节,PD和OD交错运行,PD多余2个字节,就得拆包,多次发送,这个效率可想而知,非常低下,因此1.1版本做了重大改革,废除了这种低下的方式。图片

1.1版本后,每次最大32字节PD数据,中间还可以夹带OD数据,大大提升发送效率;当然对于像RFID这种上百个字节的,还是需要拆分字节,多次发送,再组包。

图片

3 主从站的PD状态机

3.1 主站PD状态机

图片

为了兼容1.0版本,状态机里还把遗留的PDInInterleave放到了里面,从1.1版本来看,PD就两个状态,Inactive状态(即Startup和PREOP所处的装状态)和PDSingle状态(即OP所处的状态)。。

3.2 从站PD状态机图片

从站的PD状态机也比较简单,从inactive状态被激活后,进入active状态,Handle PD主要是1.0版本的遗留,在多个字节数据挨个处理的时候来回在PD Active和Handle PD之间交互,而1.1版本,直接进行DL_PDInputUpdate就行了。

3.3 总结

综上所述,PD就是简单的收发数据,没有太多的处理,应该算IO-Link协议栈内部最简单的模块了。

那么拿到睿远的IO-Link协议栈怎么处理PD数据呢,虽然简单,但PD也是IO- Link最重要的数据,对于老版本的睿远协议栈,可以直接操作PDE_PDIn和PDE_PDOut这个指针就行了。

按照大端排序的原则,PDE_PDIn[0]就是上传主站PD数据的最左边的那个字节,因为PDE_PDIn的内存是动态创建的,故要避免指针越界的问题。

在新版本中我们封装了一个函数:

UIntegerT8 CeresStackSetPDInData(UIntegerT8 *pdin_data, UIntegerT8 pdin_len)

通过该函数,可以尽量避免指针越界的问题。

对于SSP的版本,进一步封装了直接给测量值赋值的函数,这个就后续在SmartSensorProfile这个章节再讲了。

END 结语

本期的内容就先到这里,提前做个剧透,下篇内容我们就一起看看最复杂的OD模块是如何运作的,它包括了ISDU,Event等模块,也是IO-Link最为核心的功能。

审核编辑(
王静
)
投诉建议

提交

查看更多评论
其他资讯

查看更多

睿远研究院丨IO-Link M序列解析

睿远研究院丨IO-Link消息处理模块

睿远研究院丨IO-Link主从状态机解析

睿远研究院丨IO-Link数据链路层解析

睿远研究院丨IO-Link物理层编码解析