史永哲
(西安廣播電視大學(xué) 理工部,陜西 西安 710002)
隨著信息技術(shù)的快速發(fā)展,計(jì)算機(jī)的應(yīng)用越來越廣泛。在我國,目前很多單位都擁有了自己的門戶網(wǎng)站,一些網(wǎng)站通常在網(wǎng)站主頁或其它網(wǎng)頁上顯示當(dāng)?shù)貧鉁亍5鄶?shù)網(wǎng)站頁面顯示的氣溫都是對氣象網(wǎng)站或其它網(wǎng)站數(shù)據(jù)的引用,所顯示的溫度并不等于單位所在區(qū)域內(nèi)的實(shí)際溫度,因此實(shí)際參考意義降低。為改進(jìn)這個(gè)問題,本文提供了一種從區(qū)域內(nèi)放置的溫度傳感器直接讀取溫度并自動(dòng)顯示在網(wǎng)站頁面上的方法。采用這種方法,可以實(shí)現(xiàn)計(jì)算機(jī)定時(shí)讀取傳感器傳回的實(shí)時(shí)溫度,寫入到相應(yīng)的文件;網(wǎng)頁從文件中讀取數(shù)據(jù),定時(shí)將溫度更新到頁面上。整個(gè)過程不需要人為管理,達(dá)到了無伺服的效果。
本系統(tǒng)是一個(gè)無伺服自動(dòng)接收傳感器數(shù)據(jù),并存儲文件,同時(shí)自動(dòng)更新頁面數(shù)據(jù)顯示的計(jì)算機(jī)應(yīng)用系統(tǒng)。本系統(tǒng)由硬件和軟件兩部分構(gòu)成,硬件部分主要由溫度傳感器以及相應(yīng)的接口設(shè)備和接入線路構(gòu)成。軟件部分可分為兩方面,一方面是通過VB6.0高級編程語言實(shí)現(xiàn)將溫度傳感器傳回的溫度實(shí)時(shí)讀取,并將數(shù)據(jù)存儲到文件;另一方面是通過網(wǎng)站上的ajax的異步通信技術(shù),不用刷新網(wǎng)頁,定時(shí)將文件中的數(shù)據(jù)定時(shí)讀出,用來更新網(wǎng)頁上特定元素的數(shù)據(jù)顯示,達(dá)到自動(dòng)定時(shí)更新網(wǎng)頁上數(shù)據(jù)顯示的效果。下面我們來具體介紹。

圖1 硬件結(jié)構(gòu)圖Fig.1 The hardware structure diagram
系統(tǒng)的硬件結(jié)構(gòu)如圖1所示,其中,計(jì)算機(jī)可以是服務(wù)器,或通過局域網(wǎng)連接起來的別的計(jì)算機(jī)。要求計(jì)算機(jī)上能夠運(yùn)行VB6.0的編程開發(fā)環(huán)境,并具有標(biāo)準(zhǔn)的RS232串口或者RS485接口,通過該接口要實(shí)現(xiàn)的主要功能是數(shù)據(jù)采集處理和系統(tǒng)控制。ADAM4521是接口轉(zhuǎn)換模塊,是一款智能RS-422/485到RS-232轉(zhuǎn)換器,能夠?qū)S485或者RS422信號轉(zhuǎn)換為RS232信號[1]。ADAM4521模塊具有如下特點(diǎn):可尋址,信號傳輸速度為115.2 kbps,內(nèi)置微處理器,不需要中間的握手信號。ADAM4013是熱敏電阻輸入模塊,能夠把熱敏電阻的模擬信號轉(zhuǎn)換為RS485的數(shù)字信號。ADAM4013模塊能利用自身的微處理器控制A/D轉(zhuǎn)換器,把電流、電壓或者熱敏電阻的模擬信號轉(zhuǎn)化為數(shù)字信號。該模塊可提供信號調(diào)整、測量范圍調(diào)整、A/D轉(zhuǎn)換等功能。該模塊的主要特點(diǎn)有:內(nèi)置看門狗、采樣率10次/秒、高壓隔離、誤差小于0.05%。這些參數(shù)基本能滿足絕大多數(shù)場合的應(yīng)用。溫度傳感器可選用鉑電阻Pt100,來測量-100℃到+100℃的溫度[2]。在使用時(shí),可以將ADAM4013模塊的測量溫度系數(shù)a設(shè)為0.003 85。我們可以根據(jù)測量范圍和測量精度的不同要求選擇不同的溫度傳感器。
本系統(tǒng)的軟件實(shí)現(xiàn)分為兩部分,一部分是用VB6.0對硬件模塊的溫度采集功能進(jìn)行編程,實(shí)現(xiàn)定時(shí)采集數(shù)據(jù),并將采集到的數(shù)據(jù)存儲到數(shù)據(jù)文件中。另一部分利用Ajax技術(shù),通過異步通信功能來定時(shí)在后臺讀取文件中數(shù)據(jù),并顯示在指定的頁面位置,達(dá)到頁面數(shù)據(jù)自動(dòng)更新的效果。
系統(tǒng)軟件主要采用VB6.0對RS232的串口編程,實(shí)現(xiàn)各硬件之間的通訊。軟件框圖流程如圖2所示。

圖2 程序流程圖Fig.2 Program flow chart
VB6.0對RS232的串口編程主要通過它的MSComm控件來實(shí)現(xiàn)。MSComm的英文全稱是Microsoft Communications Control,是微軟公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應(yīng)用程序提供了串行接口收發(fā)數(shù)據(jù)的簡便方法,可為我們編寫的應(yīng)用程序提供串行通訊功能。MSComm控件提供了兩種處理通訊的方式:事件驅(qū)動(dòng)方式及查詢方式。我們可以利用MSComm控件的OnComm事件來捕獲并處理這些通訊事件。當(dāng)MSComm對象的CommEvent屬性的值發(fā)生變化時(shí),就會(huì)產(chǎn)生一個(gè)OnComm事件,即表示發(fā)生了一個(gè)通訊事件,或者產(chǎn)生了一個(gè)錯(cuò)誤。每個(gè)被使用的MSComm控件都對應(yīng)著一個(gè)串行端口,程序如果需要訪問多個(gè)串行端口,就必須要使用多個(gè)MSComm控件[3]。
MSComm控件的主要屬性有:CommPort:設(shè)置并返回端口號;Settings:以字符串形式設(shè)置并返回波特率、數(shù)據(jù)位、奇偶校驗(yàn)、停止位;PortOpen:設(shè)置或者返回通訊端口的狀態(tài),也可用來打開和關(guān)閉一個(gè)端口;Input:從接收緩沖區(qū)中返回和刪除字符;Output:給緩沖區(qū)內(nèi)寫入一個(gè)字符串。ADAM模塊是通過使用一定的約定字符來實(shí)現(xiàn)相應(yīng)的操作,經(jīng)常會(huì)用到的有:"%0101210600":設(shè)置端口;"#01":讀串口 1的數(shù)據(jù);"#02":讀串口 2 的數(shù)據(jù);"$010":模塊自動(dòng)校準(zhǔn);"$011":偏移量校準(zhǔn);"$012":讀端口信息;"$01M":讀模塊名稱。本軟件中用到的核心VB程序代碼有:
Const Cmdconfig="%0101210600"‘設(shè)置端口命令字符
Const CmddataIn1="#01"‘讀串口1的數(shù)據(jù)命令字符
Const CmddataIn2="#02"‘讀串口2的數(shù)據(jù)命令字符
Const CmdspanCalibration="$010"‘‘校準(zhǔn)命令字符
Const CmdoffsetCalibration="$011"‘偏移量校準(zhǔn)命令字符
Const CmdconfigStatus="$012"‘讀端口信息的命令字符
Const CmdmoduleName="$01M"‘讀模塊名的命令字符
Private Sub MSComm1_OnComm()‘CommEvent值變化時(shí)運(yùn)行的事件子程序
Select Case MSComm1.CommEvent‘判斷MSComm1通訊事件的類型
Case ComEvReceive‘如果收到Rthreshold個(gè)字節(jié)產(chǎn)生的接收事件
MSComm1.Rthreshold=0‘關(guān)閉對OnComm事件的接收
Timedelay 500‘延時(shí) 500ms
temperatureStr1=Right(MSComm1.Input, 7)‘讀取 BCD 碼的高位字節(jié)
temperature=Val(temperatureStr1)‘得到溫度的數(shù)值
Open “wendu.txt” for random as#1 len=len(temperature)‘給wendu.txt中寫入數(shù)據(jù)。
Put#1,1,temperature‘將采集到的溫度數(shù)據(jù)寫入wendu.txt的第一行。
Close#1‘關(guān)閉文件
MSComm1.Output=CStr(CmddataIn) &vbCr‘發(fā)送讀數(shù)據(jù)命令
MSComm1.InBufferCount=0‘清空緩存
MSComm1.Rthreshold=1‘關(guān)閉OnComm的事件接收
Case Else
End Select
End Sub
上述程序代碼得到的temperature變量即是待測介質(zhì)的實(shí)際溫度。我們通過VB的定時(shí)器(可以每10分鐘)以覆蓋方式將其值定時(shí)保存到wendu.txt文件的第一行 (定時(shí)器代碼略)。下面我們來通過ajax的異步通信功能實(shí)現(xiàn)網(wǎng)頁定時(shí)讀取wendu.txt中的溫度數(shù)據(jù)。
Ajax的英文全稱是 Asynchronous JavaScript And XML,意思即是異步的JavaScript和XML,是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)[4]。Ajax在后臺通過與服務(wù)器進(jìn)行少量的數(shù)據(jù)交換,可以實(shí)現(xiàn)網(wǎng)頁的異步更新,這意味著它可以在不重新加載整個(gè)頁面的情況下,對網(wǎng)頁的某個(gè)部分進(jìn)行更新。該方法可以讓W(xué)eb頁面不用打斷交互流程以及重新加裁,就可以進(jìn)行動(dòng)態(tài)地更新。在Ajax中的應(yīng)用中,起關(guān)鍵作用的是XmlHttpRequest對象。XMLHttpRequest對象在大部分瀏覽器上已經(jīng)實(shí)現(xiàn)且擁有一個(gè)簡單的接口,允許數(shù)據(jù)從客戶端傳遞到服務(wù)器端,但不會(huì)打斷用戶當(dāng)前的操作。從名稱上看,XMLHttpRequest傳遞的數(shù)據(jù)格式是XML格式的數(shù)據(jù),但實(shí)際上,使用XMLHttpRequest可以傳送任何格式的數(shù)據(jù)[5]。本系統(tǒng)的頁面和數(shù)據(jù)文件之間的訪問關(guān)系如圖3所示,Index.htm通過使用XMLHttpRequest對象訪問Read.asp,達(dá)到對Wendu.txt文件中數(shù)據(jù)的訪問。
在Index.htm頁面中我們設(shè)計(jì)的核心代碼如下:
<script language="javascript">
var myrequest=false;//給myrequest對象賦初值為false
try{//嘗試在不同的瀏覽器版本建立XmlHttpRequest對象
myrequest=new XMLHttpRequest (); //嘗 試 創(chuàng) 建XMLHttpRequest對象
}catch (trymicrosoft) {//如果失敗
try{
myrequest=new ActiveXObject("Msxml2.XMLHTTP"); //

圖3 文件訪問結(jié)構(gòu)圖Fig.3 File access structure
嘗試建立較新版本的兼容對象
}catch (othermicrosoft) {//如果還失敗
try{
myrequest=new ActiveXObject("Microsoft.XMLHTTP");
//嘗試建立較老版本的兼容對象。
}catch (failed) {//如果還失敗
myrequest=false; //給myrequest變量賦值為 false
}
}
}
function getCustomerInfo(){//建立定時(shí)自動(dòng)運(yùn)行的函數(shù)getCustomerInfo()
myrequest.open ("GET",”Read.asp”, true); //定時(shí)訪問Read.asp動(dòng)態(tài)網(wǎng)頁
myrequest.onreadystatechange=updatePage (); //獲取當(dāng)前HTML的就緒狀態(tài)
myrequest.send (null); //發(fā)送請求,null表示不發(fā)送額外數(shù)據(jù)
window.setTimeout ("getCustomerInfo ()",600000); //每10分鐘執(zhí)行一次本函數(shù)
}
function updatePage(){//判斷網(wǎng)頁的就緒狀態(tài)函數(shù)
if(myrequest.readyState==4) {//如果服務(wù)器完成發(fā)送響應(yīng)
if(myrequest.status==200) //如果處理的狀態(tài)是正常的
document.getElementById ("wd").value =myrequest.responseText;//在頁面顯示傳回的數(shù)據(jù)
}
}
在Read.asp頁面中我們設(shè)計(jì)的核心代碼如下:
<%
Set Fs=Server.CreateObject("Scripting.FileSystemObject")//建立文件系統(tǒng)對象
Set Rs=FS.OpenTextFile(Server.MapPath("wendu.txt"), 1,F(xiàn)alse)//以只讀模式打開文件
response.write(Rs.ReadLine)//讀取第一行的內(nèi)容,并將內(nèi)容寫到返回結(jié)果中
Rs.Close//關(guān)閉 wendu.txt
Set Rs=Nothing
Set Fs=Nothing
%>
在上述文件中,Index.htm是顯示并更新數(shù)據(jù)的頁面;Read.asp是數(shù)據(jù)處理頁面,即讀取wendu.txt中的數(shù)據(jù)并返回。函數(shù)getCustomerInfo()的功能是每10分鐘執(zhí)行一次自身包含的代碼,這些代碼主要包括定時(shí)訪問Read.asp頁面并返回?cái)?shù)據(jù),根據(jù)判斷Read.asp頁面是否就緒等。Update()函數(shù)的作用是判斷Read.asp網(wǎng)頁的就緒狀態(tài),在狀態(tài)就緒的情況下,才能執(zhí)行發(fā)送訪問請求,并用返回的數(shù)據(jù)來更新網(wǎng)頁中元素的屬性值[6]。通過這些代碼,可以定時(shí)將wendu.txt文件中第一行數(shù)據(jù)[7]定時(shí)讀取到index.htm中,并顯示在index.htm中ID為“wd”的標(biāo)簽上[8]。這樣,就實(shí)現(xiàn)了從文件數(shù)據(jù)到頁面數(shù)據(jù)的自動(dòng)定時(shí)更新。
本系統(tǒng)所需設(shè)備簡單,硬件的連接較為方便,易于實(shí)現(xiàn)。系統(tǒng)只占用了PC機(jī)的一個(gè)串口,占用資源較少。不需要數(shù)據(jù)采集卡以及硬件的驅(qū)動(dòng)程序,可使用VB程序設(shè)計(jì)語言中的串口控件對象來自己編寫數(shù)據(jù)采集程序,靈活性比較大。本系統(tǒng)的功能比較實(shí)用,不但可以在網(wǎng)站上應(yīng)用,亦可推廣至家庭電腦上使用。本系統(tǒng)涵蓋了計(jì)算機(jī)硬件和軟件兩方面的技術(shù)應(yīng)用[9],涉及到了設(shè)備連接、接口編程、網(wǎng)頁設(shè)計(jì)等,系統(tǒng)運(yùn)行結(jié)果可靠。讀者如果能親身實(shí)踐,必能品嘗到自己動(dòng)手設(shè)計(jì)計(jì)算機(jī)應(yīng)用系統(tǒng)的樂趣,激發(fā)出學(xué)習(xí)和研究計(jì)算機(jī)應(yīng)用功能的興趣和動(dòng)力。
[1]蘭羽,白潔.基于pt100傳感器的溫度測量系統(tǒng)設(shè)計(jì)[J].機(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的高精度溫度采集系統(tǒng)設(shè)計(jì)與實(shí)驗(yàn)研究[J].傳感技術(shù)學(xué)報(bào)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的小型高精度多相流實(shí)驗(yàn)裝置測控系統(tǒng)設(shè)計(jì)[J].電子測量與儀器學(xué)報(bào),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的四層架構(gòu)遠(yuǎn)程監(jiān)測系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(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技術(shù)在Web2.0網(wǎng)站設(shè)計(jì)中的應(yīng)用研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,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的學(xué)校網(wǎng)絡(luò)中心空調(diào)遠(yuǎn)程監(jiān)控[J].電腦編程技巧與維護(hù),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]王文龍,張少博,陳海峰.一種試驗(yàn)數(shù)據(jù)處理軟件設(shè)計(jì)[J].火箭推進(jìn) ,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]董冬,張少博,劉曉.試驗(yàn)狀態(tài)信息管理軟件設(shè)計(jì)[J].火箭推進(jìn),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碼對時(shí)系統(tǒng)方案軟硬件設(shè)計(jì)的研究[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.