こちらは新しいシリーズでFATEKのM-PLCを使用し様々な記事を展開していきます。第5話M-PLCと同じFatek社のSC3 サーボモータと接続し、EXORのデバイスからModbusTCP経由で操作します。
さ、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/fatek/m-series/
http://soup01.com/ja/category/fatek/sc-series/
Motion Parameters and Status (Special Register and Relay)
これM-PLCのメモリレイアウトとレジスタの詳細です。モーションレジスタの範囲は、開始レジスタとしてR36880から始まり、リレーの範囲はM10512から始まります。

M10600 + 40*(n-1) 軸制御コマンド サーボON
- 立ち上がり:単軸サーボON
- 立ち下がり:単軸サーボOFF
- 全軸サーボON(M10520)の変化に応じて変化します。
M10601 + 40*(n-1) 軸制御コマンド フォルトリセット
- 立ち上がり:単軸エラークリア
- 現在の軸モーションフローNo.(R37029)のモーションフローステータス(R36924 – R36933)が9から4に変化します。
- ドライブにエラーがある場合、同時にクリアされます。
- 軸エラー情報(R37004 + 150*(n-1))および(R37005 + 150*(n-1))が0に変化します。
- 軸アラーム情報(R37006 + 150*(n-1))および(R37007 + 150*(n-1))が0に変化します。
- 軸ステータスがエラー中(M11242 + 40*(n-1))およびエラーステータスがアラーム中(M11243 + 40*(n-1))がリセットされます。
DR37021 + 150*(n-1) 現在の軸座標
- 実際の軸座標を表示します。
- 表示値は、ドライブ側からフィードバックされた位置(パルス)値に座標変換を行って取得されます。
- 表示値は、ドライブ側で受信したフィードバック位置(パルス)値から座標変換によって取得されます。
- 小数点以下を含み、モーション軸設定(軸テーブル)パラメータの小数点位置によって決定されます。
DR37023 + 150*(n-1) 軸フィードバック速度
- 実際の軸速度を表示します。
- ドライブ側からのフィードバック速度です。
- ドライブ側のフィードバック速度の単位は、モーション軸(軸テーブル)パラメータの単位設定で設定された速度単位および速度ゲインを入力する必要があります。
M10601 + 40*(n-1) 軸制御コマンド フォルトリセット
- 立ち上がり:単軸エラークリア
- 現在の軸モーションフローNo.(R37029)のモーションフローステータス(R36924 – R36933)が9から4に変化します。
- ドライブにエラーがある場合、同時にクリアされます。
- 軸エラー情報(R37004 + 150*(n-1))および(R37005 + 150*(n-1))が0に変化します。
- 軸アラーム情報(R37006 + 150*(n-1))および(R37007 + 150*(n-1))が0に変化します。
M11240 + 40*(n-1) 軸サーボON
- High:サーボON
- Low:サーボOFF
- M10520またはM10600+40*(n-1)のトリガー後に変化します。
M11241 + 40*(n-1) 動作準備完了
- High:準備完了
- Low:準備中
- ファンクション187のモーション有効化後に変化します。
- 変化しない場合、ステータスコードはR36880およびR36881で確認できます。
M11242 + 40*(n-1) 軸エラー発生中
- High:エラー中
- Low:エラーなし
- 軸は停止します。
- エラー情報はR37004 + 150*(n-1)およびR37005 + 150*(n-1)で確認できます。
- M10521またはM10601 + 40*(n-1)でリセットできます。
M11243 + 40*(n-1) 軸警告発生中
- High:アラーム中
- Low:アラームなし
- 軸は停止しません。
- アラーム情報はR37006 + 150*(n-1)およびR37007 + 150*(n-1)で確認できます。
- M10521またはM10601 + 40*(n-1)でリセットできます。
M11244 + 40*(n-1) 制御中
- High:制御中
- Low:制御なし
- 現在の軸制御モード(R36984 + 150*(n-1))に値がある場合、Highビットに設定されます。
- 完了後、Lowビットに設定されます。
M11245 + 40*(n-1) 原点復帰中
- High:原点復帰モード中
- Low:原点復帰モード完了
- 現在の軸制御モード(R36984 + 150*(n-1))が原点復帰モードと表示されている場合、Highビットに設定されます。
- 完了後、Lowビットに設定されます。
M11247 + 40*(n-1) 位置決め中
- High:位置決めモード中
- Low:位置決めモード完了
- 現在の軸制御モード(R36984 + 150*(n-1))が位置制御モードと表示されている場合、Highビットに設定されます。
- 完了後、Lowビットに設定されます。
M11248 + 40*(n-1) 位置決め完了
- High:位置決めモード完了
- リセット:軸位置決めモード中(M11247 + 40*(n-1))がHighビットのときにリセットされます。
M11249 + 40*(n-1) JOG中
- High:JOGモード中
- Low:JOGモード完了
- 現在の軸制御モード(R36984 + 150*(n-1))がJOGモードと表示されている場合、Highビットに設定されます。
- 完了後、Lowビットに設定されます。
M11250 + 40*(n-1) JOG done
- High:JOGモード完了
- リセット:軸JOG中(M11247 + 40*(n-1))がHighビットのときにリセットされます。
M11251 + 40*(n-1) 同期中
- High:クラッチ接続/切断動作中
- Low:クラッチ接続/切断完了
- メインクラッチON/OFF接続方式がスライディング/フォローイングに設定されている場合、接続プロセス中にHighビットに設定されます。
- 完了後、Lowビットに設定されます。
M11252 + 40*(n-1) 同期完了
- High:クラッチ接続完了
- Low:クラッチ切断完了
- 軸同期マスタークラッチON/OFFのステータスです。
M11253 + 40*(n-1) 速度モード中
- High:速度モード中
- Low:速度モード完了
- 現在の軸制御モード(R36984 + 150*(n-1))が速度モードと表示されている場合、Highビットに設定されます。
- 完了後、Lowビットに設定されます。
M11254 + 40*(n-1) 速度モード完了
- High:目標速度到達/速度上限到達
- 速度モードで目標速度に到達した場合=TRUEになります。
- トルクモードで速度制限に到達した場合=TRUEになります。
Implementation
こちらは今回記事の構成で、FATEKのM-PLCとSC3シリーズ ServoとEtherCATで接続します。そしてEXORのexWare703とM-PLCの間はModbusTCPで通信します。

M-PLC Side
最初にM-PLC側を構築します。

通信設定
FatekのM-PLCにEthernet設定などを行うため、System Configuration→Communication Configurationをクリックします。

こちらはM-PLCの通信設定画面になります。

Ethernet→BasicでM-PLCのIPアドレス、そしてModbusTCPとして開放するPORTを設定します。今回の記事ではDefault502にします。

次はModbus Device AllocationでModbusのレジスタMappingを確認できます。なので、Modbus経由でM−PLCのすべてのレジスタにアクセス可能です。

M-PLCの設定完了し、CPUに設定をDownloadしたら、Pingコマンドで通信を確認しましょう。

Programming
次はM-PLCでラダープログラムを作成しましょう。

N001
このプログラムは、システム起動時やある条件が満たされた時に、1秒の遅延を設けてから次の処理を開始するための制御回路です。

N002
ラングN002では、M20をトリガーとしてアラームリセットフラグM21をセットします。これにより、システムで発生したアラームをクリアする準備をします。

N004
このプログラムは、モーション制御機能を使用可能にするための初期化処理を実行します。M11がトリガーとなり、MFSysInit命令がモーション制御システム全体を初期化します。
この初期化処理は、以下のような重要な役割を果たします:
- EtherCAT通信を介したサーボ制御の準備
- モーション制御パラメータの設定
- 軸の状態管理システムの初期化
処理の実行状態はM110で、エラー発生はM111で、完了はM112で監視できます。

N005
このプログラムは、軸1のサーボモーターを有効化/無効化するための制御回路です。M1000がONになると、AX1SERVOONがセットされ、サーボモーターが駆動可能な状態になります。逆に、M1001がONになると、AX1_SERVO_ONがリセットされ、サーボモーターが無効化されます。
セルフホールド回路($AX1_SERVO_ONが自己保持されている)により、M1000のトリガーが一瞬だけでも、M1001でリセットされるまでサーボオン状態が維持されます。これにより、安定したサーボ制御が可能になります。

N007
このプログラムは、軸1のサーボモーターをJOGモード(手動送り)で動作させるための制御回路です。
ラングN007とN008は、JOGコマンドの終了条件を管理します。JOG正転コマンドが終了するか、サーボがオフ状態になった場合に、JOG動作を停止させます。
ラングN009では、M1002をトリガーとしてJOG動作を開始し、M1003の状態に応じて正転または逆転方向に移動します。モード0が指定されているため、JOG初期速度で連続的に移動し続けます。
処理の実行状態、エラー、完了状態はそれぞれM116、M117、M118で監視でき、JOG動作の状態を確認しながら制御を行うことができます。

N011
このプログラムは、軸1のサーボモーターを予め定義されたポイントテーブルの位置に移動させる制御回路です。
実行条件として、M1004がトリガーとなるだけでなく、軸1がサーボオペレーション状態($AX1_IS_SERVO_ON_)であることを確認しています。
これにより、サーボが正常に動作可能な状態であることを保証してから位置決め動作を開始します。
D100に格納されたポイント番号に対応するポイントテーブルのパラメータ(目標位置、最高速度、加速度、減速度など)に従って、軸1が自動的に移動します。

EXOR Side
次はEXOR側です。

プロトコル追加
JMobile StudioのプロジェクトにModbusTCP Clientを追加するため、Configuration→Protocolをクリックします。

次は下図の+ボタンをクリックします。

Drop-ListからModbus TCPを選択します。

Modbus TCPの設定画面が表示されます。

先程UperLogicの設定画面で、M-PLCのModbus TCP Serverは1-Basedだとわかりました。

PLC ネットワーク追加
JMobileにはPLC Networkという便利な機能があり、同じProtocolで複数の接続を構築できます。まず下図のようにPLC NetworkのCheckboxを入れてください。

次はAddボタンをクリックします。

新しいModbus TCP Clientの設定画面が表示されます。

M-PLCのアドレスとModbus TCPの開放PORTを設定し、最後はPLC ModelsにModicon Modbus(1-Based)を設定すればOKです。

結果
こちらは今回の設定になります。

Add Tags
先程も言いましたが、M-PLCのModbus Serverは1-Basedです。

プロトコル設定のときはすでに1-Basedだと設定したので、ここは意識せずにアプリケーションに合わせてアクセスするレジスタをどんどん追加しましょう。

また、一括で連続の複数レジスタにアクセスしたい場合は、Data Typeに配列を使いましょう。例えば下図のように、
- boolean は単一のコイルレジスタです。
- boolean []に設定するとArraysizeの項目が設定でき、下図では127のコイルレジスタに一気にアクセス可能になります。

もちろんそれはBooleanだけではなく、実数でも整数でも配列のアクセス定義は可能です。

こちらは今回記事で定義したTagです。

Screen
こちらは今回EXORのexWare703で作成した画面です。

結果
こちらの動画で動作確認できます。
Fatek.Playing M-PLC with SC Series Servo via etherCAT, screen from EXOR via ModbusTCP
