サーバーハードウェアステータスアラームとしてのMSP430 Launchpad

サーバーハードウェアを扱うスペシャリストは、無停電電源装置と空調および空調システムに高い要求がどのように課されているかを知っています。 直接彼自身は、特定のシステムの障害がCIS諸国のモバイルオペレーターの1つのデータセンターの崩壊につながる状況に繰り返し直面しました。 状況の1つでは、データセンターのメインとバックアップの両方の電力線がオフになり、ディーゼル発電機が自動的に起動しましたが、電気技師は特定のスイッチを切り替えませんでした。 UPSは最後まで負荷を維持し、その後200台を超えるサーバーの電源を切りました。 別の状況では、メインラインの電源をオフにした後、データセンターがバックアップに切り替えられ、バックアップの電圧が低下しました。 これにより、UPSをバイパスして電源供給されているエアコンの起動が拒否されました。 サーバーは過熱から切断され、HLRスイッチは長時間ハングし、2〜3日後に完全に動作を回復しました。 このすべてが、最大100万人のサブスクライバーが通信なしで残っているという事実につながりました。 私はすぐに質問に答えます。「監視サービスは何をしましたか?」最初の状況では、彼女は最後まで行われた作業を検討し、2番目に多くのモニターの1つでアラームが遅れていることに気付きました。



そのような事故の後にサーバーを持ち上げ、監視サービスを期待することにうんざりすることは私の責任でしたので、SNMPトラップ以外の解決策を探し始めました。 UPSとエアコンに付属のマニュアルを確認したところ、それらはすべて乾いた接触を維持していることがわかりました。 彼らと仕事をする方法を見つけることは残っています。 Texas InstrumentsのMSP430 Launchpadが助けになりました。



専門家でない場合、ドライ接点は特定の条件下で接点を開閉するスイッチ/スイッチとして機能します。 製造業者は、たとえば、一般的なアラーム(機器の誤動作)、入力接点の電圧不足、バッテリーの放電、温度上昇などの条件を定めることができます。 これらはすべてマニュアルに詳しく説明されており、接続する必要のある連絡先の図も記載されています。

これらのスイッチを使用すると、マイクロコントローラーのHIGHおよびLOW基準を作成できます。接点が開いている場合、接地に対してコントローラーピンがHIGHになり、閉じている場合、LOWが形成されます。 このような条件により、単純な「if」演算子を使用して、ボード上の他のピンのオン/オフを切り替えて制御することができます。 考え直さずに、LEDとピエゾキーキーを制御して、可聴および視覚アラーム信号を発することにしました。 5分後、Energia環境に付属している例に基づいて、スケッチがコンパイルされました。



const int ledPin0 = P1_0; const int ledPin1 = P1_1; const int ledPin2 = P1_2; const int ledPin3 = P1_3; const int ledPin4 = P1_4; const int ledPin5 = P1_5; const int buttonPin0 = P2_0; const int buttonPin1 = P2_1; const int buttonPin2 = P2_2; const int buttonPin3 = P2_3; const int buttonPin4 = P2_4; const int buttonPin5 = P2_5; const int tonePin = P1_7; int buttonState0 = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; void setup() { pinMode(ledPin0, OUTPUT); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); pinMode(ledPin5, OUTPUT); pinMode(buttonPin0, INPUT_PULLUP); pinMode(buttonPin1, INPUT_PULLUP); pinMode(buttonPin2, INPUT_PULLUP); pinMode(buttonPin3, INPUT_PULLUP); pinMode(buttonPin4, INPUT_PULLUP); pinMode(buttonPin5, INPUT_PULLUP); } void loop() { buttonState0 = digitalRead(buttonPin0); buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); buttonState3 = digitalRead(buttonPin3); buttonState4 = digitalRead(buttonPin4); buttonState5 = digitalRead(buttonPin5); // LED P1_0 if (buttonState0 == LOW) { digitalWrite(ledPin0, HIGH); tone(tonePin, 440, 200); } else { digitalWrite(ledPin0, LOW); } // LED P1_1 if (buttonState1 == LOW) { digitalWrite(ledPin1, HIGH); tone(tonePin, 440, 200); } else { digitalWrite(ledPin1, LOW); } // LED P1_2 if (buttonState2 == LOW) { digitalWrite(ledPin2, HIGH); tone(tonePin, 440, 200); } else { digitalWrite(ledPin2, LOW); } // LED P1_3 if (buttonState3 == LOW) { digitalWrite(ledPin3, HIGH); tone(tonePin, 440, 200); } else { digitalWrite(ledPin3, LOW); } // LED P1_4 if (buttonState4 == LOW) { digitalWrite(ledPin4, HIGH); tone(tonePin, 440, 200); } else { digitalWrite(ledPin4, LOW); } // LED P1_5 if (buttonState5 == LOW) { digitalWrite(ledPin5, HIGH); tone(tonePin, 440, 200); } else { digitalWrite(ledPin5, LOW); } }
      
      







サーバールームには、4つのUPSと2つの産業用エアコンがあります。 それらはbuttonPinXとして接続され、LEDはledPinXとして接続され、ツイーターはtonePinに接続されます。 スケッチをさらに分析しても問題はないと思います。



アラーム制御パネルは、管理者がいるオフィスと監視センターの2つの部屋に設置する予定でした。 このために2つのボードを使用するのは残念だったので、信号出力を並列化することにしました。 クロスオーバーキャビネットとコンセントからのコンセントを介してすでに敷設されたネットワークケーブルの助けを借りて、構内への信号の配信をかなり珍しいものにすることが決定されました。 6本のUTPケーブルがLEDのプラス接点に使用され、1本がツイーターのプラス接点に、もう1本がアースに使用されます。 機器のドライ接点からのケーブルをボードに直接接続することを決めなかったため、10kの抵抗を使用しました。 また、テスターの読み取りによる電流消費は6mAであり、MSP430G2553コントローラーは出力で最大50mAを供給できるため、LEDが時間の経過とともに燃え尽きるのではないかと心配しました。 390オームの終端抵抗を使用することにしました。 その結果、スキームは次のようになりました



画像



実際の回路では、コンソールへの信号ケーブルのケーブルが右側に形成され、2つのコンソール用にこのようなケーブルが2本あります。 番号が付けられた結論は、UPSのドライ接点と地面とペアになったエアコンに行きます。 乾接点はUPSに接続され、バッテリー放電の開始を通知します。これは同時に、入力電圧もないことを意味します。 一般的なアラームの接点を乾燥させるエアコン。

ほぼ毎日電源の問題があるため、アラームシステムはすぐに動作を開始し、最初の日から機能不全の通知を開始しました。 計画には、ピンのステータスに関するデータを読み取るためのUARTの組み込み、および電子メールまたはSMS通知の形成が含まれます。



All Articles