您的位置:控制工程论坛网论坛 » 人机界面 » 用VB开发工业控制程序的几个问题

jhlu3

jhlu3   |   当前状态:离线

总积分:0  2024年可用积分:0

注册时间: 0001-01-01

最后登录时间: 0001-01-01

空间 发短消息加为好友

用VB开发工业控制程序的几个问题

jhlu3  发表于 2009/6/30 8:53:06      925 查看 0 回复  [上一主题]  [下一主题]

手机阅读

 转载:用VB开发工业控制程序的几个问题
用VB开发工业控制程序的几个问题
 
李光明 熊兵 周晓明
 

    随着新的软件开发工具的不断涌现,应用软件设计人员面临的可使用的工具越来越多,令人眼花眼花缭乱,其中,Visual Basic是最为人们所容易接受的软件开发工具之一。但是大多数使用VB进行软件应用程序开发的人员都认为,VB不能进行工业控制程序的开发。其实不然,我们曾多次使用VB成功地实现了工业控制程序的开发,所开发出的产品业已投入实际使用。下面就其开发过程中的经验介绍给大家。

平台的选择 
使用VB开发工业控制程序,首先面临的一个问题是平台的选择。目前,一般应用软件的开发大多数都是在Windows 9x平台上进行的。但是,我们认为在选择平台时,应考虑到客观实际情况来决定。如果我们的用户是一般的操作工人,并且在微机主板上安装了我们自己开发的控制硬件板(如I/O板等),那么其平台应选择Windows 3.x。因为一般的操作工人接触计算机较少,那么对于操作,而且在实际使用过程中,一般都可能会出现紧急事件或突然停电而非正常关机,此后再启动时,Windows 9x将首先执行Scandisk.exe程序,或由此破坏了Windows 9x的注册表,这将造成操作工人不知所措;如果在微机主板上安装了我们自己开发的控制硬件板,那么Windows 9x还将要求安装其驱动程序,综合这些因素,我们建议使用Windows 3.x。否则,我们可以选择Windows 9x。我们在开发“盆腔治疗仪”时,考虑到用户为医护人员,并且通过平行口进行I/O控制,因此我们选择了Windows 95;而在开发用于自动粘贴防伪标志的“复卷贴标机”时,其用户系工厂工人,并且在工控机的主板插槽上我们安装了自行开发的I/O控制板,为此我们选择了Windows 32。根据实际使用情况看,我们的考虑、选择是正确的。

编写并生成对端口操作的动态链接库 
动态连接库是Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。动态连接库是包含数据和函数的模块,可以被Windows的其他可执行文件调用。它包含输出函数和内部函数两种函数。输出函数可以被其他模块所调用,而内部函数则只能在动态连接库内部使用。一般,动态连接库以DLL作为其文件扩展名。

当前,可用于编写动态连接库的工具很多,如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并不能给出这些键的值。

 

1楼 0 0 回复