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