2026-04-23 14:02:03 +08:00
|
|
|
|
/* 传感器通用通讯协议V1.0*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __SGCP_H
|
|
|
|
|
|
#define __SGCP_H
|
|
|
|
|
|
#include "bsp.h"
|
|
|
|
|
|
|
2026-05-20 13:41:07 +08:00
|
|
|
|
#define WORK_MODE 1 //工作模式选择,0、本机为查询模式,1、本机为上报模式(低功耗)
|
2026-05-11 10:10:13 +08:00
|
|
|
|
#define SGCP_SELECT 1 //协议选择,0、本机为单个主设备接多个子设备,1、本机为单个主设备不接子设备,2、本机为单个子设备
|
2026-04-23 14:02:03 +08:00
|
|
|
|
|
|
|
|
|
|
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; //俯仰角 (范围±900)单位0.1°
|
|
|
|
|
|
int16_t RollAngle; //横滚角 (范围±900)单位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,//激光状态回应
|
2026-07-14 10:13:17 +08:00
|
|
|
|
GW_STATUS_SIGNAL,
|
|
|
|
|
|
GW_STATUS_WAIT_SIGNAL,
|
2026-04-23 14:02:03 +08:00
|
|
|
|
}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关闭激光
|
2026-07-14 10:13:17 +08:00
|
|
|
|
GWTOMD_CMD_SIGNAL = 0x09,
|
2026-04-23 14:02:03 +08:00
|
|
|
|
}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通讯
|
2026-05-20 13:41:07 +08:00
|
|
|
|
CATONE = 0x05, //0x05 _4G通讯
|
2026-04-23 14:02:03 +08:00
|
|
|
|
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; //打开与关闭激光标志位
|
2026-07-14 10:13:17 +08:00
|
|
|
|
int8_t SignalRSSI;
|
|
|
|
|
|
int8_t SignalSNR;
|
2026-04-23 14:02:03 +08:00
|
|
|
|
}SGCP_t;
|
|
|
|
|
|
extern SGCP_t SGCP;
|
|
|
|
|
|
|
|
|
|
|
|
void SGCP1mSRoutine(void);
|
|
|
|
|
|
|
|
|
|
|
|
void GwRevLoopHandler(void);
|
|
|
|
|
|
void MasRevLoopHandler(void);
|
|
|
|
|
|
void SubRevLoopHandler(void);
|
|
|
|
|
|
void InRevLoopHandler(void);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|