前言
今天我們來好好聊聊ISDU。ISDU是Indexed service data unit的縮寫,這個名字吧,也怪奇怪的,直接翻譯叫索引服務(wù)數(shù)據(jù)單元,聽起來更是怪怪的,小編更喜歡直接稱他為從站的參數(shù)。傳感器的各項參數(shù)設(shè)置都要靠它,它不僅可以設(shè)置參數(shù),也可以作為只讀參數(shù)來讀取,甚至可以作為命令,基本是無所不能了。
1
ISDU總覽
ISDU與PD數(shù)據(jù)不同,在請求的狀態(tài)下才會發(fā)起,一般由主站發(fā)起相關(guān)請求,比如讀ISDU和寫ISDU。
ISDU的數(shù)據(jù)可以和PD數(shù)據(jù)一起傳輸,即在發(fā)送PD數(shù)據(jù)的同時發(fā)送ISDU數(shù)據(jù),考慮到PD數(shù)據(jù)的及時性,ISDU作為OD數(shù)據(jù),并非一次性發(fā)送完畢,而是把數(shù)據(jù)拆分到多個循環(huán)中,發(fā)送完畢由接收端來組裝數(shù)據(jù)報文。
規(guī)范規(guī)定,ISDU的最大長度為231字節(jié),這是一個很奇怪的數(shù)字。反正它一定得小于256。
——ISDU的通用結(jié)構(gòu)——

ISDU中對參數(shù)的標(biāo)識采用了Index和subindex的組合,index的取值范圍從0x0000~0xFFFF,不過大部分都是被規(guī)范做了保留和定義,用戶能自定義用的范圍只有0x40~0xFE以及0x0100~0x3FFF。
雖然范圍有限,但絕對綽綽有余了,下圖就是一個大概的劃分。

規(guī)范劃分ISDU為2大部分,一部分是系統(tǒng)預(yù)定義的,index從0x02到0x3F;另一部分屬于客戶自定義ISDU區(qū)域以及行規(guī)使用的范圍。
系統(tǒng)參數(shù)(System)
0x02~0x0F 系統(tǒng)參數(shù)使用
客戶標(biāo)識(Identification)0x10~0x1F 客戶的標(biāo)識信息等
診斷信息(Diagnosis)
0x20~0x27 從站的診斷信息
行規(guī)參數(shù)(Profile)
0x31~0x3F從站行規(guī)使用,比如SSP
建議區(qū)域(Preferred)
0x40~0xFE 從站設(shè)備首選的自定義ISDU空間
擴(kuò)展區(qū)域(Extended)
0x0100~0x3FFF 可以可使用的擴(kuò)展區(qū)域
行規(guī)指定(Profile specific)
0x4000~0x4FFF 從站行規(guī)使用,比如SSP
2
ISDU的結(jié)構(gòu)
ISDU分為讀/寫兩個操作,這個和前面所講的報文的讀寫是兩個概念。報文的讀寫是指OD是主站發(fā)出還是從站發(fā)出,而ISDU的讀寫就是我把參數(shù)設(shè)置到從站內(nèi),還是從從站讀取ISDU數(shù)據(jù)。
無論是讀ISDU還是寫ISDU,一開始都是寫方向的報文,可以理解為給從站發(fā)送命令,因為讀寫ISDU就是一個命令。
命令發(fā)送完畢,就是讀報文,這時候可能是讀取ISDU的具體數(shù)值,也可能是從站對寫ISDU的確認(rèn)報文,這些報文是由從站發(fā)給主站的,所以是讀操作。
理解完讀寫ISDU的命令后,我們看詳細(xì)的報文結(jié)構(gòu)

I-Service作為ISDU的第一個報文的前4個bit,規(guī)定了讀寫方向和具體的模式,有用的就3個寫,3個讀,還有一個no service。我們簡化它就是如下的公式:

因為長度既用了第一個字節(jié)的后4bit,考慮到231字節(jié)的ISDU,又用了一個字節(jié),導(dǎo)致感覺IO-Link又想節(jié)約字節(jié),但又沒有節(jié)約到位,增加了協(xié)議棧的復(fù)雜性。
如下圖所示,這個ExtLength是若隱若現(xiàn),猶抱琵琶半遮面;有時候有,有時候又沒有,所以造成一個怪現(xiàn)象,你會發(fā)現(xiàn),length這個字段從來沒有16這個數(shù)值。

length是一個感覺雞肋的一個定義,現(xiàn)在這個index和subindex又是類似的,你這統(tǒng)一定義有index和subindex不就完了嗎,非得定義一會有,一會沒有,增加代碼開發(fā)復(fù)雜度,又沒有感覺字節(jié)節(jié)約到哪里去。下圖給一個直觀的感受。

3
ISDU的FlowCtrl機(jī)制
ISDU比較重要的一個機(jī)制是FlowCtrl機(jī)制,即當(dāng)一個ISDU需要通過多個M-Sequence來傳輸時,需要流控進(jìn)行消息計數(shù)。
每次傳輸完一段數(shù)據(jù),F(xiàn)lowCtrl就需要+1,如果FlowCtrl沒有變化,說明上個傳輸?shù)臄?shù)據(jù)對端沒有收到或者收到數(shù)據(jù)有誤,需要重發(fā)。主站是ISDU的發(fā)起方,因此主站需要通過ISDU的數(shù)據(jù)長度和FlowCtrl兩個組合進(jìn)行傳輸完整性的判斷。
FlowCtrl的詳細(xì)定義如下:

簡化了看就是如下圖:

ISDU的通道是0x11,結(jié)合讀寫位和地址位的首位,有如下幾個組合:
0xFx(1111xxxx):
寫ISDU命令(start/IDLE)
0xEx(1110xxxx):
寫ISDU命令(count)
0x7x(0111xxxx):
讀ISDU命令(Start/IDLE)
0x6x(0xx0xxxx):
讀ISDU命令(count)
舉例來看:

第一行 70 52 表示主站要寫一個ISDU命令,93 15 86表示ISDU index 15的命令,這個命令就是讀取序列號
第二行,主站要讀取從站的回應(yīng)了,這時候從站尚未回應(yīng),則返回系統(tǒng)忙
第三行,主站再次讀取從站的ISDU回應(yīng),這時候從站準(zhǔn)備好數(shù)據(jù),準(zhǔn)備輸出,按照ISDU res+的格式回應(yīng)。
首先是D113 表示正確回應(yīng),字節(jié)數(shù)在19個。后續(xù)跟著相關(guān)數(shù)據(jù)。30 31 34 38 34 32 表示ASCII,轉(zhuǎn)換成字符串就是01 48 42,最后一個2E是校驗碼。
第四行和第五行就是接著第三行沒有輸出完的數(shù)據(jù)繼續(xù)輸出。前面兩個字節(jié),E1 70和E2 40都是主站發(fā)出的數(shù)據(jù),表示繼續(xù)讀取從站的數(shù)據(jù)。
整體ISDU回應(yīng)的數(shù)據(jù)就是01 48 42 52 b0 00 02 D9。
結(jié)語
OK,本篇詳細(xì)介紹了ISDU的報文結(jié)構(gòu)以及讀寫的示例,下篇就ISDU的狀態(tài)機(jī)做個簡單的介紹,期待各位看官持續(xù)關(guān)注!
-
IO-Link
+關(guān)注
關(guān)注
2文章
199瀏覽量
20684 -
IO-Link收發(fā)器
+關(guān)注
關(guān)注
0文章
16瀏覽量
6292
發(fā)布評論請先 登錄
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(三):物理層概覽
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(七):消息處理模塊
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(八):M-Sequence Type 與消息處理狀態(tài)機(jī)
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十一):ISDU狀態(tài)機(jī)與EVENT事件
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十二):SM模塊與CM模塊解析
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十三):參數(shù)模塊解析
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十四):DS模塊詳解
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十五):數(shù)據(jù)類型詳解
IO-Link 節(jié)點簡化應(yīng)用設(shè)計
什么是IO-Link
解讀IO-Link 1.1版的三個全新特性
初識IO-Link及IO-Link設(shè)備軟件協(xié)議棧
虹科直播回放 | IO-Link技術(shù)概述與虹科IO-Link OEM
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(一):技術(shù)定義與組織規(guī)范
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(二):IO-Link通信技術(shù)概述
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十):ISDU詳解
評論