譚朝琪 龍毅宏
摘 ?要: 提出了一種基于Java語言的數(shù)控沖床控制系統(tǒng)的設(shè)計(jì)方案。方案采用Java SWT/Jface搭建操作系統(tǒng)界面,利用監(jiān)聽器對界面事件進(jìn)行監(jiān)聽和處理;利用JNI在Java程序中調(diào)用運(yùn)動(dòng)控制卡中的庫函數(shù)實(shí)現(xiàn)系統(tǒng)對機(jī)床加工的狀態(tài)監(jiān)視和運(yùn)動(dòng)控制。該系統(tǒng)可運(yùn)行于普通PC上,PC機(jī)作為上位機(jī)對系統(tǒng)進(jìn)行任務(wù)管理,而運(yùn)動(dòng)控制卡實(shí)時(shí)完成上位機(jī)發(fā)出的任務(wù)請求。利用Java作為開發(fā)工具,不僅能滿足一般廠商對于數(shù)控沖床系統(tǒng)的要求,且系統(tǒng)具有開發(fā)周期短、穩(wěn)定性好、易于拓展等優(yōu)勢。
關(guān)鍵詞: 數(shù)控系統(tǒng);Java;運(yùn)動(dòng)控制卡;數(shù)控沖床
中圖分類號(hào): TP311.52 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.05.041
本文著錄格式:譚朝琪,龍毅宏. 基于Java的數(shù)控沖床系統(tǒng)的研究與開發(fā)[J]. 軟件,2019,40(5):212215
【Abstract】: A design scheme of CNC punching control system based on Java language is proposed. The scheme uses Java SWT/Jface to build the operating system interface, and uses the listener to monitor and process the interface events. Using JNI to call the library function in the motion control card in the Java program to realize the state monitoring and motion control of the machine tool processing. The system can run on a normal PC, the PC acts as a host computer to perform task management on the system, and the motion control card completes the task request issued by the host computer in real time. Using Java as a development tool can not only meet the requirements of general manufacturers for CNC punching systems, but also has the advantages of short development cycle, good stability and easy expansion.
【Key words】: Numerical control system; Numerical control punch press; Java; Motion control card
0 ?引言
數(shù)控沖床是鈑金加工設(shè)備之一,常用于薄板結(jié)構(gòu)類零件的生產(chǎn)加工。通過特定的模具,可進(jìn)行沖壓、落料、拉深、成型等工藝加工,應(yīng)用領(lǐng)域從傳統(tǒng)的制造業(yè)到汽車、航空航天范圍之大,幾乎涵蓋了當(dāng)代制造業(yè)的全部行業(yè)[1]。數(shù)控系統(tǒng)作為設(shè)備的核心,影響著零件加工的質(zhì)量和效率。但是傳統(tǒng)的數(shù)控體系如 FANUC、SIEMENS、ABB,采用封閉式結(jié)構(gòu),使用專用的嵌入式硬件,人機(jī)界面不夠友好,需要經(jīng)過長期培訓(xùn)的的人員才能熟練操作,具有一定的操作難度,制造成本和培訓(xùn)成本較高[2]。而隨著自動(dòng)化需求的增長,數(shù)控系統(tǒng)向著領(lǐng)域普及化、操作簡單化、設(shè)備智能化發(fā)展[3]。因此傳統(tǒng)的數(shù)控沖床系統(tǒng)無法滿足數(shù)控系統(tǒng)功能多樣性的市場需求和適應(yīng)快速變化的市場環(huán)境。新型的開放式數(shù)控體系大多采用PC嵌入NC或者NC嵌入PC[4]。PC嵌入NC,即將PC功能嵌入到NC專用主板中,雖然允許計(jì)算機(jī)部分的二次開發(fā),但由于其主板仍是傳統(tǒng)的封閉式,核心部分不夠開放,且人機(jī)界面只能是基于NC提供的API進(jìn)行開發(fā),開發(fā)自由度低,難度高[5]。NC嵌入PC型數(shù)控系統(tǒng)是目前應(yīng)用領(lǐng)域最為廣泛的一種,由IPC和運(yùn)動(dòng)控制單元組成,用戶可根據(jù)運(yùn)動(dòng)控制單元提供的API進(jìn)行系統(tǒng)軟件的開發(fā)。常用軟件的開發(fā)語言C/C++,但由于其語言自身的缺陷性,開發(fā)難度高,且有存在著軟件不夠安全穩(wěn)定的隱患,移植難度高,基本只能運(yùn)行于單一平臺(tái)。傳統(tǒng)的運(yùn)動(dòng)控制器大多選用PLC,但隨著運(yùn)動(dòng)控制卡的發(fā)展,運(yùn)功控制卡在滿足加工精度要求的同時(shí),價(jià)格比PLC低廉,“運(yùn)動(dòng)控制卡+PC機(jī)”的體系結(jié)構(gòu)開始受到設(shè)備生產(chǎn)廠商們的青睞。
本文針對某基于PLC的轉(zhuǎn)塔數(shù)控沖床設(shè)備存在的成本較高、系統(tǒng)開發(fā)周期長、后期維護(hù)和升級(jí)難度大等問題,對操作和控制系統(tǒng)重新設(shè)計(jì),提出了一種基于Java語言和運(yùn)動(dòng)控制卡的數(shù)控沖床系統(tǒng)的設(shè)計(jì)方案,成功開發(fā)了一套NC嵌入PC的開放式數(shù)控沖床系統(tǒng)。該系統(tǒng)成本更低,可用于普通PC,易于移植到不同的操作系統(tǒng)。在滿足設(shè)備加工精度要求的同時(shí),提升了操作的簡易性、降低了后期維修及升級(jí)的難度和成本。
1 ?數(shù)控系統(tǒng)的開發(fā)工具的選擇
理論上,任何一門高級(jí)語言都能開發(fā)出一套數(shù)控系統(tǒng),目前市場上常見的基于PC的數(shù)控系統(tǒng)大多是采用C++開發(fā)的。但C++代碼沒有垃圾自動(dòng)回收機(jī)制,容易內(nèi)存泄漏,不夠安全,語法和文法比較晦澀繁瑣,開發(fā)周期長。Java作為一種完全面對對象的語言,運(yùn)行于虛擬機(jī)而不依賴于平臺(tái),吸收了C++語言的許多優(yōu)點(diǎn),同時(shí)也摒棄了C++的多繼承、指針等概念[6],相較之下具有很多優(yōu)勢:
(1)安全可靠。在Java語言中,內(nèi)存的分配和回收都是自動(dòng)進(jìn)行的,程序員無須考慮內(nèi)存碎片的問題,且Java提供了許多異常處理(Exception- Throw)方法,提升了了Java的可靠性和穩(wěn)定性。
(2)簡單直接。Java語言對通過底層進(jìn)行封裝,語法清晰,規(guī)模更小,而且Java SWT/Jface提供了許多控件(Control)、事件(Event)和監(jiān)聽器(Listener),可直接利用組件進(jìn)行編程,開發(fā)簡單直接[7]。
(3)易于移植。Java天生的優(yōu)勢便是方便跨平臺(tái),因此基于Java開發(fā)的數(shù)控系統(tǒng)更易于移植到其它平臺(tái)上。
2 ?控制系統(tǒng)的硬件設(shè)計(jì)
轉(zhuǎn)塔數(shù)控沖床系統(tǒng)硬件結(jié)構(gòu)如圖1所示,沖床具有5個(gè)伺服軸:X軸、Y軸、T軸、C軸和P軸。X、Y軸夾帶板材做縱橫運(yùn)動(dòng),用于板材定位;T軸帶動(dòng)轉(zhuǎn)塔旋轉(zhuǎn),用于模具選擇;C軸為旋轉(zhuǎn)軸,帶動(dòng)模具旋轉(zhuǎn)以實(shí)現(xiàn)模具起始和加工時(shí)的方向控制;P軸為沖壓軸。PC機(jī)機(jī)通過EtherCAT與控制卡連接,實(shí)現(xiàn)100 Mbps的數(shù)據(jù)傳輸速率。控制卡的32路數(shù)字輸入量連接外部各種按鈕開關(guān)、電磁信號(hào),48路數(shù)字輸出量連接電磁閥用于夾鉗,定位銷等外部組件的控制。本次實(shí)例所用控制卡最多可控制6軸伺服/步進(jìn)電機(jī),將X、Y、T、W軸的驅(qū)動(dòng)器連接至控制卡軸接口用于實(shí)現(xiàn)電機(jī)的脈沖輸入、伺服使能和檢測伺服報(bào)警。主軸是直驅(qū)伺服電機(jī),通過RS232接口實(shí)現(xiàn)PC機(jī)與主軸伺服的點(diǎn)對點(diǎn)數(shù)據(jù)通訊,用于上位機(jī)設(shè)置和查詢伺服的沖壓參數(shù)。伺服的位置信號(hào)、送料信號(hào)、應(yīng)答信號(hào)連接到控制卡的32位輸入口用于檢測沖頭的運(yùn)行狀態(tài)和位置,沖壓信號(hào)、原點(diǎn)/預(yù)壓位切換信號(hào)連接至控制卡的48位輸出用于控制沖頭的工作狀態(tài)。
3 ?控制系統(tǒng)的軟件設(shè)計(jì)
本轉(zhuǎn)塔數(shù)控系統(tǒng)的軟件用Java編寫而成,因Java SWT/Jface結(jié)合了Java Swing和Java AWT,具有豐富的圖形庫和事件監(jiān)聽器,易于平臺(tái)移植,運(yùn)行穩(wěn)定且速率快,所以被用做系統(tǒng)GUI的主要設(shè)計(jì)工具。
3.1 ?基于Java數(shù)控系統(tǒng)的設(shè)備驅(qū)動(dòng)
本系統(tǒng)所使用的運(yùn)動(dòng)控制卡提供了動(dòng)態(tài)鏈接庫(DLL),通過調(diào)用庫函數(shù)實(shí)現(xiàn)對軸的控制以及I/O信號(hào)讀寫,Java無法直接使用。JNI(Java Native Interface)提供了可讓Java與其它語言的代碼交互的若干API。為實(shí)現(xiàn)Java程序驅(qū)動(dòng)設(shè)備,采用C++重新封裝系統(tǒng)需要使用的庫函數(shù),使之符合JNI標(biāo)準(zhǔn),生成新的動(dòng)態(tài)鏈接庫(DLL),Java通過加載該動(dòng)態(tài)庫,便可實(shí)現(xiàn)對動(dòng)態(tài)庫函數(shù)的使用。
主軸所用的是直驅(qū)伺服電機(jī),需要通過RS232串口連接PC機(jī)實(shí)現(xiàn)上位機(jī)與伺服的通訊,以此來讀取或?qū)懭胫鬏S伺服驅(qū)動(dòng)的參數(shù)[8]。對于Java驅(qū)動(dòng)RS232串口有許多第三方j(luò)ar包,本系統(tǒng)選用rxtx- 2.2.jar包,成功實(shí)現(xiàn)了PC機(jī)對伺服驅(qū)動(dòng)數(shù)據(jù)讀取和寫入。
3.2 ?系統(tǒng)的軟件體系結(jié)構(gòu)
該系統(tǒng)是利用Java環(huán)境開發(fā)的。采用人機(jī)交互界面,在滿足設(shè)備所需功能的同時(shí),簡單直觀,易學(xué)易用。整個(gè)系統(tǒng)采用模塊化設(shè)計(jì),如圖2所示,系統(tǒng)主要包含加工控制、模具庫管理、參數(shù)設(shè)置、信號(hào)檢測模塊[9]。為提高運(yùn)行效率且能實(shí)時(shí)檢測設(shè)備狀態(tài)采用了多線程技術(shù)[10]。由于需要存儲(chǔ)模具參數(shù)、機(jī)床參數(shù)和用戶參數(shù),采用了Java dom4j創(chuàng)建XML文件對數(shù)據(jù)進(jìn)行讀寫。
(1)信號(hào)檢測:通過調(diào)用本地函數(shù),實(shí)時(shí)檢測控制卡的輸入和輸出信號(hào)并顯示在界面上。主要起到四方面的作用:其一測試各個(gè)信號(hào)的完好性,用于機(jī)床的調(diào)試;其二保證加工步驟邏輯的合理性,如在控制T軸轉(zhuǎn)動(dòng)時(shí),需檢測T銷出信號(hào),必須保證T銷先出來后才能使T軸運(yùn)動(dòng),其三起保護(hù)作用,在運(yùn)行中若檢測到有損設(shè)備或者威脅人身安全的情況發(fā)生時(shí),需要及時(shí)停止設(shè)備運(yùn)行;其四通過輸出信號(hào)對設(shè)備進(jìn)行手動(dòng)控制。
(2)參數(shù)設(shè)置:用來設(shè)置機(jī)床的各個(gè)參數(shù),分為機(jī)床參數(shù)和用戶參數(shù)。機(jī)床參數(shù)屬于出廠時(shí)由設(shè)備生產(chǎn)廠商設(shè)定且不允許用戶再次修改的參數(shù),如脈沖當(dāng)量、最大加速度、最大速度等。同時(shí)能通過修改部分機(jī)床參數(shù),該系統(tǒng)便可適用于不同的轉(zhuǎn)塔數(shù)控沖床,如16位轉(zhuǎn)塔數(shù)控和32位轉(zhuǎn)塔數(shù)控。用戶參數(shù)屬于用戶可定義和修改的參數(shù),如不同材料下的進(jìn)給速度、不同型號(hào)的模具的沖壓速度、沖壓深度等。用戶通過設(shè)定合理的參數(shù)使設(shè)備在不同的加工環(huán)境和加工要求下,能保證加工的精度和工作效率。
(3)模具庫管理:轉(zhuǎn)塔數(shù)控沖床的一大優(yōu)勢便多工位模具的自動(dòng)更換,常見的有16位轉(zhuǎn)塔數(shù)控和32位轉(zhuǎn)塔數(shù)控。為了滿足不同模具對加工要求的不同,同時(shí)起到保護(hù)摸具的作用,建立了模具庫管理模具的參數(shù)信息,如模具是否屬于旋轉(zhuǎn)模、上下模具的高度、模具的保護(hù)值、模具間隙、模具最大承受沖壓速度、模具形狀、模具壽命等[11]。在設(shè)備加工更換模具時(shí),載入模具參數(shù),系統(tǒng)根據(jù)得到的模具信息調(diào)整相關(guān)運(yùn)行參數(shù)值,避免模具遭到損壞,提高加工的精度和模具的使用壽命。
(4)加工模塊:加工模塊分為加工控制和界面顯示兩部分,作為整個(gè)控制系統(tǒng)的核心部分,充分考慮機(jī)床實(shí)際加工情況,將加工模式分為手動(dòng)加工、半自動(dòng)加工、自動(dòng)加工。設(shè)計(jì)了G代碼解釋器,在設(shè)備加工前對加工程序進(jìn)行預(yù)讀處理,將程序轉(zhuǎn)換成加工指令如軸運(yùn)行位置、進(jìn)給速讀、輔助功能等,并進(jìn)行語法和預(yù)加工位置檢查,以防加工時(shí)位置超程或沖頭沖到夾鉗等情況的發(fā)生[12]。在進(jìn)行加工的時(shí),定期讀取控制卡的位置寄存器、錯(cuò)誤寄存器,以確定機(jī)床的當(dāng)前的運(yùn)行狀態(tài)、位置、速度等,并實(shí)時(shí)顯示在界面上。為了使用戶能更直觀的了解當(dāng)前加工狀態(tài),添加了圖像顯示功能,在機(jī)床工作的同時(shí),模擬顯示出加工圖形和當(dāng)前工件所在位置[13]。
3.3 ?應(yīng)用結(jié)果
按照上述方案搭建好硬件環(huán)境、完成軟件設(shè)計(jì)后進(jìn)行測試,經(jīng)測試,由Java SWT/Jface編寫的界面簡潔美觀、操作簡單直接、實(shí)時(shí)反饋設(shè)備狀態(tài),用戶體驗(yàn)較好。在長時(shí)間運(yùn)行和高速運(yùn)行測試中,系統(tǒng)運(yùn)行穩(wěn)定,精度高,能滿足廠商對于設(shè)備加工的要求。
4 ?結(jié)論
本文針對當(dāng)前數(shù)控系統(tǒng)開放度不夠、系統(tǒng)界面不夠美觀、開發(fā)周期長的問題,提出了一種基于Java語言的數(shù)控沖床系統(tǒng)設(shè)計(jì)方案,按照該方案設(shè)計(jì)的系統(tǒng)在滿足運(yùn)行穩(wěn)定,加工精度高,操作簡單直觀等設(shè)備基本要求的同時(shí),具有以下優(yōu)勢:
(1)Java語言安全可靠,語法簡單直接,對開發(fā)者要求低,基于Java開發(fā)的數(shù)控沖床系統(tǒng)開發(fā)周期短、開發(fā)成本低。
(2)由于Java可跨平臺(tái)的優(yōu)勢,根據(jù)此方案設(shè)計(jì)的系統(tǒng)易于移植應(yīng)用到其它平臺(tái),能為廠商提供更多的平臺(tái)選擇。
(3)基于Java開發(fā)的數(shù)控系統(tǒng)拓展性強(qiáng),便于廠商的后期更新升級(jí)。
(4)采用NC嵌入PC的開放式結(jié)構(gòu),PC作為上位機(jī),運(yùn)動(dòng)控制卡作為控制單元,易于后期設(shè)備的檢修和維護(hù)。
參考文獻(xiàn)
[1] 李靜. 數(shù)控沖床在鈑金加工中的應(yīng)用[J]. 機(jī)械管理開發(fā), 2012(2): 86-87.
[2] 王謙. 開放式數(shù)控系統(tǒng)的發(fā)展現(xiàn)狀與展望[J]. 科技經(jīng)濟(jì)導(dǎo)刊, 2018(15).
[3] XU X W, NEWMAN S T. Making CNC machine tools more?open, interoperable and intelligent: a review of the technologies[M]. Elsevier Science Publishers B. V. 2006.
[4] 趙春紅, 秦現(xiàn)生, 唐虹. 基于PC的開放式數(shù)控系統(tǒng)研究[J]. 機(jī)械科學(xué)與技術(shù), 2005, 24(9): 1108-1113.
[5] 楊筍. NC嵌入PC結(jié)構(gòu)的開放式數(shù)控系統(tǒng)研究[J]. 自動(dòng)化應(yīng)用, 2011(4): 1-3.
[6] 郭克華. Java 語言程序設(shè)計(jì)[M]. 清華大學(xué)出版社, 2012.
[7] 趙姝菊. Java GUI 事件處理機(jī)制之探究[J]. 濟(jì)南職業(yè)學(xué)院學(xué)報(bào), 2010(2): 98-99.
[8] 李良, 朱善安. 基于Java的串口通信[J]. 電子器件, 2007, 30(2): 714-716.
[9] XU X M, LI Y, SUN J H, et al. Research and Development of Open CNC System Based on PC and Motion Controller[J]. Procedia Engineering, 2012, 29(4): 1845-1850.
[10] 路勇. Java多線程同步問題分析[J]. 軟件, 2012, 33(4): 31-33
[11] 葉偉炳. 一種成套模具數(shù)據(jù)庫構(gòu)建方法及數(shù)據(jù)管理系統(tǒng): CN 102663013 B[P]. 2014.
[12] 寇曉雨. CAXA數(shù)控車床自動(dòng)編程注意要點(diǎn)及難點(diǎn)解析[J]. 軟件, 2012, 33(5): 84-85
[13] 張小文. 基于PC的數(shù)控轉(zhuǎn)塔沖床 CAM/CNC一體化系統(tǒng)研究開發(fā)[D]. 南京航空 航天大學(xué), 2007.