技術頻道

      基于PC機的DNC傳輸軟件的開發

      1 引言
      隨著我國制造業的迅速發展,數控機床在機械加工行業得到了廣泛的應用。要實現數控機床對整個機械加工過程的自動控制就必須編寫機床數控系統能夠識別的數控加工程序,該程序可由人工進行編寫,也可由計算機輔助制造(CAM)軟件自動生成。近年來,CAM軟件得到了迅猛地發展,如國外的Pro/E、UG、MASTERCAM和國內的CAXA,其功能也日趨智能化,可以實現復雜曲面結構零件的快速編程,給產品的生產加工帶來了巨大的便利。但是隨著零件結構的復雜化,CAM軟件生成加工代碼的容量將會很大,如果超過了機床數控系統的程序存儲空間,將不能一次性存儲在數控系統中。雖然目前較為先進的數控系統配有以太網或USB通信接口,但考慮到早期生產的數控系統只配備了RS232C串行通信接口,且在很多企業中占有一定的比重。為了解決該類型數控系統對于大容量程序的處理問題,必須使數控機床處于DNC加工狀態,即通過串行通信接口將一部分程序先傳輸至數控系統,由數控系統處理并完成零件加工過程的控制,當這部分程序執行完之后再由數控系統將其刪除,并繼續通過串行通信接口讀取剩余的程序,如此循環直到程序全部執行完畢,該過程即結束。
      本文作者討論了在實現數控機床DNC加工過程中的硬件連接要求、機床數控系統參數設置和VB程序的設計方法。
      2 硬件連接要求
      本次研究使用的機床設備為南通機床廠制造的V600數控銑床,配備的數控系統型號為FANUC 0iMATE-MC,該數控系統提供了一個25針的RS232C串行通信接口。數控加工程序由PC機通過串行通信接口進行發送,由于目前市場上的PC機只提供9針的RS232C串行通信接口,因此微機與數控機床進行連接時需提供一根一端為9針(DB9)另一端為25針(DB25)的串行通信電纜線。下面對該電纜線的電氣信號和連接注意事項做出說明。
      2.1 電氣信號
      串行通信電纜線可由機床制造商提供,也可從電子產品市場購買。RS232C的各個引腳有著不同的功能,要想實現微機與機床數控系統之間的串行通信一般只需要用到其中的3個引腳,它們分別是接收數據、發送數據和信號地。其引腳連接關系如表1所示。
      表1 DB9和DB25常用引腳連接關系

      在進行串行通信時,數控系統的接收數據引腳和發送數據引腳必須分別接微機的發送數據引腳和接收數據引腳,以達到數據的“收”與“發”,因此在電子產品市場購買的串行通信電纜線必須進行跳線處理,方法是將電纜線一端的接收數據引腳和發送數據引腳進行對調。如果是機床制造商提供的串行通信電纜線,因為廠家已經事先進行跳線處理,因此不需要再進行跳線。
      在通信過程中還需考慮數據的流量控制,以防止數控系統和微機的串口接收緩沖區發生“溢出”,而實現流量控制的便是握手信號。握手分硬件握手和軟件握手,硬件握手需要通過串口中專門的握手信號引腳來實現,而軟件握手是通過數控系統和微機串口的發送數據引腳發送ASCII碼第19個字符和第17個字符來控制數據發送的暫停和恢復。如果發送的數據中存在ASCII碼第19個字符或第17個字符便不能使用軟件握手方法,否則會出現“錯誤的握手”。由于數控加工程序的指令中并沒有ASCII碼第19個字符和第17個字符對應的加工指令,因此不會出現“錯誤的握手”情況的發生,同時FANUC Oi-MATE-MC數控系統支持軟件握手,如采用軟件握手實現串行通信則只需使用3個引腳便能完成任務,其硬件連接將變得簡單易行。
      2.2 連接注意事項
      當數控系統和微機中的任何一個先上電時,由于兩者串口電路的電位可能不同,如果此時直接使用電纜線連接數控系統和微機的串口,可能會因為電位差而出現放電,燒壞串口電路。因此推薦使用光電隔離器安裝于電纜線的兩端,以分別保護數控系統和微機。
      使用光電隔離器可以保證設備的使用安全,但是會增加硬件投入成本。如果在數控機床和微機上電之前先將兩者用串行通信電纜線進行連接,此時因為兩者串口電路的電位已經相同,然后再對數控機床和微機分別上電,這樣就不會造成串口電路的損壞。在實際生產使用中因為很少會頻繁將串行通信電纜線拔下,因此在不使用光電隔離器時使用以上方法連接數控系統和微機的串口是安全的,同時也是可以減少硬件成本投入的。
      3 機床數控系統參數設置
      串行通信過程中通信雙方必須按照相同的通信協議才能實現數據的正確傳輸,其中數控系統是以系統參數的形式完成串行通信參數的設置的。針對本次研究中所使用的FANUC 0i-MATE-MC數控系統,其必須設置的串行通信參數如表2所示。
      串行通信過程中對于數據位和奇偶校驗也需要進行正確的設置,FANUC 0i-MATE-MC數控系統對這兩個參數有其固定值,無需對其進行設置。但是在使用VB軟件編程時必須知道該數控系統中數據位和奇偶校驗的設置情況,否則無法進行正確的通信。通過查閱該數控系統的使用說明書可以知道其數據位為7位,可以表示ASCII碼為0-127的字符,由于數控加工程序的指令均為ASCII碼0-127的字符,因此在VB軟件中也應使用7位數據來傳輸各個字符。同時該型號的數控系統不進行奇偶校驗,因此VB軟件中也應設置無奇偶校驗。
      表2 機床數控系統串行通信參數設置值及含義

      4 VB程序的設計方法
      圖1 數控DNC軟件運行界面

      本次研究使用的編程軟件為Visual BASIC 6.0,考慮到該DNC軟件應簡單易用,因此使用了單一編程界面(SDl),所有的操作選項均按類別分類。編程中使用的主要控件為RichTextBox、ProgressBar、ComboBox、CommonDialog和MSComm。RichTextBox控件的功能為顯示加載的數控加工程序文本;ProgressBar控件的功能為顯示發送程序的進度;ComboBox控件的功能為提供各通信參數的選擇操作;CommonDialog控件的功能為產生文件打開與保存的對話框;MSComm控件的功能為通過PC機的串行通信接口實現數據的收與發。該DNC軟件提供了兩大功能:一是微機發送數控加工程序至機床,實現DNC加工;二是微機讀取機床發送出的數控加工程序,實現機床程序存儲區的備份。下面對該軟件運行的主要流程和各功能的關鍵設計方法進行介紹,其運行界面如圖1所示。
      4.1 軟件運行的主要流程
      發送文件時,應通過CommonDialog控件及相關代碼生成打開文件的對話框,并將選中的文件內容加載至RichTextBox控件的文本顯示區域內,最后通過按下發送文件按鈕將數控加工程序發送至數控系統。接收文件時,當按下接收文件按鈕后將通過CommonDialog控件及相關代碼生成保存文件的對話框,并選擇保存路徑,然后進入等待接收狀態,一旦有數據進入即開始接收,接收完畢后將自動保存文件至相應的路徑,圖2為發送與接收過程的設計流程圖。
      圖2 發送與接收過程的設計流程圖

      4.2 各功能的關鍵設計方法
      4.2.1 分割文件
      發送給數控系統的數控加工程序的容量可能比較大,考慮到MSComm控件發送緩沖區的大小不可能設置太大(此處使用默認的512字節),因此必須對數控加工程序進行分割,分多次進行發送。此處可采用FOR循環結構來實現多次的發送,而循環的次數由文件總大小和每次發送數據的大小來決定,考慮到數控系統串口的接收緩沖區比較小,如果一次發送的數據過大則會使其緩沖區溢出并產生報警,此處可設置每次發送數據的大小為200字節。
      4.2.2 軟件握手的實現
      在進行DNC加工時必須進行流量控制,以防止PC機串口發送超速而造成數控系統的溢出報警,此處采用軟件握手來實現對流量的控制。其設計方法是在發送循環中加入DoLoop循環結構,通過不斷讀取輸入緩沖區并查找是否收到數控系統發來的暫停發送(13H)或恢復發送信號(11H)來決定是否繼續發送數據,該循環結構的程序代碼如下:
      Do
      bufwait:Comml.Input‘讀取輸人緩沖區
      If InStr(bufwait,Chr$(&H13))>0Then
      wait=True
      End If‘判斷是否暫停發送
      If InStr(bufwait,Chr$(&H11))>0Then
      wait=False
      End If‘判斷是否收恢復發送
      DoEvents‘先將控制權交給Windows
      Loop While wait=True‘
      以上程序代碼中必須事先定義bufwait為字符串變量,wait為布爾型變量。
      4.2.3 檢查輸出緩沖區
      在通過串口發送一個程序段之前還必須檢查輸出緩沖區中是否有未發送完的字節,否則可能會使得輸出緩沖區中不斷堆積新的數據而導致溢出。實現以上功能的設計方法是在軟件握手的功能后加入一個DoLoop循環結構,通過不斷檢查MSComm控件中的OutBufferCount屬性是否為0來決定是否繼續發送數據,該循環結構的程序代碼如下:
      Do
      outcount=Comml.OutBufferCount‘讀取輸出緩沖區的字節數
      If outcount=0 Then
      sendempty=False
      Else
      sendempty=True
      End If‘判斷是否是零字節
      讀取輸出緩
      DoEvents‘先將控制權交給Windows
      Loop While sendempty=True
      以上程序代碼中必須事先定義outcount為整形變量,sendempty為布爾型變量。
      4.2.4 檢查文件發送或接收是否結束
      在發送文件的過程中要想知道是否發送結束可以檢查FOR循環的當前循環次數是否為總循環次數,但是在接收文件的過程中因為事先并不知道數控系統發送的程序有多大,因此必須采用其它方法來解決該問題。
      FANUC數控系統對程序傳輸的通信協議做了如下規定:程序的開頭和結尾必須采用“%”來表示程序傳輸的開始和結束。因此要想知道程序是否發送或接收完畢可以通過查找程序中的“%”這一字符來實現,在文件發送循環中實現該功能的程序代碼如下:
      j=InStr(buf,“%”)‘返回發送數據中“%”字符的地址
      If j>0 Then
      counter=counter+1‘對“%”字符計數
      If times=1 Then
      j=j+1
      If InStr(j,bur,“%”)>0 Then
      counter=counter+1
      End If
      End If‘對總發送次數為1的情況作“%”字符的2次檢查
      End If‘檢查文件是否發送結束
      If counter=2 Then
      msgvalue=MsgBox(“傳輸完畢”,vbOKOnly+vbInformation,“消息”)
      If msgvalue=vbOK Then
      Frame3.Enabled=True
      Comm1.PortOpen=False‘關閉串口,結束發送過程
      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為整形變量。設計中還考慮到了如果發送的程序過短(總發送次數times變量為1),可能在發送的字符串變量buf中存在2個“%”字符,因此對于該情況必須在查找到第一個“%”之后對剩余的字符串再查找一次,以確定是否還有第二個“%”字符。如果找到2個“%”字符(計數器變量counter為2),則提示用戶程序傳輸完畢。檢查接收文件是否結束的程序代碼與檢查發送文件是否結束的程序代碼類似,在此不再贅述。
      4.2.5 文件接收的自動化
      當接收程序處于等待狀態時,在操作人員按下數控系統的發送程序按鍵后,該軟件的文件接收過程即自動開始。為了實現文件接收過程的自動化,應使用MSComm控件的OnComm過程來處理數據的接收。在通信參數初始化中應設置MSComm控件的RThreshold屬性為1,以保證串口一旦接收到字符即引發OnComm過程接收數據并對收到的數據進行處理。為方便將來數據的處理,在OnComm過程中應使用字節型數組以二進制方式接收并暫存數據,實現該功能的部分程序代碼如下:
      Select Case Comm1.CommEvent
      Case comEvReceive‘判斷串口是否收到數據
      slen=Comm1.InBufferCount‘讀取輸入緩沖區收到的字節數
      Comm1.InputLen=slen‘設置讀取字節長度為收到的字節數
      ReDimbytlnput(slen)‘重新定義字節數組的長度
      tmp=Comm1.Input
      bytInput=tmp‘讀取輸入緩沖區數據至字節數組
      processdata‘調用數據處理函數
      以上程序代碼中必須事先定義slen為整形變量,tmp為變體型變量,bytInput()為字節型數組。processdata為數據處理函數,該函數的功能為過濾無需顯示的字符并將數據在RichTextBox控件的文本框中顯示。
      5 結束語
      本文作者在介紹PC機與數控系統進行串行通信時其硬件連接要求和數控系統的通信參數設置方法的基礎上,利用VB6.0軟件實現了DNC加工狀態下的程序發送和程序接收備份功能。該軟件在FANUC 0iMATE-MC數控上經過測試,運行正常。同時該軟件提供了豐富的通信參數選項,因此在其它型號的FANUC數控系統上或通信協議相同的其它廠商的數控系統上均能正常運行,這大大提高了該軟件的通用性。

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 日本不卡一区二区三区| 久久亚洲中文字幕精品一区| 亚洲片国产一区一级在线观看| 日韩社区一区二区三区| 人妻免费一区二区三区最新| 午夜福利一区二区三区在线观看| 成人精品一区久久久久| 亚洲一区二区中文| 国产午夜精品一区二区三区漫画| 97久久精品午夜一区二区 | 国产精品一区在线播放| 无码人妻久久一区二区三区蜜桃| 91秒拍国产福利一区| 一区二区三区视频在线播放| 日韩精品一区二区三区中文版| 久久精品中文字幕一区| 97精品国产福利一区二区三区| 国产在线无码视频一区| 波多野结衣一区二区三区88| 韩国精品福利一区二区三区| 在线免费观看一区二区三区| 亚洲熟女综合色一区二区三区| 久久综合九九亚洲一区| 精品无码一区二区三区爱欲| 国产成人综合一区精品| 无码人妻精品一区二区三区不卡| 国产短视频精品一区二区三区| 99无码人妻一区二区三区免费| 亚洲一区二区三区免费在线观看| 韩国理伦片一区二区三区在线播放| 亚洲一区无码中文字幕乱码| 久热国产精品视频一区二区三区| 国产精品久久亚洲一区二区| 国产在线精品一区二区夜色| 国产AV一区二区三区无码野战| 亚洲色精品三区二区一区| 一区二区三区免费视频观看| 97人妻无码一区二区精品免费| 国产中文字幕一区| 一区二区三区无码被窝影院| 成人无码一区二区三区|