趙鵬 褚劍
【摘要】通信機房環(huán)境集中監(jiān)控系統(tǒng)主要是對機房的溫濕度、電源、空調(diào)等相關(guān)設(shè)備運行情況進行監(jiān)控,然后對采集到的環(huán)境數(shù)據(jù)和動力設(shè)備運行數(shù)據(jù)進行相關(guān)的分析與研究。本文采用arduino控制器以及配套的傳感器獲取環(huán)境數(shù)據(jù),利用arduino控制器和MAX485模塊通過Modbus協(xié)議監(jiān)控空調(diào)、UPS等運行狀態(tài)可以完成數(shù)據(jù)采集工作。
【關(guān)鍵詞】arduino傳感器modbus監(jiān)控
一、環(huán)境集中監(jiān)控系統(tǒng)結(jié)構(gòu)
隨著信息網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,不同種類、不同數(shù)量的網(wǎng)絡(luò)設(shè)備分布于用戶分支機構(gòu)所在的不同地域,由于缺乏與之相對稱的運維系統(tǒng),數(shù)量眾多的無人值守機房的物理運行環(huán)境、動力配電狀況、設(shè)備運行狀況等可能發(fā)生危急狀況,而無法及時發(fā)現(xiàn)和處理。因此,機房環(huán)境集中監(jiān)控系統(tǒng)可以對電力供應、溫度、濕度、空氣含塵量、UPS、空調(diào)等設(shè)備運行狀態(tài)進行24小時實時測量與智能化調(diào)節(jié),保證網(wǎng)絡(luò)運行環(huán)境的穩(wěn)定與網(wǎng)絡(luò)軟硬件資源的安全。
該系統(tǒng)可以實現(xiàn)對機房溫濕度、精密空調(diào)、配電柜、UPS、門禁等實現(xiàn)監(jiān)控,如圖1所示。
二、數(shù)據(jù)采集
通信機房環(huán)境集中監(jiān)控需要實現(xiàn)對環(huán)境數(shù)據(jù)的采集,例如機房的溫濕度,空氣含塵量,空調(diào)的運行狀態(tài),配電柜的輸入電壓、電流、功率,UPS的運行狀態(tài)等數(shù)據(jù)進行采集。其中一些環(huán)境數(shù)據(jù)可以利用傳感器直接獲取,而UPS、精密空調(diào)的運行狀態(tài)可以通過廠家提供的RS485接口的modbus協(xié)議獲取。
2.1傳感器
傳感器是一種檢測裝置,能夠感受被測的信息并能將感受的信息按照一定的規(guī)律轉(zhuǎn)換成電信號或者其他形式輸出,傳感器是實現(xiàn)自動檢測盒自動控制的首要環(huán)節(jié)。對于通信機房的一些環(huán)境數(shù)據(jù)可以采用傳感器獲取,以下是部分采集通信機房環(huán)境實時數(shù)據(jù)的傳感器,見表1。
2.2modbus協(xié)議
Modbus協(xié)議是應用于電子控制器的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)和其他設(shè)備之間可以通信,成為一種通用的工業(yè)標準。不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。Modbus協(xié)議有兩種模式,ASCII模式和RTU模式。其中RTU模式比ASCII模式可以傳送更多的數(shù)據(jù),廣泛應用于工控領(lǐng)域。Modbus協(xié)議采用主從方式,其中一臺控制器作為主機設(shè)備發(fā)送信息到從設(shè)備,從設(shè)備返回一個響應,見圖2。
Modbus RTU查詢命令格式,見表2。
Modbus RTU正常回應格式,見表3。
Modbus RTU異常響應格式,見表4。
三、控制器——開源硬件arduino
Arduino是一個基于開放源碼的軟硬件平臺,使用了AVR單片機,構(gòu)建于開放源代碼simple I/O接口板,可以與傳感器和各式各樣的電子元件連接,通過傳感器感知外界環(huán)境數(shù)據(jù)。
3.1接收傳感器數(shù)據(jù)
利用arduino控制器可以獲取通信機房溫濕度、空氣含塵量、電流、電壓、電功率數(shù)據(jù)。以下是利用DHT11采集機房溫濕度的arduino代碼。
#include "DHT.h"
#DHT dht(2, DHT11);
void setup( ) {
dht.begin( );
}
void loop( ) {
if (isnan(t) || isnan(h)) {
float h = dht.readHumidity( );
float t = dht.readTemperature( );
}
}
3.2接收modus協(xié)議數(shù)據(jù)
對于UPS、精密空調(diào)的運行狀態(tài)可以通過廠家提供的RS485接口的modbus協(xié)議讀取設(shè)備的運行狀態(tài)。
3.2.1對UPS進行監(jiān)控
通過UPS廠家提供的modbus協(xié)議通訊接口對UPS內(nèi)部整流器、逆變器、電池、旁路、負載等各部件的運行狀態(tài)進行實時監(jiān)視,參數(shù)超出閾值時,及時報警。
艾默生UH31UPS安裝modbus適配卡,設(shè)置通信波特率和設(shè)備地址后,就可以通過arduino控制板提供的modbus server端與UPS進行通信。該適配卡僅對功能碼#03的查詢命令有應答信息,適配卡扮演從機的角色,等待控制器的查詢。將arduino控制器與max485模塊連接,轉(zhuǎn)換TTL到RS485。
以下是讀取UPS相位電壓的相關(guān)arduino代碼:
#include
#define TxEnablePin 2
enum{
PACKET1,
TOTAL_NO_OF_PACKETS // leave this last entry
};
Packet packets[TOTAL_NO_OF_PACKETS];
packetPointer packet1 = &packets[PACKET1];
unsigned int readRegs[2];
void setup() {
modbus_construct(packet1, 0x01, READ_HOLDING_REGISTERS, 0x041A, 2, readRegs);
modbus_configure(&Serial, 9600, SERIAL_8N2, 1200, polling, 10, TxEnablePin, packets, TOTAL_NO_OF_PACKETS);
}
void loop( ) {
modbus_update( );
}
首先導入modbus庫文件,SimpleModbusMaster.h。
然后通過modbus_construct( )函數(shù)構(gòu)造請求信息,其中packect1為返回參數(shù),包含了從設(shè)備的返回信息。Modubs_configure( )函數(shù)初始化主從設(shè)備通訊參數(shù)。
最后通過Modbus_update( )將請求信息發(fā)送到從設(shè)備,返回信息包含在readRegs緩存中,可以從中讀取相關(guān)數(shù)據(jù),該實例中返回UPS輸入電壓A相電壓值。
3.2.2對精密空調(diào)進行監(jiān)控
通過空調(diào)廠家提供的modbus協(xié)議通訊接口對空調(diào)各部件的運行狀態(tài)與參數(shù)進行監(jiān)控,若空調(diào)組發(fā)生故障,及時報警。
如果要查詢室內(nèi)溫度需要構(gòu)造如下請求信息:
modbus_construct(packet1, 0x01, READ_HOLDING_REGISTERS, 0x7E, 4, readRegs);
Packet1為從設(shè)備返回信息,其中regRead緩存中包含了返回數(shù)據(jù),例如返回的數(shù)據(jù)是41 A8 00 00轉(zhuǎn)換為float型數(shù)據(jù)就是室內(nèi)溫度21度。
四、對設(shè)備的控制
4.1modbus協(xié)議
可以通過modbus協(xié)議的功能碼16寫輸出寄存器,更改寄存器的狀態(tài)實現(xiàn)對設(shè)備的控制。例如控制UPS逆變器關(guān)機可以構(gòu)造如下請求信息。
unsigned int writeRegs[1];
modbus_construct(packet2, 0x01, PRESET_MULTIPLE_REGISTERS, 0x4E22, 2, writeRegs);
通過功能碼PRESET_MULTIPLE_REGISTERS(功能碼16)寫輸出寄存器(0x4E22),實現(xiàn)UPS逆變器關(guān)機,其中writeRegs中的數(shù)據(jù)為延時時間。
4.2繼電器
可以采用與arduino控制器配套的繼電器模塊,利用3.3V~5V的TTL控制信號,實現(xiàn)“自動開關(guān)”的功能。根據(jù)采集到的環(huán)境參數(shù)控制相關(guān)設(shè)備的運行。例如當機房濕度小于某值時,可以控制加濕器開機,增加通信機房的濕度。
五、報警模塊
利用GSM/GPRS SIM900模塊,插入arduino控制器。當所檢測的環(huán)境數(shù)據(jù)超出閾值時,通過GSM模塊發(fā)送語音或者短信報警信息。
#include
#include
char number[]="+39123456789";//Destination number
char text[]="alarm: UPS1 is power off";//SMS to send
byte type_sms=SMS_UNREAD;//Type of SMS
byte del_sms=0;//0: No deleting sms - 1: Deleting SMS
GSM gsm;
void setup( ) {
gsm.TurnOn(9600);//module power on
gsm.InitParam(PARAM_SET_1);//configure the module
gsm.Echo(0); //enable AT echo
}
void loop( ){
char inSerial[5];
int i=0;
delay(2000);
Check_SMS();//Check if there is SMS
if (Serial.available() > 0) {
while (Serial.available() > 0) {
inSerial[i]=(Serial.read()); //read data
i++;
}
inSerial[i]=' 德州市| 沽源县| 武胜县| 泸州市| 庆安县| 水富县| 库伦旗| 龙口市| 措勤县| 平陆县| 丰县| 婺源县| 万州区| 普安县| 镇坪县| 武功县| 富宁县| 大埔县| 兴国县| 长宁区| 上蔡县| 黎川县| 高平市| 城市| 桃园县| 娱乐| 诸城市| 孟村| 紫阳县| 罗定市| 汉沽区| 神农架林区| 南澳县| 伊通| 滕州市| 施秉县| 神池县| 鄂托克前旗| 绩溪县| 白山市| 家居|