4828 lines
138 KiB
C
4828 lines
138 KiB
C
/* Created: 2022/11/4 11:02:40
|
||
* Author: wangzk zhengmengxing
|
||
*/
|
||
|
||
#include "AttCtrlMain.h"
|
||
#include "..\PrjTelmMng\TelmMng.h" /* 载荷异步包通知指令相关 */
|
||
|
||
/***********************************************************************/
|
||
sTaskInfo *m_pZKTaskInfo; /*任务结构指针,已经初始化完毕为未用*/
|
||
|
||
//安装矩阵
|
||
static const TYPE_CAL M_SSA[3][3] = {{0.3420F,-0.2114F,-0.9156F},{-0.9397F,-0.0769F,-0.3333F},{-0.0000F,0.9744F,-0.2250F}};
|
||
static const TYPE_CAL M_SSB[3][3] = {{1.0000F,0.0F, 0.0F},{0.0F,-0.2250F,-0.9744F},{0.0F,0.9744F,-0.2250F}};
|
||
//static const TYPE_CAL M_SSC[3][3] ={{0.3214F,-0.3420F,0.8830F},{-0.1170F,-0.9397F,-0.3214F},{0.9397F, 0.0000F,-0.3420F}};
|
||
static const TYPE_CAL M_SSC[3][3] ={{0.2962F,-0.5F,0.8138F},{-0.1710F,-0.8660F,-0.4698F},{0.9397F, 0.0000F,-0.3420F}};
|
||
//static const TYPE_CAL M_GYROA[3][3] = {{-0.0000F,1.0000F,-0.0000F} , {1.0000F,0.0000F,0.0000F},{0.0000F,0.0F,-1.0000F}};
|
||
//static const TYPE_CAL M_GYROB[3][3] = {{-0.0000F,1.0000F, -0.0000F},{1.0000F,0.0000F,0.0000F},{0.0000F,0.0F,-1.0000F}};
|
||
static const TYPE_CAL M_GYROA[3][3] = {{-1.0000F,0.0000F,0.0000F}, {0.0000F,1.0000F,0.0000F},{0.0000F,0.0F,-1.0000F}};
|
||
static const TYPE_CAL M_GYROB[3][3] = {{-1.0000F,0.0000F,0.0000F}, {0.0000F,1.0000F,0.0000F},{0.0000F,0.0F,-1.0000F}};
|
||
|
||
static const TYPE_CAL M_GYROC[3][3] = {{0.0000F,-1.0000F,0.0F},{1.0000F,0.0000F,0.0F},{0.0F,0.0F,1.0000F}};
|
||
static const TYPE_CAL M_aSSA[3][3] = { { 0.0F, -0.6427876F, 0.7660444F },{ 0.0F, -0.7660444F ,-0.6427876F },{ 1.0F, 0.0F ,0.0F } }; //模拟太敏A
|
||
static const TYPE_CAL M_aSSB[3][3] = { { 0.0F, -0.6427876F, -0.7660444F },{ 0.0F, 0.7660444F ,-0.6427876F },{ 1.0F, 0.0F ,0.0F } }; //模拟太敏B
|
||
static const TYPE_CAL M_aSSC[3][3] = { {-0.8660254F ,0.0F, 0.5F },{ 0.5F, 0.0F ,0.8660254F },{ 0.0F ,1.0F ,0.0F } }; //模拟太敏C
|
||
static const TYPE_CAL M_aSSD[3][3] = { {0.0F,0.8660254F, -0.5F },{ 0.0F, 0.5F ,0.8660254F },{ 1.0F ,0.0F ,0.0F } }; //模拟太敏D
|
||
static const TYPE_CAL M_aSSE[3][3] = { { 0.0F,1.0F, 0.0F },{ 1.0F,0.0F,0.0F },{ 0.0F, 0.0F ,-1.0F } }; //模拟太敏E
|
||
static const TYPE_CAL M_aSSF[3][3] = { { -1.0F,0.0F,0.0F },{ 0.0F,0.0F,1.0F},{ 0.0F,1.0F,0.0F } };
|
||
static const TYPE_CAL M_MAG1[3][3] = { { 1.0F,0.0F,0.0F },{ 0.0F,-1.0F,0.0F },{ 0.0F,0.0F,-1.0F } }; //磁强计安装矩阵
|
||
static const TYPE_CAL M_MAG2[3][3] = { { 1.0F,0.0F,0.0F },{ 0.0F,-1.0F,0.0F },{ 0.0F,0.0F,-1.0F } }; //磁强计安装矩阵
|
||
static const TYPE_CAL M_MAGCtrl[3][4] = { { 1.0F,0.0F,0.0F,0.0F },{ 0.0F,1.0F,0.0F,0.0F},{ 0.0F,0.0F,1.0F,1.0F} }; //磁力矩器安装矩阵
|
||
static const TYPE_CAL M_Wheel[3][4] = { { -1.0F,0.0F,0.0F,0.4912F },{ 0.0F,-1.0F,0.0F,-0.4912F},{ 0.0F,0.0F,-1.0F,-0.7193F} };
|
||
|
||
/***********************************************
|
||
说明:用于星箭分离后 姿控敏感器和执行器加电
|
||
注意:
|
||
***********************************************/
|
||
void ZKDptPowerOnPrc(void)
|
||
{
|
||
sAttPriData *tmpAtt = NULL;
|
||
sTaskMngDataRecord *tmpTaskMngDataRcd = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpTaskMngDataRcd = (sTaskMngDataRecord *)ST_TASKMNG_ADDR;
|
||
|
||
if((NULL == tmpAtt) || (NULL == tmpTaskMngDataRcd))
|
||
{
|
||
return;
|
||
}
|
||
|
||
/*分离后加电,星务模块中连续判硬件分离标志5s后,设置软件分离标志为分离0x55, 此处判软分离标志连续5s*/
|
||
if(0x55 != tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
//ZKModDoSet(ATTMOD_BREAKPRE);
|
||
tmpAtt->sModePara.ZKPowOnFirst = 0x55;
|
||
tmpAtt->sModePara.WModCnt1 = 0;
|
||
}
|
||
else
|
||
{
|
||
if(tmpAtt->sModePara.WModCnt1 <= 60000)
|
||
tmpAtt->sModePara.WModCnt1++;
|
||
}
|
||
|
||
/*卫星分离,加电电机:星敏感器A1/A2/B、磁强计A/B、陀螺A/B/C、GNSS、反作用轮X/Y/Z/S、SADA主份、电推*/
|
||
if((0x55 == tmpTaskMngDataRcd->bSHDepart) /*分离 */
|
||
&& (tmpAtt->sModePara.WModCnt1 >= 5) /*且 切判软件分离标志连续5s有效*/
|
||
&& (0x55 == tmpAtt->sModePara.ZKPowOnFirst) /*且 由未分离 到 分离 */
|
||
)
|
||
{
|
||
if (0x00 == tmpAtt->sModePara.ZKPowOnStep)
|
||
{
|
||
//星敏A/B/C加电
|
||
OCOut(OC74_STA_ON, 0, 16);
|
||
OCOut(OC76_STB_ON, 0, 16);
|
||
OCOut(OC78_STC_ON, 0, 16);
|
||
|
||
//陀螺
|
||
OCOut(OC66_GYROA_ON, 0, 16);
|
||
OCOut(OC69_GYROB_ON, 0, 16);
|
||
OCOut(OC71_GYROC_ON, 0, 16);
|
||
|
||
//磁强计
|
||
OCOut(OC94_CQJA_ON, 0, 16);
|
||
OCOut(OC96_CQJB_ON, 0, 16);
|
||
//GNS
|
||
//OCOut(OC79_GNSSA_ON, 0, 16);
|
||
//ZKModDoSet(ATTMOD_NOCOLL);
|
||
tmpAtt->sModePara.ZKPowOnStep = 0x11;
|
||
}
|
||
else if (0x11 == tmpAtt->sModePara.ZKPowOnStep)
|
||
{
|
||
//飞轮A加电
|
||
OCOut(OC58_WHLX_ON, 0, 16);
|
||
tmpAtt->sModePara.ZKPowOnStep = 0x22;
|
||
}
|
||
else if (0x22 == tmpAtt->sModePara.ZKPowOnStep)
|
||
{
|
||
//飞轮B加电
|
||
OCOut(OC60_WHLY_ON, 0, 16);
|
||
tmpAtt->sModePara.ZKPowOnStep = 0x33;
|
||
}
|
||
else if (0x33 == tmpAtt->sModePara.ZKPowOnStep)
|
||
{
|
||
//飞轮C加电
|
||
OCOut(OC62_WHLZ_ON, 0, 16);
|
||
tmpAtt->sModePara.ZKPowOnStep = 0x44;
|
||
}
|
||
else if (0x44 == tmpAtt->sModePara.ZKPowOnStep)
|
||
{
|
||
//飞轮D加电
|
||
OCOut(OC64_WHLS_ON, 0, 16);
|
||
tmpAtt->sModePara.ZKPowOnStep = 0x55;
|
||
tmpAtt->sModePara.ZKPowOnFirst = 0x00;
|
||
}
|
||
}
|
||
}
|
||
|
||
/***********************************************
|
||
说明:初始化采集进程需要的硬件和软件
|
||
输入:无
|
||
输出:TRUE / FALSE
|
||
返回:初始化结果
|
||
注意:仅仅初始化各设备连接的数据采集部分
|
||
***********************************************/
|
||
BOOL AttCtrlInit(UINT8 taskID)
|
||
{
|
||
UINT8 i = 0x00;
|
||
UINT8 j = 0x00;
|
||
UINT8 k = 0x00;
|
||
UINT8 PPUOff[8] = {0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||
BOOL result = TRUE;
|
||
|
||
#ifndef MINMODULE_TYPE
|
||
m_pZKTaskInfo = (sTaskInfo *)GetTaskInfoBT(taskID);
|
||
if(NULL == m_pZKTaskInfo)
|
||
{
|
||
return FALSE;
|
||
}
|
||
#endif
|
||
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst= NULL;
|
||
|
||
|
||
SsPara_t *PStar[STAR_NUM]= {NULL};
|
||
GyroPara_t *PGyro[GYRO_NUM]= {NULL};
|
||
MagPara_t *PMag = NULL;
|
||
WhlPara_t *PWhl= NULL;
|
||
MtPara_t *pMt= NULL;
|
||
|
||
sAttErrCtlPara_t *pREcheck= NULL;
|
||
sAttCtlPara_t *pCtrl= NULL;
|
||
sAttDeterPara_t *pDeter= NULL;
|
||
sAttOrbitGetPara_t *pOrbitIn= NULL;
|
||
AttIMPTPara_t *pImpt= NULL;
|
||
sAttModPara_t *pWMod= NULL;
|
||
sAttGuidLawPara_t *pGuide= NULL;
|
||
sAttOrbitCtlInfo_t *pOrb= NULL;
|
||
sAttOrbitCtlData_t *tmpOrbCmd= NULL;
|
||
sAttTARCCtlData_t *tmpTARCmd= NULL;
|
||
sAttTARCCtlInfo_t *pTAR= NULL;
|
||
PPUPara_t *PPPU= NULL;
|
||
AttCmdDsp_t *pCmdDsp= NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
tmpOrbCmd=(sAttOrbitCtlData_t *)ATTCLT_DATA3_ADDR;
|
||
tmpTARCmd=(sAttTARCCtlData_t *)ATTCLT_DATA6_ADDR;
|
||
if(NULL == tmpAtt || NULL ==tmpConst || NULL ==tmpOrbCmd || NULL ==tmpTARCmd)
|
||
return FALSE;
|
||
memset(tmpAtt, 0, sizeof(sAttPriData));
|
||
memset(tmpOrbCmd, 0, sizeof(sAttOrbitCtlData_t));
|
||
memset(tmpTARCmd, 0, sizeof(sAttTARCCtlData_t));
|
||
|
||
PStar[0] = &tmpAtt->sPerPara.SsPara[0];
|
||
PStar[1] = &tmpAtt->sPerPara.SsPara[1];
|
||
PStar[2] = &tmpAtt->sPerPara.SsPara[2];
|
||
|
||
PGyro[0] = &tmpAtt->sPerPara.GyroPara[0];
|
||
PGyro[1] = &tmpAtt->sPerPara.GyroPara[1];
|
||
PGyro[2] = &tmpAtt->sPerPara.GyroPara[2];
|
||
|
||
PMag = &tmpAtt->sPerPara.MagPara;
|
||
PWhl = &tmpAtt->sPerPara.WhlPara;
|
||
pREcheck = &tmpAtt->sErrCtlPara;
|
||
pCtrl = &tmpAtt->sCtlPara;
|
||
pMt = &tmpAtt->sPerPara.MtPara;
|
||
pDeter = &tmpAtt->sDeterPara;
|
||
pOrbitIn = &tmpAtt->sOrbitPara;
|
||
pImpt = &tmpAtt->sIMPTPara;
|
||
pWMod = &tmpAtt->sModePara;
|
||
pGuide = &tmpAtt->sGuidLawPara;
|
||
pOrb = &tmpAtt->sOrbitInp;
|
||
pTAR = &tmpAtt->sTARCInp;
|
||
PPPU = &tmpAtt->sPerPara.PPUPara;
|
||
pCmdDsp = &tmpAtt->sCmdDspPara;
|
||
|
||
/*所有模块初始化*/
|
||
ZKModInit();
|
||
ZKEnvInit();
|
||
ZKDPInit();
|
||
ZKREInit();
|
||
ZKDYInit();
|
||
ZKPosCtlInit();
|
||
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_SSA[0][0]), &M_SSA[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_SSB[0][0]), &M_SSB[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_SSC[0][0]), &M_SSC[0][0], 9*sizeof(TYPE_CAL));
|
||
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_GYRO[0][0][0]), &M_GYROA[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_GYRO[1][0][0]), &M_GYROB[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_GYRO[2][0][0]), &M_GYROC[0][0], 9*sizeof(TYPE_CAL));
|
||
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_aSSA[0][0]), &M_aSSA[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_aSSB[0][0]), &M_aSSB[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_aSSC[0][0]), &M_aSSC[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_aSSD[0][0]), &M_aSSD[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_aSSE[0][0]), &M_aSSE[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_aSSF[0][0]), &M_aSSF[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_MAG[0]), &M_MAG1[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_MAG[1]), &M_MAG2[0][0], 9*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_Wheel[0][0]), &M_Wheel[0][0], 12*sizeof(TYPE_CAL));
|
||
memcpy(&(tmpConst->AttCmdFlashPara.M_MAGCtrl[0][0]), &M_MAGCtrl[0][0], 12*sizeof(TYPE_CAL));
|
||
|
||
//互校验阈值(可上注修改)
|
||
tmpConst->Allow_Sensor_CThr = 0x55;//0;20240630
|
||
tmpConst->SS_SS_CThr = 2.0*ANG2RADIAN;
|
||
tmpConst->SS_ASS_CThr = 10.0*ANG2RADIAN;
|
||
tmpConst->SS_ASS_CCThr = 10.0*ANG2RADIAN;
|
||
tmpConst->SS_GYRO_CThr = 0.2*ANG2RADIAN;
|
||
//tmpConst->SS_MAG_CThr = 3*ANG2RADIAN;
|
||
tmpConst->AttCmdFlashPara.SS_MAG_CThr = 30*ANG2RADIAN;
|
||
//tmpConst->MAG_MAG_CThr = 1000;
|
||
tmpConst->MAG_MAG_CThr = 3000; //200t230
|
||
tmpConst->GYRO_GYRO_CThr = 0.1*ANG2RADIAN;
|
||
|
||
//整星转动惯量
|
||
tmpConst->SAT_J[0][0]=497.35;
|
||
tmpConst->SAT_J[0][1]=0.0;
|
||
tmpConst->SAT_J[0][2]=0.0;
|
||
tmpConst->SAT_J[1][0]=0.0;
|
||
tmpConst->SAT_J[1][1]=585.45;
|
||
tmpConst->SAT_J[1][2]=0.0;
|
||
tmpConst->SAT_J[2][0]=0.0;
|
||
tmpConst->SAT_J[2][1]=0.0;
|
||
tmpConst->SAT_J[2][2]=154.56;
|
||
|
||
//模拟太敏D:
|
||
for (i = 0; i < ASS_NUM; ++i)
|
||
{
|
||
pImpt->AssUseState[i]= POSE_OK; //单个太敏可用标志
|
||
}
|
||
tmpConst->Ass_MinFour_limt[0] = 3.5; //4片模拟太敏电压阈值
|
||
tmpConst->Ass_MaxFour_limt[0] = 12.0; //4片模拟太敏电压阈值
|
||
tmpConst->Ass_MinFour_limt[1] = 3.5; //EF片模拟太敏电压阈值
|
||
tmpConst->Ass_MaxFour_limt[1] = 7.0; //EF片模拟太敏电压阈值
|
||
//陀螺
|
||
for (i = 0; i < GYRO_NUM; i++)
|
||
{
|
||
PGyro[i]->Gyro_AvailableFlg=POSE_OK;
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
PGyro[i]->Gyro_ComCnt[k] = 0; //陀螺上下拍数据比较有效计数
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[i][k] =0; //陀螺零偏
|
||
for (j = 0; j < 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[i][k][j] =0;
|
||
}
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[i][k][k] =1;
|
||
}
|
||
memset(PGyro[i]->GyroIn_SpeedPre, 0, 3*sizeof(TYPE_CAL));
|
||
memset(PGyro[i]->GyroIn_Speed, 0, 3*sizeof(TYPE_CAL));
|
||
}
|
||
|
||
//星敏
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
PStar[i]->ssAvailableFlg=POSE_OK; //星敏可用标志
|
||
PStar[i]->ssExpose_cnt=0;
|
||
memset(PStar[i]->ssIn_Qpre, 0.0, 4*sizeof(TYPE_CAL));
|
||
memset(PStar[i]->ssIn_Q, 0.0, 4*sizeof(TYPE_CAL));
|
||
}
|
||
|
||
//磁强计
|
||
PMag->Mag_Use = POSE_OK;
|
||
PMag->Mag_UsePre = POSE_OK;
|
||
pImpt->MagUseState[0] = POSE_OK;
|
||
pImpt->MagUseState[1] = POSE_OK;
|
||
|
||
memset(PMag->Mag_Bb,0.0,3*sizeof(TYPE_CAL));
|
||
memset(PMag->Mag_BbPre,0.0,3*sizeof(TYPE_CAL));
|
||
|
||
for (i = 0; i < MAG_NUM; i++)
|
||
{
|
||
//PMag->MagIn_Valid[i]= POSE_OK; //模拟磁强计A/B有效标志
|
||
//输出量
|
||
memset(PMag->Mag_Bc_MeaAB[i],0.0,3*sizeof(TYPE_CAL));
|
||
memset(PMag->Mag_Bb_MeaAB[i],0.0,3*sizeof(TYPE_CAL));
|
||
}
|
||
PMag->MagIn_DataSta= 0;
|
||
|
||
//飞轮相关注数
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
tmpConst->Whl_J[i] = 0.0064;
|
||
pImpt->Whl_Use[i]=POSE_OK;
|
||
}
|
||
tmpConst->Whl_HCent[0]=0.5 * 0.7;
|
||
tmpConst->Whl_HCent[1]=-0.5 * 0.7;
|
||
tmpConst->Whl_HCent[2]=-0.732 * 0.7;
|
||
tmpConst->Whl_HCent[3]=1.018 * 0.7;
|
||
memset(PWhl->Whl_Rate,0,4*sizeof(TYPE_CAL));
|
||
memset(PWhl->Whl_RatePre,0,4*sizeof(TYPE_CAL));
|
||
memset(PWhl->Whl_Time,0,4*sizeof(UINT32));
|
||
memset(PWhl->Whl_TimePRE,0,4*sizeof(UINT32));
|
||
pCmdDsp->Wheel_Cmd_Cnt = 0;
|
||
pREcheck->WhlUseState= 0x0f;
|
||
PWhl->Whl_UseCnt=4;
|
||
tmpConst->WheelD_NomSpeed = 2000; //rpm
|
||
tmpConst->WheelD_SpeedErrThr = 100; //20230104
|
||
tmpConst->WheelD_Default = 0.03;
|
||
tmpConst->WheelD_AllDefault = 0.04;
|
||
memset(PWhl->Whl_WorkMode, WHL_CMD_CODE_RATE, 4*sizeof(UINT8));
|
||
tmpConst->Whl_ID[0]=0x01;
|
||
tmpConst->Whl_ID[1]=0x01;
|
||
tmpConst->Whl_ID[2]=0x01;
|
||
tmpConst->Whl_ID[3]=0x01;
|
||
|
||
#ifndef MINMODULE_TYPE
|
||
//PPU
|
||
//tmpAtt->sErrCtlPara.AttPPUOnReq = POSE_NO;
|
||
//tmpAtt->sErrCtlPara.AttPPUOffReq = POSE_NO;
|
||
pImpt->PPUUseStatus=POSE_OK;
|
||
pImpt->PPUSafeStatus=POSE_OK;
|
||
PPPU->PPUOUT_Sta = POSE_IN; //PPU 数据无效原因
|
||
PPPU->PPUIn_ReCnt= 0; //PPU遥测请求计数
|
||
PPPU->PPUNoUse_Cnt= 0;
|
||
PPPU->PPUIn_ReCntPre= 0; //PPU上一拍遥测请求计数
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
PPPU->PPUT_FIR_Start[i] =i;
|
||
PPPU->PPUT_FIR_End[i] = i;
|
||
}
|
||
tmpConst->AttCmdFlashPara.PPUT_FIR_EndLast = 0;
|
||
|
||
PPPU->PPUT_FIR_Sum = 0;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
PPPU->PPUT_FIR_CntS = 0;
|
||
PPPU->PPUT_FIR_SumCnt = 0;
|
||
tmpConst->AttCmdFlashPara.WorkModeChangeAuto=POSE_NO; //二次电话允许标准
|
||
//tmpConst->AttCmdFlashPara.PPUPVK = 0.1065;
|
||
//tmpConst->AttCmdFlashPara.PPUPAK = 0.000605;
|
||
//tmpConst->AttCmdFlashPara.PPUPVB = -1.4477;
|
||
//tmpConst->AttCmdFlashPara.PPUPAB = -0.0107;
|
||
tmpConst->AttCmdFlashPara.PPUPVK = 0.1;
|
||
tmpConst->AttCmdFlashPara.PPUPAK = 0.001;
|
||
tmpConst->AttCmdFlashPara.PPUPVB = 0.0;
|
||
tmpConst->AttCmdFlashPara.PPUPAB = 0.0;
|
||
PPPU->PPUIn_FIREOK = 0; //点火成功标志
|
||
PPPU->PPUIn_FIREOKPre = 0; //点火成功标志
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_NO; /*轨控正常退出标志*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0; /*轨控正常退出节拍计数*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_NO; /*轨控异常退出标志*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0; /*轨控正常异常节拍计数*/
|
||
|
||
#endif
|
||
//磁力矩器
|
||
tmpConst->Mag_Bb_CtrlMax=100.0; //磁力矩器最大输出磁矩 50
|
||
tmpConst->Mag_Kp[0]=0.001; //比例微分系数为
|
||
tmpConst->Mag_Kp[1]=0.001; //比例微分系数为
|
||
tmpConst->Mag_Kp[2]=0.001; //比例微分系数为
|
||
tmpConst->Mag_Kd[0]=2.4;
|
||
tmpConst->Mag_Kd[1]=2.4;
|
||
tmpConst->Mag_Kd[2]=2.4;
|
||
|
||
tmpConst->Mag_KpFBZK[0]=0.001; //比例微分系数为
|
||
tmpConst->Mag_KpFBZK[1]=0.001; //比例微分系数为
|
||
tmpConst->Mag_KpFBZK[2]=0.001; //比例微分系数为
|
||
tmpConst->Mag_KdFBZK[0]=2.4;
|
||
tmpConst->Mag_KdFBZK[1]=2.4;
|
||
tmpConst->Mag_KdFBZK[2]=2.4;
|
||
|
||
tmpConst->Mag_WTOSUN =-0.5*ANG2RADIAN;
|
||
tmpConst->Mag_FBZKWTOSUN =0.3*ANG2RADIAN;
|
||
tmpConst->Mag_ATTTOSUN =30.0 * ANG2RADIAN;
|
||
tmpConst->Mag_DampBdotMin=10.0; //磁控阻尼死区 10
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.MAG_LK[i][j]=28000.0;
|
||
tmpConst->AttCmdFlashPara.MAG_LB[i][j]=-70000.0;
|
||
}
|
||
}
|
||
pMt->MTCtrlTime = 0; //磁力矩器控制时间计数
|
||
pMt->MTStatus = 0;
|
||
tmpConst->MTCtrlTIME=8;
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[0]=0x00; //磁强计表头重构状态字
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[1]=0x00; //磁强计表头重构状态字
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[2]=0x00; //磁强计表头重构状态字
|
||
pImpt->MTUseStatus[0]=POSE_OK;
|
||
pImpt->MTUseStatus[1]=POSE_OK;
|
||
pImpt->MTUseStatus[2]=POSE_OK;
|
||
pImpt->MTUseStatus[3]=POSE_OK;
|
||
tmpConst->MTOutXYZLimit[0] = 100.0;
|
||
tmpConst->MTOutXYZLimit[1] = 100.0;
|
||
tmpConst->MTOutXYZLimit[2] = 50.0;
|
||
tmpConst->MTOutXYZLimit[3] = 50.0;
|
||
|
||
//帆板
|
||
pWMod->WModSadaOpen=POSE_NO;
|
||
pWMod->MiniDataSet =POSE_OK;
|
||
pWMod->WModSadaOpenPre=POSE_NO;
|
||
pWMod->ZKSadaOpen=POSE_NO;
|
||
|
||
//磁卸载
|
||
tmpConst->k1_dump = 0.5;
|
||
tmpConst->k2_dump = 0.3;
|
||
//tmpConst->ku_dump = 400000.0;
|
||
tmpConst->ku_dump = 500000.0;
|
||
tmpConst->MTAtt_dump = 45.0 *ANG2RADIAN ;
|
||
//轨道计算
|
||
pOrbitIn->OrbitVld=POSE_OK;
|
||
memset(pOrbitIn->JPos,0,3*sizeof(TYPE_CAL));
|
||
memset(pOrbitIn->JVel,0,3*sizeof(TYPE_CAL));
|
||
pOrbitIn->MJC=0; //儒略世纪
|
||
pOrbitIn->MJCLv=POSE_NO;
|
||
pOrbitIn->GAST=0; //格林尼治恒星时角
|
||
|
||
//PD控制
|
||
memset(pDeter->CLPAttAngRat,0,3*sizeof(TYPE_CAL));
|
||
memset(pDeter->CLPAttAngRatPre,0,3*sizeof(TYPE_CAL));
|
||
|
||
//PID控制器相关参数清零
|
||
memset(tmpAtt->sCtlPara.SumAerrPre, 0, 3*sizeof(TYPE_CAL)); //PID积分器清零
|
||
memset(tmpAtt->sCtlPara.WheelCtrlResultPre, 0, 3*sizeof(TYPE_CAL)); //前次控制器指令记录结果清零
|
||
tmpAtt->sCtlPara.PD2PIDCnt = 0;
|
||
tmpAtt->sCtlPara.CtrlPD2PID =0;
|
||
|
||
#ifndef MINMODULE_TYPE
|
||
//轨道控制
|
||
pOrb->CurOrbCtrlPcak_ID = 0x00;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
pOrb->OrbDataIn_OKCnt = 0x00;
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpOrbCmd->OrbCtrlPack[i],0,sizeof(AttOrbCtrlPara_t));
|
||
}
|
||
memset(&pOrb->OrbCtrlPackCur,0,sizeof(AttOrbCtrlPara_t));
|
||
//目标定向
|
||
pTAR->CurTARCtrlPcak_ID = 0;
|
||
pTAR->CurTARCtrlPcak_PreID = 0xFF;
|
||
pTAR->TARDataIn_OK = POSE_NO;
|
||
pTAR->TARDataIn_OKCnt = 0;
|
||
for (i = 0; i < 30; ++i)
|
||
{
|
||
pTAR->TARCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpTARCmd->TARCtrlPack[i],0,sizeof(sAttTARCCtlPara_t));
|
||
}
|
||
#endif
|
||
|
||
//定姿初始化
|
||
memset(pDeter->Qi,0,4*sizeof(TYPE_CAL));
|
||
memset(pDeter->Wi,0,3*sizeof(TYPE_CAL));
|
||
memset(pDeter->QiPre,0,4*sizeof(TYPE_CAL));
|
||
memset(pDeter->WiPre,0,3*sizeof(TYPE_CAL));
|
||
pDeter->Qi_Vld = POSE_NO; //卫星惯性系四元数有效标志
|
||
pDeter->QiPre_Vld = POSE_NO;
|
||
pDeter->PPUVld = POSE_NO;
|
||
pDeter->Wi_Vld = POSE_OK; //卫星惯性系角速度有效标志
|
||
tmpConst->GyroINT_TLimt = 2400;
|
||
pDeter->GyroINT_Time= 0;
|
||
|
||
//导引律初始化
|
||
pGuide->CaptureSunCnt=0;
|
||
|
||
//姿控初始化
|
||
tmpConst->AccThru_Up[0]= 0;
|
||
tmpConst->AccThru_Up[1]= 0;
|
||
tmpConst->AccThru_Up[2]= -8.0E-5;
|
||
//姿态确定参数初始化
|
||
tmpAtt->sCtlPara.IsDump = POSE_NO;
|
||
|
||
//磁力矩器输出
|
||
pCtrl->MagCtrlResult[0] =0.0;
|
||
pCtrl->MagCtrlResult[1] =0.0;
|
||
pCtrl->MagCtrlResult[2] =0.0;
|
||
pCtrl->MagCtrlXYZZ[0] =0.0;
|
||
pCtrl->MagCtrlXYZZ[1] =0.0;
|
||
pCtrl->MagCtrlXYZZ[2] =0.0;
|
||
pCtrl->MagCtrlXYZZ[3] =0.0;
|
||
//tmpAtt->AttData3T2Para.AttCtlBKFlag = POSE_NO;
|
||
//帆板flash数据初始化
|
||
tmpAtt->ATSFlashPara.SHDepartCntlimt1 =0;
|
||
/*读取flash区间数据*/
|
||
ATTRestoreFromFlash();
|
||
|
||
/*三取二设置*/
|
||
ATTImportDataBackup();
|
||
|
||
/*重启/切机/复位 发送异常PPU关动作,不关电源只关点火*/
|
||
dev_can_write(DEV_NO_CAN0, PPUOff, 8);
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
///*重启/切机/复位 飞轮转速电流给0*/
|
||
//SetWheel(1,0,WHL_CMD_CODE_CURR);
|
||
//SetWheel(2,0,WHL_CMD_CODE_CURR);
|
||
//SetWheel(3,0,WHL_CMD_CODE_CURR);
|
||
//SetWheel(4,0,WHL_CMD_CODE_CURR);
|
||
|
||
/*重启/切机/复位 输出磁力矩占控比为0*/
|
||
magnetic_out(0x11, 0, 0, 0);
|
||
magnetic_out(0x22, 0, 0, 0);
|
||
magnetic_out(0x33, 0, 0, 0);
|
||
magnetic_out(0x44, 0, 0, 0);
|
||
|
||
|
||
return result;
|
||
}
|
||
|
||
|
||
/***********************************************
|
||
说明:姿控指令处理
|
||
***********************************************/
|
||
void ZKCmdResolve(void)
|
||
{
|
||
UINT8 i= 0x00;
|
||
UINT8 j= 0x00;
|
||
UINT8 k= 0x00;
|
||
UINT8 tmpCmd[MOD_REQ_MAXLEN]= {0x00};
|
||
UINT8 tmpWhlCmd[MOD_REQ_MAXLEN]= {0x00};
|
||
UINT16 tmpCmdCode = 0; //指令码
|
||
UINT8 tmpOffset = 0x02; //指令码偏移
|
||
UINT8 *tmpData= 0x00;
|
||
UINT8 tmpDevNO = 0x00;
|
||
|
||
UINT32 tmpiDataLength= 0x00; /*数据长度*/
|
||
UINT32 tmpiDataLength1= 0x00; /*数据长度*/
|
||
UINT16 tmpiDataType =0; /*数据类型*/
|
||
UINT16 tmpiDataCheck=0; /*数据校验和*/
|
||
UINT16 tmpiDataCheck1=0; /*数据校验和*/
|
||
|
||
TYPE_CAL tmpWlimit=0.0;
|
||
TYPE_CAL tmpAlimit=0.0;
|
||
TYPE_CAL tmpAngm=0.0;
|
||
UINT16 tmpTimeLmt=0;
|
||
UINT16 tmpTimeLmt1=0;
|
||
UINT8 tmpWorkMod= 0x00;
|
||
UINT8 tmpWorkModPre= 0x00;
|
||
UINT8 tmpCOMDCHOICE= 0x00;
|
||
UINT32 SatTime[2]= {0x00,0x00};
|
||
TYPE_CAL DETLTime1= 0.0;
|
||
TYPE_CAL DETLTime2= 0.0;
|
||
UINT8 PPUOff[8] = {0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||
|
||
sTaskMngDataRecord * tmpTaskMngDataRcd = NULL;
|
||
sAttPriData *tmpAtt= NULL;
|
||
AttCtrlConst_t *tmpConst= NULL;
|
||
sAttOrbitCtlData_t *tmpOrbCmd= NULL;
|
||
sAttTARCCtlData_t *tmpTARCCmd= NULL;
|
||
sAttOrbitCtlInfo_t *pOrb= NULL;
|
||
sAttTARCCtlInfo_t *pTARC= NULL;
|
||
sAttModPara_t *pWMod= NULL;
|
||
AttIMPTPara_t *pIMU= NULL;
|
||
PPUPara_t *PPPU= NULL;
|
||
sTaskInfo *tmpCollectInfo = (sTaskInfo *)GetTaskInfoBT(TASK_COLLECT);
|
||
tmpTaskMngDataRcd = (sTaskMngDataRecord *)ST_TASKMNG_ADDR;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
tmpOrbCmd=(sAttOrbitCtlData_t *)ATTCLT_DATA3_ADDR;
|
||
tmpTARCCmd=(sAttTARCCtlData_t *)ATTCLT_DATA6_ADDR;
|
||
if((NULL == tmpAtt) || (NULL ==tmpConst) || (NULL ==tmpOrbCmd) || (NULL ==tmpTARCCmd)|| (NULL ==tmpCollectInfo)|| (NULL ==tmpTaskMngDataRcd))
|
||
{
|
||
return ;
|
||
}
|
||
pOrb=&tmpAtt->sOrbitInp;
|
||
pTARC=&tmpAtt->sTARCInp;
|
||
pIMU=&tmpAtt->sIMPTPara;
|
||
pWMod=&tmpAtt->sModePara;
|
||
PPPU = &tmpAtt->sPerPara.PPUPara;
|
||
|
||
while(BlockRingGet(&(m_pZKTaskInfo->sCmdBuffer), tmpCmd, TRUE))
|
||
{
|
||
/*处理每个命令*/
|
||
tmpCmdCode = DoGetInt16From8(tmpCmd + tmpOffset);
|
||
m_pZKTaskInfo->iCmdLast = tmpCmdCode;
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_NOERR;
|
||
m_pZKTaskInfo->iCmdCount++;
|
||
//获取注数缓存地址
|
||
tmpData=(UINT8*)(tmpCmd + tmpOffset +2);
|
||
|
||
switch(tmpCmdCode)
|
||
{
|
||
/****************安全模式软指令*************************/
|
||
case ATT_SAFEMODE_SAFE1://整星安全模式1
|
||
{
|
||
pOrb->CurOrbCtrlPcak_ID = 0x00;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpOrbCmd->OrbCtrlPack[i],0,sizeof(AttOrbCtrlPara_t));
|
||
}
|
||
memset(&pOrb->OrbCtrlPackCur,0,sizeof(AttOrbCtrlPara_t));
|
||
|
||
pIMU->PPUUseStatus=POSE_NO;
|
||
pIMU->PPUSafeStatus=POSE_NO;
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
if ((ATTMOD_ATTAJUSTPRE == pWMod->WorkMode)||(ATTMOD_ORBITCTL == pWMod->WorkMode))
|
||
{
|
||
/*设置工作模式 速率阻尼*/
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case ATT_SAFEMODE_SAFE2://整星安全模式2
|
||
{
|
||
/*设置工作模式 速率阻尼*/
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
pOrb->CurOrbCtrlPcak_ID = 0x00;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpOrbCmd->OrbCtrlPack[i],0,sizeof(AttOrbCtrlPara_t));
|
||
}
|
||
memset(&pOrb->OrbCtrlPackCur,0,sizeof(AttOrbCtrlPara_t));
|
||
|
||
pIMU->PPUUseStatus=POSE_NO;
|
||
pIMU->PPUSafeStatus=POSE_NO;
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
break;
|
||
}
|
||
|
||
case ATT_SAFEMODE_SAFE3://整星安全模式3
|
||
{
|
||
/*设置工作模式 磁控对日*/
|
||
ZKModDoSet(ATTMOD_MagTOSUN);
|
||
pOrb->CurOrbCtrlPcak_ID = 0x00;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpOrbCmd->OrbCtrlPack[i],0,sizeof(AttOrbCtrlPara_t));
|
||
}
|
||
memset(&pOrb->OrbCtrlPackCur,0,sizeof(AttOrbCtrlPara_t));
|
||
|
||
pIMU->PPUUseStatus=POSE_NO;
|
||
pIMU->PPUSafeStatus=POSE_NO;
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
break;
|
||
}
|
||
|
||
/**********************************模式控制指令*********************************/
|
||
//速率阻尼 0X22
|
||
case ATT_CMDMODE_MODSUNCAP:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
/*设置工作模式 速率阻尼*/
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
if(0xAA55 == DoGetInt16From8(tmpData))
|
||
{
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
memset(&tmpAtt->sOrbitInp.OrbCtrlPackCur, 0, sizeof(AttOrbCtrlPara_t));
|
||
memset(&tmpOrbCmd->OrbCtrlPack, 0, 50*sizeof(AttOrbCtrlPara_t));
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
/*清轨道包,当前拍的关PPU动作*/
|
||
dev_can_write(DEV_NO_CAN0, PPUOff, 8);
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
pTARC->CurTARCtrlPcak_ID=0;
|
||
pTARC->CurTARCtrlPcak_PreID =0xFF;
|
||
memset(&tmpAtt->sTARCInp.TARCtrlPackCur, 0, sizeof(sAttTARCCtlPara_t));
|
||
memset(&tmpTARCCmd->TARCtrlPack, 0, 30*sizeof(sAttTARCCtlPara_t));
|
||
pTARC->TARDataIn_OK = POSE_NO;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
//轮控对日定向0X33
|
||
case ATT_CMDMODE_WhlTOSUN:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
/*设置工作模式 轮控对日*/
|
||
ZKModDoSet(ATTMOD_WhlTOSUN);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
//磁控对日定向0X44
|
||
case ATT_CMDMODE_MagTOSUN:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
/*设置工作模式 磁控对日*/
|
||
ZKModDoSet(ATTMOD_MagTOSUN);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
//对地定向0X55
|
||
case ATT_CMDMODE_ONLTOEARTH:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
if((ATTMOD_RATEDMP == pWMod->WorkMode)
|
||
||(ATTMOD_WhlTOSUN == pWMod->WorkMode)
|
||
||(ATTMOD_MagTOSUN == pWMod->WorkMode)
|
||
||(ATTMOD_ATTAJUSTPRE == pWMod->WorkMode)
|
||
||(ATTMOD_ORBITCTL == pWMod->WorkMode)
|
||
||(ATTMOD_ATTAJUST == pWMod->WorkMode)
|
||
||(ATTMOD_ONLTOTAR == pWMod->WorkMode)
|
||
)
|
||
{
|
||
/*设置工作模式 对地定向*/
|
||
ZKModDoSet(ATTMOD_ONLTOEARTH);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
//稳态对地0X66
|
||
case ATT_CMDMODE_WHEELTOEARTH:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
if((ATTMOD_ONLTOEARTH == pWMod->WorkMode)
|
||
||(ATTMOD_ORBITCTL == pWMod->WorkMode)
|
||
||(ATTMOD_ONLTOTAR == pWMod->WorkMode)
|
||
)
|
||
{
|
||
/*设置工作模式 稳态对地*/
|
||
ZKModDoSet(ATTMOD_WHEELTOEARTH);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
//无控模式0XBB
|
||
case ATT_CMDMODE_UNCTL:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
if((ATTMOD_WhlTOSUN == pWMod->WorkMode)
|
||
||(ATTMOD_MagTOSUN == pWMod->WorkMode)
|
||
||(ATTMOD_RATEDMP == pWMod->WorkMode)
|
||
)
|
||
{
|
||
/*设置工作模式 无控*/
|
||
ZKModDoSet(ATTMOD_UNCTL);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
case ATT_WORKMODE_ORBITCTLPRE: //轨控前调姿(0x3606
|
||
if((ATTMOD_WhlTOSUN == pWMod->WorkMode)/*当前模式为轮控对日*/
|
||
||(ATTMOD_WHEELTOEARTH == pWMod->WorkMode)/*当前模式为稳定对地*/
|
||
||(ATTMOD_ORBITCTL == pWMod->WorkMode)
|
||
)
|
||
{
|
||
/*设置工作模式 轨控前调姿*/
|
||
ZKModDoSet(ATTMOD_ATTAJUSTPRE);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
case ATT_WORKMODE_ORBITCTL : //轨控(0x3607)
|
||
if(ATTMOD_ATTAJUSTPRE == pWMod->WorkMode)/*当前模式为轨控前调姿*/
|
||
{
|
||
/*设置工作模式 轨控*/
|
||
ZKModDoSet(ATTMOD_ORBITCTL);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
case ATT_WORKMODE_ATTAJUST : /*(0x3611) 定向调姿*/
|
||
if((ATTMOD_WhlTOSUN == pWMod->WorkMode)/*当前模式为轮控对日*/
|
||
||(ATTMOD_WHEELTOEARTH == pWMod->WorkMode)/*当前模式为稳定对地*/
|
||
||(ATTMOD_ONLTOTAR == pWMod->WorkMode)
|
||
)
|
||
{
|
||
/*设置工作模式 定向前调姿*/
|
||
ZKModDoSet(ATTMOD_ATTAJUST);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
case ATT_WORKMODE_ONLTOTAR : /*(0x3612) 目标定向*/
|
||
if(ATTMOD_ATTAJUST == pWMod->WorkMode)/*当前模式为定向前调姿*/
|
||
{
|
||
/*设置工作模式 对目标定向*/
|
||
ZKModDoSet(ATTMOD_ONLTOTAR);
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
|
||
//轨道控制数据包上注
|
||
case ATT_CMDMODE_ORBITCTL:
|
||
{
|
||
tmpData=(UINT8*)(ATTCLT_DATA5_ADDR);
|
||
GetTime(SatTime);
|
||
memcpy(&(tmpiDataLength), tmpData, 4);
|
||
memcpy(&(tmpiDataType), tmpData+ 4, 2);
|
||
memcpy(&(tmpiDataCheck), tmpData+ 6, 2);
|
||
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpOrbCmd->OrbCtrlPack[i],0,sizeof(AttOrbCtrlPara_t));
|
||
}
|
||
tmpiDataLength1 = 1200;
|
||
if ( tmpiDataLength1 != tmpiDataLength)
|
||
{
|
||
pOrb->OrbDataIn_OK = 0x01;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
return ;
|
||
}
|
||
|
||
tmpiDataCheck1 =DoGetCheckSum(tmpData + sizeof(sSaveDataHead), tmpiDataLength);
|
||
|
||
if ((0x26==tmpiDataType)&&(tmpiDataCheck == tmpiDataCheck1))
|
||
{
|
||
pOrb->CurOrbCtrlPcak_ID = 0x00;
|
||
pOrb->CurOrbCtrlPcak_PreID = 0xFF ;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = 0x55;
|
||
for (i = 0; i < 50; ++i)
|
||
{
|
||
PPPU->PPUT_FIR_Start[i] =0;
|
||
PPPU->PPUT_FIR_End[i] = 0;
|
||
}
|
||
tmpConst->AttCmdFlashPara.PPUT_FIR_EndLast = 0;
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
PPPU->PPUT_FIR_CntS = 0;
|
||
|
||
|
||
for (i = 0; i < 50; i++)
|
||
{
|
||
memcpy(&(tmpDevNO), tmpData + i * 24 + sizeof(sSaveDataHead) , sizeof(UINT8));
|
||
if ((tmpDevNO>=1)&&(tmpDevNO<=50)&&(i +1==tmpDevNO))
|
||
{
|
||
//拷贝数据
|
||
memcpy(&(tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrlPcak_ID), (UINT8*)(tmpData + i * 24+ sizeof(sSaveDataHead)), sizeof(UINT8));
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbAttAjustTime=DoGetInt32From8(tmpData + i * 24 + sizeof(sSaveDataHead) +1);
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrAng[0]= DoGetFloatFrom8(tmpData + i * 24 + sizeof(sSaveDataHead) +5);
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrAng[1]= DoGetFloatFrom8(tmpData + i * 24 + sizeof(sSaveDataHead) +9);
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrAng[2]= DoGetFloatFrom8(tmpData + i * 24 + sizeof(sSaveDataHead) +13);
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrl_StartTime=DoGetInt32From8(tmpData + i * 24 + sizeof(sSaveDataHead) +17);
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrl_TimeLength=DoGetInt16From8(tmpData + i * 24 + sizeof(sSaveDataHead) +21);
|
||
memcpy(&(tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrl_Mod), (UINT8*)(tmpData + i * 24 + sizeof(sSaveDataHead) +23), sizeof(UINT8));
|
||
|
||
tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbDateSum =DoGetCheckSum(&(tmpOrbCmd->OrbCtrlPack[tmpDevNO-1].OrbCtrlPcak_ID), 24);
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[tmpDevNO-1]=0x55 ;
|
||
|
||
}
|
||
}
|
||
|
||
if ((tmpOrbCmd->OrbCtrlPack[0].OrbAttAjustTime > SatTime[0])&&(tmpOrbCmd->OrbCtrlPack[0].OrbCtrl_StartTime > SatTime[0]))
|
||
{
|
||
PPPU->PPUT_FIR_Cnt = 1;
|
||
for (i = 1; i < 50; i++)
|
||
{
|
||
if (0x55 == pOrb->OrbCtrlPcak_ReceiveFlg[i])
|
||
{
|
||
PPPU->PPUT_FIR_Cnt = i +1;
|
||
DETLTime1 = (TYPE_CAL)tmpOrbCmd->OrbCtrlPack[i].OrbAttAjustTime - (TYPE_CAL)tmpOrbCmd->OrbCtrlPack[i -1].OrbCtrl_StartTime - (TYPE_CAL)tmpOrbCmd->OrbCtrlPack[i -1].OrbCtrl_TimeLength;
|
||
DETLTime2 = (TYPE_CAL)tmpOrbCmd->OrbCtrlPack[i].OrbCtrl_StartTime - (TYPE_CAL)tmpOrbCmd->OrbCtrlPack[i].OrbAttAjustTime;
|
||
if ((DETLTime1 < 0.0)|| (DETLTime2 < 0.0))
|
||
{
|
||
pOrb->OrbDataIn_OK = 0x02;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
PPPU->PPUT_FIR_CntS = 0;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
PPPU->PPUT_FIR_CntS = 0;
|
||
pOrb->OrbDataIn_OK = 0x02;
|
||
}
|
||
|
||
if ((PPPU->PPUT_FIR_Cnt >= 1)&&(PPPU->PPUT_FIR_Cnt <= 50)&&(0x55 == pOrb->OrbDataIn_OK))
|
||
{
|
||
if ((tmpOrbCmd->OrbCtrlPack[PPPU->PPUT_FIR_Cnt-1].OrbCtrl_Mod == 0x55) ||(tmpOrbCmd->OrbCtrlPack[PPPU->PPUT_FIR_Cnt-1].OrbCtrl_Mod == 0x44))
|
||
{
|
||
pOrb->OrbDataIn_OK = 0x55;
|
||
PPPU->PPUT_FIR_CntS =PPPU->PPUT_FIR_Cnt;
|
||
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
//PPU关机指令
|
||
dev_can_write(DEV_NO_CAN0, PPUOff, 8);/*轨控正常退出,电推关机操作,需要5秒后给电推供电*/
|
||
}
|
||
else
|
||
{
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
PPPU->PPUT_FIR_CntS = 0;
|
||
pOrb->OrbDataIn_OK = 0x04;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (i = 0; i < 50; i++)
|
||
{
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[i]=0x00 ;
|
||
}
|
||
pOrb->OrbDataIn_OK = 0x01;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
}
|
||
if (POSE_OK == pOrb->OrbDataIn_OK )
|
||
{
|
||
if(pOrb->OrbDataIn_OKCnt<60000)
|
||
{
|
||
pOrb->OrbDataIn_OKCnt++;
|
||
}
|
||
else
|
||
{
|
||
pOrb->OrbDataIn_OKCnt = 0;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
//对目标定向数据包上注
|
||
case ATT_CMDMODE_ONLTOTAR:
|
||
{
|
||
tmpData=(UINT8*)(ATTCLT_DATA4_ADDR);
|
||
GetTime(SatTime);
|
||
memcpy(&(tmpiDataLength), tmpData, 4);
|
||
memcpy(&(tmpiDataType), tmpData+ 4, 2);
|
||
memcpy(&(tmpiDataCheck), tmpData+ 6, 2);
|
||
tmpiDataCheck1 =DoGetCheckSum(tmpData + sizeof(sSaveDataHead), tmpiDataLength);
|
||
pTARC->TARDataIn_OK = POSE_OK;
|
||
for (i = 0; i < 30; ++i)
|
||
{
|
||
pTARC->TARCtrlPcak_ReceiveFlg[i]= 0x00;
|
||
memset(&tmpTARCCmd->TARCtrlPack[i],0,sizeof(sAttTARCCtlPara_t));
|
||
}
|
||
|
||
tmpiDataLength1 = 690;
|
||
if ( tmpiDataLength1 != tmpiDataLength)
|
||
{
|
||
pTARC->TARDataIn_OK = 0x02 ;
|
||
return ;
|
||
}
|
||
if ((0x25==tmpiDataType)&&(tmpiDataCheck == tmpiDataCheck1))
|
||
{
|
||
pTARC->CurTARCtrlPcak_ID = 0;
|
||
pTARC->CurTARCtrlPcak_PreID = 0xFF ;
|
||
for (i = 0; i < 30; i++)
|
||
{
|
||
memcpy(&(tmpDevNO), tmpData + i * 23 + sizeof(sSaveDataHead) , sizeof(UINT8));
|
||
if ((tmpDevNO>0)&&(tmpDevNO<=30)&&(i +1==tmpDevNO))
|
||
{
|
||
//拷贝数据
|
||
memcpy(&(tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrlPcak_ID), (UINT8*)(tmpData + i * 23+ sizeof(sSaveDataHead)), sizeof(UINT8));
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrl_JustTime= DoGetInt32From8(tmpData + i * 23 + sizeof(sSaveDataHead) +1);
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrAng[0]= DoGetFloatFrom8(tmpData + i * 23 + sizeof(sSaveDataHead) +5);
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrAng[1]= DoGetFloatFrom8(tmpData + i * 23 + sizeof(sSaveDataHead) +9);
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrAng[2]= DoGetFloatFrom8(tmpData + i * 23 + sizeof(sSaveDataHead) +13);
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrl_StartTime= DoGetInt32From8(tmpData + i * 23 + sizeof(sSaveDataHead) +17);
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrl_TimeLength= DoGetInt16From8(tmpData + i * 23 + sizeof(sSaveDataHead) +21);
|
||
|
||
tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrlDateSum=DoGetCheckSum(&(tmpTARCCmd->TARCtrlPack[tmpDevNO-1].TARCtrlPcak_ID), 23);
|
||
pTARC->TARCtrlPcak_ReceiveFlg[tmpDevNO-1]=0x55 ;
|
||
}
|
||
}
|
||
|
||
if ((tmpTARCCmd->TARCtrlPack[0].TARCtrl_JustTime > SatTime[0])&&(tmpTARCCmd->TARCtrlPack[0].TARCtrl_StartTime > SatTime[0]))
|
||
{
|
||
for (i = 1; i < 30; i++)
|
||
{
|
||
if (pTARC->TARCtrlPcak_ReceiveFlg[i])
|
||
{
|
||
DETLTime1 = (TYPE_CAL)tmpTARCCmd->TARCtrlPack[i].TARCtrl_JustTime - (TYPE_CAL)tmpTARCCmd->TARCtrlPack[i -1].TARCtrl_JustTime - (TYPE_CAL)tmpTARCCmd->TARCtrlPack[i -1].TARCtrl_TimeLength;
|
||
DETLTime2 = (TYPE_CAL)tmpTARCCmd->TARCtrlPack[i].TARCtrl_StartTime - (TYPE_CAL)tmpTARCCmd->TARCtrlPack[i].TARCtrl_JustTime;
|
||
if ((DETLTime1 < 0.0)|| (DETLTime2 < 0.0))
|
||
{
|
||
pTARC->TARDataIn_OK = 0x01;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
pTARC->TARDataIn_OK = 0x01;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (i = 0; i < 30; i++)
|
||
{
|
||
pTARC->TARCtrlPcak_ReceiveFlg[i]=0x00 ;
|
||
}
|
||
pTARC->TARDataIn_OK = 0x02 ;
|
||
}
|
||
|
||
if (POSE_OK == pTARC->TARDataIn_OK )
|
||
{
|
||
if(pTARC->TARDataIn_OKCnt<60000)
|
||
{
|
||
pTARC->TARDataIn_OKCnt++;
|
||
}
|
||
else
|
||
{
|
||
pTARC->TARDataIn_OKCnt = 0;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
case ATT_CMDMODE_ORBITCTLREQ: /* 载荷异步包请求 */
|
||
{
|
||
/* 遥测进程下发异步包 */
|
||
((sYaoCePackege*)GETPKGSTRUCT(TM_PKGNO_YB_32))->iCollectTime = 1;//自动开始组包,组包函数清除标识
|
||
break;
|
||
}
|
||
|
||
//模式自主切换
|
||
case ATT_CMDMODE_MODECHANG:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AttCmdFlashPara.WorkModeChangeAuto=POSE_NO;
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
|
||
case ATT_CMDMODE_NOMODECHANG:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AttCmdFlashPara.WorkModeChangeAuto=POSE_OK;
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
//单机间互校验
|
||
case ATT_CMDMODE_AllowCThr:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->Allow_Sensor_CThr=0x55;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
case ATT_CMDMODE_NOAllowCThr:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->Allow_Sensor_CThr=0x00;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
|
||
//清轨道包
|
||
case ATT_CMDOBITRESET:
|
||
{
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
memset(&tmpAtt->sOrbitInp.OrbCtrlPackCur, 0, sizeof(AttOrbCtrlPara_t));
|
||
memset(&tmpOrbCmd->OrbCtrlPack, 0, 50*sizeof(AttOrbCtrlPara_t));
|
||
ZKModDoSet(ATTMOD_ONLTOEARTH);
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
/*清轨道包,当前拍的关PPU动作*/
|
||
dev_can_write(DEV_NO_CAN0, PPUOff, 8);
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_NO;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
}
|
||
|
||
//清目标定向包
|
||
case ATT_CMDATTRESET:
|
||
{
|
||
pTARC->CurTARCtrlPcak_ID=0;
|
||
pTARC->CurTARCtrlPcak_PreID =0xFF;
|
||
memset(&tmpAtt->sTARCInp.TARCtrlPackCur, 0, sizeof(sAttTARCCtlPara_t));
|
||
memset(&tmpTARCCmd->TARCtrlPack, 0, 30*sizeof(sAttTARCCtlPara_t));
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
pTARC->TARDataIn_OK = POSE_NO;
|
||
break;
|
||
}
|
||
|
||
//姿态基准丢失
|
||
case ATT_CMDMODE_ATTLOSE:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AllowAttLoseDiagFlg = 0x55;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
case ATT_CMDMODE_NOATTLOSE:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AllowAttLoseDiagFlg = 0;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
|
||
//姿态超差
|
||
case ATT_CMDMODE_ATTEx:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AllowAttExDiagFlg = 0x55;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
case ATT_CMDMODE_NOATTEx:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AllowAttExDiagFlg = 0;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
|
||
//姿态不稳定
|
||
case ATT_CMDMODE_AttUnSta:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AllowAttStaDiagFlg = 0x55;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
case ATT_CMDMODE_NOAttUnSta:
|
||
{
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
tmpConst->AllowAttStaDiagFlg = 0;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
|
||
//模式切换相关参数
|
||
case ATT_CMDCODE_MODPARAM:
|
||
{
|
||
tmpWorkModPre = *tmpData;
|
||
tmpWorkMod = *(tmpData + 1);
|
||
tmpWlimit = DoGetFloatFrom8(tmpData+2)*ANG2RADIAN;
|
||
tmpAlimit = DoGetFloatFrom8(tmpData+6) *ANG2RADIAN;
|
||
tmpTimeLmt = DoGetInt16From8(tmpData+10);
|
||
tmpTimeLmt1 = DoGetInt16From8(tmpData+12);
|
||
tmpAngm = DoGetFloatFrom8(tmpData+14);
|
||
|
||
if((tmpWorkMod & 0x0F) > 0x0B)
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE;
|
||
break;
|
||
}
|
||
if(ATTMOD_NOCOLL == tmpWorkModPre) //1、碰撞规避模式
|
||
{
|
||
tmpConst->judge_time1=tmpTimeLmt;
|
||
}
|
||
else if(ATTMOD_RATEDMP == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time2 = tmpTimeLmt;
|
||
tmpConst->RateThr_2T3 =tmpWlimit;
|
||
tmpConst->HWHLThr_2T3 = tmpAngm;
|
||
}
|
||
else if(ATTMOD_WhlTOSUN == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time3 = tmpTimeLmt;
|
||
tmpConst->AttCmdFlashPara.judgeWait_time = tmpTimeLmt1;
|
||
tmpConst->AngThr_3TB = tmpAlimit;
|
||
tmpConst->RateThr_3TB = tmpWlimit;
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
}
|
||
else if(ATTMOD_MagTOSUN == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time4 = tmpTimeLmt;
|
||
tmpConst->AngThr_3TB = tmpAlimit;
|
||
tmpConst->RateThr_3TB = tmpWlimit;
|
||
}
|
||
else if(ATTMOD_ONLTOEARTH == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time5 = tmpTimeLmt;
|
||
tmpConst->AngThr_5T6 = tmpAlimit;
|
||
tmpConst->RateThr_5T6 = tmpWlimit;
|
||
}
|
||
else if(ATTMOD_WHEELTOEARTH == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time6 = tmpTimeLmt;
|
||
}
|
||
else if(ATTMOD_ATTAJUSTPRE == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time7 = tmpTimeLmt;
|
||
}
|
||
else if(ATTMOD_ORBITCTL == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time8 = tmpTimeLmt;
|
||
}
|
||
else if(ATTMOD_ATTAJUST == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time9 = tmpTimeLmt;
|
||
tmpConst->AngThr_9TA = tmpAlimit;
|
||
tmpConst->RateThr_9TA = tmpWlimit;
|
||
}
|
||
else if(ATTMOD_ONLTOTAR == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_timeA = tmpTimeLmt;
|
||
}
|
||
else if(ATTMOD_UNCTL == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_timeB = tmpTimeLmt;
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE; /*指令失败*/
|
||
}
|
||
break;
|
||
}
|
||
|
||
//太敏
|
||
case ATT_CMDCODE_ASS:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
tmpConst->Ass_MinFour_limt[0] = DoGetFloatFrom8(tmpData+1 +0); //4片模拟太敏电压阈值
|
||
tmpConst->Ass_MaxFour_limt[0] = DoGetFloatFrom8(tmpData+1 +4); //4片模拟太敏电压阈值
|
||
break;
|
||
}
|
||
case 0x22:
|
||
{
|
||
tmpConst->Ass_MinFour_limt[1] = DoGetFloatFrom8(tmpData+1 +0); //4片模拟太敏电压阈值
|
||
tmpConst->Ass_MaxFour_limt[1] = DoGetFloatFrom8(tmpData+1 +4); //4片模拟太敏电压阈值
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//互校验阈值上注
|
||
case ATT_CMDCROSSCHECKTHR:
|
||
{
|
||
tmpConst->SS_SS_CThr = DoGetFloatFrom8(tmpData)*ANG2RADIAN;
|
||
tmpConst->SS_ASS_CCThr = DoGetFloatFrom8(tmpData + 4)*ANG2RADIAN;
|
||
tmpConst->SS_ASS_CThr = DoGetFloatFrom8(tmpData + 8)*ANG2RADIAN;
|
||
tmpConst->AttCmdFlashPara.SS_MAG_CThr = DoGetFloatFrom8(tmpData + 12)*ANG2RADIAN;
|
||
tmpConst->SS_GYRO_CThr = DoGetFloatFrom8(tmpData + 16)*ANG2RADIAN;
|
||
tmpConst->GYRO_GYRO_CThr = DoGetFloatFrom8(tmpData + 20)*ANG2RADIAN;
|
||
tmpConst->MAG_MAG_CThr = DoGetFloatFrom8(tmpData + 24);
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//单机异常状态
|
||
case ATT_CMDCROSSERR:
|
||
{
|
||
tmpConst->AllowssONOFF[0] = *(tmpData );
|
||
tmpConst->AllowssONOFF[1] = *(tmpData +1);
|
||
tmpConst->AllowssONOFF[2] = *(tmpData +2);
|
||
tmpConst->AllowMagONOFF[0] = *(tmpData+3);
|
||
tmpConst->AllowMagONOFF[1] = *(tmpData +4);
|
||
tmpConst->AllowGyroONOFF[0] = *(tmpData +5);
|
||
tmpConst->AllowGyroONOFF[1] = *(tmpData +6);
|
||
tmpConst->AllowGyroONOFF[2] = *(tmpData +7);
|
||
tmpConst->AllowWhlONOFF[0] = *(tmpData +8);
|
||
tmpConst->AllowWhlONOFF[1] = *(tmpData +9);
|
||
tmpConst->AllowWhlONOFF[2] = *(tmpData +10);
|
||
tmpConst->AllowWhlONOFF[3] = *(tmpData +11);
|
||
tmpConst->AllowPPUONOFF = *(tmpData +12);
|
||
break;
|
||
}
|
||
|
||
//单机使用状态
|
||
case ATT_CMDCROSSUSE:
|
||
{
|
||
pIMU->SSUseState[0] = *(tmpData);
|
||
pIMU->SSUseState[1] = *(tmpData + 1);
|
||
pIMU->SSUseState[2] = *(tmpData + 2);
|
||
pIMU->AssUseState[0] = *(tmpData + 3);
|
||
pIMU->AssUseState[1] = *(tmpData + 4);
|
||
pIMU->AssUseState[2] = *(tmpData + 5);
|
||
pIMU->AssUseState[3] = *(tmpData + 6);
|
||
pIMU->AssUseState[4] = *(tmpData + 7);
|
||
pIMU->AssUseState[5] = *(tmpData + 8);
|
||
pIMU->MagUseState[0] = *(tmpData + 9);
|
||
pIMU->MagUseState[1] = *(tmpData + 10);
|
||
pIMU->GyroUseState[0] = *(tmpData + 11);
|
||
pIMU->GyroUseState[1] = *(tmpData + 12);
|
||
pIMU->GyroUseState[2] = *(tmpData + 13);
|
||
pIMU->Whl_Use[0] = *(tmpData + 14);
|
||
pIMU->Whl_Use[1] = *(tmpData + 15);
|
||
pIMU->Whl_Use[2] = *(tmpData + 16);
|
||
pIMU->Whl_Use[3] = *(tmpData + 17);
|
||
pIMU->MTUseStatus[0] = *(tmpData + 18);
|
||
pIMU->MTUseStatus[1] = *(tmpData + 19);
|
||
pIMU->MTUseStatus[2] = *(tmpData + 20);
|
||
pIMU->MTUseStatus[3] = *(tmpData + 21);
|
||
pIMU->PPUUseStatus= *(tmpData + 22);
|
||
break;
|
||
}
|
||
|
||
//单机重构状态注入
|
||
case ATT_CMDCROSS:
|
||
{
|
||
//星敏优先级
|
||
if (*(tmpData+0) != *(tmpData +1))
|
||
{
|
||
if (*(tmpData+0) != *(tmpData +2))
|
||
{
|
||
tmpConst->SSUsePrior[0]= *(tmpData) ;
|
||
tmpConst->SSUsePrior[1]= *(tmpData +1) ;
|
||
tmpConst->SSUsePrior[2]= *(tmpData +2) ;
|
||
}
|
||
}
|
||
|
||
//陀螺优先级
|
||
if (*(tmpData+3) != *(tmpData +4))
|
||
{
|
||
if (*(tmpData+3) != *(tmpData +5))
|
||
{
|
||
tmpConst->GyroUsePrior[0]= *(tmpData +3) ;
|
||
tmpConst->GyroUsePrior[1]= *(tmpData +4) ;
|
||
tmpConst->GyroUsePrior[2]= *(tmpData +5) ;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case ATT_CMDCREUSE:
|
||
{
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[0] = *(tmpData);
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[1] = *(tmpData+1);
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[2] = *(tmpData+2);
|
||
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[0] = *(tmpData+3);
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[1] = *(tmpData+4);
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[2] = *(tmpData+5);
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//单机故障诊断条件
|
||
case ATT_CMDCROSSDIG:
|
||
{
|
||
tmpConst->ssDiagThr = DoGetInt16From8(tmpData) ;
|
||
tmpConst->MagDiagThr= DoGetInt16From8(tmpData +2) ;
|
||
tmpConst->GyroDiagThr= DoGetInt16From8(tmpData +4) ;
|
||
tmpConst->WhlDiag_ErrThr= DoGetInt16From8(tmpData +6) ; //判断时间阈值,单位,可上注
|
||
tmpConst->WhlDiag_TimeThr= DoGetInt16From8(tmpData +8) ; //判断时间阈值,单位,可上注
|
||
tmpConst->WhlTemperDiagThr= DoGetInt16From8(tmpData +10) ; //判断时间阈值,单位,可上注
|
||
break;
|
||
}
|
||
|
||
//PPU故障诊断条件
|
||
case ATT_CMDCPPUDIG:
|
||
{
|
||
tmpConst->PPUTXTimeLimit=DoGetInt16From8(tmpData ); //电推通信故障时间阈值30
|
||
tmpConst->PPUTATimeLimit=DoGetInt16From8(tmpData+2); //电推过流故障时间阈值60
|
||
tmpConst->AttCmdFlashPara.PPUTALimit=DoGetInt16From8(tmpData+4); //电推过流故障阈值 1.6
|
||
tmpConst->PPUTVTimeLimit=DoGetInt16From8(tmpData+6); //电推过压故障时间阈值60
|
||
tmpConst->AttCmdFlashPara.PPUTVLimit=DoGetInt16From8(tmpData+8); //电推过压故障阈值260
|
||
tmpConst->AttCmdFlashPara.PPUTFireLimit=DoGetInt16From8(tmpData+10); //电推点火故障阈值300
|
||
tmpConst->PPUTemperTimeLimit=DoGetInt16From8(tmpData+12); //电推温度故障时间阈值 10
|
||
tmpConst->AttCmdFlashPara.PPUHTemperLimit=DoGetInt16From8(tmpData+14); //电推温度故障上限阈值 30
|
||
tmpConst->AttCmdFlashPara.PPULTemperLimit=DoGetInt16From8(tmpData+16); //电推温度故障下限阈值 10
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//单机故障诊断时间
|
||
case ATT_CMDCDIGTIME:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
tmpConst->Ss_Delay_CntLimt =DoGetInt16From8(tmpData + 1) ; //星敏开机异常延迟判断计数
|
||
tmpConst->Ss_OK_CntLimt= DoGetInt16From8(tmpData+2+ 1) ; //星敏正常判断计数
|
||
tmpConst->Ss_Err_CntLimt= DoGetInt16From8(tmpData+4+ 1) ; //星敏异常判断计数
|
||
tmpConst->Ss_ReSet_CntLimt=DoGetInt16From8(tmpData+6+ 1) ; //星敏重启总次数
|
||
tmpConst->Ss_ReSetGAP_CntLimt=DoGetInt16From8(tmpData+8+ 1) ; //星敏重启间隔拍数
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
tmpConst->Mag_Delay_CntLimt =DoGetInt16From8(tmpData+ 1) ; //磁强计开机异常延迟判断计数
|
||
tmpConst->Mag_OK_CntLimt= DoGetInt16From8(tmpData+2+ 1) ; //磁强计正常判断计数
|
||
tmpConst->Mag_Err_CntLimt= DoGetInt16From8(tmpData+4+ 1) ; //磁强计异常判断计数
|
||
tmpConst->Mag_ReSet_CntLimt=DoGetInt16From8(tmpData+6+ 1) ; //磁强计重启总次数
|
||
tmpConst->Mag_ReSetGAP_CntLimt=DoGetInt16From8(tmpData+8+ 1) ; //磁强计重启间隔拍数
|
||
break;
|
||
}
|
||
case 0x33 :
|
||
{
|
||
tmpConst->Gyro_Delay_CntLimt =DoGetInt16From8(tmpData+ 1) ; //陀螺开机异常延迟判断计数
|
||
tmpConst->Gyro_OK_CntLimt= DoGetInt16From8(tmpData+2+ 1) ; //陀螺正常判断计数
|
||
tmpConst->Gyro_Err_CntLimt= DoGetInt16From8(tmpData+4+ 1) ; //陀螺异常判断计数
|
||
tmpConst->Gyro_ReSet_CntLimt=DoGetInt16From8(tmpData+6+ 1) ; //陀螺重启总次数
|
||
tmpConst->Gyro_ReSetGAP_CntLimt=DoGetInt16From8(tmpData+8+ 1) ; //陀螺重启间隔拍数
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
tmpConst->Whl_Delay_CntLimt =DoGetInt16From8(tmpData+ 1) ; //飞轮开机异常延迟判断计数
|
||
tmpConst->Whl_OK_CntLimt= DoGetInt16From8(tmpData+2+ 1) ; //飞轮正常判断计数
|
||
tmpConst->Whl_Err_CntLimt= DoGetInt16From8(tmpData+4+ 1) ; //飞轮异常判断计数
|
||
tmpConst->Whl_ReSet_CntLimt=DoGetInt16From8(tmpData+6+ 1) ; //飞轮重启总次数
|
||
tmpConst->Whl_ReSetGAP_CntLimt=DoGetInt16From8(tmpData+8+ 1) ; //飞轮重启间隔拍数
|
||
break;
|
||
}
|
||
case 0x55 :
|
||
{
|
||
tmpConst->PPU_Delay_CntLimt =DoGetInt16From8(tmpData+ 1) ; //飞轮开机异常延迟判断计数
|
||
tmpConst->PPU_OK_CntLimt= DoGetInt16From8(tmpData+2+ 1) ; //飞轮正常判断计数
|
||
tmpConst->PPU_Err_CntLimt= DoGetInt16From8(tmpData+4+ 1) ; //飞轮异常判断计数
|
||
tmpConst->PPU_ReSet_CntLimt=DoGetInt16From8(tmpData+6+ 1) ; //飞轮重启总次数
|
||
tmpConst->PPU_ReSetGAP_CntLimt=DoGetInt16From8(tmpData+8+ 1) ; //飞轮重启间隔拍数
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//基准丢失故障诊断条件
|
||
case ATT_CMDCDIGLOSE:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case ATTMOD_RATEDMP :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[0] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_WhlTOSUN:
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[1] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_MagTOSUN :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[2] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_ONLTOEARTH :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[3] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_WHEELTOEARTH :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[4] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_ATTAJUSTPRE :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[5] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_ORBITCTL :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[6] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_ATTAJUST :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[7] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
case ATTMOD_ONLTOTAR :
|
||
{
|
||
tmpConst->TimeThr_AttLoseDiag[8] = DoGetInt16From8(tmpData+1 );
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//超差故障诊断条件
|
||
case ATT_CMDCDIGEX:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case ATTMOD_RATEDMP :
|
||
{
|
||
tmpConst->TimeThr_AttEx[0] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[0] = DoGetFloatFrom8(tmpData+1 +2) *ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[0] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
case ATTMOD_WhlTOSUN:
|
||
{
|
||
tmpConst->TimeThr_AttEx[1] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[1] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[1] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
case ATTMOD_MagTOSUN :
|
||
{
|
||
tmpConst->TimeThr_AttEx[2] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[2] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[2] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ONLTOEARTH :
|
||
{
|
||
tmpConst->TimeThr_AttEx[3] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[3] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[3] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_WHEELTOEARTH :
|
||
{
|
||
tmpConst->TimeThr_AttEx[4] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[4] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[4] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
tmpConst->YawCntLimit = DoGetInt16From8(tmpData+1+10 );
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ATTAJUSTPRE :
|
||
{
|
||
tmpConst->TimeThr_AttEx[5] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[5] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[5] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ORBITCTL :
|
||
{
|
||
tmpConst->TimeThr_AttEx[6] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[6] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[6] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ATTAJUST :
|
||
{
|
||
tmpConst->TimeThr_AttEx[7] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[7] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[7] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ONLTOTAR :
|
||
{
|
||
tmpConst->TimeThr_AttEx[8] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->RateThr_AttEx[8] = DoGetFloatFrom8(tmpData+1 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttEx[8] = DoGetFloatFrom8(tmpData+1 +6)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//姿态不稳定故障诊断条件
|
||
case ATT_CMDCDIGNOSTATE:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case ATTMOD_RATEDMP :
|
||
{
|
||
tmpConst->TimeThr_AttUnSta[0] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->TimeMod_AttUnSta[0] = DoGetInt16From8(tmpData+1 +2 );
|
||
tmpConst->RateThr_AttUnSta[0] = DoGetFloatFrom8(tmpData+1 +2 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttUnSta[0] = DoGetFloatFrom8(tmpData+1 +4 +4)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
case ATTMOD_WhlTOSUN:
|
||
{
|
||
tmpConst->TimeThr_AttUnSta[1] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->TimeMod_AttUnSta[1] = DoGetInt16From8(tmpData+1 +2 );
|
||
tmpConst->RateThr_AttUnSta[1] = DoGetFloatFrom8(tmpData+1 +2 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttUnSta[1] = DoGetFloatFrom8(tmpData+1 +4 +4)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
case ATTMOD_MagTOSUN :
|
||
{
|
||
tmpConst->TimeThr_AttUnSta[2] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->TimeMod_AttUnSta[2] = DoGetInt16From8(tmpData+1 +2 );
|
||
tmpConst->RateThr_AttUnSta[2] = DoGetFloatFrom8(tmpData+1 +2 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttUnSta[2] = DoGetFloatFrom8(tmpData+1 +4 +4)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ONLTOEARTH :
|
||
{
|
||
tmpConst->TimeThr_AttUnSta[3] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->TimeMod_AttUnSta[3] = DoGetInt16From8(tmpData+1 +2 );
|
||
tmpConst->RateThr_AttUnSta[3] = DoGetFloatFrom8(tmpData+1 +2 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttUnSta[3] = DoGetFloatFrom8(tmpData+1 +4 +4)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
|
||
case ATTMOD_ATTAJUSTPRE :
|
||
{
|
||
tmpConst->TimeThr_AttUnSta[4] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->TimeMod_AttUnSta[4] = DoGetInt16From8(tmpData+1 +2 );
|
||
tmpConst->RateThr_AttUnSta[4] = DoGetFloatFrom8(tmpData+1 +2 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttUnSta[4] = DoGetFloatFrom8(tmpData+1 +4+4)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
case ATTMOD_ATTAJUST :
|
||
{
|
||
tmpConst->TimeThr_AttUnSta[5] = DoGetInt16From8(tmpData+1 );
|
||
tmpConst->TimeMod_AttUnSta[5] = DoGetInt16From8(tmpData+1 +2 );
|
||
tmpConst->RateThr_AttUnSta[5] = DoGetFloatFrom8(tmpData+1 +2 +2)*ANG2RADIAN;
|
||
tmpConst->AngThr_AttUnSta[5] = DoGetFloatFrom8(tmpData+1 +4 +4)*ANG2RADIAN;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//配平轮转速力矩阈值
|
||
case ATT_CMDWHLSLIMT:
|
||
{
|
||
tmpConst->WheelD_NomSpeed = DoGetFloatFrom8(tmpData); //rpm
|
||
tmpConst->WheelD_SpeedErrThr = DoGetFloatFrom8(tmpData+4);
|
||
tmpConst->WheelD_Default = DoGetFloatFrom8(tmpData+8);
|
||
tmpConst->WheelD_AllDefault = DoGetFloatFrom8(tmpData+12);
|
||
break;
|
||
}
|
||
|
||
/**********************************安装矩阵*********************************/
|
||
//星敏安装矩阵注入
|
||
case ATT_CMDCODE_SSMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_SSA[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 + 1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_SSB[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 + 1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_SSC[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 + 1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//太敏安装矩阵注入
|
||
case ATT_CMDCODE_ASSMAT:
|
||
{
|
||
tmpDevNO = *tmpData; //太敏选择
|
||
if(0x11 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSA[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x22 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSB[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x33 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSC[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x44 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSD[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x55 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSE[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x66 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSF[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//磁强计安装矩阵注入
|
||
case ATT_CMDCODE_MAGMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for(k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAG[0][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for(k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAG[1][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//陀螺安装矩阵注入
|
||
case ATT_CMDCODE_GyroMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_GYRO[0][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_GYRO[1][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_GYRO[2][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//反作用轮安装矩阵注入
|
||
case ATT_CMDCODE_WHLMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][0] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][1] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][2] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case 0x88 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][3] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//磁力矩器安装矩阵注入
|
||
case ATT_CMDCODE_MTMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][0] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<4; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][1] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<4; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][2] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case 0x88 :
|
||
{
|
||
for(i=0; i<4; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][3] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//磁阻尼控制器注入
|
||
case ATT_CMDCODE_DMPPARA:
|
||
{
|
||
tmpConst->Mag_Bb_CtrlMax = DoGetFloatFrom8(tmpData);
|
||
tmpConst->Mag_DampBdotMin = DoGetFloatFrom8(tmpData+4);
|
||
tmpConst->MTCtrlTIME= DoGetInt16From8(tmpData+ 8);
|
||
break;
|
||
}
|
||
|
||
//磁控对日控制器参数注入
|
||
case ATT_CMDCODE_TOSUNPARA:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x55 :
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_Kp[i] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_Kd[i] = DoGetFloatFrom8(tmpData+i*4+12+1);
|
||
}
|
||
tmpConst->Mag_WTOSUN=DoGetFloatFrom8(tmpData + 12 + 12 +1) *ANG2RADIAN ;
|
||
break;
|
||
}
|
||
|
||
case 0xAA :
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_KpFBZK[i] = DoGetFloatFrom8(tmpData+i*4+1);
|
||
}
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_KdFBZK[i] = DoGetFloatFrom8(tmpData+i*4+ 12+1);
|
||
}
|
||
tmpConst->Mag_FBZKWTOSUN=DoGetFloatFrom8(tmpData + 12 + 12 +1) *ANG2RADIAN ;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
tmpConst->Mag_ATTTOSUN=DoGetFloatFrom8(tmpData + 12 + 12 + 4+1) *ANG2RADIAN ;
|
||
break;
|
||
}
|
||
|
||
//磁卸载控制器参数注入
|
||
case ATT_CMDCODE_MTCTRLPARA:
|
||
{
|
||
tmpConst->k1_dump = DoGetFloatFrom8(tmpData);
|
||
tmpConst->k2_dump = DoGetFloatFrom8(tmpData+4);
|
||
tmpConst->MTAtt_dump = DoGetFloatFrom8(tmpData+8) *ANG2RADIAN ;
|
||
tmpConst->ku_dump = DoGetFloatFrom8(tmpData+12);
|
||
break;
|
||
}
|
||
|
||
//飞轮PD控制器参数注入
|
||
case ATT_CMDCODE_PDCTRLPARA:
|
||
{
|
||
tmpWorkMod =*tmpData;
|
||
if (tmpWorkMod == 0xAA)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.kp_ToSun_PD[i] = DoGetFloatFrom8(tmpData+1+i*4);
|
||
tmpConst->AttCmdFlashPara.kd_ToSun_PD[i] = DoGetFloatFrom8(tmpData+13+i*4);
|
||
}
|
||
tmpConst->AttCmdFlashPara.w0max_PD = DoGetFloatFrom8(tmpData+13+12) * ANG2RADIAN;
|
||
tmpConst->AttCmdFlashPara.PD_Ts = DoGetFloatFrom8(tmpData+13+12 +4);
|
||
}
|
||
else if (tmpWorkMod == 0x55)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->kp_NoToSun_PD[i] = DoGetFloatFrom8(tmpData+1+i*4);
|
||
tmpConst->kd_NoToSun_PD[i] = DoGetFloatFrom8(tmpData+13+i*4);
|
||
}
|
||
tmpConst->w0max_NoPD = DoGetFloatFrom8(tmpData+13+12) * ANG2RADIAN;
|
||
tmpConst->PDNo_Ts = DoGetFloatFrom8(tmpData+13+12 +4);
|
||
}
|
||
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//PID控制器参数注入
|
||
case ATT_CMDCODE_PIDCTRLPARA:
|
||
{
|
||
//tmpData = tmpCmd + tmpOffset;
|
||
tmpWorkMod =*tmpData;
|
||
if (tmpWorkMod == 0xAA)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.kp_PID[i] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
tmpConst->AttCmdFlashPara.ki_PID[i] = DoGetFloatFrom8(tmpData+12+i*4+1);
|
||
tmpConst->AttCmdFlashPara.kd_PID[i] = DoGetFloatFrom8(tmpData+24+i*4+1);
|
||
}
|
||
tmpConst->AttCmdFlashPara.w0max_PID = DoGetFloatFrom8(tmpData+36+1) * ANG2RADIAN;
|
||
tmpConst->AttCmdFlashPara.PID_Ts = DoGetFloatFrom8(tmpData+40+1);
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
}
|
||
else if (tmpWorkMod == 0x55)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->kp_NoPID[i] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
tmpConst->ki_NoPID[i] = DoGetFloatFrom8(tmpData+12+i*4+1);
|
||
tmpConst->kd_NoPID[i] = DoGetFloatFrom8(tmpData+24+i*4+1);
|
||
}
|
||
tmpConst->w0max_NoPID = DoGetFloatFrom8(tmpData+36+1) * ANG2RADIAN;
|
||
tmpConst->PIDNo_Ts = DoGetFloatFrom8(tmpData+40+1);
|
||
}
|
||
|
||
|
||
break;
|
||
}
|
||
|
||
//陀螺零偏注入
|
||
case ATT_CMDCODE_GyroBIAS:
|
||
{
|
||
tmpWorkMod =*tmpData;
|
||
if (0x11==tmpWorkMod)
|
||
{
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[0][k] =DoGetFloatFrom8(tmpData+k*4 +1) * ANG2RADIAN; //陀螺零偏
|
||
}
|
||
}
|
||
else if (0x22==tmpWorkMod)
|
||
{
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[1][k] =DoGetFloatFrom8(tmpData+k*4 +1) * ANG2RADIAN; //陀螺零偏
|
||
}
|
||
}
|
||
else if (0x44==tmpWorkMod)
|
||
{
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[2][k] =DoGetFloatFrom8(tmpData+k*4 +1) * ANG2RADIAN; //陀螺零偏
|
||
}
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//陀螺标度因数注入
|
||
case ATT_CMDCODE_GyroPH:
|
||
{
|
||
|
||
tmpWorkMod =*tmpData;
|
||
if (0x11==tmpWorkMod)
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[0][i][j] =DoGetFloatFrom8(tmpData+i*12+j*4+1); //陀螺标度因数
|
||
}
|
||
}
|
||
}
|
||
else if (0x22==tmpWorkMod)
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[1][i][j] =DoGetFloatFrom8(tmpData+i*12+j*4+1); //陀螺标度因数
|
||
}
|
||
}
|
||
}
|
||
else if (0x44==tmpWorkMod)
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[2][i][j] =DoGetFloatFrom8(tmpData+i*12+j*4+1); //陀螺标度因数
|
||
}
|
||
}
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//卫星进出影判断值参数注入
|
||
case ATT_CMDCODE_BetaAng:
|
||
{
|
||
tmpConst->BetaAngLimit = DoGetFloatFrom8(tmpData) *ANG2RADIAN ;
|
||
break;
|
||
}
|
||
|
||
//飞轮ID选择参数注入
|
||
case ATT_CMDCODE_WhlID:
|
||
{
|
||
memset(tmpWhlCmd,0x00,5*sizeof(UINT8));
|
||
|
||
tmpWorkMod =*tmpData;
|
||
if (0x11==tmpWorkMod)
|
||
{
|
||
tmpConst->Whl_ID[0] =*(tmpData +1);
|
||
tmpWhlCmd[0] = 0x00;
|
||
tmpWhlCmd[1] = 0x03;
|
||
tmpWhlCmd[2] = tmpWorkMod ;
|
||
tmpWhlCmd[3] = tmpWorkMod ;
|
||
tmpWhlCmd[4] =tmpConst->Whl_ID[0];
|
||
}
|
||
else if (0x22==tmpWorkMod)
|
||
{
|
||
tmpConst->Whl_ID[1] =*(tmpData +1);
|
||
tmpWhlCmd[0] = 0x00;
|
||
tmpWhlCmd[1] = 0x03;
|
||
tmpWhlCmd[2] = tmpWorkMod ;
|
||
tmpWhlCmd[3] = tmpWorkMod ;
|
||
tmpWhlCmd[4] =tmpConst->Whl_ID[1];
|
||
}
|
||
else if (0x33==tmpWorkMod)
|
||
{
|
||
tmpConst->Whl_ID[2] =*(tmpData +1);
|
||
tmpWhlCmd[0] = 0x00;
|
||
tmpWhlCmd[1] = 0x03;
|
||
tmpWhlCmd[2] = tmpWorkMod ;
|
||
tmpWhlCmd[3] = tmpWorkMod ;
|
||
tmpWhlCmd[4] =tmpConst->Whl_ID[2];
|
||
}
|
||
else if (0x44==tmpWorkMod)
|
||
{
|
||
tmpConst->Whl_ID[3] =*(tmpData +1);
|
||
tmpWhlCmd[0] = 0x00;
|
||
tmpWhlCmd[1] = 0x03;
|
||
tmpWhlCmd[2] = tmpWorkMod ;
|
||
tmpWhlCmd[3] = tmpWorkMod ;
|
||
tmpWhlCmd[4] =tmpConst->Whl_ID[3];
|
||
}
|
||
BlockRingAdd(&tmpCollectInfo->sCmdBuffer,tmpWhlCmd,TRUE);
|
||
break;
|
||
}
|
||
|
||
//磁力矩器分配-磁矩限值
|
||
case ATT_CMDCODE_MTCTRL:
|
||
{
|
||
tmpConst->MTOutXYZLimit[0] = DoGetFloatFrom8(tmpData);
|
||
tmpConst->MTOutXYZLimit[1] = DoGetFloatFrom8(tmpData +4);
|
||
tmpConst->MTOutXYZLimit[2] = DoGetFloatFrom8(tmpData +8);
|
||
tmpConst->MTOutXYZLimit[3] = DoGetFloatFrom8(tmpData +12);
|
||
break;
|
||
}
|
||
|
||
//磁强计标定系数注入
|
||
case ATT_CMDCODE_MTBD:
|
||
{
|
||
memset(&tmpCOMDCHOICE,0x00,sizeof(UINT8));
|
||
tmpCOMDCHOICE =*tmpData;
|
||
if (0x11==tmpCOMDCHOICE)
|
||
{
|
||
for (i = 0; i< 3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.MAG_LK[0][i]=DoGetFloatFrom8(tmpData+i*4+1);
|
||
tmpConst->AttCmdFlashPara.MAG_LB[0][i]=DoGetFloatFrom8(tmpData+12+i*4+1);
|
||
}
|
||
}
|
||
else if (0x22==tmpCOMDCHOICE)
|
||
{
|
||
for (i = 0; i< 3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.MAG_LK[1][i]=DoGetFloatFrom8(tmpData+i*4+1);
|
||
tmpConst->AttCmdFlashPara.MAG_LB[1][i]=DoGetFloatFrom8(tmpData+12+i*4+1);
|
||
}
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//加速度
|
||
case ATT_CMDMODE_PPUAB:
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->AccThru_Up[i] = DoGetFloatFrom8(tmpData+i*4) * 0.001f;
|
||
}
|
||
break;
|
||
}
|
||
|
||
case ATT_CMDCODE_PPUBD:
|
||
{
|
||
tmpConst->AttCmdFlashPara.PPUPVK = DoGetFloatFrom8(tmpData);
|
||
tmpConst->AttCmdFlashPara.PPUPVB = DoGetFloatFrom8(tmpData +4);
|
||
tmpConst->AttCmdFlashPara.PPUPAK = DoGetFloatFrom8(tmpData +8);
|
||
tmpConst->AttCmdFlashPara.PPUPAB = DoGetFloatFrom8(tmpData +12);
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//姿态确定
|
||
case ATT_CMDCODE_GyroINTTLimt:
|
||
{
|
||
tmpConst->GyroINT_TLimt = DoGetInt16From8(tmpData);
|
||
break;
|
||
}
|
||
|
||
//安全模式PPU单机使用状态
|
||
case ATT_CMDCODE_SafePPU:
|
||
{
|
||
pIMU->PPUSafeStatus= *(tmpData);
|
||
break;
|
||
}
|
||
|
||
//安全模式PPU单机使用状态
|
||
case ATT_CMDCODE_WHLCENT:
|
||
{
|
||
tmpConst->Whl_HCent[0] = DoGetFloatFrom8(tmpData);
|
||
tmpConst->Whl_HCent[1] = DoGetFloatFrom8(tmpData +4);
|
||
tmpConst->Whl_HCent[2] = DoGetFloatFrom8(tmpData +8);
|
||
tmpConst->Whl_HCent[3] = DoGetFloatFrom8(tmpData +12);
|
||
break;
|
||
}
|
||
|
||
default:
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/***********************************************
|
||
说明:姿控指令处理
|
||
***********************************************/
|
||
void ZKMINICmdResolve(UINT8 *tmpCmd)
|
||
{
|
||
#ifdef MINMODULE_TYPE
|
||
UINT8 i= 0x00;
|
||
UINT8 j= 0x00;
|
||
UINT8 k= 0x00;
|
||
//UINT8 tmpCmd[MOD_REQ_MAXLEN]= {0x00};
|
||
//UINT8 tmpWhlCmd[MOD_REQ_MAXLEN]= {0x00};
|
||
UINT16 tmpCmdCode = 0; //指令码
|
||
UINT8 tmpOffset = 0x02; //指令码偏移
|
||
UINT8 *tmpData= 0x00;
|
||
UINT8 tmpDevNO = 0x00;
|
||
|
||
UINT32 tmpiDataLength= 0x00; /*数据长度*/
|
||
UINT16 tmpiDataType =0; /*数据类型*/
|
||
UINT16 tmpiDataCheck=0; /*数据校验和*/
|
||
UINT16 tmpiDataCheck1=0; /*数据校验和*/
|
||
|
||
TYPE_CAL tmpWlimit=0.0;
|
||
TYPE_CAL tmpAlimit=0.0;
|
||
TYPE_CAL tmpAngm=0.0;
|
||
UINT16 tmpTimeLmt=0;
|
||
UINT16 tmpTimeLmt1=0;
|
||
UINT8 tmpWorkMod= 0x00;
|
||
UINT8 tmpWorkModPre= 0x00;
|
||
UINT8 tmpCOMDCHOICE= 0x00;
|
||
|
||
sTaskMngDataRecord * tmpTaskMngDataRcd = NULL;
|
||
sAttPriData *tmpAtt= NULL;
|
||
AttCtrlConst_t *tmpConst= NULL;
|
||
sAttOrbitCtlData_t *tmpOrbCmd= NULL;
|
||
sAttTARCCtlData_t *tmpTARCCmd= NULL;
|
||
sAttOrbitCtlInfo_t *pOrb= NULL;
|
||
sAttTARCCtlInfo_t *pTARC= NULL;
|
||
sAttModPara_t *pWMod= NULL;
|
||
sAttErrCtlPara_t *pREcheck= NULL;
|
||
AttIMPTPara_t *pIMU= NULL;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
tmpOrbCmd=(sAttOrbitCtlData_t *)ATTCLT_DATA3_ADDR;
|
||
tmpTARCCmd=(sAttTARCCtlData_t *)ATTCLT_DATA6_ADDR;
|
||
tmpTaskMngDataRcd = (sTaskMngDataRecord *)ST_TASKMNG_ADDR;
|
||
if((NULL == tmpAtt) || (NULL ==tmpConst) || (NULL ==tmpOrbCmd) || (NULL ==tmpTARCCmd)|| (NULL ==tmpTaskMngDataRcd))
|
||
{
|
||
return ;
|
||
}
|
||
pOrb=&tmpAtt->sOrbitInp;
|
||
pTARC=&tmpAtt->sTARCInp;
|
||
pREcheck=&tmpAtt->sErrCtlPara;
|
||
pIMU=&tmpAtt->sIMPTPara;
|
||
pWMod=&tmpAtt->sModePara;
|
||
|
||
/*处理每个命令*/
|
||
tmpCmdCode = DoGetInt16From8(tmpCmd + tmpOffset);
|
||
m_pZKTaskInfo->iCmdLast = tmpCmdCode;
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_NOERR;
|
||
m_pZKTaskInfo->iCmdCount++;
|
||
//获取注数缓存地址
|
||
tmpData=(UINT8*)(tmpCmd + tmpOffset +2);
|
||
|
||
switch(tmpCmdCode)
|
||
{
|
||
/**********************************模式控制指令*********************************/
|
||
//速率阻尼 0X22
|
||
case ATT_CMDMODE_MODSUNCAP:
|
||
{
|
||
//tmpConst->WorkModeUp = ATTMOD_RATEDMP;
|
||
//tmpConst->WorkModeChange=0x55;
|
||
/*设置工作模式 速率阻尼*/
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
break;
|
||
}
|
||
|
||
//磁控对日定向0X44
|
||
case ATT_CMDMODE_MagTOSUN:
|
||
{
|
||
//tmpConst->WorkModeUp = ATTMOD_MagTOSUN;
|
||
//tmpConst->WorkModeChange=0x55;
|
||
/*设置工作模式 速率阻尼*/
|
||
ZKModDoSet(ATTMOD_MagTOSUN);
|
||
break;
|
||
}
|
||
//模式自主切换
|
||
case ATT_CMDMODE_MODECHANG:
|
||
{
|
||
tmpConst->AttCmdFlashPara.WorkModeChangeAuto=POSE_NO;
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
case ATT_CMDMODE_NOMODECHANG:
|
||
{
|
||
tmpConst->AttCmdFlashPara.WorkModeChangeAuto=POSE_OK;
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
//模式切换相关参数
|
||
case ATT_CMDCODE_MODPARAM:
|
||
{
|
||
tmpWorkModPre = *tmpData;
|
||
tmpWorkMod = *(tmpData + 1);
|
||
tmpWlimit = DoGetFloatFrom8(tmpData+2) *ANG2RADIAN;
|
||
tmpAlimit = DoGetFloatFrom8(tmpData+6) *ANG2RADIAN;
|
||
tmpTimeLmt = DoGetInt16From8(tmpData+10);
|
||
tmpTimeLmt1 = DoGetInt16From8(tmpData+12);
|
||
tmpAngm = DoGetFloatFrom8(tmpData+14);
|
||
if((tmpWorkMod & 0x0F) > 0x0B)
|
||
{
|
||
m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE;
|
||
break;
|
||
}
|
||
|
||
if(ATTMOD_RATEDMP == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time2 = tmpTimeLmt;
|
||
tmpConst->RateThr_2T3 =tmpWlimit;
|
||
tmpConst->HWHLThr_2T3 = tmpAngm;
|
||
}
|
||
|
||
else if(ATTMOD_MagTOSUN == tmpWorkModPre)
|
||
{
|
||
tmpConst->judge_time4 = tmpTimeLmt;
|
||
tmpConst->AngThr_3TB = tmpAlimit;
|
||
tmpConst->RateThr_3TB = tmpWlimit;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//太敏
|
||
case ATT_CMDCODE_ASS:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
tmpConst->Ass_MinFour_limt[0] = DoGetFloatFrom8(tmpData+1 +0); //4片模拟太敏电压阈值
|
||
tmpConst->Ass_MaxFour_limt[0] = DoGetFloatFrom8(tmpData+1 +4); //4片模拟太敏电压阈值
|
||
break;
|
||
}
|
||
case 0x22:
|
||
{
|
||
tmpConst->Ass_MinFour_limt[1] = DoGetFloatFrom8(tmpData+1 +0); //4片模拟太敏电压阈值
|
||
tmpConst->Ass_MaxFour_limt[1] = DoGetFloatFrom8(tmpData+1 +4); //4片模拟太敏电压阈值
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
//单机使用状态
|
||
case ATT_CMDCROSSUSE:
|
||
{
|
||
pIMU->SSUseState[0] = *(tmpData);
|
||
pIMU->SSUseState[1] = *(tmpData + 1);
|
||
pIMU->SSUseState[2] = *(tmpData + 2);
|
||
pIMU->AssUseState[0] = *(tmpData + 3);
|
||
pIMU->AssUseState[1] = *(tmpData + 4);
|
||
pIMU->AssUseState[2] = *(tmpData + 5);
|
||
pIMU->AssUseState[3] = *(tmpData + 6);
|
||
pIMU->AssUseState[4] = *(tmpData + 7);
|
||
pIMU->AssUseState[5] = *(tmpData + 8);
|
||
pIMU->MagUseState[0] = *(tmpData + 9);
|
||
pIMU->MagUseState[1] = *(tmpData + 10);
|
||
pIMU->GyroUseState[0] = *(tmpData + 11);
|
||
pIMU->GyroUseState[1] = *(tmpData + 12);
|
||
pIMU->GyroUseState[2] = *(tmpData + 13);
|
||
pIMU->Whl_Use[0] = *(tmpData + 14);
|
||
pIMU->Whl_Use[1] = *(tmpData + 15);
|
||
pIMU->Whl_Use[2] = *(tmpData + 16);
|
||
pIMU->Whl_Use[3] = *(tmpData + 17);
|
||
pIMU->MTUseStatus[0] = *(tmpData + 18);
|
||
pIMU->MTUseStatus[1] = *(tmpData + 19);
|
||
pIMU->MTUseStatus[2] = *(tmpData + 20);
|
||
pIMU->MTUseStatus[3] = *(tmpData + 21);
|
||
pIMU->PPUUseStatus= *(tmpData + 22);
|
||
break;
|
||
}
|
||
|
||
//单机重构状态注入
|
||
case ATT_CMDCROSS:
|
||
{
|
||
//星敏优先级
|
||
if (*(tmpData+0) != *(tmpData +1))
|
||
{
|
||
if (*(tmpData+0) != *(tmpData +2))
|
||
{
|
||
tmpConst->SSUsePrior[0]= *(tmpData) ;
|
||
tmpConst->SSUsePrior[1]= *(tmpData +1) ;
|
||
tmpConst->SSUsePrior[2]= *(tmpData +2) ;
|
||
}
|
||
}
|
||
|
||
//陀螺优先级
|
||
if (*(tmpData+3) != *(tmpData +4))
|
||
{
|
||
if (*(tmpData+3) != *(tmpData +5))
|
||
{
|
||
tmpConst->GyroUsePrior[0]= *(tmpData +3) ;
|
||
tmpConst->GyroUsePrior[1]= *(tmpData +4) ;
|
||
tmpConst->GyroUsePrior[2]= *(tmpData +5) ;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case ATT_CMDCREUSE:
|
||
{
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[0] = *(tmpData);
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[1] = *(tmpData+1);
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[2] = *(tmpData+2);
|
||
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[0] = *(tmpData+3);
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[1] = *(tmpData+4);
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[2] = *(tmpData+5);
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
/**********************************安装矩阵*********************************/
|
||
//星敏安装矩阵注入
|
||
case ATT_CMDCODE_SSMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_SSA[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 + 1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_SSB[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 + 1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_SSC[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 + 1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//太敏安装矩阵注入
|
||
case ATT_CMDCODE_ASSMAT:
|
||
{
|
||
tmpDevNO = *tmpData; //太敏选择
|
||
if(0x11 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSA[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x22 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSB[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x33 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSC[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x44 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSD[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x55 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSE[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else if(0x66 == tmpDevNO)
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_aSSF[i][k] = DoGetFloatFrom8(tmpData+i*12+k*4+1);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//磁强计安装矩阵注入
|
||
case ATT_CMDCODE_MAGMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for(k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAG[0][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for(k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAG[1][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//陀螺安装矩阵注入
|
||
case ATT_CMDCODE_GyroMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_GYRO[0][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_GYRO[1][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
for (k=0; k<3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_GYRO[2][i][k] = DoGetFloatFrom8(tmpData+i*12+k*4 +1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//反作用轮安装矩阵注入
|
||
case ATT_CMDCODE_WHLMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][0] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][1] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][2] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case 0x88 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_Wheel[i][3] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//磁力矩器安装矩阵注入
|
||
case ATT_CMDCODE_MTMAT:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x11 :
|
||
{
|
||
for(i=0; i<3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][0] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x22 :
|
||
{
|
||
for(i=0; i<4; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][1] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
case 0x44 :
|
||
{
|
||
for(i=0; i<4; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][2] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case 0x88 :
|
||
{
|
||
for(i=0; i<4; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.M_MAGCtrl[i][3] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//磁阻尼控制器注入
|
||
case ATT_CMDCODE_DMPPARA:
|
||
{
|
||
tmpConst->Mag_Bb_CtrlMax = DoGetFloatFrom8(tmpData);
|
||
tmpConst->Mag_DampBdotMin = DoGetFloatFrom8(tmpData+4);
|
||
tmpConst->MTCtrlTIME= DoGetInt16From8(tmpData+ 8);
|
||
break;
|
||
}
|
||
|
||
//磁控对日控制器参数注入
|
||
case ATT_CMDCODE_TOSUNPARA:
|
||
{
|
||
tmpCOMDCHOICE =*(tmpData) ;
|
||
switch (tmpCOMDCHOICE)
|
||
{
|
||
case 0x55 :
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_Kd[i] = DoGetFloatFrom8(tmpData+i*4 +1);
|
||
}
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_Kp[i] = DoGetFloatFrom8(tmpData+i*4+ 12+1);
|
||
}
|
||
tmpConst->Mag_WTOSUN=DoGetFloatFrom8(tmpData + 12 + 12 +1) *ANG2RADIAN ;
|
||
break;
|
||
}
|
||
|
||
case 0xAA :
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_KpFBZK[i] = DoGetFloatFrom8(tmpData+i*4+1);
|
||
}
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
tmpConst->Mag_KdFBZK[i] = DoGetFloatFrom8(tmpData+i*4+ 12+1);
|
||
}
|
||
tmpConst->Mag_FBZKWTOSUN=DoGetFloatFrom8(tmpData + 12 + 12 +1) *ANG2RADIAN ;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
tmpConst->Mag_ATTTOSUN=DoGetFloatFrom8(tmpData + 12 + 12 + 4+1) *ANG2RADIAN;
|
||
|
||
break;
|
||
}
|
||
|
||
//陀螺零偏注入
|
||
case ATT_CMDCODE_GyroBIAS:
|
||
{
|
||
tmpWorkMod =*tmpData;
|
||
if (0x11==tmpWorkMod)
|
||
{
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[0][k] =DoGetFloatFrom8(tmpData+k*4 +1)* ANG2RADIAN; //陀螺零偏
|
||
}
|
||
}
|
||
else if (0x22==tmpWorkMod)
|
||
{
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[1][k] =DoGetFloatFrom8(tmpData+k*4 +1)* ANG2RADIAN; //陀螺零偏
|
||
}
|
||
}
|
||
else if (0x44==tmpWorkMod)
|
||
{
|
||
for (k = 0; k < 3; k++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_Bias[2][k] =DoGetFloatFrom8(tmpData+k*4 +1)* ANG2RADIAN; //陀螺零偏
|
||
}
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
|
||
//陀螺标度因数注入
|
||
case ATT_CMDCODE_GyroPH:
|
||
{
|
||
tmpWorkMod =*tmpData;
|
||
if (0x11==tmpWorkMod)
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[0][i][j] =DoGetFloatFrom8(tmpData+i*12+j*4+1); //陀螺标度因数
|
||
}
|
||
}
|
||
}
|
||
else if (0x22==tmpWorkMod)
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[1][i][j] =DoGetFloatFrom8(tmpData+i*12+j*4+1); //陀螺标度因数
|
||
}
|
||
}
|
||
}
|
||
else if (0x44==tmpWorkMod)
|
||
{
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
for (j = 0; j< 3; j++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.Gyro_Comd_K[2][i][j] =DoGetFloatFrom8(tmpData+i*12+j*4+1); //陀螺标度因数
|
||
}
|
||
}
|
||
}
|
||
pWMod->ATTFlashSwitch = POSE_OK;
|
||
break;
|
||
}
|
||
//磁强计标定系数注入
|
||
case ATT_CMDCODE_MTBD:
|
||
{
|
||
memset(tmpCOMDCHOICE,0x00,sizeof(UINT8));
|
||
tmpCOMDCHOICE =*tmpData;
|
||
if (0x11==tmpCOMDCHOICE)
|
||
{
|
||
for (i = 0; i< 3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.MAG_LK[0][i]=DoGetFloatFrom8(tmpData+i*4+1);
|
||
tmpConst->AttCmdFlashPara.MAG_LB[0][i]=DoGetFloatFrom8(tmpData+12+i*4+1);
|
||
}
|
||
}
|
||
else if (0x22==tmpCOMDCHOICE)
|
||
{
|
||
for (i = 0; i< 3; i++)
|
||
{
|
||
tmpConst->AttCmdFlashPara.MAG_LK[1][i]=DoGetFloatFrom8(tmpData+i*4+1);
|
||
tmpConst->AttCmdFlashPara.MAG_LB[1][i]=DoGetFloatFrom8(tmpData+12+i*4+1);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
//磁力矩器分配-磁矩限值
|
||
case ATT_CMDCODE_MTCTRL:
|
||
{
|
||
tmpConst->MTOutXYZLimit[0] = DoGetFloatFrom8(tmpData);
|
||
tmpConst->MTOutXYZLimit[1] = DoGetFloatFrom8(tmpData +4);
|
||
tmpConst->MTOutXYZLimit[2] = DoGetFloatFrom8(tmpData +8);
|
||
tmpConst->MTOutXYZLimit[3] = DoGetFloatFrom8(tmpData +12);
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
//m_pZKTaskInfo->iCmdRes = ERR_CODE_CMDCODE;
|
||
break;
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
|
||
|
||
//姿控单机加电状态获取
|
||
void ZKPowerState(void)
|
||
{
|
||
UINT8 i= 0x00;
|
||
sAttPriData *tmpAtt = NULL;
|
||
sAttErrCtlPara_t *pREcheck= NULL;
|
||
sDevInfo *tmpDevInfo= NULL;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
if(NULL ==tmpAtt)
|
||
return;
|
||
pREcheck=&tmpAtt->sErrCtlPara;
|
||
|
||
//初始化\星敏
|
||
//陀螺
|
||
for(i=0; i<3; i++)
|
||
{
|
||
pREcheck->ssIn_PowerOn[i] = POSE_NO;
|
||
pREcheck->GyroIn_PowerOn[i] = POSE_NO;
|
||
}
|
||
|
||
//飞轮
|
||
for(i=0; i<4; i++)
|
||
{
|
||
pREcheck->WhlIn_PowerOn[i] = POSE_NO;
|
||
}
|
||
|
||
//磁强计
|
||
for(i=0; i<2; i++)
|
||
{
|
||
pREcheck->MagIn_PowerOn[i] = POSE_NO;
|
||
}
|
||
//电推
|
||
pREcheck->PPUIn_PowerOn = POSE_NO;
|
||
|
||
//星敏A
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART15);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->ssIn_PowerOn[0] = POSE_OK;
|
||
if(pREcheck->ss_PowerOnCnt[0]<60000)
|
||
pREcheck->ss_PowerOnCnt[0]++; //星敏加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->ss_PowerOnCnt[0] = 0;
|
||
}
|
||
|
||
//星敏B
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART16);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->ssIn_PowerOn[1] = POSE_OK;
|
||
if(pREcheck->ss_PowerOnCnt[1]<60000)
|
||
pREcheck->ss_PowerOnCnt[1]++; //星敏加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->ss_PowerOnCnt[1] = 0;
|
||
}
|
||
|
||
//星敏C
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART4);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->ssIn_PowerOn[2] = POSE_OK;
|
||
if(pREcheck->ss_PowerOnCnt[2]<60000)
|
||
pREcheck->ss_PowerOnCnt[2]++; //星敏加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->ss_PowerOnCnt[2] = 0;
|
||
}
|
||
//陀螺A
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART5);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->GyroIn_PowerOn[0] = POSE_OK;
|
||
if(pREcheck->Gyro_PowerOnCnt[0]<60000)
|
||
pREcheck->Gyro_PowerOnCnt[0]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Gyro_PowerOnCnt[0] =0;
|
||
}
|
||
//陀螺B
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART6);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->GyroIn_PowerOn[1] = POSE_OK;
|
||
if(pREcheck->Gyro_PowerOnCnt[1]<60000)
|
||
pREcheck->Gyro_PowerOnCnt[1]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Gyro_PowerOnCnt[1] =0;
|
||
}
|
||
//陀螺C
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART7);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->GyroIn_PowerOn[2] = POSE_OK;
|
||
if(pREcheck->Gyro_PowerOnCnt[2]<60000)
|
||
pREcheck->Gyro_PowerOnCnt[2]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Gyro_PowerOnCnt[2] =0;
|
||
}
|
||
//飞轮A
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART8);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->WhlIn_PowerOn[0] = POSE_OK;
|
||
if(pREcheck->Whl_PowerOnCnt[0]<60000)
|
||
pREcheck->Whl_PowerOnCnt[0]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Whl_PowerOnCnt[0] =0;
|
||
}
|
||
//飞轮B
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART9);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->WhlIn_PowerOn[1] = POSE_OK;
|
||
if(pREcheck->Whl_PowerOnCnt[1]<60000)
|
||
pREcheck->Whl_PowerOnCnt[1]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Whl_PowerOnCnt[1] =0;
|
||
}
|
||
//飞轮C
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART10);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->WhlIn_PowerOn[2] = POSE_OK;
|
||
if(pREcheck->Whl_PowerOnCnt[2]<60000)
|
||
pREcheck->Whl_PowerOnCnt[2]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Whl_PowerOnCnt[2] =0;
|
||
}
|
||
//飞轮D
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_UART11);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->WhlIn_PowerOn[3] = POSE_OK;
|
||
if(pREcheck->Whl_PowerOnCnt[3]<60000)
|
||
pREcheck->Whl_PowerOnCnt[3]++; //陀螺加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Whl_PowerOnCnt[3] =0;
|
||
}
|
||
|
||
//磁强计A
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_CQJ);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->MagIn_PowerOn[0] = POSE_OK;
|
||
if(pREcheck->Mag_PowerOnCnt[0]<60000)
|
||
pREcheck->Mag_PowerOnCnt[0]++;
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Mag_PowerOnCnt[0] =0;
|
||
}
|
||
|
||
//磁强计B
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_CQJ);
|
||
if(0x20 == (tmpDevInfo->sPowerInfo.bStart & 0x20))
|
||
{
|
||
pREcheck->MagIn_PowerOn[1] = POSE_OK;
|
||
if(pREcheck->Mag_PowerOnCnt[1]<60000)
|
||
pREcheck->Mag_PowerOnCnt[1]++;
|
||
}
|
||
else
|
||
{
|
||
pREcheck->Mag_PowerOnCnt[1] =0;
|
||
}
|
||
|
||
//电推
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_CAN0);
|
||
if(0x10 == (tmpDevInfo->sPowerInfo.bStart & 0x10))
|
||
{
|
||
pREcheck->PPUIn_PowerOn = POSE_OK;
|
||
if(pREcheck->PPU_PowerOnCnt<60000)
|
||
pREcheck->PPU_PowerOnCnt++; //星敏加电状态计数
|
||
}
|
||
else
|
||
{
|
||
pREcheck->PPU_PowerOnCnt = 0;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/**************************************
|
||
**说明:存储数据恢复模式切换
|
||
**输入:@index标志位,
|
||
***************************************/
|
||
void ZKReModBK(void)
|
||
{
|
||
UINT8 tmpNewMod = ATTMOD_RATEDMP ;
|
||
|
||
sAttPriData *tmpAtt = NULL;
|
||
OrbitPriData_t *tmpOrbit= NULL;
|
||
|
||
tmpOrbit = (OrbitPriData_t *)ORBIT_BASE_ADDR;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
|
||
if((NULL == tmpAtt) || (NULL == tmpOrbit))
|
||
{
|
||
return ;
|
||
}
|
||
|
||
tmpNewMod = tmpAtt->sModePara.WorkMode;
|
||
|
||
switch(tmpAtt->sModePara.WorkMode)
|
||
{
|
||
case ATTMOD_BREAKPRE: /*星箭分离前 0x00*/
|
||
{
|
||
tmpNewMod = ATTMOD_NOCOLL;
|
||
break;
|
||
}
|
||
case ATTMOD_UNCTL: /*无控模式 0xBB*/
|
||
{
|
||
tmpNewMod = ATTMOD_RATEDMP;
|
||
break;
|
||
}
|
||
case ATTMOD_ONLTOTAR: /*对目标定向 0xAA*/
|
||
case ATTMOD_ATTAJUST: /*定向前调姿 0x99*/
|
||
case ATTMOD_ONLTOEARTH: /*对地定向 0x55*/
|
||
case ATTMOD_WHEELTOEARTH: /*稳态对地 0x66*/
|
||
{
|
||
if (POSE_OK == tmpOrbit->sCalOutData.ObtOutVldLast)
|
||
{
|
||
tmpNewMod = tmpAtt->sModePara.WorkMode;
|
||
}
|
||
else
|
||
{
|
||
tmpNewMod = ATTMOD_RATEDMP;
|
||
}
|
||
break;
|
||
}
|
||
case ATTMOD_ATTAJUSTPRE: /*轨控前调姿 0x77*/
|
||
case ATTMOD_ORBITCTL: /*轨道控制 0x88*/
|
||
{
|
||
/*2.5S后关PPU电源*/
|
||
tmpAtt->sPerPara.PPUPara.PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;
|
||
tmpAtt->sPerPara.PPUPara.PPU_OrbitCtl_Quit_Err_Cnt = 0;
|
||
|
||
tmpAtt->sPerPara.PPUPara.PPU_OrbitCtl_Quit_OK_Flag = POSE_NO;
|
||
tmpAtt->sPerPara.PPUPara.PPU_OrbitCtl_Quit_OK_Cnt = 0;
|
||
|
||
if (POSE_OK ==tmpOrbit->sCalOutData.ObtOutVldLast)
|
||
{
|
||
tmpNewMod = ATTMOD_ONLTOEARTH;
|
||
}
|
||
else
|
||
{
|
||
tmpNewMod = ATTMOD_RATEDMP;
|
||
}
|
||
break;
|
||
}
|
||
case ATTMOD_NOCOLL: /*碰撞规避模式 0x11 */
|
||
case ATTMOD_RATEDMP: /*速率阻尼 0x22 */
|
||
case ATTMOD_WhlTOSUN: /*轮控对日定向 0x33 */
|
||
case ATTMOD_MagTOSUN: /*磁控对日定向 0x44 */
|
||
{
|
||
tmpNewMod = tmpAtt->sModePara.WorkMode;
|
||
break;
|
||
}
|
||
default: /*非姿控的工作模式,初始化为 速率阻尼*/
|
||
{
|
||
tmpNewMod = ATTMOD_RATEDMP;
|
||
break;
|
||
}
|
||
}
|
||
/*切换到新模式后,将相关计数器清零*/
|
||
ZKModDoSet(tmpNewMod);
|
||
}
|
||
|
||
/************************************************FLASH********************************************************************/
|
||
/**************************************
|
||
**说明:读取FLASH数据
|
||
**输入:
|
||
***************************************/
|
||
void ZKREFlashBK(void)
|
||
{
|
||
AttCtrlConst_t *tmpConst = (AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
sWheelIdArray *tmpBKStr = (sWheelIdArray *)ST_WHEEL_ID_ARRAY_ADDR;
|
||
if((NULL == tmpConst) ||(NULL == tmpBKStr))
|
||
{
|
||
return ;
|
||
}
|
||
if(tmpBKStr->WHEEL_ID_ARRAY[0][0] == 0X11)
|
||
{
|
||
tmpConst->Whl_ID[0]= tmpBKStr->WHEEL_ID_ARRAY[0][1];
|
||
}
|
||
|
||
if(tmpBKStr->WHEEL_ID_ARRAY[1][0] == 0X22)
|
||
{
|
||
tmpConst->Whl_ID[1]= tmpBKStr->WHEEL_ID_ARRAY[1][1];
|
||
}
|
||
|
||
if(tmpBKStr->WHEEL_ID_ARRAY[2][0] == 0X33)
|
||
{
|
||
tmpConst->Whl_ID[2]= tmpBKStr->WHEEL_ID_ARRAY[2][1];
|
||
}
|
||
if(tmpBKStr->WHEEL_ID_ARRAY[3][0] == 0X44)
|
||
{
|
||
tmpConst->Whl_ID[3]= tmpBKStr->WHEEL_ID_ARRAY[3][1];
|
||
}
|
||
|
||
}
|
||
|
||
/************************************************三取二********************************************************************/
|
||
/***********************************************
|
||
说明:用于重要变量三取二
|
||
输入:pTDATA , pSDATA
|
||
输出:
|
||
返回:
|
||
注意:输入、输出变量均为UINT8类型
|
||
***********************************************/
|
||
void ATTGet2Base3FromBuff(UINT8 *pTDATA, UINT8 *pSDATA)
|
||
{
|
||
if((NULL == pSDATA) || (NULL == pTDATA))
|
||
{
|
||
return;
|
||
}
|
||
|
||
if(!(pSDATA[0]^pSDATA[1]))
|
||
{
|
||
*pTDATA = pSDATA[0];
|
||
}
|
||
else if(!(pSDATA[0]^pSDATA[2]))
|
||
{
|
||
*pTDATA = pSDATA[2];
|
||
}
|
||
else if(!(pSDATA[1]^pSDATA[2]))
|
||
{
|
||
*pTDATA = pSDATA[1];
|
||
}
|
||
else
|
||
{
|
||
; /*不做处理*/
|
||
}
|
||
}
|
||
|
||
/***********************************************
|
||
说明:用于对重要数据备份,备三份,便于每周期进行更新
|
||
输入:pTDATA , pSDATA
|
||
输出:
|
||
返回:
|
||
注意:输入、输出变量均为UINT8类型
|
||
***********************************************/
|
||
void ATTSetBase3ToBuff(UINT8 *pTDATA, UINT8 *pSDATA)
|
||
{
|
||
if((NULL == pSDATA) || (NULL == pTDATA))
|
||
{
|
||
return;
|
||
}
|
||
|
||
pSDATA[0] = *pTDATA;
|
||
pSDATA[1] = *pTDATA;
|
||
pSDATA[2] = *pTDATA;
|
||
}
|
||
|
||
/***********************************************
|
||
说明:每周期对重要数据进行更新
|
||
注意:输入、输出变量均为UINT8类型
|
||
***********************************************/
|
||
void ATTGetImportDataFromBuff(void)
|
||
{
|
||
UINT8 i = 0X00;
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
if((NULL == tmpAtt) || (NULL == tmpConst))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//if(POSE_OK == tmpAtt->AttData3T2Para.AttCtlBKFlag)
|
||
//{
|
||
//tmpAtt->AttData3T2Para.AttCtlBKFlag = POSE_NO;
|
||
ATTGet2Base3FromBuff(&tmpAtt->sModePara.WorkMode, &tmpAtt->AttData3T2Para.WorkModeBK[0]);
|
||
ATTGet2Base3FromBuff(&tmpConst->AttCmdFlashPara.WorkModeChangeAuto, &tmpAtt->AttData3T2Para.WorkModeChangeAutoBK[0]);
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sErrCtlPara.SS_err[i], &tmpAtt->AttData3T2Para.SS_errBK[i][0]);
|
||
}
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sErrCtlPara.Mag_err[i], &tmpAtt->AttData3T2Para.Mag_errBK[i][0]);
|
||
}
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sErrCtlPara.Gyro_err[i], &tmpAtt->AttData3T2Para.Gyro_errBK[i][0]);
|
||
}
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sErrCtlPara.Whl_Err[i], &tmpAtt->AttData3T2Para.Whl_ErrBK[i][0]);
|
||
}
|
||
ATTGet2Base3FromBuff(&tmpAtt->sErrCtlPara.PPU_Err, &tmpAtt->AttData3T2Para.PPU_ErrBK[0]);
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.SSUseState[i], &tmpAtt->AttData3T2Para.SSUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < ASS_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.AssUseState[i], &tmpAtt->AttData3T2Para.AssUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.MagUseState[i], &tmpAtt->AttData3T2Para.MagUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.GyroUseState[i], &tmpAtt->AttData3T2Para.GyroUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.Whl_Use[i], &tmpAtt->AttData3T2Para.Whl_UseBK[i][0]);
|
||
}
|
||
for (i = 0; i < MT_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.MTUseStatus[i], &tmpAtt->AttData3T2Para.MTUseStatusBK[i][0]);
|
||
}
|
||
ATTGet2Base3FromBuff(&tmpAtt->sIMPTPara.PPUUseStatus, &tmpAtt->AttData3T2Para.PPUUseStatusBK[0]);
|
||
for (i = 0; i < 3; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpConst->AttCmdFlashPara.Gyro_ComRESW[i], &tmpAtt->AttData3T2Para.Gyro_ComRESWBK[i][0]);
|
||
}
|
||
for (i = 0; i < 3; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpConst->AttCmdFlashPara.Mag_ComRESW[i], &tmpAtt->AttData3T2Para.Mag_ComRESWBK[i][0]);
|
||
}
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sPerPara.SsPara[i].ssPrior, &tmpAtt->AttData3T2Para.ssPriorBK[i][0]);
|
||
}
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpAtt->sPerPara.GyroPara[i].GyroPrior, &tmpAtt->AttData3T2Para.GyroPriorBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowssONOFF[i], &tmpAtt->AttData3T2Para.AllowssONOFFBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowGyroONOFF[i], &tmpAtt->AttData3T2Para.AllowGyroONOFFBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowMagONOFF[i], &tmpAtt->AttData3T2Para.AllowMagONOFFBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowWhlONOFF[i], &tmpAtt->AttData3T2Para.AllowWhlONOFFBK[i][0]);
|
||
}
|
||
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowPPUONOFF, &tmpAtt->AttData3T2Para.AllowPPUONOFFBK[0]);
|
||
|
||
ATTGet2Base3FromBuff(&tmpConst->Allow_Sensor_CThr, &tmpAtt->AttData3T2Para.Allow_Sensor_CThrBK[0]);
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowAttLoseDiagFlg, &tmpAtt->AttData3T2Para.AllowAttLoseDiagFlgBK[0]);
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowAttExDiagFlg, &tmpAtt->AttData3T2Para.AllowAttExDiagFlgBK[0]);
|
||
ATTGet2Base3FromBuff(&tmpConst->AllowAttStaDiagFlg, &tmpAtt->AttData3T2Para.AllowAttStaDiagFlgBK[0]);
|
||
|
||
//}
|
||
}
|
||
|
||
/*****************************************************************************
|
||
*名称:
|
||
*描述:
|
||
******************************************************************************/
|
||
void ATTImportDataBackup(void)
|
||
{
|
||
UINT8 i = 0X00;
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
if((NULL == tmpAtt) || (NULL == tmpConst))
|
||
{
|
||
return;
|
||
}
|
||
|
||
//tmpAtt->AttData3T2Para.AttCtlBKFlag = POSE_OK;
|
||
ATTSetBase3ToBuff(&tmpAtt->sModePara.WorkMode, &tmpAtt->AttData3T2Para.WorkModeBK[0]);
|
||
ATTSetBase3ToBuff(&tmpConst->AttCmdFlashPara.WorkModeChangeAuto, &tmpAtt->AttData3T2Para.WorkModeChangeAutoBK[0]);
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sErrCtlPara.SS_err[i], &tmpAtt->AttData3T2Para.SS_errBK[i][0]);
|
||
}
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sErrCtlPara.Mag_err[i], &tmpAtt->AttData3T2Para.Mag_errBK[i][0]);
|
||
}
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sErrCtlPara.Gyro_err[i], &tmpAtt->AttData3T2Para.Gyro_errBK[i][0]);
|
||
}
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sErrCtlPara.Whl_Err[i], &tmpAtt->AttData3T2Para.Whl_ErrBK[i][0]);
|
||
}
|
||
ATTSetBase3ToBuff(&tmpAtt->sErrCtlPara.PPU_Err, &tmpAtt->AttData3T2Para.PPU_ErrBK[0]);
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.SSUseState[i], &tmpAtt->AttData3T2Para.SSUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < ASS_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.AssUseState[i], &tmpAtt->AttData3T2Para.AssUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.MagUseState[i], &tmpAtt->AttData3T2Para.MagUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.GyroUseState[i], &tmpAtt->AttData3T2Para.GyroUseStateBK[i][0]);
|
||
}
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.Whl_Use[i], &tmpAtt->AttData3T2Para.Whl_UseBK[i][0]);
|
||
}
|
||
for (i = 0; i < MT_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.MTUseStatus[i], &tmpAtt->AttData3T2Para.MTUseStatusBK[i][0]);
|
||
}
|
||
ATTSetBase3ToBuff(&tmpAtt->sIMPTPara.PPUUseStatus, &tmpAtt->AttData3T2Para.PPUUseStatusBK[0]);
|
||
for (i = 0; i < 3; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpConst->AttCmdFlashPara.Gyro_ComRESW[i], &tmpAtt->AttData3T2Para.Gyro_ComRESWBK[i][0]);
|
||
}
|
||
for (i = 0; i < 3; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpConst->AttCmdFlashPara.Mag_ComRESW[i], &tmpAtt->AttData3T2Para.Mag_ComRESWBK[i][0]);
|
||
}
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sPerPara.SsPara[i].ssPrior, &tmpAtt->AttData3T2Para.ssPriorBK[i][0]);
|
||
}
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpAtt->sPerPara.GyroPara[i].GyroPrior, &tmpAtt->AttData3T2Para.GyroPriorBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < STAR_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpConst->AllowssONOFF[i], &tmpAtt->AttData3T2Para.AllowssONOFFBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < GYRO_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpConst->AllowGyroONOFF[i], &tmpAtt->AttData3T2Para.AllowGyroONOFFBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < MAG_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpConst->AllowMagONOFF[i], &tmpAtt->AttData3T2Para.AllowMagONOFFBK[i][0]);
|
||
}
|
||
|
||
for (i = 0; i < WHEEL_NUM; ++i)
|
||
{
|
||
ATTSetBase3ToBuff(&tmpConst->AllowWhlONOFF[i], &tmpAtt->AttData3T2Para.AllowWhlONOFFBK[i][0]);
|
||
}
|
||
|
||
ATTSetBase3ToBuff(&tmpConst->AllowPPUONOFF, &tmpAtt->AttData3T2Para.AllowPPUONOFFBK[0]);
|
||
|
||
ATTSetBase3ToBuff(&tmpConst->Allow_Sensor_CThr, &tmpAtt->AttData3T2Para.Allow_Sensor_CThrBK[0]);
|
||
ATTSetBase3ToBuff(&tmpConst->AllowAttLoseDiagFlg, &tmpAtt->AttData3T2Para.AllowAttLoseDiagFlgBK[0]);
|
||
ATTSetBase3ToBuff(&tmpConst->AllowAttExDiagFlg, &tmpAtt->AttData3T2Para.AllowAttExDiagFlgBK[0]);
|
||
ATTSetBase3ToBuff(&tmpConst->AllowAttStaDiagFlg, &tmpAtt->AttData3T2Para.AllowAttStaDiagFlgBK[0]);
|
||
}
|
||
|
||
|
||
/************************************************双机FIFO********************************************************************/
|
||
/***********************************************
|
||
说明:姿控数据备份准备
|
||
|
||
***********************************************/
|
||
void ZKDataBackUp(void)
|
||
{
|
||
UINT8 i = 0X00;
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
sAttModPara_t *pWMod = NULL;
|
||
AttBKPara_t *pBK = NULL;
|
||
sAttErrCtlPara_t *pREcheck = NULL;
|
||
AttIMPTPara_t *pImpt = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
if((NULL == tmpAtt) || (NULL == tmpConst))
|
||
{
|
||
return;
|
||
}
|
||
pWMod =&tmpAtt->sModePara;
|
||
pBK =&tmpAtt->AttBKPara;
|
||
pREcheck=&tmpAtt->sErrCtlPara;
|
||
pImpt=&tmpAtt->sIMPTPara;
|
||
//PGyro[0] = &tmpAtt->sPerPara.GyroPara[0];
|
||
//PGyro[1] = &tmpAtt->sPerPara.GyroPara[1];
|
||
//PGyro[2] = &tmpAtt->sPerPara.GyroPara[2];
|
||
|
||
pBK->BK_WorkMode = pWMod->WorkMode;
|
||
pBK->BK_WorkModeChangeAuto = tmpConst->AttCmdFlashPara.WorkModeChangeAuto;
|
||
for(i = 0;i<STAR_NUM;i++)
|
||
{
|
||
pBK->BK_SS_err[i] = pREcheck->SS_err[i];
|
||
}
|
||
for(i = 0;i<MAG_NUM;i++)
|
||
{
|
||
pBK->BK_Mag_err[i] = pREcheck->Mag_err[i];
|
||
}
|
||
for(i = 0;i<GYRO_NUM;i++)
|
||
{
|
||
pBK->BK_Gyro_err[i] = pREcheck->Gyro_err[i];
|
||
}
|
||
for(i = 0;i<WHEEL_NUM;i++)
|
||
{
|
||
pBK->BK_Whl_Err[i] = pREcheck->Whl_Err[i];
|
||
}
|
||
|
||
pBK->BK_PPU_Err = pREcheck->PPU_Err;
|
||
|
||
for(i = 0;i<STAR_NUM;i++)
|
||
{
|
||
pBK->BK_SSUseState[i] = pImpt->SSUseState[i];
|
||
}
|
||
|
||
for(i = 0;i<GYRO_NUM;i++)
|
||
{
|
||
pBK->BK_GyroUseState[i] = pImpt->GyroUseState[i];
|
||
}
|
||
|
||
for(i = 0;i<WHEEL_NUM;i++)
|
||
{
|
||
pBK->BK_Whl_Use[i] = pImpt->Whl_Use[i];
|
||
}
|
||
|
||
for(i = 0;i<MAG_NUM;i++)
|
||
{
|
||
pBK->BK_MagUseState[i] = pImpt->MagUseState[i];
|
||
}
|
||
|
||
for(i = 0;i<ASS_NUM;i++)
|
||
{
|
||
pBK->BK_AssUseState[i] = pImpt->AssUseState[i];
|
||
}
|
||
|
||
for(i = 0;i<MT_NUM;i++)
|
||
{
|
||
pBK->BK_MTUseStatus[i] = pImpt->MTUseStatus[i];
|
||
}
|
||
|
||
pBK->BK_PPUUseStatus= 0;
|
||
if (POSE_OK == pImpt->PPUUseStatus)
|
||
{
|
||
pBK->BK_PPUUseStatus= pBK->BK_PPUUseStatus | 0x05;
|
||
}
|
||
else
|
||
{
|
||
pBK->BK_PPUUseStatus= pBK->BK_PPUUseStatus & 0xF0;
|
||
}
|
||
|
||
if (POSE_OK == pImpt->PPUSafeStatus)
|
||
{
|
||
pBK->BK_PPUUseStatus= pBK->BK_PPUUseStatus | 0x50;
|
||
}
|
||
else
|
||
{
|
||
pBK->BK_PPUUseStatus= pBK->BK_PPUUseStatus & 0x0F;
|
||
}
|
||
|
||
for(i = 0;i<MT_NUM;i++)
|
||
{
|
||
pBK->BK_MTUseStatus[i]= pImpt->MTUseStatus[i];
|
||
}
|
||
|
||
for (i = 0;i<3;i++)
|
||
{
|
||
pBK->BK_Gyro_ComRESW[i] = tmpConst->AttCmdFlashPara.Gyro_ComRESW[i];
|
||
}
|
||
|
||
for (i = 0;i<3;i++)
|
||
{
|
||
pBK->BK_Mag_ComRESW[i] = tmpConst->AttCmdFlashPara.Mag_ComRESW[i];
|
||
}
|
||
|
||
for (i = 0;i<STAR_NUM;i++)
|
||
{
|
||
pBK->BK_ssPrior[i] = tmpConst->SSUsePrior[i];
|
||
}
|
||
|
||
for (i = 0;i<GYRO_NUM;i++)
|
||
{
|
||
pBK->BK_GyroPrior[i] = tmpConst->GyroUsePrior[i];
|
||
}
|
||
|
||
for (i = 0;i<STAR_NUM;i++)
|
||
{
|
||
pBK->BK_ss_Diag[i] = pREcheck->ss_Diag[i];
|
||
}
|
||
|
||
for (i = 0;i<MAG_NUM;i++)
|
||
{
|
||
pBK->BK_Mag_Diag[i] = pREcheck->Mag_Diag[i];
|
||
}
|
||
|
||
for (i = 0;i<GYRO_NUM;i++)
|
||
{
|
||
pBK->BK_Gyro_Diag[i] = pREcheck->Gyro_Diag[i];
|
||
}
|
||
|
||
for (i = 0;i<WHEEL_NUM;i++)
|
||
{
|
||
pBK->BK_Whl_Diag[i]= pREcheck->Whl_Diag[i];
|
||
}
|
||
|
||
for (i = 0;i<STAR_NUM;i++)
|
||
{
|
||
pBK->BK_AllowssONOFF[i]= tmpConst->AllowssONOFF[i];
|
||
}
|
||
|
||
for (i = 0;i<GYRO_NUM;i++)
|
||
{
|
||
pBK->BK_AllowGyroONOFF[i]= tmpConst->AllowGyroONOFF[i];
|
||
}
|
||
|
||
for (i = 0;i<MAG_NUM;i++)
|
||
{
|
||
pBK->BK_AllowMagONOFF[i]= tmpConst->AllowMagONOFF[i];
|
||
}
|
||
|
||
for (i = 0;i<WHEEL_NUM;i++)
|
||
{
|
||
pBK->BK_AllowWhlONOFF[i]= tmpConst->AllowWhlONOFF[i];
|
||
}
|
||
|
||
pBK->BK_AllowPPUONOFF= tmpConst->AllowPPUONOFF;
|
||
|
||
pBK->BK_Allow_Sensor_CThr = tmpConst->Allow_Sensor_CThr;
|
||
pBK->BK_AllowAttLoseDiagFlg = tmpConst->AllowAttLoseDiagFlg;
|
||
pBK->BK_AllowAttExDiagFlg = tmpConst->AllowAttExDiagFlg;
|
||
pBK->BK_AllowAttStaDiagFlg = tmpConst->AllowAttStaDiagFlg;
|
||
}
|
||
|
||
|
||
/**************************************
|
||
**说明:数据备份
|
||
***************************************/
|
||
void ZKDoActDataTer(void)
|
||
{
|
||
UINT8 *tmpAddr = 0X00;
|
||
AttBKPara_t *tmpPCInfo = NULL;
|
||
sAttPriData *tmpAtt = NULL;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
if(NULL == tmpAtt)
|
||
{
|
||
return;
|
||
}
|
||
tmpPCInfo =&tmpAtt->AttBKPara;
|
||
AttBKPara_t *tmpBKStr = NULL;
|
||
tmpAddr = (UINT8 *)(ST_IMPDATA_ADDR + ST_IMPDATA_HEAD + ST_IMPDATA_ATTMNG_OFFSET * 64); /*电源备份数据存储区域,第9块*/
|
||
if(tmpAddr==NULL)
|
||
return;
|
||
tmpBKStr = (AttBKPara_t *)tmpAddr;
|
||
|
||
/*保存数据:备份数据结构与能源结构体前几个成员保持一致,直接数据拷贝*/
|
||
//memset(((UINT8 *)tmpBKStr + sizeof(sSaveDataHead)), 0, 64*ST_IMPDATA_ATTMNG_BLOCKS);
|
||
//memcpy(((UINT8 *)tmpBKStr + sizeof(sSaveDataHead)),(UINT8 *)tmpPCInfo,(sizeof(AttBKPara_t)-sizeof(sSaveDataHead) - 4));
|
||
memcpy(((UINT8 *)tmpBKStr),(UINT8 *)tmpPCInfo,(sizeof(AttBKPara_t)));
|
||
|
||
/*设定校验*/
|
||
//tmpBKStr->sBKHead.iDataLength = 64*ST_IMPDATA_ATTMNG_BLOCKS - sizeof(sSaveDataHead);
|
||
tmpBKStr->sBKHead.iDataLength = sizeof(AttBKPara_t) - sizeof(sSaveDataHead);
|
||
tmpBKStr->sBKHead.iDataType = BACKUP_TYPE_ATTFIFO;
|
||
tmpBKStr->iVldFlag = 0x55555555;
|
||
tmpBKStr->sBKHead.iDataCheck = DoGetCheckSum(tmpAddr + sizeof(sSaveDataHead), tmpBKStr->sBKHead.iDataLength );
|
||
|
||
/*设置更新标志*/
|
||
tmpAddr = (UINT8 *)ST_IMPDATA_ADDR;
|
||
tmpAddr[ST_IMPDATA_ATTMNG_OFFSET] = 0x55;
|
||
}
|
||
|
||
|
||
/***********************************************
|
||
说明:备份数据恢复
|
||
输入:
|
||
输出:
|
||
***********************************************/
|
||
void ZKCtrlReinitBK(void)
|
||
{
|
||
UINT8 i = 0;
|
||
//UINT8 bChkOK = POSE_NO;
|
||
UINT8 *tmpAddr = 0X00;
|
||
UINT16 *tmpData16 = NULL;
|
||
UINT16 tmpDA1 = 0U;
|
||
TYPE_CAL fData1 = 0.0F;
|
||
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
AttBKPara_t *tmpBKStr = NULL;
|
||
//sTaskMngDataRecord *tmpTaskMngDataRcd = NULL;
|
||
sDevInfo *tmpDevInfo = NULL;
|
||
|
||
//tmpTaskMngDataRcd = (sTaskMngDataRecord *)ST_TASKMNG_ADDR;
|
||
tmpAtt = (sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst = (AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
|
||
if((NULL == tmpAtt) || (NULL == tmpConst))
|
||
{
|
||
return;
|
||
}
|
||
|
||
/*获取双机FIFO数据地址*/
|
||
tmpAddr = (UINT8 *)(ST_IMPDATA_ADDR + ST_IMPDATA_HEAD + ST_IMPDATA_ATTMNG_OFFSET * 64);
|
||
tmpBKStr = (AttBKPara_t *)tmpAddr;
|
||
|
||
/*对关键变量进行三取二,每周期都获取*/
|
||
ATTGetImportDataFromBuff();
|
||
|
||
/*首次卫星加电操作*/
|
||
ZKDptPowerOnPrc();
|
||
|
||
/*做重新初始化动作*/
|
||
if(0x55U == m_pZKTaskInfo->iReInit)
|
||
{
|
||
m_pZKTaskInfo->iReInit= 0;
|
||
|
||
tmpAtt->sModePara.ReDataBK = POSE_NO;
|
||
|
||
/*获取本地FLASH 飞轮ID的装订参数*/
|
||
ZKREFlashBK();
|
||
|
||
/*重启/切机/复位 飞轮转速电流给0*/
|
||
SetWheel(1,0,WHL_CMD_CODE_CURR);
|
||
SetWheel(2,0,WHL_CMD_CODE_CURR);
|
||
SetWheel(3,0,WHL_CMD_CODE_CURR);
|
||
SetWheel(4,0,WHL_CMD_CODE_CURR);
|
||
|
||
/*校验备份区数据有效性,若校验一次无效,再校验一次*/
|
||
if(DoCheckSaveData(tmpAddr, 64*ST_IMPDATA_ATTMNG_BLOCKS) && (0x55555555 == tmpBKStr->iVldFlag)&&(BACKUP_TYPE_ATTFIFO == tmpBKStr->sBKHead.iDataType ))
|
||
{
|
||
tmpAtt->sModePara.ReDataBK= POSE_OK;
|
||
}
|
||
else if(DoCheckSaveData(tmpAddr, 64*ST_IMPDATA_ATTMNG_BLOCKS) && (0x55555555 == tmpBKStr->iVldFlag)&&(BACKUP_TYPE_ATTFIFO == tmpBKStr->sBKHead.iDataType ))
|
||
{
|
||
tmpAtt->sModePara.ReDataBK= POSE_OK;
|
||
}
|
||
else
|
||
{
|
||
/*两次数据校验均无效,数据认为数据恢复无效;若帆板展开进入-速率阻尼,未展开进入-碰撞规避*/
|
||
tmpDevInfo = GETDEVINFO(DEV_NO_AD);
|
||
tmpData16 = (UINT16 *)(tmpDevInfo->cDevYCBuffer + INFO_ADDR_OFF);
|
||
tmpDA1 = *(tmpData16 + SW47 - 1); /*太阳翼展开机构展开到位正线*/
|
||
fData1 = 0.002442F * tmpDA1 - 5.0F; /*(idata * 10.0 / 4095 - 5)*/
|
||
|
||
if(POSE_ABSF(fData1) < 0.1)//0.1V以下
|
||
{
|
||
/*展开*/
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
}
|
||
else
|
||
{
|
||
/*未展开*/
|
||
ZKModDoSet(ATTMOD_NOCOLL);
|
||
}
|
||
return;
|
||
}
|
||
if (POSE_OK == tmpAtt->sModePara.ReDataBK)
|
||
{
|
||
/*数据校验通过,进行数据恢复*/
|
||
tmpAtt->sModePara.WorkMode = tmpBKStr->BK_WorkMode;
|
||
tmpConst->AttCmdFlashPara.WorkModeChangeAuto= tmpBKStr->BK_WorkModeChangeAuto;
|
||
|
||
for(i = 0;i<STAR_NUM;i++)
|
||
{
|
||
tmpAtt->sErrCtlPara.SS_err[i]= tmpBKStr->BK_SS_err[i];
|
||
tmpConst->SSUsePrior[i]=tmpBKStr->BK_ssPrior[i];
|
||
tmpAtt->sErrCtlPara.ss_Diag[i]= tmpBKStr->BK_ss_Diag[i];
|
||
tmpConst->AllowssONOFF[i]= tmpBKStr->BK_AllowssONOFF[i];
|
||
tmpAtt->sIMPTPara.SSUseState[i]= tmpBKStr->BK_SSUseState[i];
|
||
}
|
||
|
||
for(i = 0;i<MAG_NUM;i++)
|
||
{
|
||
tmpAtt->sIMPTPara.MagUseState[i]= tmpBKStr->BK_MagUseState[i];
|
||
tmpAtt->sErrCtlPara.Mag_err[i]= tmpBKStr->BK_Mag_err[i];
|
||
tmpAtt->sErrCtlPara.Mag_Diag[i]= tmpBKStr->BK_Mag_Diag[i];
|
||
tmpConst->AllowMagONOFF[i]= tmpBKStr->BK_AllowMagONOFF[i];
|
||
tmpConst->AttCmdFlashPara.Mag_ComRESW[i]=tmpBKStr->BK_Mag_ComRESW[i];
|
||
}
|
||
|
||
for(i = 0;i<GYRO_NUM;i++)
|
||
{
|
||
tmpAtt->sErrCtlPara.Gyro_err[i]= tmpBKStr->BK_Gyro_err[i];
|
||
tmpAtt->sIMPTPara.GyroUseState[i]= tmpBKStr->BK_GyroUseState[i];
|
||
tmpConst->AttCmdFlashPara.Gyro_ComRESW[i]=tmpBKStr->BK_Gyro_ComRESW[i];
|
||
tmpConst->GyroUsePrior[i]=tmpBKStr->BK_GyroPrior[i];
|
||
tmpAtt->sErrCtlPara.Gyro_Diag[i]= tmpBKStr->BK_Gyro_Diag[i];
|
||
tmpConst->AllowGyroONOFF[i]= tmpBKStr->BK_AllowGyroONOFF[i];
|
||
}
|
||
|
||
for(i = 0;i<WHEEL_NUM;i++)
|
||
{
|
||
tmpAtt->sErrCtlPara.Whl_Err[i]= tmpBKStr->BK_Whl_Err[i];
|
||
tmpAtt->sIMPTPara.Whl_Use[i]= tmpBKStr->BK_Whl_Use[i];
|
||
tmpAtt->sErrCtlPara.Whl_Diag[i]= tmpBKStr->BK_Whl_Diag[i];
|
||
tmpConst->AllowWhlONOFF[i]= tmpBKStr->BK_AllowWhlONOFF[i];
|
||
}
|
||
|
||
tmpAtt->sErrCtlPara.PPU_Err= tmpBKStr->BK_PPU_Err;
|
||
|
||
for(i = 0;i<ASS_NUM;i++)
|
||
{
|
||
tmpAtt->sIMPTPara.AssUseState[i]= tmpBKStr->BK_AssUseState[i];
|
||
}
|
||
|
||
for(i = 0;i<MT_NUM;i++)
|
||
{
|
||
tmpAtt->sIMPTPara.MTUseStatus[i]= tmpBKStr->BK_MTUseStatus[i];
|
||
tmpAtt->sIMPTPara.MTUseStatus[i]= tmpBKStr->BK_MTUseStatus[i];
|
||
}
|
||
|
||
if (0x05 == (tmpBKStr->BK_PPUUseStatus & 0x0F))
|
||
{
|
||
tmpAtt->sIMPTPara.PPUUseStatus= POSE_OK;
|
||
}
|
||
else
|
||
{
|
||
tmpAtt->sIMPTPara.PPUUseStatus= POSE_NO;
|
||
}
|
||
|
||
if (0x50 == (tmpBKStr->BK_PPUUseStatus & 0xF0))
|
||
{
|
||
tmpAtt->sIMPTPara.PPUSafeStatus= POSE_OK;
|
||
}
|
||
else
|
||
{
|
||
tmpAtt->sIMPTPara.PPUSafeStatus= POSE_NO;
|
||
}
|
||
|
||
tmpConst->AllowPPUONOFF= tmpBKStr->BK_AllowPPUONOFF;
|
||
tmpConst->Allow_Sensor_CThr= tmpBKStr->BK_Allow_Sensor_CThr;
|
||
tmpConst->AllowAttLoseDiagFlg= tmpBKStr->BK_AllowAttLoseDiagFlg;
|
||
tmpConst->AllowAttExDiagFlg= tmpBKStr->BK_AllowAttExDiagFlg;
|
||
tmpConst->AllowAttStaDiagFlg= tmpBKStr->BK_AllowAttStaDiagFlg;
|
||
if (ATTMOD_BREAKPRE == tmpAtt->sModePara.WorkMode)
|
||
{
|
||
tmpAtt->sModePara.WorkMode = ATTMOD_NOCOLL;
|
||
}
|
||
/*判断恢复后的工作模式,以及根据相应模式进行处理*/
|
||
ZKReModBK();
|
||
}
|
||
|
||
///*重启、切机、复位恢复关键参数后,写入三取二数据存储区*/
|
||
//ATTImportDataBackup();
|
||
}
|
||
}
|
||
|
||
/***********************************************
|
||
说明:数据备份
|
||
输入:
|
||
输出:
|
||
***********************************************/
|
||
void ZKCtrlDataBackUp(void)
|
||
{
|
||
if(POSE_OK != m_pZKTaskInfo->iReInit)
|
||
{
|
||
ZKDataBackUp();
|
||
ZKDoActDataTer();
|
||
}
|
||
}
|
||
|
||
/************************************************Flash********************************************************************/
|
||
/***********************************************
|
||
说明:从Flash恢复数据
|
||
注意:
|
||
***********************************************/
|
||
void ATTRestoreFromFlash(void)
|
||
{
|
||
AttBackupFlash_t AttBackupFlashPara;
|
||
UINT8 *tmpAddr = (UINT8 *)(ST_FIXDATA_ATTSADA_ADDR);
|
||
AttBackupFlash_t *tmpBackup = (AttBackupFlash_t *)(ST_FIXDATA_ATTSADA_ADDR); /*固定数据区*/
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
AttCmdFlash_t *PFlash = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
PFlash = &tmpConst->AttCmdFlashPara;
|
||
|
||
if ( NULL == tmpBackup || NULL == tmpConst || NULL == tmpAtt)
|
||
{
|
||
return;
|
||
}
|
||
|
||
/* 若固定数据区数据(星务从测控单机Flash备份过来的数据)有效 */
|
||
if ( BACKUP_TYPE_ATTFLASH == tmpBackup->sBKHead.iDataType && TRUE == DoCheckSaveData(tmpAddr, tmpBackup->sBKHead.iDataLength) && 0x55555555 == tmpBackup->iVldFlag )
|
||
{
|
||
FixDataStorFlashByType(FIXDATA_TYPE_ATTSADA, (UINT8*)tmpAddr, sizeof(AttBackupFlash_t)); /* 将固定数据区数据存到本地Flash */
|
||
}
|
||
/* 若测控单机数据无效,则从本地Flash读取数据到固定数据区 */
|
||
else
|
||
{
|
||
/* 读取Flash备份数据 */
|
||
memset((UINT8 *)tmpAddr, 0, ST_FIXDATA_ATTSADA_SIZE);
|
||
FixDataLoadFlashByType(FIXDATA_TYPE_ATTSADA, (UINT8 *)tmpAddr, sizeof(AttBackupFlash_t));
|
||
|
||
/* 检查类型和长度,若非法则不从Flash恢复 */
|
||
if ( BACKUP_TYPE_ATTFLASH != tmpBackup->sBKHead.iDataType || 0 == tmpBackup->sBKHead.iDataLength || 0xFFFFFFFF == tmpBackup->sBKHead.iDataLength )
|
||
{
|
||
return;
|
||
}
|
||
|
||
/* 检查和校验和有效标志位,若非法则不从Flash恢复 */
|
||
if ( TRUE != DoCheckSaveData(tmpAddr, tmpBackup->sBKHead.iDataLength) || 0x55555555 != tmpBackup->iVldFlag )
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
memcpy((UINT8 *)(&AttBackupFlashPara),((UINT8 *)tmpBackup ),sizeof(AttBackupFlash_t));
|
||
//姿控Flash数据读取
|
||
memcpy((UINT8 *)PFlash,((UINT8 *)(&AttBackupFlashPara.AttFlashPara) ),sizeof(AttCmdFlash_t));
|
||
//帆板Flash数据读取
|
||
memcpy((UINT8 *)(&tmpAtt->ATSFlashPara),((UINT8 *)(&AttBackupFlashPara.SadaFlashPara) ),sizeof(SadaCmdFlash_t));
|
||
|
||
}
|
||
|
||
|
||
/***********************************************
|
||
说明:备份到Flash
|
||
注意:
|
||
***********************************************/
|
||
void ATTBackupToFlash(void)
|
||
{
|
||
AttBackupFlash_t AttBackupFlashPara;
|
||
UINT8 *tmpAddr = (UINT8 *)(ST_FIXDATA_ATTSADA_ADDR);
|
||
AttBackupFlash_t *tmpBackup = (AttBackupFlash_t *)(ST_FIXDATA_ATTSADA_ADDR); /*固定数据区*/
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
AttCmdFlash_t *PFlash = NULL;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
PFlash = &tmpConst->AttCmdFlashPara;
|
||
|
||
//QSPI轮询状态(0x55:擦除使能)执行FLASH数据备份写操作
|
||
//QspiFlashWriteProcess(FIXDATA_TYPE_ATTSADA, sizeof(AttBackupFlash_t));
|
||
|
||
if ( NULL == tmpBackup || NULL == tmpConst || NULL == tmpAtt )
|
||
{
|
||
return;
|
||
}
|
||
|
||
/* 若固定数据区没有更新,则直接退出 */
|
||
if ( POSE_OK != tmpAtt->sModePara.ATTFlashSwitch )
|
||
{
|
||
return;
|
||
}
|
||
|
||
//姿控Flash数据写
|
||
memcpy((UINT8 *)(&AttBackupFlashPara.AttFlashPara),((UINT8 *)PFlash),sizeof(AttCmdFlash_t));
|
||
//SADA数据写
|
||
memcpy((UINT8 *)(&AttBackupFlashPara.SadaFlashPara),(UINT8 *)(&tmpAtt->ATSFlashPara),sizeof(SadaCmdFlash_t));
|
||
//写入Flash缓存
|
||
memcpy((UINT8 *)tmpBackup,((UINT8 *)(&AttBackupFlashPara) ),sizeof(AttBackupFlash_t));
|
||
|
||
/* 设定有效标志位 */
|
||
tmpBackup->iVldFlag = 0x55555555;
|
||
|
||
/* 设定Flash头的长度、类型、校验和 */
|
||
tmpBackup->sBKHead.iDataLength = sizeof(AttBackupFlash_t) - sizeof(sSaveDataHead);
|
||
tmpBackup->sBKHead.iDataType = (UINT16)BACKUP_TYPE_ATTFLASH;
|
||
tmpBackup->sBKHead.iDataCheck = DoGetCheckSum(tmpAddr+sizeof(sSaveDataHead), tmpBackup->sBKHead.iDataLength);
|
||
|
||
/* 写入Flash */
|
||
FixDataStorFlashByType(FIXDATA_TYPE_ATTSADA, (UINT8*)tmpAddr, sizeof(AttBackupFlash_t));
|
||
|
||
/* 清除更新标志位 */
|
||
tmpAtt->sModePara.ATTFlashSwitch = POSE_NO;
|
||
}
|
||
|
||
|
||
/***********************************************
|
||
说明:姿控的动作前准备,获取轨道数据
|
||
注意:
|
||
***********************************************/
|
||
void ZKPreAction(void)
|
||
{
|
||
UINT8 i = 0x00;
|
||
UINT16 *tmpAddr = (UINT16 *)MAG_BASE_ADDR;
|
||
|
||
sAttPriData *tmpAtt = NULL;
|
||
sAttOrbitGetPara_t *pOrbit = NULL;
|
||
OrbitPriData_t *tmpOrbit = NULL;
|
||
sAttModPara_t *pWMod = NULL;
|
||
MtPara_t *pMt = NULL;
|
||
sSadaCtrlInfo* tmpSadaCtlInfo = (sSadaCtrlInfo *)SADACTR_BASE_ADDR;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
if ((NULL == tmpSadaCtlInfo) || (NULL == tmpAtt ))
|
||
{
|
||
return;
|
||
}
|
||
pOrbit = &tmpAtt->sOrbitPara;
|
||
pWMod =&tmpAtt->sModePara;
|
||
pMt=&tmpAtt->sPerPara.MtPara;
|
||
|
||
/*获取轨道数据*/
|
||
tmpOrbit = (OrbitPriData_t *)ORBIT_BASE_ADDR;
|
||
for(i = 0; i< 3; ++i)
|
||
{
|
||
pOrbit->JPos[i] = (TYPE_CAL)tmpOrbit->sPoseUseOrbit.Rj[i];
|
||
pOrbit->JVel[i] = (TYPE_CAL)tmpOrbit->sPoseUseOrbit.Vj[i];
|
||
}
|
||
pOrbit->GAST = (TYPE_CAL)tmpOrbit->sPoseUseOrbit.GAST;
|
||
pOrbit->MJC = (TYPE_CAL)tmpOrbit->sPoseUseOrbit.MJC;
|
||
pOrbit->MJCLv = tmpOrbit->sPoseUseOrbit.MJCLv;
|
||
pOrbit->OrbitVld = tmpOrbit->sPoseUseOrbit.ObtTZKVld;
|
||
|
||
//获取帆板数据
|
||
pWMod->WModSadaOpenPre= pWMod->WModSadaOpen;
|
||
pWMod->WModSadaOpen=tmpSadaCtlInfo->sSadaDataUP.SadaOpenFlag; //帆板展开信号
|
||
pMt->MTStatus = 0xFF & ReadReg(tmpAddr,MAG_REG_SATUS);
|
||
//单机加电状态量获取
|
||
ZKPowerState();
|
||
}
|
||
|
||
|
||
/***********************************************
|
||
说明:轨道控制模块,轨控主函数.
|
||
输入:上注轨控数据,当前模式
|
||
输出:PPU开关
|
||
***********************************************/
|
||
void ZKOCOrbitCtl(void)
|
||
{
|
||
UINT16 tmpiDataCheck = 0; /*数据校验和*/
|
||
UINT8 cmdDataBuff[50] = {0};
|
||
UINT32 SatTime[2] ={0,0};
|
||
UINT8 PPUOn[8] = {0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||
UINT8 PPUOff[8] = {0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
|
||
PPUPara_t *PPPU = NULL;
|
||
|
||
sTaskInfo* tmpTaskInfo = NULL;
|
||
sAttPriData *tmpAtt = NULL;
|
||
sAttOrbitCtlData_t *tmpOrbCmd = NULL;
|
||
sAttOrbitCtlInfo_t *pOrb = NULL;
|
||
sAttModPara_t *pWMod =NULL;
|
||
AttIMPTPara_t *pImpt = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpOrbCmd=(sAttOrbitCtlData_t *)ATTCLT_DATA3_ADDR;
|
||
tmpTaskInfo = GetTaskInfoBT(TASK_ATTCTL);
|
||
if ((NULL == tmpOrbCmd) || (NULL == tmpAtt))
|
||
{
|
||
return;
|
||
}
|
||
pWMod=&tmpAtt->sModePara;
|
||
pOrb=&tmpAtt->sOrbitInp;
|
||
PPPU = &tmpAtt->sPerPara.PPUPara;
|
||
pImpt= &tmpAtt->sIMPTPara;
|
||
memset(cmdDataBuff, 0x00, 50);
|
||
|
||
GetTime(SatTime); //获取当前星上时
|
||
|
||
if (POSE_OK != pOrb->OrbDataIn_OK)/*轨控数据包无效,直接退出*/
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (pOrb->CurOrbCtrlPcak_ID >= 50)
|
||
{
|
||
DoSetInt32To8(ATT_CMDMODE_MODSUNCAP, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID]= 0x00;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATT_CMDMODE_MODSUNCAP);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
return;
|
||
}
|
||
|
||
//轨道控制数据选择
|
||
if (POSE_OK == pOrb->OrbDataIn_OK)
|
||
{
|
||
if ((pOrb->CurOrbCtrlPcak_ID == (tmpOrbCmd->OrbCtrlPack[pOrb->CurOrbCtrlPcak_ID].OrbCtrlPcak_ID -1))&&(pOrb->CurOrbCtrlPcak_PreID != pOrb->CurOrbCtrlPcak_ID))
|
||
{
|
||
pOrb->CurOrbCtrlPcak_PreID = pOrb->CurOrbCtrlPcak_ID;
|
||
tmpiDataCheck =DoGetCheckSum(&tmpOrbCmd->OrbCtrlPack[pOrb->CurOrbCtrlPcak_ID].OrbCtrlPcak_ID , 24);
|
||
if ((pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID]== 0x55)&&(tmpiDataCheck == tmpOrbCmd->OrbCtrlPack[pOrb->CurOrbCtrlPcak_ID].OrbDateSum))
|
||
{
|
||
memcpy(&(pOrb->OrbCtrlPackCur), &(tmpOrbCmd->OrbCtrlPack[pOrb->CurOrbCtrlPcak_ID]), sizeof(AttOrbCtrlPara_t));
|
||
}
|
||
else
|
||
{
|
||
DoSetInt32To8(ATT_CMDMODE_MODSUNCAP, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID]= 0x00;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATT_CMDMODE_MODSUNCAP);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
if((POSE_OK == pOrb->OrbDataIn_OK)
|
||
&&(0x55 == pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID])
|
||
)
|
||
{
|
||
if(((ATTMOD_WhlTOSUN == pWMod->WorkMode) ||(ATTMOD_WHEELTOEARTH == pWMod->WorkMode))
|
||
&&(SatTime[0]>=pOrb->OrbCtrlPackCur.OrbAttAjustTime)
|
||
&&(SatTime[0]<pOrb->OrbCtrlPackCur.OrbCtrl_StartTime)
|
||
)
|
||
{
|
||
DoSetInt32To8(ATT_WORKMODE_ORBITCTLPRE, cmdDataBuff);
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATTMOD_ATTAJUSTPRE);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
}
|
||
else if((ATTMOD_ATTAJUSTPRE == pWMod->WorkMode)
|
||
&&((SatTime[0]>=pOrb->OrbCtrlPackCur.OrbCtrl_StartTime)
|
||
&&(SatTime[0]<= (pOrb->OrbCtrlPackCur.OrbCtrl_StartTime+pOrb->OrbCtrlPackCur.OrbCtrl_TimeLength)))
|
||
)
|
||
{
|
||
DoSetInt32To8(ATT_WORKMODE_ORBITCTL, cmdDataBuff);
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATTMOD_ORBITCTL);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
if (POSE_OK == pImpt->PPUUseStatus)
|
||
{
|
||
//PPU开机指令
|
||
dev_can_write(DEV_NO_CAN0,PPUOn,8);
|
||
PPPU->PPUOUT_Sta = POSE_OK;
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
}
|
||
}
|
||
}
|
||
else if((ATTMOD_ORBITCTL == pWMod->WorkMode)
|
||
&&((SatTime[0]>=(pOrb->OrbCtrlPackCur.OrbCtrl_StartTime+pOrb->OrbCtrlPackCur.OrbCtrl_TimeLength))&&
|
||
(SatTime[0]<= (pOrb->OrbCtrlPackCur.OrbCtrl_StartTime+pOrb->OrbCtrlPackCur.OrbCtrl_TimeLength + 1))))
|
||
{
|
||
/*进入到这里,说明一组轨控流程正常退出*/
|
||
switch(pOrb->OrbCtrlPackCur.OrbCtrl_Mod)
|
||
{
|
||
case 0x11:
|
||
DoSetInt32To8(ATT_CMDMODE_WHEELTOEARTH, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID ++;
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
case 0x22:
|
||
DoSetInt32To8(ATT_CMDMODE_WhlTOSUN, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID ++;
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
case 0x33:
|
||
DoSetInt32To8(ATT_WORKMODE_ORBITCTLPRE, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID ++;
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
case 0x44:
|
||
DoSetInt32To8(ATT_CMDMODE_ONLTOEARTH, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID]= 0x00;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_NO;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
case 0x55:
|
||
DoSetInt32To8(ATT_CMDMODE_WhlTOSUN, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID]= 0x00;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_NO;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
default:
|
||
DoSetInt32To8(ATT_CMDMODE_MODSUNCAP, cmdDataBuff);
|
||
pOrb->CurOrbCtrlPcak_ID = 0;
|
||
pOrb->CurOrbCtrlPcak_PreID =0xFF;
|
||
pOrb->OrbCtrlPcak_ReceiveFlg[pOrb->CurOrbCtrlPcak_ID]= 0x00;
|
||
PPPU->PPUT_FIR_Cnt = 0;
|
||
pOrb->OrbDataIn_OK = POSE_NO;
|
||
|
||
/*设置下一拍关PPU电源*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Flag = POSE_OK;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_Err_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Flag = POSE_NO;/*正常退出轨控标志使能*/
|
||
PPPU->PPU_OrbitCtl_Quit_OK_Cnt = 0;/*退出轨控后节拍计数清零*/
|
||
break;
|
||
}
|
||
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 ;*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
|
||
}
|
||
|
||
PPPU->PPUOUT_Sta = POSE_NO;/*电推指令开关标志为关*/
|
||
tmpAtt->sCtlPara.ZK_Ctrl_Reserver111 = POSE_NO;
|
||
//PPU关机指令
|
||
dev_can_write(DEV_NO_CAN0, PPUOff, 8);/*轨控正常退出,电推关机操作,需要5秒后给电推供电*/
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/***********************************************
|
||
说明:姿控的动作前准备,获取目标定向数据
|
||
注意:
|
||
***********************************************/
|
||
void ZKOCTarCtl(void)
|
||
{
|
||
UINT16 tmpiDataCheck =0; /*数据校验和*/
|
||
UINT8 cmdDataBuff[50] = {0};
|
||
UINT32 SatTime[2] ={0,0};
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
sAttTARCCtlData_t *tmpTARCmd = NULL;
|
||
sAttTARCCtlInfo_t *pTARC = NULL;
|
||
sAttModPara_t *pWMod =NULL;
|
||
sTaskInfo* tmpTaskInfo = NULL;
|
||
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst=(AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
tmpTARCmd=(sAttTARCCtlData_t *)ATTCLT_DATA6_ADDR;
|
||
if (NULL == tmpTARCmd || NULL == tmpAtt || NULL == tmpConst)
|
||
{
|
||
return;
|
||
}
|
||
|
||
tmpTaskInfo = GetTaskInfoBT(TASK_ATTCTL);
|
||
|
||
pWMod=&tmpAtt->sModePara;
|
||
pTARC=&tmpAtt->sTARCInp;
|
||
|
||
if (POSE_OK != pTARC->TARDataIn_OK)/*目标定向数据包无效,直接退出*/
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (pTARC->CurTARCtrlPcak_ID >= 30)
|
||
{
|
||
pTARC->CurTARCtrlPcak_ID = 0;
|
||
return;
|
||
}
|
||
|
||
memset(cmdDataBuff, 0x00, 50);
|
||
|
||
GetTime(SatTime); //获取当前星上时
|
||
|
||
if (POSE_OK==pTARC->TARDataIn_OK)
|
||
{
|
||
if ((pTARC->CurTARCtrlPcak_ID == (tmpTARCmd->TARCtrlPack[pTARC->CurTARCtrlPcak_ID].TARCtrlPcak_ID -1)) &&(pTARC->CurTARCtrlPcak_ID != pTARC->CurTARCtrlPcak_PreID))
|
||
{
|
||
pTARC->CurTARCtrlPcak_PreID = pTARC->CurTARCtrlPcak_ID;
|
||
tmpiDataCheck=DoGetCheckSum(&(tmpTARCmd->TARCtrlPack[pTARC->CurTARCtrlPcak_ID].TARCtrlPcak_ID), 23);
|
||
if ((pTARC->TARCtrlPcak_ReceiveFlg[pTARC->CurTARCtrlPcak_ID]== 0x55)&&(tmpiDataCheck == tmpTARCmd->TARCtrlPack[pTARC->CurTARCtrlPcak_ID].TARCtrlDateSum))
|
||
{
|
||
memcpy(&(pTARC->TARCtrlPackCur), &(tmpTARCmd->TARCtrlPack[pTARC->CurTARCtrlPcak_ID]), sizeof(sAttTARCCtlPara_t));
|
||
}
|
||
else
|
||
{
|
||
pTARC->TARCtrlPcak_ReceiveFlg[pTARC->CurTARCtrlPcak_ID] = 0x00;
|
||
DoSetInt32To8(ATT_CMDMODE_ONLTOEARTH, cmdDataBuff);
|
||
pTARC->CurTARCtrlPcak_ID=0;
|
||
pTARC->CurTARCtrlPcak_PreID =0xFF;
|
||
pTARC->TARDataIn_OK = POSE_NO;
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
return ;
|
||
}
|
||
}
|
||
}
|
||
|
||
if((POSE_OK == pTARC->TARDataIn_OK)
|
||
&&(0x55 == pTARC->TARCtrlPcak_ReceiveFlg[pTARC->CurTARCtrlPcak_ID])
|
||
)
|
||
{
|
||
if(((ATTMOD_WhlTOSUN == pWMod->WorkMode) ||(ATTMOD_WHEELTOEARTH == pWMod->WorkMode))
|
||
&&(SatTime[0]>=pTARC->TARCtrlPackCur.TARCtrl_JustTime)
|
||
&&(SatTime[0]<pTARC->TARCtrlPackCur.TARCtrl_StartTime)
|
||
)
|
||
{
|
||
DoSetInt32To8(ATT_WORKMODE_ATTAJUST, cmdDataBuff);
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATTMOD_ATTAJUSTPRE);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
}
|
||
else if((ATTMOD_ATTAJUST == pWMod->WorkMode)
|
||
&&((SatTime[0]>=pTARC->TARCtrlPackCur.TARCtrl_StartTime)
|
||
&&(SatTime[0]<= (pTARC->TARCtrlPackCur.TARCtrl_StartTime+pTARC->TARCtrlPackCur.TARCtrl_TimeLength)))
|
||
)
|
||
{
|
||
DoSetInt32To8(ATT_WORKMODE_ONLTOTAR, cmdDataBuff);
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATTMOD_ORBITCTL);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
}
|
||
else if((ATTMOD_ONLTOTAR == pWMod->WorkMode)
|
||
&&((SatTime[0]>=(pTARC->TARCtrlPackCur.TARCtrl_StartTime+pTARC->TARCtrlPackCur.TARCtrl_TimeLength))&&
|
||
(SatTime[0]<= (pTARC->TARCtrlPackCur.TARCtrl_StartTime+pTARC->TARCtrlPackCur.TARCtrl_TimeLength + 1))))
|
||
{
|
||
if (pTARC->CurTARCtrlPcak_ID < 29)
|
||
{
|
||
pTARC->CurTARCtrlPcak_ID ++;
|
||
if(0 == tmpTARCmd->TARCtrlPack[pTARC->CurTARCtrlPcak_ID].TARCtrlPcak_ID)/*下一包ID为0,认为目标定向结束*/
|
||
{
|
||
pTARC->TARCtrlPcak_ReceiveFlg[pTARC->CurTARCtrlPcak_ID] = 0x00;
|
||
DoSetInt32To8(ATT_CMDMODE_ONLTOEARTH, cmdDataBuff);
|
||
pTARC->CurTARCtrlPcak_ID=0;
|
||
pTARC->CurTARCtrlPcak_PreID =0xFF;
|
||
pTARC->TARDataIn_OK = POSE_NO;
|
||
}
|
||
else
|
||
{
|
||
DoSetInt32To8(ATT_WORKMODE_ATTAJUST, cmdDataBuff);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
DoSetInt32To8(ATT_CMDMODE_ONLTOEARTH, cmdDataBuff);
|
||
pTARC->CurTARCtrlPcak_ID=0;
|
||
pTARC->CurTARCtrlPcak_PreID =0xFF;
|
||
pTARC->TARCtrlPcak_ReceiveFlg[pTARC->CurTARCtrlPcak_ID]= 0x00;
|
||
pTARC->TARDataIn_OK = POSE_NO;
|
||
}
|
||
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中 进行 ZKModDoSet(ATTMOD_ORBITCTL);*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
if((POSE_OK == pTARC->TARDataIn_OK) && (ATTMOD_ONLTOTAR == pWMod->WorkMode))
|
||
{
|
||
/*判断当前时间,是否在目标定向时间段内*/
|
||
if (!(
|
||
(SatTime[0]>=(pTARC->TARCtrlPackCur.TARCtrl_StartTime-2)) &&
|
||
(SatTime[0]<= (pTARC->TARCtrlPackCur.TARCtrl_StartTime + pTARC->TARCtrlPackCur.TARCtrl_TimeLength+2))
|
||
))
|
||
{
|
||
/*不在的话退出,进入对地定向模式*/
|
||
DoSetInt32To8(ATT_CMDMODE_ONLTOEARTH, cmdDataBuff);
|
||
pTARC->CurTARCtrlPcak_ID=0;
|
||
pTARC->CurTARCtrlPcak_PreID =0xFF;
|
||
pTARC->TARCtrlPcak_ReceiveFlg[pTARC->CurTARCtrlPcak_ID]= 0x00;
|
||
pTARC->TARDataIn_OK = POSE_NO;
|
||
if(CheckBlockRing(&tmpTaskInfo->sCmdBuffer, tmpTaskInfo->sCmdDataBuff, MOD_REQ_MAXLEN, MOD_MAX_REQUEST))
|
||
{
|
||
/* 在姿控的指令处理中*/
|
||
BlockRingAdd(&tmpTaskInfo->sCmdBuffer, cmdDataBuff, TRUE);
|
||
}
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
///***********************************************
|
||
//说明:最小模式单机加电
|
||
//注意: 每0.5秒调用一次
|
||
//***********************************************/
|
||
void ZKMiniPowerOn(void)
|
||
{
|
||
// UINT8 i = 0;
|
||
UINT8 *tmpAddr = 0X00;
|
||
sAttPriData *tmpAtt = NULL;
|
||
AttCtrlConst_t *tmpConst = NULL;
|
||
// AttBKPara_t *tmpBKStr = NULL;
|
||
tmpAtt = (sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
tmpConst = (AttCtrlConst_t *)ATTCLT_DATA2_ADDR;
|
||
|
||
if((NULL == tmpAtt) || (NULL == tmpConst))
|
||
{
|
||
return;
|
||
}
|
||
|
||
/*获取双机FIFO数据地址*/
|
||
tmpAddr = (UINT8 *)(ST_IMPDATA_ADDR + ST_IMPDATA_HEAD + ST_IMPDATA_ATTMNG_OFFSET * 64);
|
||
// tmpBKStr = (AttBKPara_t *)tmpAddr;
|
||
|
||
/*首次卫星加电操作*/
|
||
ZKDptPowerOnPrc();
|
||
|
||
/*做重新初始化动作*/
|
||
if(POSE_OK == tmpAtt->sModePara.MiniDataSet)
|
||
{
|
||
m_pZKTaskInfo->iReInit= 0;
|
||
tmpAtt->sModePara.MiniDataSet =POSE_NO;
|
||
tmpAtt->sModePara.ReDataBK = POSE_NO;
|
||
|
||
/*获取本地FLASH 飞轮ID的装订参数*/
|
||
ZKREFlashBK();
|
||
|
||
/*读取flash区间数据*/
|
||
ATTRestoreFromFlash();
|
||
|
||
/*重启/切机/复位 飞轮转速电流给0*/
|
||
SetWheel(1,0,WHL_CMD_CODE_CURR);
|
||
SetWheel(2,0,WHL_CMD_CODE_CURR);
|
||
SetWheel(3,0,WHL_CMD_CODE_CURR);
|
||
SetWheel(4,0,WHL_CMD_CODE_CURR);
|
||
|
||
ZKModDoSet(ATTMOD_RATEDMP);
|
||
}
|
||
}
|
||
|
||
|
||
/***********************************************
|
||
说明:姿控的所有动作,每周期一次调度
|
||
输入:
|
||
输出:
|
||
返回:
|
||
注意:
|
||
***********************************************/
|
||
void ZKAction(void)
|
||
{
|
||
sAttPriData *tmpAtt = NULL;
|
||
MtPara_t *pMt = NULL;
|
||
//sAttModPara_t *pWMod;
|
||
sTaskMngDataRecord *tmpTaskMngDataRcd = NULL;
|
||
tmpTaskMngDataRcd = (sTaskMngDataRecord *)ST_TASKMNG_ADDR;
|
||
tmpAtt=(sAttPriData *)ATTCLT_DATA1_ADDR;
|
||
if((NULL == tmpAtt)||(NULL == tmpTaskMngDataRcd))
|
||
return;
|
||
pMt=&tmpAtt->sPerPara.MtPara;
|
||
|
||
if (POSE_OK == tmpAtt->sModePara.ModeSwitchFlg)
|
||
{
|
||
ZKModChgInit();
|
||
}
|
||
|
||
/*准备原始轨道数据*/
|
||
ZKPreAction();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
#ifdef MINMODULE_TYPE
|
||
|
||
ZKMiniPowerOn();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
/*模式管理*/
|
||
ZKDoModeAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
/*环境模型计算*/
|
||
ZKEnvAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
if (0xFFFFFFFE > pMt-> MTCtrlTime)
|
||
{
|
||
pMt-> MTCtrlTime ++; //此计数应该放在此强计和此模块前面
|
||
}
|
||
else
|
||
{
|
||
pMt-> MTCtrlTime = 0;
|
||
}
|
||
|
||
//数据预处理
|
||
ZKDPAction();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//*姿态确定*/
|
||
ZKPGAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//*姿态控制
|
||
ZKPosCtlAct(&tmpAtt->sDeterPara, &tmpAtt->sGuidLawPara, &tmpAtt->sCtlPara);
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
/*指令分配*/
|
||
ZKCmdDspAct();
|
||
tmpAtt->sModePara.WorkModePre = tmpAtt->sModePara.WorkMode;
|
||
m_pZKTaskInfo->iRunPos++;
|
||
#else
|
||
/*模式管理*/
|
||
ZKDoModeAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
/*环境模型计算*/
|
||
ZKEnvAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
if (0xFFFFFFFE > pMt-> MTCtrlTime)
|
||
{
|
||
pMt-> MTCtrlTime ++; //此计数应该放在此强计和此模块前面
|
||
}
|
||
else
|
||
{
|
||
pMt-> MTCtrlTime = 0;
|
||
}
|
||
|
||
/*数据预处理*/
|
||
ZKDPAction();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
/*故障诊断与重构*/
|
||
ZKREAction();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
///*姿态确定*/
|
||
ZKPGAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
///*导引率计算*/
|
||
ZKDYAction();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
///*姿态控制*/
|
||
ZKPosCtlAct(&tmpAtt->sDeterPara, &tmpAtt->sGuidLawPara, &tmpAtt->sCtlPara);
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//目标定向控制处理
|
||
ZKOCTarCtl();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//轨道控制处理
|
||
ZKOCOrbitCtl();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
/*指令分配*/
|
||
ZKCmdDspAct();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
#endif
|
||
}
|
||
/***********************************************
|
||
说明:主任务函数
|
||
输入:taskID: 任务编号,与任务信息表中的编号一致
|
||
输出:
|
||
返回:
|
||
注意:
|
||
***********************************************/
|
||
|
||
void AttCtrlMng(UINT8 taskID)
|
||
{
|
||
sTaskMngDataRecord *tmpTaskMngDataRcd = NULL;
|
||
tmpTaskMngDataRcd = (sTaskMngDataRecord *)ST_TASKMNG_ADDR;
|
||
|
||
/*初始化模块*/
|
||
if(!AttCtrlInit(taskID))
|
||
{
|
||
m_pZKTaskInfo->iErrCode = ERR_CODE_INIT;
|
||
m_pZKTaskInfo->iStatus = TASK_STATUS_FAIL;
|
||
return;
|
||
}
|
||
|
||
/*任务主循环*/
|
||
while(TRUE)
|
||
{
|
||
/*等待唤醒,永久等待*/
|
||
OSSemPend(&m_pZKTaskInfo->sMngSem, 0, OS_OPT_PEND_BLOCKING,
|
||
&m_pZKTaskInfo->sMngTs,
|
||
&m_pZKTaskInfo->sMngErr);
|
||
|
||
StartTaskAction(m_pZKTaskInfo);
|
||
|
||
|
||
ZKCtrlReinitBK();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//分离标志
|
||
if(0x55 == tmpTaskMngDataRcd->bSHDepart)
|
||
{
|
||
//姿轨控控制
|
||
ZKAction();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
}
|
||
|
||
//处理指令
|
||
ZKCmdResolve();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//*数据备份*/
|
||
ZKCtrlDataBackUp();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//flash数据备份
|
||
ATTBackupToFlash();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
ATTImportDataBackup();
|
||
m_pZKTaskInfo->iRunPos++;
|
||
|
||
//m_pZKTaskInfo->iRunPos++;
|
||
StopTaskAction(m_pZKTaskInfo);
|
||
|
||
/*退出进程*/
|
||
if(TASK_PERMIT_STOP == m_pZKTaskInfo->iPermit)
|
||
{
|
||
m_pZKTaskInfo->iTaskID = 0;
|
||
m_pZKTaskInfo->iStatus = TASK_STATUS_STOP;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|