スポンサーリンク
PLC

【三菱シーケンサ】連続した大量のビットデバイスの変化を監視するラダープログラム

ラダープログラムの作成テクニックとして、連続した大量のビットデバイスの変化を監視するラダープログラムをいくつか紹介してみたいと思います。

用途として最もイメージしやすいのは、アラーム用のビットデバイスの監視でしょうか?

ラダープログラムは、複数の機能命令(応用命令)を組み合わせて使用することにより、複雑な処理を行うことができるようになっています。

頑張って解説したいと思いますので、最後まで目を通していただけると幸いでございます。

スポンサーリンク

プログラムの紹介

早速、サンプルプログラムをご紹介させていただきます。

以下の画像をクリックするとより大きな画像を表示できるはずです。

三菱シーケンサエンジニアリングソフトGX Works2を使用して作成しています。

常時オン接点として、特殊リレーSM400を使用していることからもお分かりかと思いますが、CPU設定をQCPUに設定しております。

連続した大量のビットデバイスの変化を監視するラダープログラム
スポンサーリンク

このプログラムでは、M0からM127までの連続した128個のビットデバイスが変化した場合、変化検出用のビットデバイスM1000が1スキャンの間だけONする動作を行います。

M1000にはパルス化命令「PLS」を使用していますが、PLSを使用しなくても、M1000は1スキャンの間だけしかONしません。

もう少しだけ、詳しく上記プログラムの動作を説明します。

  • 監視対象となるM0からM127までの連続した128個のビットデバイスを、16bit×8個のデータに分けて、2バイトの数値データとして、データレジスタ領域のD100〰D107()へブロック転送(BMOV命令を使用)
  • D100〰D107に格納された8個の数値データを合算して、現在値としてデータでジスタ領域のD120(32bitt)へ転送(WSUM命令を使用)
  • 過去値が格納されているD122(32bit)と現在値が格納されているD122(32bit)を比較して、差異があればM1000が1スキャンだけONする。
  • 比較後に、過去値D122(32bit)を現在値D120(32bit)を上書きする。

という風な具合です。

先頭の、BMOV命令では、ビットデバイスの桁指定を使用しています。

K4M0と指定した場合は、M0からM15までの16点のビットデバイスデータを、16bitの数値データとして扱うことができます。

M0〰M15の16個のビットデバイスを2バイトの数値データとして扱う

さらにブロック転送命令「BMOV」指令中にて、この16ビットデータをn点分を以下の表の表に転送することができます。

転送個数転送元 転送先
K1K4M0D100
K2K4M16D101
K3K4M32D102
K4K4M48D103
K5K4M64D104
K6K4M80D105
K7K4M96D106
K8K4M112D107
BMOV命令とビットデバイスの桁指定

続いて、「WSUM」命令を使用することで、これらのD100からD107に格納されている数値データを合算することができます。

ただし、D100からD107に格納されている数値は、対応するビットデバイス領域にて、ONしているビットデバイスの合計値を表してるわけではない点に注意してください。

合算したデータはダブルワード形式になる点に注意が必要です。

この値を、スキャン毎にチェックすることで、連続するビットデバイスの変化をチェックすることができるようになります。

注意点

ただし、上記のラダープログラムには、問題があることがわかりました。

やや特殊なケースではありますが、M15とM30とM46の3点が1スキャンのうちに同時にONするようなことが起きる場合は、これらのデバイス値の変化を検出することができません。

ビットデータを桁指定してデータレジスタ領域に転送した際、データレジスタ領域では、転送されたデータが16ビットの符号付整数として取り扱われるため、最上位ビット(MSB)に相当するビットデバイスが1である場合は、K4M0が負の値となってしまいます。

最上位ビットだけがゼロ、その他のビットがゼロの場合は 「-32768」となります。

詳しくは以下の図を参照願います。

改善

ラダープログラムが長くなってしまいますが、「DSUM」命令を使用することで、上記の特定のデバイスが同時にONした場合の検出漏れを防止することができるようになります。こちらも、画像をクリックするとより大きな画像を表示できるはずです。

「DSUM」を使用することで、32ビットデータのうち、ONになっているビットの数を合算することができるようになります。

32ビット(2ワード)分のデータ長のビットデバイスを桁指定するために、K8M0を使用しています。8×4点=32ビットデータを指定します。

使用した応用命令についての解説

最後に、今回のプログラムにて使用した応用命令について解説させていただきます。

BMOV命令

BMOV命令は使用頻度が少し高い命令です。

16ビットデータのブロック転送命令です。

通常のMOV指令では1ワード(16ビット)、DMOV指令では2ワード(32ビット)分のデータ転送を行うことができます。

これに対しBMOV指令では、任意点数のワードデータの転送を行うことができます。

今回は、K8を指令することで、8*16=128点分のデータ転送を行いました。

DSUM命令

1ワード分の16ビットデータのうち、ONになっているビットの総数を、数値としてワードデバイス領域に転送する応用命令がSUMです。

これに対し、「DSUM」はダブルワード32ビットデータのうちONになっているビットの総数を、数値としてワードデバイス領域する機能命令です。

WSUM命令

「SUM」は16ビットデバイスデータの中から、ONになっているビットの個数を数値としてワードデバイス領域に転送する応用命令でした。

これに対し、「WSUM」はn点の16ビットデータ(1ワードデータ)をすべて加算し、ダブルワードデバイス領域に転送するプログラムです。

まとめ

連続した大量のビットデバイスの変化を監視するラダープログラムについて解説してみました。