《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于CAN總線的機械手控制系統
基于CAN總線的機械手控制系統
摘要: 本文重點闡述了該機械手控制系統的結構組成,并從多個方面對控制系統軟件的設計方法作了進一步分析。
Abstract:
Key words :

1 引言

  機械手可在空間抓放物體,動作靈活多樣,適用于可變換生產品種的中、小批量自動化生產,廣泛應用于柔性自動線。我們開發的用于熱處理淬火加工的物料搬運機械手,是一種按預先設定的程序進行工件分揀、搬運和淬火加工的自動化裝置,可部分代替人工在高溫和危險的作業區進行單調持久的作業,并可根據工件的變化以及淬火工藝的要求隨時更改相關控制參數。由于目前許多商品化的工業機器人(或機械手)大都采用封閉結構的專用控制系統,一般采用專用計算機(如PUMA工業機器人使用PDP-11)作為上層主控計算機,使用專用機器人語言(如VAL)作為離線編程工具,采用專用微處理器,并將控制算法固化在EPROM中[1],這種專用系統很難進行擴展、修改或再集成外部硬件(如傳感器)和軟件。因此,我們自行開發了氣、電混合驅動的三自由度圓柱坐標型機械手以及相應的物料分揀裝置,并根據其控制要求設計了基于CAN總線的分式布開放結構機械手控制系統。

  本文重點闡述了該機械手控制系統的結構組成,并從多個方面對控制系統軟件的設計方法作了進一步分析。

2 機械手基本結構

  物料搬運機械手由機械手和物料分揀兩部分裝置組成。如圖1所示,機械手主要由機座(采用步進電機驅動旋轉)、水平手臂(采用直線坐標氣缸HMP-20-200)、垂直手臂(采用滑塊氣缸SLT-16-50)、氣爪(采用平行氣爪HGP-10-A)等部分組成。物料分揀裝置則由三個普通氣缸構成,用以將不同長度的工件送至不同的軌道中,供機械手分別抓取和搬運。

 


圖1 物料搬運機械手結構簡圖

 

3 基于CAN總線的機械手控制系統組成

  在機械手控制系統的開發中,我們始終立足于開放結構機械手控制器的設計思想,主要體現在以下幾方面:

  (1) 硬件基于標準總線結構,能實現現場設備之間、設備與各種傳感器之間以及現場設備與控制室之間的數據通信

  現場總線是當今自動化領域技術發展的熱點之一,被譽為自動化領域的計算機局域網。CAN(Controller Area Network)總線是現場總線的一個分支,是應用于生產現場控制設備之間實現雙向串行多節點數字通信的系統,是開放式、數字式的底層控制網絡。因其具有很高的可靠性和性能價格比,已經成為國際標準,受到工業界的廣泛重視,并已被公認為幾種最有前途的現場總線之一。機械手控制系統建立在CAN總線網絡基礎上,能夠更好地滿足其開放性和可靠性的要求。

  如圖2所示,控制系統中上位機采用PC機,在上位機的PCI總線插槽中安裝了瑞隆德公司的CANPCA單口CAN總線適配卡。下位機則采用若干CAN總線智能節點,分別與氣閥、步進電機驅動器、傳感器、開關等相連。上、下位機間的數據通信都是通過各自的CAN總線控制器SJA1000芯片和CAN總線收發器82C250芯片來實現的。其中,SJA1000具有完成CAN總線通信協議所要求的全部特性,它與獨立CAN總線控制器82C200完全兼容,并有支持CAN2.0B協議、擴展接收緩沖器、增強錯誤處理能力和增強驗收濾波等新增功能。四個下位機智能節點各自獨立完成現場數據采集和運行控制任務,并通過SJA1000實現與上位機間的數據接收和發送。而上位機則通過PCI橋和接口控制電路來訪問CAN控制器,從而實現與下位機間的數據通信。

 


圖2 物料搬運機械手CAN總線控制系統示意圖

 

  (2)使用基于非專用計算機平臺的開發系統(本控制系統中采用PC機)。

  (3)使用標準的操作系統和標準的控制語言。

  機械手控制系統監控軟件采用Visual C++6.0作為開發工具,運行于Windows98平臺上。VC是一種面向對象的編程語言,它提供了可視化編程環境,特別是提供了MFC類庫,封裝了Windows API接口函數,并建立了應用程序框架,使程序開發人員可以將主要精力集中于所要解決的具體問題上。

  另外,在機械手的水平手臂氣缸伺服控制中,采用德國Festo公司的伺服定位控制器SPC200以及與之配套的內置位移傳感器MLO-POT-0225、伺服定位控制連接器SPC-AIF-POT和比例方向流量閥MPYE-5-1/8-LF-010-B等裝置。機械手的回轉控制則采用北京凱恩帝數控公司的BD-3Y三相混和式步進電機驅動器。

4 機械手控制系統監控軟件設計

  4.1 監控軟件基本結構

  機械手監控軟件采用VC++6.0作為開發工具,應用其提供的MFC類庫和APPWizard功能生成SDI單文檔界面應用程序。VC++6.0提供了現成的窗口、工具條等制作手段,大大簡化了界面的開發過程,并且使得開發出的界面具有組態軟件風格,使用起來方便、靈活。如圖3所示,監控軟件主要由系統界面、CAN總線通信、機械手監控以及運行狀態顯示等模塊組成。下面就其中的數據通信、運行監控及動態顯示部分作進一步分析。

 


圖3 機械手監控軟件功能框圖

 

  4.2 CAN總線數據通信

  CAN總線是一種有效支持分布式控制及實時控制的多主串行總線,它具有短報文幀收發靈活、非破壞性基于優先權的總線仲裁技術等多種優越性能。在機械手控制系統中,CAN總線數據通信是通過與CANPCA適配卡一起提供Pcicandrv.LIB(CAN總線函數庫)中的相關函數調用實現的[5]。為了及時準確地了解CAN總線狀態,并盡可能減少故障和縮小故障范圍,在控制軟件中專門設計了測試程序,負責CAN總線接口及通信部分的調試、運行任務。只有在測試正常的前提下,才能進一步運用CAN總線對機械手進行控制。CAN總線數據有標準幀和擴展幀之分,它們都是由信息和數據兩部分組成的,只是地址標識符的位數不同。下面是CAN總線初始化及CAN標準幀數據收發的部分代碼。

  //CAN總線初始化

  void CWuLiao::InitCAN()

  {

  int retval;

  retval =CAN_Open(); //打開PCI適配卡函數

  if(retval!=1) AfxMessageBox("打開PCI卡失敗!");

  ptrConfig = &Config;

  ptrStruct = &Struct; //定義CAN數據幀結構指針

  ptrConfig->timer0=0x3f;

  ptrConfig->timer1=0xff; //設置波特率為5K

  ptrConfig->workMode=0; //使用11位的CAN節點地址

  ptrStruct->card=0; //PCI適配卡卡號

  ptrConfig->accCode=0; //CAN接收碼

  ptrConfig->accMask=0xff; //CAN屏蔽碼

  ptrConfig->control=1; //開放中斷

  ptrConfig->filterMode=0; //CAN控制器采用單濾波方式

  retval =CAN_Init(ptrStruct,ptrConfig); //調CAN初始化函數

  if(retval!=1) AfxMessageBox("初始化失敗!");

  }

  //CAN數據發送

  void CWuLiao::OutputCAN(unsigned int CanID,unsigned char H8B,unsigned char L8B)

  {

  int retval;

  ptrPacket = &Packet;

  ptrStruct = &Struct;

  ptrStruct->card=0;

  ptrPacket->length=4;//發送數據長度4個字節

  ptrPacket->rtr=0;//表示發送的是數據幀,而非遠程幀

  ptrPacket->CAN_ID=CanID;//定義CAN節點地址

  ptrPacket->data[0]=0x44;

  ptrPacket->data[1]=0x4f;//CAN數據發送命令字

  ptrPacket->data[2]=H8B;

  ptrPacket->data[3]=L8B;//要發送的高、低字節

 retval=CAN_Trans(ptrStruct,ptrPacket);//調發送數據幀函數

 

  }

  //CAN數據接收

  void CWuLiao::InputCAN(unsigned int ID)

  {

  ptrPacket = &Packet;

  ptrStruct = &Struct;

  int Rece_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); //調發送數據幀函數,發出接收命令

  if(retval==1)

  {

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

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

  {

  Rece_Length=ptrPacket->length; //取接收到的數據長度

  for(n=0;n 

  {

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

  }

  }

  }

  }

  4.3 多線程技術在機械手實時監控中的應用

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

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

  //設置全局變量

  int Rece_Data[8]; //CAN輸入數據數組

  //以下是主線程

  ……

  #define WM_THREADCAN WMUSER+10 //用戶消息定義

  ……

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

  ……

  LRESULT CWuLiao::OnThreadCAN(WPARAM wParam,LPARAM lParam)

  {

  CWuLiao::InputCAN(0x10); //讀2#CAN節點輸入狀態

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

  ……

  return 0;

  }

  void CWuLiao::OnWuLiaoThread()

  {

  InitCAN(); //CAN總線初始化

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

  }

  //以下是CAN數據采集和控制子線程

  UINT CAN_IN(LPVOID pParam)

  {

  HWND hWnd;

  hWnd=(HWND)param;

  do

  {

  PostMessage(hWnd,WM_THREADCAN,0,0);

  Sleep(10);

  }

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

  return 0;

  }

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

  4.4 機械手運行過程的動態顯示

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

5 結束語

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 欧美高清精品 | 欧美一级网站 | 人人干人人搞 | 成人国产一区二区三区 | 久久久噜久噜久久综合 | 日本娇小hd | 国产三级一区二区 | 丝袜美腿极品老师系列集合 | 国产伦精品一区二区三区免 | 亚洲欧美另类日本久久影院 | 中文字幕日本不卡一二三区 | 一级毛片牲交大片 | 天堂网久久 | 黄色a级在线观看 | 国产毛片久久国产 | 两性色午夜视频免费播放 | 精品视频久久 | 一级大黄美女免费播放 | 草草影院最新 | 美女色黄 | 国内精品视频在线播放一区 | 怡红院成人g影院 | 日韩视频在线免费观看 | 欧美伊人久久 | 2022国产精品手机在线观看 | 91精品视频免费在线观看 | 日韩中文字幕在线播放 | 午夜在线观看免费 | 久草毛片 | 精品亚洲一区二区 | 美女天天操 | 欧美日韩在线一本卡 | 亚洲成a人片在线观看88 | 9久热久re爱免费精品视频 | a级大片免费看 | 欧美一区二区久久精品 | 欧美色图亚洲图片 | 国产成人精品免费视 | 久久久国产精品网站 | 日日射射 | 农村寡妇野外情一级毛片 |