# Mitsubishi MC

> MC プロトコル（3E フレーム）で Mitsubishi MELSEC の PLC につなぎます。デバイスの記号、10 進と 16 進の番号、読み取り長。

**Mitsubishi MC** のドライバーは、TCP に載るバイナリの 3E フレーム、つまり Q、L、iQ の系列が話すフレームを使う MC プロトコルで、Mitsubishi MELSEC の PLC と話します。値は、おなじみの MELSEC のデバイスの書き方、つまりデバイスの記号に番号を続けた `D100` や `M50` のような形で指します。[Connector](connector) の Mitsubishi MC のドライバーの下に機器を追加してください。パネルは、このプロトコルが使う項目だけを見せます。

## 接続 {#connection}

| 項目 | 意味 | 既定 |
| --- | --- | --- |
| **ホスト** | PLC のイーサネットのインターフェースの IP アドレスかホスト名。 | 空 |
| **ポート** | MC プロトコルの接続の TCP のポート（1 から 65535）。欄が空のときは 5007 が灰色で表示され、機器はそのポートで呼び出されます。0 で保存された機器も同じように表示されます。 | 5007 |

機器の見出しは、組み立てられた接続先を見せます。たとえば `mcp://192.168.0.20:5007` です。このドライバーには読み出し周期の項目がありません。そのタグは 1 秒に 1 回読まれます。PLC の側には、選んだポートに TCP でバイナリの MC プロトコル（SLMP）の接続が必要です。どこで作るかは [PLC の準備](#prepare-the-plc) にあります。

## PLC の準備 {#prepare-the-plc}

MELSEC の CPU が MC プロトコルを提供するのは、プロジェクトで作った接続の上だけです。また、Ethernet ポートが許可していなければ、RUN 中の書き込みを拒否します。設定はエンジニアリングツールで行い、パラメーターと一緒に CPU へ書き込みます（**Online > Write to PLC**）。CPU は起動時にこれを読むので、書き込んだあとで CPU をリセットするか電源を入れ直します。

| 設定 | GX Works3（iQ-R、iQ-F） | GX Works2（Q、L） | 設定がないと |
| --- | --- | --- | --- |
| 機器の**ポート**での TCP の MC 接続 | **Module Parameter > Ethernet Port > Basic Settings > External Device Configuration**：**SLMP Connection Module** を表にドラッグし、Protocol を TCP、**Port No.** を機器のポートにします。 | **PLC Parameter > Built-in Ethernet Port Setting > Open Setting**：Protocol TCP、**Open System** MC Protocol、**Host Station Port No.** に機器のポートを設定した行を作ります。 | CPU はそのポートへの接続を拒否し、機器はオフラインのままです。 |
| **Communication Data Code** をバイナリに | **Module Parameter > Ethernet Port > Basic Settings**：**Binary**。 | **PLC Parameter > Built-in Ethernet Port Setting**：**Binary Code**。 | CPU は ASCII 文字で答えるか、まったく答えず、どのタグも読めません。 |
| RUN 中の書き込みを許可 | iQ-R：**Module Parameter > Ethernet Port > Basic Settings** の **Enable/Disable Online Change** を **Enable All (SLMP)** に。 | **PLC Parameter > Built-in Ethernet Port Setting** の **Enable online change (FTP, MC Protocol)** にチェック。 | CPU は普通に読み出しに応じますが、RUN 中はすべての書き込みを終了コード 0x0055 で拒否します。 |

Q や L の CPU はポート 5000 から 5009 を自分で使うため、その MC 接続には機器の既定値である 5007 を割り当てられません。5010 などの別のポートを割り当て、機器の**ポート**にもそれを入力します。GX Works2 は **Host Station Port No.** を 16 進数で表示することがあり、その場合 5010 は 1392 です。データコードは Ethernet ポート全体で 1 つなので、そのポートでこの CPU と ASCII で通信しているほかのプログラムも、バイナリに切り替える必要があります。

CPU がポートを拒否したとき、ASCII で答えたとき、RUN 中の書き込みを拒否したときは、機器のページがどの設定かを、この手順と機器が接続するポートとともに通知で伝えます。通知は CPU が受け入れると自然に消えます。RUN 中に拒否された書き込みについては、書き込みを拒否されたタグを挙げます。診断ログとエージェントも同じ手順を読みます。

## アドレス指定 {#addressing}

Mitsubishi のタグは、タグの「信号源」のカードの 2 つの項目でアドレスを取ります。

| 項目 | 意味 | 受け付ける値 | 既定 |
| --- | --- | --- | --- |
| **デバイスアドレス** | MELSEC のデバイスの記号に番号を続けたもの、たとえば `D100`。必須です。 | 自由記述 | 空 |
| **読み取る長さ（バイト。空欄なら自動）** | 1 回の読み取りで運ぶバイト数。空欄ならデータ型から大きさを決めます。 | 1 以上、または空欄 | 空欄 |

アドレスは大文字と小文字を区別せず、いちばん長く一致する記号が勝つので、`SD100` は特殊レジスターの 100 であって、ステップリレー `S` ではありません。番号は、三菱が 16 進で数えるデバイス（X、Y、B、W、SB、SW、DX、DY）では **16 進**、そのほかでは 10 進です（`X1F` は入力の 0x1F です）。受け付けるデバイスの記号は次のとおりです。

| 記号 | デバイス | 番号の数え方 |
| --- | --- | --- |
| `M` | 内部リレー | 10 進 |
| `SM` | 特殊リレー | 10 進 |
| `L` | ラッチリレー | 10 進 |
| `F` | アナンシエータ | 10 進 |
| `V` | エッジリレー | 10 進 |
| `S` | ステップリレー | 10 進 |
| `X` | 入力 | 16 進 |
| `Y` | 出力 | 16 進 |
| `B` | リンクリレー | 16 進 |
| `SB` | 特殊リンクリレー | 16 進 |
| `DX` | ダイレクト入力 | 16 進 |
| `DY` | ダイレクト出力 | 16 進 |
| `D` | データレジスター | 10 進 |
| `SD` | 特殊レジスター | 10 進 |
| `R` | ファイルレジスター | 10 進 |
| `ZR` | 拡張ファイルレジスター | 10 進 |
| `W` | リンクレジスター | 16 進 |
| `SW` | 特殊リンクレジスター | 16 進 |
| `Z` | インデックスレジスター | 10 進 |
| `TC` / `TS` / `TN` | タイマーのコイル / 接点 / 現在値 | 10 進 |
| `SC` / `SS` / `SN` | 積算タイマーのコイル / 接点 / 現在値 | 10 進 |
| `CC` / `CS` / `CN` | カウンターのコイル / 接点 / 現在値 | 10 進 |

土台になっている MC のライブラリは、記号 `TT`、`TM`、`CT`、`CM`、`A` も受け付けます。「信号源」のカードの読み取り専用の**取得元のアドレス（バス上）**の行が、編集しているそばから組み立てられたアドレスを見せます。

## データ型 {#data-types}

**データ型**の選択肢には、このドライバーが扱う 4 つの型が出ます。

| データ型 | 自動の読み取り長 | 備考 |
| --- | --- | --- |
| Boolean | 1 バイト | ビットのデバイスでは名指しした 1 つのリレー、ワードのデバイスでは 0 でないワード |
| Int32 | 4 バイト | 連続する 2 つの 16 ビットのワード、たとえば `D100` と `D101` |
| Float | 4 バイト | IEEE の単精度を持つ、連続する 2 つのワード |
| String | 16 バイト | 読み取りの中身の、最初の NUL までの文字 |

ワードのデータは MELSEC 固有のリトルエンディアンで届き、自動的に解釈されます。バイト順の選択肢はありません。32 ビットの値は、連続する 2 つのワードのデバイスにまたがります。16 文字より長い文字列では、保存されている文字に届くよう**読み取り長**を上げてください。**読み取り長**はバイト数ですが、プロトコルは 16 ビットのワード単位で運ぶので、奇数の長さは、その最後のバイトを運ぶワードまで切り上げられます。

ビットのデバイス、つまりドライバーが 1 つずつリレーを読むデバイスは、`X`、`Y`、`M`、`L`、`F`、`V`、`B`、`S`、`TS`、`TC`、`SS`、`SC`、`CS`、`CC`、`SB`、`DX`、`DY` です。そこでのブール値のタグは、入力したアドレスについてだけ答え、ほかについては答えません。そのほかの記号はすべてワードのデバイスで、タイマーやカウンターの現在値（`TN`、`SN`、`CN`）とリンクレジスター（`W`、`SW`）もそこに入り、そこではワードの全体が判断します。`0x0100` を持つ `D100` は true と読まれます。

PLC が拒否した読み取り（範囲の終わりを越えたアドレスなど）は、そのタグを値のないままにし、エラーが終了コードとマニュアルでの意味を示します。たとえば `end code 0xC056 (the request goes past the last address of the device)` です。機器のほかのタグは読み続けます。

## 書き込み {#writes}

**アクセス**が読み書きか書き込みのみのタグは、読み取りと同じデバイスアドレスへ書き込めます。ビットのデバイスへのブール値の書き込みは、名指しした 1 つのリレーを立てるか落とすかし、隣には触れません。ほかはすべて 16 ビットのワード単位で書かれます。Int32 と Float は 2 ワード、ワードのデバイスのブール値は 1 ワード、文字列はそのタグの**読み取り長**の全体で、前に文字の UTF-8 のバイトを、その後ろに 0 を並べ、最後のワードまで切り上げます。したがって、長い文字列の上に短い文字列を書くと値が丸ごと置き換わり、古いものは何も残りません。宣言した長さに収まらない文字は、切り詰められるのではなく、長さを診断ログに残して拒否されます。新しいタグは読み取りのみから始まります。

PLC が拒否した書き込みは拒否として返り、同じように終了コードとその意味を示します。CPU が RUN 中であるために拒否された書き込み（終了コード 0x0055）は、それを許可する設定とともに機器のページにも示されます（[PLC の準備](#prepare-the-plc) を参照）。

## 機器検出 {#discovery}

このドライバーの MC プロトコルには同報による機器検出がないので、Connector は機器検出のボタンを出しません。機器とそのアドレスは手で追加してください。

## 知っておくとよいこと {#good-to-know}

- このドライバーでは、読み出しはどのタグも 1 秒に固定です。いつもの読み出し周期の項目は出ません。
- このドライバーが話すのはバイナリの 3E フレームだけで、ASCII は使いません。ASCII コードに設定された接続では何も読めません（[PLC の準備](#prepare-the-plc) を参照）。
- 届かない PLC があっても起動時の損はありません。機器は背後で再試行を続け、接続がつながるまでそのタグは品質が悪いものとして読まれます。
- TCP 接続が開くまでの時間は 5 秒、各要求への応答を待つ時間は 10 秒です。接続を受け入れたのに時間内に答えない PLC は、届かない PLC と同じように切断して再試行します。そのエラーにはポートと、よくある 2 つの理由が示されます。ポートが ASCII コードに設定された Q や L の CPU はバイナリの要求に何も答えないこと、そしてそのポートで MC プロトコルを話さない機器も答えないことです。
