孫建業(yè),李法光,王朝偉
(沈陽理工大學遼寧省高速切削工程技術研究中心,遼寧沈陽110159)
組合機床是大批量生產機械產品的設備,具有高效率和經濟性,應用領域廣泛。組合機床一般采用多軸、多刀、多工序、多面或多工位同時加工的方式,生產效率比通用機床高幾倍至幾十倍。組合機床具有多個加工工位,同時對一個工件進行加工,通常幾十秒可完成一個復雜零件的加工。多工位組合機每次開機回零,不僅浪費時間而且過程繁瑣,為此采用運動控制卡控制絕對值伺服電機。絕對值編碼器是一種直接編碼、絕對測量的檢測裝置,與增量脈沖編碼器不同,它是通過讀取絕對編碼盤、編碼尺的代碼信息指示絕對位置,電源斷電后,沒有積累差,所以位置信息不會丟失,不僅避免接線帶來的故障,提高機床的可靠性,而且減少輔助時間,具有高效性。
組合機專用數控系統(tǒng)為PC機與PMAC相結合形成并行雙CPU開放式數控系統(tǒng)。MOTECα系列伺服驅動器本身具備數據顯示、數據監(jiān)控、報警等基本功能,有兩個獨立的通訊接口,9針RS232/485串口JP3與控制器相連接,6針RS485串口JP4用于多個驅動器之間的連接,如圖1所示。
圖1 控制器與多個驅動器連接圖
MOTECα系列伺服驅動器通信端口(9Px)RS485方式接線如表1所示。
表1 MOTECα(9Px)RS485方式接線
Modbus協(xié)議支持傳統(tǒng)的 RS-232、RS-422、RS-485和以太網設備等。ModBus協(xié)議有ASCII、RTU兩種模式,RTU模式因傳輸效率高而在工業(yè)領域中應用較廣。RTU模式對數據進行校驗時,串行協(xié)議中除有奇偶校驗外,還要采用16位CRC校驗[2]。Modbus采用主從方式定時收發(fā)數據,在實際使用中如果某Slave站點斷開后(如故障或關機),Master端可診斷發(fā)現(xiàn),當故障修復后,又可自動接通。因此,Modbus協(xié)議的可靠性較好。
MOTECα系列伺服驅動器底層軟件內嵌標準 ModBus通信協(xié)議。具有常用的01、02、03、05、06、0F、10號通信協(xié)議功能。當伺服驅動器與ModBus控制器成功連接后,控制器則很方便地利用通信協(xié)議對伺服驅動器進行參數設置和驅動器狀態(tài)收取等,同時可采用RS-485方式進行多機聯(lián)機控制。
Modbus RTU協(xié)議有24種命令,α系列伺服驅動器只支持其中最常用的7種命令,這7種協(xié)議可滿足大多數控制器對伺服的控制。具體功能碼見表2。
表2 常用功能碼及其含義
本系統(tǒng)程序采用VB編寫,采用自上而下的模塊化設計方法,整個程序包括各種設備驅動程序、通訊子模塊等[3]。Modbus協(xié)議要求區(qū)分設備的主從,主設備PC機與PMAC相結合的并行雙CPU開放式組合機床數控系統(tǒng)作為上位機,從設備絕對值式驅動器作為下位機,Modbus協(xié)議中包含CRC計算與驗證、信息幀的編制和分解[4]。
通過RS485串口JP4用于多個驅動器之間的連接,現(xiàn)以一個伺服驅動和絕對值電機為例,介紹工控機和伺服驅動之間的信息交換,詳細說明編碼器位置的讀取方法。MOTECα系列伺服驅動器通信數據格式為:半雙工方式、8個數據位、1個停止位、無校驗位。通信波特率為 9600Bps、38400Bps、57600Bps、115200Bps 可選。為 方便Modbus控制器對伺服驅動器進行參數讀取和修改,α系列伺服驅動器將參數號定義為地址,如參數PA60對應參數地址為0x60,參數PA70對應參數地址為0x70,其它參數同樣定義,即對伺服驅動器地址如0x60的數據操作結果關聯(lián)到PA60號參數上,等同于對參數的操作。
(1)讀參數格式
發(fā)送:機號+功能碼+地址高8位+地址低8位+字個數高8位+字個數低8位+CRC低8位+CRC高8位
回發(fā):機號+功能碼+字節(jié)數+數據高8位+數據低8位+CRC低8位+CRC高8位
例:通過Modbus RTU 03號功能碼在α系列伺服驅動器中讀取參數,例當前驅動器參數PA50參數值為32,則讀取此參數通信格式為
發(fā)送:0x01 0x03 0x00 0x50 0x00 0x01 0x84 0x1B
回發(fā):0x01 0x03 0x02 0x00 0x20 0xB9 0x9C
(2)寫參數格式
發(fā)送:機號+功能碼+地址高8位+地址低8位+字個數高8位+字個數低8位+字節(jié)數+字的值+CRC低8位+CRC高8位
回發(fā):機號+功能碼+字節(jié)數+數據高8位+數據低8位+CRC低8位+CRC高8位
例:Modbus RTU 06號功能碼為寫單個寄存器功能協(xié)議,10號功能碼為寫多個寄存器功能協(xié)議,在α系列伺服驅動器中多數控制器采用10號功能碼進行寄存器修改參數,例將驅動器PA50參數值修改為50,則寫取此參數通信格式為
發(fā)送:0x01 0x10 0x00 0x50 0x00 0x01 0x02 0x00 0x32 0x2B 0xD5
回發(fā):0x01 0x10 0x00 0x50 0x00 0x01 0x01 0xD8
利用VB創(chuàng)建一個串口調試界面,如圖2所示。
圖2 串口調試界面
首先設置好串口、波特率、停止位、校驗位等,定義發(fā)送和接收的格式都為16進制格式。該絕對值電機為多圈電機,圈數和單圈脈沖數分別存放在不同的地址0x8037、0x8026中,機床運動的實際位置是電機運動圈數乘以電機每轉的脈沖數再與單圈脈沖數求和的值。根據協(xié)議發(fā)送和接收的都是十六進制的字符串,首先要在接收的字符串中提取電機轉數和單圈編碼器的十六進制值,再轉化成十進制值進而計算得到機床實際的運動位置。
首先進行串口初始化:
VB6.0MSComm控件是高級語言編寫的串行通信程序和PC串口之間的橋梁,在應用程序中嵌入MSComm控件,可完成串口的通信。使用MSComm控件時,對輸入緩沖區(qū)或輸出緩沖區(qū)的數據進行處理,可以是字符(comInputModeText)或Hex(comInputModeBinary)發(fā)送,字符方式是以Unicode碼發(fā)送,Hex是以二進制流發(fā)送[5]。Mod-Bus RTU模式為十六進制,發(fā)送接收都為 Hex(comInputModeBinary)方式,程序如:
圖3為以Hex方式進行發(fā)送與接收時對應程序流程圖[6]。
圖3 Hex方式進行發(fā)送與接收時對應程序流程圖
comInputModeBinary方式將Inputlen設為0,即全部讀入輸入緩沖區(qū)的內容,對緩沖區(qū)中所有字節(jié)進行計數,將收到的字符進行甄別,如果小于128數,則不再讀入下一個字節(jié),如果大于128字節(jié)的數,則繼續(xù)讀入下一個字節(jié),將前后兩個字節(jié)當作一個字符處理,輸入的高字節(jié)放前,低字節(jié)放后。
通過StrHexToByteArray函數將字符串表示的十六進制數據轉化為相應的字節(jié)串,并返回轉化后的字節(jié)數。
通過MSComm1控件的OnComm函數將伺服驅動回發(fā)的內容顯示在接收區(qū)文本框。
首先設置串口調試窗口與絕對值式驅動器相同的波特率,并將驅動器PA90參數機器編號設定與代碼中機號相同。在發(fā)送區(qū)按Modbus協(xié)議發(fā)送一組規(guī)定的數據格式十六進制數值,接收區(qū)回收到相應的一組十六進制值,按照格式發(fā)送一組十六進制數,讀取寄存器0x8026中單圈編碼器值,機號為1,采用03號功能碼讀取字地址,讀取從0x8026起的兩個字節(jié)值,CRC校驗碼為0x000C。
如:發(fā)送區(qū):0x01 0x03 0x80 0x26 0x00 0x02 0x0C 0x00
接收區(qū):0x01 0x03 0x04 0x00 0x01 0x5F 0x90 0x8A 0x28
從接收區(qū)數據0x01 0x03 0x04 0x00 0x01 0x5F 0x90 0x8A 0x28看出單圈編碼器相對位置為0x00015F90,0x288A為CRC校驗碼。
同樣對1號伺服驅動器,用03號功能碼讀取地址0x8037的值,計算得到校驗碼為0x041C。
如:發(fā)送區(qū):0x01 0x03 0x80 0x37 0x00 0x01 0x1C 0x04
接收區(qū):0x01 0x03 0x02 0x00 0x07 0xF9 0x86
從接收區(qū)數據0x01 0x03 0x02 0x03 0xE8 0xB8 0xFA看出多圈數為0x03E8,即自從上次驅動器清零后電機總共轉了0x03E8圈,0xB8FA為校驗碼。
這是對一個伺服驅動器讀取編碼器絕對位置的方法,實際上包括多圈0x8037的值和單圈編碼器相對值0x8026,同理可用相同方法對其它伺服驅動器的編碼器絕對位置進行讀取。
通過VB編寫的串口調試界面可以順利讀取驅動器絕對位置,而組合機床數控系統(tǒng)開機時就應讀取到電機的絕對位置,所以把對伺服驅動器讀取編碼器絕對位置的程序段,植入到組合機床數控系統(tǒng)主界面的加載程序中,即系統(tǒng)開機時首先讀取絕對值位置。
組合機床數控系統(tǒng)的電機實際位置都存在PMAC卡的Mx62變量中,以1號電機為例,在系統(tǒng)啟動時對伺服驅動器讀取編碼器絕對位置并賦予變量M162中,使系統(tǒng)記憶當前位置,即實現(xiàn)了電機1開機無需回零,即可從當前記憶的絕對值位置開始加工。
在系統(tǒng)啟動時讀取編碼器絕對位置的程序段[7-8]:
在系統(tǒng)主界面坐標系顯示實際絕對值位置:
同樣方法,可實現(xiàn)其它工位的電機開機讀到絕對值位置,并保存到系統(tǒng)變量Mx62地址中,完成組合機床自動化加工。
組合機床采用自上而下的模塊化設計方法,使主設備PC機與PMAC相結合的并行雙CPU開放式數控系統(tǒng)作為上位機,從設備絕對值式驅動器作為下位機,完成上位機對下位機的絕對位置數值的讀取,并加載到系統(tǒng)加工程序中,實現(xiàn)了組合機床的無回零自動化加工,進一步提高了組合機床的效率及可靠性。
[1]王立紅.基于PLC的步進電機行程控制[J].組合機與自動化加工技術[J],2008(11):44-46.
[2]潘洪躍.基于MODBUS協(xié)議通信的設計與實現(xiàn)[J].計量技術,2002(4):37-38.
[3]李江全,湯智輝,朱東芹.VisualBasic數據采集與串口通信測控應用實戰(zhàn)[M].北京:人民郵電出版社,2011.
[4]王念春.基于Modbus協(xié)議的PC與下位機PLC間的通信程序[J].自動化儀表,2001,22(8):44-46.
[5]羅朝盛,余文芳.Visual Basic6.0程序設計基礎教程[M].北京:人民郵電出版社,2005.
[6]張輝,李榮利,王和平.Visual Basic串口通信及編程實例[M].北京:化學工業(yè)出版社,2011.
[7]DELTA TAU Data System Inc.PCOMM32PRO[M].USA:DELTA TAU Data System Inc,2003.
[8]DELTA TAU Data System Inc.PMAC SOFTWARE REFERENCE MANUAL[M].USA:DELTA TAU Data System Inc,2004.