采用PC機(jī)實現(xiàn)單片機(jī)優(yōu)化控制
一、用PC機(jī)實現(xiàn)單片機(jī)優(yōu)化控制的必要性
目前,單片機(jī)的控制很廣泛。但是對于復(fù)雜的現(xiàn)場控制,大多數(shù)單片機(jī)的控制程序都是采用單一的匯編語言編寫。
其缺點有:
1.由于匯編語言功能的限制,不能形成友好的控制界面。不能很好的反映出控制現(xiàn)場的實時變化情況。
2.對于不同的單片機(jī)CPU芯片,還要有不同的匯編語言,可移植性差,增加了編程的難度。
3.當(dāng)被控對象的工藝條件變化時,單片機(jī)很難跟著變化。除非重新編制程序,再一次的固化,這樣操作起來就比較困難。
筆者采用了PC機(jī)高級語言編程和單片機(jī)匯編語言編程相結(jié)合解決上述的缺點。
二、實現(xiàn)過程
PC機(jī)將各種予置信號通過串行口送給單片機(jī)控制系統(tǒng),再由單片機(jī)系統(tǒng)通過D/A變換產(chǎn)生實際的模擬信號送到現(xiàn)場;予置數(shù)值可以顯示在PC機(jī)的軟件窗口上。同時,現(xiàn)場由傳感器實測的信號通過A/D轉(zhuǎn)換送到單片機(jī)分析處理,通過和予置的數(shù)值比較得到誤差數(shù)據(jù),誤差數(shù)據(jù)被送到控制現(xiàn)場進(jìn)行精度調(diào)整,這樣就形成了一個閉環(huán)控制系統(tǒng)。同時,單片機(jī)將實測的準(zhǔn)確數(shù)據(jù)通過串行口送到PC機(jī),顯示在軟件窗口上,供操作人員查看、記錄和調(diào)整控制。關(guān)鍵是如果控制對象的工藝條件改變時,只需在PC上把予置數(shù)據(jù)改變?yōu)橐蟮臄?shù)據(jù)即可。 在后面地系統(tǒng)示例中筆者采用的是自己開發(fā)的溫度控制系統(tǒng)。
(一)單片機(jī)匯編語言部分
在設(shè)計好了控制電路之后,用傳統(tǒng)的匯編語言完成了單片機(jī)控制的初始化部分。初始化包括串行口接收和發(fā)送數(shù)據(jù)、A/D、D/A等功能。其余的由PC機(jī)來完成。這個部分,大多數(shù)讀者都比較清楚,在此不在贅述,具體的可以見后面的實例論證部分。要注意的是在初始化程序里要留有串行通信的程序接口和實現(xiàn)過程。
(二)PC機(jī)高級語言部分
在PC機(jī)高級語言編程中,筆者采用了VISUAL BASIC 高級語言。VISUAL BASIC(VB)是MICROSOFT 公司推出的面向?qū)ο缶幊痰母呒壵Z言,它以編程簡單、ActiveX控件豐富、可移植性好、功能強(qiáng)大而受到廣大編程人員的歡迎。因此本系統(tǒng)高級語言編程采用了VB。
1.控制界面的完成
本系統(tǒng)以溫度控制系統(tǒng)為例進(jìn)行闡述說明的。
使用高級語言編程可以在PC機(jī)上編制非常友好、直觀的人機(jī)控制界面。把原來的人體直接控制變成了鼠標(biāo)、鍵盤的間接控制;并且通過直觀的控制界面可以很容易的實現(xiàn)控制,對現(xiàn)場的控制情況一目了然,增加了操作人員的視覺感、安全感,簡化了操作。
控制界面包括:現(xiàn)場數(shù)據(jù)顯示、予置數(shù)據(jù)輸入、現(xiàn)場數(shù)據(jù)上下限數(shù)值、報警提示、數(shù)據(jù)記錄、時間和日期、數(shù)據(jù)打印、本程序使用密碼等。
2.PC機(jī)對外通信
這個部分是本系統(tǒng)的重要部分, PC機(jī)的數(shù)據(jù)都可以設(shè)置,但要把PC機(jī)的數(shù)據(jù)送到串行端口上以及怎樣才能把串行端口上數(shù)據(jù)接收進(jìn)來,是PC機(jī)編程中的關(guān)鍵部分。
在VB的大量控件中,有一個MSCOmm控件,是專門用來實現(xiàn)串行端口數(shù)據(jù)的傳輸和接收的,為應(yīng)用程序提供了串行通信功能,是一個標(biāo)準(zhǔn)的十位串口通信。本次設(shè)計就使用了該控件。下面就介紹一下該控件的使用方法。
控件屬性:
commport
設(shè)置并返回通信端口號。語法為:
object.comport[=value]
value是一個整型值,表明使用的端口號
說明:在設(shè)計時,value可以設(shè)成從1—16的任何數(shù),在打開端口之前必須設(shè)置端號。
settings
設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位等參數(shù)
語法為: object.settings[=value]
value是一字符串表達(dá)式,說明端口的設(shè)置值,由四個設(shè)置值組成,格式如下:
“BBBB,P,D,S”
其中,BBBB為波特率;P為奇偶校驗;D為數(shù)據(jù)位;S為停止為數(shù)。要值得注意的是此處的設(shè)置值一定要和單片機(jī)系統(tǒng)的串行口波特率設(shè)置值一致。
portooen
設(shè)置并返回通訊端口的狀態(tài);
語法為:object.portopen[=value]
value為一布爾表達(dá)式,說明通訊端口的狀態(tài);
value=true:端口開;value=false:端口關(guān)
要注意的地方是如果在端口打開之前,DTREnable或RtsENable屬性設(shè)為true;當(dāng)端口關(guān)閉時一定要將這兩個屬性設(shè)置為false.
Input
返回并刪除接收緩沖區(qū)中的數(shù)據(jù)流
語法為:object.input
說明:inputlen屬性確定被input屬性讀取的字符數(shù)。設(shè)置inputlen為0,則input屬性讀取緩沖區(qū)中全部的內(nèi)容。 Inputmode屬性確定被input讀取的數(shù)據(jù)類型。如果inputmode=cominputmodetext,則input屬性通過一個 variant返回文本數(shù)據(jù);如果設(shè)置inputmode=cominputmodebinary,則input屬性通過一個variant返回一個二進(jìn)制數(shù)據(jù)的數(shù)組。
output
往傳輸緩沖區(qū)寫數(shù)據(jù)流
語法為:object.output[=value]
value是一準(zhǔn)備寫到傳輸緩沖區(qū)的一字符串。
說明:output屬性可以傳輸文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)
commevent
返回最近的通訊事件或錯誤。用此屬性處理在數(shù)據(jù)傳輸過程中的異常事件。
handshaking
設(shè)置并返回硬件握手協(xié)議
語法為:object.handshaking[=value]
value為一整型值
value=0 沒有握手
value=1 (xon/xoff)握手
value=2 (rts/cts)握手
value=3 (xon/xoff和rts/cts兩種皆可)握手
說明:handshaking是指內(nèi)部通訊協(xié)議,通過該協(xié)議,數(shù)據(jù)從硬件端口傳輸?shù)浇邮站彌_區(qū)。握手協(xié)議保證在緩沖區(qū)過載時數(shù)據(jù)不丟失。
控件事件:
oncomm
無論何時當(dāng)commevent屬性的值變化時,就產(chǎn)生oncomm事件。它標(biāo)志發(fā)生了一個通訊事件或一個錯誤。Commevent屬性包括實際錯誤或產(chǎn)生oncomm事件的編碼。但是,當(dāng)rthreshold或sthreshold屬性被設(shè)置為0時,則會分別使comevreceive和 comevsend事件無效。
3.單片機(jī)和PC機(jī)的連機(jī)串行通訊
經(jīng)過此過程將單片機(jī)和PC機(jī)進(jìn)行連機(jī)通信控制,真正實現(xiàn)PC機(jī)的高級編程控制單片機(jī)。在通訊中,我用的是串行通信。用串行通訊的好處是簡單,抗干擾性強(qiáng),傳輸距離遠(yuǎn)。接口是RS232C接口。但是由于RS232C或其他的串行通信接口都不能滿足TTL電平的傳輸要求,所以要在這種接口中加個電平轉(zhuǎn)換裝置。這里采用的是Max公司的Max232電平轉(zhuǎn)換芯片。
系統(tǒng)的上位機(jī)由一臺(PC586)微機(jī)構(gòu)成,高級語言采用VISUAL BASIC編程。通過VB的編程設(shè)計,很容易的作出了十分直觀的界面。在界面上,有“溫度計”顯示當(dāng)前控制現(xiàn)場的溫度,同時還有“數(shù)碼”配合顯示溫度;界面上的予置按鈕可以設(shè)置現(xiàn)場的控制溫度值;為了安全,在控制界面上做出了上下限溫度控制裝置,超過規(guī)定的范圍將進(jìn)行提示、報警,并且系統(tǒng)自動調(diào)節(jié)爐溫,處于安全范圍。如果1分鐘內(nèi)不能解決問題,系統(tǒng)將自動關(guān)閉。而且,如果要改變爐子的溫度,通過計算機(jī)予置數(shù)據(jù)就可以實現(xiàn),不用改變單片機(jī)的固化的程序。因此,當(dāng)控制對象的工藝條件改變時,在PC機(jī)的作用下,很容易就能夠滿足控制條件,從而實現(xiàn)了控制的優(yōu)化。
本系統(tǒng)CPU采用ATMel89C51芯片,89C51自帶2K閃存,用起來很方便;89C51與所有的51系統(tǒng)都兼容,性能好,價格也比較低廉。 89C51利用自身的串行口接收來自PC機(jī)的予置串行數(shù)據(jù),然后從并口輸出到數(shù)據(jù)鎖存器74LS373,最后把鎖存的數(shù)據(jù)送到D/A轉(zhuǎn)換接口芯片 DAC0832,變成模擬信號,送到溫度控制系統(tǒng)。溫度控制系統(tǒng)接收到來自D/A的模擬信號,并把它變成脈沖的形式去出發(fā)雙向可控硅,通過改變雙向可控硅的導(dǎo)通角的大小,從而改變了加熱裝置中電流的大小。根據(jù)Q=I2Rt可知,改變了熱量,也就改變了溫度。同時,通過溫度傳感器的作用,從現(xiàn)場采集回來現(xiàn)場的溫度,經(jīng)過采樣保持、數(shù)據(jù)鎖存、D/A變換之后,送到89C51中,和預(yù)置的數(shù)據(jù)比較分析,得出誤差數(shù)據(jù)。通過誤差數(shù)據(jù)去調(diào)整 89C51的輸出,經(jīng)過一系列的變換之后,從而改變現(xiàn)場的溫度,提高控制的精度。另外,單片機(jī)系統(tǒng)通過串行口把現(xiàn)場的溫度數(shù)據(jù)送到PC機(jī)上,在控制界面上顯示出來。
3.1 PC機(jī)部分
VB通信控件設(shè)計軟件如下:
Global comm._time as integer ;定義全局變量
Global data(1000) As Integer
Global Receive(1000) As Integer ;串行數(shù)據(jù)接收、發(fā)送
Private Sub Form_load( )
Comm1.Comport=1
Comm1.Settings=”9600,N,8,1”
Comm1.Inputlen=0
Comm1.Inbuffersize=256
Comm1.Outbuffersize=256
Comm1.Portopen=ture
Comm1.Sthreshold=1
Comm1.Rthreshold=1
End Sub
Public Sub send-data( ) ;(數(shù)據(jù)發(fā)送程序)
For i=0 to n
Comm1.output=Chr(data(i))
Next I
End Sub
Public Sub Comm1_oncomm( ) ;(接收程序)
Select Case Comm1.CommEvent
Case comEvreceive
Receive(comm._time)=Asc(Comm1.Input)
Comm_time=Comm_time+1
End Select
End Sub
(還有許多程序,由于篇幅限制,其他的程序清單略)
三、結(jié)束語
本系統(tǒng)成功開發(fā)之后,使用效果良好。如果控制對象有多個,可以構(gòu)成集散系統(tǒng)。當(dāng)然,由于水平有限肯定存在許多不足,還請各位讀者給予指正。
參 考 文 獻(xiàn)
[1] 吳成賓編著. VB⒌0實用編程指南.電子科技大學(xué)出版社.1998.3.
[2] 李華主編.MCS-51系列單片機(jī)實用接口技術(shù).北京航空航天大學(xué)出版社(第三次印刷).1997.8.
評論