前のパート(
パート1 、
パート2 、
パート3 、
パート4 、
パート5 )では、
球状制御問題の例を使用して、libuniset2の原理とメカニズムを検討しました。 私たちの視界に入っていないものを示すために残っています...疲れていない人は、してください...
まとめ
前のパートの目的は、
libuniset2を使用して制御システムを作成(
または展開 )することがどれだけ簡単かつ高速であるかを示すこと
でした 。 要約すると、すべてはいくつかの簡単な手順に帰着します。
- プロジェクトを配置し、システムに入るセンサーでプロジェクトを入力するには(configure.xmlに入力します)。 ところで、このプロセスは、他のより便利な形式(ソース)からセンサー(または設定)のリストを生成することにより自動化できます。
- プロセスを入力と出力のあるブラックボックスと見なして、特別なxmlファイルでそれぞれを説明した制御アルゴリズムを実装します。
- libuniset2-utilsに含まれるさまざまなユーティリティを使用しながら、ローカルでデバッグします
- テストフレームワークを使用してテストを作成する-uniset2-testsuite
それだけです...
ただし、libuniset2を構成するコンポーネントの多くは考慮されていないため、libuniset2に含まれる他のコンポーネントについて簡単に説明します(
いつか何らかの力を得て、使用例で説明します )。
未確認のコンポーネント
- SharedMemory-すべての作業が実行されるシステムの主要な要素。 実際、 SMは現在の値を実際に保存することに加えて、次のことができます。
- 順序付けられたセンサーの変更の通知の生成
- しきい値センサーの形成(アナログ)
- センサー間の依存関係メカニズムを実装します
- プロセスのハートビート追跡メカニズムを実装します
- イベントによる緊急トレースの形成( センサーの操作(「起爆装置」)による保存、最後のNポイントの指定されたセンサーグループの値 )
- バックアップSMからのデータ復旧
- DBServer-データベースのメンテナンス。 各センサーの変更履歴を保存します。 MySQL、PostgreeSQL、SQLite、RRDを使用する
- Modbus TCP / RTU( マスター 、 スレーブ ) -マスターモードとスレーブモードでModbus TCP / RTUプロトコルを使用した既製の交換プロセスの実装。 いくつかのチャネルでのポーリング、スレーブノードにアクセスできない場合のチャネルの切り替えなど。
- IOControl -I / Oカードを操作します。 作業はlibcomediの使用に基づいています。 この一環として、ドライバーはロシアのメーカーFastwelの I / Oカードをサポートするために開発されました
- 入力センサーの処理メカニズムは、トリガーとリリースの遅延、信号のリーディングエッジとトレーリングエッジでの動作、アンチバウンス、アナログ信号用のシンプルなデジタルフィルター、キャリブレーション(線形およびキャリブレーション図)およびその他の変換です。
- UNETは、ブロードキャストUDPに基づく独自のプロトコルです。 分散システムのノード間でセンサーの状態の同期を提供します。 準備ができたコンポーネント、 設定して実行するだけです。 最初の記事では、UNETを使用したシステムのブロック図を紹介しました。
- LogicProcessor- 「単純な」論理回路をサポートする単純なエンジンの実装。 論理回路の説明は、xmlファイルの形式で作成されます。 要素「AND」、「OR」、「Delay」、「NOT」が使用可能です。
- MQTTPublisher - MQTTプロトコルを使用して、システム内のセンサーからデータを公開する機能。 実装は、 mosquittoプロジェクトの使用に基づいています。
- uniset-timemachine-これは別個の非常に興味深いプロジェクト(Python)です。 その本質は、データベースに保存された履歴データを再生することです。 データはデータベースから取り出され、SMにリアルタイムで保存されます。 たとえば、グラフィカルインターフェイスまたはコントロールパネルシミュレーターを接続すると、オペレーターが一度に押したボタン、点灯した電球、グラフィカルインターフェイスの画面に表示されたボタンなどを視覚的に確認できます。 つまり 本当に「タイムマシン」( 確かに、このプロジェクトはまだ待機中です。大規模なデータベースボリュームでは最適化が必要であり、これまでのところMySQLのみがサポートされています。しかし、これは時間の問題です... )
一般的に、
ここには何らかのドキュメントがあります。
実際のアプリケーションについて少し
もちろん、ご存じのとおり、
どのプログラムにもエラーが含まれています 。 libuniset2でもすべてが完璧というわけではありませんが、それでも動作します。 実際のプロジェクトで動作します。 これまで、最大の「システム」
(単に大規模なプロジェクトはまだありませんでした)は管理システムです。
- 約12,000個のセンサー
- ポーリングされた80個のModbusSlaveデバイス
- さらに、システム自体は5つのコントローラーと2つのグラフィックパネルのみで構成されています。
- ノード間のすべてのセンサーの状態同期-150 ms(UNET)
約3000のセンサーを備えたプロジェクトがありましたが、約18のコントローラー(ノード)がありました。 これらの図は、「印象を与える」ことを意図したものではなく、機能することを示したいだけです。 また、libuniset2にもこのためのメカニズムがありますが、特別な最適化なしで大容量を
消化します(優先度の低い、またはめったにセンサーを変更しないなどのために、ポーリングはすべてのサイクルではありません) 合計で、すでに約30または40のプロジェクトがあります。
だから、libuniset2を試してください、それは簡単です:)プロジェクトへのリンク: