ScadaPy-OPC UAの使用

前のいくつかの記事では、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() #  IP    ,    server.set_endpoint("opc.tcp://0.0.0.0:4840/") #   server.set_server_name("Server") #     #      ,          server.load_certificate("server_cert.der") server.load_private_key("server_private_key.pem") #    uri = "http://server" idx = server.register_namespace(uri) #         objects = server.get_objects_node() #      Object_1 =objects.add_object(idx,'MyFirstObject) Object_2 =objects.add_object(idx,'MySecondObject) Object_3 =objects.add_object(idx,'MyThirdObject) #   Discret_1 = Object_1.add_variable(idx,'Discret_1',[0,0,0,0,0,0,0,0]) Discret_2 = Object_2.add_variable(idx,'Discret_2',[0,0,0,0,0,0,0,0]) Analog_3 = Object_3.add_variable(idx,'Analog_3',[10,20,30,40,50]) #  server.start()
      
      





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ファイル

ソース-サーバーテンプレートファイル





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ファイルの内容:

 #     'ScadaPy   v.3.09' #   'Modbus TCP' # Slave  '192.168.0.101' # Slave  '504' #  master 'master_modbusTCP' #  slave 'modbusTCP' #  tty '/dev/ttyUSB0' #  tty '9600' /home/jack/config/source/modbustcp_master_tcp.py 67 /home/jack/config/db/srvDb.db
      
      





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のみで行われているため、テレシグナリングとテレメトリのみが使用されます。 将来的には、テレコントロールを追加すると思います。



All Articles