新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于樹莓派的多串口多總線服務器設計

        基于樹莓派的多串口多總線服務器設計

        作者: 時間:2016-09-12 來源:網絡 收藏

        本串口聯網服務器選擇自帶的Python作為開發語言,采用小巧而靈活的web.py開發框架提供HTTP服務,其輕量級滿足采集系統對數據傳輸模塊的要求,可以提高系統的使用效率,WEB服務器設計流程如圖3所示。

        基于樹莓派的多串口多總線服務器設計

        設備上電或系統重啟后,WEB服務自動啟動,并初始化WEB服務器所需顯示和配置的信息,用戶通過瀏覽器訪問系統指定端口進行登錄認證即可訪問參數配置頁面。其中,設備信息和網絡信息通過系統文件管理器進行查看和配置,用戶信息、串口參數和工作模式信息通過數據庫進行讀寫,幫助信息則通過FTP服務器進行說明手冊、公司服務信息等文檔下載。

        3.2 WEB配置頁面設計

        WEB配置頁面即WEB服務器的展示層,如圖4所示,掃描出的串口數表明該帶有16個串口,每個串口配置相互獨立。

        基于樹莓派的多串口多總線服務器設計

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

        基于樹莓派的多串口多總線服務器設計

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

        基于樹莓派的多串口多總線服務器設計

        3.3 串口聯網通信程序設計

        WEB服務器完成配置工作后,即可啟動通信程序進行數據通信工作,具體實現流程如圖7所示。此程序在設備上電或系統重啟后自動啟動,讀取用戶配置的串口通信和工作模式參數后,進入通信程序無限循環,圖中進程數即現場應用所配置的串口總數。其中N為串口數,M(M≤W)為N個串口中使用的串口數;n為各自編號,I為進程編號;S為所配會話數,s為線程編號。

        基于樹莓派的多串口多總線服務器設計

        3種工作模式中,TCP服務器和TCP客戶端同屬TCP協議傳輸程序,其數據幀收發處理過程都采用同一種思想,下面介紹TCP、UDP協議傳輸程序和數據幀轉發程序的設計:

        3.3.1 TOP協議傳輸程序設計

        TCP協議傳輸程序涉及到服務器端和客戶端的設計。

        服務器端程序設計:

        ①建立一個socket,選擇類型INET及TCP連接方式;

        ②讀取配置端口進行綁定監聽,等待客戶端主動連接;

        ③設置監聽隊列大小;

        ④進入一個無限循環,使用accept()等待客戶連接,返回的新連接對應于客戶端IP,建立通信信道;

        ⑤進入無限子循環,通過sendall()及recv()進行讀寫操作。

        客戶端程序設計:

        ①建立一個socket,選擇類型及連接方式同服務器端;

        ②讀取配置所配置遠程服務器IP及端口;

        ③進入無限循環,使用connect()連接遠程服務器,若連不上,達到所配置超時間隔后再次重連;

        ④連接成功后進入無限子循環,通過sendall()及recv()進行讀寫操作。

        3.3.2 UDP協議傳輸程序設計

        UDP傳輸稱為無連接傳輸,不存在TCP中的三次握手和錯誤重傳機制,其傳輸程序需同時讀取所配置的本地IP和端口、遠程IP和端口,建立數據報形式的socket后可同時作為發送端和接收端。作為發送端時,sendto()發送地址為遠程接收端IP和端口,作為接收端時公開本地IP和端口,recvfrom()等待遠程發送端的數據到來,可以接收任何地址發送過來的數據包。

        3.3.3 數據幀轉發程序設計

        串口服務器功能模塊實現了串行鏈路數據與以太網數據轉換的功能:一方面,接收來自串行鏈路的數據幀,并將其轉化為以太網鏈路數據幀后發出;另一方面,接收來自以太網鏈路的數據幀,并將其轉化為串行鏈路數據幀后發出。以上兩個通信過程并行執行,在程序設計中采取多線程實現方式。

        (1)網絡數據的接收

        每種通信模式下,網絡數據的接收都在指定的回調函數中實現,TCP通信接收函數為recv(),而UDP通信中為recvfrom()。當數據幀長度積累到指定的接收緩沖區大小或達到串口超時還不足指定數據幀長度,立即調用實例化后的串口發送函數write(),即可將緩沖區中接收到的數據通過串口轉發。

        (2)網絡數據的發送

        接收串口數據時調用串口接收函數read(),當數據幀長度達到串口接收緩沖區大小或串口超時,立即調用網絡發送函數把該緩沖區中的數據幀通過網口轉發,其中TCP通信發送函數為sendall(),而UDP通信為sendto()。

        結語

        經全面測試合格后,目前本串口服務器已經成功應用到工業現場,由此可見,本串口服務器支持高頻轉發、大數據幀實時轉發,可長期、全天候穩定運行。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 枝江市| 文山县| 福泉市| 康定县| 秦安县| 文登市| 古田县| 玉门市| 青田县| 康定县| 乐亭县| 濮阳县| 垫江县| 寿阳县| 休宁县| 虹口区| 高要市| 连州市| 若尔盖县| 大同县| 调兵山市| 铅山县| 农安县| 武夷山市| 临江市| 盐山县| 凤翔县| 怀化市| 姜堰市| 高雄市| 梓潼县| 梅河口市| 新疆| 丽江市| 宁明县| 琼中| 黄石市| 宁蒗| 东阳市| 五华县| 丁青县|