こちらの記事ではCodesysとCODESYS SAFETY FOR ETHERCAT SAFETY MODULEを利用し、BeckchoffのEL6910のSafety ロジックをCodesysから構築します。
さ、はじめよう!
Reference Video
Codesys.EL6910 TwinSAFEを使ってみよう
Beckhoff.Let’s play with TwinSAFE_Part1.JP
Reference Link
CODESYS extension for EtherCAT?
BeckhoffのTwinSAFE logic modules EL6900、EL6910、EK1960を使用したEtherCAT based safety solutions向けのCODESYS拡張機能を、CODESYS EtherCATマスタースタックを搭載したCODESYSコントローラの下で使用できます。それによって、独自のSIL3セーフティコントローラを開発したくないユーザーや制御メーカーに、機械やプラントの安全な自動化のための柔軟で経済的なソリューションを提供します。
安全I/Oと安全モジュールは標準I/Oとドライブと共にEtherCATフィールドバス上で動作します。CODESYSセーフティfor EtherCATセーフティモジュールはCODESYSを拡張し、機能安全アプリケーションの開発に必要なすべての機能を含みます:
- TÜV認証製品により、EtherCATコントローラを備えたCODESYSプロジェクトをCODESYSで拡張することができます。
- BeckhoffのEtherCATネットワーク上のTÜV認証済みセーフティロジックモジュール、デジタルFSoE I/Oモジュール、アナログTSC入力モジュールを使用したセーフティ機能開発のためのEtherCATマスタスタックです。
- 安全専用のエディタとコンフィギュレータを備えた拡張機能は、CODESYS開発システムとCODESYS EtherCATコンフィギュレータにシームレスに統合されています。
- システム統合や適応にかかるコストは削減でき、受け入れにかかる費用も少なく済み、シンプルな安全アプリケーションをコスト効率よくスケーラブルに実現できます。
- 安全レベルはDIN EN ISO 13849に準拠したPL-eまで
- IEC 62061/61508に準拠したSIL3まで(入出力装置およびプログラムされたロジックによる)
- ISO 13849およびIEC 62061に準拠した限定可変プログラミング(LVL)
- Beckhoffのロジックモジュール EL6900またはEL6910はEtherCAT Camp(TwinSAFE-Logic)として、またEK1960をEtherCATカプラ(TwinSAFE-Compact Controller)として使用できます。
- デジタルSIL3 I/Oモジュール: FSoEモジュール (Failsafe over EtherCAT) は各社のESI FileからCodesys IDEにインストールし、使用します。
- アナログSIL2入力モジュール
- EL3124-0090、EL3174-0090 (differential)
- EL3214-0090 (for resistance sensors), EL3314-0090 (for thermal element)
- EL3356-0090 (for weight cell/resistance bridge)
- Encoders/givers
- EL5001-0090 (SSI)
- EL5021-0090(Sin/Cos)
- EL5032-0090 (EnDat2.2)
- EL5101-0090 (incremental differential RS422)
- EL5151-0090(incremental)
- 標準コントローラの操作機能とフィールドバスコンフィギュレーションは、セーフティロジックモジュールの安全機能に影響を与えることなく変更できます。
- 標準信号をEtherCATコントローラと交換できます。
- EtherCATネットワーク内で複数のセーフティロジックモジュールを使用可能。
- Groups: FBD 言語の IEC 61131-3 POU で、安全アプリケーションを関連ロジックを持つ I/O モジュールのGroupsに分割することにより、1 つの安全ロジックモジュールで複数の安全エリアの監視が可能で、また、各グループは、標準アプリケーションによって個別に開始、停止、診断、エラー確認が行われます。
- Optional devices: 機械内に安全エリアがない場合、EL6910とEK1960は、アプリケーションを変更することなく、オンラインコマンドで対応するグループを非アクティブにすることができます(恒久的、一時的、パッシベート)。
Configuration and programming directly in CODESYS
Devices
デバイス セーフティロジックモジュールとセーフティI/Oモジュール (FSoE と TSC) がEtherCATデバイスツリーに追加できます。
Exchange
安全性と標準の間で交換される変数は、特別なリスト・オブジェクトで定義できます。
Groups
各安全 POU と使用される I/O モジュールはグループを表し、グループ・ステータス・フラグは交換された変数にマッピング可能です; defining the allowed group deactivation methods(EL6910/EK1960 only)
Safe versioning
アプリケーションエディタに表示される、安全アプリケーションと各 POU およびデバイスのバージョン識別と CRCで現在の安全プロジェクトVersionを確認できます。
Safety Configurator for I/O Modules
Codesys Safety IDEは各FSoE Terminalに以下のパラメータを設定できます。
- FSoE parameters
- Application-related module parameters
- Symbolic mapping of I/O points
Safety FBD Editor for Group Logic
Codesysは制限付きIEC 61131-3 ファンクションブロック図 (FBD) 事前に定義された認証済み安全関連ファンクションブロック、物理的入出力、およびEtherCATコントローラと交換される変数の相互接続が可能になります。
Online
CODESYS IDEには以下のOnline機能に対応します。
- 安全FBDエディタでのオンラインモニタリング機能を利用し、CODESYSプロジェクトナビゲーションでのグループの状態を確認。
- セーフティロジックモジュールからの診断メッセージ
- On-Board User管理の設定
- Safety Groupの実行状況と停止
- モジュール交換対応
- 標準コントローラから安全アプリケーションをDownload
Predefined Safety Function Blocks
CODESYSのライブラリには、FBDエディタで使用するためにセーフティロジックモジュールにあらかじめ定義され、工場安全の認証済みセーフティファンクションブロックが記述されています。
FB_ESTOP
FB_EStopファンクションブロックを使用して、最大8つの非常停止入力(bEStopIn1~bEStopIn8)を持つ非常停止回路を実装できます。コンテキストメニューの “Negation “コマンドを使用して、8つの入力をそれぞれネゲートすることができます。
入力が安全状態を要求すると、最初の出力(EStopOut)は直ちに安全状態(“0”)に入り、2番目の出力(EStopDelOut)は設定可能な時間遅延後に安全状態に入る。
FB出力を複数の出力にリンクできるため、1つのFB_EStopで複数の即時スイッチオフ出力(bEStopOut)または遅延スイッチオフ出力(bEStopDelOut)を実装できます。出力の安全状態を終了するには、Restart入力で0->1->0の信号シーケンスを認識する必要があります。
VAR_INPUT
Variable | TYPE | Descriptions |
bRestart | SAFEBOOL | 開始時(関連するPOU(TwinSAFEグループ)が開始された時)または再起動時(入力が安全状態を要求した場合)、出力の安全状態を解除する前に、Restart入力で信号シーケンス0->1->0を認識する必要があります。 |
bEStopIn1 | SAFEBOOL | 1 番目の入力チャンネル:入力がノーマルクローズ接点として動作するか、またはノーマルオープン接点(メイク接点 – ロジック 1 で安全状態が要求される)として動作するかを指定できます。 |
bEStopIn2 | SAFEBOOL | 2番目の入力チャンネル信号 |
tDiscTime12 | SAFETIME | 入力グループ1(In1+In2)の不一致時間 |
bEStopIn3 | SAFEBOOL | 3番目の入力チャンネル信号 |
bEStopIn4 | SAFEBOOL | 4番目の入力チャンネル信号 |
tDiscTime34 | SAFETIME | 入力グループ2(In3+In4)の不一致時間 |
bEStopIn5 | SAFEBOOL | 5番目の入力チャンネル信号 |
bEStopIn6 | SAFEBOOL | 6番目の入力チャンネル信号 |
tDiscTime56 | SAFETIME | 入力グループ3(In5+In6)の不一致時間 |
bEStopIn7 | SAFEBOOL | 7番目の入力チャンネル信号 |
bEStopIn8 | SAFEBOOL | 8番目の入力チャンネル信号 |
tDiscTime78 | SAFETIME | 入力グループ4(In7+In8)の不一致時間 |
bEDM1 | BOOL | bEDM1 は遅延なし出力チャンネル (bEStopOut) のフィードバックループです。この入力がアクティブとしてパラメータ化されている場合、bEDM1が信号 “1 “を供給する場合にのみ、再スタート時に出力の安全状態が終了します。 |
tEDM1ResetTime | SAFETIME | t#0msに等しくない場合は、出力bEStopOutをオンにした後にタイマーが開始される。この時間内に bEDM1 入力が FALSE にならなかった場合、ファンクション・ブロック・エラーが設定され、出力がオフになる。この入力はEL6900ではサポートされていません。 |
bEDM2 | BOOL | bEM1と同じく |
tEDM2ResetTime | SAFETIME | tEDM1ResetTimeと同じく |
VAR_OUTPUT
Variable | TYPE | Descriptions |
bEStopDelOut | BOOLSAFE | 第1出力チャンネル。安全状態はロジック0に対応する。 |
bEStopDelOut | BOOLSAFE | 第 2 出力チャンネル;安全状態は論理 0 に対応する。安全状態はパラメータ化された遅延時間 tEStopDelOutDelay に従って遅延して出力される。 |
bError | BOOLSAFE | FALSE: エラーが検出されなかった。 |
Download
下記のLinkからCODESYS Safety for EtherCAT Safety Module SLのAdd-onをDownloadしてください。
https://store.codesys.com/en/codesys-safety-for-ethercat-safety-module-for-el6900-sl.html
Install Packages
Add-onsがインストールするCODESYS を選択し、Continueで進みます。
ライセンスに同意し、Continueで進みます。
しばらくまちます…
Done!
Implementation
Codesys Side
New Project
File>New Projectで新規Codesysプロジェクトを作成します。
Standard Projectを選び>プロジェクト名を入力し、OKで進みます。
次はCodesys Runtimeを実行するデバイスを設定します。
今回使用するのはEXOR社のex707Mなので、Deviceからex700Mを選びます。
Okでプロジェクトを作成しましょう。
Done!新規プロジェクトが作成されました。
Scan For Network
次はCodesys Runtimeと接続するため、Deviceをダブルクリックします。
Scan NetworkをクリックしEXORのCodesys Runtimeを検索します。
Done!
Configure EtherCAT
EtherCAT Masterを追加するため、Deviceを右クリック>Add Devicesをクリックします。
Fieldbus>EtherCAT>Master>EtherCAT Masterを選び>Add DevicesでEtherCAT Masterを追加しましょう。
Done!EtherCAT Masterが追加されました。
Install ESI File
EtherCAT Slaveを構築するために、Codesys IDEにESI Fileをインストールします。
Tools>Device Repositoryをクリックします。
Installボタンをクリックし、Beckhoff HPからDownloadしたESI Fileをインストールしましょう。
Configure Network Adapter
次はEtherCAT Masterとして使用するEtherent Adapterを設定するため、”Select”ボタンをクリックします。
アプリケーションに合わせて設定しましょう。
Scan Network
Slaveを1つずつ追加してもよいですが、ESI Fileが揃った場合は直接ネットワーク上にあるEtherCAT slaveを検索するのも可能です。
EtherCAT Master>右クリック>Scan for Deviceをクリックします。
CodesysのScan Network画面が表示されるので、少し待ってください。
Done!EtherCAT ネットワークに存在するSlaveがすべて表示され、”Copy All Devices to Project”をクリックしSlave情報をCodesysプロジェクトに複製しましょう。
TwinSAFE with Safety plug-ins
EtherCATセーフティモジュールEL6900とEL6910はEtherCATバスカプラ (例: EK1100) の下のデバイスツリーに追加さ、またEtherCATセーフティモジュールEK1960をEtherCATマスタ配下のデバイスツリーに追加になります。
そして、EtherCAT安全モジュールを挿入すると、論理ノードSafety Logic、安全アプリケーションオブジェクトSafetyApp、ライブラリマネージャ、およびノード論理I/Oが自動的に追加されます。
EtherCATセーフティモジュールはコンテキストメニューのUpdate Device…コマンドを使用してデバイス記述を新しいバージョンに更新できます。これによりライブラリも新しいバージョンに更新されます。
Safety Configuration
今度は各FSOE Slaveの設定を行います。最低限下記の3つのパラメータを設定してください。
- FSoE address: モジュールの固有EtherCATアドレス。FSoE接続はそれぞれのケースで安全なフィールドバスデバイス(またはその論理I/O)に対応します。
- WatchdogTime: この時間内にモジュールが応答しなければ、エラーが出力される。
- Connection ID: EtherCATネットワーク全体で一意の接続番号
EL1904 Slot1
最初は1つ目のEL1904を設定するため、Logical I/OS>FSOEをクリックします。
こちらはFSOE Slaveのパラメータ画面になります。
FSoE Address
EL1904のFSoEアドレスはモジュール本体にあるDIPスイッチから設定できます・
DIPスイッチの設定に合わせて入力してください。
Connection ID
次はFSOEネットワークの接続番号を設定します。
こちらの番号はかぶらないように設定してください。今回はFSOEアドレスと同じように合わせます。
Mapping
こちらのMapping画面で安全モジュールのProcess データを定義します。
下図のようにVariable Fieldで変数を入れればOkです。
Done!
EL1904 Slot2
次は2つ目のEL1904を設定するため、Logical I/OS>FSOE_1をクリックします。
FSoE Address/Connection ID
FSoEアドレスとConnection IDを正しく設定してください。
Mapping
そしてアプリケーションに合わせて必要な変数を定義しましょう。
EL2904 Slot3
最後は3つ目のEL2904を設定するため、Logical I/OS>FSOE_2をクリックします
FSoE Address/Connection ID
FSoEアドレスとConnection IDを正しく設定してください。
Mapping
そしてアプリケーションに合わせて必要な変数を定義しましょう。
Local I/O Configuration
安全Configurationの設定を完了したら、今度はLocal I/O Configurationを行います。まずはEtherCATセーフティモジュールの下にハードウェアモジュールを挿入することはできません。セーフティモジュールや標準モジュールはカプラ (EK1100 など) の下のデバイスツリーに挿入し、EtherCATセーフティモジュールへの接続やデータ交換はいわゆるlogical I/Osを介して行われます。これらのオブジェクトはlogical I/Osノードの下に挿入されます。
Types of logical I/Os
CODESYSは、2つの異なる種類のlogical I/Osを区別します。
logical I/Os of safe field devices
安全フィールドデバイスがデバイスツリーに挿入され、EtherCAT Safetyモジュールが1つしか存在しない場合、一致するlogical I/Oが自動的に挿入されます (I/Oモジュールと同じ名前)。
複数のEtherCAT Safetyモジュールを使用する場合は、対応する論理I/Oを手動で追加する必要があります。その後、この論理I/Oは対応するフィールドデバイスのI/Oマッピングダイアログで選択する必要があります。論理I/Oにはモジュールの全ての安全パラメータが含まれ、全ての安全関連情報を安全アプリケーションで確認することができます。
logical I/Os of global variables
これらのオブジェクトを介してEtherCAT Safetyモジュールと標準コントローラ間で追加データを交換することができます。このためにグローバル変数 (論理交換用GVL) を標準プロジェクトで定義し、EtherCAT Safety Module (論理交換デバイス) 上の対応するlogical I/Oと接続します.
(see Logical I/O for Exchange of Data with the Standard Controllers)
安全アプリケーションの論理 I/O は、物理デバイスまたは論理交換用 GVL ( 標準側の特別オブジェクト ) でデフォルトアプリケーション にリンクされています。これは、入出力信号が安全アプリケーションで処理される各物理デバイスに対して、安全アプリケーションに正確に 1 つの論理 I/O が存在する ことを意味します。同様に、標準コントローラの論理交換のために、各 GVL に対して正確に 1 つの論理 I/O が安全アプリケーションの下に存在します。
Advantages of the logical I/Os
論理I/Oのコンセプトは “CODESYS Safety for EtherCAT Safety Module “セーフティアプリケーションの開発と検証に以下の利点をもたらします:
- フィールドデバイスの安全パラメーター(PROFIsafe の F パラメータ)のパラメータ化は、安全アプリケーション の論理 I/O でのみ行われます。安全ユーザ管理が設定され ている場合、このパラメータ化は Safety ユーザグループのメンバーによってのみ行われます。
- 物理的なフィールドデバイスと論理交換用の GVL の割り付けを変更しても、 安全アプリケーションは変更されません。
- 既に検証され、承認された安全アプリケーションを元のプロジェ クトから切り離して、この新しい安全アプリケーションを再度検証す ることなく、別のプロジェクトに完全に統合することができます。
Add Logical Device
Logical Deviceを追加するため、Logical I/Os>Add Object>Logical Deviceをクリックします。
Logical Devicesの追加画面が表示されます。
8 Bits From Module to PLC
最初にEtherCAT Safety Moduleから標準PLCに送信するSlotを追加するため、”Exchange 8 bits from EtherCAT safety Module to PLC”を選び、AddでSlotを追加します。
Done!
Mapping
I/O Mapping画面を開き、先程FSoEと同じ操作で変数定義しましょう。
Done!
8 Bits From PLC to Module
今度は標準PLCからEtherCAT Safety Moduleに送信するSlotを追加するため、”Exchange 8 bits from PLC to EtherCAT safety Module”を選び、AddでSlotを追加します。
Done!
Mapping
I/O Mapping画面を開き、先程FSoEと同じ操作で変数定義しましょう。
Safety Program
ここまできて、いよいよ安全プログラムを追加します。
SafetyAppをクリック>Add Object>POU(EtherCAT Safety)をクリックします。
安全プログラムの名前を入れて、Addでプログラムを追加します。
Done!
こちらはCodesysの安全プログラムIDEです。
Properties
安全プログラムを作成する前、POUのPropertiesを設定していきます。
その設定はBeckhoff TwinCAT3でTwinSAFEを使用したときとまったく同じです。
Group IOsのTabを開きます。ここでいくつかのInputs/OutputsをMappingする必要があります。
Inputs
RUN/STOP
POUの処理を開始または停止できる変数(オプション)
ERR Ack
エラーをリセットする変数(必ず定義してください)
Outputs
FB Error
ファンクション・ブロックのエラーを表示する変数(オプション)。
COM Error
通信エラーが表示される変数。(オプション)
OUT Error
ローカル出力のエラーが表示される変数(KL6904のみ)(オプション)
Mapping
それらのGroup IOs変数をMappingするため、各変数の隣にある…ボタンをクリックしてください。
いつも通りのMapping画面が表示され、先程定義したLogical I/Osから選択してください。
Done!
下図のようないすべてのGroup IOsを定義しましょう。
Program
ここまで来て、ようやくプログラムを作る時間です。
Network1
Networkから安全Function Blockを追加するには、下図のように直接ToolboxにあるライブラリをNetworkにDropすればOkです。
Done!Netowork1にはSafetyのTON Timerが追加されました。
後はいつも通りに変数と紐付けていきましょう。
Network2
Network追加するにはIDEの余白のところに右クリック>Insert Networkで新しいネットワークを追加します。
Done!
今度は非常停止を制御するFunction Blockを追加するため、FB_ESTOPをDropしましょう。
Done!
すべての入力・出力パラメータを定義してください。
Non-Safety Program
最後は標準PLC側のプログラムを追加します。
Add Logical Exchange GVL
先程はLogical I/OsをEL6910で定義しましたが、それらのデータを標準PLCと交換するにはLogical Exchange GVLを使用する必要があります。
Add Object>Logical Exchange GVLでGVLを追加しましょう。
Logical Exchange GVLの名前を入力し、AddでGVLを追加します。
Done!
次はLogical Exchange MappingのDrop-listからESM_From_PLCを選択します。
Done!先程追加したLogical I/Os変数がCodesysすべて自動定義してくれました。
次はLogical Exchange MappingのDrop-listからESM_TOo_PLCを選択します。
Done!ほぼ手入力なく必要な変数がすべて自動定義されました。
Program
最後は簡単なプログラムを組みます。
PROGRAM PLC_PRG VAR Reset,EstopAck:BOOL; Run:BOOL; CommErr,FbErr,OutErr:BOOL; Estop,EstopDelay,EstopError:BOOL; myTimerInSafetyPrgOut:BOOL; END_VAR Logical_GVL.Ack:=Reset; Logical_GVL.AckEstopBlock:=EstopAck; Logical_GVL.Run:=Run; CommErr:=Logical_GVL_1.CommErr; FbErr:=Logical_GVL_1.FbErr; OutErr:=Logical_GVL_1.OutErr; Estop:=Logical_GVL_1.EStopOut; EstopDelay:=Logical_GVL_1.EStopDelayOut; EstopError:=Logical_GVL_1.EStopErrorOut; myTimerInSafetyPrgOut:=Logical_GVL_1.myTimerOut; |
Login
プロジェクトをEXOR パネルにDownloadするため、Loginボタンをクリックします。
Start
アプリケーションを実行するためPlayボタンをクリックします。
Done!EtherCATネットワークが無事に立ち上がり、すべてのNodeも認識できました。
Download TwinSAFE Project
最後はTwinSAFEのプロジェクトをEL6910にDownloadしましょう。
Safety ParametersのTabを開きます。
Download Projectをクリックします。
コマンドを実行する前に、ユーザー管理からユーザーを選択する必要がある。ユーザが選択されていない場合は “Administrator “が使用されます。この機能はオンラインモードでのみ使用できます。Project Downloadコマンドを実行した後、ユーザーはパスワードと端末のシリアル番号を入力しなければ、端末がデータレコードを受け付けない。
PasswordはDefaultでTwinSAFE、Serial Numberはモジュールから確認できます。
生成されたコードをチェックするために、アプリケーションのダウンロード後に自動的に再翻訳が行われます。そのために、翻訳されたコードは再度デコンパイルされ、ソースコード・レベルで比較される。この多様な方法によって、ダウンロードのたびにコンパイラの機能がチェックされます。それにより、ランダムエラーとシステマティックエラーの両方が判定されます。
比較結果(同じまたは異なる)がユーザーに表示されます。EL6900の場合は、比較されたPOUとネットワークの数が表示されます。EL6910とEK1960の場合は、比較したPOUとファンクション・ブロックの数が表示されます。.
再度PasswordとSerial Numberを入力します。
Done!!
Result
SafetyAppはRunになり、POUがStopに変わります。
最後はRun変数をTrueにすると、POUも実行するようになります。
次は非常停止Function Block FB_ESOTPをリセットするため、AckEstopBlockの立ち下げ信号が必要です。
Done!!
こちらの動画から操作の確認ができます。