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