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