OPC UA サーバー

このセクションでは、Typhoon HIL ツールチェーンにおける OPC UA サーバーの実装について説明します。

コンポーネントはサポートされていません:このコンポーネントは現在 TyphoonSim ではサポートされていません。このコンポーネントをモデルに追加すると、TyphoonSim でモデルを実行できなくなります。TyphoonSim モードでモデルを実行する前に、このコンポーネントを無効にするか、モデルから削除してください。

OPC UA

OPC UAは、次世代のOPCテクノロジーです。OPC UAは、サーバーとクライアント間の情報転送において、より安全でオープンかつ信頼性の高いメカニズムです。従来のOPCである「OPC Classic」よりもオープンなトランスポート、優れたセキュリティ、そしてより包括的な情報モデルを提供します。OPC UAは、エンタープライズシステムと、実世界のデータと相互作用する様々な制御機器、監視機器、センサーの間でデータを転送するための、非常に柔軟で適応性の高いメカニズムを提供します。

Typhoon HILツールチェーンのOPC UAサーバーコンポーネント

OPC UA は、Typhoon HIL デバイス(HIL402、HIL101、HIL404、HIL602+、HIL604、HIL506、HIL606、 VHIL)でサポートされています。

OPC UA サーバー コンポーネントには、図 1に示すように、 nodes_innodes_out の2 つのポートがあります。

1 OPC UAサーバーコンポーネント

コンポーネント ダイアログ ウィンドウを開いた後、サーバーの 2 つの部分、OPC UA 構成と実行速度を定義できます。

OPC UAサーバーの基本設定では、IPアドレス、ポート、ネットマスクを定義する必要があります。複数のサーバーで同じIPアドレスを使用し、異なるポート番号を設定することもできます。

さらに、 OPC UAサーバーノードの設定セクションで説明されているように、モデル初期化パネルでログインオプションを定義できます。現在、匿名ログインとユーザー名/パスワードログインがサポートされています。ユーザー名とパスワードが存在する場合は、ユーザー名/パスワードログインが選択され、存在しない場合は匿名ログインが使用されます。

サーバー設定に加えて、HILデバイス背面のどのイーサネットポートをアプリケーションで使用するかを選択するオプションもあります。第4世代デバイス(HIL101、HIL404、HIL506、HIL606)では、利用可能なポートであればどれでも通信に使用できますが、古いデバイスではポート1経由の通信のみがサポートされます。

暗号化された通信

暗号化通信は、盗聴から情報を保護することで、伝送される情報のセキュリティを確保します。OPC UAサーバーコンポーネントでは、ユーザー名/パスワードによるログイン保護と併用できます。

OPC UAは、OpenSSLによって生成された証明書を使用して暗号化通信を提供します。これらの証明書の基本形式は*.derおよび*.pemです。証明書の相対パス(OPC UAサンプルモデルに示されています)を含む「証明書」辞書が提供されない場合、OPC UAサーバーコンポーネントは暗号化通信を使用しません。

暗号化が必要な場合、「certificate」辞書には少なくとも3つの要素、「server_certificate」、「server_key」、「client_certificate」が必要です。暗号化を使用しながら複数のクライアントをOPC UAサーバーに接続する場合は、「client_certificate」リストに各クライアントの個別の証明書を追加する必要があります(例:'client_certificate': ['certs\\uaexpert.der, 'certs\\client_cert.der'])。

THCCインストール時に、デフォルトのサーバー証明書が「communication protocols/opc ua/certs/server_cert.der」に提供されます。また、クライアント証明書が同じファイルパスに「uaexpert.der」という名前で配置されています。他の証明書を使用する場合は、アプリケーションのIPアドレスをそのアプリケーションの証明書に追加することが重要です(例:サーバーIPアドレス:192.168.20.200、証明書内のIPアドレス:127.0.0.1、192.168.20.200)。

OPC UAサーバーノード構成

OPC UAサーバーノードは、 nodes_inおよびnodes_out Python辞書、または単一ノード辞書を使用して定義できます。辞書キー(OPC UAノード)は、ユーザーが任意に命名できる信号名です。OPC UAノードの値はPythonタプルです。タプルの最初の要素はコンポーネント入力ベクトルのインデックス、2番目の要素は変数の型です。型は「int」、「uint」、「bool」、「real」のいずれかです。ノード構成を使用する場合、変数がコンポーネントへの入力か出力かを定義する3番目のパラメータが必要です。値は「in」または「out」のいずれかになります。

ノード設定は1つの方法のみ使用できます。設定にnodes_innodes_out 、およびnodes辞書が定義されている場合、検証は失敗します。

スカラーノードは、単一のインデックス値と信号型で定義されます。配列ノードは、2つのインデックスと信号型で定義されます。配列ノードの場合、最初のインデックスは入力ベクトルの開始インデックス、2番目のインデックスは入力ベクトルの終了インデックスです。配列のサイズは、終了インデックス-開始インデックスで計算されます(例:[3, 5]は3つのノードを持つ配列です)。

設定は、モデル > モデル初期化でPython辞書型として定義し、設定プロパティ(OPC UA設定)に設定する必要があります。設定名はユーザーが自由に定義できます(図2を参照)。

2 OPC UAサーバー構成1
config1 = {
    'ip_addr': '192.168.42.200',
    'port': 16664,
    'netmask': '255.255.255.0',
    'username': 'username',
    'password': 'password',
    'certificate': {
                'server_certificate': 'certs\\server_cert.der',
                'server_key': 'certs\\server_key.pem',
                'client_certificate': ['certs\\uaexpert.der']
       },
    'nodes_in' : {
        'current_in': (0, 'real'),
        'voltage_in': (1, 'real'),
        'current_voltage':([0,1], 'real')
    },
    'nodes_out' : {
        'cmd_out': (0, 'int'),
    },
}

上記の設定例(config1)では、 nodes_in には1つの入力スカラー値(入力ベクトルのインデックス0)と2つの入力配列があります。1つ目の配列は2つの要素(入力ベクトルのインデックス1と2)を持ち、2つ目の配列は3つの要素(入力ベクトルのインデックス3と5)を持ちます。nodes_out のノードも同様に設定されていますが、出力として表示されます。

nodes_inおよびnodes_outの辞書キー(voltage0_in、array_int_inputs など)は、OPC UA NodeId 文字列識別子として使用されるため、一意である必要があります。nodes_inの辞書キーは同じ名前を持つことができますが、その場合は最後に定義された同じ名前のキーが使用されます( nodes_outにも適用されます) 。nodes_inで定義されたノードはクライアントに対して読み取り専用ですが、 nodes_out の値は書き込み可能です。

ノード構成の 2 番目の方法を図 3に示します。

3 OPC UAサーバー構成2
config2 = {
    'ip_addr': '192.168.42.200',
    'port': 16665,
    'netmask': '255.255.255.0',
    'username': 'username',
    'password': 'password',
    'certificate': {
                'server_certificate': 'certs\\server_cert.der',
                'server_key': 'certs\\server_key.pem',
                'client_certificate': ['certs\\uaexpert.der']
       },
    'nodes': {
        'Measurements': {
            'Current in': (0, 'real', 'in'),
            'Voltage in': (1, 'real', 'in'),
            'Current and voltage': ([0, 1], 'real', 'in'),
        },
        'Outputs':{
            'Cmd out': (0, 'int', 'out'),
        }
    }
}

上記の構成例(config2)では、単一ノード構成辞書が使用されています。この辞書の構造はOPC UAサーバーにミラーリングされます。上記の例では、2つのOPC UAフォルダ( 「計測」「出力」 )が作成され、それぞれに変数が含まれています。これらのフォルダには、変数を含む複数のフォルダを含めることができるため、ユーザーはフォルダ構造を自由に定義し、それに応じて変数を並べ替えることができます。

すべての型は継承されます。ノードの説明は自動的に生成されます。

時間同期

時刻同期が必要な場合は、 「時刻同期」をご覧ください。

仮想HILサポート

仮想HIL環境はホストPC上で実行されるため、すべてのOPC UAサーバーアプリケーションでIPアドレスは同一になります。特定のOPCサーバーへの接続には、固有のポート番号が使用されます。ホストIPアドレスはOPCサーバーアプリケーションで使用されます。OPCサーバーアプリケーションにアクセスするには、次のURLを使用します:opc.tcp://ホストPC名:ポート番号

x509証明書の生成

自己署名x509証明書の生成を支援するPythonスクリプト「create_self-signed.py」が「communication protocols/opc ua/certs」ディレクトリに提供されています。スクリプトの冒頭部分には簡単なユーザーマニュアルがあります。

注意:スクリプトが正しく動作するには、OpenSSL がインストールされている必要があります。