はじめに
ラッチラベルは値が保持されない条件が多く、ラッチデバイスと同じ感覚では使えないので注意が必要です。
私が気付いた範囲で注意点を記事にします。
プログラム変更時にリセットされる(SM9353ONで回避)
プログラムファイル,FBファイル,グローバルラベル設定ファイルを変更した場合にラッチラベルはクリアされてしまします。
これを防ぐにはSM9353をONにする必要があります。
(SM9353は停電保持されます)
CPUパラメータ変更でリセットされる
SM9353をONにしていてもCPUパラメータを変更した場合はリセットされます。
プログラムファイルやFBファイルの追加もCPUパラメータ変更となるので注意が必要です。
わたしの場合、運用開始するまで汎用ファンクションブロックを使用していなかったプログラムに汎用ファンクションブロックを追加した事でCPUパラメータ変更となって、ラッチラベルがリセットされてしまいました。
(プログラム設定-FB/FUNファイル設定にSlibFbFileが追加されます)
汎用ファンクション/ファンクションブロックの使用を想定して、最初からプログラム中のどこかに配置しておくという対策も考えられます。
プログラム中でラッチラベルを使用していないのにラッチラベル領域が減る
FBインスタンスを作成すると16ワード分のラッチラベル予約領域が確保されます。
なので、FX5UJはラッチラベル領域1024ワード固定なのでFBインスタンス64個までしか配置できません。
汎用ファンクションブロックでは予約領域は確保されないですし、XMLファイルでファンクションブロックを読み込めば予約領域を変更出来るのではと睨んでいますが、まだ確認出来ていません。
2025/06/02追記 「C:\Program Files (x86)\MELSOFT\GPPW3\SampleData\IEC61131-10XML」内の「sample.xml」を読み込んで見た所、予約領域設定は現在のCPUタイプではサポートされていませんと出力されました。
メーカーには予約領域を変更できるように代理店を通して依頼していますが届いているかは不明です。
全変換への対応について
FX5ではラベルメモリのバックアップは出来ません。
「教えて!GX3号 第76回 プログラム更新前のラベルメモリをバックアップ!」
とありますが、これはFX5シリーズでは対応していません。
FBならVAR_IN_OUTクラスなどでラッチデバイスと関連付けてデバイスで値が保持されるように対策します。
おわりに
いちおうこれでオマケも含めて「いわゆる構造化プログラミング」への道シリーズを終わりにします。
私も体系的な知識を持っているわけでは無いので、これ以上の発信がノイズにならないか心配になってます。
この記事は2025年の5月に書いているのですが、5月頭にMXコントローラが三菱から発表され、そのマニュアルを参照するとSM9353の様な仕様は無くなっているようです。
メーカーも変な仕様だと考えたのではと想像しています。