基本完成主控程序开发

This commit is contained in:
2024-05-09 18:16:16 +08:00
parent f1d5c4bd82
commit e1fcde04a4
4 changed files with 24 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -641,12 +641,34 @@ image::doc_attachments/2024-05-09T02-56-47-839Z.png[生成的静态库参数]
==== 基于 Modbus 总线协议的程序设计 ==== 基于 Modbus 总线协议的程序设计
Modbus 是一种广泛使用的串行通信协议,由 Modicon 公司(现为施耐德电气 Schneider Electric在 1979 年开发主要用于可编程逻辑控制器PLC之间的通信。如今它已经成为工业电子设备之间连接的标准协议之一。Modbus 协议的主要特点包括免费、易于部署和维护、支持多种电气接口和传输介质能够在各种环境中实现可靠的通信。Modbus 协议基于主从架构其中一个设备作为主节点其他设备作为从节点。主节点负责启动命令而从节点则响应并执行相应的操作。Modbus 的数据模型基于四个基本表离散量输入、线圈、输入寄存器和保持寄存器允许在主从节点之间读写大量的数据项。此外Modbus 还支持多种功能码用于执行各种操作如读取和写入寄存器、读取和写入线圈等。Modbus 协议支持多种传输方式,包括串口传输和以太网传输(如 Modbus TCP。Modbus 协议凭借其简单性、开放性和易实施性在工业领域得到了广泛的应用。无论是数据采集与监视控制系统SCADA还是远程终端控制系统RTUModbus 都能够提供高效、可靠的通信解决方案。
本设计中仅使用 MODBUS 传输检测的状态结果。状态值均按 16 进制存储,这样协议上只需要实现 03 读指令对于向本机地址发送的未定义的指令可直接返回错误帧。03 读指令的请求帧格式如图所示。
image::doc_attachments/2024-05-09T08-35-32-683Z.png[03 读寄存器指令 - 主机请求]
03 读指令的响应帧格式如图所示。
image::doc_attachments/2024-05-09T08-42-58-805Z.png[03 读寄存器指令 - 从机响应]
在程序实现上,本设计选择 MODBUS-RTU 的报文格式,即串口模式传输二进制数据,主要需要控制的外设为串口设备。由于前述硬件设计中已采用自动换向电路,所以不需要手动控制 485 收发器的读写方向。
在报文解析上,采用`串口中断 + 环形缓冲区 + 状态机读取` 的方式接收并解析报文。当每接收到一个字节后均会产生中断,在中断中将接收到的数据放入环形缓冲区中。环形缓冲区的大小设置为理论可能最大帧长的 2 倍,确保在从机处理缓慢导致缓冲区溢出后,仍能保证缓冲区存在一帧有效内容,减少通信失败次数。报文的解析过程在主循环中进行。由于直接采用裸机编程,无法像在使用实时操作系统 (RTOS) 中新开阻塞线程等待报文,所以需要使用状态机的方式,如果未接收到的报文程度不足则保存当前状态,等待缓冲区长度足够后再进行解析。其中 CRC 校验使用查表法或者使用硬件 CRC 校验模块,以减少报文完整性校验消耗的时间。
==== 设备间数据交换程序设计 ==== 设备间数据交换程序设计
由于本设计中数据处理和蓝牙上传输分别由两个主控完成,所以需要实现一种设备间数据交换协议,实现蓝牙设备从数据处理主控获取数据并发送的功能。根据使用场景,由于主要设计仅传送推理结果(即运行状态信息),总体数据量不大,并且通信间隔可以较高且为点对点传输,对于通信线路负载和速率要求不高。为了提高通信稳定性,选择了可以由主机启动的 IIC 作为数据交换协议的底层实现方式。该方式在通信中由主机时钟线同步,相比异步的串口通信稳定性稍强。
由于 IIC 协议的特殊性,时钟线由主机控制,从机无法产生突发通信。所以程序上采用主机轮询的方式,主机发送查询指令,从机应答,期间均通过主机产生的时钟边沿同步。
该交换协议不封装上层数据格式,直接使用传统的 IIC 读写寄存器格式,写入和读取每次均为 1 字节 (8 bits)。读写协议如下图示意。
image::doc_attachments/2024-05-09T04-59-40-361Z.png[IIC 读写示意]
其中,第一个字节指定从机地址和读写方向。高七位 (7:1) 为从机地址,低位为数据方向,分别表示读/写。第二个字节为寄存器地址,对于本设计中,为可供读写的变量值的映射,当主机指令读写该寄存器地址时,即在代码逻辑中读取或者写入该寄存器地址所代表的变量值。第三个字节为数据值,长度为固定 1 字节。这样每次指令只读取或者写入 1 字节长度的数据。例如对于温度测量值,在数据处理主控设备中以单精度浮点类型 (float) 存储,读取该值需要发送 4 次指令。
=== 基于 MEMS 和 CNN 的振动筛故障检测设备蓝牙设备程序开发 === 基于 MEMS 和 CNN 的振动筛故障检测设备蓝牙设备程序开发
==== 设备间数据交换程序设计
==== BLE 广播模式程序设计 ==== BLE 广播模式程序设计
==== BLE MESH 模式程序设计 (optional) ==== BLE MESH 模式程序设计 (optional)