void BeepError() { int i; for (i=0; i<2; i++) { BeepOK(); if (bSWFlag) bSWFlag = FALSE; break; } }
/* 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(); } }
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; } }