1 引言
隨著我國(guó)制造業(yè)的迅速發(fā)展,
數(shù)控機(jī)床在
機(jī)械加工行業(yè)得到了廣泛的應(yīng)用。要實(shí)現(xiàn)數(shù)控機(jī)床對(duì)整個(gè)
機(jī)械加工過(guò)程的自動(dòng)控制就必須編寫(xiě)機(jī)床數(shù)控系統(tǒng)能夠識(shí)別的數(shù)控加工程序,該程序可由人工進(jìn)行編寫(xiě),也可由計(jì)算機(jī)輔助制造(CAM)軟件自動(dòng)生成。近年來(lái),CAM軟件得到了迅猛地發(fā)展,如國(guó)外的Pro/E、UG、MASTERCAM和國(guó)內(nèi)的CAXA,其功能也日趨智能化,可以實(shí)現(xiàn)復(fù)雜曲面結(jié)構(gòu)零件的快速編程,給產(chǎn)品的生產(chǎn)加工帶來(lái)了巨大的便利。但是隨著零件結(jié)構(gòu)的復(fù)雜化,CAM軟件生成加工代碼的容量將會(huì)很大,如果超過(guò)了機(jī)床數(shù)控系統(tǒng)的程序存儲(chǔ)空間,將不能一次性存儲(chǔ)在數(shù)控系統(tǒng)中。雖然目前較為先進(jìn)的數(shù)控系統(tǒng)配有以太網(wǎng)或USB通信接口,但考慮到早期生產(chǎn)的數(shù)控系統(tǒng)只配備了RS232C串行通信接口,且在很多企業(yè)中占有一定的比重。為了解決該類(lèi)型數(shù)控系統(tǒng)對(duì)于大容量程序的處理問(wèn)題,必須使數(shù)控機(jī)床處于DNC加工狀態(tài),即通過(guò)串行通信接口將一部分程序先傳輸至數(shù)控系統(tǒng),由數(shù)控系統(tǒng)處理并完成零件加工過(guò)程的控制,當(dāng)這部分程序執(zhí)行完之后再由數(shù)控系統(tǒng)將其刪除,并繼續(xù)通過(guò)串行通信接口讀取剩余的程序,如此循環(huán)直到程序全部執(zhí)行完畢,該過(guò)程即結(jié)束。
本文作者討論了在實(shí)現(xiàn)數(shù)控機(jī)床DNC加工過(guò)程中的硬件連接要求、機(jī)床數(shù)控系統(tǒng)參數(shù)設(shè)置和VB程序的設(shè)計(jì)方法。
2 硬件連接要求
本次研究使用的機(jī)床設(shè)備為南通機(jī)床廠(chǎng)制造的V600數(shù)控銑床,配備的數(shù)控系統(tǒng)型號(hào)為FANUC 0iMATE-MC,該數(shù)控系統(tǒng)提供了一個(gè)25針的RS232C串行通信接口。數(shù)控加工程序由PC機(jī)通過(guò)串行通信接口進(jìn)行發(fā)送,由于目前市場(chǎng)上的PC機(jī)只提供9針的RS232C串行通信接口,因此微機(jī)與
數(shù)控機(jī)床進(jìn)行連接時(shí)需提供一根一端為9針(DB9)另一端為25針(DB25)的串行通信電纜線(xiàn)。下面對(duì)該電纜線(xiàn)的電氣信號(hào)和連接注意事項(xiàng)做出說(shuō)明。
2.1 電氣信號(hào)
串行通信電纜線(xiàn)可由機(jī)床制造商提供,也可從電子產(chǎn)品市場(chǎng)購(gòu)買(mǎi)。RS232C的各個(gè)引腳有著不同的功能,要想實(shí)現(xiàn)微機(jī)與
機(jī)床數(shù)控系統(tǒng)之間的串行通信一般只需要用到其中的3個(gè)引腳,它們分別是接收數(shù)據(jù)、發(fā)送數(shù)據(jù)和信號(hào)地。其引腳連接關(guān)系如表1所示。
表1 DB9和DB25常用引腳連接關(guān)系
在進(jìn)行串行通信時(shí),數(shù)控系統(tǒng)的接收數(shù)據(jù)引腳和發(fā)送數(shù)據(jù)引腳必須分別接微機(jī)的發(fā)送數(shù)據(jù)引腳和接收數(shù)據(jù)引腳,以達(dá)到數(shù)據(jù)的“收”與“發(fā)”,因此在電子產(chǎn)品市場(chǎng)購(gòu)買(mǎi)的串行通信電纜線(xiàn)必須進(jìn)行跳線(xiàn)處理,方法是將電纜線(xiàn)一端的接收數(shù)據(jù)引腳和發(fā)送數(shù)據(jù)引腳進(jìn)行對(duì)調(diào)。如果是
機(jī)床制造商提供的串行通信電纜線(xiàn),因?yàn)閺S(chǎng)家已經(jīng)事先進(jìn)行跳線(xiàn)處理,因此不需要再進(jìn)行跳線(xiàn)。
在通信過(guò)程中還需考慮數(shù)據(jù)的流量控制,以防止數(shù)控系統(tǒng)和微機(jī)的串口接收緩沖區(qū)發(fā)生“溢出”,而實(shí)現(xiàn)流量控制的便是握手信號(hào)。握手分硬件握手和軟件握手,硬件握手需要通過(guò)串口中專(zhuān)門(mén)的握手信號(hào)引腳來(lái)實(shí)現(xiàn),而軟件握手是通過(guò)數(shù)控系統(tǒng)和微機(jī)串口的發(fā)送數(shù)據(jù)引腳發(fā)送ASCII碼第19個(gè)字符和第17個(gè)字符來(lái)控制數(shù)據(jù)發(fā)送的暫停和恢復(fù)。如果發(fā)送的數(shù)據(jù)中存在ASCII碼第19個(gè)字符或第17個(gè)字符便不能使用軟件握手方法,否則會(huì)出現(xiàn)“錯(cuò)誤的握手”。由于數(shù)控加工程序的指令中并沒(méi)有ASCII碼第19個(gè)字符和第17個(gè)字符對(duì)應(yīng)的加工指令,因此不會(huì)出現(xiàn)“錯(cuò)誤的握手”情況的發(fā)生,同時(shí)FANUC Oi-MATE-MC數(shù)控系統(tǒng)支持軟件握手,如采用軟件握手實(shí)現(xiàn)串行通信則只需使用3個(gè)引腳便能完成任務(wù),其硬件連接將變得簡(jiǎn)單易行。
2.2 連接注意事項(xiàng)
當(dāng)數(shù)控系統(tǒng)和微機(jī)中的任何一個(gè)先上電時(shí),由于兩者串口電路的電位可能不同,如果此時(shí)直接使用電纜線(xiàn)連接數(shù)控系統(tǒng)和微機(jī)的串口,可能會(huì)因?yàn)殡娢徊疃霈F(xiàn)放電,燒壞串口電路。因此推薦使用光電隔離器安裝于電纜線(xiàn)的兩端,以分別保護(hù)數(shù)控系統(tǒng)和微機(jī)。
使用光電隔離器可以保證設(shè)備的使用安全,但是會(huì)增加硬件投入成本。如果在數(shù)控機(jī)床和微機(jī)上電之前先將兩者用串行通信電纜線(xiàn)進(jìn)行連接,此時(shí)因?yàn)閮烧叽陔娐返碾娢灰呀?jīng)相同,然后再對(duì)數(shù)控機(jī)床和微機(jī)分別上電,這樣就不會(huì)造成串口電路的損壞。在實(shí)際生產(chǎn)使用中因?yàn)楹苌贂?huì)頻繁將串行通信電纜線(xiàn)拔下,因此在不使用光電隔離器時(shí)使用以上方法連接數(shù)控系統(tǒng)和微機(jī)的串口是安全的,同時(shí)也是可以減少硬件成本投入的。
3 機(jī)床數(shù)控系統(tǒng)參數(shù)設(shè)置
串行通信過(guò)程中通信雙方必須按照相同的通信協(xié)議才能實(shí)現(xiàn)數(shù)據(jù)的正確傳輸,其中數(shù)控系統(tǒng)是以系統(tǒng)參數(shù)的形式完成串行通信參數(shù)的設(shè)置的。針對(duì)本次研究中所使用的FANUC 0i-MATE-MC數(shù)控系統(tǒng),其必須設(shè)置的串行通信參數(shù)如表2所示。
串行通信過(guò)程中對(duì)于數(shù)據(jù)位和奇偶校驗(yàn)也需要進(jìn)行正確的設(shè)置,F(xiàn)ANUC 0i-MATE-MC數(shù)控系統(tǒng)對(duì)這兩個(gè)參數(shù)有其固定值,無(wú)需對(duì)其進(jìn)行設(shè)置。但是在使用VB軟件編程時(shí)必須知道該數(shù)控系統(tǒng)中數(shù)據(jù)位和奇偶校驗(yàn)的設(shè)置情況,否則無(wú)法進(jìn)行正確的通信。通過(guò)查閱該數(shù)控系統(tǒng)的使用說(shuō)明書(shū)可以知道其數(shù)據(jù)位為7位,可以表示ASCII碼為0-127的字符,由于數(shù)控加工程序的指令均為ASCII碼0-127的字符,因此在VB軟件中也應(yīng)使用7位數(shù)據(jù)來(lái)傳輸各個(gè)字符。同時(shí)該型號(hào)的數(shù)控系統(tǒng)不進(jìn)行奇偶校驗(yàn),因此VB軟件中也應(yīng)設(shè)置無(wú)奇偶校驗(yàn)。
表2 機(jī)床數(shù)控系統(tǒng)串行通信參數(shù)設(shè)置值及含義
4 VB程序的設(shè)計(jì)方法
圖1 數(shù)控DNC軟件運(yùn)行界面
本次研究使用的編程軟件為Visual BASIC 6.0,考慮到該DNC軟件應(yīng)簡(jiǎn)單易用,因此使用了單一編程界面(SDl),所有的操作選項(xiàng)均按類(lèi)別分類(lèi)。編程中使用的主要控件為RichTextBox、ProgressBar、ComboBox、CommonDialog和MSComm。RichTextBox控件的功能為顯示加載的數(shù)控加工程序文本;ProgressBar控件的功能為顯示發(fā)送程序的進(jìn)度;ComboBox控件的功能為提供各通信參數(shù)的選擇操作;CommonDialog控件的功能為產(chǎn)生文件打開(kāi)與保存的對(duì)話(huà)框;MSComm控件的功能為通過(guò)PC機(jī)的串行通信接口實(shí)現(xiàn)數(shù)據(jù)的收與發(fā)。該DNC軟件提供了兩大功能:一是微機(jī)發(fā)送數(shù)控加工程序至機(jī)床,實(shí)現(xiàn)DNC加工;二是微機(jī)讀取機(jī)床發(fā)送出的數(shù)控加工程序,實(shí)現(xiàn)機(jī)床程序存儲(chǔ)區(qū)的備份。下面對(duì)該軟件運(yùn)行的主要流程和各功能的關(guān)鍵設(shè)計(jì)方法進(jìn)行介紹,其運(yùn)行界面如圖1所示。
4.1 軟件運(yùn)行的主要流程
發(fā)送文件時(shí),應(yīng)通過(guò)CommonDialog控件及相關(guān)代碼生成打開(kāi)文件的對(duì)話(huà)框,并將選中的文件內(nèi)容加載至RichTextBox控件的文本顯示區(qū)域內(nèi),最后通過(guò)按下發(fā)送文件按鈕將數(shù)控加工程序發(fā)送至數(shù)控系統(tǒng)。接收文件時(shí),當(dāng)按下接收文件按鈕后將通過(guò)CommonDialog控件及相關(guān)代碼生成保存文件的對(duì)話(huà)框,并選擇保存路徑,然后進(jìn)入等待接收狀態(tài),一旦有數(shù)據(jù)進(jìn)入即開(kāi)始接收,接收完畢后將自動(dòng)保存文件至相應(yīng)的路徑,圖2為發(fā)送與接收過(guò)程的設(shè)計(jì)流程圖。
圖2 發(fā)送與接收過(guò)程的設(shè)計(jì)流程圖
4.2 各功能的關(guān)鍵設(shè)計(jì)方法
4.2.1 分割文件
發(fā)送給數(shù)控系統(tǒng)的數(shù)控加工程序的容量可能比較大,考慮到MSComm控件發(fā)送緩沖區(qū)的大小不可能設(shè)置太大(此處使用默認(rèn)的512字節(jié)),因此必須對(duì)數(shù)控加工程序進(jìn)行分割,分多次進(jìn)行發(fā)送。此處可采用FOR循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)多次的發(fā)送,而循環(huán)的次數(shù)由文件總大小和每次發(fā)送數(shù)據(jù)的大小來(lái)決定,考慮到數(shù)控系統(tǒng)串口的接收緩沖區(qū)比較小,如果一次發(fā)送的數(shù)據(jù)過(guò)大則會(huì)使其緩沖區(qū)溢出并產(chǎn)生報(bào)警,此處可設(shè)置每次發(fā)送數(shù)據(jù)的大小為200字節(jié)。
4.2.2 軟件握手的實(shí)現(xiàn)
在進(jìn)行DNC加工時(shí)必須進(jìn)行流量控制,以防止PC機(jī)串口發(fā)送超速而造成數(shù)控系統(tǒng)的溢出報(bào)警,此處采用軟件握手來(lái)實(shí)現(xiàn)對(duì)流量的控制。其設(shè)計(jì)方法是在發(fā)送循環(huán)中加入DoLoop循環(huán)結(jié)構(gòu),通過(guò)不斷讀取輸入緩沖區(qū)并查找是否收到數(shù)控系統(tǒng)發(fā)來(lái)的暫停發(fā)送(13H)或恢復(fù)發(fā)送信號(hào)(11H)來(lái)決定是否繼續(xù)發(fā)送數(shù)據(jù),該循環(huán)結(jié)構(gòu)的程序代碼如下:
Do
bufwait:Comml.Input‘讀取輸人緩沖區(qū)
If InStr(bufwait,Chr$(&H13))>0Then
wait=True
End If‘判斷是否暫停發(fā)送
If InStr(bufwait,Chr$(&H11))>0Then
wait=False
End If‘判斷是否收恢復(fù)發(fā)送
DoEvents‘先將控制權(quán)交給Windows
Loop While wait=True‘
以上程序代碼中必須事先定義bufwait為字符串變量,wait為布爾型變量。
4.2.3 檢查輸出緩沖區(qū)
在通過(guò)串口發(fā)送一個(gè)程序段之前還必須檢查輸出緩沖區(qū)中是否有未發(fā)送完的字節(jié),否則可能會(huì)使得輸出緩沖區(qū)中不斷堆積新的數(shù)據(jù)而導(dǎo)致溢出。實(shí)現(xiàn)以上功能的設(shè)計(jì)方法是在軟件握手的功能后加入一個(gè)DoLoop循環(huán)結(jié)構(gòu),通過(guò)不斷檢查MSComm控件中的OutBufferCount屬性是否為0來(lái)決定是否繼續(xù)發(fā)送數(shù)據(jù),該循環(huán)結(jié)構(gòu)的程序代碼如下:
Do
outcount=Comml.OutBufferCount‘讀取輸出緩沖區(qū)的字節(jié)數(shù)
If outcount=0 Then
sendempty=False
Else
sendempty=True
End If‘判斷是否是零字節(jié)
讀取輸出緩
DoEvents‘先將控制權(quán)交給Windows
Loop While sendempty=True
以上程序代碼中必須事先定義outcount為整形變量,sendempty為布爾型變量。
4.2.4 檢查文件發(fā)送或接收是否結(jié)束
在發(fā)送文件的過(guò)程中要想知道是否發(fā)送結(jié)束可以檢查FOR循環(huán)的當(dāng)前循環(huán)次數(shù)是否為總循環(huán)次數(shù),但是在接收文件的過(guò)程中因?yàn)槭孪炔⒉恢罃?shù)控系統(tǒng)發(fā)送的程序有多大,因此必須采用其它方法來(lái)解決該問(wèn)題。
FANUC數(shù)控系統(tǒng)對(duì)程序傳輸?shù)耐ㄐ艆f(xié)議做了如下規(guī)定:程序的開(kāi)頭和結(jié)尾必須采用“%”來(lái)表示程序傳輸?shù)拈_(kāi)始和結(jié)束。因此要想知道程序是否發(fā)送或接收完畢可以通過(guò)查找程序中的“%”這一字符來(lái)實(shí)現(xiàn),在文件發(fā)送循環(huán)中實(shí)現(xiàn)該功能的程序代碼如下:
j=InStr(buf,“%”)‘返回發(fā)送數(shù)據(jù)中“%”字符的地址
If j>0 Then
counter=counter+1‘對(duì)“%”字符計(jì)數(shù)
If times=1 Then
j=j+1
If InStr(j,bur,“%”)>0 Then
counter=counter+1
End If
End If‘對(duì)總發(fā)送次數(shù)為1的情況作“%”字符的2次檢查
End If‘檢查文件是否發(fā)送結(jié)束
If counter=2 Then
msgvalue=MsgBox(“傳輸完畢”,vbOKOnly+vbInformation,“消息”)
If msgvalue=vbOK Then
Frame3.Enabled=True
Comm1.PortOpen=False‘關(guān)閉串口,結(jié)束發(fā)送過(guò)程
ProgressBar1.Visible=False
Label1.Visible=False
Command1.Enabled=True
Commanc3.Enabled=True
Command4.Enabled=True
End If
Exit Sub
End If
以上程序代碼中必須事先定義buf為字符串變量,j、counter、times和msgvalue為整形變量。設(shè)計(jì)中還考慮到了如果發(fā)送的程序過(guò)短(總發(fā)送次數(shù)times變量為1),可能在發(fā)送的字符串變量buf中存在2個(gè)“%”字符,因此對(duì)于該情況必須在查找到第一個(gè)“%”之后對(duì)剩余的字符串再查找一次,以確定是否還有第二個(gè)“%”字符。如果找到2個(gè)“%”字符(計(jì)數(shù)器變量counter為2),則提示用戶(hù)程序傳輸完畢。檢查接收文件是否結(jié)束的程序代碼與檢查發(fā)送文件是否結(jié)束的程序代碼類(lèi)似,在此不再贅述。
4.2.5 文件接收的自動(dòng)化
當(dāng)接收程序處于等待狀態(tài)時(shí),在操作人員按下數(shù)控系統(tǒng)的發(fā)送程序按鍵后,該軟件的文件接收過(guò)程即自動(dòng)開(kāi)始。為了實(shí)現(xiàn)文件接收過(guò)程的自動(dòng)化,應(yīng)使用MSComm控件的OnComm過(guò)程來(lái)處理數(shù)據(jù)的接收。在通信參數(shù)初始化中應(yīng)設(shè)置MSComm控件的RThreshold屬性為1,以保證串口一旦接收到字符即引發(fā)OnComm過(guò)程接收數(shù)據(jù)并對(duì)收到的數(shù)據(jù)進(jìn)行處理。為方便將來(lái)數(shù)據(jù)的處理,在OnComm過(guò)程中應(yīng)使用字節(jié)型數(shù)組以二進(jìn)制方式接收并暫存數(shù)據(jù),實(shí)現(xiàn)該功能的部分程序代碼如下:
Select Case Comm1.CommEvent
Case comEvReceive‘判斷串口是否收到數(shù)據(jù)
slen=Comm1.InBufferCount‘讀取輸入緩沖區(qū)收到的字節(jié)數(shù)
Comm1.InputLen=slen‘設(shè)置讀取字節(jié)長(zhǎng)度為收到的字節(jié)數(shù)
ReDimbytlnput(slen)‘重新定義字節(jié)數(shù)組的長(zhǎng)度
tmp=Comm1.Input
bytInput=tmp‘讀取輸入緩沖區(qū)數(shù)據(jù)至字節(jié)數(shù)組
processdata‘調(diào)用數(shù)據(jù)處理函數(shù)
以上程序代碼中必須事先定義slen為整形變量,tmp為變體型變量,bytInput()為字節(jié)型數(shù)組。processdata為數(shù)據(jù)處理函數(shù),該函數(shù)的功能為過(guò)濾無(wú)需顯示的字符并將數(shù)據(jù)在RichTextBox控件的文本框中顯示。
5 結(jié)束語(yǔ)
本文作者在介紹PC機(jī)與數(shù)控系統(tǒng)進(jìn)行串行通信時(shí)其硬件連接要求和數(shù)控系統(tǒng)的通信參數(shù)設(shè)置方法的基礎(chǔ)上,利用VB6.0軟件實(shí)現(xiàn)了DNC加工狀態(tài)下的程序發(fā)送和程序接收備份功能。該軟件在FANUC 0iMATE-MC數(shù)控上經(jīng)過(guò)測(cè)試,運(yùn)行正常。同時(shí)該軟件提供了豐富的通信參數(shù)選項(xiàng),因此在其它型號(hào)的FANUC數(shù)控系統(tǒng)上或通信協(xié)議相同的其它廠(chǎng)商的數(shù)控系統(tǒng)上均能正常運(yùn)行,這大大提高了該軟件的通用性。