ここ、 ここ、 ここ 、 ここの記事の続き。 、ホームオートメーションと産業企業の両方の分野で、ScadaPyシリーズのpythonスクリプトを簡単に使用する例を示したいと思います。
1. AdvantechおよびScadaPyのADAMモジュール。
Advantech 4000シリーズモジュールをポーリングするための簡単なpythonの例。
データの読み取りと制御コマンドの送信には、独自のDCONプロトコルが使用されます。 むかしむかし、このメーカーのプログラムが配布され、私が間違えなければ、Adam ViewまたはGeniDAQと呼ばれました。 私たちは一度彼女と一緒に始めました、それはとても面白かったです。 今日まで、私はまだ実行可能ないくつかのモジュールを手に入れました。
ポーリング用のコマンドのリストは、各モジュールのドキュメントに記載されています。 ここで読むことができます 。
ポーリングには、rs485インターフェースが使用されます。 4050 I / O入力モデルのみが利用可能であったため、このモデルの処理を記述しました。 入力ライン7ビット、出力ライン8ビット。
データを読み取るには、コマンド ' $ 016 \ r 'をポートに送信します
$-制御文字
01-デバイスアドレス
6-チーム
serialPort.write( '$ 016 \ r')
dataIn = serialPort.read(8)
serialPort.flushInput()
応答として、 !007F00の形式の8バイトが受信されます。 情報バイト3と4はデジタル入力DIのステータスを報告し、バイト1と2はデジタル出力DOのステータスを報告します。 復号化コードを以下に示します。
if(dataIn[0]=='!'): byteDI = str(bin(int('0x'+dataIn[3]+dataIn[4],16))[2:] ).zfill(7) byteCoil = str(bin(int('0x'+dataIn[1]+dataIn[2],16))[2:] ).zfill(8)
さらに、ADAM-4050のデジタル入力のステータスは、プログラムのスレーブ部分のDISCRETE_INPUTSレジスタにあり、デジタル出力のステータスはCOILSレジスタに転送されます。
github.comにあるライブラリ
2. ScadaPyおよびmaster_ping.pyモジュール。
リモートサイトのスレーブサーバーとの通信の損失を検出するために使用されます。 ICMPパケットは定期的にリモートサーバーに送信され、通信がない場合は模倣が表示されます。 もちろん、確認を伴う何らかの種類の音声アラームを追加することをお勧めします。
github.comにあるライブラリ
3. ScadaPyおよびSmartgenジェネレーターモジュール。
これについては以前にここで書いた。
ジェネレーターとその現在の状態のエラー制御プログラムの実装オプションとして。 すべての非常に重要なパラメーターは、燃料レベル、負荷電流、エンジン温度条件です。 原則として、発電機の運転中に定期的にチェックされるのはこれらのパラメーターです。
コンソールオプションが可能です、私はそれが好きです
github.comにあるライブラリ
4. ScadaPyおよびmaster_httpモジュール。
最近の実装例を説明します。
I-8831デバイスは施設に設置され、Modbus TCPプロトコルを使用して動作します。 32個のデジタル入力があります。 変電所の発信フィーダーのセルの「ブリンカー」の状態を監視する必要があります。 リアルタイムモードには厳しい要件はありません。リアルタイムモードは山から遠く離れているため、15分ごとに情報を受信するのに十分です。
Modbus_tkを使用して実装され、ライブラリを要求します。 原理は簡単です。ModbusTCPプロトコルを使用してデータを受信し、GETメソッドを使用してhttp経由でサーバーに送信します。 すべてが非常に簡単です。
import requests.packages.urllib3 resp = requests.get('http://myserver.ru/alive.php?v='+val+'&d='+d+'&r='+reg+'&s='+st+'&dv='+device, timeout=5 )
SSL、ログイン、パスワードを追加することで実装が可能です。
from requests.auth import HTTPBasicAuth import requests.packages.urllib3 requests.packages.urllib3.disable_warnings() # resp = requests.get('https://myserver.ru/alive.php?v='+val+'&d='+d+'&r='+reg+'&s='+st+'&dv='+device, timeout=3, verify=False ,auth=HTTPBasicAuth(login, password)) # verify=False – # login, password –
サーバー側では、データベースに保存する機能を備えた1つのPHPスクリプトに制限できます。 例として、ファイルへの保存を指定しました。
$val=$_GET['v']; $ind=$_GET['d']; $reg=$_GET['r']; $state=$_GET['s']; $device=$_GET['dv']; $dt=Date("dmY"); $now = DateTime::createFromFormat('U.u', microtime(true)); $tm = $now->format("mdY H:i:su"); $getData=$tm.' '.$state.' '.$device.' '.$reg.' '.$val; $fp=fopen('./alive.log','a+'); if($fp) { fputs($fp,$getData."\n"); } fclose($fp);
github.comにあるライブラリ