誰のために-OpenSCADAを使用しているが、「すぐに使える」ソリューション以上を実装できない場合
-自分でSCADAを探しているが決定できない人向け
-このプロジェクトを放棄し、その仕組みを理解していない人向け
なぜ-このソリューションにより、Mercury 230およびMercury 200のカウンターの読み取り値を制限なく読み取ることができます。
-それは無料です
プロジェクトopenscada(oscada.org)は当然のことながらあまり注目されておらず、ハブに関する記事は1つしか書かれていません。 ほとんどのエンジニアは、3メートルの棒でこの製品に触れることを恐れており、悪魔はあなたのLinuxが何であるかを知っています。 実質的に一人の人、ローマン・サボチェンコによって十数年以上開発されてきました。
一般にSCADAの経験がなく(そしてLinuxとは少し仲が良かった)、私はエンタープライズでオブジェクトを監視するためにそれを選択しました。 比較するものが何もないので、インターフェイスとすべてのデータ接続を相互に許可しました。 ビデオチュートリアル「クイックスタート」は本当に個人的には役に立ちました。そのようなレッスンはもっとできたはずです。 ドキュメントも複数回読み直す必要がありましたが、それだけの価値がありました。 最初のデータ収集モジュールを接続したため、Nevod +は長い間、なぜ機能しないのか理解できませんでした。 結局、DCONプロトコルと互換性があるため、彼はプロジェクトリスト(より正確には、そのアナログ)にリストされていました。 私はプロトコルソースに入りました... ...それはリストから収集する他の多くのモジュールのように、それが完全に互換性がないことが判明しました。 フォーラムへの最初のアピールにより、私の問題といくつかのエラーがすぐに修正されました。 システムのすべての複雑さについては説明しませんが、ハブに関する上記の記事を読むか、「クイックスタート」を参照することをお勧めします。
しばらくしてから、Mercury 230電気メーターから測定値を取得する必要がありましたが、openscadaではこれらのメーターはサポートされていません。 よく知られているkonfiguratorの作成者からtaskgroupユーティリティを試してみましたが、CSDがカウンターに問い合わせるためのデッドナンバーであることが判明しました。 しかし、すべてがそれほど悪いものではありません。openscadaシステムは非常にモジュール式であり、少なくともC ++で、少なくとも高レベル言語でモジュールを作成できます。 Mercury 230の交換プロトコルの説明は、ネットワーク上で問題なく見つけることができます。メーカーのIncotexは、要求に応じて説明を提供できますが、この赤いテープには触れたくありませんでした。
そのため、バスをカウンターに接続します。わかりやすくするために、konfiguratorとシリアルポートスニファーを配置するプロトコルの方向性を明確にするために、ドキュメントを開きます。 アドレス75のカウンターからデータを読み取ろうとしています。
すべてのスクリーンショットはクリック可能です

データがどのように実行されたかを確認します。

Mercury 230の通信プロトコルは、modbusプロトコルに非常に似ています。
通信チャネルを開く要求は、アクセスのレベルを示すデータへのアクセスを許可するように設計されています。 カウンターは、2つのレベルのデータアクセスを実装します。最初(最低)-消費者レベル、2番目(最高)-ホストレベル

コンフィギュレーターを使用してカウンターをポーリングし、最初の要求がパスワードであり、カウンターの応答が4バイトであることを確認してみましょう。 含む

では、openscadaでこれを実装してみましょう。 C ++では、私は強くないので、JavaLikeCalc.Javascriptと呼ばれるSCAD自体に組み込まれた言語で実装することにしました。 ポーリングコード自体は、UserProtocolとDevLibの2つのモジュールに実装されています。 デバイスライブラリにデバイスを作成し、m230を呼び出します。 属性netaddr(ネットワークアドレス)、パスワード(パスワード)、トランスポート(シリアルポート)、および回答(パスワード要求への応答)を追加します。 そして、リクエストを書きます。

プロトコル部分に移り、UserProtocolでユーザープロトコルを作成し、m230とも呼びます。 ネットワークアドレスを変換することから始めましょう。 modbus CRC16チェックサム計算コードは、すでに長い間書かれています。コードに挿入するだけです。

目的のポート、速度、タイミングを書き込んでトランスポートを作成します。

次に、LogivLevでデバイスを作成します。ここで、コントローラーとパラメーター(カウンターでもあります)を作成します。 テンプレートを選択し、構成でネットワークアドレス、パスワード、およびトランスポートを設定します。

対応するタブでアーカイブを有効にする必要はありません。

[属性]タブに移動して、カウンターからの4バイトの応答を確認します。 パスワードが受け入れられ、素晴らしい!!!

さて、電気の読みを読んでみましょう。 各関税およびその金額に対して、いくつかのレコードのテンプレート属性にさらに数行のコードを追加します。

次に、プロトコルに別の行を追加します。 要求が来たかどうかの答えをチェックし、パケット長をチェックすることは不必要ではありません。 有用な応答情報の各4バイトは、そのバイトシーケンスによって解釈され、スクリーンショットでエネルギーを読み取るために表示されます。 16進数システムの最後で、データを10進数に変換します。さらに、この数値を1000で割る必要があります。

再びテンプレートの構成に進み、「リセットからエネルギーを読み取ります」と属性に既に関税データを表示します。

ここでやめるつもりはなく、電圧、電流、電力などのインスタントデータを追加しようとします。 ここではすべてが同じです。2番目、3番目、4番目のバイトのみを変更します。これらのバイトは、カウンターから取得する情報を決定します。


プロトコル側にもいくつかの変更を追加します。その長さを仮定するバイトへの応答を確認し、それを確認し、バイトシーケンスを追加し、10進法に変換し、電圧と電力についての答えを100で割り、電流についての答えを1000で割ります。

カウンターの属性には、すべてのメインデータが表示されます。もちろん、これは何倍にもなります。たとえば、ヘルツ単位の周波数など、必要に応じて追加できます。

わかりやすくするために、さらにいくつかのカウンターを追加しましょう。 しかし、それだけではありません。データは読むだけでなく、便利な形式で提示する必要があります。 これを行うには、openscadaにVision(作業ユーザーインターフェイス)があり、少なくともニーモニックダイアグラムの形式、グラフの形式、ドキュメントの形式など、ユーザーにとって便利な任意の形式でデータを表示できます。 テンプレートから標準ドキュメントを取得して編集し、この方法で取得します。

また、日ごとにデータアーカイブを簡単に読み取れるように、ドキュメント処理に行を追加します。

その結果、プロジェクトを起動してドキュメントを開きます。

インスタント値またはアーカイブから値を提示する必要がある場合は、そこに値を追加してグラフを作成します。 電圧計の値の例を次に示します。

しかし、しばらくして、単相水銀200カウンター用のプロトコルを同時に作成するというアイデアは止まりませんでした。ネットワーク上のプロトコルの説明は見つかりませんでしたが、世界には良い人がいません。
ここでのネットワークアドレスは、カウンターパスワードです。 デフォルトでは、シリアル番号の最後の6桁に等しくなります。 テンプレートを書きましょう。
これがリクエストとレスポンスのパケット図です

カウンターのシリアル番号が長すぎて32ビット整数に収まらないため、2つの部分に分割します。
関税要求コード0x27、要求構造を記述し、どの関税の責任を負うバイトを選択します。 そして、この値を100で除算します。そして、キャラクターのボリュームの答えをチェックします。
瞬時値を読み取るには、リクエストコード0x63を使用します。 また、バイト数については回答を確認してください。 これらの各値のニュアンスも考慮されます。
しかし、カウンタがセットアップ+プログラムによってエンコードされている場合はどうでしょうか? 幸い、インストーラーがどのようにエンコードするかは誰もが知っているので、コードの先頭に行を追加します。

プロトコル側に移りましょう。 アドレスを16進数に変換します。 前のプロトコルと同様のチェックサムとリクエストの計算。

いくつかのカウンターを追加し、テンプレート構成に設定を書き込みます。

また、[属性]タブでは、カウンターが必要な値をどのように提供するかがわかります。

これらの値をより便利な方法で表示するドキュメントを作成します。 ドキュメントテンプレートを編集しましょう。 プロジェクトを実行します。

すべてが非常にシンプルであることが判明しました。 このプロトコルは、
oscada.org / ru / forumフォーラムの「OpenSCADAの開発」セクションでダウンロードできます。 そして、現時点では、これは水銀の無制限の数のカウンターに対する唯一の無料ソリューションです。
PS 3年前にこのケースを書きましたが、最近になって共有することにしました。
PPS記事には、ローマが明らかに不満を抱く可能性のある不正確さがあります。