在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            關(guān) 閉

            新聞中心

            EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于CAN總線的機(jī)械手控制系統(tǒng)

            基于CAN總線的機(jī)械手控制系統(tǒng)

            作者: 時(shí)間:2009-09-29 來源:網(wǎng)絡(luò) 收藏
             retval=_Trans(ptrStruct,ptrPacket);//調(diào)發(fā)送數(shù)據(jù)幀函數(shù)

            本文引用地址:http://www.biyoush.com/article/163547.htm

              }

              //數(shù)據(jù)接收

              voidCWuLiao::Input(unsignedintID)

             ?。?/p>

              ptrPacket=Packet;

              ptrStruct=Struct;

              intRece_Length,retval,n;

              ptrStruct->card=0;

              ptrPacket->length=2;

              ptrPacket->rtr=0;

              ptrPacket->CAN_ID=ID;

              ptrPacket->data[0]=0x44;

              ptrPacket->data[1]=0x49;//CAN數(shù)據(jù)接收命令字

              retval=CAN_Trans(ptrStruct,ptrPacket);//調(diào)發(fā)送數(shù)據(jù)幀函數(shù),發(fā)出接收命令

              if(retval==1)

             ?。?/p>

              retval=CAN_Rece(ptrStruct,ptrPacket);//調(diào)接收數(shù)據(jù)幀函數(shù)

              if(retval==1)//接收成功,則返回值為1

             ?。?/p>

              Rece_Length=ptrPacket->length;//取接收到的數(shù)據(jù)長(zhǎng)度

              for(n=0;n

             ?。?/p>

              Rece_Data[n]=ptrPacket->data[n];//接收到的數(shù)據(jù)從ptrPacket的成員變量Data中讀取,Race.Data[8]已設(shè)置為全局變量

              }

             ?。?/p>

              }

             ?。?/p>

              4.3多線程技術(shù)在實(shí)時(shí)監(jiān)控中的應(yīng)用

              控制程序是在Windows98下開發(fā)的,除了具有豐富的用戶圖形操作界面,該控制程序還需完成實(shí)時(shí)數(shù)據(jù)采集和控制任務(wù)。然而Windows98并不是實(shí)時(shí)操作系統(tǒng),它是消息驅(qū)動(dòng)機(jī)制的搶先式多任務(wù)系統(tǒng),沒有提供足夠的實(shí)時(shí)處理功能。因此,在程序開發(fā)中,我們采用多線程技術(shù)來實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)功能。線程是多任務(wù)的基本單元,是操作系統(tǒng)用來調(diào)度執(zhí)行的最小單位。一個(gè)進(jìn)程可以由多個(gè)線程組成,系統(tǒng)調(diào)度程序?qū)PU時(shí)間片劃分給各個(gè)線程,各個(gè)線程在各自的時(shí)間片內(nèi)使用CPU,從而實(shí)現(xiàn)了微觀上輪流執(zhí)行、宏觀上并發(fā)運(yùn)行的多任務(wù)效果。

              為了避免控制軟件前臺(tái)顯示界面因CAN數(shù)據(jù)采集和機(jī)械手控制指令的程序循環(huán)而導(dǎo)致響應(yīng)過慢或任務(wù)阻塞(Blocking)現(xiàn)象,增強(qiáng)應(yīng)用程序的快速響應(yīng)特性,我們將主要的數(shù)據(jù)采集和控制任務(wù):“機(jī)械手搬運(yùn)”及“物料分揀”定義成獨(dú)立的可以按并行方式執(zhí)行的工作線程,讓這個(gè)工作線程在后臺(tái)通過對(duì)CAN節(jié)點(diǎn)的讀寫完成數(shù)據(jù)輸入和控制參數(shù)輸出的任務(wù)。前臺(tái)顯示界面則通過PostMessage()函數(shù)與后臺(tái)數(shù)據(jù)采集及控制程序進(jìn)行通信,以共享數(shù)據(jù)單元的方式得到實(shí)時(shí)采集數(shù)據(jù)并加以顯示。在“機(jī)械手系統(tǒng)運(yùn)行”界面中設(shè)置了一個(gè)按鈕用于數(shù)據(jù)采集和控制線程的啟動(dòng)。以下給出部分“送料缸”運(yùn)行控制代碼:

              //設(shè)置全局變量

              intRece_Data[8];//CAN輸入數(shù)據(jù)數(shù)組

              //以下是主線程

              ……

              #defineWM_THREADCANWMUSER+10//用戶消息定義

              ……

              ON_MESSAGE(WM_THREADCAN,OnThreadCAN)//用宏將消息和處理函數(shù)聯(lián)系起來

              ……

              LRESULTCWuLiao::OnThreadCAN(WPARAMwParam,LPARAMlParam)

             ?。?/p>

              CWuLiao::InputCAN(0x10);//讀2#CAN節(jié)點(diǎn)輸入狀態(tài)

              if(Rece_Data[2]==0x7e)CWuLiao::OutputCAN(0x10,0x00,0x55);//滿足條件,則輸出控制送料缸運(yùn)動(dòng)

              ……

              return0;

             ?。?/p>

              voidCWuLiao::OnWuLiaoThread()

              {

              InitCAN();//CAN初始化

              pThread=AfxBeginThread(CAN_IN,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);//創(chuàng)建工作線程

             ?。?/p>

              //以下是CAN數(shù)據(jù)采集和控制子線程

              UINTCAN_IN(LPVOIDpParam)

              {

              HWNDhWnd;

              hWnd=(HWND)param;

              do

             ?。?/p>

              PostMessage(hWnd,WM_THREADCAN,0,0);

              Sleep(10);

             ?。?/p>

              while(Rece_Data[2]!=0xef);//停止按鈕按下則中止工作線程

              return0;

             ?。?/p>

              上述代碼中,由主線程建立并初始化子線程,而子線程負(fù)責(zé)讀取CAN節(jié)點(diǎn)的狀態(tài)數(shù)據(jù),并通過分析、計(jì)算給出相應(yīng)的控制信號(hào),完成控制任務(wù)。子線程一旦被創(chuàng)建,它將獨(dú)立于創(chuàng)建它的主線程運(yùn)行。由于一個(gè)進(jìn)程中的所有線程都共享該進(jìn)程的虛擬地址空間,從而可以通過將主線程和子線程間需共享的數(shù)據(jù)聲明為全局變量的方法來訪問該進(jìn)程的所有全局變量。在機(jī)械手監(jiān)控程序中引入多線程機(jī)制,充分利用了Windows系統(tǒng)的多任務(wù)特點(diǎn),可以有效地克服CAN總線數(shù)據(jù)采集和控制過程中的停滯和反應(yīng)不及時(shí)現(xiàn)象,并能大大提高程序的運(yùn)行效率和可靠性。

              4.4機(jī)械手運(yùn)行過程的動(dòng)態(tài)顯示

              工業(yè)監(jiān)控軟件中,現(xiàn)場(chǎng)采集來的數(shù)據(jù)都需要以某種方式表示在屏幕上。在機(jī)械手系統(tǒng)中,主要的控制對(duì)象是氣缸和步進(jìn)電機(jī),為了能直觀地反映出它們的運(yùn)行狀態(tài),必須將CAN總線采集到的各傳感器狀態(tài)以及運(yùn)動(dòng)部件的運(yùn)行情況以動(dòng)畫的形式表現(xiàn)出來。為此,我們采用了ActiveX控件開發(fā)及應(yīng)用技術(shù)。ActiveX控件是微軟公司提供的功能強(qiáng)大的程序設(shè)計(jì)和開發(fā)技術(shù),它是提高程序開放性和可重用性的重要手段。在機(jī)械手控制程序中,通過MFCActiveXControlWizard建立了一個(gè)名為jixieshou的ActiveX控制的應(yīng)用程序框架,并在其中生成了可動(dòng)態(tài)顯示的機(jī)械手裝置圖形控件。通過對(duì)該控件中諸如氣缸寬度、高度等屬性的設(shè)置來改變控件的形狀;通過氣缸活塞每移動(dòng)一步的延時(shí)和每移動(dòng)一步的距離來改變氣缸的運(yùn)動(dòng)速度;通過調(diào)用該控件的接口函數(shù)來顯示氣缸、步進(jìn)電機(jī)、傳感器等的運(yùn)動(dòng)和狀態(tài)。而上述行為的發(fā)生是由CAN總線數(shù)據(jù)采集和控制子線程向主線程傳遞相應(yīng)全局變量的值引發(fā)的,由此將圖形顯示與實(shí)物動(dòng)作緊密聯(lián)系。

            5結(jié)束語(yǔ)

              利用CAN總線技術(shù),并采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法以及多線程技術(shù)、ActiveX技術(shù)等,可以使監(jiān)控軟件具有較強(qiáng)的通用性、可擴(kuò)展性和可靠性,同時(shí)進(jìn)一步提高了的開放性和實(shí)時(shí)性。通過在物料搬運(yùn)機(jī)械手控制中的應(yīng)用表明:該運(yùn)行可靠,能夠完全滿足設(shè)計(jì)要求。


            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉