大衍物联网--架构说明,支持mqtt,tcp,modbus接入

大衍物联网

 

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

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

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

概要说明

1:网络层与平台交互:

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第1张图片大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第2张图片

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

2:网络层与硬件交互:

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第3张图片

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

3:网络层帧的编解码

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第4张图片

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

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

注解支持帧中帧编码解码

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第5张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第6张图片

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

1:编码注解:

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第7张图片

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

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

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

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

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

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

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第8张图片

 大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第9张图片

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

2:解码注解

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第10张图片

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

Field  解析后的字段类型

Method 截取二进制数组的方法

Param  截取二进制数组的参数

Reverse 是否反转

Note 笔记,不做说明

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

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第11张图片

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,tcp,modbus接入_第12张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第13张图片

2:对应的Controller

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第14张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第15张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第16张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第17张图片

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

3:对应的Device:

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第18张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第19张图片

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

其他Controller

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

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第20张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第21张图片

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第22张图片

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

感谢支持

大衍物联网--架构说明,支持mqtt,tcp,modbus接入_第23张图片

 

你可能感兴趣的:(物联网,mqtt,漂亮的代码,物联网,rabbitmq,接口隔离原则)