<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于CAN總線(xiàn)的機械手控制系統

基于CAN總線(xiàn)的機械手控制系統

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

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

 ?。?/p>

  //數據接收

  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數據接收命令字

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

  if(retval==1)

 ?。?/p>

  retval=CAN_Rece(ptrStruct,ptrPacket);//調接收數據幀函數

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

 ?。?/p>

  Rece_Length=ptrPacket->length;//取接收到的數據長(cháng)度

  for(n=0;n

 ?。?/p>

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

 ?。?/p>

 ?。?/p>

 ?。?/p>

 ?。?/p>

  4.3多線(xiàn)程技術(shù)在實(shí)時(shí)監控中的應用

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

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

  //設置全局變量

  intRece_Data[8];//CAN輸入數據數組

  //以下是主線(xiàn)程

  ……

  #defineWM_THREADCANWMUSER+10//用戶(hù)消息定義

  ……

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

  ……

  LRESULTCWuLiao::OnThreadCAN(WPARAMwParam,LPARAMlParam)

 ?。?/p>

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

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

  ……

  return0;

 ?。?/p>

  voidCWuLiao::OnWuLiaoThread()

 ?。?/p>

  InitCAN();//CAN初始化

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

 ?。?/p>

  //以下是CAN數據采集和控制子線(xiàn)程

  UINTCAN_IN(LPVOIDpParam)

 ?。?/p>

  HWNDhWnd;

  hWnd=(HWND)param;

  do

 ?。?/p>

  PostMessage(hWnd,WM_THREADCAN,0,0);

  Sleep(10);

 ?。?/p>

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

  return0;

 ?。?/p>

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

  4.4機械手運行過(guò)程的動(dòng)態(tài)顯示

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

5結束語(yǔ)

  利用CAN總線(xiàn)技術(shù),并采用面向對象的程序設計方法以及多線(xiàn)程技術(shù)、ActiveX技術(shù)等,可以使監控軟件具有較強的通用性、可擴展性和可靠性,同時(shí)進(jìn)一步提高了的開(kāi)放性和實(shí)時(shí)性。通過(guò)在物料搬運機械手控制中的應用表明:該運行可靠,能夠完全滿(mǎn)足設計要求。


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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>