Exemplo n.º 1
0
void Test::StartTest(void)
{
	IedDb.TestState = T_INIT;
	SuspendTask(TASK_MANUAL);
	SuspendTask(TASK_METAGE);
	ActiveTask(TASK_TEST,PRIOD_TEST);
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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;
	}
}
Exemplo n.º 4
0
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
    }
}
Exemplo n.º 5
0
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
    }
}
Exemplo n.º 6
0
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
    }
}
Exemplo n.º 7
0
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;	 
    }	  
}
Exemplo n.º 8
0
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;
        
    }	
}