基于樹(shù)莓派的多串口多總線(xiàn)服務(wù)器設計
本串口聯(lián)網(wǎng)服務(wù)器選擇樹(shù)莓派自帶的Python作為開(kāi)發(fā)語(yǔ)言,采用小巧而靈活的web.py開(kāi)發(fā)框架提供HTTP服務(wù),其輕量級滿(mǎn)足采集系統對數據傳輸模塊的要求,可以提高系統的使用效率,WEB服務(wù)器設計流程如圖3所示。

設備上電或系統重啟后,WEB服務(wù)自動(dòng)啟動(dòng),并初始化WEB服務(wù)器所需顯示和配置的信息,用戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn)系統指定端口進(jìn)行登錄認證即可訪(fǎng)問(wèn)參數配置頁(yè)面。其中,設備信息和網(wǎng)絡(luò )信息通過(guò)系統文件管理器進(jìn)行查看和配置,用戶(hù)信息、串口參數和工作模式信息通過(guò)數據庫進(jìn)行讀寫(xiě),幫助信息則通過(guò)FTP服務(wù)器進(jìn)行串口服務(wù)器說(shuō)明手冊、公司服務(wù)信息等文檔下載。
3.2 WEB配置頁(yè)面設計
WEB配置頁(yè)面即WEB服務(wù)器的展示層,如圖4所示,掃描出的串口數表明該串口服務(wù)器帶有16個(gè)串口,每個(gè)串口配置相互獨立。

由于配置程序設計采取工作模式配置與串口參數配置相關(guān)聯(lián),如果選用前3個(gè)串口,則工作模式配置中只顯示此3個(gè)串口的工作模式配置界面,如圖5所示。

以上配置方式可方便實(shí)現批量配置,配置完成后可生成配置信息查看界面,如圖6所示,該界面還可進(jìn)行選中串口的通信參數、工作模式的編輯和刪除。

3.3 串口聯(lián)網(wǎng)通信程序設計
WEB服務(wù)器完成配置工作后,即可啟動(dòng)通信程序進(jìn)行數據通信工作,具體實(shí)現流程如圖7所示。此程序在設備上電或系統重啟后自動(dòng)啟動(dòng),讀取用戶(hù)配置的串口通信和工作模式參數后,進(jìn)入通信程序無(wú)限循環(huán),圖中進(jìn)程數即現場(chǎng)應用所配置的串口總數。其中N為串口服務(wù)器串口數,M(M≤W)為N個(gè)串口中使用的串口數;n為各自編號,I為進(jìn)程編號;S為所配會(huì )話(huà)數,s為線(xiàn)程編號。

3種工作模式中,TCP服務(wù)器和TCP客戶(hù)端同屬TCP協(xié)議傳輸程序,其數據幀收發(fā)處理過(guò)程都采用同一種思想,下面介紹TCP、UDP協(xié)議傳輸程序和數據幀轉發(fā)程序的設計:
3.3.1 TOP協(xié)議傳輸程序設計
TCP協(xié)議傳輸程序涉及到服務(wù)器端和客戶(hù)端的設計。
服務(wù)器端程序設計:
①建立一個(gè)socket,選擇類(lèi)型INET及TCP連接方式;
②讀取配置端口進(jìn)行綁定監聽(tīng),等待客戶(hù)端主動(dòng)連接;
③設置監聽(tīng)隊列大小;
④進(jìn)入一個(gè)無(wú)限循環(huán),使用accept()等待客戶(hù)連接,返回的新連接對應于客戶(hù)端IP,建立通信信道;
⑤進(jìn)入無(wú)限子循環(huán),通過(guò)sendall()及recv()進(jìn)行讀寫(xiě)操作。
客戶(hù)端程序設計:
①建立一個(gè)socket,選擇類(lèi)型及連接方式同服務(wù)器端;
②讀取配置所配置遠程服務(wù)器IP及端口;
③進(jìn)入無(wú)限循環(huán),使用connect()連接遠程服務(wù)器,若連不上,達到所配置超時(shí)間隔后再次重連;
④連接成功后進(jìn)入無(wú)限子循環(huán),通過(guò)sendall()及recv()進(jìn)行讀寫(xiě)操作。
3.3.2 UDP協(xié)議傳輸程序設計
UDP傳輸稱(chēng)為無(wú)連接傳輸,不存在TCP中的三次握手和錯誤重傳機制,其傳輸程序需同時(shí)讀取所配置的本地IP和端口、遠程IP和端口,建立數據報形式的socket后可同時(shí)作為發(fā)送端和接收端。作為發(fā)送端時(shí),sendto()發(fā)送地址為遠程接收端IP和端口,作為接收端時(shí)公開(kāi)本地IP和端口,recvfrom()等待遠程發(fā)送端的數據到來(lái),可以接收任何地址發(fā)送過(guò)來(lái)的數據包。
3.3.3 數據幀轉發(fā)程序設計
串口服務(wù)器功能模塊實(shí)現了串行鏈路數據與以太網(wǎng)數據轉換的功能:一方面,接收來(lái)自串行鏈路的數據幀,并將其轉化為以太網(wǎng)鏈路數據幀后發(fā)出;另一方面,接收來(lái)自以太網(wǎng)鏈路的數據幀,并將其轉化為串行鏈路數據幀后發(fā)出。以上兩個(gè)通信過(guò)程并行執行,在程序設計中采取多線(xiàn)程實(shí)現方式。
(1)網(wǎng)絡(luò )數據的接收
每種通信模式下,網(wǎng)絡(luò )數據的接收都在指定的回調函數中實(shí)現,TCP通信接收函數為recv(),而UDP通信中為recvfrom()。當數據幀長(cháng)度積累到指定的接收緩沖區大小或達到串口超時(shí)還不足指定數據幀長(cháng)度,立即調用實(shí)例化后的串口發(fā)送函數write(),即可將緩沖區中接收到的數據通過(guò)串口轉發(fā)。
(2)網(wǎng)絡(luò )數據的發(fā)送
接收串口數據時(shí)調用串口接收函數read(),當數據幀長(cháng)度達到串口接收緩沖區大小或串口超時(shí),立即調用網(wǎng)絡(luò )發(fā)送函數把該緩沖區中的數據幀通過(guò)網(wǎng)口轉發(fā),其中TCP通信發(fā)送函數為sendall(),而UDP通信為sendto()。
結語(yǔ)
經(jīng)全面測試合格后,目前本串口服務(wù)器已經(jīng)成功應用到工業(yè)現場(chǎng),由此可見(jiàn),本串口服務(wù)器支持高頻轉發(fā)、大數據幀實(shí)時(shí)轉發(fā),可長(cháng)期、全天候穩定運行。
評論