以太網(wǎng)技術(shù)在繼電器可靠性檢測系統中的應用
2.2 實(shí)現功能
檢測裝置的軟件由兩大部分組成:一是實(shí)時(shí)檢測與處理程序,包括了試驗參數的設置,對試驗狀態(tài)以及失效數據的保存,對失效數據進(jìn)行數學(xué)分析,打印報表等,檢測裝置記錄的失效數據有失效時(shí)間,失效試品號、觸點(diǎn)號,觸點(diǎn)失效的類(lèi)型,失效時(shí)觸點(diǎn)電壓以及各觸點(diǎn)累計失效次數等;二是通訊程序,接收服務(wù)器的參數設置、基本操作,并上傳試驗狀態(tài)及失效信息。圖2為檢測裝置的操作界面,菜單項代表了所能實(shí)現的所有操作,文本顯示區對設置參數、試驗狀態(tài)以及失效發(fā)生時(shí)的失效信息進(jìn)行顯示。軟件采用可視化編程語(yǔ)言VC++6.0嵌入匯編語(yǔ)言的方法實(shí)現[4]。
圖2 檢測裝置操作界面
3、集中控制的實(shí)現
以太網(wǎng)只定義了物理層和鏈路層,但目前在傳輸層和網(wǎng)絡(luò )層已基本上統一,TCP/IP協(xié)議被普遍采用。傳輸層協(xié)議包括UDP協(xié)議和TCP協(xié)議。無(wú)論是基于UDP協(xié)議或者TCP協(xié)議,都要保證網(wǎng)絡(luò )傳輸的一定的可靠性和實(shí)時(shí)性。由于UDP協(xié)議具有實(shí)現機制簡(jiǎn)單、傳輸效率高的特點(diǎn),其較多地被應用到高效率的實(shí)時(shí)系統中。但為了實(shí)現傳輸的可靠性,就需要在應用層采用一些差錯控制機制,而這些措施與TCP協(xié)議中自帶的傳輸機制非常相似。實(shí)際上,在許多實(shí)時(shí)性的系統中,采用TCP協(xié)議也基本可以滿(mǎn)足傳輸時(shí)間的要求,還避免了在應用層進(jìn)行繁瑣的處理[5]。因此在本方案中傳輸層選擇使用TCP協(xié)議。
應用層的協(xié)議目前還沒(méi)有統一,本文旨在研究一個(gè)可廣泛適用于多種應用場(chǎng)合和多種應用層協(xié)議的通用的通信方案,用戶(hù)可根據需要選擇不同的應用層協(xié)議,也可以定義自己的數據包格式。
3.1 套接字(Socket)
TCP/IP網(wǎng)絡(luò )環(huán)境下的應用程序是通過(guò)網(wǎng)絡(luò )系統編程界面套接字Socket(在Windows操作系統下稱(chēng)之為Winsock)來(lái)實(shí)現的。套接字構成了核心協(xié)議的用戶(hù)視圖,通過(guò)套接字應用程序可訪(fǎng)問(wèn)通信協(xié)議,套接字是網(wǎng)絡(luò )通信的基本構件。套接字是可以被命名的通信端點(diǎn),應用程序通過(guò)它在網(wǎng)絡(luò )上發(fā)送和接收數據。每個(gè)套接字都有其類(lèi)型,并有一個(gè)與之相連的進(jìn)程。TCP/IP提供3種類(lèi)型套接字:
1)流式套接字(Stream Scoket)。該接口提供一個(gè)面向連接、可靠的數據傳輸服務(wù),數據無(wú)差錯、無(wú)重復地發(fā)送,且按發(fā)送順序接收。內設流量控制,避免數據流超限;數據被看作字節流,無(wú)長(cháng)度限制。流式套接字提供了一種可靠的面向連接的數據傳輸方式,如果想發(fā)送大批量數據或想讓數據按順序無(wú)重復地到達目的地,流式套接字最為有用。
2)數據包套接字(Datagram Scoket)。該接口提供一個(gè)無(wú)連接服務(wù)。數據包以獨立包形式被發(fā)送,不提供無(wú)錯保證,數據可能丟失或重復,并且接收順序混亂。數據包套接字比較適用于數據包或記錄型數據的傳輸,數據包的發(fā)送不能得到保證,而且不能排序到達。
3)原始套接字(Raw Scoket)。該接口允許對較低層協(xié)議,如IP、ICMP直接訪(fǎng)問(wèn),主要用于新的網(wǎng)絡(luò )協(xié)議實(shí)現的測試等[6]。
在進(jìn)行網(wǎng)絡(luò )開(kāi)發(fā)時(shí),阻塞問(wèn)題是網(wǎng)絡(luò )編程中十分重要的問(wèn)題。由于在阻塞模式下,在I/O操作完成前,執行操作的Winsock函數會(huì )一直等待下去,不會(huì )立即返回程序(將控制權交還給程序)。故用這種方式,服務(wù)器應用程序將很難同時(shí)通過(guò)多個(gè)建好連接的套接字進(jìn)行通信。在此系統的應用中,需要實(shí)現一臺服務(wù)器同時(shí)和六個(gè)套接字進(jìn)行通信,因此結合對有限硬件資源的考慮,選擇了非阻塞類(lèi)型的套接字,這也是一般協(xié)議開(kāi)發(fā)中通常用到的套接字通信方式。
3.2 通信的實(shí)現
系統通信采用客戶(hù)機/服務(wù)器模式,利用VC的微軟基礎類(lèi)(MFC)進(jìn)行網(wǎng)絡(luò )開(kāi)發(fā),MFC提供了兩種類(lèi)型描述Windows Socket,分別是CAsynSocket和CSocket。其中CAsynSocket類(lèi)封裝了Windows Sockets API,并將與Socket有關(guān)的Windows消息轉換為回調函數。CAsynSocket處于網(wǎng)絡(luò )更底層,其使用就更具靈活性,相應要求編程者應熟悉網(wǎng)絡(luò )底層細節。而CSocket類(lèi)是CAsynSocket類(lèi)的派生類(lèi),通過(guò)MFC中的CArchive類(lèi)的對象提供了更高層次的抽象,它封裝了Socket實(shí)現中的許多細節。這里我們采用CAsynSocket類(lèi)實(shí)現系統中“一對多”的數據發(fā)送,通過(guò)在服務(wù)器中建立Winsock空間數組的方式來(lái)解決[7]。
首先,構造CAsyncSocket類(lèi)型的對象,然后利用該對象創(chuàng )建內嵌的Socket句柄。例如:
CAsyncSocket m_listen;
m_listen.Create(nPort);//服務(wù)器指定端口
若是客戶(hù)端,需要用CAsyncSocket::Connect()函數連接服務(wù)器端的套接字。
時(shí)間繼電器相關(guān)文章:時(shí)間繼電器
評論