void Test::StartTest(void) { IedDb.TestState = T_INIT; SuspendTask(TASK_MANUAL); SuspendTask(TASK_METAGE); ActiveTask(TASK_TEST,PRIOD_TEST); }
void Test::StopTest(void) { SuspendTask(TASK_TEST); SuspendTask(TASK_METAGE); StepMotor[0].StopMotor(); StopAllFan(); for(int i=0;i<FUZZY_ARRAY_SIZE;i++) { IedDb.fuzzy[i].StopStove(); } IedDb.TestState = T_INIT; ResetSystem(); }
void TaskReset(void) { switch(IedDb.ResetState) { case REST_START: SuspendTask(TASK_MANUAL); ////停止手动进位任务 CtrlOxygenValve(false); //关闭气阀 CtrlNitrogenValve(false); StopAllFan(); StepMotor[0].StopMotor(); LowTempStove.StopStoveBar(); LeftHighTempStove.StopStoveBar(); RightHighTempStove.StopStoveBar(); //////////////////////////////////////////////////////////// //将左右炉移动至底位,样盘上升至称样位 LowTempStove.MoveStoveBar(LowVertStoveBar::POS_TOP); LeftHighTempStove.MoveStoveBar(HighVertStoveBar::POS_BOT); RightHighTempStove.MoveStoveBar(HighVertStoveBar::POS_BOT); // IedDb.ResetState = REST_SAMPLEDISH; break; case REST_SAMPLEDISH: if( //中间炉子到位 //(LowTempStove.m_StovePos==VertStoveBar::POS_TOP) (LowTempStove.GetTopOpto() == 0) &&(LowTempStove.GetBotOpto() == 1)) { if((IedDb.DownloadWorkParam.m_szSystemType==G5000) ||((LeftHighTempStove.m_StovePos==HighVertStoveBar::POS_BOT) &&(RightHighTempStove.m_StovePos==HighVertStoveBar::POS_BOT))) { StepMotor[0].MoveStepMotor(1); IedDb.ResetState = REST_END; } } break; case REST_END: if(IedDb.MtrState.CurSamplePos==1) { SuspendTask(TASK_RESET); ActiveTask(TASK_MANUAL,20L); //启动手动进位 } break; default: IedDb.ResetState = REST_START; break; } }
void toggleBlue(void) //function to toggle BlueLed { while(1) { GPIO_PORTF_AHB_DATA_R ^= BLUE_LED; //Toggle blue led.. SuspendTask(1000); //set time to Suspend this task } }
void toggleGreen(void) //function to toggle GreenLed { while(1) { GPIO_PORTF_AHB_DATA_R ^= GREEN_LED; //Toggle green led.. SuspendTask(1000); //set time to Suspend this task } }
void toggleRed(void) //function to toggle RedLed { while(1) { GPIO_PORTF_AHB_DATA_R ^= RED_LED; //Toggle red led.. surprise! SuspendTask(1000); //set time to Suspend this task } }
void Metage::TaskMetage(void) { long l; IED_DATABASE::YP_DATA *Sample = &IedDb.Sample1[0]; MetagePtr = &Sample[m_cPos-1].UQuality.Q[metagType]; int MetageBit = MetagePtr==&Sample[m_cPos-1].UQuality.SQuality.lMPot?S_WEIGHT_POT: //置当前状态:正在称坩埚或称样 MetagePtr==&Sample[m_cPos-1].UQuality.SQuality.lM0?S_WEIGHT_SAMPLE: MetagePtr==&Sample[m_cPos-1].UQuality.SQuality.lM1?S_TEST_WATER: MetagePtr==&Sample[m_cPos-1].UQuality.SQuality.lMPotSample2?S_WEIGHT_COVER: MetagePtr==&Sample[m_cPos-1].UQuality.SQuality.lM2?S_TEST_VOL: MetagePtr==&Sample[m_cPos-1].UQuality.SQuality.lM3?S_TEST_ASH:S_TEST_ASH+1; gcKey=GetKey(); switch(*m_cSchedule) { case M_INIT: //初始化 ResetSystem(); m_cMDelay=0; m_cPos=1; *m_cSchedule=M_POS; break; case M_POS: //移动炉子到称样位 SuspendTask(TASK_MANUAL); //停止手动进位 if((m_cPos==IedDb.MtrState.CurSamplePos) && (0==IedDb.MtrState.bRun)&& (LowTempStove.m_StovePos==LowVertStoveBar::POS_TOP)&& ((IedDb.DownloadWorkParam.m_szSystemType==G5000)|| ((LeftHighTempStove.m_StovePos==LowVertStoveBar::POS_BOT)&& (RightHighTempStove.m_StovePos==LowVertStoveBar::POS_BOT))))//判位置 { //if(IedDb.Sample1[m_cPos-1].cSta>S_NULL) //有样 if(Sample[m_cPos-1].cSta&(1<<MetageBit)) { m_cMDelay = 0; m_cDelayCnt = 0; MTBalan.ZeroWeight(); //清0 *m_cSchedule=M_TARE; //TODO:清除目标位置重量数据 } else { //无样 *m_cSchedule=M_NEXTPOS; } } break; case M_TARE: l=MTBalan.GetBalanceAvr(); if((l>-BALANCE_ZERO && l<BALANCE_ZERO)||m_cDelayCnt>MAX_WEIGHTING_CNT) //除皮成功或者除皮次数超过规定次数 { LowTempStove.MoveStoveBar(LowVertStoveBar::POS_BOT); //移动炉子到称样位置 *m_cSchedule=M_METAGE; m_cDelayCnt = 0; m_cMDelay=0; } else if(m_cMDelay++>TARE_DELAY) //不稳定,再次清零 { BeepBalErr(); //除皮不稳定,提醒一次 MTBalan.ZeroWeight(); //清0 m_cMDelay=0; m_cDelayCnt ++; } break; case M_METAGE: //称量 if((LowTempStove.m_StovePos==LOW_POS_BOT)&& ((IedDb.DownloadWorkParam.m_szSystemType==G5000)|| ((LeftHighTempStove.m_StovePos==LowVertStoveBar::POS_BOT)&& (RightHighTempStove.m_StovePos==LowVertStoveBar::POS_BOT))))//判位置 { //称的不是样重,或者快速称样,或者确认,进入保存重量环节 if(((metagType==T_SAMPLE)&&(gcKey==KEY_ENT))||(T_QUICK==metagSpeed)||(metagType!=T_SAMPLE)) { *m_cSchedule=M_SAVE; if(KEY_ENT==gcKey) { m_cMDelay = M_DELAY; BeepOK(); } } m_cMDelay ++; //TODO:增加称样时到达重量范围内的提示音 } break; case M_SAVE: if(m_cMDelay++>M_DELAY) //延时M_DELAY后存数 { m_cMDelay=M_DELAY-2; m_cDelayCnt++; if((MTBalan.BalanceMaxErr(METAGE_MAXERR))||m_cDelayCnt>MAX_WEIGHTING_CNT) //增加称样超时 { *MetagePtr= MTBalan.GetBalanceAvr(); //存坩埚质量 if(m_cDelayCnt>MAX_WEIGHTING_CNT) { BeepBalErr(); //*MetagePtr= IedDb.buf.CurrWeight; //存坩埚不稳定质量 } LowTempStove.MoveStoveBar(LOW_POS_BOT); //移动炉子到放样位置 m_cDelayCnt = 0; setbit(Sample[m_cPos-1].cCSta,MetageBit); *m_cSchedule=M_NEXTPOS; } } break; case M_NEXTPOS: //转到下一个样位 if((LowTempStove.m_StovePos==LOW_POS_TOP)&& ((IedDb.DownloadWorkParam.m_szSystemType==G5000)|| ((LeftHighTempStove.m_StovePos==LowVertStoveBar::POS_BOT)&& (RightHighTempStove.m_StovePos==LowVertStoveBar::POS_BOT))))//判位置 { while(m_cPos<*MAX_SAMPLE) { //有坩埚,该位有上位机下载下来,只要有一个实验项目就会有 // 是否称量该重量,由是否做该实验决定 if(Sample[m_cPos].cSta&(1<<MetageBit)) { m_cPos++; m_cMDelay = 0; StepMotor[0].MoveStepMotor(m_cPos); //转到下个样位 *m_cSchedule=M_POS; return; } m_cPos++; } StepMotor[0].MoveStepMotor(1); //转到1st样位 *m_cSchedule=M_END; __NOP(); } break; case M_END: m_cPos=1; //完成,复位 SuspendTask(TASK_METAGE); //停止“称量”任务 ActiveTask(TASK_MANUAL,100L); //启动手动进位 beep.beep(2,1000L); //称量完毕,提示音 break; } }
void Test::TaskTestGB(void) { char i; long l; CFuzzy *pFuzzy = IedDb.fuzzy; //升温到105度 ; long *ADValue = IedDb.ADValue.ad ; SuspendTask(TASK_MANUAL); switch(IedDb.TestState) { case T_INIT: //初始化 SuspendTask(TASK_MANUAL); //停止手动进位 ResetSystem(); m_MDelay = 0; m_Pos = 1; m_TestTimer = -1; //增加条件判断,是否做该实验 switch(GetWillBeTestedType()) { case S_TEST_WATER: IedDb.TestState = T_WARM_WATER; break; case S_TEST_VOL: IedDb.TestState = T_WARM_HIGH1; break; case S_TEST_ASH: IedDb.TestState = T_WARM_HIGH2; break; default: IedDb.TestState = T_END; break; } break; case T_WARM_WATER: case T_TEST_WATER: case T_WEIGHT_WATER: case T_WATERCOOL: case T_WATER_END: TestWater(); break; case T_WARM_HIGH1: case T_TEST_VOL: case T_BURN_VOL: case T_WEIGHT_VOL: case T_VOL_END: TestVol(); break; case T_WARM_HIGH2: case T_TEST_ASH: case T_BURN_ASH: case T_WEIGHT_ASH: case T_ASH_END: TestAsh(); break; case T_END: __NOP(); break; default: ASSERT(false); break; } }