rs485自定义通讯协议设计

实现设备

广州大彩HMI屏幕

任务介绍

基于的底层协议UART,我们设计其上一层,和modbus处于同一层,可以参考modbus的设计自定义我们自己的通信协议。
可以实现一对多通信。
可扩展网线转rs485通信。

协议设计

通信参数

字节序:大端

字符编码格式:GB CODE(gb2312)

串口波特率:19200

广播站号: 0x00

默认站号:0x01

帧最大长度:270个字节

帧间隔:50ms,图片传输推荐500ms

最大传输长度:1024个字节

发送内容:16进制HEX值,非字符串

屏幕大小 320 x 240

协议格式

字段帧头站号数据长度命令序列号功能码访问地址数据CRC校验帧尾
索引[1][2][3,4][5,6][7,8][9,10][11,n][n+1,n+2][-2,-1]
大小(字节)112222n22
举例0xFA0x000x00070x00010x00010x10010xFCFF
说明起始标志设备站号
STATION_ID命令序号到数据命令序列号指明操作指明操作地址LW寄存器地址可变长度crc16 校验
从帧头到数据结束标志

功能定义:

此描述只是简要的核心说明,具体示例参考测试用例

功能码功能备注
0x0000读取站号无数据段 响应帧 5A {STATION_ID} 00 FC FF
0x0001设置站号1个字节 需要初始化
0x0100传输图片数据字段前两个字节代表图片序列号。数据段最大长度256【序列号+数据】从00 00开始
0x0101显示图片1+2+2个字节:<是否显示,x坐标,y坐标> ,需要旋转270°,坐标是原始竖屏坐标
0x0200设置文字GB 2312编码,结尾需要添加一个字节 0x00
0x0300设置数字1个字节 范围 [0,255] 过长请设置文字
0x0400设置状态1个字节

响应帧

帧头 + 站号 + 命令序号+ 功能码 + 状态码 + CRC校验+ 帧尾

状态码描述完整帧
FFFF成功FA {STATION_ID} + 命令序号+ 功能码 + FFFF + {CRC校验} + FCFF
0000失败FA {STATION_ID} + 命令序号+ 功能码 + 0000 + {CRC校验} + FCFF
0001crc校验失败FA {STATION_ID} + 命令序号+ 功能码 + 0001 + {CRC校验} + FCFF
0002功能执行失败FA {STATION_ID} + 命令序号+ 功能码 + 0002 + {CRC校验} + FCFF
0003数据段不足FA {STATION_ID} + 命令序号+ 功能码 + 0003 + {CRC校验} + FCFF
0004帧不完整或太长
或帧尾不对FA {STATION_ID} + 命令序号+ 功能码 + 0004 + {CRC校验} + FCFF

其他情况无响应

定义地址

1.界面地址:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

地址说明:

地址功能码说明
11000200灯位编号:例.01-011(文字传输)
12000400矿灯状态:已充满/充电中/已取走(状态1/2/3)(状态传输)
13000400矿灯信息:Ⅰ型/Ⅱ型Ⅲ型/Ⅳ型Ⅴ型(状态1/2/3/4/5)(状态传输)
14000400警示:工作正常/工作异常(状态1/2)(状态传输)
25000200使用人的姓名(文字传输)
16000200部门(文字传输)
17000200工种(文字传输)
18000200血型(文字传输)
0100图片传输,不需要指明地址
0101图片显示

执行流程图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
release版本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
devlop版本

CRC16校验

-- 传入的buffer包含帧头到数据
-- CRC16算法
function calculateCRC16(buffer)
    local crc = 0xFFFF -- 初始值
    local POLY_REVERSE = 0xA001
    for i = 1, #buffer do
        crc = crc ~ buffer[i]
        for _ = 1, 8 do
            if (crc & 0x0001) then
                crc = (crc >> 1) ~ POLY_REVERSE
            else
                crc = crc >> 1
            end
        end
    end
    return crc & 0xFFFF
end

具体实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值