feat: 新增激光定时关闭与姿态角持续输出测试功能,编码转UTF-8

1. 激光定时自动关闭:默认10分钟,laser on启动计时,超时自动关并上报
2. laser time <min>可配置定时分钟数,0=关闭定时
3. att on/off持续输出姿态角(Pitch/Roll/Yaw),不注册不低功耗
4. 20个源文件从GB2312编码转为UTF-8 with BOM
This commit is contained in:
2026-07-20 17:04:48 +08:00
parent 70758b1c06
commit 72844ff821
20 changed files with 1388 additions and 1260 deletions
+124 -122
View File
@@ -1,13 +1,13 @@
/* 传感器通用通讯协议V1.0*/
/* 传感器通用通讯协议V1.0*/
#ifndef __SGCP_H
#define __SGCP_H
#include "bsp.h"
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
typedef struct {//网关与主设备固定帧
typedef struct {//网关与主设备固定帧
uint8_t Header;
uint8_t GWAddr[6];
uint8_t MDAddr[6];
@@ -15,56 +15,56 @@ typedef struct {//
uint16_t PayloadLen;
}__attribute__ ((packed))GatewayFrameHeader_t,*GatewayFrameHeader;
typedef struct {//主设备与子设备固定帧
typedef struct {//主设备与子设备固定帧
uint8_t Header;
uint8_t Addr;
uint8_t Cmd;
uint8_t PayloadLen;
}__attribute__ ((packed))SubsetFrameHeader_t,*SubsetFrameHeader;
typedef struct {//内部指令固定帧
typedef struct {//内部指令固定帧
uint8_t Header;
uint8_t MAC[6];
uint8_t Cmd;
uint8_t PayloadLen;
}__attribute__ ((packed))InsideFrameHeader_t,*InsideFrameHeader;
typedef struct {//主设备固定包头
uint8_t BatLevel; //电池电量
int8_t RSSI; //信号强度
int8_t Nsr; //信噪比
typedef struct {//主设备固定包头
uint8_t BatLevel; //电池电量
int8_t RSSI; //信号强度
int8_t Nsr; //信噪比
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
typedef struct {//0x0006 三维连续变形
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
typedef struct {//0x0006 三维连续变形
int16_t PitchAngle; //俯仰角 (范围±1800)单位0.1°
int16_t RollAngle; //横滚角 (范围±1800)单位0.1°
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
}__attribute__ ((packed))ContDefor3D_T,*ContDefor3DDp;
typedef struct {//0x0007 通讯单元
typedef struct {//0x0007 通讯单元
MasterDev_T MasterDev;
}__attribute__ ((packed))CommUnit_T,*CommUnitDp;
typedef struct {//0x0008 三维应力
int16_t PitchAngle; //俯仰角(范围±900)单位0.1°
int16_t RollAngle; //横滚角(范围±900)单位0.1°
int16_t YawAngle; //偏航角(范围0~3600)单位0.1°
int32_t Strain1; //X轴应力值(范围±10MPa,单位Pa)
int32_t Strain2; //Y轴应力值(范围±10MPa,单位Pa)
int32_t Strain3; //Z轴应力值(范围±10MPa,单位Pa)
typedef struct {//0x0008 三维应力
int16_t PitchAngle; //俯仰角(范围±900)单位0.1°
int16_t RollAngle; //横滚角(范围±900)单位0.1°
int16_t YawAngle; //偏航角(范围0~3600)单位0.1°
int32_t Strain1; //X轴应力值(范围±10MPa,单位Pa)
int32_t Strain2; //Y轴应力值(范围±10MPa,单位Pa)
int32_t Strain3; //Z轴应力值(范围±10MPa,单位Pa)
}__attribute__ ((packed))Force3D_T,*Force3DDp;
typedef struct {//0x0009 激光示踪
typedef struct {//0x0009 激光示踪
MasterDev_T MasterDev;
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
int16_t PitchAngle; //俯仰角 (范围±900)单位0.1°
int16_t RollAngle; //横滚角 (范围±900)单位0.1°
int16_t YawAngle; //偏航角 (范围0~3600)单位0.1°
}__attribute__ ((packed))LaserTracing_T,*LaserTracingDp;
typedef struct {//0x000E 裂缝仪
int16_t XwiseDist; //横向位移量(范围0~150mm
int16_t LgthwysDist; //纵向位移距离(范围0~150mm)
int16_t RotationDist; //旋转位移距离(范围0~150mm)
typedef struct {//0x000E 裂缝仪
int16_t XwiseDist; //横向位移量(范围0~150mm
int16_t LgthwysDist; //纵向位移距离(范围0~150mm)
int16_t RotationDist; //旋转位移距离(范围0~150mm)
}__attribute__ ((packed))Crack_T,*CrackDp;
typedef struct {
@@ -73,9 +73,9 @@ typedef struct {
Force3D_T Force3D;
Crack_T Crack;
LaserTracing_T LaserTracing;
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
/*接收子设备数据状态机*/
/*接收子设备数据状态机*/
typedef enum {
SUB_STATUS_IDLE,
SUB_STATUS_BROADCAST_CALI,
@@ -89,7 +89,7 @@ typedef enum {
SUB_STATUS_BROADCAST_SYNC_TIME,
}SubStatus_m;
/*接收网关数据状态机*/
/*接收网关数据状态机*/
typedef enum {
GW_STATUS_IDLE,
GW_STATUS_WAIT_SUBIDLE,
@@ -99,13 +99,13 @@ typedef enum {
GW_STATUS_READ_SENSOR,
GW_STATUS_SET_COL_TIME,
GW_STATUS_SYNC_TIME,
GW_STATUS_UPLOAD_SENSOR,//主动上报模式时会使用该状态
GW_STATUS_WAIT_UPLOAD,//主动上报模式时会使用该状态
GW_STATUS_LASER_STARES,//激光状态回应
GW_STATUS_UPLOAD_SENSOR,//主动上报模式时会使用该状态
GW_STATUS_WAIT_UPLOAD,//主动上报模式时会使用该状态
GW_STATUS_LASER_STARES,//激光状态回应
GW_STATUS_SIGNAL,
GW_STATUS_WAIT_SIGNAL,
}GWStatus_m;
/*接收主设备数据状态机*/
/*接收主设备数据状态机*/
typedef enum {
MAS_STATUS_IDLE,
MAS_STATUS_CALI,
@@ -114,81 +114,81 @@ typedef enum {
MAS_STATUS_SET_COL_TIME,
MAS_STATUS_SYNC_TIME,
}MasStatus_m;
/*内部指令数据状态机*/
/*内部指令数据状态机*/
typedef enum {
IN_STATUS_IDLE,
IN_STATUS_UPDATE,
IN_STATUS_ALTER_485ADDR,
}InStatus_m;
/*网关到主设备命令集*/
/*网关到主设备命令集*/
typedef enum {
GWTOMD_CMD_LOGIN = 0x00, //0x00,设备注册
GWTOMD_CMD_CALI = 0x01, //0x01, 校准指令
GWTOMD_CMD_READ_UPLOAD_SENSOR = 0x02, //0x02,读取数据指令or上传数据指令
GWTOMD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
GWTOMD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
GWTOMD_CMD_SET_LASER = 0x08,//打开or关闭激光
GWTOMD_CMD_LOGIN = 0x00, //0x00,设备注册
GWTOMD_CMD_CALI = 0x01, //0x01, 校准指令
GWTOMD_CMD_READ_UPLOAD_SENSOR = 0x02, //0x02,读取数据指令or上传数据指令
GWTOMD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
GWTOMD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
GWTOMD_CMD_SET_LASER = 0x08,//打开or关闭激光
GWTOMD_CMD_SIGNAL = 0x09,
}GWTOMD_CMD_M;
/*主设备到子设备命令集*/
/*主设备到子设备命令集*/
typedef enum {
MDTOSD_CMD_CALI = 0x01, //0x01, 校准指令
MDTOSD_CMD_READ_DATA = 0x02, //0x02,读取数据指令
MDTOSD_CMD_INQUIRE = 0x03, //0x03, 设备查询指令
MDTOSD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
MDTOSD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
MDTOSD_CMD_CALI = 0x01, //0x01, 校准指令
MDTOSD_CMD_READ_DATA = 0x02, //0x02,读取数据指令
MDTOSD_CMD_INQUIRE = 0x03, //0x03, 设备查询指令
MDTOSD_CMD_SET_COL_TIME = 0x05, //0x05,设置采集时间间隔
MDTOSD_CMD_SYNC_TIME = 0x06, //0x06,时间同步
}MDTOSD_CMD_M;
/*内部指令命令集*/
/*内部指令命令集*/
typedef enum {
INSIDE_CMD_UPDATE = 0x81, //0x81,升级程序下发请求,由主机发起,从机应答
INSIDE_CMD_ALTER_485ADDR = 0x04, //0x04, 设置设备485地址
INSIDE_CMD_UPDATE = 0x81, //0x81,升级程序下发请求,由主机发起,从机应答
INSIDE_CMD_ALTER_485ADDR = 0x04, //0x04, 设置设备485地址
}INSIDE_CMD_M;
/*设备类型*/
/*设备类型*/
typedef enum {
NUL, //0x0000 空设备
FORCE_6D, //0x0001 六维应力
OSMOTIC_PRESSURE, //0x0002 渗透压
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
DIELECTRIC_MASS, //0x0004 介电质普
_0x0005, //0x0005 保留
CONT_DEFOR_3D, //0x0006 三维连续变形
COMM_UNIT, //0x0007 通讯单元
FORCE_3D, //0x0008 三维应力
LASER_TRACING, //0x0009 激光示踪
_0x000A, //0x000A 保留
_0x000B, //0x000B 保留
_0x000C, //0x000C 保留
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
CRACK_DETECTION, //0x000E 裂缝仪
_0x000F, //0x000F 保留
ATTITUDE_MONITOR, //0x0010 姿态检测
LASER_DISPLACE, //0x0011 激光位移
REBAR_STRESS, //0x0012 钢筋应力
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
SURFACE_STRESS, //0x0014 表面应力
PRESSURE, //0x0015 压力
MICROWAVE_DISPLACE, //0x0016 微波测距
NUL, //0x0000 空设备
FORCE_6D, //0x0001 六维应力
OSMOTIC_PRESSURE, //0x0002 渗透压
ELASTIC_WAVEGUIDE, //0x0003 弹性波导
DIELECTRIC_MASS, //0x0004 介电质普
_0x0005, //0x0005 保留
CONT_DEFOR_3D, //0x0006 三维连续变形
COMM_UNIT, //0x0007 通讯单元
FORCE_3D, //0x0008 三维应力
LASER_TRACING, //0x0009 激光示踪
_0x000A, //0x000A 保留
_0x000B, //0x000B 保留
_0x000C, //0x000C 保留
MULTI_PARAMETER_FUSION, //0x000D 多参数融合
CRACK_DETECTION, //0x000E 裂缝仪
_0x000F, //0x000F 保留
ATTITUDE_MONITOR, //0x0010 姿态检测
LASER_DISPLACE, //0x0011 激光位移
REBAR_STRESS, //0x0012 钢筋应力
ANCHOR_ROD_STRESS, //0x0013 锚杆轴力
SURFACE_STRESS, //0x0014 表面应力
PRESSURE, //0x0015 压力
MICROWAVE_DISPLACE, //0x0016 微波测距
}DEVICE_TYPE_M;
/*通讯方式*/
/*通讯方式*/
typedef enum {
LORA = 0x01, //0x01 LORA通讯
RS485 = 0x02, //0x02 RS485通讯
RS232 = 0x03, //0x03 RS232通讯
CAN = 0x04, //0x04 CAN通讯
CATONE = 0x05, //0x05 _4G通讯
BLE = 0x06, //0x06 BLE通讯
WIFI = 0x07, //0x07 WIFI通讯
UART = 0x08, //0x08 UART通讯
LORA = 0x01, //0x01 LORA通讯
RS485 = 0x02, //0x02 RS485通讯
RS232 = 0x03, //0x03 RS232通讯
CAN = 0x04, //0x04 CAN通讯
CATONE = 0x05, //0x05 _4G通讯
BLE = 0x06, //0x06 BLE通讯
WIFI = 0x07, //0x07 WIFI通讯
UART = 0x08, //0x08 UART通讯
}COMM_WAY_M;
/*设备标志*/
/*设备标志*/
typedef enum {
MASTER = 0x000000, //0x000000 主设备
SUBSET = 0x800000, //0x800000 子设备
MASTER = 0x000000, //0x000000 主设备
SUBSET = 0x800000, //0x800000 子设备
}DEVICE_SIGN_M;
typedef struct {
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
__IO uint16_t rPayLen;
__IO bool HeaderFrame;
__IO uint8_t RxLen;
@@ -196,8 +196,8 @@ typedef struct {
}GWTOMD_Rx_T;
typedef struct {
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
__IO uint8_t rPayLen;
__IO bool HeaderFrame;
__IO uint8_t RxLen;
@@ -215,12 +215,12 @@ typedef struct {
GWTOMD_Rx_T GWRS485Rx;
uint8_t GatewayBuffLen;
uint8_t GatewayBuff[256];
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
MDTOSD_Rx_T SDRS485Rx;
uint8_t SubsetBuffLen;
uint8_t SubsetBuff[256];
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
uint8_t InsidePayLen;
uint8_t InsideBuffLen;
@@ -236,45 +236,47 @@ typedef struct {
DeviceData_T DevData;
bool SubsetCaliOk; //子设备校准标志位
bool MasterCaliOk; //主设备标校标志位
bool SubsetCaliOk; //子设备校准标志位
bool MasterCaliOk; //主设备标校标志位
uint8_t ReadDataAdd; //获取数据地址
uint16_t DeviceDataLen; //在线设备采集到的数据长度总和
uint8_t DeviceDataBuff[512]; //在线设备采集到的数据缓存(主设备的数据永远排在最前面)
uint8_t DeviceData[512]; //在线设备采集到的数据(主设备的数据永远排在最前面)
bool SubsetReadDataOk; //子设备读取数据成功标志位
bool DeviceReadDataOk; //设备读取数据完成标志位
uint8_t ReadDataAdd; //获取数据地址
uint16_t DeviceDataLen; //在线设备采集到的数据长度总和
uint8_t DeviceDataBuff[512]; //在线设备采集到的数据缓存(主设备的数据永远排在最前面)
uint8_t DeviceData[512]; //在线设备采集到的数据(主设备的数据永远排在最前面)
bool SubsetReadDataOk; //子设备读取数据成功标志位
bool DeviceReadDataOk; //设备读取数据完成标志位
uint8_t DeviceN; //在线设备数量(最多32个子设备,1个主设备)
uint8_t Dev485Addr; //在线设备485地址(最多32个子设备,1个主设备)
uint8_t Dev485Addrs[16]; //在线设备485地址缓存,0位为0x00广播地址
uint8_t DeviceMAC[16][6]; //在线设备的唯一MAC地址(主设备的MAC永远排在最前面)
bool SubsetMACOk; //在线子设备MAC获取成功标志位
bool DeviceMACOk; //在线设备获取完成标志位
uint8_t DeviceN; //在线设备数量(最多32个子设备,1个主设备)
uint8_t Dev485Addr; //在线设备485地址(最多32个子设备,1个主设备)
uint8_t Dev485Addrs[16]; //在线设备485地址缓存,0位为0x00广播地址
uint8_t DeviceMAC[16][6]; //在线设备的唯一MAC地址(主设备的MAC永远排在最前面)
bool SubsetMACOk; //在线子设备MAC获取成功标志位
bool DeviceMACOk; //在线设备获取完成标志位
bool CollTimeSetOk; //采集时间设置成功标志位
uint8_t CollTimeAdd; //设置采集时间地址
bool CollTimeSetOk; //采集时间设置成功标志位
uint8_t CollTimeAdd; //设置采集时间地址
bool SyncTimeOk; //时间同步成功标志位
uint8_t SyncTimeAdd; //时间同步设备地址
bool SyncTimeOk; //时间同步成功标志位
uint8_t SyncTimeAdd; //时间同步设备地址
bool BroadCmd; //广播命令
bool BroadCmd; //广播命令
bool LoginOk; //注册成功标志位
bool LoginOk; //注册成功标志位
bool LoginMess;
bool UploadOk; //上传成功标志位
bool UploadOk; //上传成功标志位
bool UploadMess;
bool Gateway_IRQ_Status; //网关接收中断
bool Subset_IRQ_Status; //子设备接收中断
bool TimingAcquisition; //采集传感器数据
bool Gateway_IRQ_Status; //网关接收中断
bool Subset_IRQ_Status; //子设备接收中断
bool TimingAcquisition; //采集传感器数据
/**激光示踪私有**/
bool LaserOnOff; //打开与关闭激光标志位
/**激光示踪私有**/
bool LaserOnOff; //打开与关闭激光标志位
int8_t SignalRSSI;
int8_t SignalSNR;
uint8_t LaserTimerMinutes; //激光定时关闭分钟数
uint16_t LaserTimerCount; //激光定时计数(RTC 30s)
}SGCP_t;
extern SGCP_t SGCP;