徐州师范大学自然科学研究基金重点资助项目(编号:10XLA18)。修改稿收到日期:2011-03-17。
第一作者包建华,男,1972年生,2004年毕业于江苏大学控制理论与控制工程专业,获硕士学位,副教授;主要从事计算机测控系统、智能仪器仪表、工业自动化等方面的研究。
MCGS 平台下51单片机驱动构件开发与应用
Development and Application of the Driving Components
for 51Series MCU under MCGS Platform
包建华张兴奎胡福年
(徐州师范大学电气工程及自动化学院,江苏徐州221116)
要:MCGS 是一款全中文工控组态软件,它提供了大多数常用设备的驱动程序。在实际应用中,针对所用设备的多样性,
MCGS 提供了一套规范的设备驱动程序接口,允许用户根据自己的需要来开发设备驱动构件。以房间远程
温度监测和灯盏控制的实际需求为背景,详细阐述了基于MCGS 的51单片机驱动构件的开发方法与步骤。实际运行结果表明了该驱动开发的有效性和通用性。关键词:工控组态软件监测水平
单片机
通信
上位机
中图分类号:TP273+.5
文献标志码:A
Abstract :MCGS is one of the Chinese configuration software for IPC ;it provides the drivers for most of the commonly used peripherals.In practical applications ,because of the variety of the equipment ,MCGS also offers a set of standard driving interfaces ,to allow users to develop drive components based on their own needs.With the requirements of remote monitoring for room temperature and lamps control as background ,the developing method and procedures of the drive component for 51series MCU based on MCGS are described in detail.The result of practical operation verifies the effectiveness and generalization of this development.Keywords :Configuration
software
Monitoring level
MCU
Communication
Host computer
0引言
工控组态软件(monitor and control generated sys-
tem ,MCGS )是指在数据采集和过程控制中使用的专用软件,它提供了监控层的软件平台和开发环境,一般用于自动控制系统的监控层,其灵活的组态方式,可使用户快速构建专业级的工业自动监控系统
[1]
工控组态软件是一套基于WindowsNT /2000/XP 操作系统、可用来快速构造和生成上位机监控系统的组态软件系统。它为用户提供了从设备驱动、数据采集到数据处理、报警处理、流程控制、动画显示、报表输出等用来解决实际工程问题的完整方案和开发平台
[2]
。在实际应用中,由于所用设备的特殊性或实际
工程的需要以及用户的个性化需求,
MCGS 提供了一套开放的、可扩充的接口规范和配套的高级开发工具包,允许用户根据自己的需要来开发设备驱动构件
[3]
本文开发的基于MCGS 的AT89C52单片机驱动构件可完成现场终端和上位机间的可靠通信,从而实现对房间温度的远程监测和报警限值的在线设置。
1MCGS 设备驱动构件概况
MCGS 采用Active DLL 构件的方式来实现设备驱
动程序,并通过规范的对象链接与嵌入(object linking and embedding ,OLE )接口,将Active DLL 构件挂接到MCGS 中,使其构成一个整体。由于设备驱动构件和MCGS 运行在同一个进程内,故设备构件的运行速度快、
可靠性高。OLE 是一个可扩充的开放标准,用于实现不同软件之间的相互操作,因此,可以使用VB 、VC 、Delphi 等语言来编制MCGS 的设备驱动程序。鉴于Visual Basic 的通用性和简单性,且VB6.0以上的版本是以二进制码来编译执行程序,其运行速度巳接近或超过VC ,完全能满足设备驱动构件所需的速度要求,因此,本文采用VB6.0进行单片机驱动构件的开发。
与MCGS 相连接的外部设备分为独立设备、父设备和子设备3类。独立设备是可独立工作、完成特定数据输入输出功能的设备,
如用于模拟量输入输出、数字量输入输出的PC 接口卡等;父设备是本身不直接处理数据输入输出,
但能管理其他设备的工作,如串行口设备等;子设备是本身具有处理数据输入输出的功能,但只有和对应的父设备一起才能构成完整的工作系统的设备,如PLC 设备、带智能通信功能的仪器仪表等。单片机是工作在串行口父设备下的子设备,
MCGS 提供了串行口父设备驱动构件,需要开发的是挂接在串行口父设备下的子设备驱动构件[4-5]
。MCGS 与单片机通信结构框图如图1所示
图1
通信结构框图
Fig.1
Block diagram of communication
MCGS 设备驱动构件的实现方法和原理与标准VB 的ActiveDLL 基本一致,不同的是MCGS 规定了一套接口规范,只有遵守这些接口规范的ActiveDLL ,才能用作MCGS 的设备驱动构件。具体来说,开发MCGS 设备驱动构件的过程就是根据通信协议制定的数据帧格式,对MCGS 接口规范中的5个属性函数和8个方法函数进行定义、编程、调试和挂接,从而完成设备功能的配置。
2MCGS 设备驱动构件的开发
对MCGS 设备驱动构件的开发可以采用以下两种
方法加以完成:一种是利用开发向导生成框架,然后在Visual Basic 编程环境中加入自己的驱动程序部分;另一种是利用现有的设备驱动程序进行移植。本文采用的是前一种方法。
2.1通信协议与数据格式
数据交互涉及通信协议问题。MCGS 设备驱动构
件的帧格式如图2所示。51单片机串口集成了一个全双工通用异步接收发送器UART 。这里采用UART 工作在模式1下,按照字节传输数据,数据帧格式为1位起始位、
8位数据位和1位停止位[6]
图2帧格式
Fig.2
Format of frame
2.2串口操作函数
编写子设备驱动程序时,主要是对串行端口进行
操作。MCGS 把复杂的对串行端口的设置(如波特率、数据位长度、数据校验方式等)、初始化和读写操作全部封装在MCGS 提供的串口父设备中。子设备按照通
信协议将数据打包,然后调用串口父设备提供的标准串口读写函数,即可完成对数据的读取和发送工作[7]
常用的串行端口操作函数如下。
ComOutDat
//把数据写到串行端口并输出到通信子设备
ComInDat
//从串行端口中读取数据
ComOutInDat
//把数据写到串行端口输出到并通信子设备,
最后从串行端口中读取返回的数据
2.3属性接口
MCGS 提供的接口规范中共有5个属性接口,编
程者可通过调用属性接口函数来对设备属性进行设置。通过设置这5个属性,可以标明设备的类型、类别、设备的通道个数、设备所用I /O 地址的个数和设备所用I /O 的基地址。由于是子设备,故单片机驱动构件不需占用系统I /O 。本设计需要对某房间的温度、温度上/下限报警限值、房间灯盏进行远程监测与控制,
因此,设定的通道个数为7个。5个属性接口设置代码具体如下。
DevType =1
//标明设备类型为子设备,
0为父设备DevStyle =1
/
/标明设备类别为与串口
父设备对应的子设备,
0为独立设备DevChannel =7
//标明设备的通道个数为7个
DevI /ONumber =0DevBaseI /O =0
2.4方法接口
MCGS 在组态环境和运行环境下需要调用方法接
口来实现特定的功能,如实现初始化、数据的输入与输出、通道的数据类型说明等功能。2.4.1
组态环境中调用接口的方法
GetDevName 接口供MCGS 读取设备的类型名称,MCGS 将把这个名称显示在设备工具箱中。本文设置如下:GetDevName =“单片机控制器”
GetDevHelp 接口用以显示设备构件的在线帮助;SetDevPage 接口用以设置设备构件的内部属性页。当把设备从设备工具箱中选取到设备窗口中时,调用InitNewDev 接口,设置设备的缺省属性值。2.4.2
运行环境中调用接口的方法运行环境中调用接口的方法具体如下。
①在MCGS 运行环境启动时调用InitDevRun 接口一次,用于对设备构件进行初始化工作。
②MCGS调用GetChlType接口读取设备各通道的数据类型和通道内容的文字描述,在设备属性设置窗口的通道连接属性页中所显示的内容来自本接口。本设计需设置7个通道,第1 4通道用于远程控制房
间四盏灯的亮灭,使用51单片机的P
1.0 P
1.3
;第5通
道用于实时采集房间的温度值;第6、第7通道用于在线设置房间温度上/下限报警值。程序代码如下。
Public Function GetChlType(alngChlDataType As Variant,astrChlExplain As Variant)As Long
Dim i As Long
For i=0To3
alngChlDataType(i)=-1∥写开关型数据
astrChlExplain(i)="P
1
."+Format(i,"0")Next i
alngChlDataType(4)=2∥读数值型数据
astrChlExplain(4)="TValue"
alngChlDataType(5)=-2∥写数值型数据
astrChlExplain(5)="TAlm_H"
alngChlDataType(6)=-2∥写数值型数据
astrChlExplain(6)="TAlm_L"
End Function
③在MCGS运行环境中,从设备采集数据或向设备输出数据通过定时调用CollectDevDat接口来完成。设备构件首先调用父设备的串口操作函数ComOutIn-Dat,把命令字写到串行端口,再输出到单片机控制器,单片机控制器收到命令字后发送数据到串行端口,串行端口读取返回的数据,再把数据存入到数组Output-Byte()中,然后将数组中的数据解包,把所需要的变量值存放到通道数组asngdatavalue()中,供MCGS进行处理。
按照通信协议,发送帧格式采用“#”+“地址编号”+“命令数据”+“!”,然后将该字符串转换为ASCII码发送至单片机控制器。数据接收帧格式与之类似。
在CollectDevDat接口中编制的程序代码如下。
Public Function CollectDevDat(alngDataFlag As Variant,asngdatavalue As Variant,astrDataString As Variant)As Long On Error Resume Next
Dim flag As Long
flag=collectonecomm(m_objCommParent,DevNumber,asngdatavalue)
CollectDevDat=0
If flag<>0Then CollectDevDat=-1
End Function
在VB的程序模块DevBas.bas中编制的源程序代码如下。
Dim OutputByte(127)As Byte
Public Function collectonecomm(m_objCommParent As Object,ByVal num As Long,dat As Variant)As Long Dim Cmd As String,i As Long,n As Long
n=0∥准备输出开关量
For i=0To3
n=n Or(dat(i)*2^(i))
Next i
Cmd="#"+Right(("00"+Hex(num)),2)+ Right(("00"+Hex(n)),1)
Cmd=Cmd+Right(("00"+Hex(dat(5))),2)+ Right(("00"+Hex(dat(6))),2)+"!"
n=RWMcs51Data(Cmd,m_objCommParent)
If n=-1Then collectonecomm=-1:Exit Function
dat(4)=Left(Str(OutputByte(3)*16+OutputByte(2)/ 16+(OutputByte(2)Mod16)*0.0625),5)
∥转换读取的温度值collectonecomm=0
End Function
通过调用父设备的串口操作函数ComOutInDat,实现与单片机控制器交互数据,相应的程序代码如下。
Public Function RWMcs51Data(ByVal Cmd As String,m_ objCommParent As Object)As Long
On Error Resume Next
Dim i As Long,ilen As Long
For i=1To Len(Cmd)∥把字符串转换成字节数组
OutputByte(i-1)=Asc(Mid(Cmd,i,1))
Next i
ilen=m_objCommParent.ComOutInDat(OutputByte(),Len(Cmd),3,5,13,1000)
If ilen<=0Then RWMcs51Data=-1:Exit Function
RWMcs51Data=0
End Function
④在MCGS中,周期性读写参数都是在通道连接中实现的。因此,本设计中没有对RunDevCommand接口函数进行编程。
3下位机的通信程序设计
本文选用Atmel公司的AT89C52单片机作为下位机,房间温度传感器选用DALLAS公司的DS18B20。DS18B20采用1-Wire总线,可将温度直接转换成串行数字信号供微控制器处理,测温范围为-55 +125ħ,
最大分辨率可达0.0625K[8]。
下位单片机通过串口和上位机交换数据,采用T1作为UART的波特率发生器。单片机晶振频率选为
11.0592MHz ,设置SMOD =0、TH1=0FDH ,可得到波特率为9600bit /s 。这样获得的波特率误差率为0,提高了串口通信的可靠性。为提高数据交互的实时性,单片机收/发数据采用中断方式。按照前述数据通信协议约定,单片机串行口的中断服务程序流程如图3所示
图3中断服务程序流程图
Fig.3
Flowchart of the interrupt service
4驱动构件测试与应用
MCGS 为设备驱动构件提供了一套在VB 环境下
进行在线调试的运行机制,使用户能够随时在VB 源代码一级对构件的接口函数进行调试、测试,以验证编程正确性。编程调试工作完成后,经编译,生成*.dll 文件,只要把此文件拷贝到D :\MCGS \Program \Drivers 的目录下(假定MCGS 系统安装时的目录为D :
\MCGS ),即完成设备驱动构件的挂接工作[9]
启动MCGS 组态环境,在工作台中打开设备组态窗口,再通过设备工具箱的“设备管理”窗口,完成自主
开发的单片机驱动构件在Windows 中的登记工作。
本文开发的基于MCGS 的51单片机驱动构件可实现对房间温度的实时监测,并能够在上位机中对房间温度的上/下限报警限值进行在线设置。系统运行中一旦温度超限,上位机监控可立即实现汉语语音报
警,其中的声音文件由中科大讯飞信息科技公司“In-terPhonic CN 语音合成系统”产生,效果如真人发音
[10]
。同时,系统可实现在上位机上对房间的4个灯
盏进行远程开启与关闭。
5结束语
工控组态软件开发的计算机监控系统具有系统配
置灵活、
开发周期短、通用性强、可靠性高等特点,MCGS 提供了一套规范的设备驱动程序接口,用户可方便灵活地开发设备驱动程序。熟练掌握MCGS 设备驱动构件的开发方法不仅大大拓宽了硬件选型范围,也为
开发基于MCGS 的计算机监控系统提供技术保证。实际运行表明,本文开发的基于MCGS 的51单片机驱动构件效果良好,
数据交互及时可靠。参考文献
[1]曹辉,马栋萍,王暄,等.组态软件技术及应用[M ].北京:电子
工业出版社,
2009:1.[2]包建华,丁启胜,张兴奎.工控组态软件MCGS 及其应用[J ].工
矿自动化,
字符串转数组在线工具2007(3):92.[3]邱小文,汪仁和.基于MCGS 组态软件的设备驱动开发[J ].露
天采矿技术,
2007(5):51.[4]周杰,林沂杰.基于MCGS 的51单片机驱动构件实现方法[J ]
.微计算机应用,
2009,30(11):76-77.[5]邱小文,汪仁和.基于MCGS 的凌阳单片机驱动程序的设计[
J ].微计算机信息,
2006,22(7):113.[6]王晓光,郑萍,马巧娟,等.基于MCGS 的51系列单片机通用驱
动程序设计[
J ].仪表技术与传感器,2010(5):38.[7]潘峥嵘,张岩,郭凯,等.基于MCGS 的C8051F020单片机驱动
程序的设计与应用[
J ].微计算机应用,2009,30(2):49.[8]李光飞,楼然苗,胡佳文,等.单片机课程设计实例指导[M ].北
京:北京航空航天大学出版社,
2004:105-115.[9]马海瑞,周爱军.MCGS 的可扩充性及其设备驱动构件[J ].兵
工自动化,
2005,24(2):80.[10]包建华,张兴奎.空压机组监控软件应用中的若干技术处理[
J ].工业控制计算机,
2007,20(10):45.(上接第34页)
参考文献
[1]李天云,赵妍,韩永强,等.Hilbert-Huang 变换方法在谐波和电压闪变检测中的应用[
J ].电网技术,2005,29(2):73-77.[2]刘大贵,王维庆,王海云.基于IEC 闪变仪测试系统的仿真研究
[J ].自动化仪表,
2011(4):59-61,65.[3]刘会金,吴玉蓉,熊玲玲.基于Daubechies 小波的多分辨分解在
电压闪变信号分析中的应用[
J ].继电器,2004,32(13):6-10.[4]谢小磊.电压波动与闪变的小波分析[D ].南京:河海大学,
2006.
[5]Michael A.Selecting and implementing an embedded database sys-
tem [J ].Computer ,2000,33(9):27-34.
[6]尧有平,薜小波.基于ARM-Linux 的SQLite 嵌入式数据库的研究[J ].微计算机信息,
2008,24(5):63-66.[7]IEC 6100-4-15Testing and measure ment techniques :flicker meter
functional and design specifications [S ].1997.
[8]刘伟,申焱华,黄夏旭.基于虚拟仪器的热电偶温度测试与分析
系统[
J ].自动化仪表,2007,28(3):65-69.[9]柳明洙,刘永强,刘博,等.一种基于虚拟仪器建立的电压闪变
监测方法[
J ].中国测试,2009,35(3):118-120.[10]李启斌,陈建业.基于虚拟仪器的电压闪变测量模块设计[J ]
.大功率变流技术,
2008(6):55-58.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。