用VB開發工業控製程序的幾個問題
李光明 熊兵 周曉明
隨著新的軟件開發工具的不斷湧現,應用軟件設計人員麵臨的可使用的工具越來越多,令人眼花眼花繚亂,其中,Visual Basic是最為人們所容易接受的軟件開發工具之一。但是大多數使用VB進行軟件應用程序開發的人員都認為,VB不能進行工業控製程序的開發。其實不然,我們曾多次使用VB成功地實現了工業控製程序的開發,所開發出的產品業已投入實際使用。下麵就其開發過程中的經驗介紹給大家。
平台的選擇
使用VB開發工業控製程序,首先麵臨的一個問題是平台的選擇。目前,一般應用軟件的開發大多數都是在Windows 9x平(ping)台(tai)上(shang)進(jin)行(xing)的(de)。但(dan)是(shi),我(wo)們(men)認(ren)為(wei)在(zai)選(xuan)擇(ze)平(ping)台(tai)時(shi),應(ying)考(kao)慮(lv)到(dao)客(ke)觀(guan)實(shi)際(ji)情(qing)況(kuang)來(lai)決(jue)定(ding)。如(ru)果(guo)我(wo)們(men)的(de)用(yong)戶(hu)是(shi)一(yi)般(ban)的(de)操(cao)作(zuo)工(gong)人(ren),並(bing)且(qie)在(zai)微(wei)機(ji)主(zhu)板(ban)上(shang)安(an)裝(zhuang)了(le)我(wo)們(men)自(zi)己(ji)開(kai)發(fa)的(de)控(kong)製(zhi)硬(ying)件(jian)板(ban)(如I/O板等),那麼其平台應選擇Windows 3.x。yinweiyibandecaozuogongrenjiechujisuanjijiaoshao,nameduiyucaozuo,erqiezaishijishiyongguochengzhong,yibandoukenenghuichuxianjinjishijianhuoturantingdianerfeizhengchangguanji,cihouzaiqidongshi,Windows 9x將首先執行Scandisk.exe程序,或由此破壞了Windows 9x的注冊表,這將造成操作工人不知所措;如果在微機主板上安裝了我們自己開發的控製硬件板,那麼Windows 9x還將要求安裝其驅動程序,綜合這些因素,我們建議使用Windows 3.x。否則,我們可以選擇Windows 9x。我們在開發“盆腔治療儀”時,考慮到用戶為醫護人員,並且通過平行口進行I/O控製,因此我們選擇了Windows 95;而在開發用於自動粘貼防偽標誌的“複卷貼標機”時,其用戶係工廠工人,並且在工控機的主板插槽上我們安裝了自行開發的I/O控製板,為此我們選擇了Windows 32。根據實際使用情況看,我們的考慮、選擇是正確的。
編寫並生成對端口操作的動態鏈接庫
動態連接庫是Windows應用程序共享資源、節省內存空間、提高使用效率的一個重要技術手段。動態連接庫是包含數據和函數的模塊,可以被Windowsdeqitakezhixingwenjiantiaoyong。tabaohanshuchuhanshuheneibuhanshuliangzhonghanshu。shuchuhanshukeyibeiqitamokuaisuotiaoyong,erneibuhanshuzezhinengzaidongtailianjiekuneibushiyong。yiban,dongtailianjiekuyiDLL作為其文件擴展名。
當前,可用於編寫動態連接庫的工具很多,如Turbo PASCAL for Windows、Delphi、Borland C++、Visual C++等等。下麵介紹我們使用Turbo PASCAL for Windows Version 1.5所編寫的一個動態連接庫,其功能是實現對端口的I/O操作。
啟動PASCAL for Windows後,在程序編輯窗口中輸入如下程序MYDLL.PAS:
Library IOLIB; {庫名為IOLIB,將編譯生成MYDLL.DLL}
function read_port(port_address:integer):integer;export;
{函數被說明為export,port_address為端口地址}
Begin
read_port:=port[port_address]; {使用預定義數組讀端口數據}
End;
procedure write_port(port_address,write_value:integer);export;
{過程被說明為export,port_address為端口地址,write_value為輸出值}
Begin
port[port_address]:=write_value; {使用預定義數組向端口寫入數據write_value}
End;
Exports {Exports語句}
read_port index 1, {定義read_port的索引號為1}
write_port index 2; {定義write_port的索引號為2}
Begin {初始化部分,本部分為空}
End.
在其菜單欄中選擇Compile/Make(或Build),即可生成動態連接庫MYDLL.DLL。
在VB中調用動態鏈接庫實現端口的I/O操作
生成動態連接庫MYDLL.DLL後,這樣就可以在VB程序中調用該動態連接庫了。具體調用方法是:
⒈將該動態連接庫拷貝到windows\system目錄下;
⒉在VB程序中創建模塊(Module1),並在通用聲明(General_Declarations)中用下列語句說明該動態連接庫:
Declare Function read_port% Lib "MYDLL.DLL" (ByVal port_address As Integer)
Declare Sub write_port Lib "MYDLL.DLL" (ByVal port_address As Integer, ByVal write_value As Integer)
⒊在需要對端口進行I/O操作的事件中,如同調用VB的標準函數一樣調用該動態連接庫實現對端口的輸入輸出操作。如:
Private Sub Command1_Click()
‘若單擊命令按鈕Command1,則從端口378H輸出02H
write_port &H378,&H2
End Sub
Private Sub Command2_Click()
‘若單擊命令按鈕Command2,則讀端口330H
Dim Port_Value As Byte
Port_Value=read_port(&H330)
End Sub
控製程序中的幾個特點
⒈啟動Windows時啟動控製程序
為了在啟動Windows時自動啟動控製程序,我們可以將控製程序放到Windows 3.x的“啟動”程序組中或Windows 9x的“啟動”菜單中;或者在autoexec.bat中的合適位置加入如下命令:
win 控製程序的文件名
⒉取消標題欄
為了防止控製程序被用戶多次加載,因此應使每個窗體均為最大化,並取消最大化、最小化和控製按鈕,取消窗體的標題欄,即如下設置窗體的四個屬性:
WindowState=2 (即Maximized)
MaxButton=False
MinButton=False
ControlBox=False
Caption=””
⒊熱鍵問題
為了使功能鍵F1~F10及光標移動鍵(←、→、↑、↓)等實現DOS環境下的熱鍵功能,應使用對象的KeyUp或KeyDown事件,對所鍵入鍵的KeyCode進行判別,而不要使用KeyPress事件中KeyAscii進行判別。因為KeyPress事件中KeyAscii並不能給出這些鍵的值。
【作者】
李光明 空軍雷達學院計算機教研室講師 讀者登記號: 07876
熊 兵 空軍雷達學院自控設備研究所
周曉明 空軍雷達學院計算機教研室講師
E-mail地址:
郵政編碼:430010