2024年5月5日发(作者:)

维普资讯

计算机应用 石 油 化 工 自 动 化.2002.4:69 

AUT()MATI() IN PETR()CHEMICAI I DUSTRY 

用VB6.0开发工业控制软件 

王海龙 。毕丽莉! 

(1.中原油田设计院自动化所.河南濮阳45 7001;2.中原油田地质录井处技术服务大队,河南濮阳45 7001) 

摘要:讨论了利用VB来开发工控软件的常用的方法和技巧.包括数据采集的两种方式,串行接口通讯技术和数据库的访 

问技术.井分析了VB在工控软件开发中的优点和缺点。 

关键词:VB;工控软件;数据采集;串行接口通讯 

中图分类号:TP311.1 文献标识码:B 文章编号:1007—7324(2002)04—0069 04 

Design of Industrial Control Software Using VB6.0 

WANG Hai—long 。BI Li—li 

(1.Instrumentation Dep.of,Design Inst.of ZPEB。Puyang,457001,China; 

2.Technique Service Dep.of ZPEB Mud Logging Co.,Puyang,457001,China) 

Abstract:The method and skill tO use VB tO develop industrial control software iS discussed.The method 

of data acquiring by dynamic link libraries and dynamic data exchange is introduced,The series communi— 

cation technology using MSComml control and database access technology is introduced tOO.Then the 

advantage and disadvantage of VB used in industry control software development is analyzed. 

Keywords:VB;industry control system;data acquire;series communication 

随着计算机技术与工业控制技术的发展,基于 

计算机硬件和软件的数据采集与监控系统越来越 

成为工业控制的主流。市场上也出现了各种各样 

的商品化的工控软件包,国外如Wonderware公司 

的Intouch。Intellution公司的Fix,TA公司的 

2 数据采集 

在工控系统开发中,现场数据的采集均是采用 

商品化的采集卡和模块,如研华公司的PCI 系列 

数据采集卡。ADAM模块系列。以及PC/104产品 

等,这些卡件及模块可以完成模拟量、开关量以及 

脉冲量的采集,但是如何将数据采集人计算机中。 

除了硬件外还需要相应的软件编程。在实际使用 

中主要采用以下两种方法。 

2.1 利用动态连接库(DI I ) 

AIMAX等。国内也开发了成熟的软件如泰达组 

态王、北京赛诺义公司的synall 2000和研华公司 

的Genius等。这些软件具有功能强、组态方便,不 

需专业编程技术等优点。但是也存在着价格高、有 

点数限制,以及功能有所局限、灵活性差,不能满足 

某些特殊要求的缺点。油田实际生产中,大多是一 

些测控点较少,控制功能简单,投资较少的小系统 

以及一些嵌入式系统,在这些情况下,用Microsoft 

动态链接库(DI L)是Windows操作系统的核 

心,操作系统依靠它来完成Win32 API的应用程 

序接口功能。大多数的数据采集卡均提供了相应 

的DLI 程序。如研华系列板卡均提供了可以供 

VB调用的DI L程序,它可以从板卡附带的驱动 

盘中或从该公司的技术支持主页中免费获得。 

在VB中调用DI L程序的方法如下。 

VB程序中要调用DI I 程序,首先需要在VB 

公司的Visual Basic(VB)来开发控制软件具有明 

显的优势。 

1 软件介绍 

VB是一种可视化的通用编程语言,具有易学 

易用,调试方便,功能强大的特点。开发出来的软 

件经过编译,具有体积小,运行效率高,保密性好以 

收稿日期:200l~07 02;修改稿收到日期:2002 03 04 

作者简介:王海龙(19 75一).男,山东济宁人,1996年毕业于 

及对硬件要求低的特点,而且VB与Windows操 

作系统可以紧密结合在一起,做到无缝连接。本文 

简要讨论一下用VB开发控制软件的一些方法和 

技巧。 

天津理工学院自动化系工业电气自动化专业,获工学学士学位,现 

在中原油田设计院自动化室任助理工程师,曾参加过多项大型工 

程设计,主要研究方向为计算机,PI C应用,DCS组态 

维普资讯

石油化工自动化 

程序的declaration段中声明I)I I 可访问的函数, 

VB中声明DI I 的格式如下: 

Declare Function“函数名” I .b“库名” 

与客户程序有关的DDE的属性。 

I inkTopic属性,LinkTopic属性的内容是服 

务器的名称(Application Name)和话题(Topic)。 

格式是Application Name c Topic。 

[Alias](ByvaI参数As类型,……)As类型。 

Declare sub“过程名”I ib“库名”[Alias ̄(Byval 

参数As类型)(过程名)分别对应DI I 中的各导 

出函数.J车名即DI I 程序名;别名是可选项,如果 

你的DI I 名导出函数名中不含有非法字符或者不 

与VB中的关键字重名。该项可以省略。声明后的 

DI I 函数就可以像VB中其他函数一样使用了。 

2.2 利用动态数据交换(DDE) 

I inkhem属性,I inkhem属性的内容是对话 

的项目(Item)。 

LinkMode属性,I inkMode属性设定对话的 

连接属性,当LinkMode一1表示是热连接,热连接 

时,只要服务器的数据发生了变化,就会立即传送 

给客户程序,并且发出Change事件。I inkMode= 

2表示是冷连接,冷连接时只有当客户发出请求时 

才传送数据。I.inkMode一3表示是温连接,温连 

接时当服务器数据发生变化时,客户程序会发出 

I inkNotify事件。I inkMode一0则表示不进行连 

接。 

动态数据交换(Dynamic Data Exchange)简称 

为I)I)E.是在Windows操作系统中不同程序之间 

进行数据交换的一种标准。这项标准可以让你的 

程序自动接收别的应用程序传过来的数据,传送端 

的数据有任何变化,接收端都可以自动更新。同 

样.你的应用程序也可以传送数据给别的应用程 

序。绝大部分的商品化的组态软件,如Intouch 

等.都支持采用I)DE的方式与控制设备进行通讯。 

大部分的硬件设备都配有相应的DDE驱动程 

下面就举例来说明DDE的使用方法。若硬件 

采用了SIEMENS S7—300 PI C,DDE驱动程序采 

用第三方ATS系统公司开发的ATS—DDE—S7一 

MPI。 

该DDE驱动程序的服务器名(Application 

Name)为ATSDDEDM,话题(Topic)名称设为 

序.或有由第三方开发的商业软件.利用DDE技术 

可以很方便的将数据采集卡和模块采集的现场数 

MPITOPIC1。例如我们希望读取PI C中DB1数 

据块中的地址可16开始的双字节数据,并显示在 

据读取到VB程序中进行处理。并且实现简单,只 

需要很少的语句。由于与硬件设备的通讯是由 

DDE驱动程序完成,而DDE驱动程序与VB之间 

的通讯是采用标准的通讯协议,所以如果所使用的 

硬件发生了变化。则只需要改变相应的DDE驱动 

文本框Textl中,则可以使用以下程序。 

Const N()NE:0,H()T=1设定常数 

Private Sub Commandl—Click() 馆动对话 

Text1.IAnkTopic=”ATSDDEDM j 

程序就可以了,而不需要修改VB编写的控制程 

序。从而增加了程序的通用性和灵活性。 

DDE中应用程序之间的数据交换叫做“对 

mpitopiel” 设定对话的服务器名和话题名 

设定 Text1.I inkltem一”db1.dbw16” 

要读取的数据项 

Text1.I inkMode—H()T 设定连接方式 

话”.引起对话的一端叫做“客户”,而对“客户”的请 

求做出响应的一端叫做“服务器”。 

当应用程序之间需要通过DDE来建立一个 

为热连接,开始对话 

End Sub 

“对话”时,需要知道以下三个参数。 

1)对话的对象,即提供DDE服务的服务器的 

名称(Application Name); 

2)对话的主题。也就是话题(Topic),通常是对 

Private Sub Command2一Click() 关闭对话 

Text1.IAnkMode:N()NE 设连接方式 

属性为0,关闭对话 

End Sub 

服务器有意义的数据或数据文件中的某些单元,例 

如在EXCEI 程序中,一个.XI S文件就可以作为 

3 串行接口通讯 

在工控软件的开发过程中,经常遇到要和带有 

个话题; 

通讯接口的智能仪表或上位、下位机,以及RTU 

等的通讯。这时就要使用到串口通讯功能,通常所 

用的串口有RS一232C和RS一485/422等。 

利用VB开发串行接口通讯程序有两种方法. 

3)对活的项目(Item),也就是和对话双方都具 

有意义的数据项。是真正进行对话时所传送的数 

据片段。 

在实际应用中,常用到的是VB程序作为客户 

来读取I)DE驱动程序的数据。所以重点讨论一下 

种是利用Windows的应用程序接口(Windows 

API),通过调用系统提供的三个动态连接库,实现 

维普资讯

第4期 王海龙等.用VB6.0开发工业控制软件 

对串行接口的操作。与串行接口通讯有关的函数 

有BuildCommDCB,ClearCommBreak。SetComm— 

Break。FlashComm,GetCommState.WriteComm。 

ReadComm,SetCommState,GetCommError和 

CloseComm等,利用上一节中介绍的动态连接库 

的使用方法,就可以使用这些函数。 

利用Windows API开发串行接口通讯程序的 

难度比较大,需要编程者了解串行接口的结构、 

API的调用和出错处理等。在VB中提供了一个 

非常方便的串行接口通讯控件。利用这个控件,可 

以非常方便的实现串行接口通讯。下面结合笔者 

曾经使用过的经验来介绍一下该控件的使用方法。 

在VB6.0中。通讯控件的名称叫MSComml, 

该控件提供了一个()nComm事件,它可以截取串 

行接口的任何消息,当串行接口有事件或错误发生 

时,该时间被自动触发,利用该事件可以转入到相 

应的处理程序。 

MSComml控件的属性如下。 

Setting属性,用来设置串行接口的参数,包括 

波特率、校验、数据位和停止位,格式为 

MSComm1.Setting一”9600,n,8,l”表示设置串 

行接口的通讯参数为波特率9 600bps,无校验位,8 

位数据位,l位停止位。 

CommPort属性,用来设置串行接口的端口 

号。 

InputI en属性,用来设置从缓冲区读取的字 

节数。 

InBufferSize属性,用来设置输入缓冲区大小。 

InBuffercount属性,输入缓冲区计数,当设该 

属性为0时,清空输入缓冲区。 

()utBufferCount属性,输出缓冲区计数,当设 

该属性为0时,清空输出缓冲区。 

Port()pen属性,启动串行接口,设该属性为 

True时启动串行接口。 

Input属性,输入属性,该属性中保存的是串 

行接口接收到的数据。 

Output属性,输出属性,将需要输出的字符串 

赋给该属性,就可以将数据从串行接口发送出去。 

CommEvent属性,串行接口事件属性,当串行 

接口事件()nComm发生后,根据串行接口事件的 

不同性质,该事件具有不同的值,在()nComm事件 

的处理程序中,可以根据该事件的不同值来做相应 

的处理。当该值为2时,表示收到Rthreshold个 

字节,当该值为1008时,表示接收缓冲区溢出,当 

该值为1010时表示输出缓冲区溢出。 

以下是笔者在实际工作中编写的一个例子,用 

来与带RS一485接口的旋进漩涡流量计通讯。本 

文只摘录了其中的主要部分。 

Const SETTINGS一”9600,n,8,l” 定义串 

行接口的状态 

Const COMPORT一4 定义串行接口号 

Const MSC()MM

EV

RECEIVE一2 收到 

了MSComm1.RThreshold个字符 

Const MSC()MM

ER

RX()VER:1008 接 

收缓冲区溢出 

Const MSC()MM

ER

TXFUI I :1010 传 

输缓冲区溢出 

Const TIME一0 设定扫描时间 

Dim Volume,Flow,Temperature,Pressure 

As Double 定义双精度变量 

Dim i As Single 定义循环变量 

Dim InData,OutData As String 定义字符串 

变量 

Private Sub Form.I oad() 窗体初始化 

datasheet.I inkTopic一”Datasheet” 设定 

窗体的DDEI INKTOPIC为DataSheet 

Call InitPort 初始化端口 

Timer1.Interval—TIME 设定定时器时 

间 

Timer1.Enabled:True 启动定时器 

i:1 初始化循环变量 

End Sub 

Private Sub InitPort() 端口初始化 

MSComm1.SETTINGS:SETTINGS 

MSComm1.CommPort—COMPORT 

MSComm1.InputI en一32 

MSComm1.InBufferSize:5 l 2 

MSComm1.InBufferCount一0 

MSComm1.OutBufferSize一512 

MSComm1.OutBufferCount一0 

MSComm1.PortOpen—True 

End Sub 

Private Sub SendAddress() 发送流量计地址 

MSComm1.Output—OutData 

Do 等待发送完成 

I oop Until MSComm1.OutBufferCount: 

0 

MSComm1.InBufferCount一0 清空接收 

缓冲区 

MSComm1.RThreshold=32 设定接收字 

维普资讯

石油化工自动化 

符数 

End Sub 

Private Sub MSComml

该事件有两个重要参数,一个是action参数, 

另一个是save参数,action参数表明了是何种操 

OnComm() 等待完 

作导致Validate事件的发生,save控件表明与该 

控件相关的数据绑定内容是否发生了改变。 

action的参数值取值时的意义如下。 

取值为0,表示事件处理结束时,取消当前的 

操作; 

成接受 

Select Case MSComm1.CommEvent 

Case MSCOMM

ER

RECEIVE 

——

数据处理程序,完成协议的转换 

Case MSCOMM

ER

RXOVER 

取值为1,表示使用了Recordset对象的 

MoveFirst方法; 

相应的处理程序 

Case MSCOMM

ERTXFUI I 

取值为2,表示使用了Recordset对象的 

MovePrevioust方法; 

相应的处理程序 

End Select 

End Sub 

取值为3,表示使用了Recordset对象的Mov— 

eNext方法; 

4数据库访问技术 

取值为4,表示使用了Recordset对象的 

MoveI ast方法; 

在工控软件中,大量应用了数据库技术。通过 

使用数据库技术.可以使工控软件的可靠性、稳定 取值为5,表示使用了Recordset对象的 

AddNew方法; 

性和数据的完整性都有极大的提高。VB6.0提供 

了多种数据库的访问技术,具体如下。 

1)Microsoft Jet引擎; 

取值为6,表示使用了Recordset对象的Up— 

date方法; 

2)数据访问对象DAO(Data Access Object); 

3)远程数据对象RDO(Remote Data Object); 

4)开放数据库互连ODBC(Object Database 

Connectivity); 

取值为7,表示使用了Recordset对象的De一 

[ere方法; 

取值为8,表示使用了Recordset对象的Find 

方法; 

5)ActiveX数据对象AD()(ActiveX Data Ob— 

ject); 

取值为9,表示设置了BookMark属性; 

取值为10,表示包含控件的窗体调用了Close 

方法; 

在VB6.0提供的多种数据库访问技术中,各 

种访问技术有各自的特点,其中DAO技术成熟, 

使用简单且支持Jet技术,因而在工控软件的编写 

中应用较多。本文简单介绍DAO的使用方法。 

DAO可以访问本地数据库和远程数据库。 

VB提供了Data控件来实现DAO功能,利用Data 

控件。我们可以容易的从一个记录移到另一个记 

录,并且可以将内部控件绑定为数据显示控件。 

Data控件包括的主要属性如下。 

Recordset对象,利用这个对象可以完全操作 

数据库的记录。 

UpdateRecord方法,这个方法根据数据绑定 

取值为11,表示包含控件的窗体将要被关闭; 

Connect属性、DatabaseName属性和Record— 

Source属性,这3个属性指明了所连接的数据库 

的连接属性、数据库名和记录源。 

限于篇幅的关系,在本文中无法具体的举例来 

详细讨论数据库的操作,感兴趣的读者可以参考 

VB参考书中的数据库部分。 

5 结束语 

本文主要讨论了在用VB开发工控软件的过 

程中经常使用的方法,由于篇幅关系,只简要讨论 

了一些基本的方法,对于OPC,()DBC,ADO和网 

控件中的值来更新数据库的当前记录。 

Validate事件,该事件是Data控件中的一个 

络编程等工控中的常用技术都未能涉及,利用VB 

都可以实现这些功能。虽然用VB开发工控软件 

较用商品化的组态软件开发工作量要大得多,难度 

也大,但是在一些小项目中使用还是具有优点的。 

笔者在实际工作中使用VB取得了很好的效果。 

重要事件,在以下几种情况下,会触发该事件:当前 

记录发生变化;在调用Update方法之前;在De— 

lete、Unload或Close等操作发生之前。