MELSEC iQ-R のラベルメモリについて調べる

MELSEC iQ-R シリーズでは、**GX Works3** を使った**ラベルベースのプログラミング**が可能です。これにより、従来のデバイス番号ではなく、変数（ラベル）を使ってプログラムを記述することができます。

このラベルが実際にどのような内部構造を持ち、どのようにメモリへ割り当てられているのかを、本記事では掘り下げて解説していきます。

## ラベルメモリとは？

GX Works3で使用されるラベルは、内部では「**ラベルメモリ**」と呼ばれる特別なメモリ領域にマッピングされます。

### 参考動画（公式）

三菱電機公式のYouTubeチャンネルでもラベル機能の解説がありますので、あわせて視聴することをおすすめします。

🔗 [GX Works3 ラベルプログラミング講座（YouTube）](https://www.youtube.com/playlist?list=PLz5P-EyPEYH0bjU8Min9hta35VktLavbz)

## ラベルメモリの正体とは？

ラベルは、実際には以下のような**専用のデバイス**に割り当てられています。

| 記号 | 意味                     | 用途                                         |
|------|--------------------------|----------------------------------------------|
| GV   | Global Variable          | グローバルラベルに割り当て                  |
| UV   | Unit Variable            | ユニットラベルに割り当て                    |
| LV   | Local Variable           | ローカルラベルに割り当て                    |
| LLV  | Local Latch Variable     | ラッチ付きローカルラベル（VAR_RETAIN）      |
| LLP  | Local Label Pointer      | ポインタ型のローカルラベル                  |
| GLP  | Global Label Pointer     | ポインタ型のグローバルラベル                |

これらの情報は「**GX Works3 オペレーティングマニュアル（SH-081214）**」に記載されています。

このエリアを直接モニタする方法はありません。

## ラベルメモリのバックアップ方法

ラベルの割付け情報を確認・保存するには、以下の手順で行います。

1. **GX Works3 の「CPUメモリ操作」画面を開く**
2. **「CPU内蔵メモリ」を選択**
3. **「デバイス/ラベルメモリ」を選択**
4. **「ラベルメモリの読み出し/書き込み」を選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/1947fc6d-9fc6-479c-b7b2-c094356a5648.png)
5. **バックアップ処理を実行**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/13d3e939-9c5c-403b-ad25-158e5420014d.png)



実行後、指定したフォルダにBackupDataというフォルダが作成されラベルのバックアップファイルが保存されます。

 `LabelChg_before.csv` というファイルに、ラベルごとの**割り当てメモリアドレス**が記載されており、内部的なラベルとデバイスの対応関係が把握できます。
GV,LV,LLVについてはこの方法で確認できます。
```
stGLBL3[0].AAA00	GV:7800.0	BOOL	1	60	0
stGLBL3[0].AAA01	GV:7800.1	BOOL	1	60	0
stGLBL3[0].AAA02	GV:7800.2	BOOL	1	60	0
stGLBL3[0].AAA03	GV:7800.3	BOOL	1	60	0

MAIN/ProgPou/stLLBL1[0].AAA00	LV:0.0	BOOL	1	10	0
MAIN/ProgPou/stLLBL1[0].AAA01	LV:0.1	BOOL	1	10	0
MAIN/ProgPou/stLLBL1[0].AAA02	LV:0.2	BOOL	1	10	0
MAIN/ProgPou/stLLBL1[0].AAA03	LV:0.3	BOOL	1	10	0

MAIN/ProgPou/stLLBL2[0].AAA00	LLV:0.0	BOOL	1	12	0
MAIN/ProgPou/stLLBL2[0].AAA01	LLV:0.1	BOOL	1	12	0
MAIN/ProgPou/stLLBL2[0].AAA02	LLV:0.2	BOOL	1	12	0
MAIN/ProgPou/stLLBL2[0].AAA03	LLV:0.3	BOOL	1	12	0

```
UVについてはユニットラベルの割付を確認するとシステムで割り付けられているアドレスを見ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/477a8a2b-fcbe-447e-aa80-af32dea61834.png)

ただこのUVから始まるラベルが何に使えるかはマニュアルに記載がない気が…？
このようにコメントで説明はありますが。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/7c3e370c-36f2-4d56-945e-adc3c7d90a7c.png)

GLP,LLPについてはgx3のプロジェクトファイルを解凍し、中のLabelDataをSQLiteブラウザで読み出すことで、確認することはできます。

lp01,gp01がラベル名でLLP2,GLP0が割付されたデバイス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/306837e4-cc24-4c9c-8fe7-20696239c329.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/fcd4660f-c1c0-422d-8c03-9b6f3483acf8.png)

## デバイス/ラベルメモリエリア設定

R00CPUの場合です。デバイス／ラベルメモリは仕様で252Kバイト(126Word)が上限となります。
これを各それぞれのデバイスで分け合うことになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/e826f7dd-0efa-4801-ab9b-b8220d6fe474.png)

デバイスエリアは下記の設定で点数が設定できます、MELSEC-Qと同じですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/489cc6c0-c6eb-484a-8957-a59e6ea2b8ce.png)

ラベルエリアは下記の設定で点数が設定できます。
ラベルエリア=GV,LV
ラッチラベルエリア=GV(VAR_RETAIN指定時),LLV の事です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/629b1520-5e3f-4e33-bf17-c3a1cd41989f.png)
現状このラベルの使用率はコンパイル正常完了時に見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/bd74ff57-feed-4a4f-b453-b7eeedd7ac1f.png)

ファイル格納エリアを使用するファイルレジスタは下記の設定で点数が設定できます。
64Kワード領域があるので、最大64Kワードまで設定可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/161034ff-b16c-41ea-b3de-82d38131f0c6.png)

## MELSEC iQ-Fの場合
MELSEC iQ-Fのデバイス/ラベルメモリエリア設定です。
MELSEC iQ-Fは容量が少ないためこのような機能になっているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/22d843b6-74f4-4a20-b9db-1fdf43d3d092.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/8044b55b-2821-4c10-881b-2c268a7b4b29.png)

https://www.mesw.co.jp/technology/archives/techlib-msw_35_04.html