top of page

変数定義によるデータ消失

執筆者の写真: N-S
N-S
8月25日
読了時間: 3分

株式会社アーチのN-Sです。

PLCのラダープログラムを作成する際、昔ながらの「デバイスアドレス(D100など)」を直接指定する方法から、最近主流の「変数(タグ)管理」に移行した方も多いのではないでしょうか。

名前で管理できるので非常に便利な変数機能ですが、「ある仕様」を正しく理解できていないことで、トラブルとなることがあります。


今回は、実際に経験した「変数定義の失敗談」をお話しします。



どんなトラブル内容?


 ある設備のプログラムを改修し、現地で変更作業を行いました。それなりの規模の改修ではあるものの既存の変数定義をそのまま流用できる作業のため簡単なものでした。


変更作業が完了したところ、PLC内で保持(リテイン)されているはずのメモリ情報が化ける、初期化されているなど不具合が見つかりました。



原因:変数の「保持領域」指定時の「自動割り付け」


 原因は、ラダープログラムで変数を定義する際、「保持領域(リテイン領域)のアドレスを明示的に指定せず、PLCの自動割り付けに任せていたこと」でした。


一般的なPLCで変数を使用する場合、手動で特定のアドレス(例:`D1000`など)を割り付けなくても、システムが自動で空いているメモリ領域を割り振ってくれる機能があります。

 デバイスアドレスを指定する手間が省けますが、問題点があります。

それはプログラムを追加・修正して再度コンパイル(ビルド)を行うと、PLCの内部では変数の再配置が行われます。アドレスを指定していない変数は、修正前とは全く違うメモリ番地に変更されてしまいます。


 変数定義時に「保持属性」などのチェックを入れることでPLC電源が落ちてもメモリの内容は保持されますが、プログラム変更によって変数Aの中身が「メモリ番地①」から「メモリ番地②」に引っ越してしまった場合、変数Aは変更先(メモリ番地②)にあった別のデータ(または初期値)を読み込んでしまいます。



どう対策するか?


 このトラブルを防ぐには「重要なデータに利用する変数は自動割り付けに頼らず、アドレスを指定(明示)する」ことです。

設定値、レシピデータ、生産実績、パラメータなど、電源OFFやプログラム変更後も絶対に維持したいデータ(保持メモリを使用する変数)は、変数定義の際に必ず「デバイス指定(例:`D1000`など)」を行い、アドレスを固定します。これによりプログラムを書き換えても、変数が指す場所は変更されません。


 変数定義でアドレスを指定せず使用する場合は、そのスキャン内だけで完結する一時的なフラグ(ローカル変数)や、消えても問題ない一時的な計算用バッファなどに限定して使用することで安全に使用できます。




まとめ


 変数を活用したラダー作成はプログラムの可読性を上げ、流用性を高める手法です。しかし、PLCのメモリ管理(アドレスの割り付けルール)を理解していないと、今回のようなトラブルに遭遇します。

  1. 保持したいデータ = アドレスを必ず固定する(手動割り付け)。

  2. 消えてもいいデータ = 自動割り付けで効率化する。


みなさまもプログラム変更を行う際は、変数がどこに配置されているか一度確認してみてください。


アーチでは、今回ご紹介したようなPLCプログラムの作成や改修に関する実績が多数ございます。

PLCに関するお困りごとやご相談がありましたら、ぜひお気軽にお問い合わせください。


コメント


この投稿へのコメントは利用できなくなりました。詳細はサイト所有者にお問い合わせください。
bottom of page