MiniSCADAは自分でやる

一度、彼らは私に電話をしてきました-下水ポンプ場(SPS)を少し自動化できますか? 本当に何も質問せず、電話をかけることなく、私は何をどのようにすればよいのだろうと思い始めました。



主にTomsk社のElesiの製品を中心に10年以上SCADAのスペシャリストであったため、TraceModeなどのような有名なパッケージを使用することにすぐに思いつきました。 しかし、顧客と会い、彼が必要とするものをより詳細に学習したので、既製のパッケージを使用しないことにしました。



タスクは簡単でした。SPSの建物に座っている祖母を排除し、廃水でタンクが蓄積する定期的なプロセスを監視することです。 ポンプは、ロシアのコントロールパネルの一部としてModicon PLCによって制御されていました。 私の祖母は、ポンプの事故が発生した場合、修理チームに通知し、タンクがいっぱいになるのを防ぐ必要がありました。 制御はリモートで実行する必要があり、制御機能は必要ありませんでした。



自動化ボードのドキュメントを入手した後、私はそこに信号のビットマップを備えたコントローラレジスタの説明を見つけてうれしく思いました。 さて、情報があります、それを実現するのはあなた次第です。



コミュニケーション組織


インターネットを介してブラウザでCNSの動作を制御することが決定されました。 すぐにタスクがありました-都市のいずれかの地区の後ろにあるSPSからデータを転送する方法は? あなたはそこにインターネットを手に入れることができません、そしてそれは愚かです、あなたはそこにコンピュータを置かなければなりません。 シールド内のPLCにはRS-485インターフェースがあり、Modbusプロトコルをサポートしていました(このプロトコルはModiconによって作成されたため、当然です)。

長いグーグルの後に、このデバイスは私の目に来ました:





CCU-Wireless COM



デバイスはGSM COMポート延長ケーブルであり、RS-232、RS-485、およびRS-422インターフェイスをサポートします。 これはSibsvyaz NPOによって提供されており、誰が開発しているのかわかりません。 それは15000ルーブルかかりました。 さらに、GSMアンテナが購入されました。 彼らは、デバイスに「テレメトリ」料金を設定したSIMカードをインストールしました。



企業はすでにWebサーバー(IIS)を持っているため、追加コストは必要ありませんでした。 CCUとの通信用のcom-portドライバーがWebサーバーにインストールされ、デバイスが構成され、接続チェックが実行されました。 ポート監視プログラムがドライバーに付属しているため、デバイスがサーバーと通信しており、コントローラーに物理的に接続されているかのように、システムにcomポートを取得していることがすぐにわかりました。 これで、PLCを直接操作できます。



サーバー側


どういうわけか、com-portからMySQLデータベースにデータを転送する必要がありました。 VB6のプログラミングスキルがほとんどなく、Modbusプロトコルの知識があるため、PLCからレジスタを読み取り、テキストファイルに書き込むプログラムが作成されました。 怠inessと、MySQLとVB6の友達を作ろうとするいくつかの失敗のためだけに、データベースに直接書き込みませんでした。 このため、私は4年目から機能し、壊れない松葉杖を作らなければなりませんでした。



テキストファイルからデータを読み取ることは、nnCronを使用して起動され、ファイルが書き込まれた時刻を変更するPHPのスクリプトに委ねられました。



データベースには、アラームのテーブル、イベント名、それらの重要度などが作成されました。 -すべて、大人のシステムのように。 読み取りスクリプトは、データベース内のすべてをビット単位で配置し、必要なイベントが機能した場合にSMSを送信します。



クライアント部


クライアント部分は通常のブラウザです。 目的のアドレスに接続され、次の画像が表示されます。







画像はTraceModeで描画され、背景として使用されます。 アクティブな要素は、画像の上にあるdivブロックです。 情報は15秒ごとに更新されます。 ポンプの始動と停止は約40分ごとに発生します。



ここでは、2つのポンプが自動モードになっていることがわかります。ポンプの横にあるゼロは消費電流です。 センサーがタンクの最初のレベルをトリガーしました。

ブラウザの情報は、AJAXを介してxmlの形式で提供されます。



<shittank> <signals> <name>pump1_on</name> <datatimer>2012-10-04 16:09:05</datatimer> <name_signal></name_signal> <type>B</type> <alarm_text> 1 </alarm_text> <priority>1</priority> <data>0</data> </signals> <signals> <name>pump1_man</name> <datatimer>2012-10-04 16:09:05</datatimer> <name_signal></name_signal> <type>B</type> <alarm_text> 1  </alarm_text> <priority>0</priority> <data>0</data> </signals> … … </shittank>
      
      







各信号のデータパラメーターに従って、ブロックのスタイルが変化するため、イベントに応じてリアルタイムで表示されます。 下部には、イベントがテキスト形式で表示されるウィンドウがあります。 このスクリーンショットでは、最初の起動時にすべてのイベントがダウンロードされ、ユニットの状態が正しく表示されます。その後、変更された信号のみが送信され、トラフィックが節約されます。



システムをデバッグするときに、ブラウザのキャッシュデータに問題が発生しましたが、これはまったく必要ありませんでした。 URLにランダムな値を追加することで問題を解決しました。

var url = "update.php?=" + Math.random();



「通信なし」という信号は、20分以内にPLCからの応答がない場合に生成されます。 この場合、SMSがサービスエンジニアに送信されます。 「SIMカードにお金を入れるのを忘れた」ことと、駅の建物の緊張が不足しているため、通信が途絶えている可能性があります。



「履歴」ボタンは、イベントの履歴のウィンドウを開きます。







[概要]ボタンをクリックすると、ポンプの起動概要ウィンドウが開きます。







操作中、画面を見ている人はいなかったため、これらすべての美しさを引き出して、実際のSCADAのようなディスプレイを実現する必要はありませんでした。 オペレーターが行うことは、イベントの履歴を時々開いて事故が何であったかを確認し、月末にポンプの稼働時間を報告することです。



結果:

このソリューションは4年目も順調に機能しています。 私の祖母は解雇され、現代の技術は老年期を打ち負かしました。



同様に、サードパーティのソフトウェア製品を使用せずにホームオートメーションの制御と管理を整理できます。



All Articles