RS485通讯的报文基础格式

*************

RS485通讯

*************

RS485用来通讯,相当于网线。

通常来说,通讯数据是十六进制。

数据帧结构为:地址码 + 功能码 + 数据域 + 校验码

如果你送过快递,那么事情就变得简单了。想象一下你是快递小哥,地址码告诉你是具体的位置,功能码是送快递还是上门取件,数据域就是快递本身,检验码就是验证码,确保流程完整性。

*************简单的主机读取从机请求温度值,假设当前温度13℃*************

主机发送指令:

010300 0100 01D5 CA

地址码

目标设备地址

功能码

只读

起始寄存器地址

起始位置为1

寄存器数量

检验码

你不用管

这个时候,从机会响应指令:

01030200 0DD5 CA

地址码

从机地址

功能码

与请求一致

返回数据字节数

寄存器数据

转换成十进制就是 13

检验码

OK,这是基本的,一次只请求一个信息。那么聪明的你又想到了,如果我一次请求多个信息呢?

也是OK的。

主机发送命令:

010300 0100 0100 02WW WW

地址码

目标设备地址

功能码

只读

起始寄存器地址

起始位置为1

温度参数地址湿度参数地址

检验码

你不用管

从机回复命令:

01030400 0D00 26TT TT

地址码

目标设备地址

功能码

只读

返回数据字节数温度参数湿度参数

检验码

你不用管

*************

### 将鼠标在1920x1080显示器正中央的位置按照HID协议转换为16进制,并以RS485数据帧格式表示 #### HID 协议下的鼠标绝对位置数据 在 HID 协议中,鼠标绝对位置的传输通常通过报告描述符定义。对于 1920x1080 分辨率的显示器,鼠标正中央的位置为 `(960, 540)`。根据 HID 协议,该位置可以通过以下方式表示为 16 进制数据: ```python hid_mouse_data = [0x00, 0x00, 0xB0, 0x03, 0x1C, 0x02] ``` - `hid_mouse_data[0]`: 报告 ID(可选字段),在此设置为 `0x00`。 - `hid_mouse_data[1]`: 按键状态,无按键按下时为 `0x00`。 - `hid_mouse_data[2:3]`: X 坐标值,高字节为 `0xB0`,低字节为 `0x03`,组合为 `960`。 - `hid_mouse_data[4:5]`: Y 坐标值,高字节为 `0x1C`,低字节为 `0x02`,组合为 `540`。 此数据表示鼠标在 1920x1080 显示器中央的位置[^1]。 #### RS485 数据帧格式 RS485 是一种差分信号通信标准,其数据帧通常包含起始位、数据位、校验位和停止位。为了将上述 HID 数据封装为 RS485 数据帧,可以采用以下格式: ```plaintext [帧头][长度][数据][校验和][帧尾] ``` - **帧头**: 标识数据帧的开始,例如 `0xAA`。 - **长度**: 表示数据部分的长度,例如 `0x06`(HID 数据长度为 6 字节)。 - **数据**: 上述 HID 数据 `[0x00, 0x00, 0xB0, 0x03, 0x1C, 0x02]`。 - **校验和**: 简单的校验方法可以是对数据部分求和后取反,例如 `0xFF - (0x00 + 0x00 + 0xB0 + 0x03 + 0x1C + 0x02)`。 - **帧尾**: 标识数据帧的结束,例如 `0x55`。 完整的数据帧如下: ```python rs485_frame = [0xAA, 0x06, 0x00, 0x00, 0xB0, 0x03, 0x1C, 0x02, 0xEF, 0x55] ``` - `0xEF` 是校验和值,计算方式为 `0xFF - (0x00 + 0x00 + 0xB0 + 0x03 + 0x1C + 0x02)`。 - `0xAA` 和 `0x55` 分别作为帧头和帧尾。 #### 示例代码 以下是 Python 示例代码,用于生成上述 RS485 数据帧: ```python def generate_rs485_frame(hid_data): frame_header = 0xAA frame_footer = 0x55 data_length = len(hid_data) checksum = 0xFF - sum(hid_data) & 0xFF rs485_frame = [frame_header, data_length] + hid_data + [checksum, frame_footer] return rs485_frame # 鼠标在 1920x1080 显示器中央位置的 HID 数据 hid_mouse_data = [0x00, 0x00, 0xB0, 0x03, 0x1C, 0x02] # 生成 RS485 数据帧 rs485_frame = generate_rs485_frame(hid_mouse_data) print("RS485 数据帧:", [hex(byte) for byte in rs485_frame]) ``` 运行上述代码将输出完整的 RS485 数据帧。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值