今回の記事はKeyence KV8000とTwinCAT TF6100でOPCUA Security接続する手順を紹介します。こちらは今回の構成です。最初はUaExpertからKeyence KV8000にNon Security Connectionで接続し、。そのあとはOPC UA CPP ServerとTwinCATをSecurity Connectionで接続する。最後はTwinCAT3とKeyence KV8000をTwinCATのSecurity Connectionで接続します。
Reference Link
http://soup01.com/ja/category/protocol/opcua/
Video-Japanese Version
Video-English Version
Version
注意するのはKV StuidoでOPC UA Server使用するのにVersionは11.5以上する必要があります。
Keyence Side
New Project
File >New project で新規ブロシェットを作成します。
Project name を入力し、ok します。
なんかバージョンアップしたらoperation recording というツールがついてきます。とりあえず無視なので、Set later します。
Yes でunit Editor を起動します。
Unit setting
Unit Editor 起動したらこのようなハードウェア構築画面にかわります。そこでモジュール追加やパラメータ設定などを行うことが可能です。
CPUをクリックするとで右の画面で細かい設定します。
IP Addressing
まずはIpアドレスから設定します。Base >IP address とsubnet mask をアプリケーションに合わせてください。
OPC UA
次はOPC UA Server settings でopc ua serverを設定します。
OPC UA server enabled のdrop list からenable してください。
Opcua server を有効にすることによって、第三者からCPU の変数にアクセスできるようになりますが、よろしいですか?と。 OK て進みます。
Endpoint URL が表示されるようになり、こよlink はあなたのキーエンスCPU のOPC UA server のアクセスurl です。
Security Setting
OPC UA server settings でセキュリティ関係の細かい設定ができます。
セキュリティポリシー、アクセス権限、user などを設定できます。
設定完了しまらclose で保存します。
OPCUA Variables
OPC UA server が構築OKしたら、つぎはopcua server の変数を用意します。
Unit configuration >Variable をクリックします。
気がつくかもしれませんが、OPA UA が追加されました。
いくつかの変数を追加します。
右にあるopcua はprivate、InOut、Output の三種類でございます。
Private はCPU 内部(それでもセキュリティ設定によりアクセス可能です)
- INOUT は読み書きも可能な変数。
- OUT は読み出しのみの変数になります。
それで定義しました。
Transfer to PLC
今度はプロジェクトをCPU に転送します。
Monitor/Simulation > Transfer to PLC -> Monitor mode をクリックします。
Continue sending で続きます。
うん。KV8000 のfirmware が古いのでアップデートする必要があります。
Firmawre update
Tool>Functional version validation >PLC します。
Update system program をクリックします。
Up のcheckbox に入れます。
Update ボタンを押せるようにのり、firmware を転送します。
Firmware update すると、中のデータ全部なくなりますが、よろしいでしょうかって。
Yes で進みます。
丁度私のCPU はRUN mode なので、program mode を変更する必要があるようです。
しばらく待ちます‥
よし、アップデート完了。
Check it
もう一回確認しますと、CPU のversion は2.5になってます。
Transfer Again!
もう一回転送してみます。
Select all ですべての要素を選択>execute で実行します。
Certification の話しはこれから書きますので心配しないでください。
今のはCPU 内部にはcertification ないので生成しCPUに転送しますか?と。
Yesします。
Certification の情報を入力します。
よし、これでok です。
Export certificate and private key のcheckbox をいれ、ok で完了。
.der と.key.bin がexport されました。
Test1- Connection test with UaExpert
ではtwincat3 始める前にまずkeyence のopc ua server 機能してるかどうかをチェックします。UAEXPERTを使用します。
プラスボタンでサーバーを追加します。
Custom Discovery >Double click you add server のところでダブルクリックしサーバーを追加します。
先ほどキーエンス側で設定したendpoint をそのまま貼り付けます。
KV OPC UA Server が見つかるはずです。
サーバーをダブルクリックしセキュリティ接続方法を選べます。
接続テストだけなのでNone で行きます。
OPC UA Server が追加されました。
Connect Server で接続します。
Certification を信頼しますか?って聞かれます。Trust Server Certificate をクリックしContinue します。
キーエンスのopc ua server と繋がりました。
さきほど定義したglobal 変数をUAEXPERT のdata access view にdrop します。
それらのnode の現在値、データ・タイプなどの情報を一覧できます。
Security Connection?
OPCUAはIndustry4.0の中で急成長した大きな原因の一つはセキュリティの統一だと私は思っています。OPC UA通信のメッセージから盗聴や改ざんを守るために、通信のセキュリティポリシーを設定できます。セキュリティポリシーはといのは、署名と暗号化のありなしとそのアルゴリズムの組み合わせのことです。
- 署名というのは、証明書とデータの正当性を保証するために付けられた暗号化された情報です。
- 暗号化というのは、データの送受信のとき、途中で第三者による盗聴や改ざんから守るために、アルゴリズムで変換するものです。
OPC-UAベースの通信でセキュリティを2つに分ける大きな部分があります。
- Transport Layer
- Application Layer
一つのOPC-UA Serverは複数のEnd Pointを提供しておりClient側が接続先を選ぶことできます。そのEnd Point Url文字ベースでどんなセキュリティ機能がが必要なのか示しています。(セキュリティMode・Policyなど)、Client側は必ずその条件を満たさなければなりません。
例えば、Transport LayerではEnd-pointが署名と暗号化したPackaget求めるとか、
Application LayerではUser nameとPasswordが求められるなど。
Transport LayerではClient/Serverで証明書の確認で”信頼できる”の通信関係構築から成り立ちます。もちろんApplication Layerでは先にもいった通り、User 認証でも可能です。
Security Policy
Security Policyというのはデータを交換するとき、署名と暗号化のありなしと、そのアルゴリズムの組み合わせです。
(Noneで設定すればセキュリティ機能なしでも繋がりますが、あまり推奨しません。)
Server Certification
Server CertificationはOPC-UA Server自身を証明するものだと思ってください。もしセキュリティ機能を使用する場合は、ClientがServerのCertificationを登録する必要があります。
Certificate Exchange
こちらは実際証明書認証するときの流れになります。DefaultでTwinCAT OPCUA ServerとClientはそれの流れのためにSelf-Signed certificationを自動的に生成します。
Step1:OPC-UA Server Generate the Certification
それはKV-Studioだけの話ではありません。KV StudioからOPC-UA Server機能を有効化すると、Self-Signed certificationが自動的に生成され、KV8000に転送されます。
Step2:Transfer the Server Certification to the Client Side
次はそのCertification FileをClient側に転送します(難しそうに言いましたが、単にServer CertificationをCopyしCleint側のFolderに貼り付けるだけです。)
Step3:Client try to connect the OPC UA Server
ClientがServer Certificationと自分のClient Certificationを使用しOPC-UA Serverに接続します。
Step4.1 Trusted it!
もしServerがそのClient Certificationを信頼し、”Trusted” Folderに移動すればOPC-UA接続が許可されます。
Step4.2 If no Server Certification..
たとえClient のCertificationがTrusted Folderにいて、Client自体がServer Certificationなければ接続できません。
Step4.3 if Certification not in trusted Folder
逆にClient側はServer CertificationがあってもClient CertificationがServerのTrusted Folderにいなければ、それでも接続できません。
Step4.4 trusted And rejected Folder
ClientのCertificationはこのように\PKI\CA\trusted\certsやPKI\CA\rejected\certsに格納されています。極端に言うと、PKI\CA\rejected\certsのCertificationをそのままCopy pasteeでPKI\CA\trusted\certs Folderに移動すれば接続が成功します。
Test2- Beckhoff TwinCAT3 Connect with UACPP OPCUA Server
Configuration
実際Keyence KV8000のOPC-UA Serverと接続する前にはまずUA-CPP OPCUA ServerとBeckhoff TwinCAT3 TF6100 セキュリティ接続してみます。
Server Certification Structure
CPP OPC-UA ServerとSecurity接続するにははいつくのFolderの役割を把握しましょう。
pkiserver\own\certs
そのFolderが保存してる.der fileはSever自身であることの証明書です。先程KV StuidoからCertification がExportされたこと覚えていますか。まさに同じ役割です。
pkiserver\own\private
そのFolderは保存してる.der fileはSever自身であることの証明書です。先程KV StuidoからCertification がExportされたこと覚えていますか。まさに同じ役
そのFolderに保存してる.pem Fileはデータを暗号化するために使用するPrivate Keyで、そのKeyは絶対公開しないでください。
pkiserver\trusted\certs
そのFolderは保存してる.der fileは信頼してる接続Clientの証明書の保存先です。
pkiserver\rejected\certs
そのFolderは保存してる.der fileは接続拒否するClientの証明書の保存先です。
TwinCAT3 OPCUA Client Structure
次はTwinCAT3側で、Folder名はServerとまったく同じです。
Client\PKI\CA\own\certs
そのFolderは保存してる.der fileはClient自身であることの証明書です。先程KV StuidoからCertification がExportされたこと覚えていますか。まさに同じ役割です。
Client\PKI\CA\own\private
そのFolderに保存してる.pem Fileはデータを暗号化するために使用するPrivate Keyで、そのKeyは絶対公開しないでください。
Create your own certification!
もしTwinCAT DefaultのCertification Fileを使いたくないなら、UaExpertから証明書を生成することもできます。UaExpertを立ち上げ>SEっちんgs>Manage Certificatesをクリックします。
Create new Application Certificateをクリックします。
個人情報を入力しOKします。
念のためにReflashボタンで画面更新します。
Open certificate Locationボタンで証明書のDirectoryを移動します。
Pki/own/certsのuaexpert.der は生成した証明書になります。
Start the OPC-UA CPP Server
OPC-UA CPP Serverを立ち上げます。opc.tcp://yourservername:48010はそのOPC-UA CPP ServerのEnd Point Urlです。
TwinCAT3 Side
次はTwinCAT3側を設定します。
Add Virtual OPC-UA Device
I/O>Devices>Add New Itemします。
OPC UA>Virtual OPC UA Deviceを選び>Okします。
それでOPA UA Virtualが追加されました。
Add OPC-UA Client IO
次はOPC-UA Client IOを追加します。Device 1>右クリック>Add New Itemします。
OPC UA Client[Module]を選び>Okします。
OPC-UA Client IOが追加されました。
Settings1- Endpoint Configuration (None)
OPC-UA Client IOをクリックし、Endpointの設定で、Security Policyなしで接続します。
先OPC-UA CPP ServerのEndpointを貼り付けて、Security PolicyとSecurity ModeをNoneに設定します。
Add Node
Select Endpointをクリックします。
opc.tcp://yourname:48010[None;None;Binary]をCheck入れてOKします。
Add NodesボタンでServerをアクセスします。
Select Nodeの画面が表示されればアクセス問題ないです。
Dynamic>ScalarのいくつのNodeをCheck入れ>Enable Write のCheck入れ>OKします。
Client #1の下にNodeが追加されました。
Download
Activate ConfigurationでHardware ConfigurationをDownloadします。
OKします。
TwinCAT RuntimeをRun Modeに変えます。
歯車ICONは緑に変わったらOkです。
Test it!
Client #1>先ほど追加したNoe>Inputs>Valueをクリックします。
1・0で変換し続けることがわかります。
もう1つの変数をみてみましょう。それでもずっと変化し続けます。
Settings2 – Endpoint Configuration (Security Connection)
次はセキュリティ接続を構築します。Select Endpointをクリックします。
opc.tcp://yourname:48010[SignAndEncrypt;Basic256Sha256;Binary]をCheck入れ、Okします。
Security PolicyとSecurity Modeも反映されます。
Add Node
Add NodeボタンでOPC-UA CPP Serverに[SignAndEncrypt;Basic256Sha256;Binary] Modeアクセスしてみます。
Something odd happened while connecting!のエラーが表示されます。
Details(1)で詳しい情報を確認します。
BadSecurityChecksFailed.–> Check Trustlist & Certificate on Server、つまり証明書に問題がありますね。
Add Certification in TwinCAT3 Side
以下のPathにあるサーバーの自身証明書をCopyします。
C:\ProgramData\UnifiedAutomation\UaCPPServer\pkiserver\own\certs\uaservercpp.der |
そしてTwinCATの以下のDirectoryに貼り付けます。
C:\TwinCAT\Functions\TF6100-OPC-UA\Win32\Client\PKI\CA\trusted\certs\uaservercpp.der |
つまり、OPCUA CPP SERVERの自身証明書をTwinCAT3のtrusted List(信頼リスト)に移動することです。それより、TwinCAT3 ClientはOPCUA CCP Serverを信頼します。
Connect to UAServer
もう一度接続します。
今度また同じエラーが出てきますね。OKで警告を閉じます。
Add TwinCAT3 Certification into rejected folder
UaCPPServer/pkiserver/rejectedのFolderに一つの証明書が入っています。基本的には、Serverは初めて接続するClientのCertification に対して拒否します。そして拒否されたClientのCertificationはこのDirectoryに格納されます。
つまりいまTwinCAT3 OPC-UA CPP ClientがOPC-UA CPP Serverにアクセスしようと思ってます。でもOPC-UA CPP Server trusted folderにTwinCAT3 ClientのCertificationがないので、接続を拒否し、TwinCAT3のCertification をrejected/certs/に転送します。
そのRejectedされたCertification を/UaCPPServer/pkiserver/trusted/certsに転送します。
つまりいまrejected/certs/に格納されたTwinCAT3 Certificationをtrusted/certs/に移動し、TwinCAT3の接続は信頼できるものだと認定します。
もう一度Add Nodesします。
Select Node画面が表示されました!中にいくつのNodeを選択し、Okします。
Client#1に複数のNodeが追加されました。
Add Certification inTwinCAT3 Side
最後はTwinCAT3側にあるC:\TwinCAT\Functions\TF6100-OPC-UA\Win32\Client\PKI\CA\rejectedのServer証明書を
C:\TwinCAT\Functions\TF6100-OPC-UA\Win32\Client\PKI\CA\trusted\certsに転送します。
そうすればServerとClientの信頼接続関係ができます。
Download
Activate ConfigurationでHardware ConfigurationをDownloadします。
OKします。
TwinCAT3 RuntimeをRunに切り替えます。
歯車ICONが緑になればOKです。
Test It!
Nodeを確認したところ、変換し続ければもう接続OKです。
Test3-Play with Keyence KV8000
OPC-UA CPP Serverとセキュリティ接続OKになったら、いよいよKeyence KV8000のOPCUA Serverとつながってみましょう。
Keyence KV8000 Side
Security Connection Settings
Unit Editorを開いてOPC UA Server settings>OPC UA server settingsの…ボタンをクリックします。
Security Policy NoneとAutomatic trust of client certificates をDisableします。
Program
先程追加した変数を使って簡単なプログラムを作成します。Cycleことに変化し続ければ、接続状態もすぐ確認できます。
Check It
UaExpertからアクセスしてみると、KV OPC UA ServerにもNoneのセキュリティ ポリシーが選択できなくなります。
Certification Setting
KV StuidoをMonitor Modeに切り替え、Unit configuration>[0] KV-8000で右クリック>OPC UA server monitorをクリックします。
その画面からKV 8000の証明書管理できます。
まずUpdateします。
もしくは現在の証明書を破棄し新しい証明書を生成します。
Client Side
Certificate のDrop ListからClientを選択します。
そちらではいま登録された証明書を一覧できます。
TwinCAT3 SIde
Endpoint
先と同じ操作でもう1つのOPC UA Client IOを追加し、EndpointのSettings Tabを開きます。
Select Endpointボタンをクリックします。
Endpointsをopc.tcp://yourname[SignAndEncypt,Basic256Sha256Binary]をCheck入れ、OKします。
Connect to KV8000 OPC UA Server
Add NodesボタンでKeyence KV8000のOPC UA Serverをアクセスします。
証明書が信頼されてれないとTwinCAT3から警告が出てきます。
TrustボタンでServerの証明書を信頼します。
またエラーが出てきました。
エラーも同じですね。Certificationに問題ある、と。
C:\TwinCAT\Functions\TF6100-OPC-UA\Win32\Client\PKI\CA\trusted\certsにkeyenceのServer Certificationがもう格納されますので、つまりTwinCAT3側はOKです。
つまりKV-8000からServer CertificationをTwinCAT3に転送し、そしてTwinCAT3がKeyence KV8000の証明書を信頼します。
KV Stuidoに戻り、OPC UA server monitorを起動します。CertificateをClientに選択し、RejectedのTabをみたらBeckhoff TwinCAT3の証明書が格納されています。それは最初のセキュリティ設定のときCertificationの自動認証機能をDisbaleしたからです。
Add to certification in Server
そのCertificationを選び>Trustします。
それでOKです。
Beckhoff TwinCAT3のCertificationがTrustedになりました。
Try Again
Add Nodesでもう一度試してみます。
接続できるようになりました!
いくつかのNodeを選び、Enable WriteのCheckbox入れ、OKします。
Client#1に複数のNodeが追加されました。
Download
Activate ConfigurationでHardware ConfigurationをDownloadします。
OKします。
TwinCAT RuntimeをRun Modeに変えます。
歯車ICONが緑に変わったらOkです。
Test it!
Read
KV-8000のNode現在値を確認してみます。
InputにKV8000 OPC-UA ServerのNode 現在値がきました。
そしてKeyence側に”Ouput”だけ設定した変数は、TwinCATにはOutputがなくなります。
それはOutputは読み専用だからです。
Write
次はKV-8000のOPC UA server のNodeの現在値を変更してみます。そのためにClient#1>Outputs>Write Enableをクリックします。
Trueに変更します。
次はValue[2]をクリックします。
適当な与えをかえます。
最後はKV Stuidoから確認してみます。Monitor/Simulator>Registration monitor windowをクリックします。
Devicesにその配列変数を入れれば、現在値が書き込まれたことがわかります。