練俊君,魏 琳,饒曉紅
(重慶川儀軟件有限公司,重慶 401121)
當(dāng)今工業(yè)行業(yè),隨著機(jī)械設(shè)備系統(tǒng)化、精密化程度的不斷提高,企業(yè)的生產(chǎn)效率和生產(chǎn)規(guī)模都發(fā)生明顯的改善。但是在實(shí)際工作中,如果設(shè)備出現(xiàn)問題,會(huì)導(dǎo)致生產(chǎn)難以正常進(jìn)行,造成重大經(jīng)濟(jì)損失。因此,對(duì)設(shè)備的監(jiān)測(cè)與維護(hù)顯得越來越重要[1]。企業(yè)通過對(duì)重要設(shè)備的在線監(jiān)測(cè),可以提高生產(chǎn)的保障性,使設(shè)備維修從傳統(tǒng)的事后維修、定期性維修改變?yōu)橹鲃?dòng)維修,從而提高企業(yè)備品備件的主動(dòng)性,具有一定的經(jīng)濟(jì)價(jià)值。
本文聚焦設(shè)備監(jiān)測(cè)系統(tǒng),通過嵌入式和物聯(lián)網(wǎng)技術(shù),設(shè)計(jì)了一種基于Linux Web服務(wù)器的監(jiān)測(cè)系統(tǒng)。相對(duì)于工控領(lǐng)域常見的客戶機(jī)/服務(wù)器(client/server,C/S)架構(gòu),瀏覽器/服務(wù)器模式 (browser/server,B/S)架構(gòu)更加方便。客戶端可以通過內(nèi)部局域網(wǎng)用瀏覽器進(jìn)行監(jiān)測(cè)數(shù)據(jù)的訪問,也可以使用虛擬私有網(wǎng)絡(luò)(virtual private network,VPN)技術(shù)進(jìn)行遠(yuǎn)程數(shù)據(jù)監(jiān)控。這樣大大提高了數(shù)據(jù)監(jiān)控的便利性。該系統(tǒng)采用Linux、shttpd、sqlite 等開源軟件,具有一定的參考價(jià)值。
由傳感器驅(qū)動(dòng)模塊獲取傳感器數(shù)據(jù),然后將數(shù)據(jù)傳入數(shù)據(jù)處理模塊進(jìn)行處理。其中,數(shù)據(jù)庫模塊能有效管理整個(gè)系統(tǒng)的傳感器數(shù)據(jù),并且通過Web服務(wù)器實(shí)現(xiàn)人機(jī)交互功能。在人機(jī)交互方面:客戶端通過http 訪問內(nèi)置的HTML文件和通用相關(guān)接口(common gateway interface,CGI)程序,實(shí)現(xiàn)單表提交和數(shù)據(jù)圖形化顯示。通過JavaScript技術(shù)提高網(wǎng)頁的交互性,并且通過CGI程序?qū)崿F(xiàn)網(wǎng)頁和后臺(tái)數(shù)據(jù)交互。利用JavaScript技術(shù)完成客戶端的驗(yàn)證,省去了數(shù)據(jù)傳輸所需要的大量時(shí)間和資源[2]。在傳感器數(shù)據(jù)驅(qū)動(dòng)模塊,采用在工業(yè)行業(yè)常用的RS-232、A/D方式。在操作系統(tǒng)層面,Linux較好地支持了UART、SPI等驅(qū)動(dòng),即使在Linux的應(yīng)用層,也有該驅(qū)動(dòng)模塊的應(yīng)用程序編程(application programming interface,API)接口。這樣為整個(gè)系統(tǒng)實(shí)現(xiàn)帶來了可行性和便利性。系統(tǒng)整體方案如圖1所示。
圖1 系統(tǒng)整體方案圖
①硬件選取。該方案采用TI AM335x作為主要MCU。該芯片具有ARM Cortex-A8內(nèi)核,且價(jià)格和性能有優(yōu)勢(shì)。通過對(duì)其外圍電路的設(shè)計(jì),能滿足整個(gè)方案的硬件要求。
②軟件選取。該方案采用Linux系統(tǒng)。Linux是一種開發(fā)成本低、可應(yīng)用于多種硬件平臺(tái)、可定制內(nèi)核、性能優(yōu)異、良好的網(wǎng)絡(luò)支持等優(yōu)勢(shì)的系統(tǒng)[3]。本方案將Linux移植入ARM Cortex-A8 核心模塊,然后在Linux系統(tǒng)上搭建Web服務(wù)器。該方案選用shttpd作為Web服務(wù)器。其原因是:shttpd是一款小型的、輕量級(jí)的Web 服務(wù)器,但是該軟件功能特別豐富,支持CGI、SSL、MD5等。此外,該軟件采用C語言編寫,通過編譯成庫文件,很容易在嵌入式設(shè)備移植;同時(shí),通過嵌入式Web服務(wù)器和CGI的結(jié)合,可以實(shí)現(xiàn)客戶端與Web服務(wù)器之間的動(dòng)態(tài)數(shù)據(jù)交互[4]。本方案選用sqlite作為數(shù)據(jù)庫。sqlite是一款輕量級(jí)、C語言編寫的開源軟件,容易在嵌入式設(shè)備中移植。
系統(tǒng)硬件設(shè)計(jì)主要是基于ARM Cortex-A8核心模塊進(jìn)行外圍接口電路的設(shè)計(jì)。硬件框架如圖2所示。
圖2 硬件框架圖
該硬件框架包括:基于ARM Cortex-A8的核心處理芯片、數(shù)據(jù)接口模塊、電源模塊和基本模塊。其中,基本模塊包括JATG、RTC、FLASH、SDRAM等電路,其與電源模塊一起,能使芯片正常工作。數(shù)據(jù)接口模塊主要提供外界與系統(tǒng)的數(shù)據(jù)交互,包括客戶端與系統(tǒng)的數(shù)據(jù)交互和傳感器的數(shù)據(jù)收集。目前,工業(yè)大多使用RS-232/RS-485、CAN總線接口或者以太網(wǎng)接口的傳感器。本方案的數(shù)據(jù)接口采用以太網(wǎng)、RS-232和A/D轉(zhuǎn)換模塊。一方面,通過以太網(wǎng)接口實(shí)現(xiàn)客戶端瀏覽器對(duì)系統(tǒng)軟件的訪問;另一方面,通過RS-232和A/D轉(zhuǎn)換模塊可以分別對(duì)數(shù)字傳感器和模擬傳感器進(jìn)行數(shù)據(jù)采集。
MCU采用TI AM335X作為該系統(tǒng)的核心處理芯片。該芯片基于ARMCortex-A8內(nèi)核,其主頻最高能達(dá)到1 GHz,并且能支持512 MB的NAND FLASH和256/512 MB的DDR3,具有豐富的外圍接口。
以太網(wǎng)PHY采用TI公司的DP83848J作為該系統(tǒng)的以太網(wǎng)收發(fā)芯片。該芯片支持MII/RMII接口,是單端10/100 MB以太網(wǎng)收發(fā)器。方案采用RMII接口,使用MCU提供該芯片的參考時(shí)鐘50 MHz。以太網(wǎng)PHY的TXD_P、TXD_N、RXD_P、RXD_N差分信號(hào)經(jīng)過網(wǎng)絡(luò)變壓器后,可與RJ45連接。
串口電路采用SP3232EEN作為電平驅(qū)動(dòng)芯片,直接通過該芯片將MCU的TTL電平轉(zhuǎn)換至RS-232電平。
A/D模塊采用ADC124S021芯片。該芯片具有4通道,12位的采樣芯片,且采樣率的范圍可達(dá)到50~200 KS/s。該芯片可以通過SPI總線與MCU進(jìn)行數(shù)據(jù)通信。ADC124S021典型電路如圖3所示。在電源腳附近有低差壓線性穩(wěn)壓器(LP2950)和旁路電容。
圖3 ADC124S021典型電路圖
軟件采用模塊化思想進(jìn)行設(shè)計(jì)。軟件框架如圖4所示。該軟件框架主要包括:傳感器驅(qū)動(dòng)、數(shù)據(jù)處理、數(shù)據(jù)庫、CGI與前端HTML等模塊。其中,傳感器驅(qū)動(dòng)模塊負(fù)責(zé)傳感器的數(shù)據(jù)收集;數(shù)據(jù)處理模塊負(fù)責(zé)傳感器的數(shù)據(jù)算法;數(shù)據(jù)庫模塊負(fù)責(zé)數(shù)據(jù)的管理;CGI與前端HTML模塊負(fù)責(zé)人機(jī)交互功能。
圖4 軟件框架圖
①傳感器驅(qū)動(dòng)模塊。本方案采用RS-232和A/D兩種方式。對(duì)于RS-232方式,Linux應(yīng)用層具有相應(yīng)的API接口,通過“打開串口→設(shè)置參數(shù)→讀/寫串口→關(guān)閉串口”的流程,實(shí)現(xiàn)一次數(shù)據(jù)的讀寫。程序中可設(shè)置串口通信參數(shù):波特率、數(shù)據(jù)位、校驗(yàn)位、停止位等,并且在對(duì)多個(gè)端口進(jìn)行采集時(shí),采用select函數(shù)可以更加有效。
對(duì)于A/D模塊的驅(qū)動(dòng)編寫,本方案主要采用外置A/D芯片的模式,即軟件部分為MCU與A/D芯片的通信,該方案為SPI通信。同樣可以在Linux應(yīng)用層通過“打開設(shè)備文件→設(shè)置模式→傳輸數(shù)據(jù)→關(guān)閉設(shè)備文件”實(shí)現(xiàn)。根據(jù)Linux源碼文檔,通過ioctl函數(shù)可以進(jìn)行模式、數(shù)據(jù)位、傳輸速率等參數(shù)的選擇,并且通過struct spi_ioc_transfer結(jié)構(gòu)體進(jìn)行數(shù)據(jù)交互。當(dāng)然,通過基于內(nèi)核模塊的方式對(duì)特定的驅(qū)動(dòng)開發(fā)同樣可行,Linux SPI 子系統(tǒng)提供相應(yīng)的開發(fā)接口,并且至Linux 2.6以后內(nèi)核添加了udev機(jī)制。udev機(jī)制根據(jù)sysfs 提供的設(shè)備信息進(jìn)行動(dòng)態(tài)管理,解決了靜態(tài)設(shè)備管理中手動(dòng)添加設(shè)備節(jié)點(diǎn)的問題。
②數(shù)據(jù)處理模塊。一方面,對(duì)于數(shù)字信號(hào)的儀表,將接收的數(shù)據(jù)包按照一定協(xié)議進(jìn)行分析,然后寫入數(shù)據(jù)庫;另一方面,對(duì)于模擬信號(hào)的傳感器,將A/D轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行誤差修正處理或者頻譜分析等算法處理。
③數(shù)據(jù)庫模塊。在數(shù)據(jù)庫的選擇中,本方案采用sqlite。在sqlite移植方面,通過宿主機(jī)中的Linux環(huán)境(如Debian、Ubuntu等),構(gòu)建交叉編譯環(huán)境。將源碼解壓至宿主機(jī),然后配置該源碼的configure文件,在表明編譯器為arm-linux-gcc及安裝路徑后,生成Makefile,直接編譯和安裝(make 和make install) 即可。將生成的文件移植目標(biāo)機(jī),并且通過命令生成需求表格,這里包括:傳感器的數(shù)據(jù)、傳感器類別信息、時(shí)間戳等信息。sqlite 具有良好的C/C++ API接口,可以實(shí)現(xiàn)與傳感器驅(qū)動(dòng)模塊的數(shù)據(jù)對(duì)接。
④CGI與前端HTML模塊。嵌入式Web服務(wù)器監(jiān)聽客戶端的服務(wù)請(qǐng)求,并根據(jù)客戶請(qǐng)求的類型來提供相應(yīng)的服務(wù),返回相應(yīng)的處理結(jié)果[5]。本方案的Web服務(wù)器采用shttpd。它是一款適合嵌入式的Web服務(wù)器,并支持CGI。在shttpd的移植中,首先將官網(wǎng)下載的源碼進(jìn)行解壓,然后在Makefile中修改變量。具體為:在確定建立好交叉編譯環(huán)境下,進(jìn)行交叉編譯器的變量定義,如:AR,CC。然后進(jìn)行編譯(make unix),將編譯成功的可執(zhí)行文件及其需要的動(dòng)態(tài)庫拷貝至目標(biāo)機(jī)文件夾下。最后文件在目標(biāo)機(jī)中運(yùn)行。由于shttp支持CGI,通過CGI程序?qū)崿F(xiàn)前端客戶端與后臺(tái)服務(wù)器的通信。CGI是一種協(xié)議接口,可以用多種編程語言實(shí)現(xiàn),本方案使用嵌入式開發(fā)的主流語言——C語言進(jìn)行開發(fā)。
CGI和HTML框架如圖5所示。HTML與CGI通信主要有GET和POST兩種方法[6],前端網(wǎng)頁可以通過GET或者POST方法請(qǐng)求CGI程序,并且使用XMLHttpRequest對(duì)象進(jìn)行頁面更新和后臺(tái)數(shù)據(jù)的獲取。在CGI程序中,主要進(jìn)行用戶參數(shù)獲取,即解析GET方式傳來的數(shù)據(jù)參數(shù),然后進(jìn)行傳感器數(shù)據(jù)處理,例如:獲取數(shù)據(jù)處理模塊中FFT計(jì)算后的結(jié)果,最后返回分析后的傳感器數(shù)據(jù)。在HTML文件中,通過單表實(shí)現(xiàn)用戶的信息交互,然后請(qǐng)求CGI程序,最后將CGI程序中的數(shù)據(jù)進(jìn)行圖像呈現(xiàn)。在圖形化呈現(xiàn)方面,本方案采用echarts JavaScript的圖形庫實(shí)現(xiàn),減少開發(fā)周期。
圖5 CGI和HTML框架圖
為驗(yàn)證方案的可行性,將應(yīng)力波傳感器接入整個(gè)系統(tǒng)。應(yīng)力波為壓電傳感器,其特定的頻響范圍對(duì)機(jī)械早期故障尤為敏感。將其模擬信號(hào)接入系統(tǒng),進(jìn)行A/D轉(zhuǎn)換,然后在數(shù)據(jù)處理模塊進(jìn)行快速傅里葉變換(fast Fourier transform,FFT),得到的傳感器頻譜圖如圖6所示。
圖6 傳感器頻譜圖
本文闡述了一種基于Linux Web服務(wù)器的設(shè)備監(jiān)測(cè)系統(tǒng)。該系統(tǒng)采用B/S構(gòu)架,相比與工業(yè)領(lǐng)域運(yùn)行較多的C/S構(gòu)架,更加方便:在同局域網(wǎng)內(nèi)可以多人訪問;通過VPN可以實(shí)現(xiàn)遠(yuǎn)程訪問。
本方案提供一種設(shè)計(jì)框架,包括傳感器模塊、數(shù)據(jù)處理模塊,人機(jī)交互模塊等。其中:傳感器模塊采用常用的RS-232和A/D兩種方式;數(shù)據(jù)處理模塊采用sqlite作為數(shù)據(jù)庫進(jìn)行數(shù)據(jù)管理;人機(jī)交互模塊采用Web服務(wù)器,由shttpd 作為Web服務(wù)器,并且使用CGI程序進(jìn)行前端和后臺(tái)的數(shù)據(jù)通信。值得一提的是,該方案中采用的Linux、shttpd和sqlite 都是開源軟件,對(duì)同類系統(tǒng)設(shè)計(jì)具有一定的借鑒價(jià)值。