PLCnext ControlでOPC UAクライアントを構成するステップバイステップ ガイド
ファームウェアバージョン 2023.0には、待望のOPC UAクライアント コンポーネントが含まれています。PLCnext Info Centerには、この機能の優れた技術リファレンスが含まれています。
このチュートリアルは、PLCnext ControlデバイスでOPC UAクライアントを構成し、OPC UAサーバとデータを交換できるようにするステップバイステップ ガイドです。
必要なもの:
- ファームウェアバージョン 2023.0以降を実行するPLCnext Controlデバイス(OPC UAクライアントとして動作)。PLCnext Controlデバイスのファームウェアをアップグレードする必要がある場合は、Info Centerに示されている手順に従ってください。
- PLCnext Engineerバージョン 2023.3以降。
- OPC UAサーバ。この記事では2台目のPLCnext ControlデバイスをOPC UAサーバとして使用しますが、クライアントとして使用している同じPLCnext Controlデバイスを使用することも、あるいは(例えば)Windows PC上で実行されているサードパーティ製OPC UAサーバを使用することもできます。サードパーティ製サーバの場合、以下の「サーバ」手順をお使いのサーバ用にどのように適応させるかを判断する必要があります。
- Unified AutomationのUaExpert。OPC UAサーバ タグに関する情報を取得し、独自のOPC UAクライアントの構成で使用するために必要です。
OPC UA通信を構成する際の重要なポイントの1つは、セキュリティ上の理由から、OPC UAクライアントとOPC UAサーバが互いを信頼する必要があることです。したがって、クライアントとサーバ デバイス間でセキュリティ証明書を交換する必要があります。この手順には、クライアント デバイスとサーバ デバイスを行き来する必要があり、少し混乱する可能性があります。セキュリティ チェックを無効にせずに手順をシンプルにする方法についてご提案があれば、コメントでお知らせください。
手順
OPC UAサーバ デバイス
- ブラウザでPLCのIPアドレスにアクセスして、Webベースド マネジメント(WBM)サイトを開きます。
- 設定メニューから[システム サービス]項目を選択します。
- [OPC UAサーバ]サービスを有効化します(まだ有効でない場合)。
- 必要に応じて[適用して再起動]ボタンを押します。
- PLCnext Engineerを開きます。
- お使いのPLCnext Controlデバイス用のテンプレートを使用して、新しいPLCnext Engineerプロジェクトを作成します。
- PLCnext EngineerプロジェクトでPLCのIPアドレスを設定します。
- [OPC UAサーバ]構成ページで:
- [DNS名 / IPアドレス]を、OPC UAクライアントがDNS名またはサーバのIPアドレスを使用してサーバにアクセスするかに応じて、PLCのDNS名またはIPアドレスに設定します。この情報はOPC UAサーバのセキュリティ証明書に含まれます。多くのOPC UAクライアントは、証明書内のこの情報がサーバ URLと一致しない場合、サーバ証明書を拒否します。
- [変数の可視性]を[マーク済み]に設定します。これにより、OPC属性でマークされたすべての変数がOPC UAサーバ経由でアクセス可能になります。
- OPC UAサーバで公開する変数を作成します。これらの変数の[OPC]チェック ボックスがオンになっていることを確認してください。以下の例では、メイン プログラムに2つの変数が作成されています。
- 新しい入力値を受信したときに出力変数を変更するロジックを追加します。この例では、メイン プログラムで以下のコードが実行されます:
Server_Data_Out := Server_Data_In + 1;
- プロジェクトを書き込み、開始します。
PLCnext Engineerバージョン 2025.0以降には、OPC UAクライアントで変数エントリを作成するために使用できる「ブラウズ」機能が含まれています。そのブラウズ機能を使用する場合、UaExpertを使用してサーバ変数に関する情報を取得する必要はなく、次の3つの手順をスキップできます。
- UaExpertを使用して、PLCのユーザー名とパスワードでOPC UAサーバに接続します。「証明書が信頼されていません」という警告が表示されますが、他の警告はないはずです。
- サーバ証明書を信頼します(永続的またはこのセッションのみ)。
- 各サーバ変数について、その変数のNode IDと名前空間の名前を書き留めます。
- サーバ PLCのWBMサイトを再度開きます。
- セキュリティ メニューから[証明書認証]項目を選択します。
- [アイデンティティ ストア]タブを選択します。
- [OPC UA自己署名] [サーバ] アイデンティティ ストアから証明書をダウンロードします。キーペアはダウンロードする必要はありません。
OPC UAクライアント デバイス
- ブラウザでPLCのIPアドレスにアクセスして、WBMサイトを開きます。
- 設定メニューから[システム サービス]項目を選択します。
- [OPC UAクライアント]サービスを有効化します(まだ有効でない場合)。
- 必要に応じて[適用して再起動]ボタンを押します。
- 再起動完了後、再度WBMサイトにログインし、セキュリティ メニューから[証明書認証]項目を選択します。
- [トラスト ストア]タブを選択します。
- 先ほどダウンロードした[OPC UA自己署名] [サーバ] 証明書を、[OPC UAクライアント]という名前のトラスト ストアに追加します。これで、OPC UAクライアントはOPC UAサーバがアイデンティティを検証するために使用するセキュリティ証明書を信頼します。この手順は、サーバ証明書が変更されるたびに繰り返す必要があります。
- [アイデンティティ ストア]タブを選択します。
- [OPC UAクライアント自己署名] アイデンティティ ストアから証明書をダウンロードします。キーペアはダウンロードする必要はありません。
OPC UAサーバ デバイス(再び)
- ブラウザでPLCのIPアドレスにアクセスして、WBMサイトを開きます。
- セキュリティ メニューから[証明書認証]項目を選択します。
- [トラスト ストア]タブを選択します。
- 先ほどダウンロードした[OPC UAクライアント自己署名] 証明書を、[OPC UA設定可能]という名前のトラスト ストアに追加します。これで、OPC UAサーバはOPC UAクライアントがアイデンティティを検証するために使用するセキュリティ証明書を信頼します。この手順は、クライアント証明書が変更されるたびに繰り返す必要があります。
OPC UAクライアント デバイス(再び)
- PLCnext Engineerを開きます。
- お使いのPLCnext Controlデバイス用のテンプレートを使用して、新しいPLCnext Engineerプロジェクトを作成します。OPC UAクライアントとOPC UAサーバの両方に同じデバイスを使用する場合、同じPLCnext Engineerプロジェクトが使用されます。
- PLCnext EngineerプロジェクトでPLCのIPアドレスを設定します。
- ファームウェアバージョン 2023.6より前のPLCでのみ必要: [OPC UAサーバ]構成ページで、[変数の可視性]を[マーク済み]に設定します。OPC UAクライアントのためにこのOPC UAサーバ設定が必要なのは奇妙に思えますが、これはファームウェアバージョン 2023.6以降で修正されています。
- OPC UAサーバの変数に接続される変数を作成します。 ファームウェアバージョン 2023.6より前のPLCでのみ必要: これらの変数の[OPC]チェック ボックスがオンになっていることを確認してください(ファームウェアバージョン 2023.6以降のPLCではチェック ボックスは不要です)。
以下の例では、メイン プログラムに2つの変数が作成されています。
- [OPC UAクライアント接続]タブで、1つのサーバと2つの変数グループを追加します。
サーバ URL、ユーザー名、パスワードは、使用しているOPC UAサーバに合わせて変更してください。
- 「購読」変数グループに、1つの変数マッピングを追加します。
これにより、リモート変数(OPC UAサーバ上)からの値が、PLCnext Engineerプロジェクト内のローカル変数に自動的に転送されます。
- 「書き込み」変数グループに、1つの変数マッピングを追加します。
これにより、PLCnext Engineerプロジェクト内のローカル変数からの値が、リモート変数(OPC UAサーバ上)に自動的に転送されます。
- PLCnext Engineerプロジェクトを書き込み、開始します。
- デバッグ モードで変数
Client_Data_outの値を変更します。その値がOPC UAサーバ上の変数Server_Data_Inに書き込まれます。その値はサーバでインクリメントされ、変数Server_Data_Outに書き込まれます。その変数の値がクライアント上の変数Client_Data_Inに転送されます。
うまくいかない場合は?
PLCnext Info Centerのトラブルシューティング ガイド(ページの下部)を確認してください。
よくある質問
Q: クライアントは証明書/鍵認証を使用してOPC UAサーバに接続できますか?
A: 現時点ではできません。
Q: OPC UAクライアントはサーバ パスワードをどのように保存しますか?
A: 現時点ではOPC UAサーバ パスワードはクライアント構成ファイルに平文で保存されますが、PLCnext Runtime開発者はより安全なパスワード保存方法に取り組んでいます。
Q: OPC UAサーバから読み取ったデータの品質情報(ステータス コード、タイムスタンプなど)を取得できますか?
A: 現時点ではできません、申し訳ありません。
この記事は2025年3月24日に更新され、PLCnext Engineerで利用可能になったサーバ ブラウズ機能に関する情報が追加されました。
付録: ファイルベースの構成
PLCnext EngineerでのOPC UAクライアント構成は、コントローラ上でXML形式で保存されます。PLCnext Engineerを使用しないアプリケーションの場合、コントローラ上でXML構成を直接書き込むことでOPC UAクライアントを構成できます。
この例で準備された構成は、以下のXMLファイルで表されます:
デフォルトのOPC UAクライアント設定への必要な変更は、ファイル
/opt/plcnext/projects/current/Services/OpcUA/Modules/Client/client.module.configで定義されます:<?xml version="1.0" encoding="utf-8" standalone="yes"?> <OpcUAClientModuleConfigurationDocument schemaVersion="1.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.phoenixcontact.com/schema/opcuaclientmoduleconfig" xmlns="https://www.phoenixcontact.com/schema/opcuaclientmoduleconfig"> <Application> <CertificateStore> <SelfSignedIdentityStoreName>OPC UA Client self-signed</SelfSignedIdentityStoreName> <GivenIdentityStoreName>OPC UA Client</GivenIdentityStoreName> <TrustStoreName>OPC UA Client</TrustStoreName> </CertificateStore> <SessionSecurity> <ApplicationAuthentication>false</ApplicationAuthentication> <ApplicationUriCheck>true</ApplicationUriCheck> <CertificateHostnameCheck>true</CertificateHostnameCheck> <CertificateTimeCheck>true</CertificateTimeCheck> <CertificateIssuerTimeCheck>true</CertificateIssuerTimeCheck> <PasswordEncryptionCheck>true</PasswordEncryptionCheck> </SessionSecurity> <Timeouts> <SessionTimeout>1200000</SessionTimeout> <ConnectTimeout>5000</ConnectTimeout> <WatchdogTimeout>5000</WatchdogTimeout> <CallTimeout>10000</CallTimeout> </Timeouts> </Application> </OpcUAClientModuleConfigurationDocument>OPC UAクライアント接続は、ファイル
/opt/plcnext/projects/current/Services/OpcUA/Modules/Client/Configs/clientconnections.xmlで定義されます:<?xml version="1.0" encoding="utf-8"?> <eUAClientConfigurationDocument xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:uax="https://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="https://phoenixcontact.com/OpcUA/PLCnext/UAClientConfig/Types.xsd"> <eUAClientConfiguration> <Name>ClientConnectionsConfiguration</Name> <NamespaceArray> <uax:String>https://phoenixcontact.com/OpcUA/PLCnext/GlobalDataSpace/</uax:String> </NamespaceArray> <ServerConnections> <eUAClientServerConnection> <EncodingMask>3</EncodingMask> <Endpoint> <uax:EndpointUrl>opc.tcp://192.168.1.10:4840</uax:EndpointUrl> <uax:SecurityMode>Sign_2</uax:SecurityMode> <uax:SecurityPolicyUri>https://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</uax:SecurityPolicyUri> </Endpoint> <UserTokenType>UserName_1</UserTokenType> <UserName>admin</UserName> <Password>xxxxxxxx</Password> </eUAClientServerConnection> </ServerConnections> <VariableGroups> <eUAClientVariableGroup> <GroupType>Write_1</GroupType> <CycleTime>100</CycleTime> <NodeMappings> <eUAClientNodeMapping> <LocalVariable> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Client_Data_Out</uax:Identifier> </LocalVariable> <RemoteVariableDescriptor> <EncodingMask>2</EncodingMask> <ServerIndex>1</ServerIndex> <NodeId> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Server_Data_In</uax:Identifier> </NodeId> </RemoteVariableDescriptor> </eUAClientNodeMapping> </NodeMappings> </eUAClientVariableGroup> <eUAClientVariableGroup> <GroupType>Subscribe_0</GroupType> <CycleTime>100</CycleTime> <NodeMappings> <eUAClientNodeMapping> <LocalVariable> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Client_Data_In</uax:Identifier> </LocalVariable> <RemoteVariableDescriptor> <EncodingMask>2</EncodingMask> <ServerIndex>1</ServerIndex> <NodeId> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Server_Data_Out</uax:Identifier> </NodeId> </RemoteVariableDescriptor> </eUAClientNodeMapping> </NodeMappings> </eUAClientVariableGroup> </VariableGroups> </eUAClientConfiguration> </eUAClientConfigurationDocument>このファイルは、先ほど(UaExpertを使用して)記録した名前空間とNode IDの情報を使用して、クライアントがアクセスするサーバ変数を指定します。
上記のファイルで、以下の項目をお使いのアプリケーションに合わせて変更してください:
要素
uax:EndpointUrlには、OPC UAサーバのIPアドレス(またはDNS名)を含める必要があります。UsernameとPassword要素には、OPC UAサーバに必要な認証情報を含める必要があります。
重要: この例では、UaExpertのNode ID文字列に
ns=6というテキストが含まれていました。上記のXMLファイルでは、これはns=1に変更されています。なぜなら、「namespace」パラメータ(ns)は、ローカル クライアント上の名前空間のリストへのインデックスだからです。この例では、UaExpertからコピーした名前空間名は、clientconfig.xmlファイルの名前空間リストの最初(かつ唯一)の名前空間です。
OPC UAクライアント構成ファイルに変更を加えた後、PLCnext Runtimeを再起動する必要があります。
産業技術
- サイバーセキュリティをシンプルに:製造業者は「ゴールから逆算」で始めよ
- コンプライアンス遵守:FHWA再帰反射率期限6月13日 - 必須ガイド
- カリフォルニア航空宇宙産業の2017年展望:成長と機会
- 従来型倉庫がサプライチェーン進化を阻害する──モダンソリューションが重要な理由
- より強靭なグローバルサプライチェーン構築:短期・中期・長期の戦略的ステップ
- ガラスが現代建築の新標準となった理由
- カスタムアナログマルチメーター自作:パーツから校正まで
- 2024年版:製造業が実践すべきトップ5サイバーセキュリティ戦略
- 板金公差の理解:精密加工のための重要知見
- AMS1117ピンアウト&配線ガイド:初心者向け完全チュートリアル
- 製造品質を高める:優れた製品卓越性のための実証済み戦略