楊軍軍,武建新
(內(nèi)蒙古工業(yè)大學(xué)機(jī)械學(xué)院,內(nèi)蒙古呼和浩特 010051)
固高公司生產(chǎn)的GTS-800-PV(G)-PCⅠ系列運(yùn)動(dòng)控制器,可以實(shí)現(xiàn)高速的點(diǎn)位運(yùn)動(dòng)。其核心由DSP和FPGA組成,可以實(shí)現(xiàn)高性能的控制計(jì)算[1]。它適用于廣泛的應(yīng)用領(lǐng)域。基于數(shù)控卡控制系統(tǒng)的棱管法蘭自動(dòng)電焊機(jī)的應(yīng)用能提高效率,優(yōu)化質(zhì)量,改善勞動(dòng)強(qiáng)度且具有很好的經(jīng)濟(jì)和社會(huì)效益。
GTS-800-PV-PCⅠ系列運(yùn)動(dòng)控制器以 ⅠBMPC為主機(jī),提供標(biāo)準(zhǔn)的 PCⅠ總線的產(chǎn)品[2]。運(yùn)動(dòng)控制器提供C語(yǔ)言等函數(shù)庫(kù)和Windows動(dòng)態(tài)鏈接庫(kù),實(shí)現(xiàn)復(fù)雜的控制功能。以適應(yīng)各種應(yīng)用領(lǐng)域的要求。使用該運(yùn)動(dòng)控制器,要求使用者具有C語(yǔ)言編程經(jīng)驗(yàn)。GTS-800-PV(G)-PCⅠ運(yùn)動(dòng)控制器的外形結(jié)構(gòu)主要由DSP和FPGA兩部分組成,其中DSP是一種獨(dú)特的微處理器,是以數(shù)字信號(hào)來(lái)處理大量信息的器件。其主要的工作原理是接收模擬信號(hào),轉(zhuǎn)換為0或1的數(shù)字信號(hào),然后進(jìn)行后續(xù)的工作。FPGA即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。
GS系列伺服驅(qū)動(dòng)器以美國(guó)TⅠ公司最新的數(shù)字處理芯片(DSP)作為核心控制芯片,采用了先進(jìn)的全數(shù)字電機(jī)控制算法,完全以軟件方式實(shí)現(xiàn)了電流環(huán)、速度環(huán)、位置環(huán)的閉環(huán)伺服控制。
本次設(shè)計(jì)的棱管法蘭自動(dòng)焊接機(jī)用DSP作為運(yùn)動(dòng)控制的核心單元,控制卡采用的是PCⅠ接口通信的方式,利用PCⅠ總線來(lái)完成計(jì)算機(jī)與運(yùn)動(dòng)控制卡的通信,運(yùn)動(dòng)控制卡的+5V電源由PCⅠ插槽提供。
PCⅠ總線是當(dāng)今PC機(jī)應(yīng)用最多的一種通信接口,差不多所有計(jì)算機(jī)主板上都帶有這種接口,這為運(yùn)動(dòng)控制卡的使用提供了方便。PCⅠ插槽采用的是分時(shí)復(fù)用技術(shù),此種技術(shù)既能夠減少接口的管腳數(shù)量也能夠完成突發(fā)事件時(shí)的準(zhǔn)確傳輸。PCⅠ總線具有傳輸信息數(shù)據(jù)快速,實(shí)時(shí)性高,有很好的穩(wěn)定性與兼容性能,并且能夠進(jìn)行糾錯(cuò)處理。在高效數(shù)據(jù)處理中有著廣泛的應(yīng)用。本次自動(dòng)焊接使用的運(yùn)動(dòng)控制卡與PC機(jī)的連接如圖2。
圖1 固高運(yùn)動(dòng)控制卡實(shí)物圖
圖2 固高運(yùn)動(dòng)控制卡與PC連接圖
關(guān)閉計(jì)算機(jī)電源,取出產(chǎn)品附帶的兩條屏蔽電纜。一條屏蔽電纜連接控制器的 CN17與端子板的CN17,另一條屏蔽電纜連接轉(zhuǎn)接板的 CN18與端子板的CN18。為保證外部電路正常運(yùn)行,必須進(jìn)行上述連接,如圖3所示。
圖3 運(yùn)動(dòng)控制器與8軸端子板連接示意圖
如圖4所示,為固高運(yùn)動(dòng)控制卡與伺服驅(qū)動(dòng)器連接圖[3]。
自動(dòng)焊接過(guò)程中因?yàn)榇嬖谥罅康暮附訜焿m、弧光、金屬飛濺,現(xiàn)場(chǎng)焊接中操作環(huán)境非常惡劣,一般的接近開(kāi)關(guān)常常受到環(huán)境的干擾。所以本文選用抗干擾能力強(qiáng)的激光傳感器作為自動(dòng)焊接機(jī)的測(cè)距單元。激光傳感器一般由激光器、激光檢測(cè)器和測(cè)量電路等幾部分構(gòu)成,主要依靠比較光譜相位進(jìn)行距離的測(cè)量。把激光傳感器安裝在焊槍上讓其與焊槍保持在同一水平線使棱管到焊槍與棱管到激光傳感器的距離相同,并且激光傳感器與焊槍一起運(yùn)動(dòng)。由于在焊接時(shí),焊槍與法蘭的角度已經(jīng)調(diào)整到位,因此激光傳感器只需要采集焊槍與棱管面的距離即可,通過(guò)采集到的數(shù)據(jù)的大小來(lái)確定焊槍的上下移動(dòng)與否。數(shù)據(jù)采集示意如圖5所示[4]。
圖4 固高運(yùn)動(dòng)控制卡與伺服驅(qū)動(dòng)器連接圖
圖5 數(shù)據(jù)采集示意圖
由于棱管為對(duì)稱規(guī)則形狀,在自動(dòng)焊接的初始狀態(tài)為原點(diǎn)位置,即焊槍處于棱管的垂直上方,當(dāng)開(kāi)始焊接時(shí)讓先主軸停止旋轉(zhuǎn),焊槍以一定的速度向下接近棱管,當(dāng)焊槍與棱管的距離達(dá)到接近開(kāi)關(guān)的動(dòng)作距離設(shè)定值3mm時(shí),觸發(fā)接近開(kāi)關(guān),運(yùn)動(dòng)控制卡程序跳轉(zhuǎn)到主軸旋轉(zhuǎn),由于棱管面到中心的距離不等,所以在主軸旋轉(zhuǎn)時(shí),棱管表面與焊槍的距離也會(huì)變化,當(dāng)采集到激光傳感器的測(cè)距*dResult為1.99mm時(shí)就讓焊槍已設(shè)定的速度向上移動(dòng),當(dāng)棱管旋轉(zhuǎn)到其某個(gè)棱處于最高點(diǎn)時(shí),其與焊槍的距離已不能在增大,但此時(shí)焊槍仍然向上移動(dòng),當(dāng)其激光傳感器的測(cè)距*dResult為2.01mm時(shí)就讓焊槍下移來(lái)完成焊接。
上位機(jī)通過(guò)RS485與傳感器進(jìn)行通信,通信波特率設(shè)置為38400,數(shù)據(jù)位為8位,停止位為1位,上位機(jī)通過(guò)函數(shù)GetDistance()得到傳感器測(cè)量長(zhǎng)度[4]。其函數(shù)[5]如下所示:
BOOL GetDistance(int num,double*distance)
{
unsigned char buff[50];
DWORD dwBytesRead,dwBytesWritten;
BOOL bReadStatus,bWriteStatus;
char szComParams[50];
DCB dcb;
char*m_com;
m_com="Com1";
HANDLE m_ComDev;
COMMTⅠMEOUTS CommTimeOuts;
//m_ComDev=NULL;
m_ComDev=CreateFile(m_com,GENERⅠC_READ|
GENERⅠC_WRⅠTE,0,NULL,OPEN_EXⅠSTⅠNG,F(xiàn)ⅠLE
_ATTRⅠBUTE_NORMAL,NULL);
if(m_ComDev== ⅠNVALⅠD_HANDLE_VALUE)
{
//printf("連接失敗! ");
MessageBox(NULL,TEXT("連接失?。?,TEXT("警告"),MB_OK);
return 1;
}
GetCommTimeouts(m_ComDev,&CommTimeOuts);
CommTimeOuts.ReadⅠntervalTimeout=10;
SetCommTimeouts(m_ComDev,&CommTimeOuts);
//PurgeComm(m_ComDev,PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
m_com="Com1:38400,N,8,1";
wsprintf(szComParams,m_com);
dcb.DCBlength=sizeof(DCB);
GetCommState(m_ComDev,&dcb);
dcb.BaudRate=38400;
dcb.ByteSize=8;
if((!SetCommState(m_ComDev,&dcb))||(!Set
upComm(m_ComDev,10000,10000)))
{
DWORD dwError=GetLastError();
CloseHandle(m_ComDev);
}
//PurgeComm(m_ComDev,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
unsigned char commandMessage[4]={0x81,0x04,0x57,0x52};
double nresult;
bWriteStatus=WriteFile(m_ComDev,commandMessage,4,&dwBytesWritten,NULL);
/*if(bWriteStatus)
{
printf("寫(xiě)入取數(shù)據(jù)%d字節(jié):",dwBytesWritten);
for(int i=0;i<dwBytesWritten;i++)
{
printf("%X ",commandMessage[i]);
}
}*/
bReadStatus = ReadFile(m_ComDev,buff,6,&dwBytesRead,NULL);
if(bReadStatus)
{
/*printf(" 讀出數(shù)據(jù):");
for(int i=0;i<dwBytesRead;i++)
{
printf("%x ",buff[i]);
}*/
nresult=300-((0x3f& buff[3])*64+(0x3f& buff[4]))*220.0/4095;
//printf(";距離是:%3.1f ",nresult);
}
*distance=nresult;
return 0;
}
焊接機(jī)器人控制系統(tǒng)的流程如圖6所示。
組對(duì)系統(tǒng)、主軸系統(tǒng)、機(jī)械手系統(tǒng)都是由固高運(yùn)動(dòng)控制卡來(lái)控制各個(gè)伺服電機(jī)的運(yùn)動(dòng),所以要設(shè)置每個(gè)電機(jī)的軸標(biāo)號(hào)[6]。電機(jī)控制的軸分別為:
控制卡1:電機(jī)1:外側(cè)機(jī)械手X軸(插補(bǔ));電機(jī)2:外側(cè)機(jī)械手Z軸(插補(bǔ));電機(jī)3:外側(cè)機(jī)械手Y軸;電機(jī)4:外側(cè)機(jī)械手A軸(控制的是機(jī)械手焊槍的擺動(dòng)運(yùn)動(dòng))(插補(bǔ));電機(jī)5:主軸;電機(jī)6:組隊(duì)系統(tǒng)托舉(控制組對(duì)系統(tǒng)豎直方向的運(yùn)動(dòng));主軸7:組隊(duì)系統(tǒng)移動(dòng)(控制組對(duì)系統(tǒng)水平方向的運(yùn)動(dòng))。
控制卡2:電機(jī):內(nèi)側(cè)機(jī)械手X軸(插補(bǔ));電機(jī)2:內(nèi)側(cè)機(jī)械手Z軸(插補(bǔ));電機(jī)3:內(nèi)側(cè)機(jī)械手Y軸;電機(jī)4:內(nèi)側(cè)機(jī)械手A軸(控制的是機(jī)械手焊槍的擺動(dòng)運(yùn)動(dòng))(插補(bǔ))。
下面根據(jù)上文中提到的控制系統(tǒng)流程圖,簡(jiǎn)單的介紹一下組對(duì)系統(tǒng)、主軸系統(tǒng)、機(jī)械手系統(tǒng)的運(yùn)動(dòng)控制過(guò)程[7]。
圖6 焊接機(jī)器人控制系統(tǒng)的流程圖
第一,將焊件放到組對(duì)系統(tǒng)的支撐件上時(shí),需要根據(jù)所給定的焊件的長(zhǎng)度、重量和直徑的大小來(lái)調(diào)整組度系統(tǒng)的距離和兩隊(duì)滾輪的張角,以便于組對(duì)系統(tǒng)的穩(wěn)定快速運(yùn)行。組對(duì)系統(tǒng)先將焊件沿豎直方向托升至與主軸同軸度的位置,如果需要調(diào)整可以進(jìn)行手動(dòng)微調(diào),使其達(dá)到系統(tǒng)的要求;之后電機(jī)控制組對(duì)系統(tǒng)沿水平方向運(yùn)動(dòng),將焊件點(diǎn)的待焊端插入法蘭,焊件插入法蘭的深度可以通過(guò)安裝的激光傳感器來(lái)檢測(cè),當(dāng)法蘭端面和棱管端面共面時(shí)開(kāi)始計(jì)時(shí),根據(jù)棱管直徑和棱管長(zhǎng)度上位機(jī)會(huì)自動(dòng)計(jì)算棱管插入法蘭的長(zhǎng)度。在此過(guò)程中必須保持焊件和法蘭的同軸度在允許范圍內(nèi)。
第二,當(dāng)組對(duì)系統(tǒng)將焊件移動(dòng)到焊接位置后,就需要主軸系統(tǒng)中處于尾座的電機(jī)開(kāi)始運(yùn)動(dòng),它的作用是將焊件固定夾緊,便于在焊接過(guò)程中焊接不會(huì)在轉(zhuǎn)動(dòng)時(shí)移動(dòng),導(dǎo)致焊接失敗。焊件夾緊以后,實(shí)施人工點(diǎn)焊固定棱管和法蘭的相對(duì)位置,當(dāng)所有的工作都完成則可以將組對(duì)系統(tǒng)移動(dòng)到焊件下方。
第三,由于焊接環(huán)境非常惡劣,而我們使用的是激光傳感器,故必須在焊接之前進(jìn)行采點(diǎn),下一步則啟動(dòng)主軸電機(jī),使用激光傳感器記錄棱管一周點(diǎn)的坐標(biāo)保存到文件中。
第四,機(jī)械手系統(tǒng)的控制是最重要的,通過(guò)手動(dòng)調(diào)節(jié)焊接機(jī)器人焊頭和待焊處的焊接角度,以達(dá)到最佳焊接狀態(tài)。當(dāng)我完成以上所有的步驟以后,要重新檢查機(jī)床所有的設(shè)備是否都能正常工作,這個(gè)過(guò)程避免了因?yàn)樵诤附舆^(guò)程開(kāi)始后因?yàn)樵O(shè)備損壞而發(fā)生事故,所以我們要對(duì)不能正常完成整個(gè)焊接工作的設(shè)備馬上更換,保證焊接工作正常進(jìn)行。
第五,當(dāng)所有的控制系統(tǒng)都到達(dá)指定位置后,啟動(dòng)機(jī)床,開(kāi)始焊接。先通過(guò)主軸系統(tǒng)主軸的轉(zhuǎn)動(dòng)帶動(dòng)焊件和法蘭一起轉(zhuǎn)動(dòng);然后機(jī)械手開(kāi)始啟動(dòng),對(duì)焊縫實(shí)施焊接,在焊接的過(guò)程中,控制卡運(yùn)行插補(bǔ)指令讀取文件中的坐標(biāo)進(jìn)行焊接。
第六,當(dāng)焊接過(guò)程完成以后,要立即關(guān)閉機(jī)床的運(yùn)動(dòng),因?yàn)楹附拥暮缚p不夠理想,所以在停止機(jī)床后要對(duì)焊縫進(jìn)行必要的處理,使其達(dá)到技術(shù)要求。焊槍的焊頭是很脆弱的,所以在焊接完成后撤走機(jī)械手的過(guò)程中,應(yīng)該先將機(jī)械手沿豎直方向向上移動(dòng),這樣可以后保護(hù)焊頭,然后再將機(jī)械手沿水平方向和前后方向?qū)C(jī)械手移動(dòng)到安全的待焊位置。最后,還要將焊接完的焊件運(yùn)走,就需要升起之前下落的組對(duì)系統(tǒng),撤走固定夾緊裝置,將焊件由組對(duì)系統(tǒng)從機(jī)床的工作平臺(tái)卸下,運(yùn)送到指定的位置。
在整個(gè)程序的控制過(guò)程中,各個(gè)軸的運(yùn)動(dòng)一共有兩種運(yùn)動(dòng)方式,分別是點(diǎn)位運(yùn)動(dòng)和直線插補(bǔ)運(yùn)動(dòng)。其中控制一個(gè)軸點(diǎn)位運(yùn)動(dòng)的軸有5、6、7軸,都是單獨(dú)軸的點(diǎn)位運(yùn)動(dòng),3軸是在建立的坐標(biāo)系內(nèi),但是不參與插補(bǔ)。其他的都是插補(bǔ)運(yùn)動(dòng)的軸。
固高GTS系列運(yùn)動(dòng)控制器支持多種編程環(huán)境下的應(yīng)用程序開(kāi)發(fā),固高公司提供有多種編程環(huán)境下的驅(qū)動(dòng)程序與工具軟件包,可實(shí)現(xiàn)對(duì)C、C++、C#、VB、Delphi等多種編程開(kāi)發(fā)平臺(tái)的動(dòng)態(tài)調(diào)用支持。
軟件架構(gòu)如圖7所示。
圖7 軟件架構(gòu)
自動(dòng)電焊機(jī)的人機(jī)界面要求簡(jiǎn)潔、大方、好用,要有良好的人機(jī)交互性,能夠滿足焊接控制時(shí)參數(shù)的設(shè)置需求與自動(dòng)焊機(jī)運(yùn)行時(shí)參數(shù)的實(shí)時(shí)監(jiān)控要求,并能實(shí)現(xiàn)人工手動(dòng)調(diào)整,急停,手動(dòng)調(diào)試,故界面還要求功能強(qiáng)大。界面開(kāi)發(fā)如圖8。圖8中點(diǎn)開(kāi)控制按鈕可以選擇配置文件,如圖9。
圖8 操作界面
圖9 打開(kāi)界面
在界面中調(diào)試與信息是供操作人員調(diào)試與手動(dòng)調(diào)整焊件的,數(shù)字量輸入狀態(tài),和通用輸出可以了解到固高運(yùn)動(dòng)控制卡的狀態(tài),下方有操作區(qū),有伺服使能,平滑停止,緊急停止等必要的操作,右方是關(guān)于棱管參數(shù)。最重要的是下方的操作向?qū)峁┙o操作人員一個(gè)操作順序,并且可以靈活的輸入運(yùn)動(dòng)參數(shù),下方是信息區(qū),可以很方便的給操作人員運(yùn)動(dòng)模式和錯(cuò)誤信息。
棱管法蘭自動(dòng)焊接機(jī)在棱管法蘭的焊接中有著廣泛的應(yīng)用,本文利用基于固高運(yùn)動(dòng)控制卡的控制系統(tǒng),根據(jù)焊接參數(shù)與焊接控制系統(tǒng)的要求設(shè)計(jì)了棱管法蘭自動(dòng)焊接機(jī)控制系統(tǒng)。本文在研究棱管法蘭自動(dòng)電焊機(jī)的過(guò)程中得出了以下結(jié)論。
(1)對(duì)自動(dòng)焊接的硬件系統(tǒng)進(jìn)行了設(shè)計(jì)時(shí),根據(jù)固高運(yùn)動(dòng)控制卡以及配套的端子板進(jìn)行選擇了控制系統(tǒng)方案,進(jìn)行了運(yùn)動(dòng)控制卡與PC連接設(shè)計(jì),端子板與伺服驅(qū)動(dòng)器連接設(shè)計(jì),并且對(duì)電機(jī)進(jìn)行了選型以及確定每個(gè)電機(jī)軸在自動(dòng)點(diǎn)焊接中的作用。
(2)以VC++6.0作為人機(jī)界面系統(tǒng)開(kāi)發(fā)平臺(tái),設(shè)計(jì)軟件開(kāi)發(fā)整體流程并采用有調(diào)理的順序流程,設(shè)計(jì)的人機(jī)界面主要有主界面、系統(tǒng)參數(shù)設(shè)置、焊接參數(shù)設(shè)置、文檔處理。
[1] 吳 麗,梅 楊.電氣控制與PLC應(yīng)用技術(shù)[M].北京:機(jī)械工業(yè)出版社,2002.
[2] 張選正,張金遠(yuǎn).變頻器應(yīng)用經(jīng)驗(yàn)[M].北京:中國(guó)電力出版社,2006.
[3] 王仁祥.常用低壓電器原理及其控制技術(shù)[M].北京:機(jī)械工業(yè)出版社,2002.
[4] 廖常初.可編程序控制器應(yīng)用技術(shù)[M].重慶:重慶大學(xué)出版社,2004.
[5] 吳 麗,黃江峰.電氣控制與PLC應(yīng)用[M].北京:中國(guó)電力出版社,2004.