基于CAN總線的機械手控制系統
1引言
本文引用地址:http://www.104case.com/article/163547.htm機械手可在空間抓放物體,動作靈活多樣,適用于可變換生產品種的中、小批量自動化生產,廣泛應用于柔性自動線。我們開發的用于熱處理淬火加工的物料搬運機械手,是一種按預先設定的程序進行工件分揀、搬運和淬火加工的自動化裝置,可部分代替人工在高溫和危險的作業區進行單調持久的作業,并可根據工件的變化以及淬火工藝的要求隨時更改相關控制參數。由于目前許多商品化的工業機器人(或機械手)大都采用封閉結構的專用控制系統,一般采用專用計算機(如PUMA工業機器人使用PDP-11)作為上層主控計算機,使用專用機器人語言(如VAL)作為離線編程工具,采用專用微處理器,并將控制算法固化在EPROM中[1],這種專用系統很難進行擴展、修改或再集成外部硬件(如傳感器)和軟件。因此,我們自行開發了氣、電混合驅動的三自由度圓柱坐標型機械手以及相應的物料分揀裝置,并根據其控制要求設計了基于CAN總線的分式布開放結構機械手控制系統。
本文重點闡述了該機械手控制系統的結構組成,并從多個方面對控制系統軟件的設計方法作了進一步分析。
2機械手基本結構
物料搬運機械手由機械手和物料分揀兩部分裝置組成。如圖1所示,機械手主要由機座(采用步進電機驅動旋轉)、水平手臂(采用直線坐標氣缸HMP-20-200)、垂直手臂(采用滑塊氣缸SLT-16-50)、氣爪(采用平行氣爪HGP-10-A)等部分組成。物料分揀裝置則由三個普通氣缸構成,用以將不同長度的工件送至不同的軌道中,供機械手分別抓取和搬運。

圖1物料搬運機械手結構簡圖
在機械手控制系統的開發中,我們始終立足于開放結構機械手控制器的設計思想,主要體現在以下幾方面:
(1)硬件基于標準總線結構,能實現現場設備之間、設備與各種傳感器之間以及現場設備與控制室之間的數據通信。
現場總線是當今自動化領域技術發展的熱點之一,被譽為自動化領域的計算機局域網。CAN(ControllerAreaNetwork)總線是現場總線的一個分支,是應用于生產現場控制設備之間實現雙向串行多節點數字通信的系統,是開放式、數字式的底層控制網絡。因其具有很高的可靠性和性能價格比,已經成為國際標準,受到工業界的廣泛重視,并已被公認為幾種最有前途的現場總線之一。機械手控制系統建立在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)使用標準的操作系統和標準的控制語言。
機械手控制系統監控軟件采用VisualC++6.0作為開發工具,運行于Windows98平臺上。VC是一種面向對象的編程語言,它提供了可視化編程環境,特別是提供了MFC類庫,封裝了WindowsAPI接口函數,并建立了應用程序框架,使程序開發人員可以將主要精力集中于所要解決的具體問題上。
另外,在機械手的水平手臂氣缸伺服控制中,采用德國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.2CAN總線數據通信
CAN總線是一種有效支持分布式控制及實時控制的多主串行總線,它具有短報文幀收發靈活、非破壞性基于優先權的總線仲裁技術等多種優越性能。在機械手控制系統中,CAN總線數據通信是通過與CANPCA適配卡一起提供Pcicandrv.LIB(CAN總線函數庫)中的相關函數調用實現的[5]。為了及時準確地了解CAN總線狀態,并盡可能減少故障和縮小故障范圍,在控制軟件中專門設計了測試程序,負責CAN總線接口及通信部分的調試、運行任務。只有在測試正常的前提下,才能進一步運用CAN總線對機械手進行控制。CAN總線數據有標準幀和擴展幀之分,它們都是由信息和數據兩部分組成的,只是地址標識符的位數不同。下面是CAN總線初始化及CAN標準幀數據收發的部分代碼。
//CAN總線初始化
voidCWuLiao::InitCAN()
{
intretval;
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數據發送
voidCWuLiao::OutputCAN(unsignedintCanID,unsignedcharH8B,unsignedcharL8B)
{
intretval;
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;//要發送的高、低字節
評論