当前位置: 首页 >应用方案 >技术应用 >

PC7062封装MQTT协议字符长度计算教程

MQTT协议字符长度计算

OASIS标准在MQTT3.1.1协议描述中已经介绍了一种对剩余字符长度的计算方法如下图:

MQTT协议字符长度计算1

官方提供的算法并不能直接引入TPC7062的脚本中,笔者并未在TPC脚本函数说明中找到类似与do…while(条件判断式)的函数,好在MQTT协议规定了最大可编码的长度为4字节,笔者通过下列脚本可以实现与官方推荐方法等同效果,脚本如下(水平有限,有更好的方法欢迎在官网留言讨论)。

剩余字符长度编码

MQTT协议中有两种计算字符的需求,一是可变长度(剩余字符长度),二是字符长度,使用开关型或者数值型变量LEN_STR_BUF_HEX_MODE”区分计算方法。

新建用户策略并添加两排策略行

MQTT协议字符长度计算2

长度计算传入带计算长度的字符,并使用!Len(str)”函数计算出字符的10进制长度,通过DECàHEX转化为16进制字符串。

剩余计算原理,(x表示传入10进制长度)协议规定最大长度计算为4字节,因此定义3个变量分别存储x/128x/128/128x/128/128/128,在定义4个变量(…_BIT_14)保存每一位的计算结果:

1、 若小于127字节直接转换并存储在_BIT_1中;

2、 若大于127小于16383,需要使用两位存储数据,_BIT_1存入(x MOD 128+128_BIT_2存入x/128取整的值;

3、 若大于16384小于2097151,需要使用三位存储数据,_BIT_1存入(x MOD 128+128_BIT_2存入(x/128 MOD 128)+128_BIT_3存入x/128/128取整的值;

4、 若大于2097152小于268435455,需要使用四位存储数据,_BIT_1存入(x MOD 128+128_BIT_2存入(x/128 MOD 128)+128_BIT_3存入(x/128/128 MOD 128)+128_BIT_4存入x/128/128/128取整值;

5、 大于268435455超出MQTT3.1.1协议规定的最大字符;

脚本参考“可变长度缓存”脚本。

剩余字符长度解码

1.两个字节的计算方式:

剩余长度=(Byte1-128)+Byte2*128

2.三个字节的计算方式:

剩余长度=Byte1-128+[Byte2-128+Byte3*128]*128

3.以此类推,四个字节的计算方式为:

剩余长度=Byte1-128+{Byte2-128+[Byte3-128+Byte4*128]*128}*128

MQTT协议字符长度计算3

相关内容推荐:

PC7062封装MQTT协议链接报文步骤教程

PC7062封装MQTT协议发布报文教程  

亿佰特人每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多产品更多资料,感兴趣的小伙伴可以登录我们的官网/行了解,还有客服小姐姐在线答疑哦!成都亿佰特--物联网应用专家,随时在身边,时刻准备为您服务!


https://www.wjx.cn/jq/84863372.aspx