前のいくつかの記事では、modbusプロトコルを使用して独自のPythonベースのScadaシステムを作成する可能性について説明しました。 今回は、OPCテクノロジーを使用してスレーブに問い合わせるためのシステムを構築した経験を共有したいと思います。
OPCサーバーの欠点は、Microsoft Windowsファミリーのオペレーティングシステムでしか使用できないことです(原則として有料です)。また、Linux OSを使用しているデバイスを忘れることがあります。
しかし、時間が経つにつれて、OPC Unified Architecture仕様が作成され、Windows以外の他のオペレーティングシステムでこのデータ転送技術を使用できるようになりました。 これは、完全なLinuxを実行できる組み込みシステムにも適用されます。
詳細については、
こちらをご覧ください。たとえば、シングルボードのRaspberry Piコンピューターでは、端末デバイス、カウンター、センサーなどをポーリングするために複数の異なるOPC UAサーバーを同時に実行できますが、システムは非常に安定して動作します。

ライブラリのインストール
OPC UAおよびmodbusサーバーを使用するには、Xubuntu 17.04デスクトップとWindows 8.1が使用されます。 Xubuntu 17.04には、既にデフォルトでPython 2.7とPython 3.5がインストールされています。 Python 3.5を選択します。
オペレーティングシステムのインストール後、必要なパッケージがコンピューターに追加されなかった場合は、次のことを行う必要があります。
sudo apt-get install python3-pip sudo pip3 install pytz PyQt5 sudo apt-get install python3-opcua, libxml2-dev, python3-lxml
依存関係の問題を解決する:
sudo apt-get –f install
必要なライブラリを配置した後:
sudo pip3 install requests pyserial
Windowsはpip3.exeを介してインストールできます。ライブラリとサンプルは
こちらサーバーを起動するには、ライブラリをインポートする必要があります。
import sys from opcua import ua, Server
次に、OPC UAサーバーを作成します。
server = Server()
OPC UAを実行するためのすべてのPythonコードです。 複雑なものではないことが判明し、
UA Expertを使用して実行中のサーバーに接続すると、オブジェクトと変数の値の階層リストが表示されます。
変数の値を変更するには、そのタイプの
set_value関数が使用されます。
Discret_1.set_value([1,1,1,1,1,1,1,1])
もちろん、これは非常に原始的な例ですが、OPC UAライブラリには、
ここで読むことができる多くの機能があり
ます 。
理解できなかった唯一のことは、サーバー上でユーザー名とパスワードを設定する方法でした。ある種の政治を通じて、この問題は後で解決すると思います。
サーバー設定
上記の続きで、新しく作成された各サーバーの運用構成に問題が発生しました。
この目的のために、「Server Configurator」はPyQt5ライブラリに書かれています。
動作原理:-sqlite3にデータベースを作成します
-サーバーのスレーブ部分とマスター部分のテーブルが形成されます。
-テーブルに必要なパラメータが入力されます。
-起動スクリプトが形成されます。
基本的な考え方は、サーバーはWindowsとLinuxの両方で同じように動作するということです。
ここからダウンロード
ディレクトリ構造:srvconf.py-「Server Configurator」プログラム
db-srvDb.dbデータベースファイルがあります。
img-ボタン用の.pngファイル
ソース-サーバーテンプレートファイル
- mercury.py-水銀カウンター230の尋問用ライブラリ
- modbustcp_master_dcon.py - modbusTCPスレーブサーバー、マスター-DCONプロトコル(Advantech)を使用してスレーブをポーリングします。 現在、4050モジュールのみ。
- modbustcp_master_http.py - modbusTCPスレーブサーバー、マスター-GETによってURLまたはIPでリクエストを作成し、それに応じて、コンマで区切られたint型または文字列型の値のリストを取得します。 HTTPサーバーを搭載した組み込みシステムに使用し、Wi-Fi接続のESP8266に使用しました。
- modbustcp_master_ping.py - modbusTCPスレーブサーバー、マスター-指定されたサーバーにICMP pingパケットを送信します; trueの場合、false-0の場合、個別の1を形成します。
- modbustcp_master_rtu.py - modbusTCPスレーブサーバー、マスター-modbusRTU。 modbusRTUプロトコルを使用してスレーブをポーリングするために使用
- modbustcp_master_tcp.py - modbusTCPスレーブサーバー、マスター-modbusTCP。 modbusTCPプロトコルを使用してリモートデバイスをポーリングするために使用されます。
- opcua_master_dcon.py -OPC-UAスレーブサーバー、マスター-DCONプロトコル(Advantech)を使用してスレーブをポーリングします。 現在、4050モジュールのみ。
- opcua_master_http.py -OPC-UAスレーブサーバー、マスター-URLまたはIPによるGETによりリクエストを作成し、それに応じて、コンマで区切られたint型または文字列型の値のリストを取得します。 HTTPサーバーを搭載した組み込みシステムに使用し、Wi-Fi接続のESP8266に使用しました。
- opcua_master_mercury230.py -OPC-UAスレーブサーバー、マスター-水銀230カウンターポーリングコマンドが生成されますこのプロトコルを使用するすべての応答パラメーターがmodbusレジスタに配置されるように明確に処理できるわけではないため、実装はOPCUA専用です。
- opcua_master_ping.py -OPC-UAスレーブサーバー、マスター-ICMP pingパケットを指定されたサーバーに送信します; trueの場合、false-0の場合、個別の1を形成します。
- opcua_master_rtu.py -OPC-UAスレーブサーバー、マスター-modbusRTU。 modbusRTUプロトコルを使用してスレーブをポーリングするために使用されます。
- opcua_master_tcp.py -OPC-UAスレーブサーバー、マスター-modbusTCP。 modbusTCPプロトコルを使用してリモートデバイスをポーリングするために使用されます。
scr-サーバーを起動するスクリプトファイル。
Windowsでは、start_XX.batタイプのファイルが作成され、Linuxでは、start_XX.shタイプのファイルが作成されます。XXは、サーバーテーブルのサーバーシリアル番号です。
start_XX.batファイルの内容: rem 'ScadaPy v.3.11' rem 'Windows opcua_mercury230 ' rem Slave '192.168.0.103' rem Slave '4840' rem master 'master_mercury230' rem slave 'opcUA' rem tty 'com6' rem tty '9600' start c:\Python35\python.exe F:\scadapy\config\source\opcua_master_mercury230.py 68 F:\scadapy\config\db\srvDb.db
Linuxのstart_XX.shファイルの内容:
Linuxの起動パラメーターは、xfce4-terminalを使用します。 私はXubuntu 17.04で働いています。
ただし、gnome-terminalなどの別のタイプの起動を指定できます。
xfce4-terminal --command='sudo /home/jack/config/scr/start_67.sh'
例では、テーブルを埋めるためのパラメータが非常に明確に説明されています。
raspberry Pi 4サーバーでは、/ dev / ttyUSB0上のmobus_ping、opcua_http、opcua_mercury230および/ dev / ttyUSB1上のmodbus_dconが同時に安定して動作し、同時に失敗することはありませんでした。
現時点での管理は部分的に実装されており、master_dconのみで行われているため、テレシグナリングとテレメトリのみが使用されます。 将来的には、テレコントロールを追加すると思います。