4G路由器串口自定义协议的目标在于减少客户的OEM定制,尽可能地满足不同客户对数据封包的不同需求。当前可支持用户灵活定制的消息结构字段有消息前缀、消息长度域、消息序列号、设备ID、业务数据域、CRC校验及消息后缀七个字段。
下面以4G路由器局域网测试为例,分别说明以上使用情况。
1. 4G路由器lan口地址为192.168.8.1,路由器下面网口连接的电脑地址为192.168.8.152,分别如下:
2. 4G路由器smartlink串口参数设置。
2.1设置“模式配置”及各参数定义说明如下(以tcp客户端工作模式为例)。
启用:开启串口应用。
名称:自定义设置一个名称,默认为空。
工作模式:选择串口工作模式,这里以TCP客户端为例。
服务器地址:填写远端数据接收中心的服务器ip地址和端口。
协议:选择“自定义”;
消息前缀: 可选,不支持前缀时值为空,即可!该值必须配置为十六进制串,支持 以0x开头或不以0x开头的十六进制。最大支持4个字节的前缀。
消息长度:可选,消息长度占用0字节时表示不带消息长度域。可支持1个或2个字节的 消息长度域!高字节在前。
消息长度的值包括:消息长度域、消息序列号、设备ID、业务数据和CRC校 验值五个字段的长度。
消息序列号:可选,序列号占用0字节时表示不带消息序列号域。可支持1个或2个字节 的消息序列号域!高字节在前。
设备ID:可选,为空时表示不带设备ID;默认为17位的产品序列号内容长度。
业务数据:必填,包括协议头尾在内,整个消息包的长度最大为65535。
对于心跳消息,该值为配置的心跳内容。
CRC校验:CRC校验值基于 消息长度、消息序列号、设备ID、业务数据 四个部分进行校验。
CRC校验算法为CRC8, CRC16_ARC, CRC16_BuyPass, CRC16_CCITT_False, CRC16_Genbus, CRC16_Kermit, CRC16_X25, CRC16_Modem。
消息后缀:与消息前缀相同,可选,不支持前缀时值为空,即可!该值必须配置为十六进 制串,支持以0x开头或不以0x开头的进十六进制。最大支持4个字节的前 缀。
设备模式:仅支持透传模式,完全透明传输。
启用心跳:串口是否支持心跳包上传功能,心跳包内容位ASCII格式。默认不开启,可根据具体情况设置。
2.2设置“串口配置”
串口com1的各波特率和奇偶校验位必须和用户串口设备完全一样,否则服务器端数据会接收不到或异常。
以上所有参数设置完,必须点击“保存及应用”按钮使参数生效。设备连接成功如图:
3. 4G路由器串口和电脑TCP/UDP工具进行局域网数据收发测试。
具体地,4G路由器串口端使用DB9母头(孔)接线端子,电脑端使用USB转DB9公头(针)连接线接好,然后电脑上分别打开sscom32串口助手和TCP/UDP测试工具进行数据收发测试。
3.1 设备端不带 消息前缀、后缀、无消息长度及消息序列号,数据收发测试如下:
注意:服务器端如果需要下发数据到4G路由器,则必须按照当前自定义格式下发,否则串口端无法正常解析数据。
示例:
设备ID:1120ZR21911306677(对应HEX:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37)
消息前缀HEX数据:空
消息长度:0字节
消息序列号:0字节
消息后缀HEX数据:空
串口发送HEX数据:11 22 33
则服务器端接收HEX数据为:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33
服务器下发HEX数据:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 66 77 88
则串口侧接收HEX数据为:66 77 88
3.2 设备端带 消息前缀、后缀、无消息长度及消息序列号(均为0字节),数据收发测试 如下:
注意:服务器端如果需要下发数据到4G路由器,则必须按照当前自定义格式下发,否则串口端无法正常接解析数据。
示例:
设备ID:1120ZR21911306677(对应HEX:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37)
消息前缀HEX数据:7B7B
消息后缀HEX数据:7D7D
串口发送HEX数据:11 22 33
则服务器端接收HEX数据为:
7B 7B 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
服务器下发HEX数据:
7B 7B 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 66 77 88 7D 7D
则串口侧接收HEX数据为:66 77 88
3.3 设备端带 消息前缀、后缀、无消息长度,有1或2个字节消息序列号,数据收发 测试分别如下:
注意:服务器端如果需要下发数据到4G路由器,则必须按照当前自定义格式下发,否则串口端无法正常接解析数据。
示例1:
设备ID:1120ZR21911306677
(对应HEX:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37)
消息前缀HEX数据:7B7B
消息后缀HEX数据:7D7D
消息序列号:1个字节,支持范围00-ff,即0-255个消息
串口发送HEX数据:11 22 33
则服务器端接收HEX数据依次为:
7B 7B 01 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
7B 7B 02 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
7B 7B 03 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
……
服务器下发HEX数据:
7B 7B 09 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 66 77 88 7D 7D
则串口侧接收HEX数据为:66 77 88
示例2:
设备ID:1120ZR21911306677
(对应HEX:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37)
消息前缀HEX数据:7B7B
消息后缀HEX数据:7D7D
消息序列号:2个字节,高字节在前,支持范围0000 -ffff,即0-65355个消息
串口发送HEX数据:11 22 33
则服务器端接收HEX数据依次为:
……
7B 7B 00 0A 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
7B 7B 00 0B 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
7B 7B 00 0C 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
……
服务器下发HEX数据:
7B 7B 00 09 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 66 77 88 7D 7D
则串口侧接收HEX数据为:66 77 88
3.4设备端带 消息前缀、后缀,并且有消息长度及消息序列号(都以2个字节为例),数据收发测试如下:
示例:
设备ID:1120ZR21911306677(对应HEX:31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37)
消息前缀HEX数据:7B7B
消息后缀HEX数据:7D7D
消息长度:2个字节,高字节在前,支持范围0000 -ffff,即0-65355个消息,长度范围 =消息长度自身(2B)+消息序列号(2B)+设备ID(17B)+数据内容(实际长度B)=21B+数据内容(实际长度B)
消息序列号:2个字节,高字节在前,支持范围0000 -ffff,即0-65355个消息
串口发送HEX数据:11 22 33
则服务器端接收HEX数据依次为:
7B 7B 00 18 00 00 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
7B 7B 00 18 00 01 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
7B 7B 00 18 00 02 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 11 22 33 7D 7D
……
其中消息长度00 18为24个字节,即 消息总长度(24B)=消息长度自身(2B)+消息序列号(2B)+设备ID(17B)+数据内容(3B)
服务器下发HEX数据:
7B 7B 00 18 00 03 31 31 32 30 5A 52 32 31 39 31 31 33 30 36 36 37 37 66 77 88 7D 7D
则串口侧接收HEX数据为:66 77 88