---
name: iec61131-3-motioncontrol-melsec
description: |
  三菱電機 MELSEC iQ-R シリーズの **PLCopen Motion Control FBライブラリ** を使った
  STコードを書くためのSkill。シンプルモーションユニット（RD77GF, RD77MS）と、
  CC-Link IE フィールドネットワーク マスタユニット（RnENCPU, RJ71GF11-T2,
  RJ71EN71）+ MR-J4-GFサーボの構成に対応。

  対象ライブラリ:
  - **MotionControl_RD77** (RD77GF, RD77MS 用、26FB)
  - **MotionControl_J4GFIO** (RJ71GF11-T2, RJ71EN71, RnENCPU, RD77GF 用、12FB)

  本Skillは「STコードを書く」ところまでを担当。FBそのものは三菱公式から
  ダウンロードする内容保護形式のライブラリファイル（.mslm）に同梱されており、
  本Skillは生成しない。STコードからエンジニアリングツール用XMLへの変換は
  jiecc-skill に移譲する。

  ## 起動する依頼パターン

  ### 1. RD77 / J4GFIO のSTコード作成依頼
  - 「RD77GFで軸を動かしたい」「RD77MSで原点復帰させて」
  - 「シンプルモーションでPLCopen FBを使って位置決め」
  - 「RJ71GF11-T2 + MR-J4-GF でサーボ制御」
  - 「RnENCPU でCC-Link IE Field 経由でモータ動かす」
  - 「PLCopen の MC_Power, MC_MoveAbsolute を呼び出すSTを書いて」

  ### 2. PLCopen Motion Control FB の使い方の質問
  - 「MC_Power と MC_MoveAbsolute の違い」「Execute型 vs Enable型」
  - 「AXIS_REF と AXIS_REF_J4GF の違い」「MasterModule の値」
  - 「PLCopen 状態遷移（Disabled / Standstill / DiscreteMotion 等）」
  - 「軸エラーの読出しと復旧（MC_ReadAxisError, MC_Reset）」

  ### 3. ユニット選定・構成相談
  - 「RD77GF と RD77MS の違い」「RJ71GF11-T2 と RJ71EN71 の使い分け」
  - 「シンプルモーションユニットを使うならどのライブラリ？」
  - 「CC-Link IE Field マスタユニットで使えるFBは？」
  - 「RD77GF + J4GFIO 併用時の注意点」

  ### 4. ライブラリ取込み・設定の質問
  - 「MotionControl_RD77.mslm のダウンロード先」
  - 「ライブラリの登録手順」「マクロ型 / サブルーチン型」
  - 「G_stLinkIEF のグローバルラベル設定」
  - 「サーボパラメータ PA19 を 00ABh に設定する理由」

  ### 5. エラー対応
  - 「ErrorID 1100 とは」「1101 / 1200 / 1203 / 1207 のエラー」
  - 「MC_Reset の使い方」「軸エラー復旧シーケンス」
  - 「サーボアラームと FB エラーの違い」

  ## 起動してはいけない依頼パターン

  - **RD78G(H) / モーションCPU の依頼** — 別ライブラリ（MotionControl_RD78）であり、
    本Skillの対象外
  - **MR-J4-A / MR-J4-B 系（CC-Link IE 非対応）の依頼** — SSCNETIII/H 直結や
    アナログ・パルス列指令は対象外（RD77MS 経由でのSSCNETIII/H は対象内）
  - **iQ Monozukuri 製品単独の依頼** — 本ライブラリと組み合わせる場合のみ対応
  - **オムロン・キーエンス・CODESYSの PLCopen FB** — 本Skillは三菱電機専用

  ## 暗黙の連携

  本Skillで生成したSTコードを GX Works3 用 XMLに変換したい場合、ユーザーが
  「XMLにして」「GX Works3 にインポートしたい」と依頼すれば、
  [jiecc-skill](https://github.com/mokouliszt/jiecc-skill) に自然に引き継がれる。

  ST言語そのものの仕様（データ型・制御構造・標準POU）に関する質問は、
  [iec61131-3-st-skill](https://github.com/mokouliszt/iec61131-3-st-skill)
  を併用すること。
---

# IEC 61131-3 Motion Control (Mitsubishi MELSEC) Skill

三菱電機 MELSEC iQ-R シリーズの **PLCopen Motion Control FBライブラリ**
（MotionControl_RD77, MotionControl_J4GFIO）を使った ST言語プログラム作成を
支援するSkill。

参考資料: 三菱電機公式マニュアル「PLCopen Motion Control FBリファレンス」
（BCN-B62005-756-G）

---

## ★必読★ FB本体は本Skillでは生成しない

本Skillで生成するのは **「FBを呼び出して使う」ST コード** のみ。

FB本体・ローカルラベル・グローバルラベル（`G_stLinkIEF` 等）・構造体本体
（`AXIS_REF` の `stMC_RD77` 等のメーカ設定用メンバ）は、**三菱電機が内容保護形式
（.mslm）で配布**しており、ユーザーは公式から取得して GX Works3 にインポートする
必要がある。

### ライブラリ入手先

> https://www.mitsubishielectric.co.jp/fa/download/software/detailsearch.page?mode=lib&kisyu=/ssc&shiryoid=0000000094&lang=1&select=3&softid=3&infostatus=2_2_7&viewradio=0
>
> （三菱電機 FA ダウンロードサイト「サーボシステムコントローラ 制御機器 ダウンロード」）

入手するファイル:
- `MotionControl_RD77_*.mslm` — シンプルモーションユニット用
- `MotionControl_J4GFIO_*.mslm` — CC-Link IE Field マスタユニット用

詳細手順は `references/library-setup.md` を参照。

---

## 対応ユニット早見表

| 構成 | ユニット形名（網羅） | 必要ライブラリ | 接続方式 | 最大軸数 |
|---|---|---|---|---|
| シンプルモーション | **RD77GF** | MotionControl_RD77 | CC-Link IE Field（PN03=0 モーションモード） | 32 |
| シンプルモーション | **RD77MS** | MotionControl_RD77 | SSCNETIII/H 直結 | 16 |
| CC-Link IE Field マスタ | **RJ71GF11-T2** + RnCPU | MotionControl_J4GFIO | CC-Link IE Field（PN03=1 I/Oモード） | 120 |
| CC-Link IE Field マスタ | **RJ71EN71** + RnCPU | MotionControl_J4GFIO | CC-Link IE Field（PN03=1 I/Oモード） | 120 |
| CPU内蔵CC-Link IE Field | **RnENCPU** | MotionControl_J4GFIO | CC-Link IE Field（PN03=1 I/Oモード） | 120 |
| **RD77GF を J4GFIO マスタとして使用** | **RD77GF** | MotionControl_J4GFIO（軸番号重複不可、RD77GF + J4GFIO 併用） | CC-Link IE Field | （J4GFIO側 120） |

⚠️ RJ71GF11-T2, RJ71EN71 は単体では動作せず、必ず **RnCPU との組合せ**で使用。
RnENCPU は CPU 内蔵の CC-Link IE Field 機能を使う。

---

## ファイル構成

```
iec61131-3-motioncontrol-melsec/
├── SKILL.md                              （このファイル）
├── references/
│   ├── overview.md                         全体概要・PLCopen 状態遷移・ライブラリ概要
│   ├── library-setup.md                    ★ライブラリ入手・登録・設定手順
│   ├── error-handling.md                   エラーコード一覧・復旧パターン
│   ├── common-patterns.md                  典型的な実装パターン
│   ├── units/                              ユニット別解説（形名省略なし）
│   │   ├── rd77ms.md                         RD77MS（シンプルモーション・SSCNETIII/H）
│   │   ├── rd77gf.md                         RD77GF（シンプルモーション・CC-Link IE Field）
│   │   ├── rj71gf11-t2.md                    RJ71GF11-T2（マスタ）+ RnCPU
│   │   ├── rj71en71.md                       RJ71EN71（マスタ）+ RnCPU
│   │   └── rnencpu.md                        RnENCPU（CPU内蔵マスタ）
│   └── fbs/
│       ├── common-io/                      共通の入出力構造体・グローバルラベル
│       │   ├── axis-ref.md                   AXIS_REF（RD77用）
│       │   ├── axis-ref-j4gf.md              AXIS_REF_J4GF（J4GFIO用）
│       │   ├── mc-input-ref.md               MC_INPUT_REF_DI16
│       │   ├── mc-output-ref.md              MC_OUTPUT_REF_DO16
│       │   ├── mc-direction.md               MC_DIRECTION（方向選択）
│       │   ├── master-module-ref.md          MASTER_MODULE_REF（マスタ選択）
│       │   └── g-stlinkief.md                G_stLinkIEF グローバルラベル
│       ├── rd77/                           MotionControl_RD77 全26FB
│       │   ├── mc-power.md
│       │   ├── mcv-home.md
│       │   ├── mc-stop.md
│       │   ├── mc-moveabsolute.md
│       │   ├── mc-moverelative.md
│       │   ├── mc-moveadditive.md
│       │   ├── mc-movevelocity.md
│       │   ├── mc-torquecontrol.md
│       │   ├── mc-setposition.md
│       │   ├── mc-setoverride.md
│       │   ├── mc-readparameter.md
│       │   ├── mc-writeparameter.md
│       │   ├── mc-readactualposition.md
│       │   ├── mc-readactualvelocity.md
│       │   ├── mc-readactualtorque.md
│       │   ├── mc-readstatus.md
│       │   ├── mc-readaxisinfo.md
│       │   ├── mc-readaxiserror.md
│       │   ├── mc-reset.md
│       │   ├── mc-readdigitalinput.md        +DI16
│       │   ├── mc-readdigitaloutput.md       +DO16
│       │   ├── mc-writedigitaloutput.md      +DO16
│       │   ├── mcv-readservoparameter.md     +RD77GF（RD77GF専用）
│       │   ├── mcv-writeservoparameter.md    +RD77GF（RD77GF専用）
│       │   ├── mcv-jog.md
│       │   └── mcv-inch.md
│       └── j4gfio/                         MotionControl_J4GFIO 全12FB
│           ├── mc-power.md
│           ├── mcv-home.md
│           ├── mc-stop.md
│           ├── mc-moveabsolute.md
│           ├── mc-moverelative.md
│           ├── mc-readactualposition.md
│           ├── mc-readstatus.md
│           ├── mc-readaxisinfo.md
│           ├── mc-readaxiserror.md
│           ├── mc-reset.md
│           ├── mcv-readservoparameter.md
│           └── mcv-writeservoparameter.md
└── examples/                             実用パターン集
    ├── basic-positioning-rd77ms.txt
    ├── basic-positioning-rd77gf.txt
    ├── basic-positioning-j4gfio.txt
    ├── multi-axis-sequence.txt
    └── error-recovery.txt
```

---

## 使い方ガイド

### ユニット形名から探す

| 質問 / 依頼 | 参照すべきファイル |
|---|---|
| RD77MS で軸制御したい | `references/units/rd77ms.md` |
| RD77GF で軸制御したい | `references/units/rd77gf.md` |
| RJ71GF11-T2 マスタを使いたい | `references/units/rj71gf11-t2.md` |
| RJ71EN71 マスタを使いたい | `references/units/rj71en71.md` |
| RnENCPU を使いたい | `references/units/rnencpu.md` |

### FB機能から探す

| やりたいこと | 参照すべきFB |
|---|---|
| 軸を運転可状態に | `mc-power.md` |
| 原点復帰 | `mcv-home.md` |
| 強制停止 | `mc-stop.md` |
| 絶対値位置決め | `mc-moveabsolute.md` |
| 相対値位置決め | `mc-moverelative.md` |
| 目標位置変更（移動中の補正） | `mc-moveadditive.md`（**RD77のみ**） |
| 速度制御 | `mc-movevelocity.md`（**RD77のみ**） |
| トルク制御 | `mc-torquecontrol.md`（**RD77のみ**） |
| 現在位置変更 | `mc-setposition.md`（**RD77のみ**） |
| オーバーライド | `mc-setoverride.md`（**RD77のみ**） |
| パラメータ読出/書込 | `mc-readparameter.md` / `mc-writeparameter.md`（**RD77のみ**） |
| 現在位置/速度/トルク読出 | `mc-readactualposition.md` 等 |
| ステータス読出 | `mc-readstatus.md` |
| 軸情報・軸エラー読出 | `mc-readaxisinfo.md` / `mc-readaxiserror.md` |
| エラーリセット | `mc-reset.md` |
| デジタル入出力読出/書込 | `mc-readdigitalinput.md` 等（**RD77 のみ**） |
| サーボパラメータ読出/書込 | `mcv-readservoparameter.md` / `mcv-writeservoparameter.md` |
| JOG運転 | `mcv-jog.md`（**RD77のみ**） |
| インチング運転 | `mcv-inch.md`（**RD77のみ**） |

### よくあるシナリオ

| シナリオ | 参照すべきファイル |
|---|---|
| ライブラリの入手・取込み | `references/library-setup.md` |
| エラーコード調査 | `references/error-handling.md` |
| PLCopen 状態遷移を理解したい | `references/overview.md` |
| 典型的な実装例を見たい | `references/common-patterns.md` または `examples/*.txt` |

---

## ライブラリの選択フローチャート

```
ユーザーが使いたい構成は？
│
├─ シンプルモーションユニット
│   ├─ RD77MS（SSCNETIII/H 直結）
│   │   → MotionControl_RD77 のみ使用
│   │     references/units/rd77ms.md
│   │
│   └─ RD77GF（CC-Link IE Field 接続）
│       ├─ MR-J4-GF を「モーションモード」(PN03=0) で使用
│       │   → MotionControl_RD77 を使用
│       │     references/units/rd77gf.md
│       │
│       └─ MR-J4-GF を「I/Oモード」(PN03=1) で使用、
│            または併用
│           → MotionControl_J4GFIO を使用
│             references/units/rd77gf.md（J4GFIO併用節）
│
└─ CC-Link IE Field マスタユニット + RnCPU/RnENCPU
    ├─ RJ71GF11-T2 + RnCPU
    │   → MotionControl_J4GFIO
    │     references/units/rj71gf11-t2.md
    │
    ├─ RJ71EN71 + RnCPU
    │   → MotionControl_J4GFIO
    │     references/units/rj71en71.md
    │
    └─ RnENCPU（CPU内蔵CC-Link IE Field）
        → MotionControl_J4GFIO
          references/units/rnencpu.md
```

---

## ST 言語の最小コード例（MC_Power の呼出し）

```iec
//{retro_caps}
program MainProgram
    var
        // 軸情報（FB本体に同梱の AXIS_REF 構造体を使用）
        Axis1: AXIS_REF;
        // FBインスタンス（FB本体は MotionControl_RD77.mslm から）
        FB_Power: MC_Power_RD77;
        // 入出力
        bEnable: BOOL;
        bStatus: BOOL;
        bError: BOOL;
        wErrorID: WORD;
    end_var
    //
    //{st}
    // 軸番号 / ユニット先頭I/O番号 を初回設定
    // （Enable=ON 前に必ず設定すること）
    Axis1.AxisNo := 1;
    Axis1.StartIO := 16#0010;     // 例: ユニット先頭I/O = 0010
    //
    // FB呼出し
    FB_Power(
        Axis             := Axis1,
        Enable           := bEnable,
        NotOperatePlcRdy := false,
        Status           => bStatus,
        Error            => bError,
        ErrorID          => wErrorID
    );
    //{end}
end_program
```

このSTテキストを GX Works3 にインポートするには、jiecc-skill による IEC 61131-10 XML 変換が必要。
GX Works3 向けは **2段階変換が必須**：

1. `jiecc.exe --retro_caps source.txt -t mitsubishi -o output.xml`
2. `python fix-gx-xml.py output.xml`（`<Task>` 除去 + `MC_*_RD77` → `MC_*+RD77` 変換）

`fix-gx-xml.py` は jiecc-skill の `scripts/fix-gx-xml.py` に同梱。

---

## 重要な共通制約事項（要注意）

すべての FB 共通：

1. **割込みプログラム内では使用不可**
2. **FOR-NEXT等の単発実行スコープ内禁止**（Execute/Enable OFF処理ができない）
3. **入力ラベルは Execute/Enable=ON前に必ず設定**（ON時にラッチされる）
4. **Execute=ON 後は他入力を変更しない**（一部の随時実行型FBを除く）
5. **インデックスレジスタ Z8/Z9 を使用**（割込みでは使用禁止）
6. **MotionControl_J4GFIO 使用時はサーボパラメータ PA19 = 00ABh 必須**
7. **マクロ型/サブルーチン型は CPU ファームウェアバージョン 26 以降必須**
8. **コンパイル時に2重コイル警告が出ることがあるが動作上問題なし**

詳細は `references/overview.md` を参照。

---

## 出典・著作権

本Skillは、三菱電機株式会社「**PLCopen Motion Control FBリファレンス**
（BCN-B62005-756-G）」を主たる参考資料として、ライブラリの使用方法を
日本語で体系化したもの。同文書はフリーで配布されている。

ライブラリファイル（.mslm）そのものは三菱電機の著作物であり、本Skillには
含まれない。利用者は公式サイトから直接ダウンロードすること。

商標:
- MELSEC, MELSERVO, MELSOFT, GX Works3 は三菱電機株式会社の登録商標または商標
- CC-Link IE は CC-Link協会の登録商標
- PLCopen は PLCopen 協会の登録商標
