Files
LaserTracing/source/inc/SGCP.h
T
YuanHongbin 72844ff821 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
2026-07-20 17:04:48 +08:00

292 lines
9.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 传感器通用通讯协议V1.0*/
#ifndef __SGCP_H
#define __SGCP_H
#include "bsp.h"
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
typedef struct {//网关与主设备固定帧
uint8_t Header;
uint8_t GWAddr[6];
uint8_t MDAddr[6];
uint8_t Cmd;
uint16_t PayloadLen;
}__attribute__ ((packed))GatewayFrameHeader_t,*GatewayFrameHeader;
typedef struct {//主设备与子设备固定帧
uint8_t Header;
uint8_t Addr;
uint8_t Cmd;
uint8_t PayloadLen;
}__attribute__ ((packed))SubsetFrameHeader_t,*SubsetFrameHeader;
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; //信噪比
}__attribute__ ((packed))MasterDev_T,*MasterDevDp;
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 通讯单元
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)
}__attribute__ ((packed))Force3D_T,*Force3DDp;
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°
}__attribute__ ((packed))LaserTracing_T,*LaserTracingDp;
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 {
ContDefor3D_T ContDefor3D;
CommUnit_T CommUnit;
Force3D_T Force3D;
Crack_T Crack;
LaserTracing_T LaserTracing;
}__attribute__ ((packed))DeviceData_T,*DeviceDp; //设备数据
/*接收子设备数据状态机*/
typedef enum {
SUB_STATUS_IDLE,
SUB_STATUS_BROADCAST_CALI,
SUB_STATUS_READMASTER_DATA,
SUB_STATUS_READSUBSET_DATA,
SUB_STATUS_WAIT_READSUBSET,
SUB_STATUS_MASTER_QUERY,
SUB_STATUS_SUBSET_QUERY,
SUB_STATUS_WAIT_SUBSET_QUERY,
SUB_STATUS_BROADCAST_SET_COLTIME,
SUB_STATUS_BROADCAST_SYNC_TIME,
}SubStatus_m;
/*接收网关数据状态机*/
typedef enum {
GW_STATUS_IDLE,
GW_STATUS_WAIT_SUBIDLE,
GW_STATUS_LOGIN,
GW_STATUS_WAIT_LOGIN,
GW_STATUS_CALI,
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_SIGNAL,
GW_STATUS_WAIT_SIGNAL,
}GWStatus_m;
/*接收主设备数据状态机*/
typedef enum {
MAS_STATUS_IDLE,
MAS_STATUS_CALI,
MAS_STATUS_READ_SENSOR,
MAS_STATUS_DEVICE_INQUIRE,
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_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_M;
/*内部指令命令集*/
typedef enum {
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 微波测距
}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通讯
}COMM_WAY_M;
/*设备标志*/
typedef enum {
MASTER = 0x000000, //0x000000 主设备
SUBSET = 0x800000, //0x800000 子设备
}DEVICE_SIGN_M;
typedef struct {
__IO GWTOMD_CMD_M rCmdGWToMD; //网关下发命令
__IO GWTOMD_CMD_M sCmdMDToGW; //主设备返回命令
__IO uint16_t rPayLen;
__IO bool HeaderFrame;
__IO uint8_t RxLen;
uint8_t RxBuff[256];
}GWTOMD_Rx_T;
typedef struct {
__IO MDTOSD_CMD_M rCmdSDToMD; //子设备返回命令
__IO MDTOSD_CMD_M sCmdMDToSD; //主设备下发命令
__IO uint8_t rPayLen;
__IO bool HeaderFrame;
__IO uint8_t RxLen;
uint8_t RxBuff[256];
}MDTOSD_Rx_T;
typedef struct {
uint32_t LpUart0Delay1mSCnt;
uint32_t LoraDelay1mSCnt;
uint32_t Uart1Delay1mSCnt;
uint32_t GW1mSDelayCnt;
uint32_t SD1mSDelayCnt;
uint32_t In1mSDelayCnt;
GWTOMD_Rx_T GWRS485Rx;
uint8_t GatewayBuffLen;
uint8_t GatewayBuff[256];
uint8_t GatewayRevTimeoutCnt; //网关串口接收超时计数
MDTOSD_Rx_T SDRS485Rx;
uint8_t SubsetBuffLen;
uint8_t SubsetBuff[256];
uint8_t SubsetRevTimeoutCnt; //子设备串口接收超时计数
uint8_t InsidePayLen;
uint8_t InsideBuffLen;
uint8_t InsideBuff[256];
uint8_t InsidePay[256];
SubStatus_m SubStatus;
SubStatus_m NextSubStatus;
GWStatus_m GWStatus;
GWStatus_m NextGWStatus;
MasStatus_m MasStatus;
InStatus_m InStatus;
DeviceData_T DevData;
bool SubsetCaliOk; //子设备校准标志位
bool MasterCaliOk; //主设备标校标志位
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; //在线设备获取完成标志位
bool CollTimeSetOk; //采集时间设置成功标志位
uint8_t CollTimeAdd; //设置采集时间地址
bool SyncTimeOk; //时间同步成功标志位
uint8_t SyncTimeAdd; //时间同步设备地址
bool BroadCmd; //广播命令
bool LoginOk; //注册成功标志位
bool LoginMess;
bool UploadOk; //上传成功标志位
bool UploadMess;
bool Gateway_IRQ_Status; //网关接收中断
bool Subset_IRQ_Status; //子设备接收中断
bool TimingAcquisition; //采集传感器数据
/**激光示踪私有**/
bool LaserOnOff; //打开与关闭激光标志位
int8_t SignalRSSI;
int8_t SignalSNR;
uint8_t LaserTimerMinutes; //激光定时关闭分钟数
uint16_t LaserTimerCount; //激光定时计数(RTC 30s)
}SGCP_t;
extern SGCP_t SGCP;
void SGCP1mSRoutine(void);
void GwRevLoopHandler(void);
void MasRevLoopHandler(void);
void SubRevLoopHandler(void);
void InRevLoopHandler(void);
#endif