家好,我是老趙。大多數的時候,大家做的機房,一般都是規模比較小的機房。在機房里,頂多也就是裝個空調。甚至有的公司機房,連空調不愿意裝。隨著信息技術的發展,萬物互聯時代的到來,計算機系統和通信設備的數量越來越多,規模也越來越大。如果機房動力或者環境設備出現故障,輕則導致計算機宕機,重則導致數據丟失等嚴重后果。因此,對于一些數據重要性較高的企業,一套可對機房進行實時監控的系統就顯得非常有必要。
今天的視頻,我們就來了解一下機房環控系統。機房環境監控是針對機房動力和環境的集中監控管理系統,它監控的對象主要是機房動力和環境等設備(比如:配電、UPS、空調、溫度、濕度、漏水、門禁、安防、消防、防雷等等)。
機房環境監控系統,一般是由采集子系統、傳輸子系統、軟件子系統組成。采集子系統主要就是各種傳感器,由這些傳感器完成底端數據的采集,然后傳輸子系統將底端采集到的數據傳送到監控中心,監控中心的軟件子系統完成系統設置、數據處理、報警信息產生、數據存儲、等系統功能。
在采集子系統中,對被監控信號的測量就顯示非常重要,被監控信號按照特性一般可以分為模擬量和開關量。
1)模擬量采集技術
需采用模/數 轉換設備將模擬量變成數字量后才能適合計算機采集。有一些智能設備的模擬量信號由監控單元完成采集,而非智能設備的模擬量信號需要增加各種傳感器來完成采集,將非電量信號轉換為電量信號。
2)開關量采集技術
開關量是指不連續變化的、具有確定的幾種狀態的量,最典型的是僅有"0"和"1"兩種狀態的開關量。比如說停電檢測,只需要檢測有電還是斷電就可以了。
具體來說,機房環控系統有哪些具體的內容呢? 可以分為這幾個方面。
動力方面: UPS供電、市電電量、配電柜開關、蓄電池、PDU機柜電源、防雷器、發電機等
環境方面:精密空調、漏水檢測、濕度檢測、新風機、空氣質量、粉塵含量、照明控制等;
安防方面:視頻監控、門禁系統、入侵檢測、周界安全等;
消防方面:煙霧探測、火災報警、自動滅火系統、排煙系統等等;
網絡方面:網絡設備監測、網絡鏈路監測、服務器狀態監測、業務系統監測、數據庫監測等等;
當機房的傳感器,檢測到這些異常,并進行報警,環控系統會將這些報警信息,通過聲光報警器報警,通過發送郵件、發送短信、或者自動拔打電話給設定的負責人員。以便于于及時處理報警信息。
雖然說機房環控系統所含內容很多,但在實際的項目中,除了數據中心這種大型的機房以外,普通公司級別小機房,都不會有這么復雜,通常只會選擇性的做一些必須的項目。比如說之前我們做過一個公司的機房,機房也不大,設備也并不多。但是這個公司要通過有關部門的一些資質認證,認證呢就要求機房必須具體一些環控的功能。所以呢,我們就做了空調溫度檢測、市電檢測、防雷、監控、浸水報警、UPS報警這幾個細項。
浸水感應線
這些細項里,有的是模擬數據、有的是數字的數據,所以在安裝調試時,模擬量的數據要通過設備進行轉換,轉換成數據量來進行識別。比如說浸水檢測,就是機房的靜電地板下面繞了一圈圈的線圈,當機房漏水地面浸水時,線圈就會感應到變化,從而發出報警信號。
作為一個弱電行業的從事人員,雖然我們碰到這種做機房環控系統的機率并不大,但是我們還是有必要去了解一下機房環控系統究竟是干什么的,有哪些功能。作為基礎知識的儲備也好,作為你平時和人交流的談資也好,都是有必要的。
有了上次遍歷窗體和控件的方法,現在變得簡單多了,現在我只需要把要用到的控件找出來再操作就行了。
void GOJH(IntPtr p)
{
textBox1.Text +="開始查找相關控件...\r\n";
IntPtr xllbptr=IntPtr.Zero; //下拉列表
IntPtr ksptr=IntPtr.Zero; //開始按鈕
IntPtr tcptr=IntPtr.Zero; ; //退出按鈕
List<object[]> l=GetAllChilds.GetObjs(p);
foreach (object[] objs in l)
{
IntPtr ptr=(IntPtr)objs[0];
string text=objs[1].ToString();
string thetype=objs[2].ToString();
if (thetype=="ComboBox") //根據類型找出
{
xllbptr=ptr;
textBox1.Text +="---找到下拉列表!\r\n";
}
else
{
if (text=="開始") //根據文本找出
{
ksptr=ptr;
textBox1.Text +="---找到開始按鈕!\r\n";
}
else if (text=="退出")
{
tcptr=ptr;
textBox1.Text +="---找到退出按鈕!\r\n";
}
}
}
//操作下拉列表
textBox1.Text +="操作下拉列表...";
SendMessage(xllbptr, 0x014D, (IntPtr)0, "數字激活");
SendMessage(xllbptr, 0x014D, (IntPtr)0, "數字激活");
SendMessage(xllbptr, 0x014D, (IntPtr)0, "數字激活");
textBox1.Text +="完成!\r\n";
Thread.Sleep(100);
//點擊開始按鈕
textBox1.Text +="點擊開始按鈕...";
SendMessage(ksptr, BM_CLICK, (IntPtr)0, "0");
SendMessage(ksptr, BM_CLICK, (IntPtr)0, "0");
SendMessage(ksptr, BM_CLICK, (IntPtr)0, "0");
textBox1.Text +="完成!\r\n";
Thread.Sleep(100);
textBox1.Text +="開始激活...\r\n";
//下面可以觀察情況,沒什么問題就點擊退出按鈕,退出激活程序
}
這里半路殺出個程咬金,激活成功后出了一個對話框
需要多引用一個 findwindowEx
[DllImport("user32.dll", EntryPoint="FindWindowEx")]
private extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
對話框中就那么一個按鈕,就用這個了,不需要再費事去遍楞
void GOJH(IntPtr p)
{
textBox1.Text +="開始查找相關控件...\r\n";
IntPtr xllbptr=IntPtr.Zero;
IntPtr ksptr=IntPtr.Zero;
IntPtr tcptr=IntPtr.Zero; ;
List<object[]> l=GetAllChilds.GetObjs(p);
foreach (object[] objs in l)
{
IntPtr ptr=(IntPtr)objs[0];
string text=objs[1].ToString();
string thetype=objs[2].ToString();
if (thetype=="ComboBox")
{
xllbptr=ptr;
textBox1.Text +="---找到下拉列表!\r\n";
}
else
{
if (text=="開始")
{
ksptr=ptr;
textBox1.Text +="---找到開始按鈕!\r\n";
}
else if (text=="退出")
{
tcptr=ptr;
textBox1.Text +="---找到退出按鈕!\r\n";
}
}
}
//操作下拉列表
textBox1.Text +="操作下拉列表...";
SendMessage(xllbptr, 0x014D, (IntPtr)0, "數字激活");
SendMessage(xllbptr, 0x014D, (IntPtr)0, "數字激活");
SendMessage(xllbptr, 0x014D, (IntPtr)0, "數字激活");
textBox1.Text +="完成!\r\n";
Thread.Sleep(100);
//點擊開始按鈕
textBox1.Text +="點擊開始按鈕...";
SendMessage(ksptr, BM_CLICK, (IntPtr)0, "0");
SendMessage(ksptr, BM_CLICK, (IntPtr)0, "0");
SendMessage(ksptr, BM_CLICK, (IntPtr)0, "0");
textBox1.Text +="完成!\r\n";
Thread.Sleep(100);
textBox1.Text +="開始激活...\r\n";
//激活成功時會彈出成功對話框
//一直等它彈出來,再點擊“OK”
textBox1.Text +="等待激活成功對話框...\r\n";
int num=0;
bool OK=false;
while (!OK)
{
num++;
if (num % 50000==0)
{
//顯示次數
textBox1.Text +="等待激活(" + num.ToString() + ")\r\n";
}
//找到“成功”對話框
IntPtr successwin=FindWindow(null, "成功");
if (successwin !=IntPtr.Zero)
{
//找到按鈕
IntPtr btn_OK=FindWindowEx(successwin, IntPtr.Zero, null, "確定");
//點擊按鈕關閉對話框
if (btn_OK !=IntPtr.Zero)
{
SendMessage(btn_OK, BM_CLICK, (IntPtr)0, "0");
SendMessage(btn_OK, BM_CLICK, (IntPtr)0, "0");
SendMessage(btn_OK, BM_CLICK, (IntPtr)0, "0");
textBox1.Text +="激活完畢......\r\n";
}
OK=true;
}
}
//點擊退出按鈕
textBox1.Text +="準備退出激活程序...";
SendMessage(tcptr, BM_CLICK, (IntPtr)0, "0");
SendMessage(tcptr, BM_CLICK, (IntPtr)0, "0");
SendMessage(tcptr, BM_CLICK, (IntPtr)0, "0");
textBox1.Text +="完成!\r\n";
Thread.Sleep(100);
}
程序我已經用起來,用極域把它發送到機房中的機器上,再運行它,自動激活,再把自己刪除干凈,完美!