基于樹莓派的多串口多總線服務(wù)器設(shè)計(jì)
本串口聯(lián)網(wǎng)服務(wù)器選擇樹莓派自帶的Python作為開發(fā)語(yǔ)言,采用小巧而靈活的web.py開發(fā)框架提供HTTP服務(wù),其輕量級(jí)滿足采集系統(tǒng)對(duì)數(shù)據(jù)傳輸模塊的要求,可以提高系統(tǒng)的使用效率,WEB服務(wù)器設(shè)計(jì)流程如圖3所示。
設(shè)備上電或系統(tǒng)重啟后,WEB服務(wù)自動(dòng)啟動(dòng),并初始化WEB服務(wù)器所需顯示和配置的信息,用戶通過瀏覽器訪問系統(tǒng)指定端口進(jìn)行登錄認(rèn)證即可訪問參數(shù)配置頁(yè)面。其中,設(shè)備信息和網(wǎng)絡(luò)信息通過系統(tǒng)文件管理器進(jìn)行查看和配置,用戶信息、串口參數(shù)和工作模式信息通過數(shù)據(jù)庫(kù)進(jìn)行讀寫,幫助信息則通過FTP服務(wù)器進(jìn)行串口服務(wù)器說明手冊(cè)、公司服務(wù)信息等文檔下載。
3.2 WEB配置頁(yè)面設(shè)計(jì)
WEB配置頁(yè)面即WEB服務(wù)器的展示層,如圖4所示,掃描出的串口數(shù)表明該串口服務(wù)器帶有16個(gè)串口,每個(gè)串口配置相互獨(dú)立。
由于配置程序設(shè)計(jì)采取工作模式配置與串口參數(shù)配置相關(guān)聯(lián),如果選用前3個(gè)串口,則工作模式配置中只顯示此3個(gè)串口的工作模式配置界面,如圖5所示。
以上配置方式可方便實(shí)現(xiàn)批量配置,配置完成后可生成配置信息查看界面,如圖6所示,該界面還可進(jìn)行選中串口的通信參數(shù)、工作模式的編輯和刪除。
3.3 串口聯(lián)網(wǎng)通信程序設(shè)計(jì)
WEB服務(wù)器完成配置工作后,即可啟動(dòng)通信程序進(jìn)行數(shù)據(jù)通信工作,具體實(shí)現(xiàn)流程如圖7所示。此程序在設(shè)備上電或系統(tǒng)重啟后自動(dòng)啟動(dòng),讀取用戶配置的串口通信和工作模式參數(shù)后,進(jìn)入通信程序無(wú)限循環(huán),圖中進(jìn)程數(shù)即現(xiàn)場(chǎng)應(yīng)用所配置的串口總數(shù)。其中N為串口服務(wù)器串口數(shù),M(M≤W)為N個(gè)串口中使用的串口數(shù);n為各自編號(hào),I為進(jìn)程編號(hào);S為所配會(huì)話數(shù),s為線程編號(hào)。
3種工作模式中,TCP服務(wù)器和TCP客戶端同屬TCP協(xié)議傳輸程序,其數(shù)據(jù)幀收發(fā)處理過程都采用同一種思想,下面介紹TCP、UDP協(xié)議傳輸程序和數(shù)據(jù)幀轉(zhuǎn)發(fā)程序的設(shè)計(jì):
3.3.1 TOP協(xié)議傳輸程序設(shè)計(jì)
TCP協(xié)議傳輸程序涉及到服務(wù)器端和客戶端的設(shè)計(jì)。
服務(wù)器端程序設(shè)計(jì):
①建立一個(gè)socket,選擇類型INET及TCP連接方式;
②讀取配置端口進(jìn)行綁定監(jiān)聽,等待客戶端主動(dòng)連接;
③設(shè)置監(jiān)聽隊(duì)列大小;
④進(jìn)入一個(gè)無(wú)限循環(huán),使用accept()等待客戶連接,返回的新連接對(duì)應(yīng)于客戶端IP,建立通信信道;
⑤進(jìn)入無(wú)限子循環(huán),通過sendall()及recv()進(jìn)行讀寫操作。
客戶端程序設(shè)計(jì):
①建立一個(gè)socket,選擇類型及連接方式同服務(wù)器端;
②讀取配置所配置遠(yuǎn)程服務(wù)器IP及端口;
③進(jìn)入無(wú)限循環(huán),使用connect()連接遠(yuǎn)程服務(wù)器,若連不上,達(dá)到所配置超時(shí)間隔后再次重連;
④連接成功后進(jìn)入無(wú)限子循環(huán),通過sendall()及recv()進(jìn)行讀寫操作。
3.3.2 UDP協(xié)議傳輸程序設(shè)計(jì)
UDP傳輸稱為無(wú)連接傳輸,不存在TCP中的三次握手和錯(cuò)誤重傳機(jī)制,其傳輸程序需同時(shí)讀取所配置的本地IP和端口、遠(yuǎn)程IP和端口,建立數(shù)據(jù)報(bào)形式的socket后可同時(shí)作為發(fā)送端和接收端。作為發(fā)送端時(shí),sendto()發(fā)送地址為遠(yuǎn)程接收端IP和端口,作為接收端時(shí)公開本地IP和端口,recvfrom()等待遠(yuǎn)程發(fā)送端的數(shù)據(jù)到來,可以接收任何地址發(fā)送過來的數(shù)據(jù)包。
3.3.3 數(shù)據(jù)幀轉(zhuǎn)發(fā)程序設(shè)計(jì)
串口服務(wù)器功能模塊實(shí)現(xiàn)了串行鏈路數(shù)據(jù)與以太網(wǎng)數(shù)據(jù)轉(zhuǎn)換的功能:一方面,接收來自串行鏈路的數(shù)據(jù)幀,并將其轉(zhuǎn)化為以太網(wǎng)鏈路數(shù)據(jù)幀后發(fā)出;另一方面,接收來自以太網(wǎng)鏈路的數(shù)據(jù)幀,并將其轉(zhuǎn)化為串行鏈路數(shù)據(jù)幀后發(fā)出。以上兩個(gè)通信過程并行執(zhí)行,在程序設(shè)計(jì)中采取多線程實(shí)現(xiàn)方式。
(1)網(wǎng)絡(luò)數(shù)據(jù)的接收
每種通信模式下,網(wǎng)絡(luò)數(shù)據(jù)的接收都在指定的回調(diào)函數(shù)中實(shí)現(xiàn),TCP通信接收函數(shù)為recv(),而UDP通信中為recvfrom()。當(dāng)數(shù)據(jù)幀長(zhǎng)度積累到指定的接收緩沖區(qū)大小或達(dá)到串口超時(shí)還不足指定數(shù)據(jù)幀長(zhǎng)度,立即調(diào)用實(shí)例化后的串口發(fā)送函數(shù)write(),即可將緩沖區(qū)中接收到的數(shù)據(jù)通過串口轉(zhuǎn)發(fā)。
(2)網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送
接收串口數(shù)據(jù)時(shí)調(diào)用串口接收函數(shù)read(),當(dāng)數(shù)據(jù)幀長(zhǎng)度達(dá)到串口接收緩沖區(qū)大小或串口超時(shí),立即調(diào)用網(wǎng)絡(luò)發(fā)送函數(shù)把該緩沖區(qū)中的數(shù)據(jù)幀通過網(wǎng)口轉(zhuǎn)發(fā),其中TCP通信發(fā)送函數(shù)為sendall(),而UDP通信為sendto()。
結(jié)語(yǔ)
經(jīng)全面測(cè)試合格后,目前本串口服務(wù)器已經(jīng)成功應(yīng)用到工業(yè)現(xiàn)場(chǎng),由此可見,本串口服務(wù)器支持高頻轉(zhuǎn)發(fā)、大數(shù)據(jù)幀實(shí)時(shí)轉(zhuǎn)發(fā),可長(zhǎng)期、全天候穩(wěn)定運(yùn)行。
評(píng)論