基于VB6的PC機與多臺單片機通信的應用
——
在庫房管理系統中,傳統的方法是通過(guò)干濕度表、雙金屬式測量計等檢測器材進(jìn)行人工測量,然后對不符合溫度、濕度等要求的庫房進(jìn)行通風(fēng)、去濕、降溫等工作。這種人工方式效率低、誤差大,隨機事件難以預料,使庫房管理質(zhì)量得不到很好的保證。本文所論述的系統是一個(gè)用于制藥廠(chǎng)倉庫的監控和管理系統,上位機(PC機)除負責對下位機(MCS—51單片機)進(jìn)行監管和控制外,還用于采集下位機傳送的數據進(jìn)行數據庫化管理,另外,上位機還可以對庫房藥品入庫、出庫、有效期、交易方式等信息進(jìn)行管理,并可用實(shí)時(shí)曲線(xiàn)和報表的形式查詢(xún)。下位機(MCS-51單片機。MCS-51單片機及其外圍設備我們稱(chēng)之為庫機)負責收集庫房中溫度、濕度、煙霧等信息并傳給上位機。此系統可使辦公人員坐在辦公室里對遠在幾百米之位的庫房進(jìn)行監控和管理,不但使辦公人員從繁重的體力勞動(dòng)中解放出來(lái),而且使庫房管理快速準確,提高了企業(yè)的管理水平和辦公自動(dòng)化水平。
2 系統構成及工作原理
PC機里安裝著(zhù)用VB6編寫(xiě)的倉庫管理系統,作為前臺操作系統。系統的數據庫格式采用VB數據庫格式,也稱(chēng)為本地數據庫,這類(lèi)數據庫文件使用與 MicroSoft Access相同的格式,數據的存取利用VB6的ADO控件通過(guò)MicroSoft Jet (Joint Engineering Technology) 數據庫引擎,速度快工作效率高。此管理系統包括進(jìn)庫藥品、進(jìn)庫日期、出庫藥品、出庫日期、經(jīng)手人等的查詢(xún),以及藥品過(guò)期提示等。另外還把庫機傳送來(lái)的數據實(shí)時(shí)顯示并存放在本地硬盤(pán)中,以便查詢(xún)和打印。后臺系統是一個(gè)上位機與多臺下位機通信的通信系統,多臺下位機不斷從倉庫采集溫度、濕度、煙霧等數據傳給上位機,PC機進(jìn)行實(shí)時(shí)顯示,并可以設置溫度、濕度、煙霧、等參數,單片機根據設定參數來(lái)控制倉庫里的去濕、降溫和報警系統,從而使庫房達到預定的環(huán)境。如果庫房?jì)拳h(huán)境與設定環(huán)境不符,單片機就會(huì )喚醒降溫、去濕設備,把倉庫內參數鎖定在預定的范圍之內,如發(fā)生火災、被盜等意外事件,單片機就會(huì )驅動(dòng)火災、防盜報警系統,并把信號傳給上位機,使其在屏幕上作出顯示。
3 PC機與單片機之間的通信
3.1 通信方式的實(shí)現
PC機與單片機之間的通信是通過(guò)串行口來(lái)實(shí)現的(如圖2)。由于單片機系統電平是TTL電平,與標注RS-232C不兼容,又考慮到通信距離,我們采用Maxim 公司生產(chǎn)的Max485芯片將TTL電平轉化為RS-485標準,然后再進(jìn)行RS-485與RS-232之間的轉換,再與PC機的串口連接。這種轉換方式延長(cháng)了通信的距離,最長(cháng)可達1200米,提高了系統的可行性。
3.2 通信協(xié)議及程序設計思想
本系統由于是一臺上位機和多臺下位機,所以要給下位機設置一個(gè)通信代碼,為簡(jiǎn)單起見(jiàn),取0~255之間的任意四個(gè)即可。當PC機欲與某個(gè)單片機通信時(shí),便向所有單片機發(fā)出通信代碼。單片機在接到代碼后與自己的代碼進(jìn)行核對,如果一致則向PC機發(fā)出回應,開(kāi)始通信,其它的單片機繼續采集和傳輸數據。
3.3 上位機程序設計
VB6中有一個(gè)專(zhuān)門(mén)用來(lái)串行通信的控件---MSComm控件。MSComm控件最常用的屬性如下:
CommPort屬性:設置并返回通信端口號,指定PC機上用于通信的串口
Setting屬性:以字符串的形式設置并返回波特率,奇偶校驗,數據位和停止位
PortOpen屬性:設置并返回通信端口的狀態(tài),用于打開(kāi)和關(guān)閉端口
Rthreshold 屬性:MSComm 控件設置CommEvent 屬性為ComEvReceive并產(chǎn)生OnComm之前設置并返回的要接收的字符數
Input屬性:從接收緩沖區返回和刪除字符,用于接收數據
InputLen 屬性:設置并返回Input屬性從接收緩沖區讀取的字符數
Output屬性:向緩沖區寫(xiě)一個(gè)字符,用于發(fā)送數據
本系統VB6通信初始化程序如下:
MSComm1.CommPort = 1 ;選擇COM1為通信端口
MSComm1.Setting ="9600,n,8,1" ;設置波特率為9600,無(wú)奇偶校驗,8個(gè)數據位,一個(gè)停止位
MSComm1.OutBuffersize =256 ;設置輸出緩沖大小為256個(gè)字節
MSComm1.RThreshold = 3 ;輸入緩沖區里有3個(gè)字符時(shí),觸發(fā)OnComm事件
If Not MSComm1.PortOpen = True
Then MSComm1.PortOpen = True ;打開(kāi)串行口,并防止運行時(shí)發(fā)生打開(kāi)同一串口的錯誤
End If
以上MSComm1是系統默認的MSComm控件的名字(Name)。在初始化完成后通過(guò)
MSComm1.Output=OutputString 發(fā)送數據,OutputString 是定義的字符型變量(Dim OutputString As String)。一般用定時(shí)器的Timer事件來(lái)定時(shí)發(fā)送數據,接到回應字符后則關(guān)閉定時(shí)器。MSComm控件可以直接把字符串轉化成二進(jìn)制數據形式發(fā)送,不需要我們在程序中用算法來(lái)轉換。每次發(fā)送完畢最好關(guān)閉串口。用MSComm1.PortOpen=False來(lái)實(shí)現。MSComm_OnComm事件可以捕捉通信時(shí)發(fā)生的錯誤,也可以接收數據。由于RThreshold的屬性值為3,所以當輸入緩沖區滿(mǎn)三個(gè)字符時(shí),就觸發(fā)MSComm_OnComm事件,通過(guò)對接收字符的判斷,可以決定主程序分支的去向。
3.4 下位機程序設計
本系統單片機MCS-51通信時(shí)用定時(shí)器T1工作于定時(shí)方式2作為周波發(fā)生器,選擇11.0592的晶振。由于波特率為9600,所以定時(shí)器T1初值取0FDH。初始化還需設置用于控制和監視串行口狀態(tài)的控制狀態(tài)寄存器SCON。初始化程序如下:
MOV SCON,#0C0H ;通信方式3
MOV PCON,#00H ;SMOD=0
MOV TMOD,#20H ;定時(shí)器T1,工作于方式2
MOV TL1,#0FDH ;設置波特率為9600
MOV TH1,#0FDH
單片機始終處于被動(dòng)狀態(tài),只在接收到通信的命令后才進(jìn)入中斷服務(wù)子程序發(fā)送數據,進(jìn)入通信狀態(tài)。PC機與單片機通信時(shí),先發(fā)出呼叫信號,單片機接到約定的呼叫信號后,向PC機發(fā)出應答信號,表示準備接受,PC機在接到應答信號后則發(fā)出通信代碼,單片機接到通信代碼與本身代碼相減,若為0則開(kāi)始接受命令,設置新的參數;若不為0則繼續執行采集數據和發(fā)送數據的程序。
3.5 庫機的設計
庫機設計以單片機為核心,配有EPROM、A/D轉換、數碼顯示、光電隔離和控制電路等。傳感器把溫度、濕度等非電量轉化為電量,通過(guò)A/D轉換后變?yōu)閿底至?,然后通過(guò)單片機的串行通信將數據送往PC機數據庫保存。同時(shí),單片機將采集的結果與設定參數進(jìn)行比較,如若不在規定的參數范圍之內或者單片機采集的狀態(tài)量發(fā)生異常,則驅動(dòng)光電隔離放大器,經(jīng)過(guò)一級放大后就可驅動(dòng)繼電器動(dòng)作打開(kāi)降溫、去濕設備和報警系統。在這里光電隔離可以有效地避免繼電器的誤動(dòng)作,提高了系統的抗干擾能力。
4 結束語(yǔ)
本文所介紹的管理和監控系統是基于VB6的主從式通信結構,可靠性好,可行性強。其硬件結構簡(jiǎn)單,軟件(VB6)編程環(huán)境友好,界面靈活,易學(xué)易用。本系統可以方便地控制通信對象的選擇,實(shí)時(shí)顯示所采集數據,人機對話(huà)靈多機動(dòng),易于操作。這種單片機與數據庫的串行通信技術(shù)的應用,為庫房管理的發(fā)展提供了新的方向。
評論