前言本文对IO-Link 规范附录F 中的数据类型进行了详细说明。附录定义了基本数据类型(基本数据类型)和组合数据类型(复合数据类型),并通过示例演示了其结构和传输方法,包括单独使用或打包使用。
基本数据类型包括BooleanT、UIntegerT、IntegerT、Float32T、StringT、OctetStringT、TimeT、TimeSpanT;,组合数据类型包括ArrayT、RecordT。。这些数据类型在IODD文档中也大量描述,但其分类名称不一致。它们在IODD 中称为SimpleDataType和ComplexDatatype。1 BooleanT。 BooleanT代表只能有两个不同值的数据类型,即TRUE 和 FALSE。数据类型在下表中指定。
对于一次性使用,编码如下表所示,发送者应始终使用0xFF 代表 'TRUE' 或 0x00 代表 'FALSE'。接收方可以从0x01 到 0xFF 的范围为 'TRUE进行解释,并且应该将0x00解释为'FALSE'以简化实现。
对于BooleanT,需要特别注意的是,它的True是0xFF,而不是传统意义上的0x01;在许多嵌入代码中,TRUE 的定义是0x01。如果使用瑞源的IO-Link来判断某个条件是否为真,则必须使用指定的宏IOLD_TRUE或其他协议栈定义的TRUE。如果用0x01来判断,就很容易出错。
2 UIntegerTIntegerTUIntegerT表示无符号数,用2~64位表示,采用右对齐、左补的方式,填充到对应的字节数:1、2、4或8,高阶填充位用0填充。
IntegerT表示有符号整数类型,用2到64位表示。使用右对齐和左侧填充填充到相应的字节数:1、2、4或8,负数高位用1填充,正数高位用0填充。
3 Float32TFloat32T采用IEEEStd 754-1985标准的单精度浮点类型(32bit),正数的高位用0填充,负数的高位用1填充。
4 StringTOctetStringTStringT用一定的固定序列的字符串表示,长度可变,使用US-ASCII或UTF-8进行编码。 UTF-8 对ASCII 字符使用1 个字节,而其他字符最多使用4 个字节。0x00 不允许作为字符,通常用作字符串的结尾或尾部填充。
对于字符串类型,实际数据可以小于ISDU中定义的长度。接收方可以搜索第一个0x00 字节并将其视为字符串的结尾。如果是压缩发送,即后面的0x00不发送,收件人可以自己加上0x00。
OctetStringT由有序的8位组表示,固定字节,也是表示字节串的数据类型。一般用于传输各种二进制数据,如图像、音频等。
5 TimeTTimeSpanTTimeT 基于RFC 1305 标准,由两个无符号值组成,表示与特定日期关联的网络时间。
TimeSpanT是64位的整型值,每个单位代表1/2的32次方。
时间T的格式:
TimeSpanT 的格式:
6 ArrayT组合数据类型。该数据类型包含多个相同的数据类型。相应的规则如下:
1、分项指标数据排列要紧密,不能有空位;居中。 2、字节序列中,最高的子索引元素n应为靠右对齐;
3、UInteger和IntegerT的长度大于58位且小于等于64bit则不允许。
7 RecordT与ArrayT类型的不同之处在于它包含的数据类型可以不一致。相应的规则如下:
1.升序排列:子索引按1到n升序排列。虽然中间允许有间隙,但为了便于阅读,仍保持一定的升序;
2、起始偏移:从最后一个字节开始计数;
3、对齐:Float32T、StringT、OctetStringT、TimeT、TimeSpanT必须保持字节对齐;
4、整型对齐:对于UIntegerT和IntegerT类型,强烈建议进行字节对齐,不要跨字节;
5.唯一性:每一位只能分配给一个Record,防止冲突。
结语今天的内容先到这里结束。我们花了15篇文章和大家一起整理了IO-Link协议规范的重要内容。下一篇文章,我们将开启IO-Link SSP法规解读之旅,近距离接触智能传感器的应用。您可以期待一下!
标题:睿远研究院丨IO-Link规范解读(十五):数据类型详解
链接:https://yqqlyw.com/news/sypc/69741.html
版权:文章转载自网络,如有侵权,请联系删除!