目前很多自动驾驶汽车, 交通红绿灯, 智能家居电器设备之间, 都是不能相互通信的, 这对未来人工智能带来不方便,
人工智能中各设备制定全国性统一数据链非常重要.
因此, 我思考着: 汽车/ 手机app/ 冰箱/ 电视/ 风扇/ 洗衣机/ 空调/ 扫地机器人/ 热水器/ 防盗门/ 等设备之间应当要能相互通信,肯定采用了相同的数据规约格式, 但是又能体现不同的特点.
比如基本需求:
1, 我们下班了, 用手机app告诉热水器要预先热水, 房间的空调要提前开启.
2, 但是途中收到领导电话要加班, 这时又要告诉热水器关闭, 空调关闭, 以节能省电
3, 空调与热水器收到指令后, 回复并告诉控制app, 并显示当前状态.
4, 数据加密与解密, 整个过程中采用ASE或者其它方式加密.
对通用数据链规约要求如下:
1, 1对1命令/响应/上报/读写等等
2, 1对n广播命令
3, 1对n指定规约分类的局部广播命令
4, 同一命令接者应可以多个,有个批量大小.
5, 报文中有设备分类码,
6,报文中有作设备唯一标识码
7,设备同时可以并发进行多流程会话
根据上述要求, 制定一个通用数据链规约标准框架格式:
规约标志:2B, FB88,指总规约标志.
会话流水:10B, 会话发起者生成19位唯一流水,同一次会话中请求/响应等不同流程由此号串联起来.
报文控制:1B, 1-2位表示1请求 /2响应 /3主动上报, 3位读/写, 4位是否有后续帧, 5位是否要回复,6位流程是否结束,其它备用
报文长度:2B, 最长65535字节.
规约分类:2B, 规约分类(65535种), 汽车/ 手机app/ 冰箱/ 电视/ 风扇/ 洗衣机/ 空调/ 扫地机器人等, 0为公共分类.
功能编号:2B, 表示功能(65535种), 每种规约分类单独的功能号.
发送地址:4B, 如:192.168.0.1
接收个数:1B, 不用广播方式时, 发给指定单位, 最多一次发给255个(比如座标同时发给指定的 255个空调)
接收地址:N, 127.0.0.1表示广播, 或者地址数集合:192.168.0.1,192.168.0.2等等
信息体个数:1B,一次最多共255个,如果内容很大,可以配合报文长度与后续帧状态标志来分批发送
信息体内容:N, 根据功能确定格式(如: 空调温度),可以无内容
校验:2B
结束:2B,FE88
这样一来, 使用中,所有类型的设备, 都可以接收各种设置, 又可以共享信息.
注: 本人做过电表规约, 了解网上公开的国标通信规约标准.
以下是列子:
写入目标温度:
- 功能说明
规约分类 |
功能编号 |
功能名称 |
说明: |
90 |
1 |
设置目标温度数据 |
设备接收命令调节设置温度, 此表为10进制数, 91表示[手机] |
- 报文结构
规约结构 |
长度 |
例子值 |
说明: |
规约标志 |
2B |
FB88 |
|
会话流水 |
10B |
00000000000000000001 |
会话发起者生成19位唯一流水, 同一会话编号相同,回复时原样返回 |
报文控制 |
1B |
60 |
请求,写入,无后续帧, 需要回复, 流程未结束 |
报文长度 |
2B |
0031 |
指整个报文的长度,包括开始与结束: 49 |
规约分类 |
2B |
005B |
十进制值为:91 手机 |
功能编号 |
2B |
0001 |
功能号为:1 |
发送地址 |
4B |
C0A80001 |
地址为:192.168.0.1 |
接收个数 |
1B |
02 |
接收者地址数: 2个 |
接收地址 |
N |
C0A80002C0A80003 |
接收者地址: 192.168.0.2, 192.168.0.3 |
信息体个数 |
1B |
03 |
3个 |
信息体内容 |
N |
000000FF000000FF000000FF |
每个值用4字节表示浮点数: 最高温度, 最低温度, 设置温度, 共12字节 |
校验码 |
2B |
00 |
无 |
结束标志 |
2B |
FE88 |
|
最终发送的报文:
FB8800000000000000000001600031005B0001C0A8000102C0A80002C0A8000303000000FF000000FF000000FF00FE88
APP发送之后, 空调地址为 192.168.0.2, 192.168.0.3两个空调就会收到 设置温度, 然后启动空调.
从报文件中可以看到: 发送者对象是 [手机], 接收者只知道地址为 192.168.0.2, 192.168.0.3 的两个设备