架构:
SpringBoot + Netty + TCP
JDK1.8
文档名称 | 加油机数据采集设备通讯协议 |
---|---|
版本 | V2.0 |
撰写人 | 北斗导航科技 |
撰写时间 | 2022/10/24 |
说明: 数据传输采用TCP协议、Socket模式
设备上线首先发送注册包进行注册
起始标志5B | 功能码1B | 数据区28B | 结束码2B |
---|---|---|---|
55 BB BB BB BB | D1 | … … | 0D 0A |
⽰例: 55 BB BB BB BB D1 30 32 31 30 45 30 36 30 36 34 32 37 37 30 30 45 34 32 30 36 30 31 45 30 30 30 30 36 0D 0A 数据区:
设备ID前23字节是固定的0210E0606427700E420601E00006
, 只有后5个字节是变化的; 如 00001~00580
起始标志5B | 功能码1B | 结束码2B |
---|---|---|
38 37 39 31 35 | 33 | 0D 0A |
上位机收到加油数据或者设备心跳包需回复; 否则会造成设备异常断开;
起始标志5B | 功能码1B | 结束码2B |
---|---|---|
30 28 AA 08 79 | 75 | 0D 0A |
起始标志5B | 功能码1B | 结束码2B |
---|---|---|
55 AA AA AA AA | A4 | 0D 0A |
说明: 采集器返回数据格式为: 55 BB BB BB BB A4 0D 0A;
起始标志 | 功能码 | 数据区 | 结束码 |
---|---|---|---|
55 AA AA AA AA | AB | xx1……xx7 | 0D 0A |
说明: 1、指令格式为55 AA AA AA AA AB XX1 XX2 XX3 XX4 XX5 XX6 XX7 0D 0A。
2、AB后的字节含义为 (均为16进制) : XX1为年份的高字节、XX2为年份的低字节、XX3为⽉份、XX4为日、XX5为时、XX6为分、XX7为 秒
3、控制器返回数据格式为: 55 BB BB BB BB AB 0D 0A
4、例: 55 AA AA AA AA AB 07 E4 0B 03 12 1E 00 0D 0A 设置时间为2020- 1 1-03 18: 30: 00
起始标志 | 功能码 | 特征码 | 数据区 | 结束码 |
---|---|---|---|---|
55 AA AA AA AA | A8 | 49 50 3D ( IP=) | … … | 0D 0A |
---|---|---|---|---|
说明: 1、数据解析为ASCII值对应字符
2、数据区格式 "xx1.xx2.xx3.xx4,xx5/", 长度以实际IP长度定义
3、例: IP修改为27.105.60.114 端口修改为6001时 例: 27.105.60.114,6001/
发送55 AA AA AA AA A8 49 50 3D 32 37 2E 31 30 35 2E 36 30 2E 31 31 34 2C 36 30 30 31 2F 0D 0A 。2E = . 2C= , 2F= /
4、采集器返回数据格式为55 BB BB BB BB A8 OD OA 。
5、当指令发出后, 采集器将按照新的IP及端口号尝试连接, 如果连接成功并有正确的通信指令 (配置时钟指令) 返回, 则存贮此新的IP及 端口号, 否则丢弃并复位之前状态。
起始标志 | 功能码 | 枪 号 | 时 间 | 加油量 | ⾦ 额 | 单 价 | 备 用 | 备 用 | 当前 总油量 | 备 用 | 帧 号 | CRC校验 | 结束标志 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5B | 1B | 1B | 6B | 10B | 10B | 6B | 2B | 2B | 12B | 12B | 1B | 2B | 2B |
加油数据说明: ( 以下说明从加油数据第0字节开始)
● 起始标志: (FF 86 45 00 00 ) 第0-4字节
● 功能码: 00 第5字节
● 枪号: 第6字节 ( ⼗进制)
● 时间: 第7- 12字节 (解析为⼗进制, 精确到分; ⽇ 、时、分解析⼗进制后需要减去20, 防⽌处理粘包时数据拆分)
● 加油量: 第13-22字节
● ⾦额: 第23-32字节
● 单价: 第33-38字节
● 当前枪总油量: 第43-54字节
● 帧号: 第67字节
● crc校验: (默认00) 第68-69 字节 (crc16⾼位在前, 低位在后)
● 结束标志: (0D 0A) 第70-71
加油数据示例:
FF 86 45 00 00 00 07 (枪号) 07 E5 0A 32 1C 3D (采集时间 ) 30 30 30 30 30 30 3 1 35 32 38 (加油量) 30 30 30 30 30 31 31 30 30 30 (⾦ 37 32 30 (单价) 00 00 00 00 30 30 30 30 30 38 35 30 31 36 35 39 (加油机累计加油总量) 30 30 30 30 30 38 35 30 30 31 33 31 08 9B F0 0D 0 加油时间: 2021- 10-30 8:41:00; 枪号: 7; 单价: 7.20; 加油量: 15.28; 加油⾦额: 1 10.00; 当前总油量: 85016.59; (浮点型精度2位)
起始标志 | 功能码 | 枪 号 | 时 间 | 加油量 | ⾦ 额 | 单 价 | 备 用 | 特征码 | 备 用 | 相对总油量1 | 相对总油量2 | 相对总⾦额1 | 相对总⾦额2 | 帧 号 | CRC校验 | 结束标志 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5B | 1B | 1B | 6B | 10B | 10B | 6B | 2B | 1B | 1B | 12B | 12B | 12B | 12B | 1B | 2B | 2B |
加油数据说明: ( 以下说明从加油数据第0字节开始)
● 起始标志: (FF 86 45 00 00 ) 第0-4字节
● 功能码: 00 第5字节
● 枪号: 第6字节 ( ⼗进制)
● 时间: 第7- 12字节 (解析为⼗进制, 精确到分; ⽇ 、时、分解析⼗进制后需要减去20, 防⽌处理粘包时数据拆分)
● 加油量: 第13-22字节
● ⾦额: 第23-32字节
● 单价: 第33-38字节
● 备用: 第39 -40字节
● 特征码: 第41字节
● 备用 (默认0) : 第42字节
● 相对总油量1: 第43-54字节
● 相对总油量2: 第55-66字节
● 相对总金额1: 67-78字节
● 相对总金额2: 79-90字节
● 帧号: 第91字节
● crc16校验: (默认00) 第92-93 字节 (crc16高位在前, 低位在后)
● 结束标志: (0D 0A) 第94-95 字节
*特征码说明:
05: 此特征码数据,用于后面加油数据油枪总量计算; 油枪总量=总油量1-总油量2
01/02/03/04: 此特征码数据, 加油量=总油量1-总油量2, 加油金额=总金额1-总金额2, 加油总量=加油量+原加油总量 ** 设备注册后如有加油数据会首先发送05特征码加油数据**
05特征码数据:
FF 86 45 00 00 00 0C 07 E6 0A 1D 15 36 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 37 34 38 00 00 05 01 30 30 30 30 31 37 35 38 36 35 31 36 30 30 30 30 30 30 30 30 30 35 33 35 30 30 30 31 32 38 35 36 39 37 33 36 30 30 30 30 30 30 30 30 34 30 30 30 03 C2 12 0D 0A
……枪号12; 油枪总量=175865.16-5.35
01特征码数据
FF 86 45 00 00 00 0C 07 E6 0A 1D 25 20 30 30 30 30 30 30 30 35 33 35 30 30 30 30 30 30 34 30 30 30 30 30 30 37 34 38 00 00 01 23 30 30 30 30 30 30 30 30 30 35 33 35 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
2C BE 41 0D 0A
枪号:12;
加油时间 :2022 -10-9 17:12:00;
单价 :7.48;
加油量 = 535-0 = 535÷100 =5.35;
加油金额 = 4000-0=4000÷100 =40.0;
油枪总量=油枪总量+5.35
04特征码数据
FF 86 45 00 00 00 0C 07 E6 0A 1D 26 4B 30 30 30 30 30 30 31 33 33 37 30 30 30 30 30 31 30 30 30 30 30 30 30 37 34 38 00 00 04 03 30 30 30 30 31 37 36 35 39 36 36 32 30 30 30 30 31 37 36 35 38 33 32 35 30 30 30 31 32 39 31 31 36 37 36 36 30 30 30 31 32 39 31 30 36 37 36 36 2E
49 4C 0D 0A
同上01特征码解析 :
加油量= 17659662- 17658325=1337÷100=13.37升; 加油金额= 129116766- 129106766=10000÷100=100元;
加油机没有接入采集器时的加油总量假如为 100L 1>接入采集器后加了 5L.此时采集会发送 05 特征码的数据:总累计:105L 加油量 5L. 2>M 分钟后。加了 6L, 此时采集器会发送 01或02 或03 或 04 的数据计算得出 :加油量为 6L 此时新总累计=6+原累计(105L)=111L 3>N 分钟后。加了 18L.此时采集器会发送 01 或 02 或 03 或 04 的数据计算得出:加油量为 18L 此时新总累计=18+原累计 (111L) =139L注意:此时的原累计是上一帧数据的新累计 4>P 分钟后。加了30L,此时采集器会发送 01或 02 或 03或 04 的数据计算得出:加油量为 30L 此时新总累计=30+原累计 (139L) =169L ................. 期间加了 100L 此时 主板加油总累计为 169+100=269L J>k 天后加了 10L. 此时主板加油总量为 279L,此时采集会发送 05 特征码的数据: 总累计:279L 加油量10L 采集器只会发送 01/02/03/04/05 格式的数据. 文档里所提到的新总累计等是程序里面实现的