/*
 * 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


