500)this.style.width=500;" border="0" />
b) 測速部分硬件實現(xiàn)
如下圖2硬件原理示意圖,光電對射管Q1和Q2分別接入AT89C51的外部中斷0和1引腳相聯(lián),Q1和Q2均為遮斷式對射管(無遮斷時導通,遮斷時截止)。INT0和INT1均設置為下降沿觸發(fā)。在INT0中斷處理程序中,啟動AT89C51內(nèi)計數(shù)器T0開始計數(shù),在INT1中斷處理程序中,計數(shù)器T0停止計數(shù)。計數(shù)值暫存于單片機寄存器內(nèi)。當單片機接收到上位機發(fā)出的取數(shù)指令時,單片機通過串口將寄存器內(nèi)計數(shù)值發(fā)送至上位機進行處理。
500)this.style.width=500;" border="0" />
3. 單片機與上位機通信
本例上位機控制程序采用組態(tài)王組態(tài)軟件(Kingview 6.5版)編寫,但其為數(shù)據(jù)采集和控制提供的底層硬件設備的驅(qū)動僅是針對知名廠商的板卡和模塊。因此,針對自行開發(fā)的數(shù)據(jù)采集模塊,需要編寫組態(tài)王與單片機串口通信驅(qū)動程序。在本例中,應用DDE方式實現(xiàn)組態(tài)王和VB進行數(shù)據(jù)交換,通過編寫串口通信程序?qū)崿F(xiàn)VB和單片機的通信,完成整個通信流程。
a) 系統(tǒng)數(shù)據(jù)流程
動態(tài)數(shù)據(jù)交換(dynamic data exchange ,簡稱DDE),它是Windows 提供的一種基于消息的進程間通信技術(shù)協(xié)議[2]。其實質(zhì)是在兩個應用程序之間建立一個數(shù)據(jù)通道(channel),通過特定的會話過程,由windows作中介,實現(xiàn)數(shù)據(jù)的雙向傳輸。DDE應用程序以對話(conversations)的方式實現(xiàn)數(shù)據(jù)共享,會話采用客戶/ 服務器模式,啟動會話并要求接收數(shù)據(jù)的進程是客戶進程(client),而響應客戶請求提供數(shù)據(jù)的進程是服務器進程( server)。組態(tài)王采用DDE方式和VB進行數(shù)據(jù)交換,同時通過編寫串口通信程序?qū)崿F(xiàn)VB和單片機的通信。整個系統(tǒng)的數(shù)據(jù)交換流程如圖3所示。
500)this.style.width=500;" border="0" />
b) 系統(tǒng)實現(xiàn)
系統(tǒng)實現(xiàn)分為兩個部分:VB與組態(tài)王的數(shù)據(jù)交換以及單片機與VB的數(shù)據(jù)交換。
i. VB與組態(tài)王通過DDE鏈接的數(shù)據(jù)交換
DDE對話的內(nèi)容是通過應用程序名(application)、主題( topic)和項目(item) 3 個標示名來約定的。其中,應用程序名是進行DDE對話的雙方的名稱,組態(tài)王運行系統(tǒng)的程序名是“VIEW”,VB程序使用的是可執(zhí)行文件的名稱。主題是指被討論的數(shù)據(jù)域(domain)。對于組態(tài)王來說,主題規(guī)定為“tagname”,VB程序的主題由窗體的LinkTopic屬性值指定。項目是指被討論的特定數(shù)據(jù)對象,在組態(tài)王的數(shù)據(jù)辭典中定義I/O變量的同時,也定義項目名稱。對VB程序而言,項目是具有文本屬性控件的名稱[3]。
VB作為客戶端程序從組態(tài)王中得到數(shù)據(jù)時,首先需要在組態(tài)王中定義DDE設備,然后在組態(tài)王的數(shù)據(jù)庫(數(shù)據(jù)辭典)中按照預先需要通訊的變量點數(shù)和變量類型建立I/O變量,定義變量的初始值、最大值、連接設備和項目名,還需要在VB中定義控件的屬性和方法。一般的設置如下:
Control.LinkTopic=服務器程序名|主題名
Control.LinkItem=項目名
Control.LinkMode=0,1,2,3 (其中0=關(guān)閉DDE,1=熱鏈接,2=冷鏈接,3=通告鏈接)
Control為VB應用程序中特定的文本框、標簽框或圖片框的名稱。
VB作為服務器程序向組態(tài)王提供數(shù)據(jù)時,首先要在組態(tài)王中設置服務器程序的3個標志名,然后把VB 應用程序中提供數(shù)據(jù)的窗體的LinkMode屬性設置為1。例如,將VB中的txt to Speed 文本框控件中的數(shù)據(jù)傳給組態(tài)王中的I/O變量Speed ,其實現(xiàn)方法如下:
在組態(tài)王中建立一個名為VBDDE的DDE設備,服務程序名為vbdde,話題名為FormTopic,數(shù)據(jù)交換方式為標準Windows DDE交換。新建一個I/O變量Speed,將其連接設備名定義為VBDDE,項目名設為txt to Speed。在VB中,將窗體VBDDE的LinkMode屬性設置為1(source),LinkTopic屬性設置為FormTopic,然后編譯為可執(zhí)行文件vbdde.exe,即可實現(xiàn)與組態(tài)王的通信。
ii. VB與單片機的數(shù)據(jù)交換
本例采用MSComm控件實現(xiàn)VB與單片機之間的數(shù)據(jù)交換,具有程序?qū)崿F(xiàn)簡便、程序模塊化、工作可靠等優(yōu)點,并能滿足多數(shù)情況下的工控要求。使用MSComm控件主要是通過事件來處理串行口的交互??丶腛nComm事件負責捕獲或處理這些通訊事件和通訊錯誤。在實際應用中,一個MSComm控件和一個串行口一一對應,所以如果要處理多個串行口的話,必須有相應數(shù)量的控件與之對應。
利用MSComm控件進行串口通信的具體操作和具體的程序代碼已經(jīng)有很多論述,在這里強調(diào)兩點:
1. 無論發(fā)送或者接收,都需要用一個Variant變量作中介;
2. 使用MSComm控件的Input及Output屬性來接收或者傳輸文本數(shù)據(jù)或二進制數(shù)據(jù)的方法不同:如果發(fā)送一個ANSI字符串到串口,可以以文本數(shù)據(jù)的形式發(fā)送;當要傳輸二進制數(shù)據(jù)時,由于Output屬性支持的變量類型為Variant類型,所以發(fā)送二進制數(shù)據(jù)時必須傳遞一個包含字節(jié)數(shù)組的Variant到Output屬性。使用MSComm控件的Input屬性讀取數(shù)據(jù)時,如果接收的數(shù)據(jù)類型為文本數(shù)據(jù),Input屬性通過一個Variant返回文本數(shù)據(jù);如果接收的數(shù)據(jù)模式采用二進制形式,用Input屬性讀取數(shù)據(jù)時,不能直接賦值給Byte類型變量,只能通過先賦值給一個Variant類型變量,返回一個二進制數(shù)據(jù)的數(shù)組,再轉(zhuǎn)換保存到Byte類型數(shù)組變量中。
4. 結(jié)束語
本文論述的基于單片機的速度測量方法已在工程測控系統(tǒng)中得到了應用,適用于中低速物體的測量,具有良好的使用效果,具有實現(xiàn)成本低、可靠性好、精度良好的優(yōu)點。此外,本文提出的單片機與上位機數(shù)據(jù)通信方法為多種工控軟件和非通用性設備的數(shù)據(jù)交換問題提供了思路。還需注意的一點是:通過控件MSCOMM控件的input和out2put屬性可以很方便地接受和發(fā)送串口緩沖區(qū)的數(shù)據(jù),但要編制比較完善的通訊應用程序,還需要進行更深入的研究,比如通過使用“握手”的機制來增強通訊的安全性和穩(wěn)定性,另外通過數(shù)據(jù)的重復發(fā)送達到收發(fā)數(shù)據(jù)的準確性等等.
北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關(guān)鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心要問機器人公司哪家強,波士頓動力絕對是其中的佼佼者。近來年該公司在機器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開發(fā)的機器人會后空翻,自主爬樓梯等。這不,波士頓動力又發(fā)布了其機器人組團跳男團舞的新視頻,表演的機器人包括...
關(guān)鍵字: 機器人 BSP 工業(yè)機器人 現(xiàn)代汽車