版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
分類號(hào)密級(jí)UDC學(xué)位論文TO220自動(dòng)測(cè)試分選機(jī)軟件研發(fā)與人機(jī)界面設(shè)計(jì)(題名和副題名)易華波(作者姓名)指導(dǎo)教師姓名康波副教授電子科技大學(xué)成都 胡澤高級(jí)工程師深圳深愛半導(dǎo)體有限公司深圳(職務(wù)、職稱、學(xué)位、單位名稱及地址)申請(qǐng)專業(yè)學(xué)位級(jí)別碩士專業(yè)學(xué)位類別工程碩士工程領(lǐng)域名稱軟件工程提交論文日期2010.08論文答辯日期2010.12學(xué)位授予單位和日期電子科技大學(xué)答辯委員會(huì)主席評(píng)閱人2010年8月日注1:注明《國(guó)際十進(jìn)分類法UDC》的類號(hào)摘要全文總結(jié)TO220自動(dòng)測(cè)試分選機(jī)測(cè)試模塊設(shè)計(jì)與實(shí)現(xiàn)設(shè)計(jì)思路三極管經(jīng)過導(dǎo)軌,由氣缸和傳感器配合動(dòng)作,檢測(cè)落入測(cè)試工位,分選機(jī)對(duì)測(cè)試系統(tǒng)發(fā)出測(cè)試請(qǐng)求信號(hào),等待測(cè)試系統(tǒng)測(cè)試,測(cè)試結(jié)束反饋分類信號(hào),氣缸再動(dòng)作,三極管落入下一工位測(cè)試。Clear:對(duì)站板緩沖器清零Enable:使能Start:測(cè)試請(qǐng)求信號(hào)設(shè)計(jì)原理圖測(cè)試模塊函數(shù)定義#pragmaonceclassCActTester{public: CActTester(unsignedshortadd_np,unsignedshortadd_control, unsignedshortadd_result); ~CActTester(void); structCONTROL{ //測(cè)試工位控制信號(hào)定義 boolStart:1; //開始測(cè)試 boolEnable:1; //使能 boolClear:1; //清零 char_null1:1; boolEnd:1; //測(cè)試結(jié)束 char_null2:3; }control,incontrol; //聯(lián)機(jī)測(cè)試控制信號(hào) structNP{ //信號(hào)電平結(jié)構(gòu)體 boolReq:1; //開始測(cè)試信號(hào) boolBin:1; //分選信號(hào) boolEnd:1; //測(cè)試結(jié)束信號(hào) char_null:5; }np; inttime; //時(shí)間 intrun; //運(yùn)動(dòng)狀態(tài) interr; //錯(cuò)誤狀態(tài) unsignedcharresult; //測(cè)試結(jié)果 CStringerrstr; //錯(cuò)誤信息protected: unsignedshort_control; //控制字地址 unsignedshort_np; //電平定義字地址 unsignedshort_result; //測(cè)試結(jié)果地址 bool_InputControl(void); //讀入控制信號(hào) bool_InputResult(void); //讀入測(cè)試結(jié)果 bool_OutputControl(void); //輸出控制信號(hào) bool_OutputNP(void); //輸出電平定義public: boolDisable(void); //禁用測(cè)試系統(tǒng) boolReset(void); //復(fù)位 boolInitialize(void); //初始化 boolStartUp(void); //開始測(cè)試 boolReadResult(void); //讀取結(jié)果 boolEnd(void); //結(jié)束 voidErrCheck(void); //錯(cuò)誤檢測(cè) intRun(void); //運(yùn)行控制};externboolinput(unsignedshort,PDWORD,BYTE); //端口輸入函數(shù)externbooloutput(unsignedshort,PDWORD,BYTE);//端口輸出函數(shù)測(cè)試模塊程序設(shè)計(jì) 測(cè)試模塊讀入控制信號(hào)程序設(shè)計(jì)boolCActTester::_InputControl(void){ if(input(_control,(PDWORD)&incontrol,1)){ //正常讀入控制字 returntrue; } err=0xee; //異常 returnfalse;}測(cè)試模塊讀入測(cè)試結(jié)果程序設(shè)計(jì)boolCActTester::_InputResult(void){ if(input(_result,(PDWORD)&result,1)){ //正常讀入測(cè)試結(jié)果 returntrue; } err=0xee; //異常 returnfalse;}測(cè)試模塊輸出控制信號(hào)程序設(shè)計(jì)boolCActTester::_OutputControl(void){ if(output(_control,(PDWORD)&control,1)){ //正常輸出控制字 returntrue; } err=0xee; //異常 returnfalse;}測(cè)試模塊輸出電平定義程序設(shè)計(jì)boolCActTester::_OutputNP(void){ if(output(_np,(PDWORD)&np,1)){ //正常輸出電平定義 returntrue; } err=0xee; //異常 returnfalse;}測(cè)試模塊禁用測(cè)試系統(tǒng)程序設(shè)計(jì)boolCActTester::Disable(void){ if(CActTester::Reset()){ //測(cè)試系統(tǒng)正常復(fù)位 time=0; //計(jì)時(shí)清0 run=0; //停止 returntrue; //正常禁用 } returnfalse; //有異常}測(cè)試模塊復(fù)位程序設(shè)計(jì)boolCActTester::Reset(void){ control.Clear=0; //關(guān)閉清0 control.Enable=0; //不使能 control.Start=0; //未開始 if(CActTester::_OutputControl()){ //正常輸出控制字 returntrue; } returnfalse; //異常}測(cè)試模塊初始化程序設(shè)計(jì)boolCActTester::Initialize(void){ if(CActTester::_OutputNP()){ //輸出電平定義 control.Clear=1; //清0,上升延 control.Enable=1; //使能 if(CActTester::_OutputControl()){ //輸出控制字 returntrue; //操作正常 } } returnfalse; //異常}測(cè)試模塊開始測(cè)試程序設(shè)計(jì)boolCActTester::StartUp(void){ control.Clear=0; //清0,下降延 control.Start=1; //開始,上升延 if(CActTester::_OutputControl()){ //輸出控制字 returntrue; //操作正常 } returnfalse; //異常}測(cè)試模塊讀取結(jié)果程序設(shè)計(jì)boolCActTester::ReadResult(void){ if(CActTester::_InputControl()){ //讀入控制字 if(incontrol.End){ //測(cè)試結(jié)束 if(CActTester::_InputResult()){ //讀入測(cè)試結(jié)果 returntrue; //操作正常 } } } returnfalse; //異常}測(cè)試模塊結(jié)束程序設(shè)計(jì)boolCActTester::End(void){ if(CActTester::Reset()){ //復(fù)位測(cè)試系統(tǒng) returntrue; //操作正常 } returnfalse; //異常}測(cè)試模塊錯(cuò)誤檢測(cè)程序設(shè)計(jì)voidCActTester::ErrCheck(void){ switch(run) { case0: errstr=_T(""); break; case0xe1: errstr=_T("聯(lián)機(jī)超時(shí)"); break; case0xee: errstr=_T("聯(lián)機(jī)信號(hào)出錯(cuò)"); break; case0xef: default: errstr=_T("未知錯(cuò)誤"); break; }}測(cè)試模塊運(yùn)行控制程序設(shè)計(jì)intCActTester::Run(void){ if(run!=0xff){ //非測(cè)試結(jié)束 time+=DELAY_LOOP; } if(time>=DELAY_TESTERROR){ //超時(shí) CActTester::Disable(); err=0xe1; } switch(run) //根據(jù)當(dāng)前狀態(tài)進(jìn)行指定操作 { case0: break; case1: //第1步,復(fù)位 time=0; if(CActTester::Reset()){ //正常復(fù)位 run=2; //進(jìn)行初始化 } else{ err=0xee; } break; case2: //第2步,初始化 if(CActTester::Initialize()){ //正常初始化 run=3; //開始測(cè)試 } else{ err=0xee; } break; case3: //第3步,開始測(cè)試 if(CActTester::StartUp()){ //測(cè)試速開始 run=4; //讀取結(jié)果 } else{ err=0xee; } break; case4: //第4步,讀取結(jié)果 if(CActTester::ReadResult()){ //正常讀取測(cè)試結(jié)果 run=5; //結(jié)束測(cè)試 return0xdd; //顯示信息 } else{ err=0xee; } break; case5: //第5步,測(cè)試結(jié)束 if(CActTester::End()){ //正常結(jié)束測(cè)試 run=0xff; } else{ err=0xee; } break; case0xff: break; default: err=0xef; //未定義錯(cuò)誤 break; } returnrun;}本章小結(jié)本章主要實(shí)現(xiàn)了自動(dòng)測(cè)試分選機(jī)的測(cè)試功能程序設(shè)計(jì),該模塊主要要與測(cè)試系統(tǒng)配合,設(shè)計(jì)了讀入控制信號(hào),讀入測(cè)試結(jié)果,輸出控制信號(hào),輸出電平定義,禁用測(cè)試,測(cè)試模塊復(fù)位、初始化、開始測(cè)試、讀取結(jié)果,結(jié)束,錯(cuò)誤檢測(cè)、運(yùn)行控制這一系列程序。TO220自動(dòng)測(cè)試分選機(jī)分選模塊設(shè)計(jì)與實(shí)現(xiàn)分選模塊設(shè)計(jì)原理與思路分選模塊設(shè)計(jì)思路分選電機(jī)轉(zhuǎn)一圈1000步,總共25個(gè)料桶,每個(gè)料桶對(duì)應(yīng)轉(zhuǎn)40步。根據(jù)TS測(cè)試系統(tǒng)和JUNO測(cè)試系統(tǒng)讀取的測(cè)試結(jié)果,根據(jù)分選程序得出目標(biāo)料桶號(hào),根據(jù)當(dāng)前料桶號(hào)和目標(biāo)料桶號(hào)計(jì)算出分選電機(jī)轉(zhuǎn)距和轉(zhuǎn)動(dòng)方向。電機(jī)轉(zhuǎn)動(dòng)算法電機(jī)轉(zhuǎn)動(dòng)算法:1正轉(zhuǎn)料桶數(shù)=(目標(biāo)料桶號(hào)+25-當(dāng)前料桶號(hào))%25.2.若當(dāng)前料桶號(hào)=目標(biāo)料桶號(hào),則電機(jī)保持不動(dòng).3.正轉(zhuǎn)料桶數(shù)>12,則反轉(zhuǎn).電機(jī)正轉(zhuǎn)步數(shù)=正轉(zhuǎn)料桶數(shù)×40-緩沖步數(shù)電機(jī)反轉(zhuǎn)步數(shù)=(25-正轉(zhuǎn)料桶數(shù))×40-緩沖步數(shù)電機(jī)步距數(shù)高字節(jié)=轉(zhuǎn)動(dòng)脈沖數(shù)/256電機(jī)步距數(shù)低字節(jié)=轉(zhuǎn)動(dòng)脈沖數(shù)%256注:緩沖步數(shù)=10,由于數(shù)據(jù)總線只有8位,電機(jī)步距數(shù)可能超過256,所以對(duì)電機(jī)步距數(shù)分高、低字節(jié)傳輸。分選模塊設(shè)計(jì)原理圖分選模塊函數(shù)定義 structCODER{ // 寫入 │ 讀取 unsignedcharCode:5; //電機(jī)目標(biāo)編碼 │電機(jī)當(dāng)前編碼 boolPlace:1; //定位點(diǎn) │定位點(diǎn) boolRes:1; //復(fù)位(置為1) │是否已停止 boolStart:1; //置數(shù)(高電平脈沖) │落管狀態(tài) }incoder,outcoder; structCONTROL{ // 0 │1 boolEnable:1; //使能端 禁用│使能 boolDir:1; //正反轉(zhuǎn) 正轉(zhuǎn)│反轉(zhuǎn) boolLock:1; //鎖定 松開│鎖定 boolClearDown:1; //清除落管狀態(tài)(高電平脈沖) boolEnableDown:1; //落管感應(yīng)使能 禁用│使能 char_null:3; }control;分選模塊程序設(shè)計(jì)分選模塊讀取電機(jī)當(dāng)前位置程序設(shè)計(jì)boolCActMotor::LoadCurrent(void){ if(CActMotor::_InputCoder()){ //讀入編碼盤狀態(tài) if(incoder.Place){ //在一個(gè)位置 motocur=incoder.Code; //讀入當(dāng)前位置 returntrue; //狀態(tài)正常 } } else{ motocur=0; //讀取當(dāng)前位置出錯(cuò) err=0xe1; //有錯(cuò)誤 } returnfalse;}分選模塊電機(jī)控制相關(guān)計(jì)算程序設(shè)計(jì)boolCActMotor::Calculate(void){ intt; t=(motodes+_boxnum-motocur)%_boxnum; //正轉(zhuǎn)所需步數(shù) if(t==0){ //目標(biāo)與當(dāng)前位置一致,無(wú)需轉(zhuǎn)動(dòng) control.Dir=0; pulse=0; } elseif(2*t>_boxnum){ //正轉(zhuǎn)超過半圈,反轉(zhuǎn) control.Dir=1; //反轉(zhuǎn) pulse=int((_boxnum-t)*_step)-_buffer; //脈沖數(shù)計(jì)算 } else{ control.Dir=0; //正轉(zhuǎn) pulse=int(t*_step)-_buffer; //脈沖數(shù)計(jì)算 } pulh=pulse>>8; //脈沖數(shù)高8位 pull=pulse&0x00ff; //脈沖數(shù)低8位 returntrue;}分選模塊禁用電機(jī)(松開電機(jī))程序設(shè)計(jì)boolCActMotor::Disable(void){ control.Enable=0; //電機(jī)使能關(guān)閉 control.Dir=0; //正轉(zhuǎn) control.Lock=0; //電機(jī)松開 control.ClearDown=0; //清0信號(hào)低電平 control.EnableDown=0; //落管使能關(guān)閉 downen=false; //禁止落管 if(CActMotor::_OutputControl()){ returntrue; //正常關(guān)閉電機(jī) } returnfalse; //異常}分選模塊鎖定電機(jī)程序設(shè)計(jì)boolCActMotor::LockUp(void){ control.Enable=0; //關(guān)閉電機(jī)轉(zhuǎn)動(dòng)使能 control.Lock=1; //電機(jī)鎖定 if(CActMotor::_OutputControl()){ returntrue; //正常鎖定電機(jī) } returnfalse; //異常}分選模塊設(shè)置目標(biāo)位置程序設(shè)計(jì)boolCActMotor::SetDestination(void){ outcoder.Code=motodes; //電機(jī)目標(biāo)位置 outcoder.Place=0; //電機(jī)定位點(diǎn) outcoder.Res=0; //電機(jī)非復(fù)位狀態(tài) outcoder.Start=0; //電機(jī)未啟動(dòng) if(CActMotor::_OutputCoder()){ Sleep(1); outcoder.Start=1; //電機(jī)啟動(dòng),Start信號(hào)上升沿 if(CActMotor::_OutputCoder()){ returntrue; } } returnfalse; //異常}分選模塊電機(jī)初始化程序設(shè)計(jì)boolCActMotor::Initialize(void){ if(run!=MOTO_INIT){ //狀態(tài)異常 err=0xe1; returnfalse; //異常 } control.EnableDown=0; //關(guān)閉落管使能 if(!CActMotor::LockUp()){ //鎖住電機(jī) returnfalse; //異常 } downen=false; // 禁止落管 if(!CActMotor::LoadCurrent()){ //讀取當(dāng)前位置 returnfalse; //異常 } if(!CActMotor::Calculate()){ //計(jì)算相關(guān)數(shù)據(jù) returnfalse; //異常 } if((pulse==0)&&(incoder.Place==0)){ //當(dāng)前位置與目標(biāo)位相同,電機(jī)轉(zhuǎn)動(dòng)完成 run=MOTO_END; } elseif(incoder.Place==0){ //當(dāng)前位置與目標(biāo)位置不同,且已正常讀取位置 if(!CActMotor::SetDestination()){ //設(shè)置電機(jī)目標(biāo)位置 returnfalse; //異常 } else{ run=MOTO_START; //進(jìn)入下一步動(dòng)作 } } else{ //電機(jī)不在一個(gè)位置 run=MOTO_REINIT; //重初始化 } returntrue; //正常}分選模塊啟動(dòng)電機(jī)程序設(shè)計(jì)boolCActMotor::StartUp(void){ if(run!=MOTO_START){ //狀態(tài)異常 err=0xe1; returnfalse; } if(!CActMotor::_OutputPulse()){ //輸出脈沖數(shù) returnfalse; } outcoder.Start=0; if(!CActMotor::_OutputCoder()){ //輸出編碼盤 returnfalse; } control.Enable=1; //電機(jī)轉(zhuǎn)動(dòng)使能 if(CActMotor::_OutputControl()){ //啟動(dòng)電機(jī) run=MOTO_ENDCHECK; //進(jìn)入下一步 returntrue; } returnfalse; //異常}分選模塊檢測(cè)電機(jī)是否已轉(zhuǎn)到位程序設(shè)計(jì)boolCActMotor::EndCheck(void){ if(run!=MOTO_ENDCHECK){ //狀態(tài)異常 err=0xe1; returnfalse; } if(CActMotor::_InputCoder()){ if(incoder.Res==0&&incoder.Code==motodes){ //已轉(zhuǎn)到位 run=MOTO_END; motoretry=0; //電機(jī)重試計(jì)數(shù)清0 CActMotor::DownClear(); //鎖住電機(jī),并清除落管 } returntrue; } returnfalse; //異常}分選模塊電機(jī)重新初始化程序設(shè)計(jì)boolCActMotor::ReInit(void){ if(run!=MOTO_REINIT){ //狀態(tài)異常 err=0xe1; returnfalse; } outcoder.Res=1; //置RES位為1 outcoder.Start=0; if(CActMotor::_OutputCoder()){ Sleep(1); outcoder.Start=1; if(CActMotor::_OutputCoder()){ //Start信號(hào)上升沿,電機(jī)啟動(dòng) control.EnableDown=0; //落管使能關(guān)閉 downen=false; //禁止落管 if(CActMotor::LockUp()){ //鎖定電機(jī) run=MOTO_RESTART; //進(jìn)入下一步 returntrue; } } } returnfalse; //異常}分選模塊電機(jī)重啟動(dòng)程序設(shè)計(jì)boolCActMotor::ReStart(void){ if(run!=MOTO_RESTART){ //狀態(tài)異常 err=0xe1; returnfalse; //異常 } pulh=0; //設(shè)置脈沖數(shù)為0 pull=0; run=MOTO_START; //啟動(dòng)電機(jī) if(CActMotor::StartUp()){ run=MOTO_FINDPLACE; //進(jìn)入下一步 returntrue; } returnfalse;}分選模塊尋找定位點(diǎn)程序設(shè)計(jì)boolCActMotor::FindPlace(void){ if(run!=MOTO_FINDPLACE){ //狀態(tài)異常 err=0xe1; returnfalse; } if(CActMotor::_InputCoder()){ //讀入編碼盤狀態(tài) if(incoder.Place==0){ //在一個(gè)定位點(diǎn) run=MOTO_INIT; //電機(jī)初始化 returntrue; } } returnfalse; //異?;蛭凑业蕉ㄎ稽c(diǎn)}分選模塊清除落管并鎖定電機(jī)程序設(shè)計(jì)boolCActMotor::DownClear(void){ if(run!=MOTO_END){ err=0xe1; returnfalse; } control.ClearDown=1; //清0,Clear信號(hào)上升沿 control.EnableDown=0; //關(guān)閉落管使能 if(CActMotor::LockUp()){ Sleep(1); control.ClearDown=0; //清0,Clear信號(hào)下降沿 control.EnableDown=1; //打開落管使能 if(CActMotor::LockUp()){ //鎖定電機(jī) downok=false; //未落管 downen=true; //允許落管 time_down=0; //落管計(jì)時(shí)清0 returntrue; } } returnfalse; //異常}分選模塊落管檢測(cè)程序設(shè)計(jì)boolCActMotor::DownCheck(void){ if(downen&&!downok){ //允許落管且管子未落下 time_down+=DELAY_LOOP; //計(jì)時(shí)增加一個(gè)周期 if(CActMotor::_InputCoder()){ //讀入編碼盤狀態(tài) if(incoder.Start){ //已落管 downok=true; //正常落管 returntrue; //已完成落管 } } } if(time_down>=3000){ //落管超時(shí) err=0xed; } returnfalse; //異常}分選模塊錯(cuò)誤檢測(cè)程序設(shè)計(jì)voidCActMotor::ErrorCheck(void){ switch(err) { case0: errstr=_T(""); break; case0xe1: errstr=_T("電機(jī)控制信號(hào)出錯(cuò)."); break; case0xe2: errstr=_T("電機(jī)控制超時(shí)."); break; case0xed: errstr.Format(_T("三極管未落入第%d檔."),motodes); break; default: errstr=_T(""); break; }}分選模塊運(yùn)行控制程序設(shè)計(jì)intCActMotor::Run(void){ //MOTO_INIT:電機(jī)初始化 MOTO_START:啟動(dòng)電機(jī) MOTO_ENDCHECK:檢測(cè)電機(jī)是否已轉(zhuǎn)到位 //MOTO_REINIT:重新初始化 MOTO_RESTART:重啟動(dòng) MOTO_FINDPLACE:尋找定位點(diǎn) //MOTO_END:電機(jī)轉(zhuǎn)動(dòng)結(jié)束 //0xe1:電機(jī)控制異常 0xe2:電機(jī)動(dòng)作超時(shí) 0xed:落管超時(shí)錯(cuò)誤 if(run!=MOTO_END){ //電機(jī)轉(zhuǎn)動(dòng)未完成,計(jì)時(shí)增加 time+=DELAY_LOOP; } if(err==0xe1){ //電機(jī)控制異常 CActMotor::Disable(); //禁用電機(jī) } elseif(time>=DELAY_MOTOERROR){ //電機(jī)動(dòng)作超時(shí) CActMotor::Disable(); //禁用電機(jī) err=0xe2; } elseif(time>=DELAY_MOTOANCHORERROR){ //電機(jī)動(dòng)作超過單次時(shí)間 ++motoretry; //重試計(jì)數(shù)增加 if(motoretry<4){ //重試次數(shù)未達(dá)到3次 run=MOTO_REINIT; //重試 CActMotor::ReInit(); //重新初始化電機(jī) } } if(err!=0){ CActMotor::Disable(); run=0; } switch(run) { case0: break; caseMOTO_INIT: time=0; CActMotor::Initialize(); break; caseMOTO_START: CActMotor::StartUp(); caseMOTO_ENDCHECK: CActMotor::EndCheck(); break; caseMOTO_REINIT: CActMotor::ReInit(); break; caseMOTO_RESTART: CActMotor::ReStart(); break; caseMOTO_FINDPLACE: CActMotor::FindPlace(); break; caseMOTO_END: if(CActMotor::DownCheck()){ return0xdd; } break; case0xed: break; default: err=0xe1; break; } returnrun;}本章小結(jié)本章主要實(shí)現(xiàn)了三極管分選功能。該模塊主要控制分選電機(jī)轉(zhuǎn)向和步距,以及檢測(cè)落管。設(shè)計(jì)了讀取電機(jī)當(dāng)前位置,電機(jī)控制相關(guān)計(jì)算,禁用電機(jī)(松開電機(jī)),鎖定電機(jī),設(shè)置目標(biāo)位置,電機(jī)初始化,啟動(dòng)電機(jī),檢測(cè)電機(jī)是否已轉(zhuǎn)到位,電機(jī)重新初始化,電機(jī)重啟動(dòng),尋找定位點(diǎn),清除落管并鎖定電機(jī),落管檢測(cè),錯(cuò)誤檢測(cè),運(yùn)行控制這一系列程序。TO220自動(dòng)測(cè)試分選機(jī)人機(jī)界面模塊設(shè)計(jì)與實(shí)現(xiàn)人機(jī)界面模塊設(shè)計(jì)原理與思路人機(jī)界面模塊包括三大部分:系統(tǒng)測(cè)試運(yùn)行界面、系統(tǒng)分選程序界面和系統(tǒng)功能設(shè)置界面。系統(tǒng)測(cè)試運(yùn)行界面系統(tǒng)測(cè)試運(yùn)行主界面實(shí)現(xiàn)功能,如圖7-1所示:圖7-1,系統(tǒng)測(cè)試運(yùn)行主界面界面功能介紹:顯示24個(gè)料桶的當(dāng)前數(shù)量和顯示當(dāng)前總數(shù)。顯示各主要傳感器狀態(tài)和氣缸狀態(tài)。顯示當(dāng)前調(diào)用分選程序信息。顯示A、B、C三個(gè)工位測(cè)試結(jié)果、當(dāng)前系統(tǒng)信息和報(bào)警出錯(cuò)信息提示。按鈕設(shè)置:運(yùn)行、停止、復(fù)位、裝料啟動(dòng)、整形夾啟動(dòng)、退出、記數(shù)清零。系統(tǒng)分選程序界面系統(tǒng)分選程序界面實(shí)現(xiàn)功能分析,如圖7-2所示:圖7-2,分選程序編輯界面測(cè)試工位數(shù)量選擇:?jiǎn)喂の?、雙工位、三工位,分別A對(duì)應(yīng)常規(guī)工位,B對(duì)應(yīng)開關(guān)時(shí)間工位,C對(duì)應(yīng)熱阻工位。一般選擇A和B雙工位,因?yàn)镴UNO測(cè)試系統(tǒng)常規(guī)測(cè)試中可以帶熱阻測(cè)試功能。分選程序的新建、打開、保存、另存為。根據(jù)常規(guī)和開關(guān)時(shí)間的搭配組合,對(duì)應(yīng)箱號(hào)即為所選常規(guī)分類和開關(guān)時(shí)間分類的組合??偣?5個(gè)箱,可以有25個(gè)分類選擇。其中,默認(rèn)箱是排料復(fù)測(cè)箱。根據(jù)邏輯關(guān)系編輯分選程序并可實(shí)現(xiàn)加密/解密功能,防止意外更改。圖7-3,分選程序解鎖功能介紹:權(quán)限定義:操作員調(diào)用權(quán)限;工藝員修改權(quán)限;設(shè)備維護(hù)員修改權(quán)限。為了防止操作員意外修改,操作員在打開已編寫好的分選程序時(shí),分選程序編輯處于鎖定狀態(tài),只能調(diào)用分選程序而不能修改程序。此時(shí)點(diǎn)擊“加密/解密”,則是分選程序解鎖,如圖7-3所示,需要輸入舊密碼,才能進(jìn)入分選程序修改的界面。工藝員和設(shè)備維護(hù)員編寫和修改分選程序時(shí),輸入舊密碼,即可進(jìn)入分選程序編輯狀態(tài),如圖7-4所示,此時(shí)點(diǎn)擊“加密/解密”,默認(rèn)則是更改密碼。輸入舊密碼和新密碼實(shí)現(xiàn)更改密碼功能。圖7-4,分選程序更改密碼4)在更改密碼對(duì)話框中,如圖7-5所示,此時(shí)點(diǎn)擊“刪除密碼”,則是輸入舊密碼即可刪除密碼。圖7-5,分選程序刪除密碼5)刪除密碼后,分選程序處于解密狀態(tài)。此時(shí)點(diǎn)擊“加密/解密”,則是設(shè)置新密碼,如圖7-6所示,輸入新密碼即可加密。圖7-6,分選程序加密系統(tǒng)功能設(shè)置程序界面系統(tǒng)功能設(shè)置界面中箱滿數(shù)量設(shè)置,如圖7-7所示:圖7-7,箱滿數(shù)量設(shè)置功能介紹:24個(gè)料桶的箱滿數(shù)量設(shè)定,根據(jù)三極管的大小,箱滿數(shù)量相應(yīng)變化。一般TO220箱滿設(shè)定數(shù)為500個(gè),TO126箱滿設(shè)定數(shù)為1000個(gè),TO92箱滿設(shè)定數(shù)為3000個(gè)。系統(tǒng)功能設(shè)置界面中聯(lián)機(jī)信號(hào)設(shè)置,如圖7-8所示:圖7-8,聯(lián)機(jī)信號(hào)設(shè)置功能介紹:聯(lián)機(jī)信號(hào)設(shè)置測(cè)試請(qǐng)求信號(hào)、測(cè)試結(jié)束信號(hào)、測(cè)試分類信號(hào)。根據(jù)測(cè)試系統(tǒng)和自動(dòng)分選機(jī)的信號(hào),聯(lián)機(jī)信號(hào)需要匹配,才能使自動(dòng)分選機(jī)得到對(duì)應(yīng)的測(cè)試系統(tǒng)反饋信號(hào)結(jié)果。系統(tǒng)功能設(shè)置界面中數(shù)量清零設(shè)置,如圖7-9所示:圖7-9數(shù)量清零設(shè)置功能介紹:點(diǎn)擊每個(gè)箱號(hào)后的“清零”按鈕可以分別針對(duì)當(dāng)前24個(gè)料桶數(shù)量單獨(dú)清零,點(diǎn)擊總數(shù)后的“清零”按鈕對(duì)當(dāng)前總數(shù)單獨(dú)清零,點(diǎn)擊“所有箱清零”可以一次性對(duì)當(dāng)前24個(gè)料桶數(shù)量全部清零。部分程序設(shè)計(jì): //TODO:在此添加額外的初始化 if((file.encrypt&0x03)==0x01){ //已加密,已解鎖,默認(rèn)為要更改密碼 file.encrypt=0x05; } CDlgEditerPassword::InitDisplay(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //異常:OCX屬性頁(yè)應(yīng)返回FALSE}voidCDlgEditerPassword::InitDisplay(void){ m_oldpw=""; m_newpw=""; m_checkpw=""; switch(file.encrypt&0x0D) { case0: //未加密,要加密 m_Edit_Old.EnableWindow(false); m_Edit_New.EnableWindow(true); m_Edit_Check.EnableWindow(true); m_delpw.ShowWindow(SW_HIDE); m_delpw.SetCheck(BST_UNCHECKED); m_changepw.ShowWindow(SW_HIDE); m_changepw.SetCheck(BST_UNCHECKED); SetDlgItemText(IDOK,_T("加密")); SetWindowText(_T("加密")); break; case1: //已加密,要解鎖 m_Edit_Old.EnableWindow(true); m_Edit_New.EnableWindow(false); m_Edit_Check.EnableWindow(false); m_delpw.ShowWindow(SW_SHOW); m_delpw.SetCheck(BST_UNCHECKED); m_changepw.ShowWindow(SW_SHOW); m_changepw.SetCheck(BST_UNCHECKED); SetDlgItemText(IDOK,_T("解鎖")); SetWindowText(_T("解鎖")); break; case5: //已加密,已解鎖,要更改密碼 m_Edit_Old.EnableWindow(true); m_Edit_New.EnableWindow(true); m_Edit_Check.EnableWindow(true); m_delpw.ShowWindow(SW_SHOW); m_delpw.SetCheck(BST_UNCHECKED); m_changepw.ShowWindow(SW_SHOW); m_changepw.SetCheck(BST_CHECKED); SetDlgItemText(IDOK,_T("更改密碼")); SetWindowText(_T("更改密碼")); break; case9: //已加密,已解鎖,要?jiǎng)h除密碼 m_Edit_Old.EnableWindow(true); m_Edit_New.EnableWindow(false); m_Edit_Check.EnableWindow(false); m_delpw.ShowWindow(SW_SHOW); m_delpw.SetCheck(BST_CHECKED); m_changepw.ShowWindow(SW_SHOW); m_changepw.SetCheck(BST_UNCHECKED); SetDlgItemText(IDOK,_T("刪除密碼")); SetWindowText(_T("刪除密碼")); break; default: m_Edit_Old.EnableWindow(false); m_Edit_New.EnableWindow(false); m_Edit_Check.EnableWindow(false); m_delpw.EnableWindow(false); m_changepw.EnableWindow(false); GetDlgItem(IDOK)->EnableWindow(false); SetWindowText(_T("密碼狀態(tài)未知,請(qǐng)聯(lián)系相關(guān)人員")); }}本章小結(jié)本章主要介紹了TO220自動(dòng)測(cè)試分選機(jī)的人機(jī)界面設(shè)計(jì),通過系統(tǒng)測(cè)試運(yùn)行界面、系統(tǒng)分選程序界面和系統(tǒng)功能設(shè)置界面三個(gè)界面設(shè)定,實(shí)現(xiàn)對(duì)分選機(jī)操作與運(yùn)行。全文總結(jié)對(duì)本系統(tǒng)已完成部分的說(shuō)明該系統(tǒng)平臺(tái)的設(shè)計(jì)主要采用了提出問題、分析問題、解決問題的理論基礎(chǔ)、解決問題的方法,具體問題的設(shè)計(jì)開發(fā)和軟件實(shí)現(xiàn)部分進(jìn)行功能設(shè)計(jì)的模式。本系統(tǒng)主要從系統(tǒng)軟件控制方面運(yùn)用VISUALC++6.0軟件自行研發(fā)設(shè)計(jì)了自動(dòng)測(cè)試分選機(jī)的送料模塊、測(cè)試模塊、分選模塊以及人機(jī)界面模塊這四大模塊。通過實(shí)時(shí)控制,對(duì)每個(gè)模塊的傳感器、氣缸以及電機(jī)的狀態(tài)進(jìn)行檢測(cè),判斷各個(gè)模塊現(xiàn)在所處的狀態(tài),進(jìn)而系統(tǒng)控制各個(gè)模塊的下一個(gè)運(yùn)行狀態(tài)。存在問題的說(shuō)明與發(fā)展方向和展望由于時(shí)間有限,原本計(jì)劃在人機(jī)界面模塊中設(shè)計(jì)出自動(dòng)測(cè)試分選機(jī)的自檢模塊,可對(duì)設(shè)備的各個(gè)模塊的傳感器感應(yīng)是否正常、氣缸動(dòng)作是否正常,測(cè)試電機(jī)和分選電機(jī)轉(zhuǎn)動(dòng)是否正常,以及配合編碼盤進(jìn)行電機(jī)尋位是否轉(zhuǎn)到位,與測(cè)試系統(tǒng)的聯(lián)機(jī)狀態(tài),振盤和信號(hào)燈是否正常一一都可以進(jìn)行自檢,方便
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版房產(chǎn)買賣協(xié)議補(bǔ)充篇:附加條款明確版
- 2025年度家禽疫病防控與家禽買賣合同書3篇
- 南通市2025屆高三第一次調(diào)研測(cè)試(一模)生物試卷(含答案 )
- 2024美容院股權(quán)轉(zhuǎn)讓與區(qū)域市場(chǎng)拓展合同3篇
- 2025年P(guān)E管材與管件行業(yè)標(biāo)準(zhǔn)化制定合同3篇
- 2024年度醫(yī)療衛(wèi)生領(lǐng)域知識(shí)產(chǎn)權(quán)保密協(xié)議3篇
- 2025年度廁所文化建設(shè)與設(shè)計(jì)承包合同2篇
- 2025年度衛(wèi)星遙感影像數(shù)據(jù)分析合同范本2篇
- 2024裝修工程分包合同范本
- 垃圾處理彩鋼板安裝合同模板
- 過敏性皮炎的護(hù)理查房
- 將配偶追加為被執(zhí)行人申請(qǐng)書
- 硬筆書法田字格標(biāo)準(zhǔn)尺寸
- 中建辦公商業(yè)樓有限空間作業(yè)專項(xiàng)施工方案
- 小細(xì)胞肺癌治療進(jìn)展及預(yù)后
- 湖北省武漢市江岸區(qū)2023-2024學(xué)年四上數(shù)學(xué)期末檢測(cè)模擬試題含答案
- 2023-2024學(xué)年貴陽(yáng)市花溪區(qū)四年級(jí)數(shù)學(xué)第一學(xué)期期末檢測(cè)模擬試題含答案
- 法院解凍協(xié)議書
- 《神筆馬良》教學(xué)課件
- 林業(yè)造林工程質(zhì)量問題及改進(jìn)措施
- 醫(yī)院職能科室管理考核標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論