羅毅
【摘 要】隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,嵌入式儀表設(shè)備逐漸納入物聯(lián)網(wǎng)信息平臺。對于常規(guī)的嵌入式儀表設(shè)備,通常不具備與物聯(lián)網(wǎng)數(shù)據(jù)交互的通道,必須通過路由器、串口服務(wù)器等方式接入物聯(lián)網(wǎng)信息平臺。
【Abstract】With the development of Internet of things technology, embedded instrument equipment is gradually incorporated into the information platform of the Internet of things. Conventional embedded instrumentation usually does not have data access to Internet of things. It must access Internet of things information platform by means of routers and serial servers.
【關(guān)鍵詞】物聯(lián)網(wǎng)信息平臺;串口服務(wù)器;網(wǎng)絡(luò)多鏈路
【Keywords】internet of things information platform; serial server; network multi-link
【中圖分類號】TP393.11 【文獻(xiàn)標(biāo)志碼】A 【文章編號】1673-1069(2018)03-0147-02
1 串口服務(wù)器簡介
串口服務(wù)器又叫串口聯(lián)網(wǎng)服務(wù)器,是為RS-232/485串口到TCP/IP網(wǎng)絡(luò)之間完成數(shù)據(jù)轉(zhuǎn)換和傳輸?shù)耐ㄐ沤涌谵D(zhuǎn)換器,提供RS-232/485終端串口與TCP/IP網(wǎng)絡(luò)的數(shù)據(jù)雙向透明傳輸,提供串口轉(zhuǎn)網(wǎng)絡(luò)功能,RS-232/485串口轉(zhuǎn)網(wǎng)絡(luò)的解決方案可以讓串口設(shè)備方便、快捷的接入互聯(lián)網(wǎng)網(wǎng)絡(luò)。
2 W5500簡介
W5500是韓國WIZnet公司生產(chǎn)的一款全硬件TCP/IP嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)設(shè)備提供了簡易的互聯(lián)網(wǎng)連接方案。W5500集成了TCP/IP協(xié)議棧,10/100M以太網(wǎng)數(shù)據(jù)鏈路層(MAC)及物理層(PHY),使得用戶使用單芯片就能夠拓展實現(xiàn)網(wǎng)絡(luò)連接功能。
W5500內(nèi)嵌32K字節(jié)數(shù)據(jù)緩存用于緩存以太網(wǎng)數(shù)據(jù)包,最多支持8個硬件Socket獨(dú)立通訊。W5500提供了SPI(外設(shè)串行接口)從而能夠更加容易與外設(shè)MCU整合。高效SPI協(xié)議支持80MHz速率,從而能夠更好地實現(xiàn)高速網(wǎng)絡(luò)通信。以太網(wǎng)控制芯片W5500具有以下特點(diǎn):①支持硬件TCP/IP協(xié)議:TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE和以太網(wǎng)的PHY和MAC層;②支持8個獨(dú)立的Socket同時工作,可同時工作在不同的工作模式;③支持高速SPI接口,SPI的時鐘最高可達(dá)80MHz,極大地提高了網(wǎng)絡(luò)通訊的數(shù)據(jù)傳輸速率;④內(nèi)部集成32KB存儲器用于發(fā)送/接收緩存;⑤內(nèi)嵌10BaseT/100BaseTX以太網(wǎng)物理層(PHY);⑥支持自動協(xié)商(10/100Based全雙工/半雙工)。
3 系統(tǒng)設(shè)計
3.1 硬件設(shè)計
串口服務(wù)器主要由MCU、以太網(wǎng)控制器、硬件看門狗和線性穩(wěn)壓器組成。其中MCU選用M3處理器LPC1763,該處理器主頻達(dá)到100MHz,內(nèi)置256Mflash和64K RAM,還具有多個SPI和RS232等串行接口,完全能夠滿足串口服務(wù)器設(shè)計需求。為提高系統(tǒng)穩(wěn)定性,串口服務(wù)器還配置了獨(dú)立的硬件看門狗CAT706。系統(tǒng)采用5V供電,內(nèi)置3.3V穩(wěn)壓器LM1117。系統(tǒng)下行通過RS-232接口與底層數(shù)據(jù)采集系統(tǒng)交換數(shù)據(jù),上行通過RJ45接口接入物聯(lián)網(wǎng)平臺。
3.2 軟件設(shè)計
為確保串口服務(wù)器對各種中斷能夠?qū)崟r響應(yīng),系統(tǒng)軟件采用UCOSⅡ嵌入式多任務(wù)實時操作系統(tǒng),根據(jù)系統(tǒng)功能,系統(tǒng)建立了網(wǎng)絡(luò)監(jiān)測任務(wù)、網(wǎng)絡(luò)中斷處理任務(wù)及串口數(shù)據(jù)接收處理任務(wù)3個任務(wù)進(jìn)程,其中串口數(shù)據(jù)接收處理任務(wù)和網(wǎng)絡(luò)中斷處理任務(wù)平時處于掛起狀態(tài),只有當(dāng)串口接收到數(shù)據(jù)或接收到W5500的中斷事件信號時才執(zhí)行[1]。幾個任務(wù)的主要功能如下:
網(wǎng)絡(luò)監(jiān)測任務(wù):定時監(jiān)測網(wǎng)絡(luò)狀態(tài),處理網(wǎng)絡(luò)斷開重連、TCP Server模式下接收到Client連接請求、TCP模式下接收到對方斷開請求及UDP模式下“OPEN”命令生效等網(wǎng)絡(luò)狀態(tài)事件。同時查看并處理網(wǎng)絡(luò)異常中斷事件,讓網(wǎng)絡(luò)連接在異常狀態(tài)下恢復(fù)。
網(wǎng)絡(luò)中斷處理任務(wù):響應(yīng)并處理以太網(wǎng)接收到數(shù)據(jù)事件、網(wǎng)絡(luò)Socket連接建立成功、接收到對方網(wǎng)絡(luò)斷開請求、接收到數(shù)據(jù)發(fā)送成功應(yīng)答等網(wǎng)絡(luò)正常中斷事件。該任務(wù)平時處于掛起狀態(tài),只有當(dāng)接收到網(wǎng)絡(luò)正常中斷信號才執(zhí)行。
串口數(shù)據(jù)接收處理任務(wù):通過中斷方式接收底層數(shù)據(jù)采集控制系統(tǒng)發(fā)送過來的數(shù)據(jù),根據(jù)當(dāng)前網(wǎng)絡(luò)狀態(tài)將數(shù)據(jù)發(fā)送到以太網(wǎng)控制器數(shù)據(jù)發(fā)送緩沖區(qū)。該任務(wù)平時處于掛起狀態(tài),只有當(dāng)接收到串口數(shù)據(jù)幀才執(zhí)行。
4 網(wǎng)絡(luò)數(shù)據(jù)處理關(guān)鍵功能代碼(C語言)
MCU接收到W5500的網(wǎng)絡(luò)接收數(shù)據(jù)中斷信號,先用過“Read_SOCK_2_Byte”函數(shù)提取接收網(wǎng)絡(luò)數(shù)據(jù)長度信息,并判斷數(shù)據(jù)長度是否合法。若數(shù)據(jù)長度合法,則通過“Read_SOCK_2_Byte”函數(shù)提取接收數(shù)據(jù)在接收緩沖區(qū)內(nèi)的偏移量,分別根據(jù)接收數(shù)據(jù)長度及偏移量判斷接收數(shù)據(jù)是否溢出,根據(jù)溢出情況讀取緩沖區(qū)數(shù)據(jù),再將讀取到的數(shù)據(jù)填充到MCU的數(shù)據(jù)接收緩沖區(qū)等待處理。
unsigned short rx_size;//接收數(shù)據(jù)長度
unsigned short offset, offset1;// offset:相對偏移, offset1:絕對偏移
unsigned short i;
unsigned char j;
rx_size=Read_SOCK_2_Byte(s,Sn_RX_RSR);
if(rx_size==0)
return 0;
if(rx_size>1460)
rx_size=1460;
offset=Read_SOCK_2_Byte(s,Sn_RX_RD);
offset1=offset;
offset&=(S_RX_SIZE-1);
LPC17xx_SPI_Select ();//Set W5500 SCS Low
LPC17xx_SPI_SendByte (offset/256); // Write Address
LPC17xx_SPI_SendByte (offset);
LPC17xx_SPI_SendByte (VDM|RWB_READ|(s*0x20+0x18));// Write Control Byte
if((offset+rx_size) {for(i=0;i {*dat_ptr=LPC17xx_SPI_SendRecvByte (0x00);dat_ptr++;} else//待接收數(shù)據(jù)已溢出,自動填充到起始區(qū) offset=S_RX_SIZE-offset; for(i=0;i {*dat_ptr=LPC17xx_SPI_SendRecvByte (0x00);dat_ptr++;} LPC17xx_SPI_DeSelect ();//Set W5500 SCS High //再讀取溢出后,被填充待起始區(qū)的數(shù)據(jù) LPC17xx_SPI_Select ();//Set W5500 SCS Low LPC17xx_SPI_SendByte (0x00);// Write Address LPC17xx_SPI_SendByte (0x00); LPC17xx_SPI_SendByte (VDM|RWB_READ|(s*0x20+0x18));// Write Control Byte for(;i {*dat_ptr=LPC17xx_SPI_SendRecvByte (0x00);dat_ptr++;} LPC17xx_SPI_DeSelect ();//Set W5500 SCS High offset1+=rx_size;// Update offset Write_SOCK_2_Byte(s, Sn_RX_RD, offset1); Write_SOCK_1_Byte(s, Sn_CR, RECV);// Write RECV Command return rx_size; 5 多鏈路通訊功能實現(xiàn) 許多情況下,要求設(shè)備物聯(lián)網(wǎng)工控設(shè)備具備多鏈路訪問機(jī)制,多鏈路訪問機(jī)制首先需要工控設(shè)備支持多鏈路訪問,并且要求設(shè)備能夠智能識別當(dāng)前訪問上位機(jī),并對應(yīng)應(yīng)答當(dāng)前訪問設(shè)備的上位機(jī)。雖然串口服務(wù)器支持多鏈路訪問機(jī)制,但串口服務(wù)器與底層數(shù)據(jù)采集控制系統(tǒng)相對獨(dú)立,所以如何識別底層數(shù)據(jù)采集控制系統(tǒng)發(fā)送過來的數(shù)據(jù)幀對應(yīng)哪個上位機(jī)成為多鏈路通訊功能的實現(xiàn)難點(diǎn)。 Modbus通信協(xié)議已成為工控行業(yè)的標(biāo)準(zhǔn)通信協(xié)議,Modbus通訊協(xié)議規(guī)定上位機(jī)具有數(shù)據(jù)讀寫主動權(quán),而下位機(jī)全被動的響應(yīng)上位機(jī)的數(shù)據(jù)讀寫命令,串口服務(wù)器通過Socket鏈路激活機(jī)制實現(xiàn)了Modbus協(xié)議下的多鏈路通訊功能。當(dāng)串口服務(wù)器接收到上位機(jī)發(fā)送的數(shù)據(jù)幀時,將當(dāng)前Socket鏈路激活一段時間,該期間內(nèi)接收到底層數(shù)據(jù)采集控制系統(tǒng)上傳的應(yīng)答數(shù)據(jù)幀,串口服務(wù)器檢測當(dāng)前是否有Socket鏈路處于激活狀態(tài),如果有已激活的Socket鏈路,則只將數(shù)據(jù)幀發(fā)送到已激活Socket鏈路對應(yīng)的上位機(jī),數(shù)據(jù)發(fā)送完畢后,關(guān)閉該鏈路的激活狀態(tài)。 6 在物聯(lián)網(wǎng)中的應(yīng)用 互聯(lián)網(wǎng)技術(shù)的發(fā)展,使得物聯(lián)網(wǎng)成為可能,我們周邊的電子設(shè)備終將接入物聯(lián)網(wǎng)信息平臺。通常電子設(shè)備功能很 少涉及網(wǎng)絡(luò)通信功能的應(yīng)用,串口服務(wù)器為電子設(shè)備接入物聯(lián)網(wǎng)提供了簡單快捷的解決方案。串口服務(wù)器技術(shù)在油井遠(yuǎn)程監(jiān)控系統(tǒng)及數(shù)字化抽油機(jī)控制柜等產(chǎn)品上得到了成功應(yīng)用。 【參考文獻(xiàn)】 【1】吳鑫,俞建定,汪沁,等.W5100的RS485-Ethernet數(shù)據(jù)轉(zhuǎn)換器設(shè)計[J].無線電通信技術(shù),2014(05):93-96