摘 要: 本文介紹了污水處理系統中上位機組態王軟件和單片機組成的下位機控制系統的通訊問題,利用VB通過DDE方式實現了系統的通信。
關鍵詞: 組態王 VB 單片機 通信 DDE
1、引言
近年來,單片機在眾多領域中得到廣泛應用。許多中小型企業考慮到投資利潤和性能價格比,常常自行開發一些小型的單片機分布式系統作為下位機數據采集與監控系統,由普通PC機(或工控機)做上位機,單片機作為下位機,通過單片機和PC機通信,實現命令、數據的雙向傳送,從而實現對系統的有效監控。
最近,我們開發了一個污水處理自動控制系統,上位機采用PC機,系統監控采用組態王軟件;下位機采用單片機,負責采集現場數據及發出控制命令。在生產車間,系統將各種采集數據存儲在單片機中,并定期將單片機的數據采集和存儲部分取出,并傳送到裝有組態王軟件的上位機。技術人員通過查看數據、曲線、報表,并對這些數據進行詳細分析,從而設置運行參數、發出控制命令,最終實現對整個系統的控制。
2、系統構成與特性
該系統中,上位PC機與單片機1:N鏈接通信,帶有RS—485接口通信板的單片機直接掛在RS—485總線上,上位機通過RS—232C /RS—485轉換器與總線相連,這樣即構成一個獨立的小型分布式監控系統,其它系統設備以類似方式與上位機鏈接。我們利用組態王軟件包十分方便地構成了整個系統的監控畫面,以動畫方式顯示控制設備的狀態、報警、實時趨勢曲線。
組態王能通過串行口與單片機通訊,訪問單片機的相關寄存器,以獲得單片機所控制設備的狀態或修改寄存器的值。也可以組成網絡進行數據交換,但需要客戶機與服務器同時運行組態王軟件。
2.1 組態王的DDE特性
組態王軟件包由TouchMak和TouchViev兩大部分組成。TouchMak為畫面制作系統,所有界面設計,變量和動畫連接的定義等均在TouchMak完成。TouchView則用于顯示動畫圖形,負責數據庫與服務程序數據交換,并把其變化用動畫表示出來。
為了建立DDE連接,需要在TouchView的數據詞典里建立一個DDE變量,并登記三個標識名。組態王運行系統的程序名是“view”,主題規定為“tagname”,項目是在定義DDE變量時定義的項目名稱。
2.2 VB的DDE特性
在VB可視化編程工具中,DDE連接是通過設置控件的屬性和方法來實現的,對于作為“顧客”的文本框、標簽或圖片框,要設置Linktopic、linkitem、linkmode三個屬性,比如:
Control.linktopic=server應用程序名|主題名
Control.linkitem=項目名
Control.linkmode=num
其中control是文本框、標簽或圖片框控件名稱,num可以是0、1、2、3中的一個分別代表關閉DDE、熱連接、冷連接、通告連接。
組態王與VB的DDE連接是在TOUCHVIEW啟動時自動完成的。
2.3 組態王與單片機通訊的數據流向
用VB編制的服務程序作為中間傳遞組態王與單片機之間的通訊數據,組態王中的控制命令按鈕生效時,需將控制命令(如電機啟動、停止等)下行傳到單片機以實現遠程控制。此時,組態王作為服務器向VB服務程序提供數據,需要在數據詞典里定義一個DDE變量和一個供VB服務程序引用的項目名。
[align=center]

圖1 系統數據采集與流動圖[/align]
2.4 VB服務程序與MCS51的多機通訊
在VB通訊中,用通訊控件Mscomm實現服務程序與單片機的多機通訊。
在現場,為提高抗干擾和帶負載能力以及增加通訊距離,采用RS-485總線的通訊方式,在微機端,用RS-232/RS-485轉換器。
由于各單片機共享串行總線,為避免競爭,采用主從方式,微機服務程序主叫,單片機中斷方式響應。主機首先發送地址幀,各單片機串行中斷后,將接受的地址與自己的編碼地址比較,不一致則不與理睬,相同則回送本機編號,主機接受到正確的回送編號后,發送相關命令,單片機根據命令作出相應的處理。
在現場調試過程中,總結出如下兩點:
1. 由于現場對通訊的干擾,若通訊失敗,系統采用重新發送,并統計次數,若失敗次數超過指定次數,表明通訊失敗。
2. 由于通訊服務程序為后臺執行,主機在等待分機回答時,須將CPU控制權交出,以免影響組態王正常運行。
3、 通訊軟件設計
在污水處理系統通訊設計中,用組態王軟件包構成的監控畫面中,有各外輸泵電機的啟/停控制,壓力、流量、溫度、液位、頻率等數據顯示,利用VB編制的服務程序vbservice.exe通過串行通訊從單片機得到壓力等顯示數據,通過DDE交換上傳給監控畫picl,在畫面上進行動態顯示,電機啟/停等控制命令由監控畫面通過DDE數據交換給服務程序,再下傳給單片機以控制單片機的動作。具體介紹如下:
3.1 監控畫面picl的污水壓力變量設置:
進入組態王TouchMak,在picl監控畫面的數據字典中定義變量:pressurel
pressurel表示1號通道的壓力,定義為DDE模擬。其余各項設置為:
項目名:VB_pressure1_View
節點類型:驅動程序
節點名:node
服務程序名:vbservice1
話題名:Forml
數據交換形式:標準的windows項目交換
在picl監控畫面上需顯示pressurel值的地方輸入文本符號“%%%%”、設置pressurel的動畫連接方式為“模擬值輸出”,就可以顯示1號通道的水壓力。
3.2 VB服務程序中的DDE設置
由于污水壓力是picl監控畫面作為客戶向服務程序請求數據交換,因此作為服務器的服務程序的設置如下:
Sub Form_Load()
Linktopic=“forml”
Linkmode=1
End Sub
3.3 服務程序從各單片機接受數據
VB的MSCOMM控件初始化程序 摘要如下:
Mscomm1.Commport=1 ’ 選擇COM1
Mscomm1.Settings=“9600,N,7,2” ’ 設置通信參數
Mscomm1.Inputlen=0 ’ 讀入接收緩沖區全部字符
Mscomm1.OutbufferSize=256 ’ 設置發送緩沖區大小
Mscomm1.InbufferSize=256 ’ 設置接收緩沖區大小
Mscomm1.PortOpen=True ’打開COM1
‘接收數據主程序
Private sub Mscomm1_oncomm
Select case NUMBER
Case 1
In_buffer$=接收數據(NUMBER)
Call mission2
Case 2
In_buffer$=接收數據(NUMBER)
Call mission3
Case 3
In_buffer$=接收數據(NUMBER)
…
Call任務n
Receive Data=Inbuffer
Mscomm1.Receive=False
End Select
…
End Sub
此外, vbservice1.exe在初始化時,設置Rthreshold屬性為1,接受緩沖區受到數據時觸發Oncomm事件以便接受數據,然后對接受到的數據進行分析和處理。
在分析數據通訊的準確性時,我們發現,由于外界干擾或電壓波動等原因,PC機和單片機之間的通訊可能會出現錯誤,如接收緩沖區溢出、網絡端口超速等。這些都可能引起運行錯誤。為此,在程序中添加錯誤處理子程序。通過通訊控件的OnComm事件可以捕捉和處理錯誤,具體在通訊過程中所發生的通訊錯誤信息是CommEvent屬性返回的。當CommEvent屬性值發生改變時,表明有通訊錯誤,就會產生OnComm事件。同時,可以利用自動引發OnComm事件的特點在接收過程中加入狀態顯示碼。這樣可以監視通訊線路狀態,得到單片機和主機及單片機和單片機之間的通訊進程。
4、結束語
本文在項目開發過程中形成,系統投入運行后,效果良好。基于組態王與單片機的通訊系統,具有較高的使用價值,值得在工業控制中推廣。