制瓶機微機控制系統的基本功能是控制制瓶機的各個機械動作,使其按照設定程序進行工作。為了實現主機與下位機之間的控制操作和數據管理,需要通過串口連接具有數據采集和自動控制功能的下位機,然后由操作員通過操作上位機管理軟件將操作命令傳遞給下位機來完成各種控制和管理工作,因此,串口通信技術是制瓶機微機控制系統開發的關鍵技術之一。
在VC環境下的制瓶機微機控制系統中,對于PC上位機的通信程序來說,其串口通信編程方法主要有三種:使用VC++提供的MSComm控件實現串口通信、基于某個串口通信C++類、基于API的串口通信。對于簡單的串行口操作來說,前兩種實現起來相對容易,使用也較方便、控制簡單。但是,對于較為復雜的串行口操作,它則不夠靈活。而基于API的串口編程方法則功能強大,控制手段更為自由靈活,可以編寫出高效、功能強大的通信程序。對下位機來說,由于存儲量有限,如果要存儲大量數據必定會產生丟失現象,而將數據存儲到上位機的數據庫中,則可以彌補這個問題。因為VC++提供了多種數據庫訪問技術,例如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打開一個庫連接
_RecordsetPtr通常會返回一個記錄集,以提供一種簡單的方法來執行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,可以用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。_RecordsetPtr可以用來打開庫內數據表,并對表內的記錄、字段進行操作。也可以先創建一個指針,再用Open打開一個記錄集,然后對記錄集內的記錄、字段進行各種操作,包括添加、刪除、修改等等。
3 制瓶機控制系統的串口通信
制瓶機控制系統的下位機由四個段控板和一個機控板組成,段控板的職責是控制制瓶機一段的所有動作,一般通過20路輸出驅動20個電磁閥來實現;機控板的職責是根據現場機器的狀態,為其它4個段控板提供基準信號和制瓶機的狀態信息。通過上位機可設定不同段控板的電磁閥開閉值和產生基準信號所需要設定的值。制瓶機控制不同產品所對應的設定值也不相同。為了確保下位機運作的準確性,往往需要監控下位機當前狀態和控制下位機不同段控板的單個電磁閥的起停。本系統的段控和機控板的主控芯片選用PIC24FJ64GA008,而上位機與下位機之間的通訊則遵循RS-232協議。
3.1? 獨立串口通信類的創建
創建獨立的串口通信類的方法主要是在應用程序框架下,點擊主菜單中的insert菜單下的NewClass項,并在彈出的對話框中的Class type中選擇Generic Class。這是一種建立沒有繼承的類的方法。創建獨立的串口通信類對串口操作的封裝可以很好地實現各種自定義通信協議下的串口通信,而且符合面向對象的程序設計思想。本系統對串口的打開、初始化、讀寫、上位機發數據到下位機、下位機讀數據到上位機、關閉等相關操作,都封裝在windowsAPI函數寫的獨立串口類CcomPort中。當在每個要用到串口通信的窗體類中引用這個串口類后,就可以方便的使用。本系統是將PIC單片機通過端口COM1與計算機相連接,打開端口COM1的代碼如下:
上位機與下位機之間可以2400 bps/秒的通訊速率傳輸數據,且無奇偶校驗,包括八位數據位和一位停止位。可通過下面的參數來設置DCB參數,從而初始化串口。其具體代碼如下:
DCB dcb;
dcb.BaudRate=CBR_2400;//波特率
deb.fParity=FALSE;//禁止奇偶校驗
dcb.ByteSize=8;
dcb.Parity=NOPARITY;//無校驗
dcb.StopBits=ONESTOPBIT;//一個停止位
3.2? 存取串口命令數據
當上位機與PIC24FJ64GA單片機通過一系列應答聯絡后,單片機將開始向上位機發送存在EEPROM中的數據,從而將按照設定的協議組成的每幀11個字節由上位機一幀一幀地接收,并按字段存人數據庫的相應表中,直到數據通信結束。在數據傳輸過程中,可通過一個循環結構并以查詢方式從串口讀取數據。為了避免因線路不通或通信過程中斷而造成死機,程序中可加入自動退出機制,即在1秒鐘之內沒收到數據,程序自動提示沒有接到數據。在設定好數據庫db.mdb后,可由ADO訪問數據庫來進行串口數據的存取。具體步驟如下:
(1)在窗體類中引用串口類
在窗體類中引用串口類時,如果本窗體類是第一次引用,則定義CcomPort Obj_Commpon;如果在其它的窗口類已經定義過,則定義為extern CCommPort obj_Commport。調用串口類的函數可進行串口的初始化。
(2)發送控制命令給下位機
按照通訊協議發送控制命令給下位機,可告知下位機要跟上位機傳送數據。下位機收到上位機的控制命令數據后,先進行校驗,以檢測上位機的命令是否正確。如果接到的數據是正確的。則返回正確的電磁閥開閉值;如果不正確,下位機則返回控制命令給上位機,告知上位機發送的數據不正確,此后上位機會再次發送控制命令給下位機,如果仍然不正確,則提示通訊出錯,退出本次通信,然后再發送下一個命令。
(3)打開數據庫并進行數據存取
首先打開數據庫的連接。若m_pConnection在程序初始化中已經打開,則可在窗體類中直接調用,然后進行數據的存儲。代碼如下:
保存數據后,上位機再發控制命令給下位機,并開始接收下一條下位機傳遞過來的數據。上位機給下位機發送數據的過程與下位機給上位機發送數據的過程和步驟一樣。退出程序時,關閉串口即可。
4 結束語
串行通信具有實現簡單、使用靈活方便、數據傳輸可靠等優點,因而在工業監控、數據采集和實時控制系統中得到了廣泛應用。本文講述在制瓶機控制系統中,在VC++環境下利用windows-API函數的串口編程技術和ADO數據庫編程技術來實現和控制PIC單片機,以進行數據采集的具體方法。該方法同時會對通訊出錯或通訊堵塞現象進行處理。實踐證明,該方法可提高定時的精確性,從而提高產品的質量和產量。
采用VC++的制瓶機微機控制系統的串口通信
- VC++(26001)
- 串口通信(54799)
相關推薦
采用LabVIEW與PLC實現串級控制系統設計
摘 要:詳細介紹了采用RS232串口完成LabVIEW與PLC之間通訊,并利用該方法,設計了一種基于LabVIEW與PLC的串級控制系統。實驗結果表明:控制系統已達到了預期的設計效果。 關鍵詞
2019-05-07 09:40:03
CH365代碼用VC++平臺的,但CH432里面的參考例程是C語言的,如何轉成VC++?
有點小白,CH365代碼用VC++平臺的,但CH432里面的參考例程是C語言的,如何轉成VC++?
2022-10-10 09:44:06
【NanoPi M2申請】水泥攪拌站自動化控制系統
申請理由:傳統的水泥攪拌站控制系統通常采用工控機+數字I/O板卡的形式,通過VC++及數字I/O板卡驅動程序實現。隨著數字化、智能化車間從概念提出,到逐步實施階段,傳統的控制方法已無法很好的滿足設備
2016-04-27 16:16:42
【云智易申請】基于STM32智能家居遠程控制系統研究
對各家電的控制;3、PC機作為遠程終端,通過以太網實現對開發板的控制;4、采用VC++編寫遠程控制和環境檢測界面。
2015-07-24 17:18:31
一種基于微機和單片機的步進電機控制系統
單片機的迅速發展和普及,為設計功能強、價格低的步進電機控制系統提供了先進的技術和充足的資源。本文主要介紹一種基于微機和單片機的步進電機控制系統,可以簡便地控制步進電機運行。
2011-03-04 14:37:24
一種新型的電梯門機控制系統
一種新型的電梯門機控制系統電梯的開關門過程是一個變速運動過程 ,需要對電梯門系統的驅動電機進行調速控制;本文提出了一種以高性能單片微機87C196MC 為核心的電梯門機變頻調速控制系統,功率驅動電路
2009-10-06 08:59:56
上位機VC與下位機單片機之間串口通信Proteus仿真
使用上位機軟件VC++編寫串口通信小軟件,實現與下位機單片機之間的串口通信,采用proteus軟件進行仿真,熟悉串口通信數據指令常采用的方法
2014-01-07 18:48:59
介紹一種基于FPGA的電機控制系統
日益成為系統的關鍵部件。本文介紹一種基于FPGA的電機控制系統,用于控制三坐標測量機電機運行。1:控制系統概述系統主要由PC控制電路驅動器和電機組成。系統結構圖見圖1.其中PC,由VC++實現用戶界面,發...
2022-02-17 06:22:51
單片機溫度控制系統的設計
單片機溫度控制系統的設計用89C51單片機系統進行溫度實時采集與控制是本設計的主要內容。本設計介紹的單片機溫度自動控制系統的主要內容包括:系統方案、理論分析、硬件設計、系統調試及主要技術性
2009-09-08 00:48:12
噴油泵試驗臺微機控制系統的設計與實現
該系統由可以完全獨立工作的2個部分組成:微機和單片機結合的顯示控制系統(以下簡稱聯合控制系統)及單片機顯示控制系統。它可以在不同檔位下對電機的轉速、油泵的噴油量、油溫進行測量和顯示,并根據用戶設定值
2011-03-04 14:47:23
如何采用VC++ 6.0開發一款基于串口通訊的PROFIBUS性能分析診斷軟件?
本文就是在對PROFIBUS-DP報文進行詳盡分析的基礎上,采用VC++ 6.0開發了一款基于串口通訊的PROFIBUS性能分析診斷軟件。
2021-06-07 06:40:42
如何使用vc++制作51單片機的上位機?
我想實現用VC++程序來控制51單片機的各個接口,同時也能讀取單片機的中斷。目前市面上單片機都是使用CH340來連接電腦,通過相應程序傳給串口調試助手。現在我想把串口助手換成vc++,這樣單片機的數據不就可以用PC來計算了嗎,從而提高計算能力。不知道我的最終想法能不能實現?請前輩、大師們指點
2023-11-10 06:51:25
用VC實現PC機與單片機的通信
用VC實現PC機與單片機的通信介紹了Windows98環境下利用Visual C++ 6.0的MSComm控件實現微機與微機及微機與單片機通信程序設計方法,并完整給出了微機、單片機的通信程序實例。
2009-12-05 09:15:50
用VB,VC++寫串口通信上位機程序時,出現8020讀comms設備錯誤
剛開始,為了解決這個問題,從VB換到VC++,還是不行。后來從網上下載了一個串口調試助手的源碼,并且運行后,發現跟我之前的錯誤一模一樣,于是我就換了同學的一個電腦,把下載的源碼在他的電腦上編譯運行后
2014-11-02 19:49:16
超精密雙面拋光機控制系統的研究
超精密雙面拋光機控制系統的研究介紹了超精密雙面拋光機的控制系統,對其實現方法進行了研究,分析了控制系統的組成,提出并建立了基于微機統一控制系統的解決方案。采用Windows軟件平臺, 圖形化界面功能
2009-08-08 09:46:54
用VC++實現ABB工業控制系統與上位機的通信
介紹了串口通信以及ABB Master EXCOM通信協議,闡述了外部計算機通過EXCOM訪問MasterPiece200/1主機數據庫的方法以及兩者之間的數據傳輸方式和消息格式。使用VC++編程實現了上位機和ABB工
2009-03-15 02:44:1339
采用VC++和IMAQ Vision開發進網許可證擾碼串號圖
采用VC++和IMAQ Vision開發進網許可證擾碼串號圖像處理系統:應用領域工業自動化挑戰使用成熟的技術完成正確快速的采集通信終端的進網許可證擾碼串號應用方案使用NationalIns
2009-05-14 00:41:2219
基于VC++和MFC的上位機與PLC的通訊系統The Com
本文介紹了用VC++和MFC開發的上位機和PLC的通訊系統,給出了系統的通訊原理和系統的軟件設計方法。實踐證明整個系統運行穩定,實用性和可擴展性強。關鍵詞:PLC;VC++;MFC;通
2009-05-26 13:13:4333
VC++在長余輝測量系統中的應用The Applicatio
基于虛擬儀器系統和微機自動控制理論,利用計算機面向對象VC++平臺進行可視化編程,具有界面形象、操作方便特點完成控制測量,研究設計出一套長余輝材料發光特性的自動
2009-05-27 16:34:5718
基于VC++和MFC 的上位機與PLC 的通訊系統
本文介紹了用VC++和MFC 開發的上位機和PLC 的通訊系統,給出了系統的通訊原理和系統的軟件設計方法。實踐證明整個系統運行穩定,實用性和可擴展性強。關鍵詞:PLC VC++ MFC 通訊
2009-06-04 10:49:0742
基于VC++的水閘液壓啟閉PLC控制系統
基于安全性、可靠性及提高自動化程度,對傳統液壓啟閉機控制系統進行了改進,提出了一種基于VC++和PLC 技術想結合的計算機控制方案。分別從硬件和軟件兩方面對控制系統進行了
2009-06-15 11:05:2221
基于串口通信的實時壓力控制系統設計與實現
本文介紹了一種在VC++平臺下,基于串口通信的實時壓力控制系統。該系統通過對串口循環采集數據,記錄到數據庫中,并實時的對數據進行顯示。人機界面提供歷史數據查詢,且
2009-06-15 11:14:4128
用InTouch 、MATLAB和VC++開發工業監控系統軟
本文針對工業自動控制的需要開發了基于InTouch、MATLAB 以及VC++三者混合編程的具有普通分散控制系統不具備的較完善控制功能(例如人工神經網絡控制)的控制系統監控軟件。本
2009-06-16 09:55:4141
制袋分切微機控制系統設計
系統用于制袋分切的糾偏控制,主要包含光電探頭、微機處理和電氣控制三部分。光電探頭采用激光二極管作為光源,光學系統完成標志的成像,雙光敏電阻檢測標志線的偏移,A/D
2009-07-09 15:55:3514
鍋爐微機控制系統的設計
介紹了一種鍋爐微機控制系統的設計方案,包括控制原理、系統結構、硬件和軟件實現等。該系統可準確控制蒸汽的生產過程,提高鍋爐的運行管理水平,節約能源,減輕環境污染
2009-08-18 09:52:0418
多線程在VC++串口通信程序中的應用
本文通過一機房監控系統程序中串口通信對多線程的應用來介紹Windows 9X/NT操作系統中多線程的應用和VC++對多線程的支持。關健詞: 多線程,串口通信在現代的各種實時監控系
2009-09-03 11:45:2927
基于VC++6.0的汽車點火線圈測試臺的串口通信
本文針對在開發汽車點火線圈測試臺軟件的過程中遇到的最重點、難點問題——串口通信操作,介紹了用VC++實現串口通信的方法的有效性和
2009-09-09 08:23:1517
基于VC++語言的HP34401A串口遠程控制實現
計算機與外部設備之間有多種通訊方式,串口通訊是一種經濟、實用的方式。本文以HP34401A數字萬用表為例,詳細介紹了VC++環境下利用Windows API 函數進行串口編程的方法。
2009-09-22 10:58:0663
基于運動控制卡的控制系統的設計與實現
本文介紹了一個基于多軸運動控制卡的運動控制系統。該系統以工控計算機、通用操作系統、PCI-8134多軸運動控制卡及其功能庫函數為平臺,采用VC++開發的人機界面,實現了三軸(X,Y,Z軸
2010-02-11 14:20:3855
基于VC++ 6.0的高速串口通信數據采集系統
在VC++6.0中利用MSComm控件實現串口通信時實時性較差,系統資源利用不足,無法滿足高速串口數據采集軟件的編程要求.針對高速串口數據采集軟件的設計要求,提出了基于多線程技術和自
2010-03-02 14:28:41100
基于串口的信號源與解調器微機控制系統
采用通用微機,基于串口,實現對遙感衛星地面接收系統中二次變頻本振信號源和衛星下行數據高速解調器的控制,替代原有的人工設置的模式,實現了對信號源和解調器可靠、靈
2010-07-21 10:24:0322
微機控制系統的干擾及抑制措施
針對微機控制系統的工作特點,對各種干擾源進行了分析,闡述了控制系統產生干擾的主要原因,討論了干擾產生的危害,并從控制系統的硬件和軟件兩個方面,介紹了微機系統應
2010-08-03 10:53:0512
基于VC的網絡實時通信系統的設計與實現
采用Client/Server 模式,設計了網絡實時通信系統的網絡結構和運行方式,并以VC++為開發工具,通過調用Winsock,實現了服務器端和客戶端之間實時數據的通信。
2010-10-27 15:31:0926
金剛石合成控制系統中多串口通信技術的設計與實現
通過多串口通信技術在金剛石合成控制系統中的應用,討論了32位Windows操作系統下,VC多串口通信技術的設計與實現方法,并運用面向對象方法和多線程技術設計了一個比較完善的串口通信類。
2006-03-11 13:22:10780
電源控制系統中通信的設計與實現
電源控制系統中通信的設計與實現
摘要:通信是電源控制系統中的關鍵技術之一,較為詳細地介紹了在直流電源微機控制系統中通信系統的方案設計和實現
2009-07-16 08:28:30488
基于微機控制的濾油機控制系統的設計
基于微機控制的濾油機控制系統的設計
0 引 言??? 系統由真空泵電動機和油泵電動機各一臺組成,要求用單片機完成管道壓力檢測和油箱溫度控制。用壓
2009-11-10 10:05:45457
基于VC++的多串口通信方法
介紹了實現 多串口通信 的基本方法,采用 VC++ 6.0并結合定時器和多線程技術編寫,提出了實現多串口通信的三種方法,給出了實現的方法和步驟,并對三種方法進行了比較。實踐證明
2011-08-03 10:42:28165
VC串口通信的數據采集系統設計
在VC++6.0中利用MSComm控件實現串口通信時實時性較差,系統資源利用不足,無法滿足高速串口數據采集軟件的編程要求.針對高速串口數據采集軟件的設計要求,提出了基于多線程技術和自定義
2011-11-09 15:15:591734
基于VC++設計的模擬舵機系統,可實現多種類型舵機
基于VC++的模擬舵機系統設計摘要:在無人機半物理仿真實驗中,為了節約實驗成本,提出用模擬舵機系統代替真實舵機的方法。基于VC++設計了模擬舵機系統。在半物理仿真系統中連入模擬舵機,并用該系統模擬
2018-06-07 09:08:001587
如何在VC++下實現數據的實時采集設計制瓶機微機控制系統
操作上位機管理軟件將操作命令傳遞給下位機來完成各種控制和管理工作,因此,串口通信技術是制瓶機微機控制系統開發的關鍵技術之一。
2019-01-08 09:09:002977
vc++應用程序和使用vc++設計的MFC計時器和計算機程序免費下載
本文檔的主要內容詳細介紹的是vc++應用程序和使用vc++設計的MFC計時器和計算機程序免費下載。
2018-12-24 08:00:0015
VC++中DC的概念
VC++中DC的概念(新型電源技術論文)-該文檔為VC++中DC的概念講解文檔,是一份還算不錯的參考文檔,感興趣的可以下載看看,,,,,,,,,,,,,,,,,,
2021-09-28 09:25:448
基于8098微機的SRD電機控制系統
基于8098微機的SRD電機控制系統(唐山科為工控技術有限公司怎么樣)-文檔為基于8098微機的SRD電機控制系統總結文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,
2021-09-30 12:29:242
評論
查看更多