监控软件设备驱动程序编制原理与实现
摘要:以MCGS监控软件为例,详细介绍了监控软件与PLC、采集板卡、智能仪表等进行数据通信的设备驱动程序的编制原理与实现。
本文引用地址://m.amcfsurvey.com/article/149057.htm0前言
在专业监控软件出现以前,自动控制系统集成人员的一个重要任务就是编写专门的系统上位监控程序。但是,在实际工程中我们发现:一方面,由于各编程人员的水平参差不齐,许多软件的功能和可靠性都存在问题;另一方面,由于每个编程人员的编程习惯和编程思路都不同,程序的可读性和功能的扩展性都比较差。因此,功能强大、实用面广的专业监控软件就应运而生。如MCGS监控软件、组态王控软件等。由于现场智能仪表、采集板的多种多样,监控软件自带的设备驱动程序毕竟有限,因此编制设备驱动程序就成了自控系统集成工程师的重要工作之一。
本文以北京昆仑通态公司开发的MCGS为例来说明监控软件设备驱动程序的一般思路。MCGS是基于Windows95和WindowsNT平台,为用户提供了从数据采集到数据处理、报警处理、流程控制、动画显示、报表输出等解决实际工程问题的完整方案和操作工具。MCGS允许用户在VisualBasic中操作MCGS中的对象,提供了一套开放的可扩充接口,用户可根据自己的需要用VB编制特定的功能构件来扩充系统的功能。
1接口原理
许多组态软件提供了设备驱动程序软件开发包,支持用户用VB、VC、Delphi等高级编程语言编制设备驱动程序。MCGS组态软件驱动程序编程原理框图如图1所示:
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_0.jpg)
几乎所有的PLC、智能仪表、采集板卡都提供了驱动软件,有的在说明书中还提供了驱动软件的核心代码、函数或数据结构。而监控软件也提供了开放性的可扩充接口,一般包括属性函数、方法函数、IO端口操作函数和串口操作函数等。在运行模式下,监控软件定时或在事件激发时调用设备驱动程序,而设备驱动程序根据需要,再调用设备核心函数。
例如,MCGS在组态模式下按“在线帮助”按钮就会调用GetDevHelp接口,显示设备构件的在线帮助;按“内部属性”按钮时就会调用SetDevPage接口,显示设备构件的特定属性页。在运行环境下,MCGS首先调用一次InitDevRun接口对设备进行一些必须的初始化工作。然后MCGS按设定的采集周期调用CollectDevDat接口,从设备采集数据或向设备输出数据。运行时,当用户在脚本程序中调用!SetDevice函数或在运行策略中调用设备操作功能时,MCGS调用RunDevCommand接口,以执行设备的特定功能。
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_1.jpg)
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_2.jpg)
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_3.jpg)
2编程实现
常用设备驱动程序包括采独立板卡类驱动程序和智能仪表类驱动程序。
2.1独立板卡类
独立板卡类包括模数(A/D)转换板、数模(D/A)转换板、开关量输入输出板(DI/DO),通信板卡等。它们一般直接插入计算机的总线槽里,通过ISA或PCI总线扩展槽与计算机进行数据通信。每块板都有一个基地址范围为:000H-3FFH,计算机通过该基地址来向采集板输入输出数据,没有通信协议的概念。
在MCGS组态软件运行时,MCGS会定时调用接口函数:PublicFunctionCollectDevDat(DatFAsVariant,DatAsVariantmsgAsVariant)AsLong。所以需要定时采集的数据都通过这个接口来采集,采回来的数据都放在数组dat中。
对于那些不需要定时采集的数据,如设备的量程上下限,或其他一些参数,只有用户改变了后,才需要重新读回来,还有一些往设备输出的参数,也是不定时的,MCGS为这些特殊的情况定义了一个接口函数:PublicFunctionRunDevCommand(DatObjAsObject,ByValCmdAsString)AsLong。在MCGS的脚本程序里执行函数!SetDevice(“子设备名”,6,“带有参数的命令名”),MCGS就会调用RunDevCommand函数,并把“带参数的命令”传给了字符串变量“cmd”。如以天辰PID控制仪为例,用户想改变仪表的设定值(SV值),我们就可以定义一条这样的命令,SetValue(dat1,dat2),这时MCGS就把命令传到了cmd中,cmd=“SetValue(Dat1,Dat2)”。使用字符串函数把命令中的两个参数取出来,两个参数的意思是,dat1表是设定在仪表中存放的地址,dat2为要设定的值,获得了这两个参数的值后,就可以根据协议的规定发送一条设定(SV值)的命令来改变SV值。其他的参数设定也是类似的。至此设备的驱动程序就基本完成
还有一个接口函数:PublicFunctionGetChlType(DatAsVariant,msgAsVariant)AsLong。其作用就是读取设备通道数据的类型和设备通道类型说明。例如:
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_4.jpg)
所以每一个设备驱动程序要做的主要工作是编写以上三个接口函数。接口软件编程流程图如图2所示。
2.2智能仪表类
智能仪表类包括各种智能仪表和智能模块。它们必须通过与计算机的串口(通常叫com口)连接才能与计算机进行数据通信。串口通信原理图如图3所示:
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_5.jpg)
设备通过计算机的串口,采用各种通信协议与计算机进行通信。必要的通信参数有波特率大小,数据位长度,停止位位数,有无奇偶校验等。对于与串口通信有关的设备,必须调用一个串口父设备,子设备只负责按通信协议形成设备命令,并把命令放到一个固定的字节数组中,然后子设备调用父设备的几个通信函数,包括
![](http://m.amcfsurvey.com/uphotos/fetch/20130729/149057_1_6.jpg)
pid控制相关文章:pid控制原理
评论