• 太阳集团tcy8722

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

    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/128、x/128/128、x/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协议发布报文教程  

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



    太阳集团tcy8722