今回の記事ではAXCF3152のOPC UA Client機能を使用し、SiemensとBeckhoff TF6100のOPC UA Serverと接続する手順を説明します。
さ、始めましょう!
Reference Link
http://soup01.com/ja/category/protocol/opcua/
PLC NEXT with OPC UA Client
PLCnext Technology のControllerにはOPC UA Clientが組み込まれています。OPC UAの視点では、OPC UA Clientがdata consumer であり、OPC UAサーバーが data providerです。
ClientがServerにデータの要求を送信し、Serverが該当するデータを返します。これにより、ClientはServerが提供するデータに直接アクセスできるようになります。
PLCnext EngineeringではOPC UA ClientとServerの設定もPLANTの”OPC UA”から設定できます。プロジェクトに設定したOPC UAデータはPLCnext Engineerがプロジェクトと共にコントローラに書き込み、OPC UA Client機能は、コントローラの起動時にプロジェクトをロードし、自動的に実行します。
Server-client communication
Server-client communicationは、 OPC Unified Architecture protocolに準拠し設計されています。OPC UAは以前のOPC 通信と比べると、さらに新しいデータモデルを提供しています(例えば構造化されたMachine Data)。
さらに、OPC UA 標準に加えてたPLCopen Standardでは、OPC UAサーバがIEC 61131準拠コントローラのデータを環境に提供するための情報モデルをできるようになります。
Data exchange
OPC UA ClientとServerのデータ交換は、変数を介して実現されます。ローカル変数(PLCnext EngineerプロジェクトでLocal変数)をMappingしOPC UA ServerにSubscribe(読み取り)もしくはWrite(書き込み)することができます。
OPC UA Clientは、Serverとの接続を確立した後、ServerのAddress spaceをScanし、利用可能な変数を検索します。Address spaceには、ServerがOPC UA Clientに公開する情報のみが含まれて、変数をNodeとして表されます。そして各NodeIdに以下の3つの要素で構成されています:
- Namespace
- Nodeが割り当てられている URI (Uniform Resource Identifier) を含む名前空間になります。
- 名前空間は、異なる命名デバイスで一意の識別子が使用されることを保証します。
- Type – NodeId の識別子のそのタイプ。タイプは以下の文字のいずれかになります。
- i:Numeric (integer) value
- Example: I=10
- s:String value
- Example: s=test
- g:GUID (Global Unique IDentifier)
- Example: g=1D73013A-5FAF-45D5-8F2E-DE97C4869873
- b:Base64 encoded value
- Example: b=dGhvbWFz
- i:Numeric (integer) value
- Value: OPC UA ServerのNamesapceにあるNodeの識別子値
Security settings
PLCNEXT Engineeringの’Security’ では、OPC UA Serverに接続する際にOPC UA Client側で実行されるSecurity Checkを変更することができます。
Application Authentication
その設定が無効の場合、OPC UAサーバーへの接続時にサーバー証明書検証の失敗を無視します。
Application Uri Check
その設定を無効にすると、無効なサーバー証明書申請URIは無視され、URI Checkを無効にすると、サーバーのURIがクライアントの証明書に入力されたURIと一致しなくても、OPC UAサーバーへの接続を確立できます。
Certificate Hostname Check
その設定を無効にすると、無効なサーバー証明書のホスト名は無視されます。Hostname Checkを無効にすると、サーバーのホスト名がクライアントの証明書に入力されたホスト名と一致しない場合でも、OPC UAサーバーへの接続を確立できます。
Certificate Time Check
その設定を無効にすると、無効な証明書時刻は無視されます。Certificate Time Checkを無効にすると、OPC UAサーバーの証明書が期限切れまたは無効であっても、OPC UAサーバーとの接続を確立することができます。
Certificate Issuer Time Check
その設定を無効にすると、無効な証明書発行者の時刻は無視される。Certificate Issuer Time Checkを無効にすると、OPC UAサーバーの発行者証明書の有効期限が切れていたり、無効であったりしても、OPC UAサーバーとの接続を確立することができます。
Password Encryption Check
その設定を無効にすると、ServerNonceとPasswordEncryptionModeのチェックは無視される。
Implementation
Siemens Side
IP
TIAを起動し、新規プロジェクトを作成します。
Ethernet addressessの項目でCPUのIPを設定しましょう。
OPC UA Server
次はOPC UA Server機能を有効にします。OPC UA>General>Serverのところに
Activate OPC UA ServerのCheckbox入れ、Portを設定します。
License
最後はRuntimeライセンスを設定します。Runtime License>OPC UAでType of purchased licenseを選択しSIMATIC OPC UAS7-1200 Basicに設定します。
Add DB
次はData Blockを追加し、Accessible From HMI/OPC/WebserverのCheckBoxを入れましょう。
Add Server Interface
OPC UA Server Interfaceを追加します。OPC UA Communication>Server interface>Add New server inteterfaeをクリックします。
Server interfaceの名前を入力し、OKします。
Done!Server intetfaceが追加されました。
必要な変数をInterfaceにDropします。
Program
次は簡単なプログラムを組んで、変数を常に変換させます。
Download
Download to deviceでプロジェクトをCPUにDownloadします。
Loadで進みます。
Done!
Beckhoff Side
次はBeckhoff側を構築します。
Activate OPC UA Configurator
まずTwinCATのOPC UA ConfiguratorをToolbar上で表示させるため、View>Toolbars>TwinCAT OPC UA Configuratorをクリックします。
Add OPC UA Project
OPC UA プロジェクトをTwinCATプロジェクトに追加するためSolution>右クリック>Add> New Itemします。
TwinCAT OPC UA Server Projectを開き>Addで追加します。
Done!
Add Device Type
OPC UA のData Access Deviceを追加するため、Data Access>右クリック>Add Device typeします。
Device Typeの作成画面が表示され、ADS Port を851に設定しCreateで新しいDeviceを作成します。
Done!
UA Endpoints
UA Endpoints Tabに該当するOPC UA Serverの使用Port・Securityなどの設定を行うことができます。
Factory Reset
OPC UA Serverを設定する前に一回ServerをFactory Resetします。RecoveryのTabを開き>Factory resetで初期設定に戻ります。
New OPC-UA Server Config
次は新しいOPC-UA Server Configurationを生成します。
OPC UA Configuratorにある”New OPC-UA Server Config”で新しいOPC-UA Server設定を追加します。
Server Configuration画面が表示されます。
Add Serverで新しいServerを追加します。
Endpoint Configuration画面が表示されます。
+ボタンで新しいUaServer URLを追加します。
EndpointでアクセスできるOPC UA ServerのEnd-pointを設定します。
Noneもしくは他のSecurity policy を選びましょう。
最後はOkで設定を適用します。
これでOkです。
Connect to OPC UA Server
OPC UA Configuratorの”Edit Serverlist”のDrop-listから先程追加したEndpointを選択します。
ConnectでTwinCATとOPC UA Serverを接続しましょう。
OPC UA Serverを初めて設定するときは、Server Initialzationの画面が表示されます。
UsernameとPasswordをPCのUsernameとPasswordに設定しましょう。
Firewall Configuration
場合によっては、PCのFirewallにOPC UA のPort接続を許可する設定が必要です。
Rule TypeはPortを選択し、Next>で進みます。
RulesはTCPに設定し、Port番号を4840にします。
Allow the connectionを選択し、Next>ですすみます。
Next>で進みます。
Nameはわかりやすい名前に設定しましょう。
Done!
Add User
OPC UA ServerにアクセスするためにUserを追加するため、Security Access>右クリック>Add Userします。
Userの作成画面が表示され、UsernameとPasswordを設定しましょう。
Done!
Program
Configuration
プロジェクト>PLC>PLC ProjectにSettings>TMC FileのCheckboxを入れます。
DUT
OPC UA Serverに公開するNodeを構造体として定義します。
TYPE DUT_Nodes : STRUCT inBool,Outbool :BOOL; inint,Outint :BOOL; inReal,OutReal :REAL; inLreal,OutLReal :LREAL; inArraysBool,OutArraysBool :ARRAY[0..31]OF BOOL; inArrayInt,OutArrayInt :ARRAY[0..31]OF INT; inArrayReal,OutArrayReal :ARRAY[0..31]OF REAL; END_STRUCT END_TYPE |
GVL
OPC UA Server用のGlobal variable Listを作成します。
注意するのは{attribute ‘OPC.UA.DA’ := ‘1’}をわすれずに。
{attribute ‘qualified_only’} VAR_GLOBAL {attribute ‘OPC.UA.DA’ := ‘1’} bbool_out:BOOL; {attribute ‘OPC.UA.DA’ := ‘1’} MyData :DUT_Nodes; END_VAR |
Main
簡単な検証プログラムを作成します。
GVL_OPCUA.bbool_out:=TRUE; GVL_OPCUA.MyData.OutReal:=GVL_OPCUA.MyData.OutReal-0.01; IF GVL_OPCUA.MyData.OutReal <= -10000.0 THEN GVL_OPCUA.MyData.OutReal:=0.0; END_IF |
PLCNEXT Side
Enable the OPC-UA Client Function
AXCF3152のOPC UA Client機能を有効にするため、CPUのWeb serverにアクセスします。
Configuration>System Servicesを開きます。
ConfigurationにあるOPCUA ClientにあるActivationのCheckboxを入れ、Apply and restartで設定を適用します。
Diagnosics
Web Serverの診断機能を使用すれば、OPC UA の接続が問題が発生すればTroubleShootingしやすくなります。
Sender FieldからMessageのカタログをFilterできます。
今回はOPC UA Clientにします。
Done!いまOPC UA ClientのMessageのみ表示されます。
Import the certification
BeckoffのOPC UA Server証明書(.der)をPLCNEXT AXCF3152にImportするために.crtに変換します。
Install openssl Light
下記のLinkからWin64 OpenSSL LightのSetup FileをDownloadします。
Setup Fileを起動し、ライセンスに同意しNext>します。
インストール先を設定し、Next>します。
Next>で進みます。
Next>します。
インストール開始します。
Done!
Edit System variable
次はWindowsにOpenssl環境変数を追加します。
こちらはOpenssl LightのインストールLocationです。
Control Panel>System and Security>SystemからAdvanced system settingsをクリックします。
AdvancedのTab>Environment Variablesを設定します。
Pathを選び>Newで新しいPathを追加します。
Variable nameはOpensslでVariable Valueは下記のPathを入力します。
C:\Program Files\OpenSSL-Win64\bin |
Lanuch openssl
TerminalでOpennsslのVersionを確認します。
C:\Users\root>openssl version OpenSSL 3.1.2 1 Aug 2023 (Library: OpenSSL 3.1.2 1 Aug 2023) |
Change the Format
次はBeckhoffのOPC UA Serverの証明書をOpensslツールを使用し.derから.pemに変換します。
C:\TwinCAT\Functions\TF6100-OPC-UA\Win32\Server\PKI\CA\trusted\certs |
次は以下のコマンドを使えば変換できます。
C:\Users\root\Desktop>openssl x509 -inform der –in Beckhoff_OpcUaServer.der –out beckhoff-opcua-cert.pem |
Upload to AXCF3152
次はBeckhoff TwinCAT のOPC UA ServerwAXCF3152にUploadするため、Security>Authenticationを開きます。
Trust Storesをクリックし、OPC UA Clientの証明書管理で+ボタンをクリックします。
CertificateのUpload画面が表示され、Browseボタンをクリックし証明書をUploadしましょう。
Done!証明書をUploadしました。
Detailsボタンで該当する証明書の詳細を確認できます。
Certificationの発行者・有効期限などの情報を確認できます。
Configure the Time
Certificationを使用するために、AXCF3152の時間を現在の時間に合わせる必要があります。Configuration>Data and Timeをクリックします。
Ntp Serverを設定しましょう。
Define Variables
次はAXCF3152がOPC UA ServerにアクセスしたNodeとCPU内の変数を定義し、なおかつOPCのCheckboxを入れます。
Configure the OPC UA
今度はOPC UA 設定を変更するためにProject>OPC UAを開きます。
OPC UA Server
まずServer SettingsのTabを開きましょう。
Infomration modelの設定はMarkedと設定します。
OPC UA Client
PLCNEXTのOPC UA Client機能を設定します。
場合によりOverride Certificate Store Nameの機能を有効にしましょう。
Session Securityも場合によってOverride Securityの機能を有効にしてください。
自分はBeckhoff TwinCAT のOPC UA Serverと接続する場合、Application URI CheckとCertificate Host Checkの検知だけ無効にします。
Configure Connection
OPC UA Serverの接続を構築するため、Client ConnectionsのTabを開きます。
Siemens
まずAXCF3152とSiemens OPC UA Serverの接続設定を行います。Nameは該当するConnectionsの接続名です。
URLはSiemens OPC UA ServerのURLで、opc:tcp://IP:portになります。
TwinCAT
次はTwinCATのOPC UA Serverです。Connection名とURLを設定します。
TwinCATはUser & Eync設定なので、Username Fieldは先程TwinCATで作成したUser 名を入力します。
PasswordはTwinCATで作成したUser1のPasswordを入力します。
Security policy uriはBasic 256 SHA 256を設定します。
Configurationの下に2つのOPC UA Server Connectionが追加されました。
Variable Group-Subscribe
次は Subscribe する変数を設定します。SubscribeはPLCNEXTがOPC UA ServerのNodeを読み込むことになります。下図はUaExpertがTwinCATのOPC UA ServerにアクセスするときのScreenShotです。
GVL_OPCUA.MyData.OutRealのNode Attributeを調べると、該当するNodeの情報を確認でき、それらの情報をPLCNEXT Engineeringに合わせて設定する必要があります。
下図のように、Remote variable IdentifierはNode Idの”s=”部分に該当し、Remote variable namespaceはNode Idの”ns=4”部分に相当します。
”ns=4”の4はAddress spaceのDrop listの4:urn:xxxxxxになります。
最後はLocal VariableのFieldを先程定義した変数と紐づけましょう。
Variable Group-Write
WriteはPLCNEXTがOPC UA ServerのNodeを新しい値に書き込むことになります。先程と同じく以下のFieldを設定しましょう。
- Local Variables:PLCNEXT 内部に紐つける変数
- Remote Variable Identifier:Node Idの”s=”部分
- Remote variable Namespace:Node Idの”n=”部分
Cycle Time
Cycle Timeは実際のアプリケーションに合わせて設定しましょう。
Program
最後は簡単な検証プログラムを作成します。
i16_w_Int:=i16_w_Int+1; r32_w_real:=r32_w_real+0.01; if r32_w_real>=10000.0 THEN r32_r_Real:=0.0; end_if; |
Result
MainプログラムにデータをSiemensとTwinCATのOPC UA ServerのNodeを読み書きできます。
AXCF3152 Web Serverの診断画面をOPC UA ClientにFilterにMonitoring connection; ConnectionId=”1″とMonitoring connection; ConnectionId=”2″のメッセージがありました。
下図のようにConnection1は一番目のSiemens OPC UA Serverで、Connection2は2番目はBeckhoff TwinCAT3 のOPC UA Serverになります。