今回の記事では、CMZ製CODESYS対応コントローラ「FCT641」を使用し、PILZ製のFSoEマスタモジュールPNOZ m EF EtherCAT FSoEを経由して、OMRONのFSoE対応サーボ「R88D-1SN01L-ECT」のSTO(Safe Torque Off)信号をFSoE通信で制御する方法を紹介します。
物理配線不要でSTO制御ができるこの構成では、CODESYS上でのFSoEスレーブ設定、GVLによるIN/OUTマッピング、FSoE構造体、そして周期タスク登録まで、1ステップずつ丁寧に解説しています。
CODESYSとFSoE、安全制御のリアルな連携例として、ぜひ参考にしてください。
さ、FAを楽しもう。

前書き
いつも私の技術ブログとYouTubeチャンネルをご覧いただき、心より感謝申し上げます。また、いまFullさん(full@桜 八重 (@fulhause) / X)と共に毎週水曜日の夜にお届けしている「高橋クリス」ラジオ番組を運営しています。
技術は独り占めせず、届けるもの
私たちは工場の生産技術や制御に関する技術情報を、ブログや動画などで無料公開しています。「知識は誰でもアクセスできるべき」という信念のもと、現場で役立つ具体的なノウハウやトラブル事例などを発信してきました。すべて無料で続けているのは、「知らなかったせいで困る人」を少しでも減らしたいからです。
また、もしあなたの現場で…
- 「このPLCとデバイスの組み合わせ、ちゃんと動くのかな?」
- 「EtherCAT通信でうまくいかない部分を検証してほしい」
- 「新しいリモートI/Oを試したいけど社内に検証環境がない」
など、困っている構成や試してみたいアイデアがあれば、ぜひお知らせください。機器の貸出や構成の共有が可能であれば、検証し、記事や動画で発信します(ご希望に応じて匿名対応も可能です)。
支援のかたち
現在、私達の活動はほぼ無償で続けており、記事や動画の制作には、時間と検証環境の整備が必要です。この活動を継続的にコンテンツを提供するためには、皆様の温かいご支援が大変重要です。
メンバーシップ(ラジオの応援)
Fullさんとのラジオをより充実させるための支援プランです。
https://note.com/fulhause/membership/join
Amazonギフトリスト
コンテンツ制作に必要な機材・書籍をリストにしています。
https://www.amazon.co.jp/hz/wishlist/ls/H7W3RRD7C5QG?ref_=wl_share
Patreon(ブログ・動画活動への応援)
月額での小さなご支援が、記事の執筆・検証環境の充実につながります。
https://www.patreon.com/user?u=84249391
Paypal
小さな支援が大きな力になります。
https://paypal.me/soup01threes?country.x=JP&locale.x=ja_JP
知ってたら助かること、届けたいだけです
あなたの応援が、知識の共有をもっと自由で持続可能なものにしてくれます。これからもどうぞよろしくお願いします。
soup01threes*gmail.com
技術はひとりじゃもったいない。
Reference Link
http://soup01.com/ja/category/cmz/
PNOZ m EF 8DI4DO?
PNOZ m EF 8DI4DO拡張モジュールは、追加の入力と追加の半導体出力を提供します。
制御システム上の入力と出力の機能は、PNOZmulti Configuratorを使用して作成した安全回路に依存します。
チップカードは、ベースユニットに安全回路をダウンロードするために使用され、 ベースユニットには2つのマイコンがあり、互いに監視し合います。
ベースユニットと拡張モジュールの入力回路を評価し、それに応じてベースユニットと拡張モジュールの出力を切り替える。
統合された保護メカニズム
リレーは以下の安全基準に適合しています:
- 回路は自己監視機能内蔵の冗長構成
- 部品が故障した場合でも安全機能は有効
ブロック
こちらはPNOZ m EF 8DI4DOのブロック図です。
配線コンセプト
今回は使用した配線例を紹介します。
こちらは短絡検知機能を使用した配線例です。
こちらはシングル出力の配線例です。
Implementation
OMRON Side
最初にOMRON R88シリーズ側の設定を行います。
OMRONのサーボを初期化するため、サーボを右クリック>Initializeでデバイスをリセットしましょう。
こちらはサーボの初期化設定画面になります。
- Area to restoreはParameters and Safetyを設定し、すべてのパラメータをリセットします。
- Drive restartをYesにするとサーボを自動的に再起動します。
Pilz Side
次はPILZのPNOZ m EF EtherCAT FSoEを設定します。
Wiring
こちらは今回記事で使用したPNOZ m EF 8DI4DOの配線です。
- 非常停止x1
- リセットボタンランプ付きx1

Import ESI File
PNOZmulti Configuratorを起動し、EthernCAT/FSoE Slave Library>Import ESI Fileで新規のESI FILEを追加しましょう。
OMORN HPからDownloadしたR88シリーズServoを登録します。
Done!
それでPNOZmulti ConfiguratorでもR88D シリーズServoを使用できるようになりました。
Configure FSoE
今回記事で使用するOMORNのSERVO(R88D-1SN01L-ECT)をFSOEネットワーク構成に追加します。
Done!
次はFSoEアドレスとConnection IDを設定してください。
これで3軸分のFSOE接続を追加しました。
Hardware Configuration
今度はPNOZ m EF 8DI4DOをプロジェクトに追加するため、Edilt>Open Hardware Configurationを開きます。
こちらはPNOZ コントローラーに対してすべてのモジュールを設定する画面になります。
今回の記事で使用するPNOZ m EF 8DI4DOを追加します。
Done!
今回の記事はPNOZ m EF 8DI4DOが2つありますので、同じの構成にしていきましょう。
Equipment Identifierの欄にアプリケーションに合わせてデバイス名を入れましょう。
User Program
ついgはプログラムを作成します。今回のプロジェクトは各モジュールに機能をシール分けしてプログラムを作成します。また、異なるモジュール間のデータ交換する手法も紹介します。
PNOZ m B1 Side Main- MAINプログラム
こちらはPNOZメインコントローラーのプログラムです。非常停止の状態を常に監視し、STO出力するシンプルなプログラムです。
ESTOP
非常停止は手動リセットしたいので、Start TypeをManual Startに設定します。
LAMP出力
こちらはLAMPの出力であり、現在非常停止の状態を示します。
Program Connectors
次はPNOZメインコントローラーから非常停止の状態をPNOZ m EF EtherCAT FSoEモジュールに渡す必要がありますので、下図のように4つのI出力を設定します。
Program Connector-I/Os Tab→Equipment ID→Module/Program_1(これはPNOZ m EF EtherCAT FSoEのこと)→I/Oはその番地を設定すればOKです。
PNOZ m EF EtherCAT FSoE Side
次はPNOZ m EF EtherCAT FSoEのプログラムを作成します。
Page1 p01ServoStatus
こちらはp01ServoStatusのプログラムです。
左側の入力はFSOE経由でPNOZ m EF EtherCAT FSoEが受け取った安全データです。
右側の出力では状態を他のプログラムシートにも使用するように内部変数に転送します。
Equipment IDを変数を入れるとプログラムの可読性アップできます。
Page1 p02Reset
次はp02Resetプログラムです。
Module Program_1からの10番目の入力信号を受け取ったら、3つのオムロンR88D-1SN01L-ECT ServoにFSOE経由でリセットコマンドを送信します。
こちらのAckリセットコマンドを設定した場合は、Equipment IDに適切なFSoEアドレスのデバイスを選び>I/OをAckに設定すればOKです。
\
リセットの入力信号ですが、今回はModule Program_1の.10に設定しました。
これは、PNOZメインコントローラーに10番目の信号と接続してるからです。
Page3/4/5 p0xAxisXSTO
こちらは3軸のSTOトリガープログラムです。3軸とも同じなので、ここでPage3のみを説明させてください。
こちらはオムロンのR88D-1SN01L-ECT のSTO信号をトリガーするプログラムです。
右側にある出力はFSOE経由でOMRONのR88D-1SN01L-ECTに出力するSTOトリガーです。
Equipment IDとI/Oを正しく設定していきましょう。
次は左にある11番目の番の入力の設定は、PNOZメインコントローラーから渡された非常停止信号であることがわかります。
Download
プロジェクトをDownloadするには、PNOZmulit>Project Managerをクリックしましょう。
Download画面が表示されます。
赤枠のボタンをクリックしプロジェクトをDownloadしましょう。
CPUのOrder NumberとSerial Numberを入力してください。
Order NumberとSerial NumberはCPUの画面から確認できます。
Ethernet Connectionを変更したいので、”Select Device Ethernet Connection”をクリックし、OKで進みます。
”Save project on USB Memory and activate”を選択し、Okで進みましょう。
注意事項を確認し、Confirmで進みましょう。
Downloadが始まるので、しばらく待ってください。
ツールからPNOZmulit CPUを再起動しますか?の確認画面が表示され、Yesで進みます。
Done!CPUはいまRUN Modeになりました。
CMZ Side
次はCodesys側を構築します。
Download ESI File
PilzのHPからPSENradarとPNOZ-m-EF-EtherCAT-FSOEのESI FileをDonwloadしてください。
Install ESI File
ESI Fileをインストールするため、Tool>Device Repositoryをクリックします。
Installをクリックし、先程DownloadしたESI Fileをインストールしてください。
EtherCAT Configuration
次はCodesysでEtherCATネットワークを構築します。
Add EtherCAT Master
Deviceを右クリック>Add Deviceで通信Driverを追加します。
Fieldbus>EtherCAT>Master>EtherCAT Masterを追加します。
Done!EtherCAT Masterが追加されました。
Configure Adapter
先程追加されたEtherCAT Masterをクリックし、GeneralをTabでSelectをクリックします。
実際アプリケーションでEtherCAT Masterとして使用したいEthernet Adapterを設定してください。
Done!
Scan Devices
今回はCodesysのEtherCAT 自動SCAN機能を使用します。
Done!PilzのFSOE Master PNOZ_m_EF_EtherCAT_FSoEを検索できました。
Configure EtherCAT Network
EtherCAT構成ツリー内の OMRON ServoモーターR88を右クリック>Add Deviceします。
「Fieldbuses → EtherCAT → Module → OMRON Corporation → Safety Drive」を選択、下部に表示される Order Number: FSoE STO を確認し、「Add Device」ボタンを押して追加しあmす。
Done!
それは各R88 ServoドライブのPDO Mapping画面です。
Plug Device
OMRONサーボにFSoEモジュールを追加したあとは、PILZのFSoEマスタ構成にスレーブを割り当て(Plug)する作業が必要です。
- EtherCAT構成ツリー内の PNOZ_m_EF_EtherCAT_FSoE を展開
- 任意のスロット(例:Slot_1_FSoE_Master)を右クリック
- 「Plug Device…」を選択
前ステップで右クリックから「Plug Device…」を選ぶと、このようなFSoEスレーブモジュールの選択画面が表示されます。
- 検索欄で OMRON または FSoE と入力すると候補が表示されます
- 使用するサーボに対応するFSoEスレーブ(例:FSoE_IN_2BYTE_OUT_2BYTE)を選択
- 下部の「Plug selected device into the slot」を確認(Slot_1など)
- 「Plug Device」をクリックします。
今回はOMRON R88D-1SN01L-ECTが3台接続されている構成なので、PILZ FSoEマスタのスロットにも3つのFSoEスレーブモジュールを追加する必要があります。
- Slot_1 → OMRONサーボ①(例:R88D_1SN01L_ECT_1)
- Slot_2 → OMRONサーボ②(例:R88D_1SN01L_ECT_2)
- Slot_3 → OMRONサーボ③(例:R88D_1SN01L_ECT_3)
それぞれに FSoE_M_2BYTE_IN_2BYTE_OUT モジュールが割り当てられており、FSoE経由で安全信号の個別制御が可能になります。
その3つのFSOE SlaveはPilz設定ツールに合わせる必要があります。

Configure Address
次は3つのFSoEスレーブの入出力アドレスを固定に設定します。
DUT
下記はOMRONサーボのFSoEスレーブと安全通信を行うために使用するユーザー定義型(DUT)構造体です。
TYPE DUT_FSOE2BytesINOUT : STRUCT usiCMD :USINT; bData1 :BYTE; bData2 :BYTE; uiCRC0 :UINT; uiConnID:UINT; END_STRUCT END_TYPE |
GVL
PILZ FSoEマスタのスロットと、OMRON R88Dサーボ3台との安全通信のIN/OUTデータをグローバル変数として定義します。
{attribute ‘qualified_only’} VAR_GLOBAL PilzSlot1IN AT %IB150 :DUT_FSOE2BytesINOUT; PilzSlot1Out AT %QB150 :DUT_FSOE2BytesINOUT; Axis1IN AT %IB100 :DUT_FSOE2BytesINOUT; Axi1Out AT %QB100 :DUT_FSOE2BytesINOUT; PilzSlot2IN AT %IB250 :DUT_FSOE2BytesINOUT; PilzSlot2Out AT %QB250 :DUT_FSOE2BytesINOUT; Axis2IN AT %IB200 :DUT_FSOE2BytesINOUT; Axi2Out AT %QB200 :DUT_FSOE2BytesINOUT; PilzSlot3IN AT %IB350 :DUT_FSOE2BytesINOUT; PilzSlot3Out AT %QB350 :DUT_FSOE2BytesINOUT; Axis3IN AT %IB300 :DUT_FSOE2BytesINOUT; Axi3Out AT %QB300 :DUT_FSOE2BytesINOUT; END_VAR |
pFSOE
CODESYSでFSoE通信が確立されたら、PILZマスタ ⇔ OMRONサーボ 間の安全信号のやりとりを実装する必要があります。
以下は、3軸分のサーボに対して安全信号の転送を行うSTコードです。
GVL.Axi1Out:=GVL.PilzSlot1IN; GVL.PilzSlot1Out:=GVL.Axis1IN; GVL.Axi2Out:=GVL.PilzSlot2IN; GVL.PilzSlot2Out:=GVL.Axis2IN; GVL.Axi3Out:=GVL.PilzSlot3IN; GVL.PilzSlot3Out:=GVL.Axis3IN; |
Task
FSoE通信に必要なIN/OUTデータの転送処理(前述の GVL.AxiXOut := PilzSlotXIN; など)は、CODESYS上で周期タスクに組み込んで実行する必要があります。
「Task Configuration」を開き、EtherCAT_Taskを選択し、pFSOEをEtherCAT_Taskの一部として登録しましょう。
Result
こちらのLinkから実際の動作を確認できます。
EtherCAT通信は問題ありません。
FSOE通信もOKです。