Beckhoff#TwinSAFE EL6910 Safety Program Tutorial_Part2

この記事ではBeckhoffのTwinSAFEからSafety Programを作成する第2話です。今回はTwinCAT Groups・Function Block PropertiesとSignal Typeなどを紹介し、TwinSAFEのESTOP制御の標準 FunctionBlock safeEstopで簡単な緊急停止アプリケーションを作成します。記事はできるだけ誰でもそのWork-Flowに従えば絶対に構築できるように心かけて作っています。どうぞよろしくおねがいします。

Thanks!

この記事が出来上がるのはベッコフ日本法人ベッコフオートメーション株式会社さまとMana Design worksさまから機材を貸してくださったおかけです。誠にありがとうございます。

ベッコフ日本法人ベッコフオートメーション株式会社

IPC6920-005・EL6910・EL1904はベッコフ日本法人ベッコフオートメーション株式会社さまが貸してくださったものです。Beckhoff Automationは1980 年会社設立、PCベースの制御技術をベースにしたオープンオートメーションシステム導入の先頭に立つドイツ企業です。

ベッコフ日本法人ベッコフオートメーション株式会社は、2011年に横浜に本社、2017年に名古屋オフィスを設立しました。

こちらはベッコフ日本法人ベッコフオートメーション株式会社様のホームページです。

どうぞよろしくお願いします。

https://www.beckhoff.com/ja-jp/

Reference Link

Blog

Beckhoff#TwinSAFE EL6910 Safety Program Tutorial_Part1

Video

TwinSAFE groups

TwinSAFE Groupsというのは様々な機械から異なる安全ZONEをシンプルで分散制御できて、かなり合理的な構造です。TwinSAFE Groupの中のFBののConnection ErrorはGroupのエラーとなり該当するGroupの出力をすべてOFFになります。

VAR 

TwinSAFE GroupではVariable MappingのTabからGroupを制御・状態取得することができます。Variable Mapping>Group PortsからすべてのVariablesを一覧できます。

Input

Group PotsDescription
Err AckTwinSAFE Groupエラーをリセットします。Standard変数と紐つける必要があります。
Run/StopTrue=TwinSAFE Group起動、False=TwinSAFE Group停止Standard変数と紐つける必要があります。
Module Fault別ののModule(例えばEK1960)のエラー出力と紐つけます

Output

Group PotsDescription
Comm Err1つ以上のConnectionは通信エラー発生中
FB ErrFBがエラー発生
Module Fault別ののModule(例えばEK1960)のエラー出力と紐つけます
Com Startup1つ以上Connectionsが起動した
FB DeactiveTwinSAFE Groupが無効してる
FB RunTwinSAFE FBが実行中か
In RunTwinSAFE GroupがRun Modeしてるか

Group State

ValueStatusDescription
1RUNInput Run=1 Safety Groupにエラーなく、すべでのConnectionも立ち上げた
2STOPInput Run=0
4ERRORTwinSAFE Groupがエラーあり
5RESETTwinSAFE Groupのエラー解消、Err Ack信号がTrueの状態
6STARTTwinSAFE GroupにすべでのConnection立ち上げてない状態を示しています。
7ESTOPERROR
16DEACTIVETwinSAFE Groupが無効されてる
17WAITCOMERRORPassivate 機能が選択されている

Group Diag

ValueStatusDescription
0エラーなし
1FBERROR1つ以上のFBがエラー状態になっています。
2COMERROR1つ以上の接続がエラー状態になっています。
3MODULEERRORModuleFault=True
4CMPERRORPower-On Analog Value Check Error
6DEACTIVATEERROR
6RESTARTERRORTwinSAFE Logic ProgramのEtherCAT通信が再起動されたか、UserがLogin するときTwinSAFE Logic ProgramをReloadしてないのか

FB port properties

各Function自身や各Portにも設定できるPropertiesがあります。例えば下図のようにSafeESTOPのPort入力を選んで、Propertiesを選べば設定項目が表示されます。ChannelのInterface種類・データ・タイプなど…

Implementation

Function Block

Signal Type?

TypeDescription
TwinSAFE-InTwinSAFEの入力
Standard-InPLCにある%Q* 標準変数
FB-OutTwinSAFE Function Block出力
TwinSAFE-OutTwinSAFEの出力
Standard-OutPLCにある%I* 標準変数
FB-InTwinSAFE Function Block入力

DECOUPLE

FB_Decoupleは信号をTwinSAFE Connectionから外すためのFunction Blockです。このFunction Blockは8入力と8出力があり、該当する番号のDecInXがそのままDecOutXに流れます。ここでまた基本的なコンセプトになりますが、TwinSAFE I/O TerminalとTwinSAFE ConnectionはTwinSAFEグループに振り分けられ、そのFB_DecoupleはTwinSAFE Connectionを他のTwinSAFE Groupに分配することができます。

safeEstop

FB_ESTOPは最大8つの緊急停止入力(EStop1からEStop8で)があり、各PortにもBreack Contact(NO)かMake Contact(NC)に設定できます。

そのFunction Blockは2つの出力がありEStopOutはESTop信号からすぐ反応する代わりに、EStopDelOutはTime-Delayのパラメータがつけられています。

あと、一回ESTOP信号からFB_ESTOPがSafe状態に遷移したら、Restartの信号からBlockをリセットする必要があります。

最後にFB_STOPにEDM Feedback Loop信号を設定できます。Function Block EStopOutを直接EDM1で、EStopDelOutを直接EDM2に接続します。そのEDMは”True”がないとFB_STOPがエラー状態に代わり、Error=Trueになります。

さらに補足ですが、入力Portの組み合わせはEStopIn1/EStopIn2、EStopIn3/EStopIn4、EStopIn5/EStopIn6、EStopIn7/EStopIn8のPairで、信号の組み合わせはSingleでもDualでもOKです。もしESTOPの入力時間が監視時間(Discrepancy Time)を超えたらFB ErrorがTrueになります。

FB Error FlagがTrueになると、出力がFalseになり、Error OutputがTrueになります。

VAR INPUT

VariablePermitted TypeData TypeDesription
RestartTwinSAFE-InFB-OutStandard-IinBOOLTwinSAFE Groupが立ち上げなどに必要なパルス起動信号
EStopIn1TwinSAFE-InFB-OutBOOL1stの非常停止信号
EStopIn2TwinSAFE-InFB-OutBOOL2ndの非常停止信号
EStopIn3TwinSAFE-InFB-OutBOOL3rdの非常停止信号
EStopIn4TwinSAFE-InFB-OutBOOL4thの非常停止信号
EStopIn5TwinSAFE-InFB-OutBOOL5thの非常停止信号
EStopIn6TwinSAFE-InFB-OutBOOL6thの非常停止信号
EStopIn7TwinSAFE-InFB-OutBOOL7thの非常停止信号
EStopIn8TwinSAFE-InFB-OutBOOL8thの非常停止信号
EDM1TwinSAFE-InFB-OutStandard-IinBOOLNon Delay出力Channel(EStopOut)のFeedback信号になり、EDM信号が有効の場合、Safe出力はTrueになる条件はEDM1がTrue 信号になる前提です。
EDM2TwinSAFE-InFB-OutStandard-IinBOOLDelay出力Channel(EStopDelOut)のFeedback信号になり、EDM信号が有効の場合、Safe出力はTrueになる条件はEDM2がTrue 信号になる前提です。

VAR OUTPUT

VariablePermitted TypeData TypeDesription
ErrorTwinSAFE-InFB-InStandard-OutLocal-OutBOOLTrue=入力Pairの異なる状態は設定時間より超えたか・Feedback Loopエラーがあるか。ERR_ACK のTrue信号でTwinSAFE Groupのリセットが必要。
EStopOutTwinSAFE-InFB-InStandard-OutLocal-OutBOOLESTOP状態出力、True=正常
EStopDelOutTwinSAFE-InFB-InStandard-OutLocal-OutBOOLESTOP+Delay状態出力、True=正常

Diagnostics Information

16Bit

BitDescription
0Error – Input Group1
1Error – Input Group2
2Error – Input Group3
3Error – Input Group4
4EDM Error – EDM1
5EDM Error – EDM2
6
7
8“Safe Input after Disc Error” Optionが有効で、Input Groupの状態が異なるときTrueになります。
9“Safe Input after Disc Error”Optionが有効で、Input Groupの状態が異なるときTrueになります。
10“Safe Input after Disc Error”Optionが有効で、Input Groupの状態が異なるときTrueになります。
11“Safe Input after Disc Error”Optionが有効で、Input Groupの状態が異なるときTrueになります。

State Information

ValueDescription
0未定義
1FB_ESTOPモジュールはいまRUN StateでありFail-Safe状態のESTOPがありません。Error=0EStopOut=1EStopDelOut=1
2FB_ESTOPモジュールはいまSTOP StateでありFbRunがFalse状態。Error=0EStopOut=0EStopDelOut=0
3FB_ESTOPモジュールはいまSAFE Stateであり最低限1つのESTOP入力がFaild-safe状態。Error=0EStopOut=0EStopDelOut=0
4FB_ESTOPモジュールはいまError Stateであり最低限1つのESTOP入力がFaild-safe状態。Error=1EStopOut=0EStopDelOut=0
5FB_ESTOPモジュールはいまReset Stateでありエラー解消したがErrAckのリセット待ちError=0EStopOut=0EStopDelOut=0
6FB_ESTOPモジュールはいまSTART StateでありRstart信号待ちError=0EStopOut=0EStopDelOut=0
8FB_ESTOPモジュールはいまDELAYOUT Stateで、Safet状態がリクエストされたが、ESTOPDelOutまだTrueの状態。Error=0EStopOut=0EStopDelOut=1

Channel Interface

SettingsDescription
Both Deactivated2つのChannelも無効する
Single-Channel 1 ActivatedChannel1:Single-Channel評価Channel2:無効
Single-Channel 2 ActivatedChannel1:無効Channel2:Single-Channel評価
Single-Channel Both ActivatedChannel1:Single-Channel評価Channel2:Single-Channel評価
Two-ChannelChannel1・Channel2も有効しDiscrepancy Time内で評価する

Channel Contact

Flow

Connect to IPC

SYSTEM>Choose Targetで接続するBeckhoffのIPCやRuntimeを設定します。

Search(Ethernet)でRuntimeを検索します。

Enter Host Name/IPでIpを入力、Enterで検索。

Add Routeします。

Secure ADSのCheck Boxを入れ、Password入力>Okします。

Connectedされました!

Configuration

Add EtherCAT Master

I/O>Devices>Add New Itemします。

EtherCAT>EtherCAT Masterを選び>Okします。

EtherCAT Masterとして使用するNetwork Interface Cardを設定>Okします。

Scan

EtherCAT Master右クリック>ScanでEtherCAT Nodeを探します。

Motorは今回の記事で検索しなくもよいので、Noで進みます。

Done!

中にTwinSAFEの主人公 EL6910がありましたね。

ADD PLC

PLC>Add New Itemします。

PLCが追加されました。

DUT

DUT_safeESTOP_InfoData 

こちらの構造体はFBESTOPのStateとDiag情報を格納するために作られたんです。

TYPE DUT_safeESTOP_InfoData :
STRUCT
State AT %I* :USINT;
Diag  AT %i*:UINT;
END_STRUCT
END_TYPE
DUT_SafetygroupsStatus 

こちらの構造体はTwinSAFEの制御や情報を格納するために作られたんです。

TYPE DUT_SafetygroupsStatus :
STRUCT
//Standard Input from Safety Group
RunStop AT %Q* :BOOL;
ErrorAck AT %Q* :BOOL;
//Standard Output from Safety Group
Com_erro AT %I* :BOOL;
Com_Startup AT %I* :BOOL;
FB_Deactive AT %I* :BOOL;
FB_Err AT %I* :BOOL;
FB_Run AT %I* :BOOL;
In_Run AT %I* :BOOL;
Other_Error AT %i* :BOOL;
END_STRUCT
END_TYPE
eDUT_safeESTOP_State 

こちらの構造体はFBESTOPのStateから現在の状態を示すために作られています。

{attribute ‘qualified_only’}
{attribute ‘strict’}
TYPE eDUT_safeESTOP_State :
(
undefined :=0
,RUN :=1 //No Error,Error=0,EStopOut=1,EStopDelOut=1
,STOP :=2 //Stop State,Error=0,ErroStopOut=0,EStopDelOut=0
,SAFE :=3 //Safe State,Error=0,ErroStopOut=0,EStopDelOut=0
,ERROR :=4 //Error State,Error=1,ErroStopOut=0,EStopDelOut=0
,RESET :=5 //Reset State,Error=0,ErroStopOut=0,EStopDelOut=0
,START :=6 //Start State,Error=0,ErroStopOut=0,EStopDelOut=0
,DELAYOUT :=8 //Delay Out State,Error=0,ErroStopOut=0,EStopDelOut=0
);
END_TYPE

Function Block

FB_safeSTOP_InfoData

こちらのFunction BlockにあるsafeETOP_InfoDataは直接にFBEStopのDiagとStateをLinkします。

FUNCTION_BLOCK FB_safeSTOP_InfoData
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
safeETOP_InfoData :DUT_safeESTOP_InfoData;
END_VAR
PROPERTY DiscrepanyError : BOOL

各Channelがエラーでないかを取得します。

DiscrepanyError:= (safeETOP_InfoData.Diag AND 2#0000_1111_0011_1111 ) <>0;
PROPERTY ESOTPState : USINT

現在のFBStop状態を取得します。

ESOTPState:=safeETOP_InfoData.State;

MAIN

MAINプログラムはこちらです。FBEstopが正常か、エラーかを確認するだけになります。

PROGRAM MAIN
VAR
safeESTOP1 :FB_safeSTOP_InfoData;
ESTOPNormal :BOOL;
Error :BOOL;
END_VAR


ESTOPNormal:=safeESTOP1.ESOTPState = eDUT_safeESTOP_State.RUN;
Error:=safeESTOP1.DiscrepanyError;

GVL

次はGVLを追加する。GVL>Add>Global Variable Listをします。

GVL名を入力し>Openで追加。

TwinSAFE GroupとLinkする変数を定義します。

{attribute ‘qualified_only’}
VAR_GLOBAL
//
TwinSafetGroup1 :DUT_SafetygroupsStatus;

END_VAR

Add Safety Group

SAFETY>右クリック>Add New ItemでSafety Groupを追加します。

今回もTwinCAT Safety Project Preconfigured ErrAckを選び>Addします。

Target SystemをHardware Safety PLCに設定しましょう。

Safety Groupが追加されました!

Set Target System

Target Systemの設定画面を開きます。

前回の記事にも紹介しましたが、Target SystemをEL6910に選択し、Physical Deviceで接続するEL6910を設定します。

実機のEL6910はいまEK1101のTerm 5なので、Term5 を選び>Okします。

Done!

Import Alias-Devices(s) from I/O-Configuration

EtherCATで接続してるSafety IO TerminalをAlias DevicesにImportします。SafetyGroup>Alias Devices>Import Alias-Device(s) from I/O-configurationします。

今回使用するのはTerm8 EL1904とTerm12 のEL2904です。

Import成功しました!

Add DI

PLCのUser ProgramにあるStandard変数と紐つけるためにDigital input/Digital Output Slotを追加します。Alias Devices>Add>New Itemします。

1 Digital Input(Standard)を選び>Addします。

BoolタイプのDigital Input(Standard) Slotが追加されました。

Group your Variables!

Moduleの数が大きくなると、FolderでSlotを管理するのはおすすめです。Alias Devices>Add>New Folderします。

Folderが追加されました。

Folderを選び>Add>New Itemすれば同じく新しいSlotを追加できます。

Add Multiple stand variables

一つずつ追加するのは面倒だと思ったら一括Slot生成も可能です。Alias Devices>Add multiple standard variablesします。

Nameは追加するSlotの名前になります。

次はTypeを設定します。例えばOutputはDigitalかAnalogに変更できます。

そしてAnalogを設定した場合はData TypeもUSINT/UINT/INT/UDINT/DINTから構築できます。

では仮にInputs/Outputsをa_in/a_out、TypeはDigital、Data TypeはBIT、10個を生成します。

このようにname_1、name_2…のようにTwinCATが変数を生成してくれます。これはすごく便利な機能です。

DIDO Signals

では、今回の記事はTwinSAFE FB Groupの状態をStandard PLCに渡したいのでいくつかのStandard Digital Input/Outputを作成しました。

Safety Program

いよいよまたSafety Programを作成します。TwinSafeGroup.salを開きます。

Add safeDecouple

ToolsからSafetDecouple Functionを追加します。

TwinSafe Connectionの信号をGroupに使用するFBDecoupleが追加されました。

Add New Variable

DecIn1を選択した状態を右クリック>Add New Variableします。

変数名を入力しOkします。

DecIn2も同じように変数を追加しましょう。

Add Etsop

右のToolboxからsafeESTOP Function BlockをSafety Programに追加します。

safeESTOP、Intance名はFBEStop1のBlockで定義されました。

Delay time

Delay Time(ms)のところで直接Delaytimeを変更できます。今回は2000(ms)に設定します。

Parameter Setting

Map Diag

先程Standard PLC ProgramでState とDiagのProcess IOを定義し、FBEStopのFuncton Blockと紐つけるといいましたね。Term5(EL6910)の中にLinkできそうなものがないんですね。

まず先程のSafety Programに戻り、FBStopをクリックすると、PropertiesではInfo Dataの項目があり、中にMap DiagとMap StateがFalseだと設定されました。

その2つをTrueにするだけで先EtherCAT EL6910からFBEStopの情報とLinkできます!

もう一度確認すると、Function Block Info Dataという新しいInputがTwinCATに追加されたか見えますか?そのFunction Block Info Dataを展開するとTwinSafeGroup.Network1.FBstop1 Info Dataの下にStateとDiagがあります。ちなみにTwinSafeGroup1.Network1.FBstop1 Info DataのNaming Formatは、

TwinSafeGroup名.診断するFuncton BlockにあるNetwork.そのInstance名のような形です。

State右クリック>Change Linkし、User Programの変数と紐つけます。

同じくDiag右クリック>Change Linkし、User Programの変数と紐つけます。

Link to Estop input

次はsafeSTOPのEStop1とEStop2をEL1904のChannel1とChannel2を繋がります。DecOut1とDecOut2の出力をEStopIn1とEStopIn2にLinkしましょう。

よし、これでDecOut1(EL1904_1_Ch1)とDecOut2(EL1904_1_Ch2)の信号がEstopのFunction Blockに流れました。

Add ESTOP OUTPUT

EStop Function Blockの出力変数を宣言します。EStopOutとEStopDelOutを右クリック>Add New Variableします。

それで変数の宣言もOK!

Add Reset

次はESTOP のFunction Blockを安全状態から正常状態にリセットする信号を作成します。Toolboxの右にあるsafeOrを追加します。

こちらは単純にOrロジックのSafety Versionなので、説明するほど難しいことがやっていません。

Add New Variables

OrIn1からAdd New Variableで新しい変数を追加します。

リセット信号を使用するのはCh3です。

Done!

Link to ESTOP Reset

OrOutをそのままsafetEstopのRestart入力と繋がります。これで準備Ok!

ADD Safety GVL

今度はSafety GVLの作成ですね。GVLs>Global Variable Listで新しいSafety GVLを追加します。

Global変数を定義し最初に追加したStandard Digital Input・Outputと紐つけましょう。

Done!

もちろんErroAcknowledgementというStandard Digital InputをUser programにLinkするのを忘れないでください。Function Blockリセットできなくなります。

Variable Mapping

View>Other Windows>Visiable MappingでMapping画面を展開します。

Mapping The Safety Input

最初に定義したしたEL1904_1_Ch1/Ch2/Ch3の変数をEL1904モジュールと割り付けます。

Assignmentの列にある…をクリックします。

EL1904のInputChannel1,2,3と繋がりましょう。

これでOK!

Mapping the Safety Output

FBESTOPの出力も同じの操作でやってください。

使用するのはEL2904のOutput Channel1,2になります。

Done!

Warning?

もしSafetyプログラムを作成するときにこのような ”A WiredLink connects the Output xx Function Block and xxx which will be executed by logic before..”のWarningがあれば、TwinCATがあなたが作成したプログラムは少し実行順番が問題あるかもしれないというお知らせです。

ではまずその実行順番というのは、各Function Blockの右上にも数字があります。その数字はあなたのTwinSAFE Groupにおける各Blockの実行の順だと示しています。

つまり、いまはまず真ん中のFBDecoupleが最初に実行(1)、実はFBEStop(2)、そして最後はSafeOrになります。確かに順番はおかしいですね。SafeOr(3)からリセットの信号をうけ、そしてTwinSAFE Connectionのすべての信号をDecoupleし、最後はFBEStopや他のSafety Programに流用するのが正しいです。

このような細やかな間違いがよくありますので、治すのも簡単です。TwinSAFE IDEの白いところを右クリック>Change Executeion Order of FBsをクリックします。

そしてCurrent VauleとNew Valueは現在の実行順番と新しく設定したい実行順番が表示されます。

Show Refernce!

最後にもう1つのTripsについて説明します。同じくIDEを右クリック>Show Referencesという機能があります。

このように各変数はどこのFunction Blockで使用されたか一覧できます。

非常に便利な機能です。

Final Flow

よし、これでSafety Programが完成です。

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からTwinCATをMonitior Modeに切り替えます。

TwinSAFE Groupはエラーなしで動いていますね。

こちらの動画で実際の動きが見えます。

Source Project

下記のLinkからProjectをDownloadしてください。

https://github.com/soup01Threes/TwinCAT3/blob/main/TwinSAFE_Part2.tszip

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする