前言
本篇對IO-Link規(guī)范的附錄F的數(shù)據(jù)類型做個詳細(xì)解釋,附錄定義了基本數(shù)據(jù)類型(Basic Data Types) 和組合數(shù)據(jù)類型(Composite Data Types),并通過示例展示了其結(jié)構(gòu)和傳輸方式,包括單個使用或打包使用的情形。
基礎(chǔ)數(shù)據(jù)類型包括了BooleanT、UIntegerT、IntegerT、Float32T、StringT、OctetStringT、TimeT、TimeSpanT;組合數(shù)據(jù)類型包括ArrayT、RecordT。
這些數(shù)據(jù)類型在IODD文檔里也有大量描述,只不過他倆的分類名稱不一致,在IODD里稱為SimpleDataType和ComplexDatatype。
1 BooleanT
BooleanT 表示一個只能有兩個不同值的數(shù)據(jù)類型,即TRUE 和 FALSE,該數(shù)據(jù)類型在下表中進(jìn)行了規(guī)定。

對于單一使用,編碼下表所示,發(fā)送方應(yīng)始終使用0xFF 代表 'TRUE' 或 0x00 代表 'FALSE'。接收方可以解釋從0x01 到 0xFF 的范圍為 'TRUE',并應(yīng)解釋0x00為'FALSE',以簡化實現(xiàn)。

對于BooleanT要特別注意的是,它的True是0xFF,不是傳統(tǒng)意義上的0x01;在很多嵌入式代碼中,TRUE的定義就是0x01,如果你使用睿遠(yuǎn)的IO-Link,判斷一個條件是否為true,一定要用規(guī)定的宏IOLD_TRUE或者其他協(xié)議棧定義的TRUE,如果采用0x01來判斷,會容易出錯。
2 UIntegerT&IntegerT
UIntegerT表示一個無符號數(shù),由2到64位來表示,采用右對齊的方式,左邊補(bǔ)足的方式,填充到對應(yīng)字節(jié)個數(shù):1、2、4或8,高階填充位用0填充。

IntegerT表示一個符號整型,由2到64位來表示。采用右對齊的方式,左邊補(bǔ)足的方式,填充到對應(yīng)字節(jié)個數(shù):1、2、4或8,負(fù)數(shù)高位用1填充,正數(shù)高位用0填充。

3 Float32T
Float32T采用IEEEStd 754-1985標(biāo)準(zhǔn)的單精度浮點類型(32bit),正數(shù)的高位用0填充,負(fù)數(shù)的高位用1填充。

4 StringT&OctetStringT
StringT由一定固定序列的字符串表示,可變長度,采用US-ASCII或者UTF-8編碼。UTF-8對ASCII字符采用1個字節(jié),而其他的字符最大采用4個字節(jié)。0x00不允許作為1個字符,常用作字符串的結(jié)尾或者尾部填充。

字符串類型,實際的數(shù)據(jù)可以小于ISDU里定義的長度,接受者可以搜索第一個0x00字節(jié),就可以認(rèn)為其是字符串的結(jié)尾了。如果壓縮發(fā)送,即不發(fā)送后面的0x00,接受者可以自己補(bǔ)充0x00。
OctetStringT由有序的8位組表示,固定字節(jié),也是表示字節(jié)串的數(shù)據(jù)類型,一般用于傳輸各種二進(jìn)制數(shù)據(jù),比如圖像、音頻等。

5 TimeT&TimeSpanT
TimeT基于RFC 1305標(biāo)準(zhǔn),由兩個無符號值組成,表示與特定日期相關(guān)的網(wǎng)絡(luò)時間。
TimeSpanT是64位的整型值,每個單位表示1/2的32次方秒。
TimeT的格式:

TimeSpanT的格式:

6 ArrayT
組合數(shù)據(jù)類型,該數(shù)據(jù)類型中包含幾個一樣的數(shù)據(jù)類型,相應(yīng)規(guī)則如下:
1、子索引數(shù)據(jù)應(yīng)該緊密排列,中間不能有空位;
2、在字節(jié)序列中,最高的子索引元素n應(yīng)該靠右對齊;
3、UInteger和IntegerT長度大于58bit同時小于等于64bit是不允許的。

7 RecordT
與ArrayT類型不一樣的是,其包含的數(shù)據(jù)類型可以不一致,相應(yīng)規(guī)則如下:
1、升序排列:子索引從1到n升序排列,雖然允許中間有間隔,但保持一定的升序排列,有助于可讀性;
2、起始偏移:從最后一個字節(jié)開始計算;
3、對齊:對Float32T、StringT、OctetStringT、TimeT、TimeSpanT必須要保持字節(jié)對齊;
4、整型對齊:對于UIntegerT、IntegerT類型,強(qiáng)烈建議進(jìn)行字節(jié)對齊,不要跨越字節(jié);
5、唯一性:每個bit只能被分配給為一個Record,防止沖突。

結(jié)語
今天的內(nèi)容先到這里,目前我們已經(jīng)花了15篇的內(nèi)容,將IO-Link的協(xié)議規(guī)范的重要內(nèi)容都和大家一起梳理了一遍。下一篇,我們將開啟IO-Link SSP行規(guī)的解讀旅程,也更貼近智能傳感器的應(yīng)用,大家可以期待一下!
-
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ī)范解讀(三):物理層概覽
IO-Link規(guī)范解讀(五):數(shù)據(jù)鏈路層解析
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(七):消息處理模塊
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(八):M-Sequence Type 與消息處理狀態(tài)機(jī)
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十):ISDU詳解
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十二):SM模塊與CM模塊解析
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十三):參數(shù)模塊解析
睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十四):DS模塊詳解
什么是IO-Link
IO-Link編碼器特點
IO-Link收發(fā)器怎么數(shù)據(jù)讀取
虹科直播回放 | 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ī)范解讀(十五):數(shù)據(jù)類型詳解
評論