シーケンス制御講座

いろいろな計算

データレジスタを使って、足し算や引き算、掛け算や割り算を行ってみます。計算命令のパルス化なども合わせて解説していきます。

作成日:2019年05月10日
更新日:2022年12月28日


足し算と引き算

データレジスタを使っていろいろな計算をしてみます。いろいろな計算といっても、足し算、引き算、掛け算、割り算です。基本的にはこの辺りができれば大丈夫です。複雑な計算はマニュアルを見れば書いてあります。計算によってデータレジスタ内の値がどのように転送しているのか把握できれば、基本的には使いこなせるはずです。

GT WORKS2のファイル(PLCのデータ)新しいものをつかいます。

足し算と引き算をします。次のように描いてみてください。

足し算の入力方法は次のように書きます。「F8」キーで命令入力を表示して入力します。命令とデバイスの間はスペースで空けて書きます。

意味は
「D50」+100=「D100」
「D50」-100=「D102」
となります。

足し算の結果が「D100」に、引き算の結果が「D102」に入っていると思います。「D50」の値を変更すると計算結果も即時切り替ると思います。

命令のパルス化

では足し算や引き算の命令の後ろに”P”をつけるとどのようになるか見てみましょう。”P”をつけるということは命令をパルス化するということです。

入力方法は、先ほどの命令の後ろにに”P”をつけるだけです。

パスル化すると「D50」の値を変更しても計算結果は変わらなくなります。命令をパスル化すると、その命令がOFF→ONになった瞬間しか実行されないためです。この場合「SM400」で常時ONなので実行されなくなります。
OFF→ONなった瞬間なので、「SM400」を他のスイッチに変更すれば動作するようになります。

今回のように計算式があり、出力するデータレジスタが別にある場合は特にパルス化する必要はありません。常時計算させておいても値がおかしくなることはないと思います。前回の「データレジスタを使う」で説明したように、出力するデータレジスタが別に無く元のデータレジスタに出力する場合は、パスル化しておかないと命令を実行するたびにどんどん加算するため、思ったような結果が得られないと思います。そのときの命令の書き方や使い方によってパスル化するか判断してください。

私の書き方ですが、実際には命令実行にスイッチや他の接点を使って命令を実行する場合はパスル化しています。

掛け算と割り算

次は掛け算を行います。先ほどの足し算と引き算の命令は実行しないように「SM400」を適当な接点に変更してください。もちろん回路自体を削除してもいいですし、「SM400」をB接点に変更しても大丈夫です。今回は足し算と引き算は「X22」のスイッチで実行するように変更し、掛け算は「X23」のスイッチで実行するようにしています。

念のために、掛け算の入力方法は「F8」キーで入力フォームを出して、次のように入力します。

「D50」×10=D100
これで「X23」のスイッチを押すと「D50」に入力された値と”10”を掛け算した答えが「D100」と「D101」へ出力されます。

「D101」と書きましたが、掛け算を行うと出力先のデータレジスタを2個使います。つまり出力先に「D100」を指定すると「D100」と「D101」に出力します。「D50」というシングルワード(1つのデータレジスタ)で掛け算すると2倍のダブルワードで出力します。ちなみにダブルワードで掛け算すると4個のデータレジスタに出力します。

2個のデータレジスタに出力するといっても、「D50」に”7”を入力しただけでは「D101」の値は”0”です。何も出力されていないような気がします。これは計算結果が32767以下のため、データレジスタをダブルワードで使う必要が無いためです。しかし注意が必要で「D101」を使わないわけではなく、ちゃんと”0”を書き込んでいます。(あたりまえですが)例えば「D101」の値が”10”だったと仮定し、「X23」を押して掛け算を行います。すると「D101」の値は”0”になります。元の値が”0”なので何も変化していないように見えますが、実際は値が小さいときは”0”を書き込んでいます。掛け算や割り算の出力はデータレジスタを2個使うので、他の用途には使わないようにしておきましょう。

では掛け算後の値はダブルワードで使わないといけないのでしょうか?正確に言えば「WORD」命令で16ビットに変換して(ダブルワード→シングルワード変換)使うのが正しいですが、値が小さいようでしたらそのままシングルワードで使っても問題ありません。今回の例で言うと「D100」の値のみを使えば大丈夫です。「D101」は無視します。ただし値が32767より大きくなるようでしたら、以後の計算はダブルワードで行う必要があります。取り扱う値の大きさでダブルワードにするか決めてください。「WORD」命令も結局32767より値が大きいと変換はできないので。

では割り算の場合を見てみましょう

まずスイッチがないので掛け算で使った「X23」のスイッチを使います。上のように掛け算命令の前に「SM400」のb接点を入れて掛け算命令を実行しないようにしてください。このように「SM400」を使って一時的に回路を遮断するなどの方法はよく使うので、是非おぼえておいてください。
(回路が大きくなると「SM400」の接点は多く使うと思います。そのようなときは「M999」などあまり使用しないコイルを”仮常時ON”などのコメントをつけ、自分だけの専用コイルにして使ったほうがいいです。それは仮にONしているだけなので後で削除しないといけません。検索するときに「M999」など、専用コイルで検索したほうが確実だからです。)

割り算の動作はどうなるか?「D50」に入力した値から3で割る計算命令です。実際に割り切れない値を入れて見ましょう。

割り算の場合も出力先を「D100」にすると、「D100」と「D101」の2個のデータレジスタに対して計算結果を出力します。掛け算のときはダブルワードで出力していましたが、割り算の場合はシングルワードでそれぞれ”商”と”余り”を出力します。

割り切れる値なら「D101」に”0”を出力します。

基本的な計算を説明しましたが、割り算の場合注意が必要です。割り算に限ったことではありませんが、実行不可能な命令を行うとPLCのCPUはエラー停止してしまいます。PLCのパラメータ設定で計算時のエラーは停止しないようにもできますが、基本的にはエラーは出さないようにします。例えば割り算では”0”で割ると計算不能となりエラーになります。次のような数式を想定してください。

100÷「D50」=「D100」

”100”を「D50」に入力した値で割り算し、結果を「D100」に出力しますが、「D50」に”0”を入力すると計算不能になります。つまり「D50」の値が”0”のときは割り算を実行させない、「D50」の値が”0”以外のときに割り算を実行するようにすればいいのです。

これは接点比較命令というもので、入力したい場所で[<> k0 D50]と入力するだけです。一応命令になりますが、命令自体が接点となっています。つまり「D50」の値が”0”以外ならONして、割り算が実行できます。しかしこれだけでは少し問題があります。「X23」のボタンを押したとき計算命令が実行されないので前回の計算結果が表示されたままになります。つまり本当は計算不能で計算していないのですが、前回の値が「D100」の中に残っているので、これを今回の計算結果だと間違えてしまう可能性があります。そのため計算できないときは「D100」の値をクリアしたり、何か信号を出して計算不能ということが分かるようにしておきます。

サンプルの回路です。さらに「D50」に対して”0”の入力ができないようにすると、より完成度が高くなります。回路の考え方としては、基本的には(通常の使用範囲)そのような現象が起きないようにする。(「D50」に”0”が入力できないようにする等)そしてもしその現象が発生しても回避できる回路にする。これが基本的な回路設計の考え方だと思います。



プリセットカウント

この無料講座がとてもいいと感じた方は「実践!ラダー学習キット」という有料講座も準備していますので、是非参考にしてください。無料講座と同じくシミュレータを使いますが、内容がとても充実しています。基本的なことはもちろん、簡単な設備の動作まで解説しているので興味のある方は是非検討してみてください。


図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。

Copyright (C) 2010 シーケンス制御講座, All rights reserved.