前言
書接上文,這周我們就開始深入解讀下PD與OD模塊。PD即周期性數(shù)據(jù),每次主從站間通信都會(huì)交互的數(shù)據(jù)類型,它分為PDin與PDout。OD的全稱是On-Request Data,即在請(qǐng)求時(shí)才會(huì)應(yīng)的報(bào)文。OD模塊通常分為三個(gè)部分,ISDU、Command和Event。
01
主站消息狀態(tài)機(jī)回顧
上回我們講到消息處理模塊最重要的M-Sequence Type以及主從站的消息狀態(tài)機(jī),主站的消息狀態(tài)機(jī)會(huì)稍微復(fù)雜一點(diǎn),我們?cè)陂_發(fā)主站協(xié)議棧的時(shí)候,也碰到一些無法理解的規(guī)則。
在規(guī)范中DL_WRITE和DL_READ都是通過Page通道讀寫通信參數(shù)的,應(yīng)該都是在Startup階段才能進(jìn)行,是不允許在PREOP和OP階段進(jìn)行的。但是小編在1.1.3版本時(shí)就發(fā)現(xiàn)一個(gè)問題,從PREOP切換到OP時(shí),需要DL_WRITE發(fā)送切換模式的命令,同時(shí)發(fā)送一個(gè)masterCycletime的寫入指令,這個(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版本尚未給任何說明。
具體如下圖,DL_Write(0x01, "MasterCycleTime")這條命令是在從PREOP切換到OP前發(fā)出的,也就是其還在PREOP階段。

好了,我們希望下個(gè)版本能夠解決這個(gè)問題,同時(shí)各位小伙伴也可以測(cè)試一下自家的主站是否會(huì)發(fā)出DL_Write(0x01, "MasterCycleTime")這個(gè)命令。
這條命令僅僅在這個(gè)圖中出現(xiàn)了一次,在其他地方再無提及,猜測(cè)這個(gè)命令未必是必須的,因?yàn)橹髡就ㄖ獜恼疚业膍astercycletime也沒有多大作用,畢竟從站都是被動(dòng)式應(yīng)答,只有主站詢問了,從站才會(huì)回答。
02
關(guān)于ProcessData
下面來講講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ù),中間還可以夾帶OD數(shù)據(jù),大大提升發(fā)送效率;當(dāng)然對(duì)于像RFID這種上百個(gè)字節(jié)的,還是需要拆分字節(jié),多次發(fā)送,再組包。

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

為了兼容1.0版本,狀態(tài)機(jī)里還把遺留的PDInInterleave放到了里面,從1.1版本來看,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í)候來回在PD Active和Handle PD之間交互,而1.1版本,直接進(jìn)行DL_PDInputUpdate就行了。
3.3總結(jié)
綜上所述,PD就是簡(jiǎn)單的收發(fā)數(shù)據(jù),沒有太多的處理,應(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)?strong>PDE_PDIn的內(nèi)存是動(dòng)態(tài)創(chuàng)建的,故要避免指針越界的問題。
在新版本中我們封裝了一個(gè)函數(shù):
UIntegerT8 CeresStackSetPDInData(UIntegerT8 *pdin_data, UIntegerT8 pdin_len)
通過該函數(shù),可以盡量避免指針越界的問題。
對(duì)于SSP的版本,進(jìn)一步封裝了直接給測(cè)量值賦值的函數(shù),這個(gè)就后續(xù)在SmartSensorProfile這個(gè)章節(jié)再講了。
04
主站的OD數(shù)據(jù)處理

上圖是主站的狀態(tài)機(jī),主站的On-request處理程序是DL-Mode處理模塊中“Startup_2”“PreOperate_3”和“Operate_4”狀態(tài)下的一個(gè)從屬狀態(tài)機(jī)。它控制其他三個(gè)狀態(tài)機(jī),即ISDU處理模塊、command處理模塊和Event處理模塊的狀態(tài)機(jī),默認(rèn)情況下,它始終在ISDU狀態(tài)。
1
當(dāng)收到EventFlag時(shí),狀態(tài)機(jī)將切換到Event處理模塊,在完整讀取Event信息后,它將返回到ISDU處理狀態(tài);
2
當(dāng)收到DL_Control,則狀態(tài)機(jī)將切換到Command處理模塊;完成相關(guān)命令后,狀態(tài)機(jī)將返回到之前的狀態(tài)(ISDU或Event狀態(tài))
3
當(dāng)收到DL_Write_DeviceMode命令,也會(huì)切換到Command模塊,用于處理DL Mode的狀態(tài)切換,這是1.1.4版本增加的內(nèi)容
05
從站的OD數(shù)據(jù)處理

從站對(duì)OD的請(qǐng)求重定向4個(gè)獨(dú)立的小模塊:
Param讀寫模塊
該模塊主要讀寫DPP部分的數(shù)據(jù),專門走了Page通道
Command模塊
用于切換從站的狀態(tài),保持和主站的同步
ISDU模塊
讀寫ISDU
Event模塊
讀寫Event
06
DPP&ISDU的處理
DPP即Direct Parameter Page,其實(shí)屬于ISDU部分,DPP1對(duì)應(yīng)ISDU的Index 0x00,DPP2對(duì)應(yīng)ISDU Index 0x01。
規(guī)范中明確如果不支持ISDU,就直接采用DPP1和DPP2進(jìn)行參數(shù)的讀寫,這是為了方便一些簡(jiǎn)化版本的協(xié)議棧進(jìn)行簡(jiǎn)單的IO-Link控制。
那么我們看DPP和ISDU在規(guī)范中的定義:

DPP1和DPP2就是從屬于ISDU的,只是協(xié)議棧規(guī)定了DPP走的PAGE通道,其余ISDU走ISDU通道,個(gè)人認(rèn)為,其把簡(jiǎn)單的東西復(fù)雜化了,如果合二為一豈不是更好。

其中0x00:MasterCommand主要用于接收主站的各類命令,進(jìn)入Command模塊進(jìn)行處理:

07
MasterCycleTime&MinCycleTime
MinCycleTime是從站主動(dòng)上傳匯報(bào)給主站的循環(huán)時(shí)間,而MasterCycleTime則是主站最終根據(jù)字節(jié)大小,從站匯報(bào)的循環(huán)時(shí)間決策出的實(shí)際時(shí)間,都是采用Timebase|Multiplier的方式,具體如下:



08
M-sequence Capability編碼格式
這個(gè)編碼在前面的章節(jié)中已經(jīng)詳細(xì)介紹,這里就不多說了,直接看一個(gè)例子:

這是從站回復(fù)的一個(gè)示例,這回復(fù)的0x21這個(gè)數(shù)據(jù)中,表明了自己分別在Preop和OP模式下的OD字節(jié)大小
09
ProcessDataIn& ProcessDataOut
PDIn和PDOut的字段,都是采用是否Byte位和Length來組成,把一個(gè)字節(jié)的作用摳到了極致。


結(jié)語
本期的內(nèi)容就先到這里,以上就是本期PD處理模塊、OD處理模塊與DPP主要字節(jié)的解析,DPP作為IO-Link的關(guān)鍵參數(shù),包含了IO-Link設(shè)備的關(guān)鍵信息。下一期,我們就開始介紹與參數(shù)配置相關(guān)的ISDU部分,這也是IO-Link技術(shù)的核心價(jià)值體現(xiàn)。
-
IO-Link
+關(guān)注
關(guān)注
2文章
193瀏覽量
20482
發(fā)布評(píng)論請(qǐng)先 登錄
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十一):ISDU狀態(tài)機(jī)與EVENT事件
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十):ISDU詳解
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(八):M-Sequence Type 與消息處理狀態(tài)機(jī)
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(七):消息處理模塊
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(六):主從站狀態(tài)機(jī)解析
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(三):物理層概覽
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(二):IO-Link通信技術(shù)概述
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(一):技術(shù)定義與組織規(guī)范
RASIGHT 睿遠(yuǎn) IO-Link智能傳感器通信解決方案
Analog Devices / Maxim Integrated MAXREFDES177 IO-Link通用模擬IO特性/框圖
虹科直播回放 | IO-Link技術(shù)概述與虹科IO-Link OEM
IO-Link收發(fā)器怎么數(shù)據(jù)讀取
IO-Link接口的功能和特點(diǎn)
Profinet協(xié)議IO-Link主站網(wǎng)關(guān)-三格電子

睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(九): PD與OD處理模塊詳解
評(píng)論