Files

1296 lines
45 KiB
C
Raw Permalink 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.
/*
* AttCtrlMain.h
* Created: 2022/11/4 11:02:40
* Author: wangzk zhengmengxing
*/
#ifndef _ATTCTRLMAIN_H_
#define _ATTCTRLMAIN_H_
#include "AttMath.h"
#include "..\PrjCommon\CommonDef.h"
#include "..\PrjCommon\BlockRing.h"
#include "..\PrjCommon\DataStorDefine.h"
#include "..\PrjCommon\ModTask.h"
#include "..\PrjCommon\DevDefine.h"
#include "..\PrjCommon\DevDrvs.h"
#include "..\PrjTaskMng\TaskMng.h"
#include "..\PrjTelCtrlMng\TelCtrlMng.h"
#include "..\PrjOrbitMng\OrbitMng.h"
#include "..\PrjCollectMng\CollectMng.h"
#include "..\PrjSadaCtrlMng\SadaMng.h"
#include "..\PrjCommon\TypeDef.h"
//姿控数据地址分配
#define ATTCLT_DATA1_ADDR (ATTCTL_BASE_ADDR )
#define SIZE_RECVDATA_BUF1 (0x2000) /*数据区8k*/
#define ATTCLT_DATA2_ADDR (ATTCLT_DATA1_ADDR + SIZE_RECVDATA_BUF1) /*控制参数区*/
#define SIZE_RECVDATA_BUF2 (0x1000) /* 数据区4k */
#define ATTCLT_DATA3_ADDR (ATTCLT_DATA2_ADDR + SIZE_RECVDATA_BUF2) /*4k轨道控制数据注数区*/
#define SIZE_RECVDATA_BUF3 (0x1000) /*数据区4k*/
#define ATTCLT_DATA4_ADDR (ATTCLT_DATA3_ADDR + SIZE_RECVDATA_BUF3) /*接收来自遥控注入的目标定向数据,2k字节*/
#define SIZE_RECVDATA_BUF4 (0x800) /*数据区2k*/
#define ATTCLT_DATA5_ADDR (ATTCLT_DATA4_ADDR+ SIZE_RECVDATA_BUF4) /*接收来自遥控注入的轨道数据,4k字节*/
#define SIZE_RECVDATA_BUF5 (0x1000) /*数据区4k*/
#define ATTCLT_DATA6_ADDR (ATTCLT_DATA5_ADDR + SIZE_RECVDATA_BUF5) /*目标定向数据,2k字节*/
#define SIZE_RECVDATA_BUF6 (0x800) /*数据区2k*/
/***********************************遥控指令注数***********************************/
//软指令
#define ATT_SAFEMODE_SAFE1 (0xC600) //整星安全模式1
#define ATT_SAFEMODE_SAFE2 (0xC601) //整星安全模式2
#define ATT_SAFEMODE_SAFE3 (0xC602) //整星安全模式3
//模式控制注数区
#define ATT_CMDMODE_MODSUNCAP (0x3600) //进入速率阻尼
#define ATT_CMDMODE_WhlTOSUN (0x3601) //进入轮控对日定向
#define ATT_CMDMODE_MagTOSUN (0x3602) //磁控对日定向
#define ATT_CMDMODE_ONLTOEARTH (0x3603) //对地定向*/
#define ATT_CMDMODE_WHEELTOEARTH (0x3604) //稳态对地*/
#define ATT_CMDMODE_UNCTL (0x3605) //无控模式*/
#define ATT_WORKMODE_ORBITCTLPRE (0xA606) //轨控前调姿*/
#define ATT_WORKMODE_ORBITCTL (0xA607) //轨控*/
#define ATT_WORKMODE_ATTAJUST (0xA611) //定向调姿*/
#define ATT_WORKMODE_ONLTOTAR (0xA612) //目标定向*/
#define ATT_CMDMODE_ORBITCTL (0xC304) //轨道控制数据上注*/
#define ATT_CMDMODE_ONLTOTAR (0xC303) //对目标定向数据上注*/
#define ATT_CMDMODE_ORBITCTLREQ (0x3609) //轨控异步包请求
//准禁开关
#define ATT_CMDMODE_MODECHANG (0x360A) //允许工作模式自主切换
#define ATT_CMDMODE_NOMODECHANG (0x360B) //禁止工作模式自主切换
#define ATT_CMDMODE_AllowCThr (0x360C) //允许自主单机间互校验
#define ATT_CMDMODE_NOAllowCThr (0x360D) //禁止自主单机间互校验
#define ATT_CMDOBITRESET (0x360E) //清轨控包
#define ATT_CMDATTRESET (0x360F) //清目标定向包
#define ATT_CMDMODE_ATTLOSE (0x3618) //姿态基准丢失判断开指令
#define ATT_CMDMODE_NOATTLOSE (0x3619) //姿态基准丢失判断关指令
#define ATT_CMDMODE_ATTEx (0x361A) //姿态超差判断开指令
#define ATT_CMDMODE_NOATTEx (0x361B) //姿态超差判断关指令
#define ATT_CMDMODE_AttUnSta (0x361C) //姿态不稳定判断开指令
#define ATT_CMDMODE_NOAttUnSta (0x361D) //姿态不稳定判断关指令
//参数指令
#define ATT_CMDCODE_MODPARAM (0x361E) //模式切换相关参数更改
//模拟太敏相关注数
#define ATT_CMDCODE_ASS (0x361F) //模拟太敏故障诊断参数(电压)
//单机系统级互校
#define ATT_CMDCROSSCHECKTHR (0x3620)
//单机异常状态
#define ATT_CMDCROSSERR (0x3621)
//单机使用状态
#define ATT_CMDCROSSUSE (0x3622)
//单机优先级状态
#define ATT_CMDCROSS (0x3623)
//单机重构
#define ATT_CMDCREUSE (0x3624)
//单机故障诊断条件
#define ATT_CMDCROSSDIG (0x3625)
//PPU故障诊断条件
#define ATT_CMDCPPUDIG (0x3626)
//单机故障诊断时间
#define ATT_CMDCDIGTIME (0x3627)
//基准丢失故障诊断条件
#define ATT_CMDCDIGLOSE (0x3628)
//超差故障诊断条件
#define ATT_CMDCDIGEX (0x3629)
//姿态不稳定故障诊断条件
#define ATT_CMDCDIGNOSTATE (0x362A)
//配平轮转速力矩阈值
#define ATT_CMDWHLSLIMT (0x362B)
//星敏安装矩阵注入
#define ATT_CMDCODE_SSMAT (0x362C)
//太敏安装矩阵注入
#define ATT_CMDCODE_ASSMAT (0x362D)
//磁强计安装矩阵注入
#define ATT_CMDCODE_MAGMAT (0x362E)
//陀螺安装矩阵注入
#define ATT_CMDCODE_GyroMAT (0x362F)
//反作用轮安装矩阵注入
#define ATT_CMDCODE_WHLMAT (0x3630)
//磁力矩器安装矩阵注入
#define ATT_CMDCODE_MTMAT (0x3631)
//磁阻尼控制器注入
#define ATT_CMDCODE_DMPPARA (0x3632)
//磁控对日控制器参数注入
#define ATT_CMDCODE_TOSUNPARA (0x3633)
//磁卸载控制器参数注入
#define ATT_CMDCODE_MTCTRLPARA (0x3634)
//飞轮PD控制器参数注入
#define ATT_CMDCODE_PDCTRLPARA (0x3635)
//飞轮PID控制器参数注入
#define ATT_CMDCODE_PIDCTRLPARA (0x3636)
//陀螺零偏注入
#define ATT_CMDCODE_GyroBIAS (0x3637)
//陀螺标度因数注入
#define ATT_CMDCODE_GyroPH (0x3638)
//卫星进出影判断值参数注入
#define ATT_CMDCODE_BetaAng (0x3639)
//飞轮ID选择参数注入
#define ATT_CMDCODE_WhlID (0x363A)
//磁力矩器分配-磁矩限值
#define ATT_CMDCODE_MTCTRL (0x363B)
//磁强计标定系数
#define ATT_CMDCODE_MTBD (0x363C)
//卫星推力器产生本体系加速度
#define ATT_CMDMODE_PPUAB (0x363D)
//PPU标定系数
#define ATT_CMDCODE_PPUBD (0x363E)
//陀螺积分限幅注入
#define ATT_CMDCODE_GyroINTTLimt (0x363F)
//安全模式PPU使用状态
#define ATT_CMDCODE_SafePPU (0x3640)
//飞轮偏置动量
#define ATT_CMDCODE_WHLCENT (0x3641)
//在轨编程宏预留1
#define ATT_CMDCODE_RESET1 (0x3642)
//在轨编程宏预留2
#define ATT_CMDCODE_RESET2 (0x3643)
//在轨编程宏预留3
#define ATT_CMDCODE_RESET3 (0x3644)
//在轨编程宏预留4
#define ATT_CMDCODE_RESET4 (0x3645)
//在轨编程宏预留5
#define ATT_CMDCODE_RESET5 (0x3646)
//在轨编程宏预留6
#define ATT_CMDCODE_RESET6 (0x3647)
//在轨编程宏预留7
#define ATT_CMDCODE_RESET7 (0x3648)
//在轨编程宏预留8
#define ATT_CMDCODE_RESET8 (0x3649)
//在轨编程宏预留9
#define ATT_CMDCODE_RESET9 (0x364A)
//在轨编程宏预留10
#define ATT_CMDCODE_RESET10 (0x364B)
/***************单机配置宏定义*****************/
//优先级定义
#define PriorHig (0xAA) //优先级高
#define PriorMid (0x55) //优先级中
#define PriorLow (0x00) //优先级低
//说明:磁力矩器数据结构体
#define MT_NUM (4) //磁力矩器个数
#define MT_ON (0x55)
#define MT_OFF (0x00)
#define MT_DIRECT_POS (0x55) //Positive正向
#define MT_DIRECT_NEG (0xAA) //negative负向
//说明:星敏遥测数据结构体
#define STAR_NUM (3) //星敏总个数
#define STARAB_HEAD (0x8AA1)
#define STARAB_ID (0x0000)
#define STARAB_LEN (64)
#define STARC_HEAD (0xEB50)
#define STARC_ID (0x0022)
#define STARC_LEN (53)
//说明:陀螺数据结构体
//A:华芯 B:华芯 C:开拓 //20230810
#define GYRO_NUM (3) //陀螺单机数量
#define GYRO_DATA_HEADA (0xEB90) //陀螺A遥测422数据包头
#define GYRO_DATA_LENA (0x28) //陀螺A遥测422数据包长(总包长)
#define GYRO_DATA_HEADC (0xEB90) //陀螺C遥测422数据包头
#define GYRO_DATA_LENC (0x1A) //陀螺C遥测422数据包长
#define GYRO_DATA_UNIT (0.000001) //陀螺B角速度量纲
#define GYRO_TMPER_UNIT (0.008) //陀螺B温度量纲
//说明:模拟太敏数据结构体
#define ASS_NUM (6) //ASS单机数量
///说明:磁强计数据结构体
#define MAG_NUM (2) //磁强计总个数
#define MAG_Vect_A (0x55) //选择磁强计A
#define MAG_Vect_B (0xAA) //选择磁强计B
//说明:飞轮数据结构体
#define WHEEL_NUM (4) //飞轮总个数
#define WHL_CMD_CODE_REQ (0xD9) //飞轮单机遥测请求指令码
#define WHL_CMD_CODE_CURR (0xCA) //飞轮单机控制指令码:电流控制指令码
#define WHL_CMD_CODE_RATE (0xD4) //飞轮单机控制指令码:转数控制指令码
#define WHL_CMD_CODE_TRQ (0xEA) //飞轮单机控制指令码:力矩控制指令码
#define WHL_DATA_END (0xAA55) //飞轮遥测422数据包尾中科
#define WHL_DATA_LEN (0x23) //中辰新威飞轮遥测422数据包长
//说明PPU数据结构体
#define PPU_CMD_LEN (0x1E) //PPU单机遥测请求指令码
/***************单机互校验宏定义*****************/
#define NO_CC (0x00) //未参加互校验(0)
#define CC_CORRECT (0x55) //互校验成功(1)
#define CC_ERROR (0xAA) //互校验异常(2)
#define CC_UNCERTAIN (0xFF) //互校验无法判断(3)
/*******************姿轨控工作模式*******************/
#define ATTMOD_BREAKPRE (0x00) //星箭分离前
#define ATTMOD_NOCOLL (0x11) //碰撞规避模式
#define ATTMOD_RATEDMP (0x22) //速率阻尼
#define ATTMOD_WhlTOSUN (0x33) //轮控对日定向
#define ATTMOD_MagTOSUN (0x44) //磁控对日定向
#define ATTMOD_ONLTOEARTH (0x55) //对地定向
#define ATTMOD_WHEELTOEARTH (0x66) //稳态对地
#define ATTMOD_ATTAJUSTPRE (0x77) //轨控前调姿
#define ATTMOD_ORBITCTL (0x88) //轨道控制
#define ATTMOD_ATTAJUST (0x99) //定向前调姿
#define ATTMOD_ONLTOTAR (0xAA) //对目标定向
#define ATTMOD_UNCTL (0xBB) //无控模式
/***************环境计算*****************/
#define GST_OFFSET (1.7474554283454f) // GST偏移量
#define EATHWE (7.29211514667e-5) // 地球自转角速度
#define GMEARTH (3.986004E14) //引力常数
#define EarthRad (6378040) //地球半径(米)
#define EarthRad2MAG (6371200) //地球平均半径(米)
//数据回复类型
#define BACKUP_TYPE_ATTFLASH (0x5511) /* 备份数据类型: Flash */
//#define BACKUP_TYPE_PLDSRAM (0x5522) /* 备份数据类型SRAM */
#define BACKUP_TYPE_ATTFIFO (0x5533) /* 备份数据类型双机FIFO。【注意不能是0和0xFF】 */
/***********************************************
说明: 姿控Flash区
***********************************************/
typedef struct AttCmdFlash_s{
TYPE_CAL M_SSA[3][3]; //星敏A安装矩阵(1,1)
TYPE_CAL M_SSB[3][3]; //星敏B安装矩阵(1,1)
TYPE_CAL M_SSC[3][3]; //星敏C安装矩阵(1,1)
TYPE_CAL M_GYRO[3][3][3]; //陀螺A\B\C安装矩阵(1,1)
TYPE_CAL M_aSSA[3][3]; //模拟太敏A安装矩阵(1,1)
TYPE_CAL M_aSSB[3][3]; //模拟太敏B安装矩阵(1,1)
TYPE_CAL M_aSSC[3][3]; //模拟太敏C安装矩阵(1,1)
TYPE_CAL M_aSSD[3][3]; //模拟太敏D安装矩阵(1,1)
TYPE_CAL M_aSSE[3][3]; //模拟太敏E安装矩阵(1,1)
TYPE_CAL M_aSSF[3][3]; //模拟太敏F安装矩阵(1,1) F为太阳阵上模拟太阳敏感器安装矩阵
TYPE_CAL M_Wheel[3][4]; //飞轮安装矩阵
TYPE_CAL M_MAG[MAG_NUM][3][3]; //磁强计安装矩阵
TYPE_CAL M_MAGCtrl[3][4]; //磁力矩器分配矩阵
//陀螺故障诊断参数
TYPE_CAL Gyro_Comd_Bias[GYRO_NUM][3]; //陀螺零偏
TYPE_CAL Gyro_Comd_K[GYRO_NUM][3][3]; //标度因数
UINT8 Gyro_ComRESW[3]; //陀螺表头重构状态字
//PPU
TYPE_CAL PPUPVK; //阳极电源电压比例系数K
TYPE_CAL PPUPVB; //阳极电源电压比例系数B
TYPE_CAL PPUPAK; //阳极电源电流比例系数K
TYPE_CAL PPUPAB; //阳极电源电流比例系数B
//磁强计
TYPE_CAL MAG_LK[MAG_NUM][3]; //模拟磁强计拟合系数k
TYPE_CAL MAG_LB[MAG_NUM][3]; //模拟磁强计电压零位
UINT8 Mag_ComRESW[3]; //磁强计表头重构状态字
//星敏校磁强
TYPE_CAL SS_MAG_CThr; //星敏校磁强计阈值,单位°
UINT16 judgeWait_time; //轮控对日定向持续
//飞轮PD控制
TYPE_CAL kp_ToSun_PD[3]; //飞轮PD控制-比例kpxyz
TYPE_CAL kd_ToSun_PD[3]; //飞轮PD控制-微分kdxyz
TYPE_CAL w0max_PD; //最大旋转角速度,单位°/s
TYPE_CAL PD_Ts; //飞轮PD控制-时间常数
//飞轮PID控制
TYPE_CAL kp_PID[3]; //PID控制-比例kpxyz
TYPE_CAL ki_PID[3]; //PID控制-积分kixyz
TYPE_CAL kd_PID[3]; //PID控制-微分kdxyz
TYPE_CAL w0max_PID; //最大旋转角速度,单位°/s
TYPE_CAL PID_Ts; //飞轮PID控制-时间常数
//三批次增加数据
UINT8 WorkModeChangeAuto; //二次点火使能标志
UINT32 PPUT_FIR_EndLast; //最后一次熄火时刻
UINT16 PPUTALimit; //电推过流故障阈值
UINT16 PPUTVLimit; //电推过压故障阈值
UINT16 PPUTFireLimit; //电推点火故障阈值
UINT16 PPUHTemperLimit; //电推温度故障上限阈值
UINT16 PPULTemperLimit; //电推温度故障下限阈值
//FLASH区在轨编程预留
UINT8 FLASH_RESET1;
UINT8 FLASH_RESET2;
UINT8 FLASH_RESET3;
UINT16 FLASH_RESET4;
UINT16 FLASH_RESET5;
UINT16 FLASH_RESET6;
TYPE_CAL FLASH_RESET7;
TYPE_CAL FLASH_RESET8;
TYPE_CAL FLASH_RESET9;
} AttCmdFlash_t;
/***********************************************
说明:安装矩阵
***********************************************/
typedef struct
{
//Flash区
AttCmdFlash_t AttCmdFlashPara;
//模拟太敏
TYPE_CAL Ass_MinFour_limt[2]; //4片模拟太敏电压阈最小值
TYPE_CAL Ass_MaxFour_limt[2]; //4片模拟太敏电压阈最大值
//磁强计
TYPE_CAL Mag_Bb_CtrlMax; //磁力矩器最大输出磁矩
TYPE_CAL Mag_Kp[3];
TYPE_CAL Mag_Kd[3];
TYPE_CAL Mag_KpFBZK[3];
TYPE_CAL Mag_KdFBZK[3];
TYPE_CAL Mag_DampBdotMin; //磁控阻尼死区
//UINT8 Mag_ComRESW[3]; //磁强计表头重构状态字
//目标角速度
TYPE_CAL Mag_WTOSUN; //磁控对日目标角
TYPE_CAL Mag_FBZKWTOSUN; //磁控对日目标角
TYPE_CAL Mag_ATTTOSUN; //磁控对日对日磁矩角
//飞轮
UINT8 Whl_ID[WHEEL_NUM]; // 飞轮控制指令:飞轮工作模式
//磁力矩器
UINT8 MTCtrlTIME; //磁力矩器控制时间
TYPE_CAL MTOutXYZLimit[4]; //三轴控制最大此举100/100/50/50
//飞轮磁卸载
TYPE_CAL k1_dump; //卸载角动量开阈值,单位Nms
TYPE_CAL k2_dump;
TYPE_CAL ku_dump;
TYPE_CAL MTAtt_dump;
//互校验阈值(可上注修改)
UINT8 Allow_Sensor_CThr; //自主单机间互校验准禁标志
TYPE_CAL SS_SS_CThr; //星敏间校验阈值,单位°
TYPE_CAL SS_ASS_CThr; //星敏校太敏阈值,单位°
TYPE_CAL SS_ASS_CCThr; //星敏太敏互校验阈值,单位°
TYPE_CAL SS_GYRO_CThr; //星敏校陀螺阈值,单位°/s
//TYPE_CAL SS_MAG_CThr; //星敏校磁强计阈值,单位°
TYPE_CAL MAG_MAG_CThr; //磁强计互校阈值单位nT
TYPE_CAL GYRO_GYRO_CThr; //陀螺互校阈值,单位°/s
//模式切换相关参数
//UINT8 WorkModeUp; //工作模式注数选择
//UINT8 WorkModeChange; //工作模式切换允许标志
//UINT8 WorkModeChangeAuto; //工作模式自主切换允许标志
UINT16 judge_time0; //0、星箭分离前
UINT16 judge_time1; //1、碰撞规避模式
UINT16 judge_time2; //2、速率阻尼
UINT16 judge_time3; //3、轮控对日定向
UINT16 judge_time4; //4、磁控对日定向
UINT16 judge_time5; //5、对地定向
UINT16 judge_time6; //6、稳态对地
UINT16 judge_time7; //7、轨控前调姿
UINT16 judge_time8; //8、轨道控制
UINT16 judge_time9; //10、定向前调姿
UINT16 judge_timeA; //11、对目标定向
UINT16 judge_timeB; //12、无控模式
//UINT16 judgeWait_time; //轮控对日定向持续
TYPE_CAL RateThr_2T3; //速率阻尼转对日定向角速度阈值
TYPE_CAL HWHLThr_2T3; //速率阻尼转对日定向角动量阈值
TYPE_CAL AngThr_3TB; //对日定向转无控模式角度阈值
TYPE_CAL RateThr_3TB; //对日定向转无控模式角速度阈值
TYPE_CAL AngThr_5T6; //对地定向模式切换到稳定对地模式角度阈值
TYPE_CAL RateThr_5T6; //对地定向模式切换到稳定对地角速度阈值
TYPE_CAL AngThr_9TA; //定向前调姿切换到目标定向模式角度阈值
TYPE_CAL RateThr_9TA; //定向前调姿切换到目标定向模式角速度阈值
//控制相关参数
TYPE_CAL SAT_J[3][3]; //整星转动惯量xx,yy,zz 单位kgm2
TYPE_CAL Whl_J[WHEEL_NUM]; //飞轮的角动量转换系数
TYPE_CAL Whl_HCent[WHEEL_NUM]; //飞轮的标称角动量
//飞轮PD控制
//TYPE_CAL kp_ToSun_PD[3]; //飞轮PD控制-比例kpxyz
//TYPE_CAL kd_ToSun_PD[3]; //飞轮PD控制-微分kdxyz
TYPE_CAL kp_NoToSun_PD[3]; //帆板未展开飞轮PD控制-比例kpxyz
TYPE_CAL kd_NoToSun_PD[3]; //帆板未展开飞轮PD控制-微分kdxyz
//TYPE_CAL w0max_PD; //最大旋转角速度,单位°/s
TYPE_CAL w0max_NoPD; //最大旋转角速度,单位°/s
//TYPE_CAL PD_Ts; //飞轮PD控制-时间常数
TYPE_CAL PDNo_Ts; //飞轮PD控制-时间常数
//飞轮PID控制
//TYPE_CAL kp_PID[3]; //PID控制-比例kpxyz
//TYPE_CAL ki_PID[3]; //PID控制-积分kixyz
//TYPE_CAL kd_PID[3]; //PID控制-微分kdxyz
TYPE_CAL kp_NoPID[3]; //PID控制-比例kpxyz
TYPE_CAL ki_NoPID[3]; //PID控制-积分kixyz
TYPE_CAL kd_NoPID[3]; //PID控制-微分kdxyz
//TYPE_CAL w0max_PID; //最大旋转角速度,单位°/s
TYPE_CAL w0max_NoPID; //最大旋转角速度,单位°/s
//TYPE_CAL PID_Ts; //飞轮PID控制-时间常数
TYPE_CAL PIDNo_Ts; //飞轮PID控制-时间常数
//指令分配
TYPE_CAL WheelD_NomSpeed; //配平轮标称转速单位rad/s 可上注
TYPE_CAL WheelD_SpeedErrThr; //配平轮转速偏差阈值单位rad/s 可上注
TYPE_CAL WheelD_Default; //配平轮力矩指令默认值,净力矩阈值.单位Nm 可上注
TYPE_CAL WheelD_AllDefault; //配平轮力矩指令默认值,合力矩阈值.单位Nm 可上注
//故障处理模块参数
//环境模块
TYPE_CAL BetaAngLimit; //卫星进出影判断值
//陀螺异常
UINT16 GyroDiagThr; //判断时间阈值,单位s,可上注
UINT8 AllowGyroONOFF[GYRO_NUM]; //星敏重构允许标志
UINT16 Gyro_Delay_CntLimt; //陀螺开机异常延迟判断计数
UINT16 Gyro_Err_CntLimt; //陀螺异常判断计数
UINT16 Gyro_OK_CntLimt; //陀螺正常判断计数
UINT16 Gyro_ReSet_CntLimt; //陀螺重启总次数
UINT16 Gyro_ReSetGAP_CntLimt; //陀螺重启间隔拍数
UINT8 GyroUsePrior[GYRO_NUM]; //陀螺使用优先级
//UINT8 Gyro_ComRESW[3]; //陀螺表头重构状态字
//星敏异常
UINT8 AllowssONOFF[STAR_NUM]; //星敏重启允许标志
UINT16 ssDiagThr; //判断时间阈值,单位s,可上注
UINT16 Ss_Delay_CntLimt; //星敏开机异常延迟判断计数
UINT16 Ss_Err_CntLimt; //星敏异常判断计数
UINT16 Ss_OK_CntLimt; //星敏正常判断计数
UINT16 Ss_ReSet_CntLimt; //星敏重启总次数
UINT16 Ss_ReSetGAP_CntLimt; //星敏重启间隔拍数
UINT8 SSUsePrior[STAR_NUM]; //星敏使用优先级
//磁强计异常
UINT8 AllowMagONOFF[MAG_NUM]; //磁强计重启允许标志
UINT16 MagDiagThr; //判断时间阈值,单位s,可上注
UINT16 Mag_Delay_CntLimt; //磁强计开机异常延迟判断计数
UINT16 Mag_Err_CntLimt; //磁强计异常判断计数
UINT16 Mag_ReSet_CntLimt; //磁强计重启总次数
UINT16 Mag_OK_CntLimt; //磁强计正常判断计数
UINT16 Mag_ReSetGAP_CntLimt; //磁强计重启间隔拍数
//飞轮异常
UINT8 AllowWhlONOFF[WHEEL_NUM]; //反作用重构允许标志
UINT16 WhlTemperDiagThr; //飞轮温度过高温度阈值单位°C可上注
UINT16 WhlDiag_TimeThr; //飞轮温度过高计数阈值,可上注
UINT16 WhlDiag_ErrThr; //飞轮数据异常计数阈值,单位,可上注
UINT16 Whl_Delay_CntLimt; //飞轮开机异常延迟判断计数
UINT16 Whl_Err_CntLimt; //飞轮异常判断计数
UINT16 Whl_OK_CntLimt; //飞轮正常判断计数
UINT16 Whl_ReSet_CntLimt; //飞轮重启总次数
UINT16 Whl_ReSetGAP_CntLimt; //飞轮重启间隔拍数
//PPU
UINT8 AllowPPUONOFF; //PPU重构允许标志
UINT16 PPU_Delay_CntLimt; //磁强计开机异常延迟判断计数
UINT16 PPU_Err_CntLimt; //磁强计异常判断计数
UINT16 PPU_ReSet_CntLimt; //磁强计重启总次数
UINT16 PPU_OK_CntLimt; //磁强计正常判断计数
UINT16 PPU_ReSetGAP_CntLimt; //磁强计重启间隔拍数
UINT16 PPUTXTimeLimit; //电推通信故障时间阈值
UINT16 PPUTATimeLimit; //电推过流故障时间阈值
//UINT16 PPUTALimit; //电推过流故障阈值
UINT16 PPUTVTimeLimit; //电推过压故障时间阈值
//UINT16 PPUTVLimit; //电推过压故障阈值
//UINT16 PPUTFireLimit; //电推点火故障阈值
UINT16 PPUTemperTimeLimit; //电推温度故障时间阈值
//UINT16 PPUHTemperLimit; //电推温度故障上限阈值
//UINT16 PPULTemperLimit; //电推温度故障下限阈值
//推力器产生卫星本体系推力加速度
TYPE_CAL AccThru_Up[3]; //推力引力加速度上注值
//姿态确定
UINT16 GyroINT_TLimt; //陀螺积分限幅值
////姿态基准丢失
UINT8 AllowAttLoseDiagFlg; //姿态基准丢失判断开允许标志
UINT16 TimeThr_AttLoseDiag[9]; //姿态丢失时间阈值单位s
//姿态超差判断
UINT8 AllowAttExDiagFlg; //姿态超差判断允许标志
UINT16 TimeThr_AttEx[10]; //姿态超差用到的时间阈值单位s
TYPE_CAL AngThr_AttEx[9]; //角度阈值
TYPE_CAL RateThr_AttEx[9]; //角速度阈值
UINT16 YawCntLimit; //对地偏航/对目标偏航下偏航姿态超差计数
//姿态不稳定判断
UINT8 AllowAttStaDiagFlg; //姿态不稳定判断允许标志
UINT16 TimeThr_AttUnSta[6]; //姿态不稳定用到的时间阈值单位s
UINT16 TimeMod_AttUnSta[6]; //姿态不稳定用到的时间阈值单位s
TYPE_CAL AngThr_AttUnSta[6]; //角度阈值
TYPE_CAL RateThr_AttUnSta[6]; //角速度阈值
UINT8 ZK_Reserver111;
UINT8 ZK_Reserver222;
}AttCtrlConst_t;
/*星敏数据*/
/***********************************************
说明:星敏遥测数据结构体
***********************************************/
//A:803 B:803 C:北京
typedef struct SsPara_s{
//敏感器输入数据
UINT8 ssIn_AttVld; //星敏姿态有效标志
UINT8 ssIn_DataSta; //星敏数据状态
TYPE_CAL ssIn_Q[4]; //星敏姿态四元数
TYPE_CAL ssIn_W[3]; //星敏角速度
TYPE_CAL ssExpose_Qbi[4]; //星敏A惯性系姿态四元数
TYPE_CAL ssExpose_Wbi[3]; //星敏A惯性系角速度
UINT8 ssCrCheckFlg; //星敏互校验标志
UINT8 ssAvailableFlg; //星敏可用标志
UINT8 ssPrior; //星敏使用优先级
UINT8 ssExpose_cnt; //星敏输出四元数不变计数
TYPE_CAL ssIn_Qpre[4]; //前一拍星敏姿态四元数
} SsPara_t;
/***********************************************
说明:陀螺数据结构体
***********************************************/
//A:开拓 B:利可夫 C:华芯
typedef struct Gyrodata_s{
UINT8 GyroIn_AttVld; //Gyro有效标志
UINT8 GyroIn_DataSta; //Gyro数据无效原因
UINT8 Gyro_ComTHUse[3]; //单套陀螺表头可用标志
TYPE_CAL GyroIn_Speed[3]; //陀螺三轴角速度
TYPE_CAL GyroIn_SpeedPre[3]; //陀螺上一拍三轴角速度
TYPE_CAL GyroIn_Tmper[3]; //陀螺三轴角温度
TYPE_CAL Gyro_Wi[3]; //惯性系陀螺角速度
UINT8 GyroCrCheckFlg; //陀螺互校验标志
UINT8 Gyro_AvailableFlg; //单套陀螺可用标志
UINT8 GyroPrior; //陀螺使用优先级
UINT16 Gyro_ComCnt[3]; //陀螺上下拍数据比较有效计数
} GyroPara_t;
/***********************************************
说明:模拟太敏数据结构体
***********************************************/
typedef struct AssPara_s{
UINT8 AssIn_AttVld[ASS_NUM]; //Ass数据有效标志
TYPE_CAL AssIn_sensor[ASS_NUM][4]; //模拟太敏电压
UINT8 AssCrCheckFlg; //模拟太敏互校验标志
TYPE_CAL Ass_SunATT[2]; //帆板模拟太敏方位角θ、虚余仰角r
TYPE_CAL Ass_SunVecbF[3]; //模拟太敏本体系太阳矢量XYZ
UINT8 Ass_SunOK; //帆板模拟太敏方位角可用标志
TYPE_CAL Ass_SunVecb[3]; //模拟太敏本体系太阳矢量XYZ
UINT8 Ass_SunVecVld; //模拟太敏太阳矢量有效标志
UINT8 ADIn_Date;
} AssPara_t;
/***********************************************
说明:磁强计数据结构体
***********************************************/
typedef struct MagPara_s /* 磁强计数据结构体 */
{
UINT8 MagIn_Valid[3]; //模拟磁强计A/B有效标志
UINT8 MagIn_DataSta; //单机数据有效状态
UINT8 MagCrCheckFlg[MAG_NUM]; //星敏校验磁强计标志
UINT8 MagAvailableFlg[MAG_NUM];
UINT8 Mag_Use; //选择的磁强计数据有效
UINT8 Mag_UsePre;
UINT8 MagUseSwich; //磁源选择
TYPE_CAL Mag_Bb_MeaAB[MAG_NUM][3]; //本体系磁强计磁矢量
TYPE_CAL Mag_Bb_MeaZH[3]; //本体系磁强计磁矢量(表头组合)
TYPE_CAL Mag_Bc_MeaAB[MAG_NUM][3]; //测量系磁强计A磁矢量
TYPE_CAL Mag_Bb[3]; //磁强计本体系磁矢量输出
TYPE_CAL Mag_BbPre[3]; //上一周期磁矢量
TYPE_CAL Mag_UBb[3]; //归一化磁矢量
} MagPara_t;
/***********************************************
说明:飞轮数据结构体
***********************************************/
typedef struct WhlPara_s{
UINT8 WhlIn_Valid[WHEEL_NUM]; //飞轮数据有效标志
UINT8 WhlIn_DataSta[WHEEL_NUM]; //Rcw 数据无效原因
TYPE_CAL Whl_Rate[WHEEL_NUM]; //飞轮当前实际转速单位rpm
TYPE_CAL Whl_RatePre[WHEEL_NUM]; //飞轮当前实际转速单位rpm
INT16 Whl_Current[WHEEL_NUM]; //飞轮电流
TYPE_CAL Whl_Tmper[WHEEL_NUM]; //电机温度
UINT32 Whl_Time[WHEEL_NUM]; //内部时间
UINT32 Whl_TimePRE[WHEEL_NUM]; //内部时间
//UINT8 Whl_OK; //飞轮组合可用标志
TYPE_CAL Whl_Momentum[WHEEL_NUM]; //四个飞轮的角动量
TYPE_CAL Whl_Momentum_Sum ; //反作用轮卸载角动量和
TYPE_CAL Whl_Momentum_XYZ[3]; //本体下飞轮三轴角动量
UINT8 Whl_UseCnt; //可用飞轮计数
UINT8 Whl_WorkMode[WHEEL_NUM]; //飞轮控制指令:飞轮工作模式
} WhlPara_t;
/***********************************************
说明PPU数据结构体
***********************************************/
typedef struct PPUPara_s{
UINT8 PPUIn_Valid; //PPU数据有效标志
UINT8 PPUIn_DataSta; //PPU 数据无效原因
UINT8 PPUOUT_Sta; //PPU指令开关状态
UINT8 PPUIn_ReCnt; //PPU遥测请求计数
UINT8 PPUNoUse_Cnt; //PPU不使用计数
UINT8 PPUIn_ReCntPre; //PPU上一拍遥测请求计数
TYPE_CAL PPUIn_AVoltage; //推进阳极电源电压
TYPE_CAL PPUIn_ACurrent; //推进阳极电源电流
UINT8 PPUIn_FIREOK; //点火成功标志
UINT8 PPUIn_FIREOKPre; //点火成功标志
UINT32 PPUT_FIR_Start[50];
UINT32 PPUT_FIR_End[50];
//UINT32 PPUT_FIR_EndLast;
UINT32 PPUT_FIR_Sum;
UINT8 PPUT_FIR_Cnt;
UINT8 PPUT_FIR_CntS;
UINT16 PPUT_FIR_SumCnt;
TYPE_CAL PPUT_BOTTLE_Tmper1;
TYPE_CAL PPUT_BOTTLE_Tmper2;
TYPE_CAL PPUT_PIPE_Tmper1;
TYPE_CAL PPUT_PIPE_Tmper2;
UINT8 PPU_OrbitCtl_Quit_OK_Flag; /*轨控正常退出标志*/
UINT8 PPU_OrbitCtl_Quit_OK_Cnt; /*轨控正常退出节拍计数*/
UINT8 PPU_OrbitCtl_Quit_Err_Flag; /*轨控正常退出标志*/
UINT8 PPU_OrbitCtl_Quit_Err_Cnt; /*轨控正常退出节拍计数*/
} PPUPara_t;
/***********************************************
说明:磁力矩器数据结构体
***********************************************/
typedef struct MtPara_s /* 磁强计数据结构体 */
{
TYPE_CAL MTCtrlOutP0[MT_NUM]; //磁力矩器输出占控比
UINT8 MTDirect[MT_NUM]; //磁控方向
UINT8 MTOnOff[MT_NUM]; //开关磁力矩器开关
UINT32 MTCtrlTime; //磁力矩器控制时间计数
UINT8 MTStatus; //磁力矩开关状态 20230713
} MtPara_t;
/*数据预处理参数*/
typedef struct
{
//单机数据结构
SsPara_t SsPara[3]; //星敏数据012对应ABC
GyroPara_t GyroPara[3]; //陀螺
AssPara_t AssPara; //模拟太敏
MagPara_t MagPara; //磁强计
WhlPara_t WhlPara; //飞轮
MtPara_t MtPara; //磁力矩器
PPUPara_t PPUPara; //PPU
//陀螺表头组合
UINT8 GyroIn_Comb; //陀螺表头组合可用标志
TYPE_CAL GyroIn_CombWi[3]; //惯性系陀螺角速度
TYPE_CAL Gyro_ATTWi[3]; //陀螺定姿角速度
TYPE_CAL Ss_Qi[4]; //星敏惯性系姿态四元数1234
TYPE_CAL Ss_Wi[3]; //星敏惯性系角速度123
}sAttDataPrePara_t;
//当前定姿参数
typedef struct
{
UINT8 AttDeter_Type; //闭环定姿模式
//闭环定姿
TYPE_CAL Qi[4]; //卫星惯性系姿态四元数1234
TYPE_CAL Wi[3]; //卫星惯性系角速度123
TYPE_CAL Ai[3]; //卫星惯性系轨控加速度123
UINT8 PPUVld; //PPU加速度有效标志
UINT32 SatTime[2]; //星上时 秒/微妙
UINT8 Qi_Vld; //卫星惯性系四元数有效标志
UINT8 Wi_Vld; //卫星惯性系角速度有效标志
TYPE_CAL QiPre[4];
TYPE_CAL WiPre[3];
UINT8 QiPre_Vld;
UINT32 GyroINT_Time; //陀螺积分时间
//对日太阳角
TYPE_CAL SunVecb[3]; //卫星本体系太阳矢量XYZ
TYPE_CAL AngToSun[3]; //卫星对日太阳角XY
UINT8 AngToSun_ValidFlg; //卫星太阳角有效标志
UINT8 CalAngToSun_Source; //计算太阳角数据源标志
//轨道系姿态
TYPE_CAL Qo[4]; //卫星轨道系姿态四元数1234
TYPE_CAL AttRateOrb[3]; //卫星轨道系姿态角速度XYZ
TYPE_CAL AttAngTar[3]; //卫星轨道系目标姿态
TYPE_CAL AttAngOrb[3]; //卫星轨道系调整姿态
TYPE_CAL SunVeco[3]; //卫星轨道系太阳矢量XYZ
UINT8 AttOrb_Vld; //卫星轨道系姿态有效标志
//目标参考系姿态
TYPE_CAL AttAngTarRe[3]; //卫星目标参考系姿态角XYZ
TYPE_CAL AttRateTarRe[3]; //卫星目标参考系姿态角速度
UINT8 AttTarRe_Vld; //卫星目标参考系姿态有效标志
//轨控参考系姿态
TYPE_CAL AttAngOrbCtrl[3]; //卫星轨控参考系姿态角XYZ
TYPE_CAL AttRateOrbCtrl[3]; //卫星轨控参考系姿态角速度XYZ
UINT8 AttOrbCtrl_Vld; //卫星轨控参考系系姿态有效标志
//闭环控制姿态
TYPE_CAL CLPAttAng[3]; //闭环姿态角XYZ
TYPE_CAL CLPAttAngRat[3]; //闭环姿态角速度XYZ
TYPE_CAL CLPAttAngRatPre[3]; //前一拍闭环姿态角速度XYZ
UINT8 CLPAttValid; //闭环姿态数据有效标志
}sAttDeterPara_t;
//导引率模块参数
typedef struct
{
UINT8 AttGuid_Type; //导引律模式
TYPE_CAL TargAng[3]; //目标姿态角XYZ
TYPE_CAL TargAngRat[3]; //目标姿态角速度XYZ
UINT32 CaptureSunCnt; //卫星太阳角有效计数
}sAttGuidLawPara_t;
/*轨控数据包*/
typedef struct
{
//轨控包
UINT8 OrbCtrlPcak_ID; //轨控数据编号ID
UINT32 OrbAttAjustTime; //调姿时刻,单位s+ms
TYPE_CAL OrbCtrAng[3]; //轨控调姿目标姿态
UINT32 OrbCtrl_StartTime; //轨控时刻,单位s
UINT16 OrbCtrl_TimeLength; //轨控时长
UINT8 OrbCtrl_Mod; //轨控后目标工作模式
UINT16 OrbDateSum; //该组轨控数据和校验
}AttOrbCtrlPara_t;
/*当前轨控数据*/
typedef struct
{
UINT8 CurOrbCtrlPcak_ID; //轨控数据编号ID
UINT8 CurOrbCtrlPcak_PreID; //轨控数据编号ID
UINT8 OrbCtrlPcak_ReceiveFlg[50]; //收到轨控包标志
AttOrbCtrlPara_t OrbCtrlPackCur; //当前使用的轨控数据包
UINT8 OrbDataIn_OK; //轨控数据上注成功标志
UINT16 OrbDataIn_OKCnt;
}sAttOrbitCtlInfo_t;
//轨道控制数据包
typedef struct
{
//轨道控制数据包
AttOrbCtrlPara_t OrbCtrlPack[50]; //轨控数据包
}sAttOrbitCtlData_t;
/*目标定向,注意数据不是与注入包对齐*/
typedef struct
{
UINT8 TARCtrlPcak_ID; //目标定向数据编号ID
//目标数据包
UINT32 TARCtrl_JustTime; //目标定向开始时刻,单位s
TYPE_CAL TARCtrAng[3]; //目标定向调姿目标姿态
UINT32 TARCtrl_StartTime; //目标定向开始时刻,单位s
UINT16 TARCtrl_TimeLength; //目标定向结束时刻,单位s
UINT16 TARCtrlDateSum; //目标定向数据和校验
}sAttTARCCtlPara_t;
/*目标定向,注意数据不是与注入包对齐*/
typedef struct
{
UINT8 CurTARCtrlPcak_ID; //目标定向数据编号ID
UINT8 CurTARCtrlPcak_PreID; //目标定向数据编号ID
UINT8 TARCtrlPcak_ReceiveFlg[30]; //收到目标定向包标志
sAttTARCCtlPara_t TARCtrlPackCur;
UINT8 TARDataIn_OK; //目标定向数据上注成功标志
UINT16 TARDataIn_OKCnt;
}sAttTARCCtlInfo_t;
typedef struct
{
//目标定向数据包
sAttTARCCtlPara_t TARCtrlPack[30]; //目标定向轨控数据包
}sAttTARCCtlData_t;
/*轨道确认进程输入数据*/
typedef struct
{
UINT8 OrbitVld; //轨道外推有效标志
TYPE_CAL JPos[3]; //位置
TYPE_CAL JVel[3]; //速度
TYPE_CAL GAST;
TYPE_CAL MJC; //儒略世纪
TYPE_CAL MJCLv; //儒略有效性
}sAttOrbitGetPara_t;
//当前控制参数
typedef struct
{
//UINT8 AttCtrl_TypeTEST;
//磁卸载算法
UINT8 IsDump; //飞轮卸载状态(三轴)
//PID控制
TYPE_CAL SumAerrPre[3]; //角度偏差积分
UINT16 PD2PIDCnt; //PD转PID计数
UINT8 CtrlPD2PID; //
//输出
TYPE_CAL MagCtrlResult[3]; //推力器控制器控制指令XYZ,正负表示控制力矩
TYPE_CAL MagCtrlXYZZ[MT_NUM];
TYPE_CAL Mag_DeltBb[3]; //磁速率
TYPE_CAL WheelCtrlResult[3]; //飞轮控制器控制指令XYZ单位Nm
TYPE_CAL WheelCtrlResultPre[3];
TYPE_CAL ZK_Ctrl_Reserver111;
TYPE_CAL ZK_Ctrl_Reserver222;
UINT16 ZK_Ctrl_Reserver333;
UINT16 ZK_Ctrl_Reserver444;
UINT8 ZK_Ctrl_Reserver555;
UINT8 ZK_Ctrl_Reserver666;
}sAttCtlPara_t;
//指令分配模块参数
typedef struct
{
//控制轮
TYPE_CAL Wheel_TwcCmd[3]; //三个控制轮的控制指令
//配平轮
TYPE_CAL WheelD_MomOfForce_Cmd; //飞轮D力矩指令,单位Nm
TYPE_CAL WheelD_RotatSpd_Cmd; //飞轮D转速指令,单位rad/s
//飞轮指令(最终整理)
TYPE_CAL Whl_Torque[WHEEL_NUM]; //飞轮控制指令:转速
TYPE_CAL Wheel_LJCmd[WHEEL_NUM]; //飞轮控制指令:力矩
UINT16 Wheel_Cmd_Cnt; //飞轮电流指令发送计数
}AttCmdDsp_t;
/*姿控模式选择参数*/
typedef struct
{
UINT8 WorkMode; //当前工作模式
UINT8 MiniDataSet; //最小模式进入后,恢复一次数据使用
UINT8 WorkModePre; //上一工作模式
UINT8 WModSadaOpen; //帆板展开标志
UINT8 ZKSadaOpen; //帆板展开标志(重启用)
UINT8 WModSadaOpenPre; //帆板展开标志
UINT8 ModeSwitchFlg; //模式切换标志,
UINT8 Mod2UnctlFirst; //首次近无控标志
UINT8 ZKPowOnFirst; //首次分离/计算机冷启动
UINT8 ZKPowOnStep; //首次分离/计算机冷启动加电序列
UINT16 WModCnt1; //1、碰撞规避模式
UINT16 WModCnt2[2]; //2、速率阻尼
UINT16 WModCnt3; //3、轮控对日定向
UINT16 WModCnt4; //4、磁控对日定向
UINT16 WModCnt5; //5、对地定向
UINT16 WModCnt6; //6、稳态对地
UINT16 WModCnt7; //7、轨控前调姿
UINT16 WModCnt8; //8、轨道控制
UINT16 WModCnt9; //9、定向前调姿
UINT16 WModCntA; //10、对目标定向
UINT16 WModCntB; //11、无控模式
UINT8 ReDataBK; //姿控数据备份成功标准
UINT8 ATTFlashSwitch; //Flash数据更新标志
}sAttModPara_t;
//环境模型参数
typedef struct
{
UINT32 SatTime_s; //星上时
UINT32 SatTime_ms;
//太阳矢量
TYPE_CAL SunVecI[3]; //惯性系太阳矢量XYZ单位矢量
TYPE_CAL SunPosVecI[3]; //惯性系太阳位置矢量XYZ
UINT8 bInOutShadow; //进出地影标志
//地影判断
TYPE_CAL BetaAng; //beta角
UINT8 BetaShadow; //卫星进出影设置0x55阴影区0阳照区
UINT32 BetaAngCntIn; //卫星进影判断计数 初始值为0
UINT32 BetaAngCntOut; //卫星出影判断计数 初始值为0
//磁场
TYPE_CAL fvBe[3]; //地东南系磁矢量
TYPE_CAL fvBi[3]; //惯性系磁矢量
TYPE_CAL fvBo[3]; //轨道系磁矢量
TYPE_CAL fvBb[3]; //本体系磁矢量输出
TYPE_CAL fLonLat[3]; //经纬度 ,地心距
UINT8 fvIn_Valid; //磁场公式有效标志
//轨道角速度
TYPE_CAL OrbAttRate_Wo; //轨道系下轨道角速度
}sAttEnvPara_t;
//故障处理模块参数
typedef struct
{
//陀螺异常
UINT8 GyroIn_PowerOn[GYRO_NUM]; //陀螺加电状态
UINT32 Gyro_PowerOnCnt[GYRO_NUM]; //陀螺加电状态计数
UINT16 GyroErrCnt[GYRO_NUM]; //陀螺异常诊断计数,上限60000
UINT32 Gyro_Err_Cnt1[GYRO_NUM]; //陀螺数据异常计数
UINT32 Gyro_Err_Cnt2[GYRO_NUM]; //陀螺故障重启计数
UINT32 Gyro_Err_Cnt3[GYRO_NUM]; //陀螺数据正常计数
UINT8 Gyro_err[GYRO_NUM]; //陀螺异常状态
UINT8 Gyro_Diag[GYRO_NUM]; //陀螺故障标志
//星敏异常
UINT8 ssIn_PowerOn[STAR_NUM]; //星敏加电状态
UINT32 ss_PowerOnCnt[STAR_NUM]; //星敏加电状态计数
UINT16 ssErrCnt[STAR_NUM]; //星敏异常诊断计数,上限60000
UINT32 ss_Err_Cnt1[STAR_NUM]; //星敏数据异常计数
UINT32 ss_Err_Cnt2[STAR_NUM]; //星敏故障重启计数
UINT32 ss_Err_Cnt3[STAR_NUM]; //星敏数据正常计数
UINT8 SS_err[STAR_NUM] ; //星敏数据异常状态
UINT8 ss_Diag[STAR_NUM]; //星敏故障标志
//磁强计异常
UINT8 MagIn_PowerOn[MAG_NUM]; //模拟磁强计A/B加电状态
UINT32 Mag_PowerOnCnt[MAG_NUM]; //模拟磁强计加电状态计数
UINT16 MagErrCnt[MAG_NUM]; //模拟磁强计异常诊断计数,上限60000
UINT16 MagNoErrCnt[MAG_NUM]; //模拟磁强计正常诊断计数,上限60000
UINT32 Mag_Err_Cnt1[MAG_NUM]; //模拟磁强计数据异常计数
UINT32 Mag_Err_Cnt2[MAG_NUM]; //模拟磁强计故障重启计数
UINT32 Mag_Err_Cnt3[MAG_NUM]; //模拟磁强计数据正常计数
UINT8 Mag_err[MAG_NUM] ; //模拟磁强计异常状态
UINT8 Mag_Diag[MAG_NUM]; //模拟磁强计故障标志
//飞轮异常
UINT8 WhlUseState; //飞轮使用状态
UINT8 WhlIn_PowerOn[WHEEL_NUM]; //飞轮加电状态
UINT32 Whl_PowerOnCnt[WHEEL_NUM]; //飞轮加电状态计数
UINT16 WhlTemErrCnt[WHEEL_NUM]; //轴温不正常计数
UINT16 WhlOutErrCnt[WHEEL_NUM]; //飞轮输出不正常计数
UINT32 Whl_Err_Cnt1[WHEEL_NUM]; //飞轮数据异常计数
UINT32 Whl_Err_Cnt2[WHEEL_NUM]; //飞轮故障重启计数
UINT32 Whl_Err_Cnt3[WHEEL_NUM]; //飞轮数据正常计数
UINT8 Whl_Err[WHEEL_NUM]; //飞轮异常状态
UINT8 Whl_Diag[WHEEL_NUM]; //飞轮故障标志
//PPU
UINT8 PPUIn_PowerOn; //电推加电状态
UINT32 PPU_PowerOnCnt; //电推加电状态计数
UINT8 PPU_Err; //PPU异常状态
//UINT8 PPUTXT_Err; //PPU异常状态
UINT8 PPU_Diag; //PPU故障标志
UINT16 PPUOutErrCnt; //PPU输出不正常计数
UINT16 PPUIn_ACurCnt; //阳极电源电流计数
UINT16 PPUIn_VCurCnt; //阳极电源电压计数
UINT16 PPUOUT_FIRECnt; //开机点火计数
UINT16 PPUOUT_TemperECnt; //气瓶管路四路测温点温度
UINT32 PPU_Err_Cnt1; //PPU数据异常计数
UINT32 PPU_Err_Cnt2; //PPU故障重启计数
UINT32 PPU_Err_Cnt3; //PPU数据正常计数
////姿态基准丢失
UINT16 AttLoseCnt; //姿态丢失计数
//姿态超差判断
UINT8 AttExFlg[3]; //三轴姿态超差标志YZ
UINT16 AttExCnt; //姿态超差计数
TYPE_CAL AngRateMod_RATEDMP[61]; //碰撞规避\速率阻尼下的角速度矢量模值
UINT16 YawCnt; //对地偏航/对目标偏航下偏航姿态超差计数
//姿态不稳定判断
UINT8 AttUnSta[3]; //X轴姿态不稳定标志YZ
UINT16 AttUnStaCnt; //姿态不稳定计数
UINT16 AttModCnt; //姿态不稳定计数
///*电推 需两拍 开关机操作标志 */
//UINT8 AttPPUOnReq; //PPU下一拍开动作标志默认0X00:没有操作0x55:需下一拍开动作
//UINT8 AttPPUOffReq; //PPU下一拍关动作标志默认0X00:没有操作0x55:需下一拍关动作
}sAttErrCtlPara_t;
//单机使用状态
typedef struct
{
UINT8 SSUseState[STAR_NUM]; //星敏使用状态,
UINT8 GyroUseState[GYRO_NUM]; //陀螺使用状态,
UINT8 Whl_Use[WHEEL_NUM]; //飞轮使用状态
UINT8 MagUseState[MAG_NUM]; //磁强计/表使用状态
UINT8 AssUseState[ASS_NUM]; //单个太敏可用标志
UINT8 MTUseStatus[MT_NUM]; //磁力矩使用状态
UINT8 PPUUseStatus; //PPU使用状态
UINT8 PPUSafeStatus; //PPU使用状态整星安全使用
}AttIMPTPara_t;
//重要数据备份区
typedef struct
{
sSaveDataHead sBKHead; //校验头部
UINT8 BK_WorkMode;
UINT8 BK_WorkModeChangeAuto;
UINT8 BK_SS_err[STAR_NUM];
UINT8 BK_Mag_err[MAG_NUM];
UINT8 BK_Gyro_err[GYRO_NUM];
UINT8 BK_Whl_Err[WHEEL_NUM];
UINT8 BK_PPU_Err;
UINT8 BK_SSUseState[STAR_NUM];
UINT8 BK_GyroUseState[GYRO_NUM];
UINT8 BK_Whl_Use[WHEEL_NUM];
UINT8 BK_MagUseState[MAG_NUM];
UINT8 BK_AssUseState[ASS_NUM];
UINT8 BK_MTUseStatus[MT_NUM];
UINT8 BK_PPUUseStatus;
UINT8 BK_Gyro_ComRESW[3];
UINT8 BK_Mag_ComRESW[3];
UINT8 BK_ssPrior[STAR_NUM];
UINT8 BK_GyroPrior[GYRO_NUM];
UINT8 BK_ss_Diag[STAR_NUM];
UINT8 BK_Mag_Diag[MAG_NUM];
UINT8 BK_Gyro_Diag[GYRO_NUM];
UINT8 BK_Whl_Diag[WHEEL_NUM];
UINT8 BK_Allow_Sensor_CThr;
UINT8 BK_AllowAttLoseDiagFlg;
UINT8 BK_AllowAttExDiagFlg;
UINT8 BK_AllowAttStaDiagFlg;
UINT8 BK_AllowssONOFF[STAR_NUM];
UINT8 BK_AllowGyroONOFF[GYRO_NUM];
UINT8 BK_AllowMagONOFF[MAG_NUM];
UINT8 BK_AllowWhlONOFF[WHEEL_NUM];
UINT8 BK_AllowPPUONOFF;
UINT32 iVldFlag; //有效标记0x55555555为有效
}AttBKPara_t;
typedef struct
{
//UINT8 AttCtlBKFlag; //重要数据备份区的数据是否准备就绪
UINT8 WorkModeBK[3];
UINT8 WorkModeChangeAutoBK[3];
UINT8 SS_errBK[STAR_NUM][3];
UINT8 Mag_errBK[MAG_NUM][3];
UINT8 Gyro_errBK[GYRO_NUM][3];
UINT8 Whl_ErrBK[WHEEL_NUM][3];
UINT8 PPU_ErrBK[3];
UINT8 SSUseStateBK[STAR_NUM][3];
UINT8 AssUseStateBK[ASS_NUM][3];
UINT8 MagUseStateBK[MAG_NUM][3];
UINT8 GyroUseStateBK[GYRO_NUM][3];
UINT8 Whl_UseBK[WHEEL_NUM][3];
UINT8 MTUseStatusBK[MT_NUM][3];
UINT8 PPUUseStatusBK[3];
UINT8 Gyro_ComRESWBK[3][3];
UINT8 Mag_ComRESWBK[3][3];
UINT8 ssPriorBK[STAR_NUM][3];
UINT8 GyroPriorBK[GYRO_NUM][3];
UINT8 Allow_Sensor_CThrBK[3];
UINT8 AllowAttLoseDiagFlgBK[3];
UINT8 AllowAttExDiagFlgBK[3];
UINT8 AllowAttStaDiagFlgBK[3];
UINT8 AllowssONOFFBK[STAR_NUM][3];
UINT8 AllowGyroONOFFBK[GYRO_NUM][3];
UINT8 AllowMagONOFFBK[MAG_NUM][3];
UINT8 AllowWhlONOFFBK[WHEEL_NUM][3];
UINT8 AllowPPUONOFFBK[3];
}AttCtlData3T2_t;
typedef struct
{
UINT16 SHDepartCntlimt1;
//FLASH区在轨编程预留
UINT8 SADAFLASH_RESET1;
UINT8 SADAFLASH_RESET2;
UINT8 SADAFLASH_RESET3;
UINT16 SADAFLASH_RESET4;
UINT16 SADAFLASH_RESET5;
UINT16 SADAFLASH_RESET6;
TYPE_CAL SADAFLASH_RESET7;
TYPE_CAL SADAFLASH_RESET8;
TYPE_CAL SADAFLASH_RESET9;
}SadaCmdFlash_t;
/***********************************************
说明: Flash区
***********************************************/
typedef struct AttBackupFlash_s{
sSaveDataHead sBKHead; //校验头部
//姿控写入Flash数据
AttCmdFlash_t AttFlashPara;
//SADA写入Flash数据
SadaCmdFlash_t SadaFlashPara;
UINT32 iVldFlag; //有效标记0x55555555为有效
} AttBackupFlash_t;
/***********************************************
说明: 在轨编程预留区
***********************************************/
typedef struct AttCmdRESET_s{
UINT8 ZGBCU8_Reset1;
UINT8 ZGBCU8_Reset2;
UINT8 ZGBCU8_Reset3;
UINT8 ZGBCU8_Reset4;
UINT8 ZGBCU8_Reset5;
UINT16 ZGBCU16_Reset1;
UINT16 ZGBCU16_Reset2;
UINT16 ZGBCU16_Reset3;
UINT16 ZGBCU16_Reset4;
UINT16 ZGBCU16_Reset5;
TYPE_CAL ZGBCF_Reset1;
TYPE_CAL ZGBCF_Reset2;
TYPE_CAL ZGBCF_Reset3;
TYPE_CAL ZGBCF_Reset4;
TYPE_CAL ZGBCF_Reset5;
} AttCmdRESET_t;
//姿控内部数据结构定义
typedef struct
{
sAttOrbitGetPara_t sOrbitPara; //轨道输入参数,数据预处理获取
sAttDataPrePara_t sPerPara; //数据据预处理参数
sAttDeterPara_t sDeterPara; //当前定姿参数
sAttCtlPara_t sCtlPara; //当前控制参数
sAttEnvPara_t sEnvPara; //当前环境模型参数
sAttGuidLawPara_t sGuidLawPara; //导引率模块参数
sAttModPara_t sModePara; //模式式参数,用于模式选择
sAttOrbitCtlInfo_t sOrbitInp; //轨控包数据
sAttTARCCtlInfo_t sTARCInp; //目标定向包数据
sAttErrCtlPara_t sErrCtlPara; //故障处理模块参数
AttCmdDsp_t sCmdDspPara; //指令分配
AttIMPTPara_t sIMPTPara; //单机使用状态
AttBKPara_t AttBKPara; //重要数据备份区
AttCtlData3T2_t AttData3T2Para; //三取二数据区
SadaCmdFlash_t ATSFlashPara; //sadaflash数据
AttCmdRESET_t sAttRESETPara; //在轨编程区预留
}sAttPriData;
//void ZKDev_PPU_OnOffProcess(UINT8 OnState);/*PPU开关机处理*/
void SetWheel(UINT8 WheelId, TYPE_CAL Value, UINT8 CmdType);
BOOL AttCtrlInit(UINT8 taskID);
void ZKPreAction(void);
void ZKPowerState(void);
void ZKCtrlReinitBK(void);
void ZKModInit(void);
void ZKDYInit(void);
void ZKMINICmdResolve(UINT8 *tmpCmd);
void ATTImportDataBackup(void);
void ATTSetBase3ToBuff(UINT8 *pTDATA, UINT8 *pSDATA);
void ZKDPAction(void);
void ZKPGAct(void);
void ZKDYAction(void);
void ZKCmdDspAct(void);
void ATTRestoreFromFlash(void);
/*AttRECheck.c文件的头文件*/
void ZKREInit(void);
void ImuPowerOnOff( UINT8 ChlON,UINT8 ChlOFF,UINT8 ONOFF, UINT32 *Cnt1 , UINT32 *Cnt2, UINT32 *Cnt3,UINT32 Cnt1Limt , UINT32 Cnt2Limt , UINT32 Cnt3Limt ,UINT32 Cnt4Limt ,UINT8 err, UINT8 *state);
void GyroImuErrJudge(void);
void SsImuErrJudge(void);
void MagImuErrJudge(void);
void WhlImuErrJudge(void);
void PPUImuErrJudge(void);
UINT8 AttLose(UINT8 i);
void AttLoseJudge(void);
void AttExJudge(void);
void AttUnStaJudge(void);
void ZKREAction(void);
/*AttPoseGet.c文件的头文件*/
void ZKPGInit(void);
void Gyro_AttChoice(void);
void Gyro_AttDeter(void);
void QuatDiffCal(TYPE_CAL * pQ_now, TYPE_CAL * pQ_pre, TYPE_CAL * pW);
void SsGyro_AngDeter(void);
void SsGyro_AttDeter(void);
void Cal_AngToSun(void);
void DertCalcBb(void);
void AttDeterOrb(void);
void AttDeterOrbCtrl(void);
void AttDeterTarRe(void);
void LoopAttDeter(void);
/*AttPoseCtrl.c文件的头文件*/
void ZKPosCtlInit(void);
void ZKPosCtlOutInit(void);
void MagDataDeltaProc(TYPE_CAL *cMagBb, TYPE_CAL *cMagBbPre, TYPE_CAL *cMagDelta, TYPE_CAL cDeltaT);
void CtrlMagBdotDamp(TYPE_CAL *cDeltBb, TYPE_CAL *cMagT);
void MagDmpMomentCal(void);
void MagSunMomentCal(void);
void WheelCalc_PD(void);
void WheelCalc_PID(void);
void Whl_Momentum_Count(void);
void CtrlWheelReleaseProc(void);
void CtrlModPD2PID(void);
void ZKPosCtlAct(sAttDeterPara_t *pAttDet, sAttGuidLawPara_t *pAttGuid, sAttCtlPara_t *pAttCtrl);
/*AttModeSel.c文件的头文件*/
void ZKModChgInit(void);
void ZKModDoSet(UINT8 newWMode);
void ZKDoModCal(void);
void ZKModeSel_Auto(void);
void ZKModeSel_Up(void);
void ZKDoModeAct(void);
/*AttEnvMod.c文件的头文件*/
void ZKEnvInit(void);
void ZKEnvCycInit(void);
void MJD_CAL_ATT(UINT32 sat_time, TYPE_CAL *pMjd);
void MJC_CAL_ATT(TYPE_CAL mjd, TYPE_CAL *pMjc, UINT8 *MJCLv);
void ObtSunVecI(TYPE_CAL JulC, TYPE_CAL *pSunVI, TYPE_CAL *pSunPVI);
void Cal_OrbAttRate_Wo(void);
void ShadowFlgCal(void);
void MagMath(TYPE_CAL *rLonLat, TYPE_CAL cgst, TYPE_CAL *B);
BOOL EarthLonLatCal(TYPE_CAL *cuR, TYPE_CAL *clonlat);
void TransMatrixIE(TYPE_CAL *clonlat, TYPE_CAL *cAie);
void ZKEnvAct(void);
/*AttDataPre.c文件的头文件*/
void ZKDPInit(void);
void Ss_DataGet(void );
#endif