用vb6.0實(shí)現(xiàn)pc機(jī)對(duì)多臺(tái)流量計(jì)遠(yuǎn)程數(shù)據(jù)采集與監(jiān)控
(本次測(cè)試的設(shè)備由上海立陽(yáng)自動(dòng)化生產(chǎn))
作者 朱立榮(立陽(yáng)技術(shù)部工程師)
摘要: 利用vb6.0 activex 控件的mscomm通信控件,實(shí)現(xiàn)了windows9x下單臺(tái)pc機(jī)與多臺(tái)智能流量計(jì)的串行通訊,達(dá)到了對(duì)分散設(shè)備的集中控制和計(jì)量數(shù)據(jù)的采集和自動(dòng)上報(bào)功能。
關(guān)鍵詞:pc機(jī);流量計(jì);智能儀表;rs485;串口;事件驅(qū)動(dòng)
collecting and controlling the long-distance data of flowrates by
using personal computer base on vb6.0
xiang tan steel automatic department
yu wei gang
abstract: this paper describes one personal computer series-communicating with many inlectual-flowrates under windows9x by using mscomm controls of vb6.0 activex’s.coming to centralized controlling scattered measure equipment and automatic data collecting and switching.
key word: personal computer; floweret; inlectual meter; serial communication
rs485; incident driving
一、 引言
在工業(yè)生產(chǎn)中,能源、動(dòng)力介質(zhì)的測(cè)量設(shè)備分布在現(xiàn)場(chǎng)的各個(gè)區(qū)域,給設(shè)備的監(jiān)控和數(shù)據(jù)的統(tǒng)計(jì)帶來(lái)諸多不便,隨著智能儀表技術(shù)的不斷發(fā)展,其通訊技術(shù)也在不斷加強(qiáng),當(dāng)今的流量測(cè)量?jī)x表大多帶有rs-485通訊接口,*可以運(yùn)用現(xiàn)場(chǎng)總線方式實(shí)現(xiàn)多臺(tái)測(cè)量?jī)x表的集中監(jiān)控與數(shù)據(jù)采集。
本文利用vb6.0的activex控件——microsoft communication 控件,方便的實(shí)現(xiàn)了window9x環(huán)境下一臺(tái)pc機(jī)與多臺(tái)流量計(jì)測(cè)量?jī)x表的串行通信功能,完成24臺(tái)流量計(jì)的數(shù)據(jù)采集與管理。
二、 系統(tǒng)的硬件設(shè)計(jì):
根據(jù)rs—485電氣規(guī)定,在兩線制傳輸方式下,rs—485驅(qū)動(dòng)器可帶32個(gè)接收器,實(shí)現(xiàn)多半點(diǎn)雙工通訊,通訊距離在15m時(shí)波特率可達(dá)10mb/s,通訊距離在1.2m范圍內(nèi)波特率可達(dá)100mb/s,超過(guò)此距離可用repeater(中繼器),增大傳輸距離,系統(tǒng)方框圖如圖所示:
圖中pc機(jī)通過(guò)rs232接口,經(jīng)rs232—rs485模塊與多臺(tái)流量計(jì)儀表相連接,一條總線上zui多可接32臺(tái),每臺(tái)儀表被賦予各自的通訊地址碼用以識(shí)別身份,這樣上位pc即能通過(guò)rs—485總線對(duì)掛在總線上的每個(gè)儀表進(jìn)行通訊。實(shí)現(xiàn)對(duì)流量計(jì)的遠(yuǎn)程數(shù)據(jù)采集與監(jiān)控。
三、 流量計(jì)結(jié)構(gòu)及通訊功能:
3.1 流量計(jì)大致由三部分組成:
1、 流量傳感器,包括殼體組合,前置放大電路等;
2、 溫度傳感器組合;
3、 流量積算儀表組合。
隨著單片技術(shù)的不斷發(fā)展,流量積算儀大多采用單片計(jì)算機(jī)組成的智能系統(tǒng),在完成系統(tǒng)的采樣積算等功能的同時(shí),還可以采用一定的通訊協(xié)議與遵循相同協(xié)議的設(shè)備聯(lián)網(wǎng),積算儀表系統(tǒng)中有1k以上字節(jié)的eprom可以*保存數(shù)據(jù)和命令,用戶的命令和系統(tǒng)運(yùn)行參數(shù)可通過(guò)串口從pc機(jī)發(fā)送到積算儀表,積算儀表將其格式化后存入不同的eprom地址中,供運(yùn)行時(shí)直接調(diào)用。
3.2 積算儀表與計(jì)算機(jī)的通訊采用rs-485半雙工的方式,積算儀表作為從機(jī),上位pc機(jī)作為主機(jī),控制和監(jiān)視流量計(jì)的運(yùn)行,通訊波特率大多為9600bps,通訊格式為:1位起始位,8位數(shù)據(jù)位,1位奇偶校驗(yàn)位,1位停止位,每個(gè)從站被賦予*的本機(jī)地址,采用主機(jī)輪詢,從機(jī)應(yīng)答的通訊方式。主機(jī)通過(guò)發(fā)送命令幀啟動(dòng)一次通訊,從機(jī)接收到數(shù)據(jù)后,判斷呼叫地址是否和本機(jī)地址相同,若不同,則不與理睬,若相同則根據(jù)命令幀中的特征字(命令字),發(fā)送主機(jī)要求的數(shù)據(jù)幀。以tlxz系列流量計(jì)為例,命令幀的格式如下:
項(xiàng)號(hào)
1
2
3
4
字節(jié)數(shù)
1字節(jié)
2字節(jié)
4字節(jié)
1 字節(jié)
意義
起始字節(jié)(stx)
從機(jī)地址(addr)
特征字
異或校驗(yàn)(bcc)
*項(xiàng)為幀頭(stx)取值41h,用以標(biāo)志一幀的開始;第二項(xiàng)為從機(jī)地址(addr)流量計(jì)地址碼,取值為0—31,當(dāng)?shù)刂反a兩個(gè)字節(jié)都為255時(shí)為廣播地址;第三項(xiàng)命令特征字為3a、3c、3f,用以命令流量計(jì)回傳的數(shù)據(jù)內(nèi)容,第四項(xiàng)bcc為異或校驗(yàn),為前面數(shù)據(jù)的異或校驗(yàn)和用于通訊校錯(cuò)。
數(shù)據(jù)幀比較長(zhǎng),有12個(gè)字節(jié),其格式如下:
項(xiàng)號(hào)
1
2
3
1
字節(jié)數(shù)
1字節(jié)
2字節(jié)
8字節(jié)
1 字節(jié)
意義
起始字節(jié)(stx)
從機(jī)地址(addr)
用戶數(shù)據(jù)
異或校驗(yàn)
命令幀與數(shù)據(jù)幀除第三項(xiàng)外,其它意義相同,數(shù)據(jù)幀的第三部?jī)?nèi)容是從機(jī)根據(jù)主機(jī)發(fā)出的命令幀向主機(jī)發(fā)出的本機(jī)即時(shí)、累計(jì)數(shù)據(jù),或運(yùn)行參數(shù)。
另外主機(jī)還有一個(gè)特殊的命令幀——參數(shù)修改數(shù)據(jù)幀,它的格式為:
項(xiàng)號(hào)
1
2
3
4
5
字節(jié)數(shù)
1字節(jié)
2字節(jié)
1字節(jié)
8字節(jié)
1字節(jié)
意義
起始字節(jié)(stx)
從機(jī)地址(addr)
命令字
用戶數(shù)據(jù)
異或校驗(yàn)
該幀的命令字特征為3e,起始碼為3f,用以區(qū)別其它命令幀,第三部分是主機(jī)向從機(jī)發(fā)送的從機(jī)運(yùn)行參數(shù),從機(jī)收到此幀后,將數(shù)據(jù)格式化,存入eprom中,以發(fā)送流量計(jì)的運(yùn)行參數(shù),對(duì)此幀從機(jī)不回應(yīng)。
四、 vb6.0中的activex控件:
在windows環(huán)境下,出于對(duì)系統(tǒng)的安全考慮,操作系統(tǒng)*接管了各種硬件資源,不允許用戶直接對(duì)包括串口在內(nèi)的硬件中斷進(jìn)行管理,以往人們只能通過(guò)繁瑣的api函數(shù)或visualc++標(biāo)準(zhǔn)通訊函數(shù)來(lái)控制各種硬件,現(xiàn)在vb6.0提供了一個(gè)activex控件——microsoft communication control,version 6.0,稱為mscomm控件,利用它可以方便地進(jìn)行計(jì)算機(jī)串口的通訊管理。mscomm控件有許多屬性,其中與串口有關(guān)的重要屬性有:
commport
設(shè)置串口號(hào),類型short,設(shè)置為1、2、3等,分別表示com1、com2、com3
settings
設(shè)置串口通訊參數(shù)(b、p、d、s),類型string ,b表示波特率,p表示奇偶校驗(yàn)(n—無(wú)校驗(yàn),e—偶校驗(yàn),o—奇校驗(yàn),m—符號(hào)校驗(yàn),s—空格校驗(yàn)),d表示有效數(shù)據(jù)位數(shù),s表示停止位數(shù)
portopen
設(shè)置或返回通信端口狀態(tài),類型bool;
inputmode
從接收緩沖區(qū)讀取數(shù)據(jù)格式,類型variant,設(shè)置為0時(shí)表示字符串格式,設(shè)置為1時(shí)表示二進(jìn)制格式
input
設(shè)置從緩沖區(qū)中讀取數(shù)據(jù),類型long;
output
向發(fā)送緩沖區(qū)中寫入數(shù)據(jù),類型long;
inputlen
設(shè)置或返回input 每次讀取的字節(jié)數(shù),類型short;
rthreshold
設(shè)置返回要接收的字符數(shù),類型short;
sthreshold
設(shè)置并返回發(fā)送緩沖區(qū)中允許的zui少字符數(shù),類型short;
commevent
串口事件,類型short;
inputmode 使程序方便地選擇從緩沖區(qū)讀取數(shù)據(jù)格式。當(dāng)串口接收到信息時(shí)mscomm 控件提供兩種處理方法,一種為查詢方式,一種為事件響應(yīng)方式,利用setcommevent()函數(shù)設(shè)置串口響應(yīng)事件。當(dāng)響應(yīng)事件發(fā)生時(shí),系統(tǒng)會(huì)激活oncomm()事件。在oncomm()事件中添加用戶處理代碼,則可實(shí)現(xiàn)類似中斷的串口事件處理。
五、 用vb6.0實(shí)現(xiàn)對(duì)流量計(jì)積算儀表的串行通訊控制:
在windows9x vb6.0編程環(huán)境下,新建工程引用mscomm通訊控件,在窗體中至少添加以下幾個(gè)基本控件:
1、 1個(gè)mscomm控件,控制名為mscomm1,用于軟件對(duì)串口的訪問(wèn);
2、 兩個(gè)定時(shí)器控件,名為(timperiodic和timnonperiodic),timperiodic 用于使pc機(jī)定時(shí)向各儀表發(fā)送周期性命令,使其定時(shí)回傳實(shí)時(shí)數(shù)據(jù);timnonperiodic 用于控制兩次非周期性指令傳送之間的時(shí)間間隔;
3、 1個(gè)非周期性命令發(fā)送按鈕cmdnonperiodic,用于非周期性指令的傳送啟動(dòng);
4、若干個(gè)用于顯示儀表參數(shù)的文本框和設(shè)置儀表參數(shù)的對(duì)話框;
監(jiān)控軟件的核心是如何讀取和處理現(xiàn)場(chǎng)儀表的實(shí)時(shí)數(shù)據(jù),編程時(shí)應(yīng)注意以下幾個(gè)問(wèn)題:
①、 主機(jī)采用輪詢方式訪問(wèn)從機(jī),從機(jī)應(yīng)答到發(fā)送完數(shù)據(jù)有一定的時(shí)間間隔,一般設(shè)定為2—3秒;
②、 由于采用一個(gè)串口和半雙工通訊方式,一方發(fā)送數(shù)據(jù)時(shí)另一方必須等待接收,因此在發(fā)送非周期性命令時(shí),必須停止輪詢,否則會(huì)發(fā)生數(shù)據(jù)包碰撞,使通訊失?。?br>③、 主機(jī)呼叫從機(jī)無(wú)應(yīng)答時(shí),要有報(bào)警設(shè)置,提示通訊出錯(cuò),一般設(shè)置3次呼叫無(wú)應(yīng)答后,即可停止呼叫,提示通訊出錯(cuò),跳過(guò)此從機(jī)繼續(xù)執(zhí)行;
④、 當(dāng)從機(jī)故障或停運(yùn)時(shí),應(yīng)可自動(dòng)跳過(guò)對(duì)此從機(jī)輪詢,以節(jié)省輪詢時(shí)間,并在顯示窗口提示,同時(shí)寫入故障記錄。
下面給出讀取和處理現(xiàn)場(chǎng)儀表數(shù)據(jù)時(shí)的源代碼,供參考:
5.1 窗體中各控件初始設(shè)置:
sub form-load()
mscomm1,commport=2 //選用com2口通訊
mscomm1,setting=“9600,n,8,1 //設(shè)置通訊參數(shù)
mscomm1,inputlen=0 //input將讀取緩沖區(qū)全部?jī)?nèi)容
mscomm1,inputlensize=1024 //設(shè)置接收緩沖區(qū)大小
mscomm1,portopen=true n //打開通訊端口
mscomm1,inbuffercount=0 //清除發(fā)送緩沖區(qū)
mscomm.outbuffercount=0 //清除接收緩沖區(qū)
timnonperiodic.interval=3000 //設(shè)置3秒定時(shí)間間隔
timnonperiodic.interval=500 //設(shè)置0.5秒定時(shí)間間隔
cmdpressed=false //命令按鈕在未激活狀態(tài)
duringperiodic=false //周期命令傳輸未開始
duringnonperiodic=false //非周期命令傳輸未開始
end sub
5.2 周期性命令的發(fā)送:
sub timperiodic_timer()
if duringnonperiodic=true then exit sub //非周期命令數(shù)據(jù)傳送未結(jié)束退出過(guò)程
duringperiodic=true //周期命令準(zhǔn)許發(fā)送
call send date (periodic_command) //發(fā)送周期性命令
mscomm1.rthreshold=r_periopie_byte //接收字節(jié)后引發(fā)oncommgk 事件
end sub
5.3 非周期命令的發(fā)送
sub cmdnomperiodic_click()
cmdpressed=true
//允許發(fā)送
end sub
sub timnoperiodic_timer()
//發(fā)送周期性命令
if duringperiodic=true or cmdpressed=false then exit sub
//周期性命令傳送未結(jié)束或本次傳送未被允許時(shí),退出本過(guò)程
cmdpressed=false
//發(fā)送命令按鈕恢復(fù)禁止
call senddate(noperiodic_command)
//發(fā)送命令
mscomm1.rthreshold=r_nonperiodic_byte
//接收字節(jié)后引發(fā)oncomm事件
5.4 數(shù)據(jù)的接收和處理:
流量計(jì)積算儀表回傳數(shù)據(jù)時(shí)即可在主機(jī)上引發(fā)oncomm()事件,在此事件處理函數(shù)中,首先判斷接收數(shù)據(jù)的完整性,然后將數(shù)據(jù)一次全部讀到所定義的變量參數(shù)中,根據(jù)流量計(jì)通訊協(xié)議中定義的內(nèi)容,分別取出各個(gè)字節(jié),解析出意義,在屏幕上顯示,同時(shí)利用office自帶的access數(shù)據(jù)庫(kù),在vb監(jiān)控程序中加入data控件,將數(shù)據(jù)存入數(shù)據(jù)庫(kù)中,使用vb的報(bào)表功能即可產(chǎn)生日、月、年報(bào)表,同時(shí)可以通過(guò)編程將數(shù)據(jù)發(fā)往企業(yè)內(nèi)部主數(shù)據(jù)庫(kù),實(shí)現(xiàn)能源計(jì)量數(shù)據(jù)的自動(dòng)上報(bào)。
六、結(jié)語(yǔ):
本文利用vb6.0下的activex控件實(shí)現(xiàn)了在windows9x環(huán)境下,單臺(tái)pc與多臺(tái)流量計(jì)的通訊監(jiān)控。本系統(tǒng)在寶鋼集團(tuán)調(diào)試系統(tǒng)中成功使用,實(shí)現(xiàn)了分散計(jì)量點(diǎn)數(shù)據(jù)的自動(dòng)采集、匯總與上報(bào),及時(shí)反應(yīng)出生產(chǎn)中能源計(jì)量數(shù)據(jù),為生產(chǎn)的成本控制起到了積極作用,整個(gè)系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,無(wú)需購(gòu)置價(jià)格昂貴的組態(tài)軟件,方便、靈活,具有較好的實(shí)際價(jià)值和使用性。
參考文獻(xiàn):
1、范逸文、陳立元 visual basic與rs-232串行通信控制[m],清華大學(xué)出版社,2002年。
2、王仲文等釋,精通串行通信[m],北京電子工業(yè)出版社,1995年。
3、(美)steven holzner.visual basic 6.0 技術(shù)內(nèi)幕,機(jī)械工業(yè)出版社[m],1999。
4、tlxz系列流量計(jì)說(shuō)明書,2002年