今回はBeckhoff TwinSAFEで使えるSafetyブロック「safeEdm」を取り上げ、非常停止ボタンの監視(EDM)や、診断パルス・入力フィルタ設定の基本を解説します。
「EDMのエラーってどう防ぐの?」「b時間ってなんだっけ?」といった疑問に、実際のTwinCAT画面や図を使って説明します。それにより、少しややこしい印象のある診断パルスのタイミング設定も、仕組みがわかればスッキリ整理できるはずです。
さ、FAを楽しもう!
Reference Link
端子台
デジタル出力X5、X7、X9
接続 X5、X7、X9 には、接点 5 と 10 に DC24V を供給する必要があります。 これらはそれぞれ4つの出力を供給します。 接続されたアクチュエータはEK1960にフィードバックされず、GNDに直接配線されます。
デジタル入力 X6, X8
デジタル入力にはDC24V信号が供給されます。 デフォルト設定では、スタティックまたはクロック信号がサポートされています。 EK1960の安全出力もクロック信号源として選択できます。
テストパルスってなに?
BeckhoffのEK1960(TwinSAFE コントローラ)は、安全性を高めるために、出力や入力が壊れていないか、定期的にチェック(診断)しています。その診断に使われるのが「テストパルス(test pulse)」と呼ばれる、ほんの一瞬の信号です。
どこで使われてる?
BeckhoffのEK1960(TwinSAFE コントローラ)は、以下のところで使用されています。
- 出力(FSOUT):例えばリレーやトランジスタ出力など
- 入力(FSIN):センサやE-Stopボタンの信号など
どうやって動いてる?
出力モジュール1チャネルの場合:
出力モジュールの1チャネルでは、フィードバックテストを4回し、つまり診断パルステストを4回(設定値に応じて回数が変わる)であり、その結果、1チャネルあたり 約20ms、4チャネル分で80msになります。注意するのはリレーモジュールは特別で、1チャネルで 250msくらいかかる計算になっています。
入力(FSIN)の場合:
1チャネルで 2ms の診断サイクルがあり、それに1.25倍の係数がかかるから、約2.5ms × 10チャネル ≒ 25ms
合計かかる時間
診断処理が1周するのにかかる時間(= b時間)の例として、
- 6個の出力モジュール × 80ms = 480ms
- リレーモジュール1個 = 250ms
- 入力10チャネルの診断 = 25ms
- 合計 約 755ms
つまり、EK1960は1周の診断に最大755msかかることがあります。
問題
この間にセンサの信号が「一瞬だけ変化」しても、 診断パルス中だったので読み取れなかったりみたいなことが起きます。例えば、
- E-Stopが押されたのに検出できなかった
- EDMで誤動作(Errorが出る)
のようなトラブルになることもあります。
対策
この問題を予防するために、以下の対策があります。
対策 | 内容 |
DiagTestPulseをOFFにする | 入力が高速反応を必要とするとき(診断なし) |
ModuloDiagTestPulseの値を調整する | テスト周期を少し遅くする |
Switch On/Off Monitoring 時間を長めにする | EDMでタイミング誤差を吸収するため |
EDM
FB EDMは、「外部デバイスの監視」を目的としたTwinSAFEの機能ブロックです。
入力信号 Mon1とMon2の時間的な関係を監視するものです。
- スイッチオン監視(Switch-on monitoring)
- スイッチオフ監視(Switch-off monitoring)
を選択可能です。
注意するのはどちらもデフォルトでは無効なので、少なくともどちらか一方は有効化する必要があります。
スイッチオン監視(Switch-on Monitoring)
スイッチ・オンは以下の項目を監視し、例えば、安全リレーの「フィードバック接点がOFFになるのを確認する」ような用途です。
- Mon1が 0 → 1 に変化したあと
- Mon2が 0 にセットされるかどうかを
- 指定された時間(最大 10,000ms)以内に確認します。
スイッチオフ監視(Switch-off Monitoring)
スイッチ・オフは以下の項目を監視し、例えば、ON→OFFにした際に「補助接点がONになった」か確認したいときなどに使用します。
- Mon1が 1 → 0 に変化したあと、
- Mon2が 1 にセットされるかどうか
- 同様に 指定された時間内(最大10,000ms) に確認します。
エラーの発生条件
safeEdmには以下の条件でエラーが発生します。
- もしスイッチオンやスイッチオフに設定した時間を超過した場合でも適切な信号がない場合、FB EDMは FbError状態になります。
そのとき、出力 Error が TRUE になります。このエラーは、ERR_ACK信号での確認(acknowledgement)によってのみ解除可能です。
入力
名前 | データ型 | 内容説明 |
Mon1 | BOOL (TwinSAFE-In) | 1つ目の入力。通常、ブレークコンタクト(NC)またはメークコンタクト(NO)としてパラメータ設定可能。 |
Mon2 | BOOL (TwinSAFE-In) | 2つ目の入力。入力1と反対の値を、指定された時間内に取る必要がある。 |
出力
名前 | データ型 | 内容説明 |
Error | BOOL (TwinSAFE-Out) | TRUE: ON/OFFの切替時間がタイムアウトした(エラー)。FALSE: エラーなし。 |
Implementation
Wiring
こちらは今回の記事の配線になります。

安全パラメータ
EK1960-260xの安全パラメータを設定するために、TwinSafeGroup1>Alias Devices>Ek1960をクリックしてください。
ここでは、各 FSIN(安全入力) や FSOUT(安全出力) モジュールの 詳細設定値 にアクセス・調整ができます。
非常停止
最初にEk1960に配線した非常停止に関するパラメータを設定します。
端子X5-5.1と5.2
最初に端子X5の5.1と5.2をテストパルスとして設定します。
EK1960の取説からOutputX5の5.1と5.2はFSOUT.Module.1.Channel.Outputだと記述しています。
Internal Safety ParametersのTabを開き、8000:00はFSOUT Module1の基本設定になります。
そしてStandard Output ActiveをFALSE、Diag TestPulse activeとDiag TestPulse For Inputs Active両方ともTRUEにします。
パラメータの意味
項目名(Index) | 説明 | DEFAULT値 |
ModuloDiagTestPulse (80x:01) | テストのクロック頻度。0=毎回。 | 0 |
MultiplierDiagTestPulse (80x:02) | パルスの長さ倍率。1=400µs、2=800µs… | 2 |
Standard Outputs active (80x:03) | 出力に標準信号使用するかどうか | FALSE |
Diag TestPulse active (80x:04) | 出力側でテストパルスを使うか | FALSE |
Diag TestPulse for Inputs active (80x:05) | 入力の診断にこの出力を使うか | FALSE |
Module Fault Link active (80x:07) | このモジュールがエラーになったとき他モジュールもエラーにするか | TRUE |
端子X8-X8.1とX8.2
次は非常停止の信号を受け取る安全入力X8.1とX8.2を設定します。
取説によると、X8.1とX8.2はChannel13.FSIN.Module6.ChannelX.Inputになります。
なので、80C1はその該当する設定になります。
80C1:03と80C1:06はテストパルスのモード設定になります。
80C1:03と80C1:06をダブルクリックするとSet value Dialogの画面が表示されます。
Enumからテストパルスの発生源を設定できます。
パラメータの意味
Index | 説明 | 現在の値 |
8071:01 | Channel1の入力フィルタ時間(100µs単位) | 10(=1ms) |
8071:02 | Channel1のテストパルス診断用フィルタ時間(100µs単位) | 3(=300µs) |
8071:03 | Channel1がどの出力チャネルからパルスを受け取るか | External Testpulse |
8071:04 | Channel2の入力フィルタ時間(100µs単位) | 10(=1ms) |
8071:05 | Channel2の診断パルスフィルタ時間 | 3(=300µs) |
8071:06 | Channel2のテストパルス発生源 | External Testpulse |
端子X5-X5.5
端子X5.5をランプの出力に設定します。
取説によりますと、X5.5はChannel2.FSOUT.Module2になります。
8010.0を開き、テストパルスの機能を無効してください。
安全プログラム
次はEK1960の安全プログラムを作成します。
GVL1-各変数の役割とリンク先
こちらは今回記事で定義した変数です。
変数名 | 内容 | TwinSAFE内の接続 | 実機との接続 |
xRUN | セーフティグループ実行信号 | Run.In に接続 | ― |
sxModule1Fault | モジュール1の故障信号 | FBDecouple1.DecIn1 に入力 | FSOUT Module 1.Module Fault |
xDO1 | 出力信号(DO) | FBDecouple1.DecOut1 → 実出力 | ― |
siX8ESTOP1 | 非常停止ボタン1の接点 | FBDecouple1.DecIn2 | FSIN Module 6.Channel 1 |
siX8ESTOP2 | 非常停止ボタン2の補助接点 | FBDecouple1.DecIn3 | FSIN Module 6.Channel 2 |
iX6ResetButton | リセットボタン | FBDecouple1.DecIn4 | FSIN Module 6.Channel 1 |
soX55ESTOP | AND演算結果(安全状態) | FBAnd1.AndOut | FSOUT Module 2.Channel 1 |
セーフティグループ
次はセーフティグループ内で作成したプログラムを説明します。
全体まとめ(信号フロー)
- 非常停止ボタンの主接点(Mon1)と補助接点(Mon2)を EDMで監視
- 時間的整合性がOK → Errorなし
- リセットボタンが押され、非常停止も両方OKなら AndOut = TRUE
Network1 Decoupleブロック
FBDecouple1 は、物理入力を複数の安全関数に分配するための機能ブロックであり、その関数を使用し、GVLで定義した変数をプログラムの内部変数に分配します。
入力(DecIn)
- DecIn1:モジュール故障検知(sxModule1Fault)
- DecIn2:非常停止ボタン1(siX8ESTOP1)
- DecIn3:非常停止ボタン2(siX8ESTOP2)
- DecIn4:リセットボタン(iX6ResetButton)
出力(DecOut)
- DecOut1〜DecOut4をそれぞれの処理ブロックに分配
Network2 EDM監視ブロック
FBEdm1 は、Mon1・Mon2間のタイミング監視を行う安全ブロックで、この関数を使用し、2つの非常停止入力点を監視します。
入力
- Mon1:siX8ESTOP1 → 非常停止ボタンの主接点
- Mon2:siX8ESTOP2 → 非常停止に対応した補助接点(安全リレーなど)
監視設定
- Switch On Monitoring:1000 ms(Mon1が0→1のあと、Mon2が0になるか)
- Switch Off Monitoring:3000 ms(Mon1が1→0のあと、Mon2が1になるか)
出力
- Error:エラー発生時にTRUE(FB内部にてFbError状態)
Network3 AND条件ブロック
🟨 FBAnd1 は、安全条件を満たしているかを論理ANDで確認するためのブロックであり、リセットボタンが押され、非常停止も両方OKなら AndOut = TRUEになります。
入力
- AndIn1:リセットボタン(安全操作が終わった後の許可)
- AndIn2:EDM結果(safeEdm、エラーがないことが前提)
- AndIn3, 4:非常停止の両接点が期待どおり(補助接点含む)
出力
- AndOut → GVL1.soX55ESTOP:この出力がTRUEで、安全条件クリア状態とみなされます。
結果
TwinSAFEのEDMブロックが「正常に動作している状態」を示しています。
実機の動作確認は、YouTube上にアップロードしたデモ動画にてご確認いただけます。