數(shù)控銑床Internet遠程控制的一種實現(xiàn)
因特網(wǎng)的分布廣泛使得建設(shè)基于因特網(wǎng)的遠程控制系統(tǒng)成為一種可能?;谝蛱鼐W(wǎng)的遠程控制的特點有以下幾點:
·傳輸通道是因特網(wǎng)。使用的協(xié)議是tcp/ip協(xié)議。因此, 對于采用因特網(wǎng)技術(shù)開發(fā)出來的遠程控制技術(shù),可以在采用tcp/ip協(xié)議的網(wǎng)絡(luò)上使用, 一般不需要修改。
·系統(tǒng)開發(fā)周期短、充分利用了現(xiàn)有的網(wǎng)絡(luò)資源; 維護費用小。
·具有很高的靈活性, 實現(xiàn)了真正的無處不在的遠程控制。
·基于因特網(wǎng)的遠程控制技術(shù)是不斷發(fā)展的技術(shù)。隨著因特網(wǎng)技術(shù)的發(fā)展, 基于因特網(wǎng)的遠程控制技術(shù)也在不斷的發(fā)展。
·存在不確定的時延問題。由于網(wǎng)絡(luò)有限帶寬和不確定路由造成的大且變化的網(wǎng)絡(luò)時延, 網(wǎng)絡(luò)阻塞也可能造成的數(shù)據(jù)包丟失。
目前, 基于因特網(wǎng)的機器人控制系統(tǒng)普遍都采用了客戶/服務(wù)器(c/s)網(wǎng)絡(luò)模型, 通過網(wǎng)絡(luò)發(fā)出控制命令。
遠程控制的實現(xiàn)方法
·建立遠程控制的構(gòu)架, 使的在任何一臺連接到因特網(wǎng)的電腦上都可以通過瀏覽器控制異地數(shù)控銑床的工作狀態(tài)。
·為了實現(xiàn)以上功能, 首先得建立一個本地控制函數(shù), 此函數(shù)功能以動態(tài)鏈接庫形式表現(xiàn)出來。其次,以網(wǎng)頁的形式設(shè)計一個控制銑床的頁面。設(shè)計一個服務(wù)器上運行的servlet, 通過動態(tài)鏈接庫調(diào)用本地函數(shù),把遠程控制的命令轉(zhuǎn)化為控制指令。
筆者用jbuilder建立servlet,接受網(wǎng)頁信息和調(diào)用類函數(shù);建立一個本地函數(shù)。用frontpage設(shè)計網(wǎng)頁。用c++builder編寫一個本地函數(shù)的動態(tài)鏈接庫dll,它能快速調(diào)用advantech驅(qū)動軟件包,實現(xiàn)對底層數(shù)字量i/o卡的控制。
系統(tǒng)總體設(shè)計
基于internet的數(shù)控銑床的遠程控制系統(tǒng)的結(jié)構(gòu)如圖1所示。這是一個典型的三層b/s結(jié)構(gòu)。

第一層是前臺即瀏覽器。用戶通過瀏覽器訪問該系統(tǒng)而無需安裝任何軟件。 用戶在網(wǎng)頁上輸入控制銑床的運動信息比如:
x軸、y軸、z軸三方向的進給、停止, 主軸的轉(zhuǎn)動以及停止。
第二層servlet是運行在jbuilder自帶的服務(wù)器tomcat4.0上的小程序。servlet負責調(diào)用本地函數(shù),并把瀏覽器傳送的信息轉(zhuǎn)化成本地函數(shù)指令。
第三層是數(shù)控銑床的本地控制系統(tǒng)。本地控制系統(tǒng)執(zhí)行本地函數(shù)的發(fā)出的命令, 并將自己的狀態(tài)返回給本地函數(shù),本地函數(shù)把這些狀態(tài)信息傳遞給servlet。本系統(tǒng)中由bordland c++builder 進行遠程控制,建立了一個dll動態(tài)的鏈接庫,調(diào)用本地函數(shù)。本地函數(shù)是jbuilder建立的類函數(shù), 此函數(shù)的功能由dll實現(xiàn)。
數(shù)控教學(xué)銑床的工作臺是由步進電機實現(xiàn)控制的。采用信號發(fā)生器發(fā)出的給定脈沖(cp)控制步進電機的旋轉(zhuǎn)步數(shù),dir的高低電平來控制電機的正反轉(zhuǎn)。
可以改變脈沖頻率來調(diào)節(jié)銑床進給的快慢。
軟件的設(shè)計
c++builder撰寫動態(tài)鏈結(jié)函式庫dll建立dll專案的方式和一般應(yīng)用程式大致相同。使用dll有兩種方式:明確呼叫和不明確呼叫。
不明確呼叫即靜態(tài)調(diào)用法。該方法是利用鏈結(jié)一個記載輸入函式的函式庫檔案(lib), 來進行鏈結(jié), 如此系統(tǒng)會自動將該dll載入,同時在使用完畢后將其釋放, 不必由使用者(也就是呼叫它的函式)來進行載入及釋放的動作。所謂明確呼叫(explicited linked)是使用loadlibrary函式來載入dll。使用freelibrary函式來釋放dll。使用明確呼叫的優(yōu)點在于,可以完全控制該dll的載入及釋放, 最有效地利用系統(tǒng)資源。在本系統(tǒng)中我們采用此種方式:
static{system.loadlibrary(“project9”);} //調(diào)用系統(tǒng)加載庫
java與 c++的連接方法
jbuilder是java的開發(fā)工具,而c++builder是c的開發(fā)工具。java連接c++的方法是,先將c++語言所編寫的程序構(gòu)造成動態(tài)鏈接函數(shù)庫(dll), 再由java程序調(diào)用 dll庫中的函數(shù),使得dll庫中函數(shù)被java看作是“方法”(method)。dll我們在前面已經(jīng)介紹過。不過這種方法是直接用其他編程語言所提供,而不是java所編寫, 所以將其方法稱為“原生方法”(native method)。我們采用的是jni方法來進行兩者之間的接口。
javasoft公司提出了jni的標準接口。它使運行于java虛擬機上的java代碼與用其他語言編寫的庫和應(yīng)用程序能夠相互調(diào)用。jni允許本地方法建立、使用和更新java對象,調(diào)用java方法和引用java類。也允許java代碼調(diào)用c、c++、assembly等語言編成的程序和庫。
實現(xiàn)步驟
開發(fā)環(huán)境: 操作系統(tǒng)為 windows2000平臺java applet的開發(fā)工具為borland jbuilder8,本地方法的開發(fā)工具為bordland c++builder 6。
jni—java native interface specification(java本地接口規(guī)范)jni是一種編程接口,下面將按步驟介紹使用jni的方法。
·ava類中要用本地代碼實現(xiàn)的方法用native修飾, 構(gòu)造類初始化器裝入實現(xiàn)本地方法的庫。
·譯 java類, 并用javah工具生成 c++語言頭文件, jsvah為jdki1.2帶的一個工具。
·編寫本地代碼并編譯成project5.dll,放入winnt的system32目錄下, 以使java vm能找到這個庫。
servlet rvlet為服務(wù)器端的java的小程序,與運行在客戶端的applet程序相對應(yīng),他們都是運用java語言編寫的程序。servlet沒有main方法,只有一些特定的方法用于啟動, 執(zhí)行, 和退出。它可以與運行在客戶端的applet程序進行交互,也可以直接與客戶端的html頁面交互。servlet是對支持java的服務(wù)器的一般擴充,最常見的用途是擴展web服務(wù)器,提供非常安全的、可移植的、易于使用的cgi替代品。servlet完全運行在java虛擬機上,由于在服務(wù)器端運行, 因此它不依賴于瀏覽器的兼容性。
在《form》標記中調(diào)用servlet。html格式使用戶能在 web頁面(即從瀏覽器)上輸入數(shù)據(jù), 并向 servlet提交數(shù)據(jù)。遠程控制頁面如圖2所示。

結(jié)束語
以有代表性的數(shù)控銑床控制機構(gòu)為研究對象,從理論和實現(xiàn)方法上對基于因特網(wǎng)的遠程控制系統(tǒng)進行了研究。運用c++builder、jbuilder實現(xiàn)了跨平臺的操作,最終完成數(shù)控教學(xué)銑床的遠程控制。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。