この記事ではBeckhoffのTwinSAFEからSafety Programを作成するときに0からどう構築するかを説明するSeriesです。よろしくおねがいします。
Thanks!
この記事が出来上がるのはベッコフ日本法人ベッコフオートメーション株式会社さまとMana Design worksさまから機材を貸してくださったおかけです。誠にありがとうございます。
ベッコフ日本法人ベッコフオートメーション株式会社
IPC6920-005・EL6910・EL1904はベッコフ日本法人ベッコフオートメーション株式会社さまが貸してくださったものです。Beckhoff Automationは1980 年会社設立、PCベースの制御技術をベースにしたオープンオートメーションシステム導入の先頭に立つドイツ企業です。
ベッコフ日本法人ベッコフオートメーション株式会社は、2011年に横浜に本社、2017年に名古屋オフィスを設立しました。
こちらはベッコフ日本法人ベッコフオートメーション株式会社様のホームページです。
どうぞよろしくお願いします。
https://www.beckhoff.com/ja-jp/
TwinSAFE project design
TwinSAFE にはメーカに大きな幅のスケールから安全システムを構築することできます。
Stand-aloneから分散制御・Software Controlまで用意しています。ここからそれらのコンセントを簡単に紹介します。
TwinSAFE as a stand-alone controller
EK1960とEP1957を運用することでTwinSAFEからコンパクトな Safety アプリケーションを実装することができます。それらのデバイスはStand-alone モードでEtherCAT の通信がなく、Safe Local I/Oのみです。もちろんそのStand-aloneコンポーネントも100%に全体システムの1部として組み込むことができます。
TwinSAFE as a compact controller
TwinSAFE Lgoicを新しいTwinSAFEコンポーネントとTwinSAFE I/Oコンポーネント に入れ込むことにより、TwinSAFEが運用できる範囲は拡張されます。
EL1957(例えば、EtherCAT Box, 8-channel digital input + 4-channel digital output, 24 V DC, 0.5 A, M12, TwinSAFE, TwinSAFE Logic)のようなLocal Input/Outputあるコンポネントは他のTwinSAFE Logicコンポネントと通信することができます。(今回の例ではEL2911、EtherCAT Terminal, 4-channel digital input + 1-channel digital output, 24 V DC, 10 A, TwinSAFE, TwinSAFE Logic)
TwinSAFE as a central safety controller
TwinSAFEはアプリケーションの中にSafety Controllerの役割もできます。例えば今回紹介するEL6910ではモジュール自身がローカルInputとOutputもっていない代わりに他のSafetyコンポーネントと安全通信関係を持つことができ、User Safety Program内にそれらの信号を使用することができます。下図の構成のように標準のIOにTwinSAFE モジュールを挟むだけで他のSafetyコンポーネントと通信できます。
TwinSAFE as a distributed system
TwinSAFEは大きなアプリケーションになると分散システムの一部として構築もできます。
従来のシステムと比べるとすべてのNon-Safety 関係入出力もSafety Controllerに転送しなくてもよく、アプリケーションの機能により必要な安全コンポーネントにわけて別々のSafety Projectを作ります。例えば下図のようにAX8000のGroupに複数のモジュールがぶら下げており、複数のSafey関連機能があるとします。従来ならそれらのモジュール信号はすべてEL6190に取り込むのですが、TwinSAFEのおかけでEL6910とEL2911だけ通信し、EL2911が受け皿の役割でAX8000 Groupを制御できます。
Safety control with the standard Industrial PC
最後にTwinCATにも Safety PLC Softwareが提供されており、標準のIPCからSafetyアプリケーションを作成できます。従来のTwinSAFE ハードウェアと異なり、Safety Controllerは標準のC言語から派生したSafety C言語を使用します。つまり、より複雑な安全アプリケーションを構築できます。
WorkFlow
こちらはTwinSAFEのWorkflowです。
TwinCAT 3 and TwinCAT 2
Beckhoffでは、安全アプリケーションはTwinCAT2でもTwinCAT3でも実装可能です。TwinCAT2の場合はEL900、EL9630、KL6904のTwinCATSAFE Logicコンポーネントのみ使用可能で、TwinCAT3ではKL6904以外はすべて構築はできます。
TwinCAT 3 XCAD Interface
BeckoffはCAD ツールを提供し、直接Safetyアプリケーションを作成できます。最終的にそのアプリケーションを変換し、TwinCAT3 XCAD Interface経由でTwinCAT3 projectと一つのConfigurationになります。
Codesys
オプションですが、Beckhoff TwinSAFE LogicコンポーネントはCodesys Safetyからも構築できます。
TwinSAFE Loader
TwinSAFE Loader ToolはCommand lineツールで、TwinCAT IDE経由せずSafety プロジェクトをDownloadすることができます。そしてTwinSAFE Loaderはお客様から自分の使用方法によりカスタマイズできあmすが、リスクを考えた上で構築する必要があります。
TwinSAFE User
.TwinSAFE User ToolはTwinSAFE LogicコンポーネントのUser 管理する役割です。(例えばTwinCAT IDE経由せずコンポネントをアクセスするなど)
TwinSAFE reaction times
システムにあるTwinSAFE TerminalではSafety-over-EtherCAT Protocol使用しSafetyデータを交換します。これから実際にSensorからActuatorまでの流れを見ていきましょう。
Typical reaction time
RT-Sensor
RT-SensorはSensorの信号がInterfaceに流れるまでの時間です。Sensorの応答時間は基本的にSensorメーカーの規格にそっています。
RT-Input
RT-Inputは安全入力の応答時間で、例えばEL1904やEL1908。その応答時間はData-sheetから見つけ出すことができます。(例えばEL1904は4msです。)
RT-Communication
通信の応答時間はデータがSafety-over-EtherCAT Telegram経由のため、大体EtherCAT サイクルタイムの3倍くらいかかります。その時間はPLCやNCによります。
RT-Logic
Logic Terminalの応答時間というのはLogic Terminal自身のCycle Timeで、EL6900の場合は 標準で500 µs から10 msまでになります。実際のCycle timeはSafety Projectのサイズにもよります。
RT-Output
出力 Terminalの応答時間です。標準では2-3msくらいです。
RT-Actuator
Actuatorの応答時間は、メーカーにより変わります。
Formula
標準の合計応答時間は、
RT=RT-Sensor+RT-Input+3*RT-Communication+RT-Logic+RT+3*Communication+RT-Output+RT-Actuator |
になります。
Worst-case reaction time
Case1
Sesnorから信号をInput Terminalに転送し、そのInput信号からTwinCATのCommunication Interfaceに送信するときに通信エラーが発生したと考えましょう。
その通信エラーはWatchdog Timeの設定により検知します。
Case2
Inputの信号が無事にSensorからInput Temrinalに届き、そしてInput TerminalからTwinCAT SystemをCommunication Interfaceへ送信しました。
今度はEL6900からTwinCAT間のCommunication interfaceへの通信エラーがWatchdog Timeの設定により検知され、OutputがShutdownされました。
Formula
なので、最悪の応答時間は、
RT=Watchdog(Communication)+Watchdog(Communication)+RT-Actuator |
になります。
Summary
最後は簡単なまとめですが、Beckhoffから提供したTwinSAFEコンポーネントは安全信号と標準信号も同じFieldbusケーブルを使用でき、TwinSAFE Telegramは標準Controllerから紹介します。そして簡単なコンポーネント入れ替え・診断情報履歴によるとメンテナンス上にもメリットがあります。
TwinSAFEには以下の基本Safetyコンポーネントがあります。
- Safety 入力(たとえばEL19xx,EP1908)
- Safety 出力(たとえばEL29xx)
- Driveコンポーネント(例えばAX5805)
- Logicコンポーネント(例えばEL6900,EL6910)
SafetyのSensor入力やActuatorの安全出力はEL19xxやEL29xxに配線し、Logicの処理はEL69xxに任せるイメージです。
Safety over EtherCAT protocol(FSoE)
- Black channel使用し安全データを送受信
- TwinSAFE 通信はEtherCAT・Lightbus・Profibus・PROFUBET・Ethernet
- IEC 61508:2010 EIL 3
- FSoEはIEC61784-3-12とETG標準規格(ETG.5100)
Fail-safe (Fail stop)
Safetyシステムの基本ルールは危険状態見逃さない・そして危険状態では必ずスイッチOFFは・電源OFFです。
EL6910 | EtherCAT Terminal communication interface, TwinSAFE Logic
EL6910はEL6900のBooleanデータ処理のみと比べるとアナログ値も処理できるので複数の安全アプリケーションを実装することができます。最大212接続可能、なおかつFSoeのみならずPROFISafeのMaster・SlaveにもSupportします。TwinSAFE SCRIPT Technologyのおかけで標準Etherncat I/O(identifier -009x)にもTwinSAFE Logic コンポネントに安全データをやりとりできるようになります。
新しいEL6910では4つのコンポネントLogic、 parameters、 mapping,、info dataにも自分のChecksumがあります。なので、Safety Projectの変更があれば、もっと簡単に、効率よくChecksum計算をすることできます。
それ以外にも、EL6910はデバイス自身にも診断情報の履歴が保存できるようになっています。すべてのエラーはもう直接デバイス上から読み取ることが可能です。
EL6910はTwinCAT3 Safety Editor上でプログラミングすることもできます。
特徴
- アナログデータの処理できる
- デバイス上で直接に診断情報の履歴確認
- 最大212安全接続
- 最大128TwinSAFE Groups
- 最大40 User
- PROFIsafe master ・slave support
- TwinSAFE SC support
Protocol
- TwinSAFE/Safety over EtherCAT
Layout
こちらは実際EL6910のLayoutです。
LED
点灯 | 点滅 | OFF | |
Diag1(緑) | 環境や電圧、内部テストも正常です。 | 環境や電圧、内部テストも範囲外です。 | |
Diag2(赤) | Dig3とDig4を同時にOnにする。モジュールはGlobal Shutdownする。 | Logicや環境問題ある | Diag3とDig4と同時にOnします。Global Faultあり。 |
Diag3(赤) | uC1 Global Shutdown・Global Fault | uC2 Global Shutdown・Global Faultなし | |
Diag4(赤) | uC2 Global Shutdown・Global Fault | uC1 Global Shutdown・Global Faultなし |
Address settings on TwinSAFE terminals
TwinSAFEアドレスはSafety Terminalの表面に10-WayのDIPスイッチから、1-1023まで設定できます。(注意するのはアドレス重複が禁止と0は無効)
Update your device
念のため、下記のLinkからEL6910のEDS FileをDownloadしアップデートしましょう。
https://www.beckhoff.com/en-en/products/automation/twinsafe/twinsafe-hardware/el6910.html
\TwinCAT\3.1\Config\io\EtherCATに貼り付けます。
EL1904 | EtherCAT Terminal, 4-channel digital input, 24 V DC, TwinSAFE
今回記事でEL6910と一緒に使用して安全入力を取り込むのはこのTwinSAFE 24Vデジタル入力Terminal EL1904です。EL1904は4つのFail-safe入力があり、FSoE経由で信号をTwinSAFE Logicコンポネントに転送できます(EL6910)。
もちろんEL1904は1:1と1:2入力評価やチャンネルテストの機能もあります。
注意するのはEL1904もSafetyパラメーターはコンポーネント自体に保存してない代わりに、TwinSAFE Logicコンポネント経由で転送する仕組みになっています。その仕組みによりTerminalの交換は簡単になり、SafetyパラメーターはSafety アプリケーション再起動すればまた自動的にパラメーターを転送するからです。
Special features:
- 4 つの安全入力
- cross-circuit detection
- 1-channel や 2-channel評価
- 各チャンネル個別でテスト設定可能
Layout
Implementation
Configuration
こちらは今回の構成です。EL6901はSafety Logic Controllerも入って、EL1904は2 ChannelはESTOPとつながり、1ChannelはResetボタンと繋がっています。
Scan Devices
まずEtherCATで繋がっているデバイスをScanします。I/O>Devices>右クリック>Scanします。
すべてのデバイスも自動的に検索できない可能性あるWarningです。Okで進みます。
EtherCATで繋がってるEtherNET Interfaceを選び>OkでScanします。
Yesで進みます。
Motor Terminalがありますが、Scan しますか。今回はMotor使用しませんので、Noで進みます。
今回の主役EL6910がScanされ、Projectに追加されました!
Add PLC
PLCAdd New ItemでPLC Projectを作成します。
Standard PLC Projectを選び>AddすればOKです。
Add Safety Project
SAFETY>右クリック>Add New Itemしあmす。
TwinCAT Safety Project Preconfigured EndAckを選び>Add します。
EL6910を使用しますので、TargetはHardware Safety PLCを選び>OKします。
Safety Projectが追加されました。
その中のTwinSAFEGroupは安全プログラムを組むところです。
Set Target System
まずSafety ProjectのTarget Systemを設定します。今回はEL6910が対象ですね。Target Systemの項目をクリックします。
TwinCAT側はTargetの設定画面に変わります。
Select Target System
まずTarget Systemを選択します。DefaultはEL69100でTarget SystemのDrop Listをクリックします。
EL6910を選択します。
Set Physical Devices
次はSafety ProjectのTarget Systemと実機のEL6910とを紐つけます。
赤枠にあるボタンをクリックします。
もしデバイスが見つからない場合はDeviceの型式あってるか、電源いれてるかを確認したうえに赤枠のRefleshボタンをクリックしもう一度Target SystemをScanしてみましょう。
EL6910を選び>OKします。
いまTarget SystemがEL6910に変更し、実機のSoftware Version・Serial NumberやProject CRCに読み込めるようになりました。
Update Hardware Address
念の為、Hardware Addressをもう一度Updateしましょう。
Import Alias Device(s)
EtherCATで接続してるDevicesをSafety ProjectにImportします。
Alias Devices>右クリック>Import Alisa Device(s) from I/O-Configurationします。
いまEtherCAT経由で実機繋がってるFSOE TerminalがScanされます。
今回の構成はEL1904が2つ、EL2094が1つになっています。
記事では一つ目のEL1904のみ使用します。
Term 8>Module1のCheckboxを入れ、OKします。
Term 8 EL1904 – Module1(FSOES)がSafety ProjectにImportされました。
Check the Module
まずEL1904の状態をCheckしてみましょう。TwinSafeGroup1>Alias Devices>Term 8 (EL1094) – Module1(FSOES)をクリックします。
該当するモジュールのFSoEアドレスやDip Switchの設定などを確認や変更できます。
Dip Switchの緑ボタンで現在モジュールのDip switch設定を更新できます。
Parameters
Parameters Tab開く各チャンネルの設定を変更できます。
一つの例としては、Channel1と2の信号設定です。ValueのFieldをダブルクリックします。
Set Value DialogのPopupが表示されます。
EnumでChannelの設定を変更できますが、今回はSingle Logic Channel 1/2のままにします。
Safety Program
Edit the safety Group
Safety Programを作成します。TwinSafeGroup1.salをクリックします。
Safety Program Editorが表示されます。
Add SafeDecouple
右のToolboxにあるsafeDecouple Function BlockをNetwork1にひっばります。
.
safeDecouple Function BlockでInstance名にFBDecouple1が追加されました。
Add safeMon
次はsafeMon Function BlockをNetwork 1に追加します。
よし、Safety programに必要なFunction Blockが揃いました。
Add Variables
Function Blockの入力DecIn1にSafey変数と紐つけます。
DecIn1を選んで>右クリック>Add New Variableします。
Variable Nameを入力します。
ESTOP_CH1にし、OKで確定します。
いまDecIn1はESTOP_CH1から信号をもらうようになっています。
DecIn2も同じくSafety変数を追加します。
DecIn2はESTOP_CH2のSafety変数と繋がりました。
Link to safeMon Input
次はsafeDecouple Function Blockの出力1 DecOut1をsafeMonのMonIn1と繋がります。
このような操作です。
このようにDecOut1、DecOut2の出力をMonIn1、MonIn2の入力と紐つけました。
Verify Safety Project – 1 st time
では一回Safety Projectを検証してみます。
エラーが出ましたね。Yesでエラー箇所を確認します。
Error Listには4つのErrorがありますね。
ではまずVariable ESTOP_CH1とESTOP_CH2がAssignedされませんのエラーから潰しに行きます。
Variable Mapping
Variable MappingのTabを開きます。
もしくはView>Other windows>Variable MappingでもOKです。
Variable Mappingの画面に変わります。TwinSAFEの変数はすべてAssignmentをする必要があります。つまりその変数の与えがどこからきたのかを明確に定義する必要があります。
Map ESTOP_CH1
まずLocal変数ESTOP_CH1から定義します。Assignmentのところに…のボタンがあり、クリックしてください。
いつもFieldbusのLink Variable画面と似てるPopupが出てきますね。
変数名はESTOP_CH1で、緊急停止のCH1はEL1904のChannel1と配線していますので、TwinSafeGroup1>Alias Devices>Term8(EL1904)>Channel1>Input Channel1を選択し>OKで確認します。
それでESTOP_CH1変数はEL1904の安全入力チャンネル1と紐つけました。
同じ操作で緊急停止のCH2とEL1904の安全入力チャンネル2を配線してるので、ESTOP_CH2はInput Channel2と紐付けられます。
Map Reset Signals
次はsafeMon FunctionBlockのRestart信号と紐つけます。Restartを選び>Add New Variableで安全変数を追加します。
Verify Safety Project – 2nd time
今度はGroup port ‘Run/Stop’が接続してないと先に作成したReset変数がAssignしてないエラーが出ました。
Map Reset Signals
RESET信号はEL1906の安全入力チャンネル3と配線していますので、先ほどと同じ操作でTwinSafeGroup1>Alias Devices>Term8(EL1904)>Channel1>Input Channel3と紐つけましょう。
Map Run/Stop Group port
次はRun/Stop Group portのAssign 問題を解決します。Variable MappingからGroup PortsのTabを開くとRun/Stopの入力信号があります。
Add GVL in Safety Project
Safety ProjectのGVLsからSafety Global Variable listを追加します。
GVLs>右クリック>Add>Global Variable Listします。
Safety Global Variable listが追加され、+ボタンで安全変数を新規作成します。
Variable1が作成されました。
変数名をRUNSTOPに変更します。
Map it
先ほどのVariable Mappingに戻り、Group Ports TabにあるRun/Stop変数のAssignment/Usages …ボタンをクリックします。
先程Safety Global Variable listに定義したRUNSTOP変数と紐つけます。
これでOKです!
Verify Safety Project – 3rd Time
3度目のチャレンジします。
RUNSTOPはまたAssignedされてないエラーが出てきますね。
Add Digital Input Channel
RunSTOP信号はStandard Programと信号と繋がります。そのためにまずTwinSafe Groupに”Digital Input”をInsertする必要があります。
TwinSafeGroup1>Alias Devices>右クリック>Add>New Itemします。
Standard>1 Digital Input(Standard)を追加します。
いまTwinSafeGroupに”1 Digital Input(Standard)”が追加されました。そのStandard Inputをクリックします。
Digital Inputをクリックすると、Standard User programの変数とリンクする設定画面が出てきます。
Create Process Output
Standard PLC ProjectのGVLs>右クリック>Add>Global Variable Listします。
GVLの名前を設定しOKで確定します。
Process Output変数を定義します。AT %Q*の宣言は忘れずに!
Compile
Build>Build SolutionでProjectをコンパイルします。
Link to Standard Project Variable
追加した1 Digital Inputをクリックします。
Linksボタンをクリックします。
先定義した変数と選べばOKです!
Map
先程Safety Global Variable listがRUNSTOP変数を定義しましたよね。そこからRUNSTOP変数をAssignmentしますね。
Alias Devices>1 Digital Input(Standard)>Channel 1 > INを選び>Okで確定します。
いまはRUNSTOPも割り付けOKです。
Verify Safety Project – 4th time
4回目のコンパイルを始めます。
今回は”At least one output mapping should be exist”のエラーが出てきます。
実際にVariable MappingのGroup Ports TabにFB ErrなどのOutputがあり、Safety Projectでは最低限でも一つをMappingする必要があります。
Mapping To Output
まずエラーなしのコンパイルを目指すので一つだけをMappingしてきます。今回はFB Errにします。
Add Normal Digital Output Channel
Alias Devices>Add>New Itemします。
今回はStandard>1 Digital Output(Standard)を選び、Addで追加します。
Create Process Input
Standard PLC ProjectのGVLにProcess Inputを作成します。 AT% I*で宣言することは忘れずに。
Compile
Build>Build SolutionでProjectをコンパイルします。
Link to Standard Project Variable
1 Digital Outputをダブルクリックします。
Linked to の+ボタンをクリックします。
先ほど宣言したProcess Inputを選び>Okで確定します。
これでOKです。
Verify Safety Project – 5th Time
5回目のコンパイルを始めます。
先ほどのFB Errorがプログラム内で使ったことありませんのエラーですね。
Mapping
Safety GVLを開き>FB ErrorのUsages Fieldにある…ボタンをクリックします。
先程追加した1 Digital Outputと紐つけてOKです。
Add ESTOP OUTPUT
いままでのコンパイルエラーを踏まえて、正確な構築手順を最後はMonOutのところのStandard PLC Projectの変数と紐つけるところで説明します。
Add New Variable in Function Block
MonOut>右クリック>Add New Variableします。
変数名はMonOUTと設定し、OKで確定します。
Add Digital Output(Standard)
Alias Devices>Add>New Itemします。
1 Digital Outputを選び>Addします。
1 Digitial Output_2を追加しました。
Link to Usage
Variable Mapping>VariablesのTabにMonOutの変数>Usages のFieldにある…ボタンをクリックします。
先程追加した1 Digital Output(Standard)_2を選び>Addします。
それでOKです!
Add Process Output in Standard Program
先程のGVLからProcess Output変数を定義します。 AT %I*を忘れずに。
Link to Digital Output
1 Digital Output(Standard)をクリックします。
Linked toにある+ボタンをクリックします。
先程追加したProcess Output変数を選び>Okで確定します。
Verify
もう一度Verifyします。
エラーないです。お疲れ様です!
Download Configuration
Activate ConfigrationでHardware Configurationを先にDownloadします。
OKで進みます。
TwinCAT Runtimeを再起動し、Run Modeに切り替えます。
Download Safety Project
Download Safety Projectで安全アプリケーションをDownloadします。
Login画面が表示されます。UsernameはAdministratorです。
次はSerial Numberです。
Target Systemの画面に表示されたSerial Numberをそのまま入力してください。
今回のモジュールは1198182なのでSerial NumberのFieldは1198182にします。
最後のPasswordはDefaultはTwinSAFEです。
全部入力しNextで進みます。
入力した情報が間違えなければ、Select Project Dataの画面に進みます。
Select DataはComplete Project DataのままでNextします。
プロジェクトが無事にDownloadしました。Nextで進みます。
最後はCheckboxを入れ、Nextします。
Safety Applicationを有効にするためにPasswordをもう一度入力します。
Default PasswordはTwinSAFEです。
Login
User programをRuntime にDownloadします。
Start
最後はアプリケーションを起動すれば完成です。
Result
Show Online DataでMonitor Modeに切り替えます。
いまはMonitor Modeに入っています。
でもGroupはSTOPになってるというメッセージがあります。そしてFunction Blockの下にも赤いICONがついています。
Standard User ProgramにあるSafetyRunStop変数をTrueします。
よし、GroupがRunになりました。
次はResetボタンを押すと、MonOutも出力できるようになります。
Finally..
ここまできてようやく簡単なSafety Programを組みました。TwinSAFEでSafety Programを作成するにはいくつかの注意点があります。
- すべてのLocal・Global変数にもAssign Fieldを設定する必要があります。(つまり入力の意味で、この変数の与えはどこからきたのか)
- すべてのLocal・Global変数にもUsed Fieldを設定する必要があります。(つまり出力で、この変数は最後どんの変数に出力するか)
- TwinSafeGroupのRUN/STOP 変数は必ずAssignedする必要があります
- TwinSafeGroupのPort Outputは最低限でも1つをAssignedする必要があります。
- 安全プログラムとStandardプログラムにデータやりとりするには”Standard Digital/Analog”モジュールが必要です。
- Standard PLC ProgramではProcess IOとして変数を定義してください。
AT %I*/ AT %Q* - Default UsernameはAdministrator、Default PasswordはTwinSAFEです。