32ビットデータの扱い
データレジスタで計算命令を実行すると、いつのまにか32ビットととして扱われ、計算が途中でおかしくなったことはないでしょうか?今回はどのようなことをしたら32ビットになるのか?どのように扱えばいいのか解説します。
作成日:2025年11月13日
更新日:2025年11月13日
いつ32ビットに変わるのか?
PLC内で計算命令を使用しているとき、いつの間にか値がおかしくなった経験はないでしょうか?それはもしかしたら計算途中で出力が32ビットになっているかもしれません。

このような足し算命令があるとします。これは「D0」と「D1」の値を足して「D10」に出力します。答えは"6"になります。

この時使用デバイスを見ても「D0」と「D1」、「D10」を使用しています。それぞれシングルワード(16ビット)で使用しています。
では次の計算はどうでしょう?

今回は掛け算です。この場合のデータレジスタの使用はどのようになっているでしょう?

計算結果を「D10」に出力していますが、「D10」と「D11」が使われていることが分かります。これはシングルワード(16ビット)での掛け算の計算結果はダブルワード(32ビット)で出力されるためです。三菱や多くのPLCの場合、このような仕様になっています。掛け算をダブルワード(32ビット)で行うと、出力は64ビットで出力されます。
三菱PLCの場合、符号付整数のためシングルワード(16ビット)で扱える数値の範囲は「-32768~32767」となります。つまり計算結果がこの範囲内であれば、掛け算結果はダブルワードで出力されますが、シングルワード(16ビット)内に値が出力されます。上記のような小さい計算結果であれば「D10」のみを見ておいても問題はありません。ただし一つだけ条件があります。次のような計算ではどうでしょうか?

この場合も計算結果は小さいので「-32768~32767」の範囲内になります。ただし「D0」の値が負の値(マイナス)なので計算結果も負の値(マイナス)になります。この時符号はどのビットにつくかというと、一番上位ビットが符号になります。計算結果はダブルワード(32ビット)で「D10」と「D11」に出力されます。そして符号は「D11」にあります。掛け算の計算結果が負の値であれば、必ずすべてのデバイスを使用する必要があります。
上記の回路では計算結果「D10」の値に対して32ビット→16ビット変換命令をかけています。この命令により符号の位置もシングルワード内に調整されます。ただしこの命令が使用できるのは変換前の値が「-32768~32767」の範囲内にある時です。
次に割り算はどうでしょう。

このように割り算の結果(商)が「D10」に出力されます。値が小さいのでシングルワード(16ビット)で出力されます。ただし割り算の計算結果もダブルワード(32ビット)出力です。では「D11」にはなにがはいるのでしょう?

「D10」には商の”5”。「D11」には余りの”1”が出力されます。全体として割り算の出力もダブルワード(32ビット)になります。
計算ミスの例
次にどのような場面で32ビットデータを使った計算が間違えるのか見てみましょう。

これは「D10」の値"150000"に対して"10000"を足して"160000"という答えを出したい場合を想定しました。ですがモニタしたら値は"28928"となっています。デバイスモニタで細かくモニタしてみると次のようになります。

このように「D10」の値は"18928"となっています。そこに"10000"を足すので、答えは"28928"となります。では先ほどのラダー図で「D10」の部分にモニタで"150000"と表示されていたのは?と思われるかもしれません。これはモニタ表示の時に「D10」の値を自動的にダブルワード「32ビット」表示にしているためです。そのためデバイスモニタで確認すると「D10」と「D11」にそれぞれ値が入っていることが確認できます。この「D10」と「D11」の2つのデータレジスタを使って"150000”と表示しているのです。
そしてその下の足し算命令では単純にシングルワードで計算しているので思ったような結果が出ないのです。
32ビットで指定する方法
足し算などの命令でデータレジスタを指定するとき、どうすれば32ビットで指定できるのでしょうか?
三菱PLCでは命令の前に「D」をつければ32ビット指定できます。他のメーカーのPLCも基本的には32ビットで指定できます。メーカーによって方法は違うのでマニュアルなどを確認してみてください。

このように[+]命令の前に「D」をつけると、ダブルワードで指定できます。この場合、すべてのデータがダブルワードで指定されます。そのため出力先の「D20」もダブルワードになります。(掛け算命令に「D」をつけると、出力はデータレジスタ4個(4ワード)を使った64ビットになります。割り算も商が32ビット、余りが32ビットの合計64ビット占有されます。)
ダブルワード(32ビット)で指定することは、ほとんどの命令で実行できます。たとえば[MOV]命令だと。

このように普通に[MOV]命令を書くとシングルワード(16ビット)で転送されますが、[MOV]にも「D」をつけることができます。

このように命令の先頭に「D」をつけると、扱うデータをダブルワード(32ビット)で指定できます。「D30」にはちゃんと計算結果の"150000"がダブルワードで出力されます。
このように命令によっては出力結果がダブルワードで出力されるものもあるので、符号の入れ替えがあるのであればそのまま32ビットで使うか、[WORD]命令などで16ビットに変換して使用してください。
図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。



