大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]这个项目虽然不复杂,但是使用了设计模式,注解,多线程,树状算法

大衍物联网

 

开源目的:尽可能接入更多的传输层协议,编解码硬件自身的帧数据!

项目地址:https://gitee.com/big_coffee_market/large-derivative-linkage

项目优势:只是做网络层服务,不涉及到具体的业务逻辑,只是做信息的编解码服务,入手较简单,较快。在硬件编解码过程中,封装了一些类型与字节数组的转换,使用注解编程,代码可读性较强,扩展性更为自由,并且支持帧中包含帧!网络层与硬件交互,网络层与平台交互,都有唯一一个对应的接口,层次感较强!

概要说明

1:网络层与平台交互:

大衍半导体有限公司_MQTT通信协议[通俗易懂]大衍半导体有限公司_MQTT通信协议[通俗易懂]

平台与网络中心交互的时候,指令是一一对应的,一个指令一个结果,泛型继承PlatformAttachDTO,含义是需要携带设备ID。

2:网络层与硬件交互:

大衍半导体有限公司_MQTT通信协议[通俗易懂]

与硬件交互,要发送二进制数组,因为在设备接入的时候,要保存设备的ID,作为接入标识! 这个接口的含义是,向某一设备发送二进制指令,得到二进制指令的返回值。

3:网络层帧的编解码

大衍半导体有限公司_MQTT通信协议[通俗易懂]

模仿FastJson,编码的时候传入对象信息,生成对应的二进制数组。

解码的时候,传输二进制数组信息和对象信息,会赋给对象数值。

注解支持帧中帧编码解码

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

支持帧中帧,@EncoderField 代表编码,@DecodeerField代表解码。该层Frame是最外层的Frame,在某些字段上,既支持编码又支持解码。

1:编码注解:

大衍半导体有限公司_MQTT通信协议[通俗易懂]

Sequence: 序列号,解析字段从前到后,1,2,3,4,5。按照顺序解析

Field:字段类型,byte[]编码后的字段类型

Len: 字段所占有的byte[]长度

Reverse:二进制字段是否反转,不反转解析的是1234,反转后解析的值是4321

Allow:该字段是否允许解析,可以不要,但是为了统一格式,保留了

Note: 备注,不起到任何作用,只是一个说明标注

大衍半导体有限公司_MQTT通信协议[通俗易懂]

 大衍半导体有限公司_MQTT通信协议[通俗易懂]

支持的字段类型。Frame类型,对应的编解码格式都是一个对象,支持帧中帧!

2:解码注解

大衍半导体有限公司_MQTT通信协议[通俗易懂]

Sequence 按顺序解析1,2,3,4,5

Field  解析后的字段类型

Method 截取二进制数组的方法

Param  截取二进制数组的参数

Reverse 是否反转

Note 笔记,不做说明

Method,param要搭配使用,代表的是截取多少长度的byte[]数组 

大衍半导体有限公司_MQTT通信协议[通俗易懂]

Length 定长,param = 4,代表从左到右截取的长度就是4.

Tail 到倒数第几位,假设总长度是12,param = 1。那么截取的长度就是11.

Untils 直到某一个字符,假设待解析的数组为 0x01,0x02,0x03,0x80,0x07,0x09

Param = 0x80,截取的长度是3,param = 0x07截取的长度是4

解析顺序都是从左到右依次解析!

完整的交互示例

读取设备每个端口的状态

服务器读取设备每个端口当前的状态。

数据方向:

模块——设备

命令:

CMD

0x01

数据(上面表示数据含义,下面表示示例数据):

NULL

0x00

参数

是否必填

说明

NULL

固定为0x00

回复数据(上面表示数据含义,下面表示示例数据):

PORT_NUM

PORT1_STATUS

PORT2_STATUS

0x03

0x02

0x01

参数

是否必填

说明

PORT_NUM

设备端口数量

PORT_STATUS

端口状态:

0x01:端口空闲;0x02:端口正在使用;0x03:端口禁用;0x04:端口故障。

示例:模块发送:EE 09 01 00 00 00 00 00 00 00 08

      模块接收:66 13 01 00 00 00 00 00 00 0A 02 01 01 01 01 01 01 01 01 01 1B (1端口正在充电,其他端口空闲 )

1:编写对应的Model

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

2:对应的Controller

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

使用锁的阻塞特性,实现同步效果,返回给平台对应的byte[]。

3:对应的Device:

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

设备收到帧数据后,确定是否为平台下发数据,如果是使用锁的阻塞性,赋值到通道数据容器里,然后解锁,平台下发的阻塞状态就被唤醒,获取到通道数据容器内的数据。

其他Controller

在流程封装好后,扩展就很方便,示例如下

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

大衍半导体有限公司_MQTT通信协议[通俗易懂]

这样子扩展,就可以完成其他对应的平台发送设备回复的指令!

感谢支持

大衍半导体有限公司_MQTT通信协议[通俗易懂]

 

今天的文章大衍半导体有限公司_MQTT通信协议[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65182.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注