睿遠研究院丨IO-LinkPD處理模塊
前言
一年一度的IO-Link成員大會即將在德國法蘭克福召開,如果有小伙伴要前去觀摩的,歡迎評論區(qū)舉手留言哈!
1 主站消息狀態(tài)機回顧
上回我們講到消息處理模塊最重要的M-Sequence Type以及主從站的消息狀態(tài)機,主站的消息狀態(tài)機會稍微復(fù)雜一點,我們在開發(fā)主站協(xié)議棧的時候,也碰到一些無法理解的規(guī)則。
在規(guī)范中DL_WRITE和DL_READ都是通過Page通道讀寫通信參數(shù)的,應(yīng)該都是在Startup階段才能進行,是不允許在PREOP和OP階段進行的。但是小編在1.1.3版本時就發(fā)現(xiàn)一個問題,從PREOP切換到OP時,需要DL_WRITE發(fā)送切換模式的命令,同時發(fā)送一個masterCycletime的寫入指令,這個指令也是DL_Write的命令。
這就造成了一個困惑,雖然在狀態(tài)機中DL_Write_DeviceMode這個命令屬于單獨的命令,在PREOP階段也適用,但是DL_Write(0x01, "MasterCycleTime")可是確確實實的DL_Write,理論上不應(yīng)該出現(xiàn)在PREOP階段的它,卻出現(xiàn)了,直到目前最新的1.1.4版本尚未給任何說明。
具體如下圖,DL_Write(0x01, "MasterCycleTime")這條命令是在從PREOP切換到OP前發(fā)出的,也就是其還在PREOP階段。
好了,我們希望下個版本能夠解決這個問題,同時各位小伙伴也可以測試一下自家的主站是否會發(fā)出DL_Write(0x01, "MasterCycleTime")這個命令。
這條命令僅僅在這個圖中出現(xiàn)了一次,在其他地方再無提及,猜測這個命令未必是必須的,因為主站通知從站我的mastercycletime也沒有多大作用,畢竟從站都是被動式應(yīng)答,只有主站詢問了,從站才會回答。
2 關(guān)于ProcessData
下面來講講PD處理模塊,在1.0時代,IO-Link規(guī)范規(guī)定了PD交互的多種方式,要求每次交互就2字節(jié),PD和OD交錯運行,PD多余2個字節(jié),就得拆包,多次發(fā)送,這個效率可想而知,非常低下,因此1.1版本做了重大改革,廢除了這種低下的方式。
1.1版本后,每次最大32字節(jié)PD數(shù)據(jù),中間還可以夾帶OD數(shù)據(jù),大大提升發(fā)送效率;當然對于像RFID這種上百個字節(jié)的,還是需要拆分字節(jié),多次發(fā)送,再組包。
3 主從站的PD狀態(tài)機
3.1 主站PD狀態(tài)機
為了兼容1.0版本,狀態(tài)機里還把遺留的PDInInterleave放到了里面,從1.1版本來看,PD就兩個狀態(tài),Inactive狀態(tài)(即Startup和PREOP所處的裝狀態(tài))和PDSingle狀態(tài)(即OP所處的狀態(tài))。。
3.2 從站PD狀態(tài)機
從站的PD狀態(tài)機也比較簡單,從inactive狀態(tài)被激活后,進入active狀態(tài),Handle PD主要是1.0版本的遺留,在多個字節(jié)數(shù)據(jù)挨個處理的時候來回在PD Active和Handle PD之間交互,而1.1版本,直接進行DL_PDInputUpdate就行了。
3.3 總結(jié)
綜上所述,PD就是簡單的收發(fā)數(shù)據(jù),沒有太多的處理,應(yīng)該算IO-Link協(xié)議棧內(nèi)部最簡單的模塊了。
那么拿到睿遠的IO-Link協(xié)議棧怎么處理PD數(shù)據(jù)呢,雖然簡單,但PD也是IO- Link最重要的數(shù)據(jù),對于老版本的睿遠協(xié)議棧,可以直接操作PDE_PDIn和PDE_PDOut這個指針就行了。
按照大端排序的原則,PDE_PDIn[0]就是上傳主站PD數(shù)據(jù)的最左邊的那個字節(jié),因為PDE_PDIn的內(nèi)存是動態(tài)創(chuàng)建的,故要避免指針越界的問題。
在新版本中我們封裝了一個函數(shù):
UIntegerT8 CeresStackSetPDInData(UIntegerT8 *pdin_data, UIntegerT8 pdin_len)
通過該函數(shù),可以盡量避免指針越界的問題。
對于SSP的版本,進一步封裝了直接給測量值賦值的函數(shù),這個就后續(xù)在SmartSensorProfile這個章節(jié)再講了。
END 結(jié)語
本期的內(nèi)容就先到這里,提前做個劇透,下篇內(nèi)容我們就一起看看最復(fù)雜的OD模塊是如何運作的,它包括了ISDU,Event等模塊,也是IO-Link最為核心的功能。

提交
睿遠研究院丨IO-Link M序列解析
睿遠研究院丨IO-Link消息處理模塊
睿遠研究院丨IO-Link主從狀態(tài)機解析
睿遠研究院丨IO-Link數(shù)據(jù)鏈路層解析
睿遠研究院丨IO-Link物理層編碼解析