一つのレジスタに格納されている4桁のバイナリ数値から、その中の下位2桁を抜き出す方法について説明します。
これは、特定のビット範囲を指定して、対象となる下位2桁のバイナリ数を抽出する方法です。
バイナリ数の各桁は2の冪乗(べきじょう)を表現しており、適切なビット操作を行うことで目的の桁を取り出すことができます。
今回は、三菱PLC「Q06UDEH」とツールは「GX works2」を使用しています。
PLCにバイナリーを分けるラダーを書き込む
下記のラダーがD4000に入った2023年の23の下二桁だけを、D4012に書込むラダー回路です。
1.レジスタD4000に日付・時間の情報を書き込む
DATERDの命令語を使用してD4000に、日付・時間の方法を書込みます。
今回は、2023年の下二桁の取り出し方を説明していますので、
ここの命令語を、MOV転送の「MOV K1234 D4000」に変えれば、34を取り出す事が可能です。
2.バイナリー値をBCD値に変換する
命令語「BCD D4000 D4009」を使用する事で、
レジスタD4000のバイナリー値を、D4009にBCD値として変換します。
命令語BCDで扱えるのは、あくまでも4桁(0~9999)までとなっています。それ以上を扱うには、DBCDを使用して下さい。ただし、0~99999999までとなります。
範囲外の数値がレジスタに書込まれた場合には、演算エラーとなりますので、注意してください。
3.BCDで分けたデータを必要分だけ転送します
BCD変換後のレジスタ値を必要な分のデータだけ、別のレジスタに取り出します。
D4009の変換後レジスタ値は、「2023」になっているので、「23」のみ取り出します。
命令語はWTOBを使用し、「WTOB D4009 D4010 K2」となります。
D4009の中の2バイト分(1ワードの半分)をD4010に転送するという命令語です。
なので、2023(D4009)の半分、23のみがD4010に転送されます。
4.最後に表記をBCDからバイナリーに変更する
最後に、データをBCDからバイナリーに戻すために、命令語BINを使います。
ラダープログラムは、「BIN D4010 D4012」です。
PLCにバイナリーを分けるラダーを書き込む
GX woks2でラダーをモニタして確認してみましょう。
D4012に、バイナリーで23が書き込まれていれば成功です。
わざわざBCDに変換しないとダメは理由
ここまでで、疑問に思った方はいると思いますが、
なぜ、わざわざBCD変換をしないといけないのか。
バイナリーのまま直接2桁読み出せないのか。
それは、バイナリー値は、一つのレジスタで一つの数値群を表示している為です。
例えば、1234と数値であれば、ワード1個で1234を表示しており、
ビットで1234を表すと「0000 0100 1101 0010」であり、
桁数ごとに区切りがないので、分ける事が出来ないのです。
しかし、BCDであれば、
ビットで1234を表すと「①0001 ②0010 ③0011 ④0100」となり、
①:1、②2、③3、④:4ときちんと桁数ごとで区切りされているので、
任意の領域を、他のレジスタに転送する事により、分けることが出来ます。
ただし、それはあくまでもBCD表記の場合のみで、画面や表示機器によっては、
バイナリー表記となっている場合が為、バイナリーの数値に変換しなければなりません。
BCDの1234ビット「0001 0010 0011 0100」をそのままバイナリー表記のものに
転送してしまうと、ビット「0001 0010 0011 0100」なので、4660と表示してしまいます。
入力機器、出力機器、表示機器が、バイナリー・BCDのどちらの表記形態なのかを、
注意してラダー作成すると良いでしょう。
ラダーでよく使うバイナリーとBCDの考え方を
分かりやすく説明した記事がありますので、そちらをご覧下さい。