1、引言
近些年來,工業以太網通信速率的提高及交換式以太網技術的出現,使得工業以太網的通信性能大為改善。本文所提出的繼電器可靠性檢測系統由服務器和多臺可靠性檢測裝置(客戶端)組成,可靠性檢測裝置是進行可靠性試驗的必要手段。服務器和可靠性檢測裝置通過調用TCP協議提供的套接字傳送數據,實現了服務器對多臺檢測裝置的實時集中檢測和控制,在節省人力的同時有利于失效試驗數據的分析和處理。
2、可靠性檢測裝置的實現方法和功能
檢測裝置主要完成繼電器試品的定數截尾試驗,記錄失效信息,對檢測結果進行分析[2]。通過與服務器建立連接,實時上傳當前試驗狀態以及失效信息,并接收服務器的控制命令。
2.1 實現方法
為了滿足試驗環境的需要,采用工業控制計算機作為檢測裝置的核心。對觸點電壓的采集則選用兩塊高性能數據采集卡來實現,可同時對兩組共32對觸點進行檢測,兩組試品可以是不同型號不同廠商的繼電器,而且對檢測觸點的常開常閉不做限制。需要注意的是,當觸點電壓為交流信號時,為了保證電壓有效值的計算精度,采集卡在一個工頻周期內要完成16個采集通道至少320次的AD轉換,這就要求采集卡的采集速率非??欤狙b置采用的是研華的PCL-818HG。每塊采集卡還提供了一個20-PIN數字輸出口,用來控制試品線圈回路的通斷電。試品觸點回路采用一塊多通道的數字量輸出卡,通過固態繼電器實現對兩組試品觸點回路的通斷電控制。繼電器可靠性檢測裝置的結構框圖如圖1所示。
?
圖1 可靠性檢測裝置結構圖
如果某個試品的全部觸點均達到了最大允許失效次數,那么在接下來的試驗中此試品要被剔除,不再進行試品線圈回路和觸點回路的通斷電操作,避免故障試品因長時間通電而發生危險[3]。
2.2 實現功能
檢測裝置的軟件由兩大部分組成:一是實時檢測與處理程序,包括了試驗參數的設置,對試驗狀態以及失效數據的保存,對失效數據進行數學分析,打印報表等,檢測裝置記錄的失效數據有失效時間,失效試品號、觸點號,觸點失效的類型,失效時觸點電壓以及各觸點累計失效次數等;二是通訊程序,接收服務器的參數設置、基本操作,并上傳試驗狀態及失效信息。圖2為檢測裝置的操作界面,菜單項代表了所能實現的所有操作,文本顯示區對設置參數、試驗狀態以及失效發生時的失效信息進行顯示。軟件采用可視化編程語言VC++6.0嵌入匯編語言的方法實現[4]。
?
圖2 檢測裝置操作界面
3、集中控制的實現
以太網只定義了物理層和鏈路層,但目前在傳輸層和網絡層已基本上統一,TCP/IP協議被普遍采用。傳輸層協議包括UDP協議和TCP協議。無論是基于 UDP協議或者TCP協議,都要保證網絡傳輸的一定的可靠性和實時性。由于UDP協議具有實現機制簡單、傳輸效率高的特點,其較多地被應用到高效率的實時系統中。但為了實現傳輸的可靠性,就需要在應用層采用一些差錯控制機制,而這些措施與TCP協議中自帶的傳輸機制非常相似。實際上,在許多實時性的系統中,采用TCP協議也基本可以滿足傳輸時間的要求,還避免了在應用層進行繁瑣的處理[5]。因此在本方案中傳輸層選擇使用TCP協議。
應用層的協議目前還沒有統一,本文旨在研究一個可廣泛適用于多種應用場合和多種應用層協議的通用的通信方案,用戶可根據需要選擇不同的應用層協議,也可以定義自己的數據包格式。
3.1 套接字(Socket)
TCP/IP網絡環境下的應用程序是通過網絡系統編程界面套接字Socket(在Windows操作系統下稱之為Winsock)來實現的。套接字構成了核心協議的用戶視圖,通過套接字應用程序可訪問通信協議,套接字是網絡通信的基本構件。套接字是可以被命名的通信端點,應用程序通過它在網絡上發送和接收數據。每個套接字都有其類型,并有一個與之相連的進程。TCP/IP提供3種類型套接字:
1)流式套接字(Stream Scoket)。該接口提供一個面向連接、可靠的數據傳輸服務,數據無差錯、無重復地發送,且按發送順序接收。內設流量控制,避免數據流超限;數據被看作字節流,無長度限制。流式套接字提供了一種可靠的面向連接的數據傳輸方式,如果想發送大批量數據或想讓數據按順序無重復地到達目的地,流式套接字最為有用。
2)數據包套接字(Datagram Scoket)。該接口提供一個無連接服務。數據包以獨立包形式被發送,不提供無錯保證,數據可能丟失或重復,并且接收順序混亂。數據包套接字比較適用于數據包或記錄型數據的傳輸,數據包的發送不能得到保證,而且不能排序到達。
3)原始套接字(Raw Scoket)。該接口允許對較低層協議,如IP、ICMP直接訪問,主要用于新的網絡協議實現的測試等[6]。
在進行網絡開發時,阻塞問題是網絡編程中十分重要的問題。由于在阻塞模式下,在I/O操作完成前,執行操作的Winsock函數會一直等待下去,不會立即返回程序(將控制權交還給程序)。故用這種方式,服務器應用程序將很難同時通過多個建好連接的套接字進行通信。在此系統的應用中,需要實現一臺服務器同時和六個套接字進行通信,因此結合對有限硬件資源的考慮,選擇了非阻塞類型的套接字,這也是一般協議開發中通常用到的套接字通信方式。
3.2 通信的實現
系統通信采用客戶機/服務器模式,利用VC的微軟基礎類(MFC)進行網絡開發,MFC提供了兩種類型描述Windows Socket,分別是CAsynSocket和CSocket。其中CAsynSocket類封裝了Windows Sockets API,并將與Socket有關的Windows消息轉換為回調函數。CAsynSocket處于網絡更底層,其使用就更具靈活性,相應要求編程者應熟悉網絡底層細節。而CSocket類是CAsynSocket類的派生類,通過MFC中的CArchive類的對象提供了更高層次的抽象,它封裝了 Socket實現中的許多細節。這里我們采用CAsynSocket類實現系統中“一對多”的數據發送,通過在服務器中建立Winsock空間數組的方式來解決[7]。
首先,構造CAsyncSocket類型的對象,然后利用該對象創建內嵌的Socket句柄。例如:
CAsyncSocket m_listen;
m_listen.Create(nPort);//服務器指定端口
若是客戶端,需要用CAsyncSocket::Connect()函數連接服務器端的套接字。
其次,若是服務器端的套接字,創建完成就可以偵聽端口,以便接收試圖連接到此端口的客戶端的套接字。接收了一個連接請求后就可以進行口令驗證或直接建立連接等工作。服務器偵聽的函數是CAsyncSocket::Listen(),接收客戶端套接字的函數是 CAsyncSocket::Accept()。
繼而采用CAsyncSocket類的成員函數進行數據的收發。發送的函數是CAsyncSocket::send(),接收的函數是CAsyncSocket::Receive()。
最后,通信結束后,通過CAsyncSocket::Close()函數銷毀對象。服務器與檢測裝置的通訊流程見圖3。
?
圖 3 服務器與檢測裝置通信流程圖
CAsyncSocket類對網絡回調函數做了較好的封裝。當有連接請求時,服務器端的套接字就會收到OnAccept消息,此消息觸發網絡回調函數 OnAccept();當服務器接收了連接后,客戶端的套接字就會收到OnConnect消息,此消息觸發網絡回調函數OnConnect();當有數據傳來時,套接字會收到OnReceive消息,此消息觸發網絡回調函數OnReceive()。程序員也可以在CAsyncSocket類的派生類中重載以上回調函數,實現特定的功能。
3.3 數據傳輸及服務器功能
服務器與檢測裝置在不同的狀態下需要傳輸大量的數據,數據所代表的含義也各不相同,例如服務器通過以太網對檢測裝置的操作:簡單的有開始試驗、暫停試驗等,復雜的有設置檢測裝置工作參數、對號設置、讀取失效信息等。因此需要對服務器和檢測裝置傳輸的數據進行嚴格的定義,這里采?。?/p>
Command+Length+Content
Command:通信命令號,Length:文本字節長度,Content:文本字節內容。
如果傳輸內容為簡單的控制數據,則文本字節長度和文本字節內容都為零,否則應按具體的通信內容進行添加。
服務器內部配置一預先定義的超時時間間隔,這個時間要足夠長,以使檢測裝置能夠作出正常的反應,超時事件將觸發服務器來處理錯誤。
服務器操作界面的菜單項和檢測裝置基本一致,在文本顯示區顯示所有建立連接的檢測裝置的試驗狀態和數據。建立連接后,通過服務器對檢測裝置進行操作和在現場直接操作檢測裝置的效果是一樣的。
4、實驗驗證
為了驗證本方案的可行性,整個檢測系統在宏發公司進行了長期的運行,通過網絡監視軟件的分析,數據傳輸的誤碼率極低,在同一局域網內數據傳輸的往返時間大部分集中在100ms以內,達到了傳輸時間的要求,網絡傳輸中斷的情況基本沒有出現。
評論
查看更多