工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

睿遠(yuǎn)研究院丨IO-LinkPD處理模塊

睿遠(yuǎn)研究院丨IO-LinkPD處理模塊

2025/6/23 16:46:38

 前言

一年一度的IO-Link成員大會(huì)即將在德國(guó)法蘭克福召開(kāi),如果有小伙伴要前去觀摩的,歡迎評(píng)論區(qū)舉手留言哈!

1 主站消息狀態(tài)機(jī)回顧

上回我們講到消息處理模塊最重要的M-Sequence Type以及主從站的消息狀態(tài)機(jī),主站的消息狀態(tài)機(jī)會(huì)稍微復(fù)雜一點(diǎn),我們?cè)陂_(kāi)發(fā)主站協(xié)議棧的時(shí)候,也碰到一些無(wú)法理解的規(guī)則。

在規(guī)范中DL_WRITE和DL_READ都是通過(guò)Page通道讀寫(xiě)通信參數(shù)的,應(yīng)該都是在Startup階段才能進(jìn)行,是不允許在PREOP和OP階段進(jìn)行的。但是小編在1.1.3版本時(shí)就發(fā)現(xiàn)一個(gè)問(wèn)題,從PREOP切換到OP時(shí),需要DL_WRITE發(fā)送切換模式的命令,同時(shí)發(fā)送一個(gè)masterCycletime的寫(xiě)入指令,這個(gè)指令也是DL_Write的命令。

這就造成了一個(gè)困惑,雖然在狀態(tài)機(jī)中DL_Write_DeviceMode這個(gè)命令屬于單獨(dú)的命令,在PREOP階段也適用,但是DL_Write(0x01, "MasterCycleTime")可是確確實(shí)實(shí)的DL_Write,理論上不應(yīng)該出現(xiàn)在PREOP階段的它,卻出現(xiàn)了,直到目前最新的1.1.4版本尚未給任何說(shuō)明。

具體如下圖,DL_Write(0x01, "MasterCycleTime")這條命令是在從PREOP切換到OP前發(fā)出的,也就是其還在PREOP階段。圖片

好了,我們希望下個(gè)版本能夠解決這個(gè)問(wèn)題,同時(shí)各位小伙伴也可以測(cè)試一下自家的主站是否會(huì)發(fā)出DL_Write(0x01, "MasterCycleTime")這個(gè)命令。

這條命令僅僅在這個(gè)圖中出現(xiàn)了一次,在其他地方再無(wú)提及,猜測(cè)這個(gè)命令未必是必須的,因?yàn)橹髡就ㄖ獜恼疚业膍astercycletime也沒(méi)有多大作用,畢竟從站都是被動(dòng)式應(yīng)答,只有主站詢問(wèn)了,從站才會(huì)回答。

2 關(guān)于ProcessData

下面來(lái)講講PD處理模塊,在1.0時(shí)代,IO-Link規(guī)范規(guī)定了PD交互的多種方式,要求每次交互就2字節(jié),PD和OD交錯(cuò)運(yùn)行,PD多余2個(gè)字節(jié),就得拆包,多次發(fā)送,這個(gè)效率可想而知,非常低下,因此1.1版本做了重大改革,廢除了這種低下的方式。圖片

1.1版本后,每次最大32字節(jié)PD數(shù)據(jù),中間還可以?shī)A帶OD數(shù)據(jù),大大提升發(fā)送效率;當(dāng)然對(duì)于像RFID這種上百個(gè)字節(jié)的,還是需要拆分字節(jié),多次發(fā)送,再組包。

圖片

3 主從站的PD狀態(tài)機(jī)

3.1 主站PD狀態(tài)機(jī)

圖片

為了兼容1.0版本,狀態(tài)機(jī)里還把遺留的PDInInterleave放到了里面,從1.1版本來(lái)看,PD就兩個(gè)狀態(tài),Inactive狀態(tài)(即Startup和PREOP所處的裝狀態(tài))和PDSingle狀態(tài)(即OP所處的狀態(tài))。。

3.2 從站PD狀態(tài)機(jī)圖片

從站的PD狀態(tài)機(jī)也比較簡(jiǎn)單,從inactive狀態(tài)被激活后,進(jìn)入active狀態(tài),Handle PD主要是1.0版本的遺留,在多個(gè)字節(jié)數(shù)據(jù)挨個(gè)處理的時(shí)候來(lái)回在PD Active和Handle PD之間交互,而1.1版本,直接進(jìn)行DL_PDInputUpdate就行了。

3.3 總結(jié)

綜上所述,PD就是簡(jiǎn)單的收發(fā)數(shù)據(jù),沒(méi)有太多的處理,應(yīng)該算IO-Link協(xié)議棧內(nèi)部最簡(jiǎn)單的模塊了。

那么拿到睿遠(yuǎn)的IO-Link協(xié)議棧怎么處理PD數(shù)據(jù)呢,雖然簡(jiǎn)單,但PD也是IO- Link最重要的數(shù)據(jù),對(duì)于老版本的睿遠(yuǎn)協(xié)議棧,可以直接操作PDE_PDIn和PDE_PDOut這個(gè)指針就行了。

按照大端排序的原則,PDE_PDIn[0]就是上傳主站PD數(shù)據(jù)的最左邊的那個(gè)字節(jié),因?yàn)镻DE_PDIn的內(nèi)存是動(dòng)態(tài)創(chuàng)建的,故要避免指針越界的問(wèn)題。

在新版本中我們封裝了一個(gè)函數(shù):

UIntegerT8 CeresStackSetPDInData(UIntegerT8 *pdin_data, UIntegerT8 pdin_len)

通過(guò)該函數(shù),可以盡量避免指針越界的問(wèn)題。

對(duì)于SSP的版本,進(jìn)一步封裝了直接給測(cè)量值賦值的函數(shù),這個(gè)就后續(xù)在SmartSensorProfile這個(gè)章節(jié)再講了。

END 結(jié)語(yǔ)

本期的內(nèi)容就先到這里,提前做個(gè)劇透,下篇內(nèi)容我們就一起看看最復(fù)雜的OD模塊是如何運(yùn)作的,它包括了ISDU,Event等模塊,也是IO-Link最為核心的功能。

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

睿遠(yuǎn)研究院丨IO-Link M序列解析

睿遠(yuǎn)研究院丨IO-Link消息處理模塊

睿遠(yuǎn)研究院丨IO-Link主從狀態(tài)機(jī)解析

睿遠(yuǎn)研究院丨IO-Link數(shù)據(jù)鏈路層解析

睿遠(yuǎn)研究院丨IO-Link物理層編碼解析