Ejemplo n.º 1
0
void BeepError() {
	int i;

	for (i=0; i<2; i++) {
		BeepOK();
		if (bSWFlag)
			bSWFlag = FALSE;
			break;
	}
}
Ejemplo n.º 2
0
/* For tuning beep sound */
void TuneBeep() {
	register int i, n;
	int sound=0;

	i=0;
	clrscr();
	while(1) {
		gotoxy(2,2);
		printf("base=%d divisor=%d ", base, divisor);

		switch(getch()){
		case 'b' : scanf("%d", &base);
			 	break;
		case 'd' : scanf("%d", &divisor);
			 	break;
		}
		BeepOK();
//		Bird();
	}
}
Ejemplo n.º 3
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;	 
    }	  
}