睿远研究院丨IO-Link规范解读(十五):数据类型详解

科创之家 2026-01-15 6392人围观

前言

本篇对IO-Link规范的附录F的数据类型做个详细解释,附录定义了基本数据类型(Basic Data Types) 和组合数据类型(Composite Data Types),并通过示例展示了其结构和传输方式,包括单个使用或打包使用的情形。

基础数据类型包括了BooleanT、UIntegerT、IntegerT、Float32T、stringT、OctetStringT、TimeT、TimeSpanT;组合数据类型包括ArrayT、RecordT。

这些数据类型在IODD文档里也有大量描述,只不过他俩的分类名称不一致,在IODD里称为SimpleDataType和ComplexDatatype。

1 BooleanT

BooleanT 表示一个只能有两个不同值的数据类型,即TRUE 和 FALSE,该数据类型在下表中进行了规定。

wKgZO2leNa-Ac3cgAACXTJWfcxo311.png

对于单一使用,编码下表所示,发送方应始终使用0xFF 代表 'TRUE' 或 0x00 代表 'FALSE'。接收方可以解释从0x01 到 0xFF 的范围为 'TRUE',并应解释0x00'FALSE',以简化实现。

对于BooleanT要特别注意的是,它的True0xFF,不是传统意义上的0x01;在很多嵌入式代码中,TRUE的定义就是0x01,如果你使用睿远的IO-Link,判断一个条件是否为true,一定要用规定的宏IOLD_TRUE或者其他协议栈定义的TRUE,如果采用0x01来判断,会容易出错。

2 UIntegerT&IntegerT

UIntegerT表示一个无符号数,由2到64位来表示,采用右对齐的方式,左边补足的方式,填充到对应字节个数:1、2、4或8,高阶填充位用0填充。

wKgZO2leNa-ACVktAAGevAPwXPQ408.png

IntegerT表示一个符号整型,由2到64位来表示。采用右对齐的方式,左边补足的方式,填充到对应字节个数:1、2、4或8,负数高位用1填充,正数高位用0填充

3 Float32T

Float32T采用IEEEStd 754-1985标准的单精度浮点类型(32bit),正数的高位用0填充,负数的高位用1填充。

wKgZO2leNa-AHewjAAIsXResLNY436.png

4 StringT&OctetStringT

StringT由一定固定序列的字符串表示,可变长度,采用US-ASCII或者UTF-8编码。utF-8对ASCII字符采用1个字节,而其他的字符最大采用4个字节。0x00不允许作为1个字符,常用作字符串的结尾或者尾部填充。

wKgZO2leNa-AN0hrAAIo8WIgDtw301.png

字符串类型,实际的数据可以小于ISDU里定义的长度,接受者可以搜索第一个0x00字节,就可以认为其是字符串的结尾了。如果压缩发送,即不发送后面的0x00,接受者可以自己补充0x00。

OctetStringT由有序的8位组表示,固定字节,也是表示字节串的数据类型,一般用于传输各种二进制数据,比如图像、音频等。

wKgZO2leNa-AcsdGAAE_0f9uXEo751.png

5 TimeT&TimeSpanT

TimeT基于RFC 1305标准,由两个无符号值组成,表示与特定日期相关的网络时间。

TimeSpanT是64位的整型值,每个单位表示1/2的32次方秒。

TimeT的格式:

wKgZO2leNbCALfYyAARcHV0Ou6Y167.png

TimeSpanT的格式:

wKgZO2leNbCADsPJAAQYTjzQDoM192.png

6 ArrayT

组合数据类型,该数据类型中包含几个一样的数据类型,相应规则如下:

1、子索引数据应该紧密排列,中间不能有空位;

2、在字节序列中,最高的子索引元素n应该靠右对齐

3、UInteger和IntegerT长度大于58bit同时小于等于64bit是不允许的。

wKgZO2leNbCAF_XtAAGBfnmMS14550.png

7 RecordT

与ArrayT类型不一样的是,其包含的数据类型可以不一致,相应规则如下:

1、升序排列:子索引从1到n升序排列,虽然允许中间有间隔,但保持一定的升序排列,有助于可读性;

2、起始偏移:从最后一个字节开始计算;

3、对齐:对Float32T、StringT、OctetStringT、TimeT、TimeSpanT必须要保持字节对齐;

4、整型对齐:对于UIntegerT、IntegerT类型,强烈建议进行字节对齐,不要跨越字节;

5、唯一性:每个bit只能被分配给为一个Record,防止冲突。

wKgZO2leNbCAVRoaAAL8y5of7s4080.png

结语

今天的内容先到这里,目前我们已经了15篇的内容,将IO-Link的协议规范的重要内容都和大家一起梳理了一遍。下一篇,我们将开启IO-Link SSP行规的解读旅程,也更贴近智能传感器的应用,大家可以期待一下!

  • 随机文章
  • 热门文章
  • 热评文章
不容错过
Powered By Z-BlogPHP