在我室研制的某型測控系統(tǒng)中,,遇到一彈丸狀物體的初速測量要求,速度范圍在0~150m/s,要求測速模塊實(shí)現(xiàn)成本低,、可靠性高,,測速數(shù)據(jù)送上位機(jī)顯示。
目前科研生產(chǎn)中采用的速度測量方法可分為兩類,;直接測量法和間接測量法兩大類,。直接測量法是通過某種測量原理或效應(yīng)直接獲得速度量, 如多普勒測速儀、空間濾波測速等,。這種方法的最大優(yōu)點(diǎn)是反應(yīng)快,、可測量瞬時(shí)速度,但設(shè)備成本高,,且受到大氣物理環(huán)境的限制,。間接測量法是測量目標(biāo)的移動距離和時(shí)間, 通過計(jì)算得到速度量, 如光電測速、光柵測速,、磁柵測速和圖像測速等,,用于測量小型彈丸的天幕法和光幕法測速系統(tǒng)、用于車輛測速的激光測速儀,,以及用于生產(chǎn)流水線上的光電脈沖測速方法等等,。
根據(jù)本系統(tǒng)的特點(diǎn),我室采用了基于光電脈沖的間接測量方法,,構(gòu)建了基于AT89C51單片機(jī)測速系統(tǒng),,并采用DDE技術(shù)、VB和組態(tài)王實(shí)現(xiàn)速度信息的上位機(jī)顯示,,滿足了成本低,、可靠性好的測速要求,;此外本文提出的單片機(jī)與上位機(jī)數(shù)據(jù)通信方法為多種工控軟件和非通用性設(shè)備的數(shù)據(jù)交換問題提供了思路。
2. 單片機(jī)測速模塊的實(shí)現(xiàn)
a) 測速原理
在本系統(tǒng)中,,兩對光電對射管布置在彈丸的通過路徑上,,光電對射管間距為S,當(dāng)彈丸經(jīng)過遮蔽光電管1,2時(shí),,光電管1,2產(chǎn)生一個上升沿或下降沿,,以光電管1的上升沿或下降沿作為單片機(jī)計(jì)數(shù)器的啟動脈沖,啟動計(jì)數(shù)器開始記時(shí),,光電管2的上升沿或下降沿作為單片機(jī)計(jì)數(shù)器的停止脈沖,,計(jì)數(shù)器停止記時(shí)。此時(shí),,得到計(jì)數(shù)器的記時(shí)值n,。將值n傳送至上位機(jī),已知單片機(jī)的機(jī)器周期為T,,則,,可在上位機(jī)內(nèi)計(jì)算出彈丸在定距s內(nèi)的平均速度V,為V=S/nT。見如下圖1,。
b) 測速部分硬件實(shí)現(xiàn)
如下圖2硬件原理示意圖,,光電對射管Q1和Q2分別接入AT89C51的外部中斷0和1引腳相聯(lián),Q1和Q2均為遮斷式對射管(無遮斷時(shí)導(dǎo)通,,遮斷時(shí)截止),。INT0和INT1均設(shè)置為下降沿觸發(fā)。在INT0中斷處理程序中,,啟動AT89C51內(nèi)計(jì)數(shù)器T0開始計(jì)數(shù),,在INT1中斷處理程序中,計(jì)數(shù)器T0停止計(jì)數(shù),。計(jì)數(shù)值暫存于單片機(jī)寄存器內(nèi),。當(dāng)單片機(jī)接收到上位機(jī)發(fā)出的取數(shù)指令時(shí),單片機(jī)通過串口將寄存器內(nèi)計(jì)數(shù)值發(fā)送至上位機(jī)進(jìn)行處理,。
3. 單片機(jī)與上位機(jī)通信
本例上位機(jī)控制程序采用組態(tài)王組態(tài)軟件(Kingview 6.5版)編寫,,但其為數(shù)據(jù)采集和控制提供的底層硬件設(shè)備的驅(qū)動僅是針對知名廠商的板卡和模塊。因此,,針對自行開發(fā)的數(shù)據(jù)采集模塊,,需要編寫組態(tài)王與單片機(jī)串口通信驅(qū)動程序。在本例中,,應(yīng)用DDE方式實(shí)現(xiàn)組態(tài)王和VB進(jìn)行數(shù)據(jù)交換,,通過編寫串口通信程序?qū)崿F(xiàn)VB和單片機(jī)的通信,完成整個通信流程,。
a) 系統(tǒng)數(shù)據(jù)流程
動態(tài)數(shù)據(jù)交換(dynamic data exchange ,簡稱DDE),,它是Windows 提供的一種基于消息的進(jìn)程間通信技術(shù)協(xié)議[2],。其實(shí)質(zhì)是在兩個應(yīng)用程序之間建立一個數(shù)據(jù)通道(channel),,通過特定的會話過程,,由windows作中介,實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸。DDE應(yīng)用程序以對話(conversations)的方式實(shí)現(xiàn)數(shù)據(jù)共享,,會話采用客戶/ 服務(wù)器模式,,啟動會話并要求接收數(shù)據(jù)的進(jìn)程是客戶進(jìn)程(client),而響應(yīng)客戶請求提供數(shù)據(jù)的進(jìn)程是服務(wù)器進(jìn)程( server),。組態(tài)王采用DDE方式和VB進(jìn)行數(shù)據(jù)交換,,同時(shí)通過編寫串口通信程序?qū)崿F(xiàn)VB和單片機(jī)的通信。整個系統(tǒng)的數(shù)據(jù)交換流程如圖3所示,。
b) 系統(tǒng)實(shí)現(xiàn)
系統(tǒng)實(shí)現(xiàn)分為兩個部分:VB與組態(tài)王的數(shù)據(jù)交換以及單片機(jī)與VB的數(shù)據(jù)交換,。
i. VB與組態(tài)王通過DDE鏈接的數(shù)據(jù)交換
DDE對話的內(nèi)容是通過應(yīng)用程序名(application)、主題( topic)和項(xiàng)目(item) 3 個標(biāo)示名來約定的,。其中,,應(yīng)用程序名是進(jìn)行DDE對話的雙方的名稱,組態(tài)王運(yùn)行系統(tǒng)的程序名是“VIEW”,,VB程序使用的是可執(zhí)行文件的名稱,。主題是指被討論的數(shù)據(jù)域(domain)。對于組態(tài)王來說,,主題規(guī)定為“tagname”,,VB程序的主題由窗體的LinkTopic屬性值指定。項(xiàng)目是指被討論的特定數(shù)據(jù)對象,,在組態(tài)王的數(shù)據(jù)辭典中定義I/O變量的同時(shí),,也定義項(xiàng)目名稱。對VB程序而言,,項(xiàng)目是具有文本屬性控件的名稱[3],。
VB作為客戶端程序從組態(tài)王中得到數(shù)據(jù)時(shí),首先需要在組態(tài)王中定義DDE設(shè)備,然后在組態(tài)王的數(shù)據(jù)庫(數(shù)據(jù)辭典)中按照預(yù)先需要通訊的變量點(diǎn)數(shù)和變量類型建立I/O變量,定義變量的初始值、最大值,、連接設(shè)備和項(xiàng)目名,,還需要在VB中定義控件的屬性和方法。一般的設(shè)置如下:
Control.LinkTopic=服務(wù)器程序名|主題名
Control.LinkItem=項(xiàng)目名
Control.LinkMode=0,1,2,3 (其中0=關(guān)閉DDE,1=熱鏈接,2=冷鏈接,3=通告鏈接)
Control為VB應(yīng)用程序中特定的文本框,、標(biāo)簽框或圖片框的名稱,。
VB作為服務(wù)器程序向組態(tài)王提供數(shù)據(jù)時(shí),首先要在組態(tài)王中設(shè)置服務(wù)器程序的3個標(biāo)志名,然后把VB 應(yīng)用程序中提供數(shù)據(jù)的窗體的LinkMode屬性設(shè)置為1。例如,,將VB中的txt to Speed 文本框控件中的數(shù)據(jù)傳給組態(tài)王中的I/O變量Speed ,其實(shí)現(xiàn)方法如下:
在組態(tài)王中建立一個名為VBDDE的DDE設(shè)備,,服務(wù)程序名為vbdde,話題名為FormTopic,,數(shù)據(jù)交換方式為標(biāo)準(zhǔn)Windows DDE交換,。新建一個I/O變量Speed,,將其連接設(shè)備名定義為VBDDE,項(xiàng)目名設(shè)為txt to Speed,。在VB中,將窗體VBDDE的LinkMode屬性設(shè)置為1(source),,LinkTopic屬性設(shè)置為FormTopic,然后編譯為可執(zhí)行文件vbdde.exe,,即可實(shí)現(xiàn)與組態(tài)王的通信,。
ii. VB與單片機(jī)的數(shù)據(jù)交換
本例采用MSComm控件實(shí)現(xiàn)VB與單片機(jī)之間的數(shù)據(jù)交換,具有程序?qū)崿F(xiàn)簡便,、程序模塊化,、工作可靠等優(yōu)點(diǎn),并能滿足多數(shù)情況下的工控要求,。使用MSComm控件主要是通過事件來處理串行口的交互,。控件的OnComm事件負(fù)責(zé)捕獲或處理這些通訊事件和通訊錯誤,。在實(shí)際應(yīng)用中,,一個MSComm控件和一個串行口一一對應(yīng),所以如果要處理多個串行口的話,,必須有相應(yīng)數(shù)量的控件與之對應(yīng),。
利用MSComm控件進(jìn)行串口通信的具體操作和具體的程序代碼已經(jīng)有很多論述,在這里強(qiáng)調(diào)兩點(diǎn):
1. 無論發(fā)送或者接收,,都需要用一個Variant變量作中介,;
2. 使用MSComm控件的Input及Output屬性來接收或者傳輸文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)的方法不同:如果發(fā)送一個ANSI字符串到串口,可以以文本數(shù)據(jù)的形式發(fā)送;當(dāng)要傳輸二進(jìn)制數(shù)據(jù)時(shí),,由于Output屬性支持的變量類型為Variant類型,所以發(fā)送二進(jìn)制數(shù)據(jù)時(shí)必須傳遞一個包含字節(jié)數(shù)組的Variant到Output屬性,。使用MSComm控件的Input屬性讀取數(shù)據(jù)時(shí),如果接收的數(shù)據(jù)類型為文本數(shù)據(jù),,Input屬性通過一個Variant返回文本數(shù)據(jù),;如果接收的數(shù)據(jù)模式采用二進(jìn)制形式,用Input屬性讀取數(shù)據(jù)時(shí),,不能直接賦值給Byte類型變量,,只能通過先賦值給一個Variant類型變量,返回一個二進(jìn)制數(shù)據(jù)的數(shù)組,,再轉(zhuǎn)換保存到Byte類型數(shù)組變量中,。
4. 結(jié)束語
本文論述的基于單片機(jī)的速度測量方法已在工程測控系統(tǒng)中得到了應(yīng)用,適用于中低速物體的測量,,具有良好的使用效果,,具有實(shí)現(xiàn)成本低、可靠性好,、精度良好的優(yōu)點(diǎn),。此外,,本文提出的單片機(jī)與上位機(jī)數(shù)據(jù)通信方法為多種工控軟件和非通用性設(shè)備的數(shù)據(jù)交換問題提供了思路。還需注意的一點(diǎn)是:通過控件MSCOMM控件的input和out2put屬性可以很方便地接受和發(fā)送串口緩沖區(qū)的數(shù)據(jù),,但要編制比較完善的通訊應(yīng)用程序,還需要進(jìn)行更深入的研究,比如通過使用“握手”的機(jī)制來增強(qiáng)通訊的安全性和穩(wěn)定性,另外通過數(shù)據(jù)的重復(fù)發(fā)送達(dá)到收發(fā)數(shù)據(jù)的準(zhǔn)確性等等.