今回の記事ではPilzのPITReaderをCDP StudioからOPC UA Serverにアクセスする手順を説明します。CDP StudioのRuntimeはSEEED STUDIOのreComputer R1025-10と横河電機のert3を使用します。
さ、FAを楽しもう。
Reference Link
http://soup01.com/ja/category/iec61499/cdpstudio/
OPCUA with PITreader
PITreader OPCサーバーUAは、組み込み型のOPCサーバーで、さまざまなデバイスタイプやバージョンで利用できます。
PITreaderのOPC UAサーバーを使用することによって、PITreaderからのプロセスデータとデバイスデータを可視化システムに提供します。また、OPC UAサーバーはPITreaderからデータを読み込むことが可能です。
注意するのは、 PITreaderのOPC UAサーバーには、一度に最大1つのクライアント接続を確立することができます。OPC UAクライアントは、例えば、可視化システムPASvisuのOPC UAクライアントであっても、サードパーティ製OPC UA対応クライアントであってもかまいません。
Properties
PITreader OPCサーバーUAは、OPC UAクライアントからのアクセス用に、以下のOPC UAプロパティをサポートしています:
- TCP経由のUAバイナリ・プロトコル
- OPC UA Url EndPointのFormatは以下になります。
- opc.tcp://<IP address>:<Port>
- <IP address>
PITreader OPC Server UA を含む PITreader の IP アドレスになります。 - <Port>
PITreader OPCサーバーUAのポート番号
デフォルト設定 4840
- <IP address>
- 例: opc.tcp://192.168.0.12:4840
- opc.tcp://<IP address>:<Port>
Limits of the PITreader OPC Server UA
PITTreaderのメッセイベントホール発行間隔 Min. 500ミリ秒、最大 15000ミリ秒になります。Subscriptionでは、OPC UAクライアントが 「PublishingInterval 」に500ms未満の値を使用した場合、PITreader OPCサーバーUAは 「PublishingInterval 」に最小値の500msを使用する。また 「PublishingInterval 」に15000ミリ秒を超える値を使用した場合、PITreader OPCサーバーUAは 「PublishingInterval 」に最大値の15000ミリ秒を使用します。
Client certificate
クライアント証明書は、以下の要件を満たす必要があります。
- DERまたはPEM形式の証明書
- 鍵長2048ビット、SHA2(256ビット)のRSA証明書
- 証明書は、 “Subject Alternative Name”にクライアントのアプリケーション URI を含める必要があります。
DERとPEMは、デジタル証明書と暗号鍵のエンコーディング・フォーマットであり、これらは、特にX.509証明書の取り扱いにおいて広く使われています。
DER (Distinguished Encoding Rules)
DERバイナリ Formatで、ASN.1で記述されたデータ構造のバイナリフォーマットです。通常、厳密なバイナリ形式が必要なアプリケーションで使用される。
使用例:
- Java環境やバイナリデータを必要とするその他のシステム
- iOSやAndroidのようなモバイル・プラットフォーム
- などなど
ファイル拡張子は.der、.crt、.cer(バイナリ形式)になります。
PEM (Privacy Enhanced Mail):
PEMはBase64エンコードテキストで、PEM は、DER 形式の証明書を Base64 でエンコードし、ヘッダー行とフッター行を追加することで、読みやすくし、テキストフレンドリーな環境での送信を容易にします。
使用例:
- ウェブサーバー
- 電子メールシステム
- などなど
ファイル拡張子はpem、.crt、.cer、.key(テキスト形式)になります。
Namespace
こちらはPITReaderのNamespcae一覧です。
Address space
こちらは今回記事で使用するAddress spaceだけを紹介します。
Nameplate
Nameplate Address spaceは該当するPITTreader製品の情報になります。
Network
Nameplate Address spaceは該当するPITTreader製品のネットワーク情報になります。
PITreader/Transponder
Nameplate Address spaceは該当するPITTreaderに差してるTransponderの情報になります。
PITreader/LED
Nameplate Address spaceは該当するPITTreaderのLEDの情報やLED状態を変更する機能になります。
Implementation
ert3 Side
最初に横河電機のert3から構築します。
Generate the certification
OpenSSLを使用してOPC UA用の自己署名証明書と秘密鍵を生成する際に、Application URIを含むように設定ファイルを作成する方法を説明します。以下の手順に従って、OPC UAに必要な証明書と鍵を生成します。
ssl Folderを作成します。
mkdir ssl cd ssl |
まず、RSAの秘密鍵を生成します。通常、2048ビットを選択します。
openssl genpkey -algorithm RSA -out server_private_key.pem -pkeyopt rsa_keygen_bits:2048 |
次に、証明書署名要求(CSR)を生成するための設定ファイルを作成します。以下の内容をopenssl_csr.cnfという名前で保存します。
nano openssl_csr.cnf |
subjectAltName = URI:foobarはのちほどCDP Studioの設定に合わせる必要があります。
[ req ] default_bits = 2048 distinguished_name = req_distinguished_name prompt = no req_extensions = v3_req [ req_distinguished_name ] C = JP # ST = Tokyo # L = Minato O = Your Organization # OU = Your Unit CN = yourdomain.com emailAddress = youremail@example.com # [ v3_req ] keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = URI:foobar |
設定ファイルを使用してCSRを生成します。以下のコマンドを実行します。
openssl req -new -key server_private_key.pem -out server_request.csr -config openssl_csr.cnf |
次に、CSRを用いて自己署名証明書を作成します。
openssl x509 -req –in server_request.csr -signkey server_private_key.pem -out server_certificate.pem -days 365 -extensions v3_req -extfile openssl_csr.cnf |
必要に応じて、証明書と鍵をDER形式に変換することも可能です。
openssl x509 -req –in server_request.csr -signkey server_private_key.pem -out server_certificate.pem -days 365 -extensions v3_req -extfile openssl_csr.cnf |
Add OPC-UA Client
次はCDP Stuidoから新規プロジェクトを作成し、Resources>OPCを検索>OPC-UA-Clientをプロジェクトに追加します。
Done!OPC-UA-ClientのBlockが追加されました。
End Point
End PointはPILZ社のPITReaderのIPアドレスになります。
Port
PortはPILZ社のPITReaderのOPC UA Serverの使用Portに合わせます。Default上ではOPCUA ServerがPort 4840を使用します。
ClientAppURI
ClientAppURIは先程証明書で設定したURIと一致する必要があります。
SecurityMode/SecurityPolicy
PILZ社のPITReaderはSign&Encrypt/Basic256Sha256のみ対応します。
TLS Certificate /Key File
こちらはert3からPITReaderとOPCUA 通信するための証明書とPrivate KeyのFile名を設定する場所です。先程のStepで生成した証明書とKeyの名前を入れましょう。
AllowURIMissmatch
最後は接続先のOPC UA Serverによって、TLSAllowURIMatchのCheckboxオプションを入れてください。
Add your Certification File
今度は先程横河電機のert3で生成した証明書をプロジェクトに追加します。
Code>プロジェクト>Add Existing Files..をクリックします。
横河電機のert3で生成した証明書とKeyをプロジェクト名>ApplicationのFolderに格納しましょう。
Done!証明書とKeyも追加されました。
Configure Nodes
次はOPC-UA-ClientのBlockを開き、PILZのPITreaderのOPCUA ServerにアクセスしたいNodeを構築します。
Nameplate
最初にPITreader本体の情報”Nameplate”を取得します。
Add ClienObjectNode
右のResourcesにあるOPC-UA-IOからClientObjectNodeをOPC-UA-ClientのBlock内に追加します。
Done!
次は先程追加したClientObjectNodeを開きます。
Example:Add String Node
全部のNodesの追加や設定方法を説明するのは難しいので、PITreader内のいくつかのObjectやNodeの設定方法を説明します。
OPC-UA-IO>ClientVariableNode>ClientVariableNode<String>をOPC-UA-Client Block内に追加しましょう。
Done!ClientVariableNodeとOPC UA ServerのNodeを接続するには、最低限の設定を説明します。
Name
Namは該当するClientVariableNodeの表示名を設定します。ここでわかりやすい名前に設定しましょう。
IDType
ID TypeはOPC UA ServerのNodeの識別子の種類になります。今回は数字でアクセスしますので、”Numeric”で設定してください。
Id
IdはuaExpertを使用するとき、Nodeがns=2,i=2000みたいな表現方法がありますね。そのi=2000はCDP StudioのIdに該当します。
Namespaceindex
NamespaceindexはuaExpertを使用するとき、Nodeがns=2,i=2000みたいな表現方法がありますね。そのns=2はCDP StudioのNamspaceIndexに該当します。
Result
Done!これでNameplate NamespaceのNodeが全部追加されました。
Example:PITReader
最後はもう1つの設定例を紹介します。PITreaderのNamespaceにはたくさんのObjectが含まれ、深く構造化されています。こちらの例ではこのような深く構造化されたOPC UA Objectのアクセス方法について説明します。
Add PITrader Object
最初にPITreader Objectを追加します。
PILZの取説にはIdentifier=1001、Identifier Type=Numericで、タイプはBasic Nodeなので、CDP Studioにそれらのパラメータに合わせて設定しましょう。
なので、ClientObjectNodeは下図のように設定します。
- Name=PITreader(CDP Studio上の表示で、わかりやすくすればOK)
- IdType=Numeric
- Id=1001
- Namespace=4
Add LED
今度はPITreaderの下にあるLED Objectを追加します。
PILZの取説にはIdentifier=1004、Identifier Type=Numericで、タイプはStructure Nodeなので、CDP Studioにそれらのパラメータに合わせて設定しましょう。
ClientObjectNodeを追加します。
ClientObjectNodeは下図のように設定します。
- Name=LED(CDP Studio上の表示で、わかりやすくすればOK)
- IdType=Numeric
- Id=1004
- Namespace=4
Add State
LED Objectの下にあるState Nodeを追加します。
LEDのBlockの中にClientObjectNodeを追加します。
PILZの取説にはIdentifier=1009、Identifier Type=Numericで、タイプはStructure Nodeなので、CDP Studioにそれらのパラメータに合わせて設定しましょう。
ClientObjectNodeは下図のように設定します。
- Name=State(CDP Studio上の表示で、わかりやすくすればOK)
- IdType=Numeric
- Id=1009
- Namespace=4
Add Colour/Flash Mode
State Objectの下にあるColour Nodeを追加します。
PILZの取説にはIdentifier=2053/2054、Identifier Type=Numericで、タイプはUInt32 Nodeなので、CDP Studioにそれらのパラメータに合わせて設定しましょう。
ColourのBlockの中にClientVariableNode<unsigned Int>を追加します。
ClientObjectNodeは下図のように設定します。
- Name=Colour(CDP Studio上の表示で、わかりやすくすればOK)
- IdType=Numeric
- Id=2053
- Namespace=4
ClientObjectNodeは下図のように設定します。
- Name=FlashMode(CDP Studio上の表示で、わかりやすくすればOK)
- IdType=Numeric
- Id=2054
- Namespace=4
Add OverWrite
最後はOPC UA ServerにNodeの現在値を上書きするための設定手順を紹介します。
LED Blockの中にClientObjectNode “Overwrite”を追加します。
ClientObjectNodeは下図のように設定します。
- Name=Overwrite(CDP Studio上の表示で、わかりやすくすればOK)
- IdType=Numeric
- Id=1010
- Namespace=4
Colour・Actiaveted・FlashMode、3つのNodesを追加します。
実際のNodeのIdentifierとIdentifier Typeなどに合わせて設定しましょう。
各Nodeが書き込めるように、下図の設定にしておきましょう。
- Input=True
- Bidirectional=True
Result
Done!これで横河電機のert3側が準備完了です。
Pilz PITReader Side
次はPILZのPITreaderを設定します。
OPC UA Server
次はOPC UA Serverの設定になります。今回の記事ではOPC UA Serverを使用しませんが、該当する機能を有効にする方法だけ説明します。
OPCUA Serverをクリックすると、WebServerにPITreaderのEnd pointが表示されます。
Generate new certificateをクリックし、OPC UA Serverの証明書を生成します。
少々お待ち下さい…
Done!
Upload
Upload client certificateに先ほど横河電機ert3で生成した証明書を選択し、PITreaderにUploadしましょう。
Done!
Seeed Studio Side
最後はSeeedStudio側を構築します。SeeedStudioのreComputer R1025-10を使用し、CDPStudioの中にGUI アプリケーションを作成し、ert3のCDPStudioのRuntime変数にアクセスします。
Add GUI Project
プロジェクトを右クリック>Add Newします。
CDP Applicationを選び>Chhoseで進みます。
DefaultのApplication TypeはConsoleです。
そのApplication TypeをGUIに変更し、Next>で進みます。
Finishでプロジェクトを作成しましょう。
Done!GUIプロジェクトを追加しました。
Configure Toolkit
SeeedStudioのRecomputer R1025がRaspberry Piペースの64Bit OSなので、Toolkitを”ARMv86 64 bit(Debian 11)”に設定してください。
Create your GUI Application
次はDesignのボタンをクリックし、GUI画面を作成しましょう。
こちらは今回SeeedStudioのRecomputer R1025で実行するGUI画面になります。詳しい画面作成はReference Linkを参考にしてください。ここでいくつか重要な設定のみを紹介します。
Label
Label部品の表示を変更するために設定するFieldを説明します。
cdpRoutingに適切な変数に割り当ててください。
Lamp
Lamp部品のON/OFF色をトリガーするために設定するFieldを説明します。
cdpStyleRoutingに適切な変数に割り当ててください。
Button
最後はButton部品をクリックしたあと変数の現在値を変更する設定を説明します。
CDPBaseButtonMsgでは以下の設定をアプリケーションに合わせて設定しましょう。
- cdpRouting:現在値を変更したい変数
- cdpParameter:書き込むの値
Download
最後はプロジェクトを横河電機のert3とSeeedStudioのRecomputer R1025を同時にDownloadしましょう。
Result
こちらの動画で実際の動作確認できます。