丛 林,杨 虹,毛 瑞
(山西电力科学研究院,山西太原 030001)
在目前的智能传感器网络里,由于现场总线接口标准繁多,各厂商之间的传感器很难实现互操作性和互换性,从而增加了网络化智能传感器系统的研发、集成和维护难度。为了统一总线接口标准,从1997年开始,国际电子电气工程师协会IEEE(Institute of Electrical and Electronics Engineers)与美国国家标准总局NIST(National Institute of Standards and Technology)陆续推出了IEEE1451网络化智能传感器接口标准,解决了不同网络化智能传感器之间互不兼容的问题[1]。
整个智能变送器STIM(Smart Transducer Interface Module)完成后,在与网络适配器NCAP(Network Capable Application Processor)统一在一起构成完整的网络化智能传感器系统之前,需要一个测试系统对所设计的STIM模块进行测试,而测试的思路就是以ADuC812做为从机,当主机发送数据采集指令时,从机通过串口将采集到的数据发送给主机。主机就可以很容易地将得到的数据转化成直观的图表形式方便用户阅读,从而形成一个友好的人机对话界面。所以,必须在计算机上构建一个智能变送器测试平台,除了可以将数据转化成图表的形式外,还应当包括美观、便捷的用户界面,既可以了解STIM模块的主要性能指标,也增强了实验平台的人性化设计。
测试平台采用可视化Basic语言VB(Visual Basic)来编写,而用于界面的其他语言还有很多,包括:可视化编程VC(Microsoft Visual C++)、数字图像处理MatLab、虚拟仪器LabView等,这些语言各有优点和不足。VC编制的界面灵活、具体,窗体美观大方,但编程语言复杂,初学者难以熟练掌握,在通信中需要书写大量应用程序编程接口API(Application Programming Interface)函数,这就大大增加了工作量和编写难度;MatLab的图形用户界面GUI(Graphical User Interface)直观方便,很容易实现图表的实时显示,但缺点是画面粗糙,且必须依托MatLab应用程序才能运行;VB则集成了两者的优点,编写的程序通俗易懂,移植性较强,开发周期短,绘图功能强大,且编程简单,易学、易用,内嵌专用通信控件Mscomm,使通讯过程方便快捷,从而成为理想的编程语言;LabView作为一款图形化编程语言,以其专业性和集成化受到电子电气类学科人士的青睐,也是一种可取的设计方案[2]。
测试平台程序使用Microsoft Visual Basic开发,提供了开发Windows应用程序的最迅速、最简捷的方法。Visual Basic既适合用于资深专业开发人员,也适合初学者,为使用者提供了整套工具,以便开发应用程序。
Visual Basic中的 “Visual” 指的是开发图形用户界面GUI的方法。不需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象添加到屏幕上即可。 “Basic”指的是Beginners All-Purpose Symbolist Instruction Code语言,一种在计算机技术发展历史上应用的最为广泛的语言。Visual Basic在原有Basic语言的基础上进一步发展,至今包含了数百条语句、函数及关键词,其中很多和Windows GUI有直接关系。专业人员可以用Visual Basi实现其他任何Windows编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序[2]。
Microsoft Communication 6.0控件简称MSComm控件,通过串行端口传输和接收数据,为应用程序提供全双工串行通讯功能,并提供两种处理通讯的方式。
a)事件驱动通讯。是处理串行端口交互作用的一种非常有效的方法。在许多情况下,事件发生时需要得到通知,可以利用MSComm控件的On-Comm事件捕获并处理这些通讯事件。OnComm事件还可以检查和处理通讯错误。用户可以通过检查CommEvent的属性,来处理所有通讯事件和通讯错误。
b)查询方式通讯。在程序的每个关键功能之后,可以通过检查CommEvent的属性来处理事件和通讯错误。
使用控件时,首先要把CommPort属性设置为一个合法的端口号,其次要为Settings属性设置一个通讯格式字。InputMode属性确定Input属性如何取回数据:当InputMode=0时,数据取回的格式是字符串;InputMode=1时,数据取回的格式是数据组的二进制数据的数组。然后用PortOpen=True打开通讯端口,这样就可以发送和接受数据了,完成发送和接收数据后,用PortOpen=False关闭通讯端口。部分初始化原代码如下。
在通讯中若接收到数据,控件会把它存入输入缓冲区,同时产生OnCome事件,通过设置InputLen属性确定要读取的字节数,应用程序可以从Input属性中读取并删除接收缓冲区中的数据流。若设置InputLen为0,则会在Input属性中读取接收缓冲区中的全部数据。数据发送时,只需向Output属性写入数据流,MSComm控件就会自动传输文本数据或二进制数据。用Output属性传输文本数据,必须定义一个包含一个字符串的Variant类型变量。发送二进制数据,必须传递一个包含字节数组的Variant类型变量到Output属性。
Windows的工作机制简单地说就是3个关键的概念,即窗口、事件和消息。Microsoft Window s操作系统通过给每一个窗口指定1个唯一的标示号来管理所有的窗口,操作系统连续地监视每一个窗口的活动或事件的信号。事件可以通过诸如单击鼠标或按下按键的操作而产生,也可以通过程序的控制而产生,甚至可以由另一个窗口的操作而产生。每发生一次事件,将引发一条消息发送至操作系统。操作系统处理该消息并广播给其他窗口。然后,每一个窗口才能根据自身处理该条消息的指令而采取适当的操作。在传统的或 “过程化”应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。
在事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片断。事件可以由用户操作出发,也可以由来自操作系统或其他应用程序的消息触发,甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此,应用程序每次运行时所经过的代码的路径都是不同的。
串行口通讯系统是由串行口通讯消息处理程序、文件操作程序等部分组成。串行口通讯程序由两部分组成,一个部分为初始化程序,主要完成串行口通讯参数设置,开串行口功能;另一个部分为MSComm控件的OnComm事件响应程序,该程序是通讯程序的核心,主要完成与单片机的数据交换,通讯协议与单片机的协议相似。OnComm事件响应程序与单片机的串行口中断服务程序类似。部分源代码如下。
文件操作程序主要完成控制数据的管理,文件操作程序包括数据存储程序和数据读取程序。执行数据存储程序时,程序会调用CommonDialog控件的ShowSave方法显示 “另存为”对话框提示用户输入要保存的文件名,用Open语句打开该文件,然后是将各对应数组的值依次用Write语句写入文件,用Close语句关闭文件。执行数据读取程序时,程序会调用CommonDialog控件的ShowOpen方法显示 “打开”对话框提示用户输入要打开的文件名,用Open语句打开该文件,然后依次用Read语句读取文件内的数据,存入各对应数组,用Close语句关闭文件。
STIM测试平台,其操作界面主要由通道名称和测量数据两部分组成。其中测量数据包括了温度显示、X方向加速度显示、Y方向加速度显示以及测量时间显示。“显示测量时间”可以由时间函数直接实现,而 “重新测量”按钮即为清空按钮。
程序中使用了3个Mscomm控件来分别实现三路信号的采集,每个通道按钮控制1个通信控件,依次将3个变量采集并恢复出来。当选中通道1时,COM1口打开,启动Mscomm1实现温度上传;选中通道2时,COM2打开,启动Mscomm2实现X方向加速度上传;选中通道3时,COM3打开,启动Mscomm3实现 Y方向加速度上传。当所有Text清空后,则控制器再次启动测量,得到另外一组测量数据。
智能变送器测试平台与基于IEEE1451.2标准的网络化智能传感器一起,具有广泛的应用领域。
a)基于IEEE1451.2标准的网络化智能传感器不仅包括各种现场总线,也包括Internet等网络。
b)在IEEE1451.2标准中,创新地定义了电子数据表格 TEDS(Transducer Electronic Data Sheet),是一个通用变送器模型,可以支持很多种类的变送器,使得变送器具有自我描述和自我识别的能力,实现了变送器的即插即用。
c)在工业自动化领域,尤其是在工厂控制现场可以实现电厂、变电站等电力设施中对电气设备运行环境的实时监测。由于 TEDS被嵌入智能变送器,使得测试平台的数据采集通道数可以根据要求进行改变,因此,智能变送器测试平台还可实现对电气设备多项运行参数 (如温度、湿度、压力、流量等)的多通道采集,从而方便运行人员和数据终端采集人员对整套设备的远程监控。
智能变送器测试平台通过对温度、X方向加速度、Y方向加速度3个数据的采集和显示,表明以Visual Basic为基础所设计的网络化智能传感器测试平台可以正确、实时显示传感器所采集的数据,达到了实验的预期目的。
[1] 吴仲城,戈瑜,虞承瑞,等.网络化智能传感器/执行器的设计及接口标准[J].仪表技术与传感器,2000(7):1-3.
[2] 黎明,刘成安.Visual Basic程序设计教程[M].成都:电子科技大学出版社,2004:1-4.