盛榮,郝繼飛,王念,郝宇浩
(中國礦業(yè)大學(xué)信息與電氣工程學(xué)院,江蘇徐州221008)
隨著嵌入式技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,智能化終端借助Internet 實現(xiàn)遠(yuǎn)程數(shù)據(jù)采集越來越受到人們的關(guān)注。而網(wǎng)絡(luò)編程正是其中的關(guān)鍵技術(shù),能否利用網(wǎng)絡(luò)API 函數(shù)編寫出穩(wěn)定、功能強(qiáng)大的上位機(jī)系統(tǒng),將關(guān)系到整個系統(tǒng)的成敗。文章介紹了一種基于組態(tài)王的遠(yuǎn)程數(shù)據(jù)采集系統(tǒng),系統(tǒng)以組態(tài)王為中心,以Visual C++6.0 為中介,通過Visual C++6.0 進(jìn)行網(wǎng)絡(luò)編程實現(xiàn)遠(yuǎn)程數(shù)據(jù)采集,然后把采集到的數(shù)據(jù)通過動態(tài)數(shù)據(jù)交換技術(shù)(DDE)傳遞給組態(tài)王,最后通過組態(tài)王對整個系統(tǒng)監(jiān)控。組態(tài)王連接SQL_Server 2008數(shù)據(jù)庫,不僅實現(xiàn)了監(jiān)控功能,還可以利用數(shù)據(jù)庫系統(tǒng)對數(shù)據(jù)信息進(jìn)行高效的管理。
系統(tǒng)由上位機(jī)和下位機(jī)組成,上位機(jī)以組態(tài)王軟件和Visual C++6.0 為中心,Visual C++6.0 主要是實現(xiàn)套接字(SOCKET)和動態(tài)數(shù)據(jù)交換技術(shù)(DDE)的編程。套接字實現(xiàn)對遠(yuǎn)程WIZ110SR模塊的數(shù)據(jù)采集,VC 把采集到的數(shù)據(jù)通過DDE 傳輸?shù)浇M態(tài)王,最后在組態(tài)王中實時監(jiān)控遠(yuǎn)程的數(shù)據(jù)采集系統(tǒng)。系統(tǒng)下位機(jī)部分以Atmel 公司的Mega128單塊的數(shù)據(jù)采集,最后VC把采集到的數(shù)據(jù)通過DDE技術(shù)傳輸?shù)浇M態(tài)王,在組態(tài)王中實時監(jiān)控遠(yuǎn)程的數(shù)據(jù)采集系統(tǒng)。單片機(jī)為核心,具有模擬量采集、開關(guān)量輸入/輸出、看門狗等功能。系統(tǒng)示意圖如圖1所示。
圖1 系統(tǒng)示意圖Fig.1 Schematic diagram of the system
下位機(jī)主要包括Mega128 單片機(jī)外圍電路、WIZ110SR模塊和單片機(jī)軟件程序設(shè)計。
單片機(jī)外圍電路圖如圖2 所示,2 路模擬量輸入信號可以是0~5 V 電壓和4~20 mA 電流,模擬量輸入經(jīng)過壓頻變換電路LM331N 后變成頻率信號分別接到單片機(jī)的定時/計數(shù)器T1 和T3引腳。單片機(jī)的PB0~PB7 接8 路繼電器輸出。16 路開關(guān)量輸入分別接到單片機(jī)的PA0~PA7 和PC0~PC7。單片機(jī)把采集到的數(shù)字量和處理后的模擬量通過RS232 接口傳輸?shù)絎IZ110SR 模塊,然后再傳輸?shù)竭h(yuǎn)程上位機(jī)。遠(yuǎn)程上位機(jī)發(fā)送的繼電器開關(guān)的命令通過WIZ110SR 模塊傳輸?shù)絉S232 接口,然后傳遞給單片機(jī),單片機(jī)分析處理命令之后控制繼電器的輸出。之所以用到2 個RS232 接口是因為一個連接WIZ110SR模塊,把單片機(jī)發(fā)送的數(shù)據(jù)傳遞到互聯(lián)網(wǎng)或把遠(yuǎn)程監(jiān)控系統(tǒng)的數(shù)據(jù)通過互聯(lián)網(wǎng)傳遞到單片機(jī)。另一個預(yù)留給單片機(jī)連接別的串口設(shè)備,監(jiān)控別的串口設(shè)備的狀態(tài),擴(kuò)展模塊的功能。
圖2 單片機(jī)外圍電路設(shè)計Fig.2 The peripheral circuits of MCU
WIZ110SR是一個將RS232協(xié)議轉(zhuǎn)換成TCP/IP 協(xié)議的網(wǎng)關(guān)模塊,它可以通過以太網(wǎng)連接到RS232 接口實現(xiàn)與遠(yuǎn)程模塊的通信??梢栽O(shè)置模塊的IP 地址、端口號、工作模式(客戶端模式、服務(wù)器模式和混合模式)。圖3 為在實驗室局域網(wǎng)中對模塊的配置:WIZ110SR 工作在客戶端模式下,IP 地址為192.168.1.42,端口號為55572。服務(wù)器的IP 地址為192.168.1.104,端口號為5050。
圖3 模塊配置畫面Fig.3 The configuration screen of module
Atmega128 中的數(shù)據(jù)采集程序采用C 語言編寫,所用開發(fā)環(huán)境為avrstudio,編譯環(huán)境為GCC,完成3部分的工作:數(shù)據(jù)采集、數(shù)據(jù)接收和數(shù)據(jù)傳輸。
程序初始化部分要完成對IO 口,USART0,USART1,Timer0,Timer1 和Timer3 的 初 始 化。數(shù)據(jù)接收部分通過中斷實現(xiàn),在Avrstudio 開發(fā)環(huán)境中串口0 接收中斷服務(wù)程序入口為INTERRUPT(SIG_UART0_RECV)。程序中的協(xié)議部分參考Modbus協(xié)議中的RTU傳輸模式。協(xié)議如表1所示。根據(jù)協(xié)議編出下位機(jī)程序,程序流程圖如圖4所示。
表1 Modus RTU通信協(xié)議Tab.1 The communication protocols of modbus RTU
圖4 單片機(jī)軟件流程圖Fig.4 MCU software flow chart
由于實際中只用到了Modbus 協(xié)議中的寫線圈和讀寄存器功能,所以只需要對功能碼中的03和05編程即可。
上位機(jī)主要以組態(tài)王軟件和Visual C++6.0為中心,VC實現(xiàn)遠(yuǎn)程數(shù)據(jù)采集,然后把采集到的數(shù)據(jù)傳遞給組態(tài)王。
上位機(jī)總體設(shè)計方案如圖5所示,圖5a是上位機(jī)服務(wù)器設(shè)計,用來監(jiān)視遠(yuǎn)程系統(tǒng)的狀態(tài),把遠(yuǎn)程單片機(jī)數(shù)據(jù)采集系統(tǒng)的開關(guān)量狀態(tài)和模擬量的值顯示在組態(tài)王界面中。圖5b 是客戶端設(shè)計,主要是組態(tài)王控制遠(yuǎn)程單片機(jī)的繼電器輸出狀態(tài)。程序中的網(wǎng)絡(luò)服務(wù)需要Socket 編程,組態(tài)王和VC 之間的數(shù)據(jù)交換使用的是DDE 技術(shù),所以程序的關(guān)鍵技術(shù)包括套接字(SOCKET)編程和動態(tài)數(shù)據(jù)交換技術(shù)(DDE)編程。
圖5 上位機(jī)總體設(shè)計方案Fig.5 The overall design of the upper computer
Sockets 是一種網(wǎng)絡(luò)編程接口,Socket 提供了很多靈活的函數(shù),幫助程序員寫出高效的網(wǎng)絡(luò)應(yīng)用。文章應(yīng)用了Windows平臺上的Sockets,即WinSocket。Socket 通信分為面向連接的通信(TCP)和面向無連接的通信(UDP),為了保證通信的實時性、準(zhǔn)確性,我們使用了面向連接的通信(TCP)。Visual C++中的Socket 核心函數(shù)簡介:
①創(chuàng)建Socket:m_pMySocket=new CMySocket;//動態(tài)內(nèi)存分配m_pMySocket->Create();//創(chuàng)建Socket。
②連接Socket:m_bLinked= m_pMySocket->Connect(m_strEditIPAddr,m_unEditPortNO);m_strEditIPAddr 為服務(wù)器IP 地址,m_unEditPortNO服務(wù)器的端口號。返回值表示連接是否成功。成功返回TRUE,否則返回FALSE。
③接受連接:void CListenSocket::OnAccept(int nErrorCode),監(jiān)聽套接字監(jiān)聽遠(yuǎn)程模塊的連接。
④接收數(shù)據(jù):void CMySocket::OnReceive(int nErrorCode),接收遠(yuǎn)程WIZ110SR 模塊傳送的數(shù)據(jù)。
⑤發(fā)送數(shù)據(jù):void CSclientDlg::OnButton-Send(),發(fā)送數(shù)據(jù)給遠(yuǎn)程的WIZ110SR 模塊。主要調(diào)用Send()函數(shù),通過建立連接的套接字發(fā)送數(shù)據(jù)。
DDE(dynamic data exchange)是一種動態(tài)數(shù)據(jù)交換機(jī)制。使用DDE通訊需要2個Windows應(yīng)用程序,其中一個作為服務(wù)器處理信息,另外一個作為客戶機(jī)從服務(wù)器獲得信息。主要應(yīng)用了如下函數(shù)。
4.3.1 初始化DDE會話
使用函數(shù)DdeInitialize idInst=DDEhInitial(LPCTSTR("VIEW"),LPCTSTR("Tagname"));第1 個參數(shù)為應(yīng)用程序名,組態(tài)王的應(yīng)用程序名為VIEW,第2 個參數(shù)為話題名,即組態(tài)王中變量的名字。格式為項目名稱,寄存器地址。返回值為創(chuàng)建的DDE句柄。
4.3.2 DDE請求數(shù)據(jù)函數(shù)
CString DDEhRequest(DWORD idInst,LPCSTR szItem),請求與組態(tài)王所關(guān)聯(lián)的寄存器中的數(shù)值,返回值為所獲得話題名中的數(shù)據(jù),類型為Cstrig類型。
4.3.3 DDE寫入函數(shù)
BOOL DDEhPoke(DWORD idInst,LPCSTR szItem,LPCSTR szData),往組態(tài)王寄存器中寫入數(shù)據(jù),寫成功返回TRUE,否則返回FALSE。
4.3.4 結(jié)束DDE會話
BOOL DDEhTerminate(idInst);結(jié) 束 本 次DDE 對話,斷開DDE 連接,參數(shù)為初始化時創(chuàng)建的DDE 句柄。斷開成功返回TRUE,否則返回FALSE。
在組態(tài)王中建立設(shè)備仿真PLC stc8。stc8.STATIC0 代表8 路繼電器輸出,范圍為0~255,stc8.STRING1和stc8.STRING2代表PA口和PB口傳遞給組態(tài)王的16 路開關(guān)量狀態(tài)。stc8.STRING3 代表了2 路模擬量的輸入值,stc8.STRING4擴(kuò)展串口接收的數(shù)據(jù)。圖6的上半部分是基于Socket的網(wǎng)絡(luò)編程,下半部分是DDE與組態(tài)王動態(tài)數(shù)據(jù)交換,由于是在局域網(wǎng)中測試,所以服務(wù)器IP地址為內(nèi)網(wǎng)IP地址。
圖6 VC運行界面Fig.6 The VC operation interface
組態(tài)王界面如圖7所示,繼電器1~8為8個按鈕,可以控制下位機(jī)8路繼電器的輸出,黑色表示繼電器閉合,灰色表示繼電器開啟。開關(guān)量1~16為16 個指示燈,用于指示下位機(jī)16 路開關(guān)量的狀態(tài),灰色代表高電平輸入,黑色代表低電平輸入。模擬量1、模擬量2 分別代表第1 路和第2路模擬通道的值。擴(kuò)展串口表示別的設(shè)備的串口發(fā)送給單片機(jī)的數(shù)據(jù)。
圖7 組態(tài)王監(jiān)控畫面Fig.7 The monitor screen of kingview
本系統(tǒng)上位機(jī)使用組態(tài)王和Visual C++6.0,下位機(jī)使用遠(yuǎn)程模塊WIZ110SR 和Atmega128 單片機(jī),實現(xiàn)了組態(tài)王對遠(yuǎn)程系統(tǒng)的監(jiān)控。組態(tài)王和VC 之間使用DDE 技術(shù)實現(xiàn)數(shù)據(jù)交換,擴(kuò)展了組態(tài)王的應(yīng)用。解決了組態(tài)王不能上回的問題,經(jīng)過測試,表明該系統(tǒng)具有實是性強(qiáng),強(qiáng)靠性高,穩(wěn)定性強(qiáng)的特點,具有很好的應(yīng)用價值,該系統(tǒng)通用性好,只需稍加改動就可以應(yīng)用到其他遠(yuǎn)程監(jiān)控系統(tǒng)中。
[1]田海,任清娟.基于Modbus 和GRPS 的高爐渣粒化配電監(jiān)控系統(tǒng)[J].電氣傳動,2012,42(10):72-77.
[2]陳嫣然,張會新,鄭燕露.基于以太網(wǎng)的高精度測試系統(tǒng)設(shè)計[J].自動化與儀表,2012,27(2):12-15.
[3]白瑞林,史鵬飛,吉峰,等.基于Modbus/TC的智能相機(jī)通信接口實現(xiàn)[J].控制工程,2011,18(4):618-622.
[4]劉紅霞,屠袁飛.基于DDE 與Winsock 的WinCC 數(shù)據(jù)通信[J].通信技術(shù),2010,43(7):201-209.
[5]張方昌,劉曉丹,侯維巖,等.一種基于Wi—Fi 的計量抄表系統(tǒng)的設(shè)計和實現(xiàn)[J].自動化與儀表,2010,25(6):18-21.
[6]張利利,李曉京,胡文東,等.基于C++Build 的PC 與單片機(jī)串口通信的實現(xiàn)[J].微型電腦應(yīng)用,2012,28(9):53-55.
[7]Zhang Yu,Yu Tong.Mining Trust Relationships from Online Social Networks[J].Journal of Computer Science and Technology,2012,27(3):493-505.