【ETestDEV5教程26】通信协议管理之动态属性
ETestDEV是一款面向测试系统的测试软件开发环境,主要应用于嵌入式软件测试、快速原型验证、硬件在环测试、工业自动化测试等场景。本教程针对ETestDEV5的使用方法进行详细说明。若有疑问,欢迎留言。
文章目录
- 1.关键字
- 2.内置函数
- 2.1 ByteSize函数
- 2.2 CheckCode函数
- 2.2.1 内置校验函数名
- 2.2.2 CRC算法描述方式
- 2.3 偏移量函数
- 2.3.1 绝对偏移量函数ValueOf
- 2.3.2 相对偏移量函数ValueOffset
1.关键字
关键字是通信协议内代指当前协议、当前协议分组的变量,用于动态设置自动值、动态设置条件表达式、指定内置函数动态参数等场景。
this:表示整个协议对象,如下图所示。
root:表示整个协议对象,如下图所示。
super:在分组协议字段里使用,表示分组协议对象,如下图所示。
2.内置函数
协议内置函数用于协议定义时动态计算或调用内置算法。内置函数包括ByteSize函数、CheckCode函数、偏移量函数。
2.1 ByteSize函数
可以用于计算指定协议字段或协议的长度。接收一个协议字段或协议的引用,返回协议字段或协议的字节长度,ByteSize只能接收整字节,如下图所示。
2.2 CheckCode函数
用于计算校验值;接收3个参数,依次为校验函数、校验开始协议段、校验结尾协议段。后两个参数为可选参数,默认从协议第一个协议段开始,至校验字段的前一个协议段结束。
第一个参数有两种赋值方式:内置校验函数名、CRC算法描述方式,下面依次介绍。
2.2.1 内置校验函数名
举个例子:使用8位校验和,进行说明。
SUM_8,保留溢出的数据,自动验证使用SUM_8。当求出的校验和大小超过1个字节能表示的最大值255时,溢出的数据保留。
如下图所示,8位校验和是280,大于255。由于SUM_8函数可以保留溢出的数据,因此协议字段Check的值是280。
2.2.2 CRC算法描述方式
描述使用数组的方式描述CRC算法,数组前3个值为数字,后两个值为布尔值,依次为[多项式值,CRC初始值,结果异或值,是否反转输入,是否反转输出]。
CRC算法参考循环冗余校验函数,如下表所示:
2.3 偏移量函数
协议打包时分支条件引用后置字段,协议解包时增加偏移量函数。
2.3.1 绝对偏移量函数ValueOf
ValueOf(prot,len1,len2) 输入参数: prot:EProtocol 类型,协议对象 len1:number 类型,从协议的开始字段到引用字段的比特位 en2:number 类型,引用的协议对象字段的长度 返回值: result:number 类型,引用的协议字段的值举个例子,如下图所示,引用的协议对象是root.num,协议开始到引用字段一共96bit,root.num一共8bit, 当条件分支引用后置字段时,使用valueOf(root.num, 96, 8)。
2.3.2 相对偏移量函数ValueOffset
ValueOffset(prot,len1,len2) 输入参数: prot:EProtocol 类型,协议对象 len1:number 类型,相对引用字段的比特位 len2:number 类型,引用的协议对象字段的长度 返回值: result:number 类型,引用的协议字段的值举个例子,如下图所示,引用的协议对象是root.num,引用root.num的位置相对num字段早了8bit,root.num一共8bit, 当条件分支引用后置字段时,使用ValueOffset(root.num, 8, 8)。
