熊啟龍
(水利部淮河水利委員會(huì)水文局(信息中心),安徽 蚌埠 233001)
隨著信息、物聯(lián)網(wǎng)、大數(shù)據(jù)等技術(shù)的高速發(fā)展,水文業(yè)務(wù)的需求越來(lái)越豐富,越來(lái)越多的應(yīng)用場(chǎng)景要求遙測(cè)終端機(jī)具備有線嵌入式以太網(wǎng)通信能力,終端機(jī)通過(guò)有線網(wǎng)絡(luò)接口接入網(wǎng)絡(luò),既可以控制設(shè)備執(zhí)行預(yù)定動(dòng)作,又可以采集具備網(wǎng)絡(luò)接口的傳感器數(shù)據(jù),同時(shí),還可以遵循物聯(lián)網(wǎng)通用協(xié)議接入物聯(lián)網(wǎng),使得終端機(jī)的功能具有很強(qiáng)的擴(kuò)展能力。
遙測(cè)終端機(jī)要具備有線以太網(wǎng)絡(luò)通信能力,設(shè)備除了必須集成以太網(wǎng)絡(luò)通信必需的硬件基礎(chǔ),還必須完整實(shí)現(xiàn) TCP/IP 協(xié)議棧,兩者共同配合完成終端機(jī)的網(wǎng)絡(luò)通信功能[1]。早期的遙測(cè)終端機(jī)由于微控制器 MCU 性能和硬件資源的限制,無(wú)法擁有有線以太網(wǎng)通信能力,在有些要求終端機(jī)必須接入以太網(wǎng)的應(yīng)用場(chǎng)景下,通常采用串口與網(wǎng)口的外部適配器接入網(wǎng)絡(luò)[2],但這種方式速度慢且操作復(fù)雜,無(wú)法建立起豐富的網(wǎng)絡(luò)應(yīng)用。隨著電子技術(shù)的快速發(fā)展,有些高性能的 MCU 片內(nèi)集成了具有部分網(wǎng)絡(luò)功能的外設(shè),通過(guò)在外部集成網(wǎng)絡(luò)接口芯片和搭建外圍電路可使得終端機(jī)具備接入網(wǎng)絡(luò)的硬件基礎(chǔ)。有些網(wǎng)絡(luò)接口芯片在內(nèi)部實(shí)現(xiàn)了 TCP/IP 協(xié)議棧,有些網(wǎng)絡(luò)接口芯片沒有實(shí)現(xiàn),開發(fā)者必須在系統(tǒng)軟件中移植開源的 TCP/IP 協(xié)議棧[3],如 LwIP,uC/TCP-IP,uIP 等,才能具備網(wǎng)絡(luò)通信能力,這是目前在嵌入式設(shè)備中集成有線以太網(wǎng)通信能力的主要技術(shù)手段。
有線以太網(wǎng)絡(luò)通信接口速度比較快,相較于遙測(cè)終端機(jī)常用的串行通信接口,特別適合終端機(jī)與外部的高速通信,在接入設(shè)備端,使得遙測(cè)終端機(jī)可以接入具有網(wǎng)絡(luò)接口的終端設(shè)備,建立起快速高效的有線網(wǎng)絡(luò)通信,如接入網(wǎng)絡(luò)攝像機(jī)(IPC),實(shí)現(xiàn)高清圖像的秒拍秒傳功能。遙測(cè)終端機(jī)具備有線以太網(wǎng)通信能力,使得其不再僅僅是一個(gè)具有單一功能的數(shù)據(jù)采集傳輸控制單元,還能滿足聯(lián)網(wǎng)需求,既承擔(dān)著數(shù)據(jù)的采集傳輸任務(wù),又可以作為網(wǎng)絡(luò)的一個(gè)節(jié)點(diǎn),實(shí)現(xiàn)功能豐富的網(wǎng)絡(luò)應(yīng)用。
OSI 國(guó)際標(biāo)準(zhǔn)化組織將計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分為 7 層參考模型[4],在具體實(shí)現(xiàn)中為了降低復(fù)雜性又將其分為 5 層,即物理層(PHY)、數(shù)據(jù)鏈路層(MAC)、網(wǎng)絡(luò)層(IP)、運(yùn)輸層和應(yīng)用層,而傳統(tǒng)的以太網(wǎng)控制器將 PHY和 MAC 層整合到 1 個(gè)層,稱為網(wǎng)絡(luò)接口層,這樣事實(shí)上又分為 4 層協(xié)議。遙測(cè)終端機(jī)要實(shí)現(xiàn)嵌入式以太網(wǎng)通信,必須完整地實(shí)現(xiàn) 4 層通信,通過(guò)集成 MAC 和 PHY 層控制器實(shí)現(xiàn)網(wǎng)絡(luò)接口層功能,通過(guò)內(nèi)嵌 TCP/IP 協(xié)議棧完成網(wǎng)絡(luò)層、運(yùn)輸層和應(yīng)用層功能。
目前市場(chǎng)上有很多性能強(qiáng)大的 MCU 集成有 MAC 控制器,只需要在外部電路中再集成 1 個(gè) PHY 芯片就可以具備有線網(wǎng)絡(luò)通信的硬件基礎(chǔ),如果沒有集成有 MAC 控制器,需要在外部電路中集成 PHY 和 MAC 控制器的網(wǎng)絡(luò)接口芯片。目前在嵌入式系統(tǒng)中常用的具有代表性的網(wǎng)絡(luò)接口芯片有以下 3 種:
1)LAN8720A 芯片。LAN8720A 芯片是一款以太網(wǎng) PHY 層芯片[5],類似的芯片還有 DP83848,實(shí)際應(yīng)用中必須保證與之相連接的 MCU 集成有 MAC 控制器,二者共同完成網(wǎng)絡(luò)接口層功能,但是上層的網(wǎng)絡(luò)層和運(yùn)輸層并沒有實(shí)現(xiàn),因此需要在設(shè)備中采用軟件實(shí)現(xiàn) TCP/IP 協(xié)議棧以完成網(wǎng)絡(luò)層和運(yùn)輸層功能。
2)ENC28J60 芯片。ENC28J60 芯片是一款具有 SPI 通信接口的獨(dú)立以太網(wǎng)控制芯片[6],兼容 IEEE 802.3,集成 MAC 和 PHY 層,能獨(dú)立完成網(wǎng)絡(luò)體系結(jié)構(gòu)中網(wǎng)絡(luò)接口層功能。但是 ENC28J60 芯片仍然沒有實(shí)現(xiàn)網(wǎng)絡(luò)層和運(yùn)輸層的功能,要實(shí)現(xiàn)有線嵌入式以太網(wǎng)通信,需要在設(shè)備中使用軟件實(shí)現(xiàn) TCP/IP 協(xié)議棧。
3)W5500 芯片。W5500 芯片是一款具有 SPI 通信接口的以太網(wǎng)控制芯片[7],可實(shí)現(xiàn)網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、運(yùn)輸層功能,并在內(nèi)部利用硬件實(shí)現(xiàn) TCP/IP 協(xié)議棧,是一款全硬件 TCP/IP 協(xié)議棧,完全獨(dú)立于主控芯片,與之相連的 MCU 內(nèi)部不需要用軟件實(shí)現(xiàn) TCP/IP 協(xié)議棧,只需要操作寄存器即可實(shí)現(xiàn)復(fù)雜的網(wǎng)絡(luò)應(yīng)用。
從這 3 款芯片的特點(diǎn)可以看出:LAN8720A 和 ENC28J60 芯片都需要 MCU 內(nèi)部用軟件實(shí)現(xiàn) TCP/IP 協(xié)議棧,用戶必須具備一定的以太網(wǎng)技術(shù)及 TCP/IP 相關(guān)知識(shí)才能掌握,對(duì)于 MCU 來(lái)說(shuō),用軟件實(shí)現(xiàn) TCP/IP 協(xié)議棧需要占用 MCU 內(nèi)部很多資源,一些低端的 MCU 甚至無(wú)法完成網(wǎng)絡(luò)通信功能;W5500 芯片內(nèi)部提供 TCP/IP 協(xié)議棧和緩存,可以降低 MCU 的負(fù)載,減少 MCU 內(nèi)部資源的占用,避免移植繁瑣的 TCP/IP 協(xié)議棧,用戶不需要熟悉 TCP/IP 技術(shù)細(xì)節(jié),就可以建立有線網(wǎng)絡(luò)應(yīng)用,非常易于使用。
為此,本研究以 W5500 芯片為硬件基礎(chǔ),介紹其在遙測(cè)終端機(jī)的有線嵌入式以太網(wǎng)開發(fā)應(yīng)用,實(shí)現(xiàn)終端機(jī)的有線網(wǎng)絡(luò)通信功能。
遙測(cè)終端機(jī)的硬件結(jié)構(gòu)以 MCU 為核心,根據(jù)實(shí)際需要利用 MCU 提供的輸入/輸出端口(如通用 GPIO,USART,SPI,A/D 輸入接口和定時(shí)/計(jì)數(shù)器等)搭載合適的外圍電路構(gòu)成一個(gè)獨(dú)立的嵌入式系統(tǒng)。W5500 芯片集成了嵌入式以太網(wǎng)網(wǎng)絡(luò)通信的所有協(xié)議組件,通過(guò)最高支持 80 MHz 頻率的高效 SPI 串行總線與 MCU 連接,實(shí)現(xiàn)高速嵌入式以太網(wǎng)通信,W5500 芯片與 MCU 連接與功能框圖如圖1 所示。在 SPI 總線系統(tǒng)中,MCU 作為主機(jī),W5500 芯片作為從機(jī),由 MCU 控制 SPI 總線通信的速度、開始和結(jié)束,進(jìn)行雙向同步的數(shù)據(jù)交換。
圖1 W5500 芯片連接與功能框圖
遙測(cè)終端機(jī)外部通過(guò) RJ45 網(wǎng)絡(luò)接口提供有線以太網(wǎng)接入功能,在 W5500 芯片與 RJ45 接口之間接入 1 個(gè)網(wǎng)口變壓器用以增強(qiáng)信號(hào),使信號(hào)傳輸距離更遠(yuǎn),另外還可將 W5500 芯片與外部隔離,使其抗干擾能力大大增強(qiáng),且增加對(duì)芯片的保護(hù)作用(如雷擊)。
為減少系統(tǒng)功耗,設(shè)計(jì) W5500 芯片(3.3 V 供電)運(yùn)行在掉電模式,當(dāng)需要傳輸數(shù)據(jù)時(shí)加電,日常工作在掉電狀態(tài)。
通常,遙測(cè)終端機(jī)應(yīng)用程序工作在嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)平臺(tái)上,被劃分成多個(gè)獨(dú)立且并發(fā)執(zhí)行的不同優(yōu)先級(jí)的任務(wù)[8],設(shè)計(jì)將 W5500 芯片的服務(wù)程序作為 1 個(gè)獨(dú)立的任務(wù),阻塞運(yùn)行,當(dāng)接收到其他任務(wù)發(fā)送的信號(hào)后,就啟動(dòng)該任務(wù),將 W5500 芯片上電,待其穩(wěn)定,與中心站建立 TCP/IP 連接后執(zhí)行預(yù)定網(wǎng)絡(luò)通信應(yīng)用,完畢后掉電,任務(wù)將再次阻塞運(yùn)行。
W5500 芯片可同時(shí)支持 8 個(gè)獨(dú)立的 Socket(套接字)通信信道[9],各個(gè) Socket 提供不同的網(wǎng)絡(luò)服務(wù)。W5500 芯片擁有片上 32 kB 緩存,可以同時(shí)供 8 個(gè)獨(dú)立 Socket 的發(fā)送和接收緩存使用,每個(gè) Socket 的接收和發(fā)送緩存默認(rèn)是 2 kB,可以通過(guò)配置修改每個(gè) Socket 的緩存大小。W5500 芯片擁有1 個(gè)通用和 8 個(gè) Socket 的寄存器區(qū),通用寄存器區(qū)用于配置 W5500 芯片的基本信息,包括 IP 和 MAC 地址,中斷持續(xù)時(shí)間、標(biāo)志位、屏蔽位等參數(shù);每個(gè) Socket 的數(shù)據(jù)通信是通過(guò) Socketn 寄存器區(qū)單獨(dú)控制(0 ≤ n ≤ 7)的,可通過(guò)其設(shè)置每個(gè) Socket 的服務(wù)類型和生存時(shí)間等參數(shù)動(dòng)作,配置中斷標(biāo)志位,設(shè)置接收和發(fā)送緩存大小,以及指示緩存當(dāng)前空閑空間大小等。
除了硬件芯片,廠家還提供一套開源的 C 語(yǔ)言開發(fā)的通用驅(qū)動(dòng)庫(kù) Wiznet/ioLibrary_Driver,以幫助用戶快速開發(fā),通過(guò)該驅(qū)動(dòng)庫(kù)提供的開發(fā)接口,用戶可以很方便地建立有線嵌入式以太網(wǎng)絡(luò)應(yīng)用。驅(qū)動(dòng)庫(kù)主要由 Ethernet 和 Internet 兩部分目錄文件組成,其中 Ethernet 目錄主要由以下 3 組文件構(gòu)成:文件 w5500.c/h,提供操作 W5500 芯片內(nèi)部寄存器的通用功能函數(shù),用以讀取或設(shè)置內(nèi)部寄存器;文件 wizchip_conf.c/h,提供 SPI 接口的移植回調(diào)函數(shù)接口,此文件提供的接口是對(duì) W5500 芯片內(nèi)部寄存器操作的抽象;文件 socket.c/h,是 Sokcet 的 API 實(shí)現(xiàn)文件,提供一系列符合伯克利套接字(BSD Socket)的應(yīng)用編程接口。Ethernet 目錄文件提供應(yīng)用層與 TCP/IP 協(xié)議之間的軟件抽象層,把復(fù)雜的 TCP/IP 協(xié)議族抽象成 Socket 接口,屏蔽了 W5500 芯片復(fù)雜的寄存器操作?;?Ethernet 目錄文件提供的 Socket 接口,Internet 目錄提供 1 組應(yīng)用層通用協(xié)議,包括 DHCP,DNS,F(xiàn)TP,MQTT,SNTP 等通信協(xié)議,可以在應(yīng)用程序中直接使用。
W5500 芯片驅(qū)動(dòng)庫(kù) ioLibrary_Driver 主要功能結(jié)構(gòu)如圖2 所示。
圖2 驅(qū)動(dòng)庫(kù) ioLibrary_Driver 功能結(jié)構(gòu)圖
socket.c/h 文件中 1 組符合 BSD Socket 的 C 語(yǔ)言應(yīng)用編程接口示例如下:
1)int8_t socket(uint8_t sn,uint8_t protocol, uint16_t port,uint8_t flag),初始化并打開“sn”序號(hào)的 Socket;
2)int8_t close(uint8_t sn),關(guān)閉“sn”序號(hào)的Socket;
3)int8_t connect(uint8_t sn,uint8_t * addr,uint16_t port),采用“sn”序號(hào)的 Socket 與遠(yuǎn)程地址建立連接;
4)int8_t disconnect(uint8_t sn),關(guān)閉“sn”序號(hào)的 Socket 的連接。
移植好驅(qū)動(dòng)庫(kù),用戶不需要關(guān)心寄存器操作的細(xì)節(jié),只需要按照要求調(diào)用以上符合 BSD Socket 的應(yīng)用編程接口就可以實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用,由于采用了 BSD Socket 接口,應(yīng)用程序可以在不同的系統(tǒng)平臺(tái)移植。如終端機(jī)要與中心站以阻塞模式建立 Socket 連接,完成任務(wù)后再關(guān)閉 Socket 連接,可采用如下步驟:
1)通過(guò)函數(shù) ctlsocket(nSocket,CS_SET_IOMODE,SOCK_IO_BLOCK)設(shè)置 Socket 的連接模式為阻塞模式。其中:參數(shù) nSocket 為 Socket 序號(hào);CS_SET_IOMODE 為宏定義,表示該函數(shù)功能為設(shè)置連接模式;SOCK_IO_BLOCK 為宏定義,表示阻塞模式。
2)通過(guò) connect(nSocket,servIP,port)函數(shù)與中心站以阻塞模式建立 Socket 連接。其中:參數(shù) nSocket 為 Socket 序號(hào);servIP 和 port 分別為中心站的 IP 地址和端口號(hào)。該函數(shù)封裝了對(duì)芯片內(nèi)部 Socket 寄存器區(qū) Sn_DIPR(IP 地址寄存器)、Sn_PORT(端口寄存器)、Sn_CR(控制寄存器)等寄存器的操作。
如果與中心站建立 Socket 連接成功,函數(shù)會(huì)返回 SOCK_OK;如果建立連接失敗,程序會(huì)持續(xù)阻塞在該函數(shù)一段時(shí)間后, 才返回 SOCK_ERROR。
3)網(wǎng)絡(luò)通信任務(wù)完成后,采用 disconnect(nSocket)關(guān)閉 Socket 連接,該函數(shù)封裝了內(nèi)部Sn_CR 的操作。
MCU 主控芯片通過(guò) SPI 接口與 W5500 芯片相連,初始化過(guò)程主要如下:
1)SPI 接口初始化,按照要求封裝成操作函數(shù)w5500_read_byte ( ) 和 w5500_write_byte ( ),并將其通過(guò)回調(diào)函數(shù)注冊(cè)到 ioLibrary_Driver 驅(qū)動(dòng)庫(kù)中。
2)設(shè)置 W5500 芯片的 IP 地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址等網(wǎng)絡(luò)信息參數(shù),也可以采用 DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議)自動(dòng)獲取。
3)配置內(nèi)部 8 個(gè) Socket 的接收和發(fā)送緩存區(qū)的大小。
4)根據(jù)實(shí)際應(yīng)用需要配置 W5500 芯片數(shù)據(jù)發(fā)送失敗的溢出時(shí)間及最大重新傳輸次數(shù)等參數(shù)。
初始化完成后,就可以在應(yīng)用層通過(guò)調(diào)用 BSD Socket 接口函數(shù),與遠(yuǎn)程主機(jī)進(jìn)行 Socket 連接、數(shù)據(jù)傳輸、連接關(guān)閉等操作。
當(dāng)需要進(jìn)行有線網(wǎng)絡(luò)通信時(shí),遙測(cè)終端機(jī)首先控制打開 W5500 芯片的電源,等待一段時(shí)間(1~3s)待其穩(wěn)定后,開始設(shè)置 MCU 內(nèi)部的SPI 總線通信外設(shè),包括 SPI 接口的工作模式、時(shí)鐘頻率和中斷標(biāo)志位等參數(shù)。接著通過(guò)庫(kù)函數(shù) wizphy_getphylink( ) 檢查 RJ45 網(wǎng)絡(luò)接口的網(wǎng)線是否插入,如果網(wǎng)線正常插入,就根據(jù)接入的局域網(wǎng)絡(luò)環(huán)境開始設(shè)置 W5500 芯片的 IP 地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址等網(wǎng)絡(luò)信息參數(shù)和通信過(guò)程中使用的 Socket 的參數(shù)。以下為設(shè)置 Socket0 的發(fā)送和接收緩沖區(qū) C 語(yǔ)言程序示例代碼,其中,WIZCHIP_SOCK_NUM_是驅(qū)動(dòng)庫(kù)中 wizchip_conf.h 頭文件中的一個(gè)宏定義,為 8,表示 W5500 芯片最多能同時(shí)支持 8 個(gè) Socket 連接:
1)uint8_t txsize [_WIZCHIP_SOCK_NUM_] = {16,0,0,0,0,0,0,0},定義發(fā)送緩沖區(qū)大小數(shù)組,數(shù)組中 8 個(gè)元素表示芯片內(nèi)部 8 個(gè) Socket 所用的發(fā)送緩沖區(qū)大?。?/p>
2)uint8_t rxsize [_WIZCHIP_SOCK_NUM_] = {16,0,0,0,0,0,0,0},定義接收緩沖區(qū)大小數(shù)組,數(shù)組中 8 個(gè)元素表示芯片內(nèi)部 8 個(gè) Socket 所用的接收緩沖區(qū)大??;
3)wizchip_init(txsize,rxsize),該函數(shù)設(shè)置Socket0 的發(fā)送和接收緩沖區(qū)大小各為 16 kB,其余 7 個(gè) Socket 的發(fā)送和接收緩沖區(qū)大小設(shè)置為 0,發(fā)送和接收緩沖區(qū)大小合計(jì)為 32 kB,只為 Socket0 所使用。
遙測(cè)終端機(jī)集成 W5500 網(wǎng)絡(luò)接口,使得遙測(cè)終端機(jī)通過(guò)有線方式可以接至以太網(wǎng)絡(luò),既可以作為客戶端也可以作為服務(wù)端建立起豐富的網(wǎng)絡(luò)應(yīng)用,終端機(jī)主要有 3 種常用的有線以太網(wǎng)網(wǎng)絡(luò)應(yīng)用。
通常情況下,遙測(cè)站都是采用無(wú)線移動(dòng)通信網(wǎng)絡(luò)傳輸采集數(shù)據(jù)的,W5500 芯片提供了一種有線的以太網(wǎng)接入方式作為 TCP Client 與中心站建立連接并傳輸數(shù)據(jù),無(wú)線移動(dòng)通信網(wǎng)絡(luò)和有線嵌入式網(wǎng)絡(luò)發(fā)送數(shù)據(jù)的接收方式都是一樣的,中心站的數(shù)據(jù)接收方式和方法不需要做任何改動(dòng)。
以采用 Socket0 為例,遙測(cè)終端機(jī)主要通信過(guò)程如下:
1)通過(guò)函數(shù) socket(0,Sn_MR_TCP,any_port ++,0x00) 創(chuàng)建 Socket0,初始化后打開Socket0。其中:參數(shù) 0 表示 Socket0;Sn_MR_TCP 表示采用 TCP 傳輸控制層協(xié)議;any_port 為本地 TCP 綁定端口,為保證每個(gè) Socket 綁定的本地地址不沖突,每次調(diào)用該函數(shù),any_port 都需要加 1。
2)通過(guò) Connect(0,remote_IP,port)函數(shù)與中心站服務(wù)器建立 TCP 連接。其中:參數(shù) remort_IP 為中心站的 IP 地址,為 4 字節(jié)數(shù)組;port 為中心站服務(wù)端口號(hào)。
3)通過(guò)函數(shù) Send(0,buffer,len)向中心站發(fā)送數(shù)據(jù)。其中:參數(shù) buffer 為發(fā)送緩沖區(qū)首地址;len 為發(fā)送數(shù)據(jù)長(zhǎng)度,以字節(jié)為單位。
4)通過(guò)函數(shù) recv(0,bufer,size)接收中心站返回的數(shù)據(jù)。其中:參數(shù) buffer 為接收緩沖區(qū)首地址;size 為緩沖區(qū)數(shù)據(jù)長(zhǎng)度,以字節(jié)為單位。
5)通過(guò)函數(shù) disconnect(0)與中心站斷開 TCP連接,并關(guān)閉 Socket0。
采用 TCP Client 傳輸數(shù)據(jù)只需要以上 5 個(gè)步驟就可以實(shí)現(xiàn) 1 次完整的 TCP 數(shù)據(jù)傳輸通信。
遙測(cè)終端機(jī)作為 HTTP 網(wǎng)頁(yè)服務(wù)器[10],用戶可以使用與終端機(jī)通過(guò)網(wǎng)絡(luò)連接的計(jì)算機(jī)上的瀏覽器查看或者設(shè)置終端機(jī)內(nèi)部參數(shù)和數(shù)據(jù)。
要實(shí)現(xiàn)查看或設(shè)置功能,終端機(jī)內(nèi)部必須基于 W5500 芯片實(shí)現(xiàn) HTTP 應(yīng)用層協(xié)議,它允許將 HTML 文檔從終端機(jī)傳送到瀏覽器,在這種情況下,終端機(jī)作為 TCP Server 服務(wù)端提供偵聽服務(wù)。以 Socket0 為例,主要通信過(guò)程如下:
1)通過(guò) socket(0,Sn_MR_TCP,80,0)函數(shù)創(chuàng)建 Socket0,初始化后打開 Socket0,其中參數(shù) 80 是本地偵聽端口。
2)通過(guò)函數(shù) listen(0)啟動(dòng) Socket0 偵聽服務(wù)。
3)計(jì)算機(jī)的網(wǎng)頁(yè)瀏覽器作為 Client 客戶端與終端機(jī)建立 TCP 連接。
4)瀏覽器發(fā)送 HTTP 請(qǐng)求,遙測(cè)終端機(jī)Socket0 接收到 HTTP 請(qǐng)求后返回 HTTP 響應(yīng),報(bào)文正文包含 HTML 超文本信息。
5)瀏覽器接收到 HTTP 響應(yīng)后,提取 HTML 超文本信息并解析,顯示 Web 頁(yè)面。
6)瀏覽器根據(jù)用戶的 Web 頁(yè)面操作,再次向遙測(cè)終端機(jī)提交 HTTP 請(qǐng)求。其中報(bào)文正文包含有配置信息,終端機(jī)在接收到 HTTP 請(qǐng)求后,提取報(bào)文正文中相關(guān)的配置信息做出相應(yīng)動(dòng)作,實(shí)現(xiàn)遠(yuǎn)程控制。
7)任務(wù)完成后,終端機(jī)關(guān)閉與客戶端瀏覽器的TCP 連接。
需要說(shuō)明的是:客戶端瀏覽器如果要連續(xù)獲取終端機(jī)的實(shí)時(shí)數(shù)據(jù)而不必每次都刷新整個(gè) HTML 頁(yè)面,可以采用 HTML5 的 Socket API 實(shí)現(xiàn)瀏覽器向終端機(jī)實(shí)時(shí)獲取數(shù)據(jù)。
近年來(lái),物聯(lián)網(wǎng)技術(shù)的快速發(fā)展為水文自動(dòng)測(cè)報(bào)系統(tǒng)提供了新的業(yè)務(wù)應(yīng)用模式。遙測(cè)終端機(jī)和中心站通過(guò) MQTT(Message Queuing Telemetry Transport)協(xié)議連接到阿里云、騰訊云或者其他私有云物聯(lián)網(wǎng)平臺(tái),通過(guò)配置,兩者互相不知道對(duì)方的 IP 地址和端口號(hào),甚至不需要同時(shí)在線就可以實(shí)現(xiàn)信息的互傳,解除遙測(cè)站與中心站之間時(shí)間和空間的緊耦合。
MQTT 協(xié)議是一種工作在 TCP 協(xié)議層之上的基于發(fā)布/訂閱的異步通信模式的應(yīng)用層協(xié)議,終端機(jī)和中心站采用 MQTT 協(xié)議連接物聯(lián)網(wǎng)云平臺(tái),此時(shí),遙測(cè)站和中心站是客戶端,云平臺(tái)是服務(wù)端,兩者都作為 TCP Client 與云平臺(tái)建立連接。通過(guò)接入云平臺(tái),不僅可以實(shí)現(xiàn)遙測(cè)站采集數(shù)據(jù)的實(shí)時(shí)上傳,還可以實(shí)現(xiàn)中心站控制指令向遙測(cè)站的實(shí)時(shí)下發(fā),實(shí)現(xiàn)去中心化的應(yīng)用模式。
在遙測(cè)終端機(jī)中集成 W5500 芯片和移植驅(qū)動(dòng)庫(kù),可以很方便地開發(fā)建立網(wǎng)絡(luò)應(yīng)用,使得終端機(jī)具備網(wǎng)絡(luò)通信能力,具有占用 MCU 資源少、開發(fā)方便等優(yōu)點(diǎn)。但是 W5500 芯片最多只支持同時(shí)建立 8 個(gè)Socket 應(yīng)用,如果要實(shí)現(xiàn)更為復(fù)雜的網(wǎng)絡(luò)應(yīng)用,可以采用 LAN8720A 或 ENC28J60 等芯片,用軟件實(shí)現(xiàn) TCP/IP 協(xié)議棧,充分挖掘 MCU 的性能,建立起更為靈活、高效、功能豐富的網(wǎng)絡(luò)服務(wù)。針對(duì)開源 TCP/IP 協(xié)議棧的移植和使用,可以進(jìn)行進(jìn)一步的研究工作。具有嵌入式以太網(wǎng)通信功能的遙測(cè)終端機(jī),可以讓水文自動(dòng)測(cè)報(bào)系統(tǒng)實(shí)現(xiàn)越來(lái)越豐富的業(yè)務(wù)應(yīng)用新模式。