咨詢電話
ENGLISH0755-88840386發(fā)布時(shí)間:2020-12-15 16:24:10 |來源:網(wǎng)絡(luò)轉(zhuǎn)載
1.前言
VB作為Windows環(huán)境下的可視化編程語言開發(fā)系統(tǒng)。不但提供了良好的界面設(shè)計(jì)能力,而且在微機(jī)串口通信方面也有很強(qiáng)的功能。采用VB開發(fā)WinodW8環(huán)境下的數(shù)據(jù)采集和工業(yè)控制應(yīng)用軟件,其界面設(shè)計(jì)簡(jiǎn)潔。編程工作量較小,使用十分方便。
下面給出實(shí)時(shí)數(shù)據(jù)采集應(yīng)用實(shí)例。通過對(duì)“秦港二公司雙架皮帶秤"雙通道實(shí)時(shí)檢測(cè)儀表數(shù)據(jù)通訊系統(tǒng)進(jìn)行分析,解決了數(shù)據(jù)實(shí)時(shí)處理和數(shù)據(jù)解壓?jiǎn)栴},給出了一種開發(fā)微機(jī)通過串口對(duì)工業(yè)儀表進(jìn)行實(shí)時(shí)數(shù)據(jù)采集程序的新方法。
2系統(tǒng)的總體結(jié)構(gòu)圖
系統(tǒng)的總體結(jié)構(gòu)如圖1所示.
3 皮帶秤儀表通訊協(xié)議及數(shù)據(jù)格式
該實(shí)時(shí)檢測(cè)儀表接兩路高精度壓力傳感器,用于測(cè)量前后兩秤的置量.該儀表帶有一個(gè)9針的RS一232C串口,能與微機(jī)進(jìn)行串口數(shù)據(jù)通訊,實(shí)時(shí)傳送檢測(cè)數(shù)據(jù),通過微機(jī)軟件處理可實(shí)現(xiàn)工業(yè)實(shí)時(shí)監(jiān)控.
該儀表的串口數(shù)據(jù)通訊協(xié)議是·數(shù)據(jù)傳輸速率為9600bps,1位開始位,8位數(shù)據(jù)位·1位停止位,無奇偶校驗(yàn)位.儀表數(shù)據(jù)傳輸每幀數(shù)據(jù)的格式如下。
開始標(biāo)志l位,為二進(jìn)制常數(shù)d7HI秤號(hào)2位,16進(jìn)制,表示不同的秤l以后的數(shù)據(jù)為10進(jìn)制包括總累計(jì)量/單次累計(jì)量8位t前通道總累計(jì)量/前通道單次累計(jì)量8位,盾通道總累計(jì)量/后通道單次累計(jì)量8位-流量5位I故障號(hào)1位,工作狀態(tài)l位I運(yùn)行狀態(tài)1位,自檢誤差l位。
4主要技術(shù)及算法
(1)用MSComm控件實(shí)現(xiàn)微機(jī)串口的數(shù)據(jù)通MSComm控件是Microsoft提供的擴(kuò)展控件,用于支持VB程序?qū)Υ诘脑L問.該控制“隱藏”了大部分串口通訊的底層運(yùn)行過程和許多煩瑣的處理過程,同時(shí)支持查詢方法和事件驅(qū)動(dòng)通訊的機(jī)制。事件驅(qū)動(dòng)通訊是交互方式處理串口事務(wù)的一種非常有效的方法,特別適合Windows程序的編寫.在串口通訊過程中,當(dāng)發(fā)送數(shù)據(jù)、收秤秤田l系統(tǒng)總體結(jié)構(gòu)圈到數(shù)據(jù)或產(chǎn)生傳輸錯(cuò)誤時(shí).觸發(fā)MSComm控件的OnComm事件。然后可以通過判斷Corn.mEvent屬性值獲得事件類型,再根據(jù)事件類型進(jìn)行相應(yīng)數(shù)據(jù)處理。因此用其實(shí)現(xiàn)微機(jī)串口的數(shù)據(jù)通訊可以用較少的程序代碼輕松實(shí)現(xiàn)串口的訪問和數(shù)據(jù)通訊。
(2)采用MSComm事件驅(qū)動(dòng)方式采集數(shù)據(jù)
MSComm串口控件數(shù)據(jù)接收方式有以下兩種t
①在OnComm事件中接收數(shù)據(jù).這種方式能充分MSComm控件的特性.OnComm事件還可以檢查和處理通訊錯(cuò)誤·可以通過檢查CommEvent屬性的值來查詢事件和錯(cuò)誤.對(duì)于不定長(zhǎng)數(shù)據(jù)以及對(duì)數(shù)據(jù)進(jìn)行處理比較復(fù)雜的情況,此法不是很方便.
②定時(shí)器輪循法采集數(shù)據(jù)。對(duì)于數(shù)據(jù)包方式收發(fā)數(shù)據(jù)以及不需實(shí)時(shí)響應(yīng)情況,用輪循法更好些.實(shí)際上輪循法最大的好處在于集中處理數(shù)據(jù)而且不太占用CPU。輪循法要注意定時(shí)采集的時(shí)間片段大小I這里用二進(jìn)制收發(fā)模式I使屬性RThreshold、SThreahold為0,屏蔽On.Comm事件。
③本實(shí)時(shí)數(shù)據(jù)采集處理程序采用MSComm事件驅(qū)動(dòng)方式。MSComm--OnComm的事件處理程序只處理comEvReceive事件。
(3)接收數(shù)據(jù)模式設(shè)置設(shè)置
MSComm控件的接收數(shù)據(jù)模式采用=進(jìn)制方式.即InputMode=comlnput ModeBinary,但用Input屬性讀取數(shù)據(jù)時(shí),不能直接賦值給Byte類型變量,只能通過先賦值給一個(gè)Variant類型變量,返回一個(gè)二進(jìn)制數(shù)據(jù)的數(shù)組,再轉(zhuǎn)換保存到Byte類型數(shù)變量中。
(4)添加循環(huán)等待處理
儀表通訊傳輸速率為9600bps。則最快速度為1.0417ms發(fā)送一個(gè)字節(jié)·儀表每秒發(fā)送250個(gè)字節(jié).平均4.0ms發(fā)送一個(gè)字節(jié)。在查詢方式或連續(xù)讀取串口數(shù)據(jù)時(shí)要在程序中添加循環(huán)等待程序,等待接收緩沖區(qū)收到足夠的宇節(jié)才能進(jìn)行數(shù)據(jù)處理.
(5)數(shù)據(jù)實(shí)時(shí)性處理
儀表定時(shí)發(fā)送字節(jié)數(shù)據(jù),微機(jī)只有收到1完整幀數(shù)據(jù)后,才能進(jìn)行數(shù)據(jù)處理.如果微機(jī)在下l幀數(shù)據(jù)接收前能將數(shù)據(jù)計(jì)算處理完畢,則接收緩沖區(qū)內(nèi)只會(huì)保存有一幀效據(jù),不會(huì)存有兩幀以上數(shù)據(jù),接收緩沖區(qū)的大小不會(huì)影響實(shí)時(shí)監(jiān)測(cè)效果(接收緩沖區(qū)大于等于1完整幀長(zhǎng)度),這時(shí)完全可以實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)或?qū)崟r(shí)控制·如果微機(jī)在規(guī)定的時(shí)間內(nèi)不能將數(shù)據(jù)計(jì)算處理完畢,接收緩沖區(qū)設(shè)置的又很大,在數(shù)據(jù)計(jì)算處理完畢前,接收緩沖區(qū)內(nèi)就會(huì)保存有兩幀以上數(shù)據(jù),254而且一次工作時(shí)間越長(zhǎng),綴沖區(qū)內(nèi)滯留數(shù)據(jù)幀就越多.?dāng)?shù)據(jù)采集和數(shù)據(jù)處理之間產(chǎn)生逐漸增大的額外時(shí)間差。當(dāng)接收緩沖區(qū)充滿后,時(shí)間差不再增大,固定在某一值,部分?jǐn)?shù)據(jù)因不能及時(shí)采集到接收緩沖區(qū)中,數(shù)據(jù)產(chǎn)生丟失現(xiàn)象,真實(shí)工作情況就會(huì)和微機(jī)處理結(jié)果產(chǎn)生較大的時(shí)間差,對(duì)實(shí)時(shí)監(jiān)測(cè)和實(shí)時(shí)控制很不利,這種情況下接收緩沖區(qū)的大小就會(huì)影響實(shí)時(shí)監(jiān)測(cè)效果,所以接收緩沖區(qū)設(shè)置不能過大,讓部分?jǐn)?shù)據(jù)丟失,以保證數(shù)據(jù)處理的實(shí)時(shí)性。
本文源于網(wǎng)絡(luò)轉(zhuǎn)載,如有侵權(quán),請(qǐng)聯(lián)系刪除