(重慶博通水利信息網(wǎng)絡有限公司,重慶 401121)
進入20世紀以后,各個行業(yè)飛速發(fā)展,其中最引人注目的當屬建筑行業(yè)。隨著建筑行業(yè)的興起,一座座高樓拔地而起。而電梯作為高樓的主要代步工具,數(shù)量急劇增長,其在運行過程中的安全性得到了空前關注。據(jù)相關統(tǒng)計,當前電梯發(fā)生安全事故的總數(shù)占重大特種設備事故總數(shù)的25%[1]。因此,對電梯進行有效的實時安全監(jiān)控,可以確保在故障發(fā)生時及時排除故障,降低運行風險。
電梯安全監(jiān)控系統(tǒng)分為兩大部分,即數(shù)據(jù)采集終端和電梯遠程監(jiān)控平臺,如圖1所示。數(shù)據(jù)采集終端由三星S3C6410開發(fā)板作為主控模塊,外接各種傳感器模塊與Wi-Fi模塊。各個傳感器采集電梯運行過程中的相應數(shù)據(jù),經(jīng)由S3C6410主控模塊,通過無線Wi-Fi模塊傳輸至監(jiān)控平臺。監(jiān)控平臺對接收到的數(shù)據(jù)進行相應的處理分析,并判斷電梯是否發(fā)生故障。電梯維修人員根據(jù)遠程監(jiān)控平臺的處理結(jié)果及時對電梯進行維修保障,避免重大安全事故的發(fā)生。
圖1 電梯安全監(jiān)控系統(tǒng)總體設計
數(shù)據(jù)采集端由CPU模塊、傳感器模塊、電源模塊、無線Wi-Fi模塊、存儲模塊等組成,如圖2所示。傳感器模塊由上下平層感應器、上下極限感應器、基站感應器、門開關感應器、加速度傳感器構(gòu)成。
圖2 數(shù)據(jù)采集終端設計
Wi-Fi模塊選用rt3070 USB Wi-Fi無線網(wǎng)卡,該網(wǎng)卡符合IEEE 802.11n(Draft 2.0),IEEE 802.11g,IEEE 802.11b標準,無線傳輸速率高達150 Mb/s。內(nèi)置智能天線,提供更好的無線傳輸性能、穩(wěn)定性和無線覆蓋范圍。同時采用CCA技術(shù),能自動避開頻道干擾并充分利用頻道捆綁優(yōu)勢。該產(chǎn)品支持64/128/152位WEP加密,以及WPA/WPA2,WPA-PSK/WPA2-PSK等高級加密與安全機制。同時,具有QSS快速安全設置功能,能夠輕松設置無線安全。此外,該產(chǎn)品具有優(yōu)先級服務功能,確保視頻、語音等帶寬敏感數(shù)據(jù)的優(yōu)先處理。
為了使用該Wi-Fi模塊進行數(shù)據(jù)的傳輸,必定要完成該Wi-Fi模塊的驅(qū)動移植。首先進入Linux內(nèi)核文件夾,使用make menuconfig來配置內(nèi)核,分別配置如下:
Networking support
_*_ Wireless --->
<*> cfg80211 - wireless configuration API
<*>Generic IEEE 802.11 NetWorking Stack (mac80211)
Library routines
{*} CRC-CCITT functions
Device Drivers --->
[*] Wireless LAN --->
<*> IEEE 802.11 for Host AP(Prism2/2.5/3 and WEP/TKIP/CCMP
[*]Support downloading firmware images with Host AP driver
[*]Support for non-volatile firmware download
緊接著使用make uImage重新編譯內(nèi)核,使用make modules重新編譯模塊,生成如圖3所示的驅(qū)動模塊。
圖3 驅(qū)動模塊
將圖3中生成的4個.ko文件拷入S3C6410的文件系統(tǒng)中并使用insmod命令加載這些驅(qū)動,從而完成無線網(wǎng)卡驅(qū)動的移植。
在本系統(tǒng)中數(shù)據(jù)采集終端采集數(shù)據(jù)發(fā)送給監(jiān)控平臺供其處理分析。采集終端相當于客戶端,而監(jiān)控平臺相當于服務器端。服務器端設立服務,然后進入循環(huán)接收和處理請求??蛻舳诉B接到服務器,然后發(fā)送、接受或者交換數(shù)據(jù),最后退出。兩者以TCP/IP協(xié)議為基礎,采用Socket通信的方式進行數(shù)據(jù)的交互。
Socket是TCP/IP網(wǎng)絡的API,是一種非常特殊的I/O數(shù)據(jù)傳輸方式。Socket也可以看成是一個文件描述符,它具有一個與打開文件函數(shù)open功能類似的API, 調(diào)用該API會返回一個整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實現(xiàn)的[2]。
常用的數(shù)據(jù)傳輸方式分為兩種:TCP傳輸和UDP傳輸。TCP傳輸方式是一種可靠的傳輸方式。當使用這種方式進行數(shù)據(jù)傳輸時,必須保證客戶端與服務器端建立可靠有效的連接。TCP傳輸就好比兩人打電話,兩人之間必須存在著一條不中斷的線路,信息沒有傳達給對方,對方則會等待,除非對方直接掛電話。而UDP傳輸方式是一種不可靠的傳輸方式,它只是單純地把數(shù)據(jù)發(fā)送出去,在發(fā)送之前不用在客戶端與服務器端建立一個連接,故不能保證數(shù)據(jù)能夠順利地到達目的地。針對這兩種傳輸方式Socket通信分為兩種類型:流式Socket (SOCK_STREAM)和數(shù)據(jù)報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的TCP服務應用[3];數(shù)據(jù)報式Socket是一種無連接的Socket,對應于無連接的UDP服務應用。
本系統(tǒng)中電梯的狀態(tài)信息必須安全可靠地傳送至監(jiān)控平臺,故采用流式Socket。該交互過程主要包含以下3個操作,即服務器設立服務、客戶連接到服務器、服務器和客戶處理事務,如圖4所示。
圖4 客戶、服務器交互中的主要步驟
下面將具體討論通信過程中的相應操作。
操作1:建立遠程監(jiān)控平臺(服務器)端socket。
1)創(chuàng)建1個Socket
iSocketServer = socket(AF_INET, SOCK_STREAM, 0)
其中:AF_INET表示ipv4網(wǎng)絡協(xié)議簇;SOCK_STREAM表示采用TCP傳輸方式;0是默認值。
2)給Socket綁定1個地址
iRet = bind(iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr))
其中:iSocketServer是由(1)得到的Socket描述符;tSocketServerAddr是一個指向包含有監(jiān)控平臺IP地址及端口號等信息的sockaddr類型的指針;sizeof(struct sockaddr)表示sockaddr這個結(jié)構(gòu)體類型的大小。
3)監(jiān)聽接入請求
iRet = listen(iSocketServer, BACKLOG)
其中:iSocketServer是由(1)得到的Socket描述符;BACKLOG表示請求訪問的客戶端的最大數(shù)目。
4)進入阻塞狀態(tài),等待客戶端的連接
iSocketClient = accept(iSocketServer, (struct sockaddr *)&tSocketClientAddr, &iAddrLen)
其中:SocketServer是由(1)得到的Socket描述符;tSocketClientAddr是一個指向包含有數(shù)據(jù)采集終端的IP地址及端口號等信息的sockaddr類型的指針;iAddrLen是sockaddr類型的大小。
操作2:建立數(shù)據(jù)采集終端(客戶端)到遠程監(jiān)控平臺(服務器)端的連接。
1)創(chuàng)建1個Socket
iSocketClient = socket(AF_INET, SOCK_STREAM, 0);
2)使用該Socket連接到服務器
iRet = connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr))。
操作3:客戶/服務器的會話。
當創(chuàng)建完數(shù)據(jù)采集終端與遠程監(jiān)控平臺的Socket后,兩者之間建立連接,接下來可以源源不斷地將數(shù)據(jù)采集終端采集到的數(shù)據(jù)發(fā)送至遠程監(jiān)控平臺。
iSendLen = send(iSocketClient, ucSendBuf, strlen(ucSendBuf), 0)
其中:iSocketClient是數(shù)據(jù)采集終端的socket描述符;ucSendBuf是要發(fā)送的電梯運行狀態(tài)數(shù)據(jù);strlen(ucSendBuf)是數(shù)據(jù)的大??;0是默認值。
iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0)
其中:ucRecvBuf是接收數(shù)據(jù)的緩沖區(qū);999表示接收緩沖區(qū)的大小。
當所有的數(shù)據(jù)操作結(jié)束以后,可以調(diào)用close()函數(shù)來釋放該Socket,從而停止在該Socket上的任何數(shù)據(jù)操作[4]。
close(Sockfd)
其中,Sockfd為數(shù)據(jù)采集終端或遠程監(jiān)控平臺的Socket描述符。
Socket通信的流程如圖5所示。
圖5 Socket通信
數(shù)據(jù)庫在遠程監(jiān)控平臺中起著舉足輕重的作用,監(jiān)控平臺接收采集終端發(fā)來的數(shù)據(jù)后,需要將數(shù)據(jù)保存在數(shù)據(jù)庫中,便于平臺對數(shù)據(jù)進行有效的管理。本文采用MySQL作為監(jiān)控平臺的數(shù)據(jù)庫。
MySQL由瑞典MySQL AB設計,廣泛應用于許多中小企業(yè)中。MySQL的開發(fā)基石是Linux操作系統(tǒng),故MySQL數(shù)據(jù)庫也繼承了Linux操作系統(tǒng)免費開源的優(yōu)點。除此之外,該數(shù)據(jù)庫還具有以下優(yōu)點:
1)由C語言和C++語言編寫而成,在多種編譯環(huán)境下進行測試,確保了源代碼的移植性;
2)為各種高級編程語言提供了相應的API,適應性廣;
3)支持多線程,使CPU得到充分的利用;
4)連接數(shù)據(jù)庫的方式多種多樣,如ODBC,TCP/IP,JDBC等。
基于以上優(yōu)點,可以看出MySQL能很好地滿足中小型企業(yè)進行應用開發(fā)的需求。同時,它的免費開源特性也使其擁有蓬勃的生命力。
使用MySQL時最主要的是對所要存儲的數(shù)據(jù)進行表單設計,即把數(shù)據(jù)分類處理。本文需要設計的數(shù)據(jù)表單包括用戶表單、電梯監(jiān)控狀態(tài)信息表、電梯故障案例信息表等。以電梯監(jiān)控狀態(tài)信息表為例,設計表單結(jié)構(gòu)如表1所示。
監(jiān)控平臺以Socket進行通信,以MySQL進行數(shù)據(jù)存儲,其監(jiān)控界面如圖6所示。
表1 電梯監(jiān)控狀態(tài)信息表
圖6 電梯安全監(jiān)控系統(tǒng)監(jiān)控界面
本文設計的電梯安全監(jiān)控系統(tǒng)能有效地對電梯的狀態(tài)信息進行實時監(jiān)控,發(fā)現(xiàn)電梯隱患,確保電梯安全高效地運行。經(jīng)測試,該系統(tǒng)具有良好的實用性,有一定的推廣價值。
參考文獻:
[1] 王斌杰.電梯遠程監(jiān)控系統(tǒng)研究與設計[D].沈陽:沈陽建筑大學,2011.
[2] 王凱,孫立國,李世丹,等.信息化雷達遠程顯控終端的設計與實現(xiàn)[J].信息與電子工程,2011,9(01):12-16.
[3] 徐鳴鶴,冷春艷,熊鴻康.機床數(shù)控系統(tǒng)的組網(wǎng)與遠程監(jiān)控的實現(xiàn)[J].機床與液壓,2011,39(12):85-88.
[4] 陳長輝.UNIX下Socket編程淺析[J].福建電腦,2011,27(2):161-162.