關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于VC++的制瓶機微機控制系統的串口通信

        基于VC++的制瓶機微機控制系統的串口通信

        作者: 時間:2010-05-08 來源:網絡 收藏
        引言

        制瓶機的基本功能是控制制瓶機的各個機械動作,使其按照設定程序進行工作。為了實現主機與下位機之間的控制操作和數據管理,需要通過連接具有數據采集和自動控制功能的下位機,然后由操作員通過操作上位機管理軟件將操作命令傳遞給下位機來完成各種控制和管理工作,因此,技術是制瓶機開發的關鍵技術之一。

        環境下的制瓶機中,對于PC上位機的程序來說,其編程方法主要有三種:使用++提供的MSComm控件實現串口通信、某個串口通信C++類、API的串口通信。對于簡單的串行口操作來說,前兩種實現起來相對容易,使用也較方便、控制簡單。但是,對于較為復雜的串行口操作,它則不夠靈活。而API的串口編程方法則功能強大,控制手段更為自由靈活,可以編寫出高效、功能強大的通信程序。對下位機來說,由于存儲量有限,如果要存儲大量數據必定會產生丟失現象,而將數據存儲到上位機的數據庫中,則可以彌補這個問題。因為++提供了多種數據庫訪問技術,例如ODBC、OLEDB、ADO等,其中ADO技術是基于OLEDB的訪問接口,它繼承了OLEDB技術的優點,并對OLEDB的接口作了封裝,且定義了ADO對象,故可使程序開發得到簡化,且基于ADO技術的應用程序可以通過一致的接口來訪問各種各樣的數據,同時也有利于程序的移植和擴充。

        基于以上分析考慮,筆者重點論述了在VC++下如何使用API函數和ADO數據庫編程技術來實現數據的實時采集,同時將數據實時保存到數據庫中,從而完成制瓶機微機控制系統的主機與下位機間數據的實時操作與顯示的具體方法。

        利用WindowsAPI函數實現串口通信

        在Windows環境下,串口是系統資源的一部分,當數據從CPU經過串行端口發送出去時,字節數據將轉換為串行位;在接收數據時,串行的位又將被轉換為字節數據。應用程序要使用串口進行通信,就必須在使用之前向操作系統提出資源申請(打開串口),還要設置通訊的串口地址、波特率、奇偶校驗、數據位和停止位等相關配置,通信完成后,還必須釋放資源(關閉串口)。

        打開串口

        串口通信程序以調用CreatFile()函數開始,該函數的返回值是一個句柄。可在隨后的其它端口操作中使用。一旦端口處于打開狀態,就可以自動分配一個發送/接收緩沖區,當然,也可以通過調SetComm()函數來改變發送/接收緩沖區的大小。

        1.2配置串口

        串口打開成功后。接著應進行串口的初始化,以配置串口的通信參數,如波特率、數據位數、停止位、校驗位等。修改這些參數可使用設備控制塊DCB(Device Control Block)。DCB是個復雜的結構,有近30個數據成員;但是,對于采用3線方式的串行通信來說,DCB結構中的大部分參數可以不用,只需要設置如波特率、數據位數、停止位、校驗位等幾個關鍵的參數就可以正常工作了。同時Windows提供有GetCommState()函數以獲取串行接口的當前配置,故可使用SetCommState ()來重新配置串行接口的各個參數。

        1.3串口的讀/寫操作

        通過程序可以使用Win32API中ReadFile()函數從串口中讀取數據,或使用WriteFile()函數向串口寫入數據。如在串行接口通信中發生錯誤(如發生終端出錯、奇偶校驗等錯誤),I/O操作將會終止。此時,如果程序要進一步執行串行接口的I/O操作,則必須調用ClearCommError()函數來對串行接口進行恢復。

        ClearCommError ()函數有兩個作用:第一是清除錯誤條件;第二是確定串行接口通信狀態。另外,對于串行接口,系統為其提供有一組通信事件及其相應的處理函數。Windows系統可在進程中監視發生在串行接口中的這組事件,因此,應用程序在不檢查端口狀態的情況下就可以知道某些條件何時發生。通過使用這些事件,應用程序就無需為接收字節而連續不斷地檢測端口,從而節省CPU時間。

        關閉串口

        在程序執行完畢后,退回Windows環境時,通常應關閉串口,以便其它程序使用。可以利用函數C10seHandle(Handle hObject)來停止一切串口的輸入輸出,參數hObject是CreateFile函數返回時,標志串口的通信句柄。

        2 VC++中的ADO數據庫使用

        初始化OLE/COM庫環境

        創建一個標準的MFC AppWizard(exe)應用程序后,還要在應用程序類的InitInstance函數中初始化OLE/COM庫(因為ADO庫是一個COMDLL庫),其代碼如下:



        引入ADO庫文件

        使用ADO前,必須在工程的stdafx.h文件里直接引入符號#import來引AADO庫文件,以使編譯器能正確編譯。其代碼如下:



        2.3 利用智能指針進行數據庫操作

        ADO庫包含有3個智能指針:_ConnectionPtr、_CommandPtr、_RecordsetPtr。其中_ConnectionPtr通常用來打開、關閉一個庫連接。為進行庫連接,可先創建一個實例指針,再用Open打開一個庫連接。下面以連接數據庫db.mdb為例來加以說明:

        _ConnectionPtr connectPtr;
        connectPtr.CreateInstance(ADODB.Connection);//創建一個實例指針
        connectPtr->Open(Provider=Microsoft.Jet.OLE.DB.4.0;DataSource=db.mdb, , ,
        adModeUnKnown);//用Open打開一個庫連接


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黎城县| 巨鹿县| 调兵山市| 阜阳市| 阿拉善左旗| 小金县| 栾城县| 洛南县| 浦城县| 盖州市| 体育| 安远县| 拉孜县| 遵义市| 北安市| 佛坪县| 五峰| 仙桃市| 乳源| 通河县| 焦作市| 台中市| 北宁市| 夏津县| 辉县市| 宽城| 太仆寺旗| 德格县| 丰城市| 武隆县| 博白县| 蒙山县| 永嘉县| 无为县| 东乌珠穆沁旗| 太仓市| 芮城县| 左权县| 岐山县| 土默特左旗| 荣成市|