今回の記事ではOMRON NX CPUとSL5700を組み合わせて使用し、EtherCATとFSoEのネットワークを構築します。またOMRONの安全プログラムのコンセプトやEtherCATの仕組みも簡単に説明します。
さ、はじめよう!
Reference Link
Reference Video
About the Hardware
それでは、まず今回記事では使用したオムロンのハードウェアを紹介します。
SL-5700
SL-5700はNX-CPUに取り付けれる安全コントローラーで、このSL-5700を
使用することにより、CIP SafetyとFSoeの安全通信ネットワークを構築でき、
最大254安全接続で、2032点のSafety I/Oになります。
また、SL-5700では4MBもメモリがあり、SD CardのBackupやRestore機能も可能です。
EX-ECC203
EX-ECC203はNXシリーズEtherCATカプラで、2Port持ち、最短125µsの通信サイクルを実装できます。EX-EC203は最大63点のIO Unitまでインストールでき、最大10Aの電流、スクリューレスプッシュインコネクタ、エンドカバー付きのハードウエア仕様です。
Specification
こちらはEX-ECC203の仕様です。
EtherCAT?
今回の記事を始める前に、少しEtherCATについて紹介します。EtherCAT (Ethernet Control Automation Technology)はイーサネットをベースとした、高速で効率的な通信を可能にする高性能産業用ネットワークシステムです。
EtherCATネットワーク上の各ノードはイーサネット・フレームを高速で送信することで、短い通信サイクルタイムを実現できます。
EtherCATは独自の通信プロトコルですが、物理層には標準イーサネット技術が使用されています。また、EtherCATの有効性は高い処理速度やシステムの完全性が要求される大規模制御システムだけでなく、中小規模の制御システムでも十分に活用できます。
EtherCATではイーサネットフレームは全てのスレーブノードを通過し、フレームがスレーブノードを通過する時、スレーブノードは数ナノ秒でフレーム内で割り当てられた領域のデータを読み書きします。
最後のスレーブが全てのフレームを返送し、そのフレームは再び全てのスレーブを通過してEtherCATマスターに返送されます。このメカニズムにより、高速でリアルタイムのデータ転送が保証されます。
EtherCATマスタとEtherCATスレーブ間で周期的に行われるデータ交換はイーサネットフレーム内に直接格納されるEtherCATデータグラムを使用します。
各EtherCATデータグラムはヘッダ(データ長と1つ以上のスレーブアドレスを含む)、データ、作業カウンタ(チェックビット)で構成されます。
イーサネットフレームを列車と考えると、EtherCATデータグラムは列車の車両に相当します。
Types of EtherCAT Communications
EtherCATでは以下の2種類の通信が可能です。
- PDO通信はEtherCAT通信サイクル毎に実行され、継続的にデータを更新します。
- SDO通信はPDO通信の合間に実行されます。
Process Data Communications (PDO Communications)
PDO通信は周期的かつリアルタイムにデータを処理します。EtherCATマスタは論理プロセスデータ空間をノードにマッピングし、EtherCATマスタとスレーブ間のサイクリック通信を実現します。
Process Data Objects (PDOs)
プロセスデータオブジェクト (PDO) はサイクリック通信中にリアルタイムでデータを転送するために使用されます。RxPDOはEtherCATスレーブターミナルがEtherCATマスタからデータを受信するために使用し、TxPDOはEtherCATスレーブターミナルがEtherCATマスタにデータを送信するために使用します。
EtherCATアプリケーション層はEtherCATスレーブターミナルの様々なプロセスデータの転送を可能にするために複数のオブジェクトを保持することができます。プロセスデータの内容はPDOマッピングオブジェクトで定義します。EtherCATスレーブターミナルはI/O制御用のPDOマッピングをサポートしています。
PDO Mapping
PDOマッピングオブジェクトにはEtherCATスレーブターミナルのI/Oデータが含まれます。RxPDOのPDOマッピングオブジェクトはObject Dictionaryのインデックス1600~17FF 16進数で管理され、TxPDOのPDOマッピングオブジェクトはインデックス1A00~1BFF 16進数で管理されます。
EtherCATのPDOマッピングスキームを以下に示します。3つのアプリケーションオブジェクト (オブジェクトA、B、D) がインデックス1ZZZ16進数のPDO (名前: PDO_1) に割り当てられています。このように、PDOマッピングはアプリケーションオブジェクトがPDOにどのように割り当てられるかを示しています。インデックスとサブインデックスもアプリケーション・オブジェクトに割り当てられます。
Assigning PDOs
EtherCATスレーブには複数のPDOを割り当てることができます。ここでは、PDOはRxPDOに1C12 16進数、TxPDOに1C13 16進数を割り当てています。次の例はPDOの割り当て方法を示しています。
この例では、3つのPDO(PDO A、PDO B、PDO D)がインデックス1C13 16進数(TxPDO用)に割り当てられている。同様に、1つのPDO(RxPDO用)がインデックス1C12 16進数に割り当てられている。これらの割り当てはEtherCATマスタとスレーブ間の通信に使用するPDOを決定します。
Mailbox Communications (SDO Communications)
SDO通信はメッセージ通信に使用します。アプリケーションの中で必要に応じてEtherCATマスタからスレーブへコマンドを送信し、スレーブからEtherCATマスタへ応答を返します。SDO通信を使用すると、以下のデータ通信が可能です。
- プロセスデータの読み書き
- スレーブの設定
- スレーブの状態監視
Communicatins
EtherCATでは通信に複数のプロトコルを使用することができます。しかし、EtherCATスレーブターミナルはCANアプリケーションプロトコルのデバイスプロファイルとしてCAN application protocol over EtherCAT (CoE) を使用します。CoEはEtherCATデバイスとの互換性を提供するために設計された通信インタフェースです。
CANアプリケーションプロトコルはオープンネットワーク標準です。下図にEtherCATカプラユニットのCoEの構造を示します。
Network Topology
ケーブル接続はEtherCATネットワーク内で自由に行うことができます。
以下の例はデイジーチェーン接続を示している。
EtherCATマスターから最初のEtherCATスレーブターミナルの入力ポートに通信ケーブルを接続し、最初のEtherCATスレーブターミナルの出力ポートから次のEtherCATスレーブターミナルの入力ポートに別の通信ケーブルを接続します。
注意するのはネットワーク終端のEtherCATスレーブターミナル出力ポートには何も接続しないことです。
EtherCAT Slave Information Files(ESI Files)
EtherCATスレーブの設定情報はESIファイル(EtherCATスレーブ情報)で提供されます。EtherCAT通信設定は接続されたスレーブのESIファイルとネットワーク接続情報に基づいて定義され、ネットワーク設定ソフトウェアにインストールすれば、ネットワーク設定情報を作成できます。
注意するのはSysmac Studioとオムロンのデバイスを使用する場合は、ESIファイルのインストールは不要です。Sysmac Studioには、オムロンEtherCATスレーブ用のESIファイルがすでにインストールされています。
また、Sysmac Studioをアップデートすることで、最新モデルのESIファイルを入手できます。
Transitions of Communications States
EtherCATスレーブターミナルの通信制御の状態遷移モデルはEtherCATマスタによって制御されます。電源ONからの通信状態遷移を下図に示します。
Init
通信は初期化中です。通信できません。
Pre-Operational
この状態ではSDO通信(メッセージ通信)のみが可能である。
初期化が完了するとこの状態になり、ネットワーク設定の初期化に使用します。
Safe-Operational
この状態では、SDO通信(メッセージ通信)とPDO送信の両方が可能です。
スレーブ端末からステータスなどの情報が送信されます。
Operational
これが通常の通信状態であり、PDO通信はI/Oデータの制御に使用される。
Communications between an EtherCAT Master and Slaves
Free-Run Mode
このモードでは、スレーブはマスターの通信サイクルに非同期でI/Oを処理します。
DC Mode
このモードでは、スレーブはマスタの通信サイクルに同期してI/Oを処理します (つまり、I/Oデータをリフレッシュします)。このモードではDistributed clock (DC) と呼ばれるメカニズムがEtherCAT通信の同期に使用されます。
クロックはマスタとスレーブで共有され、DCモードではマスタとスレーブは同じクロックを共有することで同期します。割り込み (Sync0) はこのクロックに基づいて正確な間隔でスレーブに生成され、各スレーブはこの正確なタイミングでI/O処理を実行します。
System Configuration
この図ではEtherCAT Networkのシステム例になります。
Master
EtherCATマスタはネットワークを管理し、スレーブの状態を監視し、I/Oデータを交換します。
Slave
EtherCATスレーブはEtherCATネットワークを通してEtherCATマスタから受信した出力データを出力します。また、入力データをEtherCATネットワークを通してEtherCATマスターに送信します。
EtherCAT Slave Terminals
EtherCATスレーブターミナルは、NXユニットをEtherCATカプラユニットにマウントすることで構成されるBlock Slaveです。
EtherCAT Coupler Units
EtherCATカプラユニットはNXユニットをEtherCATネットワークに接続する通信カプラユニットです。
EtherCAT Junction Slaves
ジャンクションスレーブは、EtherCATネットワーク配線の分岐にのみ使用します。
Sysmac Studio
Sysmac StudioはPCで動作し、EtherCATネットワークやスレーブの設定、プログラミング、モニタリング、トラブルシューティングに使用します。
Communications Cables
イーサネットカテゴリ5(100BASE-TX)以上のアルミテープと編組を施した2重シールドケーブルを使用し、ストレート配線を使用してください。
ESI (EtherCAT Slave Information) Files
ESIファイルにはEtherCATスレーブ固有の情報がXML形式で格納されています。
Hardware Switch Settings
EX-ECC203は2つの物理スイッチがあり、EtherCATのSlave addressを設定できます。
Rotary Switches
ロータリースイッチは、EtherCATネットワーク上のEtherCATスレーブターミナルのノードアドレスを設定します。ノードアドレスは10進数の10桁目と1桁目で設定します。100s桁は後述するディップスイッチの4番ピンで設定します。設定範囲は00~99です(工場出荷時は00です)。
DIP Switch
ディップスイッチの4番ピンをONにすると、ロータリースイッチで設定されているノードアドレスに100が追加される。他のピンはシステムによって予約されています。
Communication Connectors
こちらはEX-ECC203 EtheCAT CouplerのConnection Connectorです。
Power Supply
EtherCATカプラユニットへの電源とグラウンドの配線を下図に示します。
Settings and Setting Procedures
NJ/NXシリーズCPUユニットからEtherCATスレーブターミナルのI/Oデータにアクセスするための設定を以下に示します。
EtherCATカプラユニットをEtherCATスレーブとして設定し、スレーブターミナルの設定や動作設定を行います。変数の割り当て ユーザプログラムからI/Oデータにアクセスするために必要な変数を割り当てて登録し、アプリケーションに合わせてプログラムします。
ID4442?
ID4442は8デジタル入力、標準速度、PNP 24 VDC、スクリューレスプッシュインコネクタ、幅12 mmの入力モジュールです。
Wiring
こちらはID4442の配線例になります。
OD4256?
OD4256は8デジタル出力、標準速度、PNP 24 VDC、0.5 A/点、4 A/NXユニット、スクリューレスプッシュインコネクタ、幅12 mmの出力モジュールです。
Wiring
こちらはOD4256の配線例になります。
ILM400?
ILM400はNXシリーズ IO-Link Master 4チャンネルを持つIP20モジュールです。
Wiring
こちらはILM400の配線例になります。
SID800?
SID800はNXシリーズ 安全入力で、8つの安全入力と2点のテスト出力を持つモジュールです。
Wiring
こちらはSID800の配線です。Si0-Si7は安全入力端子で、T0とT1はテスト出力端子になります。
SOD400?
SOD400はNXシリーズ 安全出力で、4つの安全出力を持つモジュールです。
Wiring
こちらはSOD800の配線です。
Safety PLC Programming Rules
Safety Control Unitでは以下関数種類があります。
Standard functions・Standard Function Block
これらのFunction/Function Blockは安全データを使用しません。
- プログラム実行制御命令
- データ型変換命令
- 論理演算命令
- 計算命令
- タイマー
- Counter
などなどです。
Safety standard function blocks
これらのFunction/Function Blockは安全データを使用します。
- 非常停止命令
- ドアロック命令
などなどです。
Safety FB
すべてのSAFEBOOLシグナルのデフォルトはFALSE(すなわち安全状態)です。
これらの定義は、IEC 61131規格の機能を反映している。例えば発生した場合、デフォルトの信号ルールに定義されているように、すべての出力が FALSE に変わります。
またすべての出力は、安全タスク期間ごとにリフレッシュされる。
Safety FB Common Input Variables
Activat‐BOOL
FBの有効・無効を切り替える。そのパラメータは変数または定数を入力でき、デフォルトは FALSEです。通常、FB を有効にするには TRUE 定数を入力します。
S_StartReset‐SAFEBOOL
Safety FBスタートアップ時(プログラム実行開始時)の自動リセットと手動リセットを制御する。変数または定数を入力できます。
- FALSE(デフォルト): セーフティ CPU ユニット起動時に手動でリセットを実行します。
- TRUE: セーフティ CPU ユニット起動時に自動的にリセットを実行します。
S_AutoReset‐SAFEBOOL
非常停止ボタン操作の自動リセットと手動リセットを制御します。そのパラメータは変数または定数を入力できます。
- FALSE(デフォルト): 緊急停止ボタンが離されたときに手動でリセットを実行する。
- TRUE: 非常停止ボタンが離されたときに自動的にリセットを実行します。
Reset‐BOOL
このパラメータは、Sfaety FBをリセットする操作ですが、FBによって異なる目的で使用されます。
Safety FB Common Output Variables
Ready‐BOOL
FB がアクティブでなく、プログラムが実行されないことを示します。これは、DEBUG モードまたは追加の FB をアクティブ/非アクティブにしたり、機能プログラムのさらなる処理に役立ちます。
Error‐BOOL
エラーが発生していないことを示します。FBの状態は DiagCode で与えられます。
DiagCode‐WORD
FBのすべてのステータス(アクティブ、ノンアクティブ、エラー)がこの変数に格納される。情報は16進数で与えられる。毎回1つのコードのみが与えられる。複数のエラーが発生した場合は、最初に検出されたエラーの情報が DiagCode に出力されます。
Safety FB Common State Transition Diagram
以下のタイプの状態遷移図に、安全 FB の状態の変化を示します。すべての安全 FB に適用されますが、一部の FB に特殊な遷移もあり、ここには記載していません。
この図は 3 つの部分に分かれている。一番上の部分では、FB は動作しておらず、安全状態(安全出力が FALSE)にあります。
中間部では、FBは動作中であり、安全状態(安全出力がFALSE)にあります。
下部では、FBは正常に動作しています(安全出力はTRUE)。
状態遷移図の上部にある点線は、非アクティブからアクティブへの遷移を示します。
図下部の点線は、FBの安全状態から通常状態への遷移を示します。
状態遷移の優先順位は数字で示され、最も高い優先順位は0です。
状態を示す丸い図は、ステータス名とDiagCodeの16進数値を示しています。
OR、AND、XORなどは論理演算子として使用し状態遷移を行います。
FBでは、起動状態はIdle状態であり、この状態は、FBが初めて動作状態に変化する。
ActivateをFALSEに変更すると、他の状態からIdle状態に入ることができます。Activate が FALSE の場合、オペレーション 0 が最優先されます。
SF_EmergencyStop
こちらのSafety FBは非常停止ボタンからの入力を監視できます。
VAR_INPUT
Variable Name | Type | Description |
Activate | BOOL | 先程のSafety FB Common Input Variablesを参考にしてください。 |
S_EStopIn | SAFEBOOL | 非常停止の信号です。 |
S_StartReset | SAFEBOOL | 先程のSafety FB Common Input Variablesを参考にしてください。 |
S_AutoReset | SAFEBOOL | 先程のSafety FB Common Input Variablesを参考にしてください。 |
Reset | BOOL | 先程のSafety FB Common Input Variablesを参考にしてください。 |
VAR_OUTPUT
Variable Name | Type | Description |
Ready | BOOL | 先程のSafety FB Common Input Variablesを参考にしてください。 |
S_EStopOut | SAFEBOOL | 安全機能が作動状態を表します。TRUE: 安全出力が有効中 |
Error | BOOL | 先程のSafety FB Common Input Variablesを参考にしてください。 |
DiagCode | WORD | 先程のSafety FB Common Input Variablesを参考にしてください。 |
State Transition Diagram
こちらはSF_EmergencyStopの状態遷移図です。
TimeChart‐S_Start=False,S_AutoReset=False
TimeChart‐S_Start=True,S_AutoReset=False
TimeChart‐S_Start=False,S_AutoReset=True
Implementation
こちらは今回のConfigurationになります。
Wiring
NX-ECC202, PF0630
ID4442,OD4256
ILM400
SID800,SOD400
EtherCAT Configuration
これからSysmac StudioのEtherCAT Hardwareを構築します。
Add Terminal Coupler
EtherCAT Coupler NX-ECC203を追加します。
Sysmac Studio にある”EtherCAT”をクリックします。
ToolBoxからTerminal Couplerを選び>NX-ECC203をEtherCATネットワークに追加しましょう。
Done!
Slave Terminal Configuration
今度はNX-ECC203にインストールされてる各Slave Terminalをプロジェクトに追加します。
先程追加したNX-ECC203を右クリックし>Edit Slave Terminal Configurationをクリックします。
こちらはNX-ECC203の設定画面になります。
Insert NX-PF0630
1スロット目の電源モジュールNX-PF0630をHardware Configurationに追加します。
ToolboxからNX-PD0630 Ver1.0を選び>右クリックしInsertをクリックします。
Done!NX-PF0630がSlot1に追加されました。
Insert NX-ID4442
2スロット目の入力モジュールNX-ID4442をHardware Configurationに追加します。
ToolboxからNX-ID4442 Ver1.0を選び>右クリックしInsertをクリックします。
Done!NX‐ID4442がSlot2に追加されました。
Insert NX-OD4256
3スロット目の出力モジュールNX-OD4256をHardware Configurationに追加します。
ToolboxからNX-OD4256 Ver1.0を選び>右クリックしInsertをクリックし追加しましょう。
Insert NX-ILM400
4スロット目のIO-LINKモジュールNX-ILM400をHardware Configurationに追加します。
ToolboxからNX-ILM400 Ver1.1を選び>右クリックしInsertをクリックし追加しましょう。
注意するのはモジュールのバージョンも実機に合わせる必要があります。
Done!NX-ILM400がSlot4に追加されました。
Configuration
ILM400はIO-LINKモジュールなので、更に細かい設定を行う必要があり、そのためILM400をクリックすると、Sysmac Studioの右側に該当するモジュールの細かい設定が表示されます。
Unit Operation Settingsを行います。
該当するモジュールの設定項目がすべて表示されます。
All ParametersのDrop-Listから設定しない項目をFilterすることができます。
今回はPort2のみがIO-LINKデバイスと繋がっていますので、Port2を選びましょう。
Sysmac StudioはILM400のPort2設定項目のみに表示され、Process Input DataとProcess Output DataをIO-LINKデバイスに合わせて設定しましょう。
今回の記事では使用するIO-LINKデバイスは4Bytesの入力と1Byteの出力がありますので、Process data in lengthを4 Bytesに設定し、Process data Output Lengthを1 Byteに設定しましょう。
今度はILM400のData Mappingを変更するため、”Edit I/O AllcationSettings”をクリックします。
こちらは各PortのProcess Data Mapping画面になります。
今回はPort2の入力データが4Bytesですが、Default上では2 Bytesのみなので、少々の変更が必要です。InputのPort2を選び>右にあるAdd I/O Entryをクリックします。
ILM400に追加されているI/O Entryをすべて表示させ、Port2 Input Data02を追加しましょう。
Insert NX‐SID800
5スロット目の安全入力モジュールNX-SID800をHardware Configurationに追加します。
ToolboxからNX-SID800 Ver1.0を選び>右クリックしInsertをクリックし追加しましょう。
Done!NX-SID800がSlot5に追加されました。
Insert NX‐SOD400
6スロット目の安全出力モジュールNX-SOD400をHardware Configurationに追加します。
ToolboxからNX-SOD400 Ver1.0を選び>右クリックしInsertをクリックし追加しましょう。
Done!NX-SDO4000がSlot6に追加されました。
Safety Controller Configuration
Safety Controllerを構築するためMultview ExplorerからSafety Controllerを選択します。
こちらはSafety Controllerの構築画面です。
Safety I/Oの項目から先ほど追加した安全入力と安全出力モジュールがあります。
Safety Input
安全入力モジュールを構築するため、Node10/Unit5の下にあるParameters項目をクリックします。
こちらは安全モジュールの設定画面になります。
今回の記事では非常停止をChannel0とChannel1に配線しますので、右のToolboxから”Emergency Stop Switch for Dual Channel Equivalent”をSi00にDropします。
下図のような操作になります。
Done!
Safety Output
次は安全出力モジュールを構築するためにNode10/Unit6のParameters項目をクリックします。
こちらは安全出力モジュールの設定画面になります。
今回の記事ではSi00にランプ出力と配線しただけなので、Ouput Device Generic Device>Single Channel with Test PulseをSi0にDropします。
下図のような操作になります。
Create IO Mapping
今度は安全モジュールの入出力変数を生成するため、I/O Mapを開きます。
こちらは現在のプロジェクトのSafety Mappingになります。
EtherCAT Network部分の変数を生成する必要がありますので、EtherCAT Networkを右クリック>Create Device Variableします。
モジュール関連の安全変数を自動生成されたので、Data>Global Variablesで一回データを確認しましょう、
Done!各安全Slotの入力や出力変数も自動的に追加されました。
Sysmac StudioはN6なら6番目のNode(安全入力)みたいなルールを沿って変数をわかりやすく生成してくれます。
Exposed Variables
次は安全プログラムと非安全プログラム間のデータ交換設定を行います。BeckhoffのTwinSAFEに経験がある方なら、安全プログラムから直接非安全プログラムの変数にアクセスするができません(もちろん反対もNG)。そのためにデータ交換する領域を定義する必要があります。オムロンのControllerではその機能を”Exposed Variables”と呼びます。
Exposed Variablesを定義するため、Standard>Slave I/O>Exposed Variablesを開きます。
OutputはSafety CPU Unit(SL5700)が出力するデータになり、InpuはSafaty CPU Unit(SL5700)の入力データになります。
今回は出力側がBOOL変数2つ・WORD変数1つで、入力側はBOOL変数2つを定義します。
Safety Program
次はProgramming>POUs>Programs>Program0で安全プログラムを作成します。
Internals側下記の内部変数を定義します。
こちらは今回作成した安全プログラムです。Sysmac StudioではFBD言語で安全プログラムを組みます。
Network1
ネットワーク1は常時OFF信号を定義します。
Network2
ネットワーク2は常時ON信号を定義します。
Network3
ネットワーク3はNormal PLCから受信したデータをリセット信号として安全プログラム内で使用します。
Network4
ネットワーク4はSF_EmerygencyStopの安全Function Blockを使用し、非常停止の制御を行います。もちろん1から作成でも可能ですが、OMRONのSysmac Studioではすでに安全Function Blockのライブラリがたくさん用意されています。
Network5
ネットワーク5はSF_EmerygencyStopのReady出力をNormal PLCにFeedbackします。
Network6
ネットワーク6ではSF_EmerygencyStopのエラー出力をNormal PLCにFeedbackします。
Network7
ネットワーク7ではSF_EmerygencyStopの診断情報をNormal PLCにFeedbackします。
Network9
ネットワーク9ではSF_EmerygencyStopの状態によりランプ出力を点灯・点滅・OFFにするかを決めます。
- 点灯:SF_EmerygencyStopがEStopOutがONの状態、つまりReadyなおかつ、非常停止信号ON、そしてリセット済み。
- 点滅:SF_EmerygencyStopがEStopOutがOFFの状態、でもSF_EmerygencyStopはReadyであり、非常停止信号がON。つまりリセット待ちの状態です。
- OFF;それ以外の状態
Configurare Mapping
安全プログラムが作成終わったらので、今度はNormal PLC側のプログラムを構築します。
I/O Map項目を開きます。
こちらは現在のEtherCATやTerminalのIO定義や確認画面です。先程と同じ操作で変数を自動定義しましょう。
Done!
Program
Data Type
DUT_E3ASHL500LMN_ProcessData_Byte3
こちらは今回IML400と接続してるOMORNのIO-LINK距離センサーE3ASHL500LMN Bytes3の構造体になります。
DUT_E3ASHL500LMN_ProcessData
こちらは今回IML400と接続してるOMORNのIO-LINK距離センサーE3ASHL500LMN Bytes0-3をまとめた構造体になります。
Byte2Bool
こちらはByteデータとBoolの配列データを纏めた共同体になります。
Byte2Word
こちらはWordデータとByteの配列データを纏めた共同体になります。
Function Block
FB_E3ASHL500MN
こちらはIO-LINK距離センサーE3ASHL500LMNのFunction Blockになります。
VAR_IN_OUT
こちらはFunction Blockの入出力変数です。
VAR
こちらはFunction Blockの内部変数です。
Program
こちらはFunction Blockのプログラム部分です。
// Temp:=TRUE; uByte2Word.ByteData[0]:=ioData1[1]; uByte2Word.ByteData[1]:=ioData1[0]; ioE3AS.DetectionValue:=WORD_TO_INT(uByte2Word.WordData); ioE3AS.LightIntensity:=BYTE_TO_INT(ioData2[0]); uByte2Bool.ByteData:=ioData2[1]; ioE3AS.Status.ControlOutput1:=uByte2Bool.BoolData[0]; ioE3AS.Status.ControlOutput2:=uByte2Bool.BoolData[1]; ioE3AS.Status.LowIntensity:=uByte2Bool.BoolData[2]; ioE3AS.Status.IssuficientLightIntensity:=uByte2Bool.BoolData[4]; ioE3AS.Status.Warning:=uByte2Bool.BoolData[6]; ioE3AS.Status.Error:=uByte2Bool.BoolData[7]; |
MAIN
こちらはMAINプログラムの内部変数です。
Code
こちらのプログラムはEtherCAT Couplerにインストールされた各Slaveにアクセスし、データを読み書きします。
// MyTimer3(In:=not MyTimer4.Q,pt:=T#0.5s); MyTimer4(in:=MyTimer3.Q,PT:=T#0.5s); N1_DataToSafety_01:=MyTimer3.Q; // NodeReady:=_EC_MstrErr=0 and not _EC_CommErrTbl[2]; stByte2Bool.ByteData:=0; stByte2Bool.ByteData:=N3_Input_Bit_8_bits; bSwitchNOContact:=stByte2Bool.BoolData[0]; bSwtichNCContact:=stByte2Bool.BoolData[1]; N1_DataToSafety_00:=stByte2Bool.BoolData[2] AND N1_Program_No_Fault AND N1_Program_Operating AND N6_Si00_Logical_Value ; // stByte2Bool.ByteData:=0; NodeReady:=_EC_MstrErr=0 and not _EC_CommErrTbl[3]; MyTimer1(In:=bSwitchNOContact AND NOT MyTimer2.Q,pt:=T#1s); MyTimer2(in:=MyTimer1.Q,PT:=T#1s); stByte2Bool.BoolData[1]:=bSwtichNCContact OR MyTimer1.Q; N4_Output_Bit_8_bits:=stByte2Bool.ByteData; // Port2Ready:=N5_Port2_IN_Data_Enable AND N5_IO_Pwr_On; NodeReady:=_EC_MstrErr=0 and not _EC_CommErrTbl[4]; E3ASHL500MN_1(ioData1:=N5_Port2_Input_Data01, ioData2:=N5_Port2_Input_Data02, ioE3AS:=Devices); |
Result
こちらの動画でOMRON NX CPUとSL5700でEtherCATとFSoEの操作を確認できます。
Download
こちらのLinkから今回の記事のプロジェクトをDownloadできます。
https://github.com/soup01Threes/OMRON/blob/main/Project_FSoE_OMRON_NXECC203.smc2