登录
首页 人机界面 人机界面
回帖 发帖
正文

主题:转载:用VB开发工业控制程序的几个问题

点击:10535 回复:12

用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并不能给出这些键的值。
【作者】
李光明 空军雷达学院计算机教研室讲师 读者登记号: 07876
熊 兵 空军雷达学院自控设备研究所
周晓明 空军雷达学院计算机教研室讲师
E-mail地址:liguangming@126.com
邮政编码:430010
02-02-08 22:55
我觉得文中提到的使用Windows 3.x而不用Windows 9.x的理由还不充分,其实象自动运行Scandisk之类是可以通过设置取消的。
02-02-23 22:56
请解释一下为什么不用VB自带的串行通信控件,却要费半天劲编什么用于通信的动态裤?
02-03-07 23:30
3楼:
    认真看一下,顶楼使用的是自己开发的I/O板,自然就不能使用VB自带的串行通信控件。
   错误之处请指正。
03-10-06 22:09
有DOS最安全,又快又省事
03-10-20 16:48
VB不是不能做工控,但是太麻烦了!而且培训、维护也都不方便;BUG也会很多。如用VB做还不如用单片机+VB的形式。做工厂的自动控制我觉得还是用成熟的产品比较好。
03-10-22 10:25
如果不考虑人机界面,我认为还是用DOS做工控,稳定!如果需美丽的人机界面,可用两台电脑,DOS控制,WINDOWS做界面,通过通讯连接。
03-10-22 22:10
在Win95下听说可以做I/O板的驱动程序哦
03-10-23 17:27
我比较喜欢用两台电脑的方案,稳定有方便。即可以用通讯,也可以用网卡
03-10-24 10:12
方便
03-10-24 11:42

上一页下一页

工控新闻

更多新闻资讯