modbus.pyの作成を高速化する
繰り返しますが、産業オートメーションの分野での経験と実験結果を共有したいと思います。
現時点では、Python言語を使用してデバイスポーリングシステムを構築する概念を少し変更しました。
SCADAシステムのほとんどのモジュールは、
「実行可能ファイル構成ファイル」の束の原則に基づいて構築されてい
ます 。
実行可能ファイルは通常、特定のプロトコルを使用してスレーブに問い合わせるのに直接関係するコンパイル済みバイナリファイルであり、「プロトコルドライバ」とも呼ばれます。
ドライバーのポーリングパラメーター(ポート、アドレス、速度など)は、さまざまなタイプの構成ファイルに記録されます。 いくつかのDBMSの1つまたは複数のテーブルにすることができます。たとえば、SQLiteまたはFirebirdがよく使用されます。xmlファイルも使用できます。
さまざまなデバイスを使用して、すべての設定(変数)を含むコンパイル済みのドライバーファイルを内部に保存しておくと非常に便利であるという結論に達しました。デバイス調査を整理するときに、サーバー上のドライバーを既に修正できると便利です。
この目的のために、xml構成ファイルに基づいてPythonでドライバーを作成するアプリケーションを作成するオプションを検討しました。
主な条件は、ドライバーコードを生成するプログラムがWindowsとLinuxの両方で動作することです。
当初、PyQtでアプリケーションを作成することにしましたが、率直に言って、ユーザーインターフェイスを構築するための本格的なビジュアルIDEを持たずに、このようなバンドルでプログラムを作成することは非常に困難でした。
以前は、C BuilderとDelfiでプログラムを作成しなければならなかったので、Lazarusに目を向けました。 彼らは異なるオペレーティングシステムでプログラムをコンパイルしようとしました-結果に満足していました。
Lazarus IDE 1.8.2でアプリケーションを記述しようと決めました。これをScadaPy Creatorと呼びます。
すべての構成設定は、単一のxmlファイルに保存されます。

出力をコンパイルすると、modbusドライバー、カウンタードライバードライバーMercury-230、http Jsonサーバー、およびクライアントとしてのhtmlファイルが得られます。
仕組み
デバイスのポーリング用にmodbusまたはMercury-230ドライバーを起動します。
説明された変数に従って応答を受信すると、ドライバーはUDPを介してポート64000にデータを送信します。JsonHTTPサーバーを起動し、ドライバーからデータを受信して、http要求用のjson形式のパケットを形成します。
クライアントのhtmlファイルをブラウザーで起動し、処理済みのデータをjson、text、SVG画像として3つの形式で表示します。
その後、HTMLとSVGの両方を編集して、ニーズに合わせることができます。

率直に言って、単純なテーブルの形式でデータを提示するだけで十分ですが、誰かにとっては、情報はニーモニックとしてよりよく認識されます。
Pythonスクリプトの同様の使用例がリモート変電所で繰り返しテストされており、Linux OSに基づくオブジェクトサーバーがインストールされ、SSH経由でのみアクセスできます。
もちろん、多くの入力信号と測定を備えた本格的なSCADAシステムを作成するには、このオプションは適切ではありません。そこで適用する必要があります
信頼できるメーカーの安定した動作ソフトウェア。
後者から呼ばれるものの典型的なバージョンを以下に示します。
チャレンジ:modbusプロトコルで動作するデバイスがあります-温度および湿度センサーLumel P18。

5分ごとに温度と湿度を取得し、任意の形式でモニター画面に表示する必要があります。
デバイスは、オフィスから約90 kmの距離にあります。
まず、プロジェクトを作成します。

P18では、温度は2つのアドレス7002および7003、32ビット、浮動小数点数で取得され、湿度は2つのアドレス7004、7005、32ビット、浮動小数点数で取得されます。

温度と湿度に加えて、相対湿度と絶対湿度、露点など、オブジェクトに関するより詳細な情報を表示することができます。

生成後、2つのmodbus.pyおよびjserver.pyファイルが作成されます。
これらのファイルをオブジェクトのサーバーに送信し、クライアントのコンピューターでjclient.htmlを実行します。

もちろん、htmlファイルをWebサーバーに移動することもできます。
それは基本的にそれです。サンプルを含むプロジェクトは
ここからダウンロードでき
ます。PSどんな批判、コメント、アドバイスも歓迎しますが、建設的で要点です。