APP下载

区域温度定时网站更新系统设计

2015-01-04史永哲

电子设计工程 2015年12期
关键词:控件字符串口

史永哲

(西安广播电视大学 理工部,陕西 西安 710002)

随着信息技术的快速发展,计算机的应用越来越广泛。在我国,目前很多单位都拥有了自己的门户网站,一些网站通常在网站主页或其它网页上显示当地气温。但多数网站页面显示的气温都是对气象网站或其它网站数据的引用,所显示的温度并不等于单位所在区域内的实际温度,因此实际参考意义降低。为改进这个问题,本文提供了一种从区域内放置的温度传感器直接读取温度并自动显示在网站页面上的方法。采用这种方法,可以实现计算机定时读取传感器传回的实时温度,写入到相应的文件;网页从文件中读取数据,定时将温度更新到页面上。整个过程不需要人为管理,达到了无伺服的效果。

1 系统概述

本系统是一个无伺服自动接收传感器数据,并存储文件,同时自动更新页面数据显示的计算机应用系统。本系统由硬件和软件两部分构成,硬件部分主要由温度传感器以及相应的接口设备和接入线路构成。软件部分可分为两方面,一方面是通过VB6.0高级编程语言实现将温度传感器传回的温度实时读取,并将数据存储到文件;另一方面是通过网站上的ajax的异步通信技术,不用刷新网页,定时将文件中的数据定时读出,用来更新网页上特定元素的数据显示,达到自动定时更新网页上数据显示的效果。下面我们来具体介绍。

2 硬件构成

图1 硬件结构图Fig.1 The hardware structure diagram

系统的硬件结构如图1所示,其中,计算机可以是服务器,或通过局域网连接起来的别的计算机。要求计算机上能够运行VB6.0的编程开发环境,并具有标准的RS232串口或者RS485接口,通过该接口要实现的主要功能是数据采集处理和系统控制。ADAM4521是接口转换模块,是一款智能RS-422/485到RS-232转换器,能够将RS485或者RS422信号转换为RS232信号[1]。ADAM4521模块具有如下特点:可寻址,信号传输速度为115.2 kbps,内置微处理器,不需要中间的握手信号。ADAM4013是热敏电阻输入模块,能够把热敏电阻的模拟信号转换为RS485的数字信号。ADAM4013模块能利用自身的微处理器控制A/D转换器,把电流、电压或者热敏电阻的模拟信号转化为数字信号。该模块可提供信号调整、测量范围调整、A/D转换等功能。该模块的主要特点有:内置看门狗、采样率10次/秒、高压隔离、误差小于0.05%。这些参数基本能满足绝大多数场合的应用。温度传感器可选用铂电阻Pt100,来测量-100℃到+100℃的温度[2]。在使用时,可以将ADAM4013模块的测量温度系数a设为0.003 85。我们可以根据测量范围和测量精度的不同要求选择不同的温度传感器。

3 软件实现

本系统的软件实现分为两部分,一部分是用VB6.0对硬件模块的温度采集功能进行编程,实现定时采集数据,并将采集到的数据存储到数据文件中。另一部分利用Ajax技术,通过异步通信功能来定时在后台读取文件中数据,并显示在指定的页面位置,达到页面数据自动更新的效果。

3.1 温度数据采集功能的程序设计

系统软件主要采用VB6.0对RS232的串口编程,实现各硬件之间的通讯。软件框图流程如图2所示。

图2 程序流程图Fig.2 Program flow chart

VB6.0对RS232的串口编程主要通过它的MSComm控件来实现。MSComm的英文全称是Microsoft Communications Control,是微软公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了串行接口收发数据的简便方法,可为我们编写的应用程序提供串行通讯功能。MSComm控件提供了两种处理通讯的方式:事件驱动方式及查询方式。我们可以利用MSComm控件的OnComm事件来捕获并处理这些通讯事件。当MSComm对象的CommEvent属性的值发生变化时,就会产生一个OnComm事件,即表示发生了一个通讯事件,或者产生了一个错误。每个被使用的MSComm控件都对应着一个串行端口,程序如果需要访问多个串行端口,就必须要使用多个MSComm控件[3]。

MSComm控件的主要属性有:CommPort:设置并返回端口号;Settings:以字符串形式设置并返回波特率、数据位、奇偶校验、停止位;PortOpen:设置或者返回通讯端口的状态,也可用来打开和关闭一个端口;Input:从接收缓冲区中返回和删除字符;Output:给缓冲区内写入一个字符串。ADAM模块是通过使用一定的约定字符来实现相应的操作,经常会用到的有:"%0101210600":设置端口;"#01":读串口 1的数据;"#02":读串口 2 的数据;"$010":模块自动校准;"$011":偏移量校准;"$012":读端口信息;"$01M":读模块名称。本软件中用到的核心VB程序代码有:

Const Cmdconfig="%0101210600"‘设置端口命令字符

Const CmddataIn1="#01"‘读串口1的数据命令字符

Const CmddataIn2="#02"‘读串口2的数据命令字符

Const CmdspanCalibration="$010"‘‘校准命令字符

Const CmdoffsetCalibration="$011"‘偏移量校准命令字符

Const CmdconfigStatus="$012"‘读端口信息的命令字符

Const CmdmoduleName="$01M"‘读模块名的命令字符

Private Sub MSComm1_OnComm()‘CommEvent值变化时运行的事件子程序

Select Case MSComm1.CommEvent‘判断MSComm1通讯事件的类型

Case ComEvReceive‘如果收到Rthreshold个字节产生的接收事件

MSComm1.Rthreshold=0‘关闭对OnComm事件的接收

Timedelay 500‘延时 500ms

temperatureStr1=Right(MSComm1.Input, 7)‘读取 BCD 码的高位字节

temperature=Val(temperatureStr1)‘得到温度的数值

Open “wendu.txt” for random as#1 len=len(temperature)‘给wendu.txt中写入数据。

Put#1,1,temperature‘将采集到的温度数据写入wendu.txt的第一行。

Close#1‘关闭文件

MSComm1.Output=CStr(CmddataIn) &vbCr‘发送读数据命令

MSComm1.InBufferCount=0‘清空缓存

MSComm1.Rthreshold=1‘关闭OnComm的事件接收

Case Else

End Select

End Sub

上述程序代码得到的temperature变量即是待测介质的实际温度。我们通过VB的定时器(可以每10分钟)以覆盖方式将其值定时保存到wendu.txt文件的第一行 (定时器代码略)。下面我们来通过ajax的异步通信功能实现网页定时读取wendu.txt中的温度数据。

3.2 通过ajax实现页面数据的异步更新

Ajax的英文全称是 Asynchronous JavaScript And XML,意思即是异步的JavaScript和XML,是一种用于创建快速动态网页的技术[4]。Ajax在后台通过与服务器进行少量的数据交换,可以实现网页的异步更新,这意味着它可以在不重新加载整个页面的情况下,对网页的某个部分进行更新。该方法可以让Web页面不用打断交互流程以及重新加裁,就可以进行动态地更新。在Ajax中的应用中,起关键作用的是XmlHttpRequest对象。XMLHttpRequest对象在大部分浏览器上已经实现且拥有一个简单的接口,允许数据从客户端传递到服务器端,但不会打断用户当前的操作。从名称上看,XMLHttpRequest传递的数据格式是XML格式的数据,但实际上,使用XMLHttpRequest可以传送任何格式的数据[5]。本系统的页面和数据文件之间的访问关系如图3所示,Index.htm通过使用XMLHttpRequest对象访问Read.asp,达到对Wendu.txt文件中数据的访问。

在Index.htm页面中我们设计的核心代码如下:

<script language="javascript">

var myrequest=false;//给myrequest对象赋初值为false

try{//尝试在不同的浏览器版本建立XmlHttpRequest对象

myrequest=new XMLHttpRequest (); //尝 试 创 建XMLHttpRequest对象

}catch (trymicrosoft) {//如果失败

try{

myrequest=new ActiveXObject("Msxml2.XMLHTTP"); //

图3 文件访问结构图Fig.3 File access structure

尝试建立较新版本的兼容对象

}catch (othermicrosoft) {//如果还失败

try{

myrequest=new ActiveXObject("Microsoft.XMLHTTP");

//尝试建立较老版本的兼容对象。

}catch (failed) {//如果还失败

myrequest=false; //给myrequest变量赋值为 false

}

}

}

function getCustomerInfo(){//建立定时自动运行的函数getCustomerInfo()

myrequest.open ("GET",”Read.asp”, true); //定时访问Read.asp动态网页

myrequest.onreadystatechange=updatePage (); //获取当前HTML的就绪状态

myrequest.send (null); //发送请求,null表示不发送额外数据

window.setTimeout ("getCustomerInfo ()",600000); //每10分钟执行一次本函数

}

function updatePage(){//判断网页的就绪状态函数

if(myrequest.readyState==4) {//如果服务器完成发送响应

if(myrequest.status==200) //如果处理的状态是正常的

document.getElementById ("wd").value =myrequest.responseText;//在页面显示传回的数据

}

}

在Read.asp页面中我们设计的核心代码如下:

<%

Set Fs=Server.CreateObject("Scripting.FileSystemObject")//建立文件系统对象

Set Rs=FS.OpenTextFile(Server.MapPath("wendu.txt"), 1,False)//以只读模式打开文件

response.write(Rs.ReadLine)//读取第一行的内容,并将内容写到返回结果中

Rs.Close//关闭 wendu.txt

Set Rs=Nothing

Set Fs=Nothing

%>

在上述文件中,Index.htm是显示并更新数据的页面;Read.asp是数据处理页面,即读取wendu.txt中的数据并返回。函数getCustomerInfo()的功能是每10分钟执行一次自身包含的代码,这些代码主要包括定时访问Read.asp页面并返回数据,根据判断Read.asp页面是否就绪等。Update()函数的作用是判断Read.asp网页的就绪状态,在状态就绪的情况下,才能执行发送访问请求,并用返回的数据来更新网页中元素的属性值[6]。通过这些代码,可以定时将wendu.txt文件中第一行数据[7]定时读取到index.htm中,并显示在index.htm中ID为“wd”的标签上[8]。这样,就实现了从文件数据到页面数据的自动定时更新。

4 结 论

本系统所需设备简单,硬件的连接较为方便,易于实现。系统只占用了PC机的一个串口,占用资源较少。不需要数据采集卡以及硬件的驱动程序,可使用VB程序设计语言中的串口控件对象来自己编写数据采集程序,灵活性比较大。本系统的功能比较实用,不但可以在网站上应用,亦可推广至家庭电脑上使用。本系统涵盖了计算机硬件和软件两方面的技术应用[9],涉及到了设备连接、接口编程、网页设计等,系统运行结果可靠。读者如果能亲身实践,必能品尝到自己动手设计计算机应用系统的乐趣,激发出学习和研究计算机应用功能的兴趣和动力。

[1]兰羽,白洁.基于pt100传感器的温度测量系统设计[J].机械与电子,2013(10):121-124.LAN Yu,BAI Jie.Design of temperature measurement system base on Pt100 sensor[J].Machinery&Electronics,2013(10):121-124.

[2]张修太,胡雪惠.基于PT100的高精度温度采集系统设计与实验研究[J].传感技术学报2013(6):93-97.ZHANG Xiu-tai,HU Xue-hui.The design and experimental study of high precise temperature acquisition system base on pt100[J].Chinese Journal of Sensors and Actuators,2013(6):93-97.

[3]李小亭,张琛.基于PLC的小型高精度多相流实验装置测控系统设计[J].电子测量与仪器学报,2014(6):70-74.LI Xiao-ting,ZHANG Chen.Design of measurement and control system of experimental apparatus for PLC-based small high-precision multiphase flow[J].Journal of Electronic Measurement and Instrument,2014(6):70-74.

[4]高鹏,徐小力.基于Ajax的四层架构远程监测系统设计[J].计算机工程与设计,2014(2):196-198.GAO Peng,XU Xiao-li.Design of four layer architecture remote monitoring system base on ajax[J].Computer Engineering and Design,2014(6):196-198.

[5]熊文,孙旭.Ajax技术在Web2.0网站设计中的应用研究[J].计算机技术与发展,2012(3):142-145.XIONG Wen,SUM Xu.The application of ajax technology in web site design[J].Computer Technology and Development,2012(3):142-145.

[6]曹永鸿.基于.Web的学校网络中心空调远程监控[J].电脑编程技巧与维护,2014(15):61-64.CAO Yong-hong.The school network center air-conditioning remote monitoring Based on web[J].Computer Program Skills and Maintenance,2014(15):61-64.

[7]王文龙,张少博,陈海峰.一种试验数据处理软件设计[J].火箭推进 ,2012(1):76-80.WANG Wen-long,ZHANG Shao-bo,CHEN Hai-feng.Design of a test data processing software[J].Journal of Rocket Propulsion,2012(1):76-80.

[8]董冬,张少博,刘晓.试验状态信息管理软件设计[J].火箭推进,2013(6):72-77.DONG Dong,ZHANG Shao-bo,LIU Xiao.Design of information management software for test status[J].Journal of Rocket Propulsion,2013(6):72-77.

[9]许仁安,黄作兵,吴大珩.一种IRIG-B码对时系统方案软硬件设计的研究[J].陕西电力,2014(7):91-93.XU Ren-an,HUANG Zuo-bing,WU Da-heng.Study on software and hardware design scheme of IRIG-B code time synchronous system[J].Shaanxi Electric Power,2014(7):91-93.

猜你喜欢

控件字符串口
浅谈AB PLC串口跟RFID传感器的通讯应用
基于.net的用户定义验证控件的应用分析
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
关于.net控件数组的探讨
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式