ものづくりニュース by aperza

シーケンス制御講座「データレジスタ」

シーケンス制御講座「データレジスタ」

基礎からはじめるシーケンス制御講座

中級:データレジスタ

データレジスタとは数値データが扱えるワードデバイスです。初級編で説明した「M0」のようなビットデバイスはONかOFFしかありません。

それに対してデータレジスタは、例えば「D0」の中に「10」という数値を保存したりできます。そのため「D0」がON、みたいな動作はありません。

※条件をつけて接点のように動作させることは可能。

 

例えば[MOV K10 D0]とすれば、「D0」に10進数で10を書き込みます。

10進数とは10で桁が上がる数値、つまり普通の数値です。

K10が10進数で10の値です。H10とすれば16進数で10の値となります。普通はKを使います。

 

この10という数値が入った「D0」はどのように使うのでしょうか? 例えばタイマに使えます。

(T10 D0)で使えます。この場合1秒タイマになります。

スクリーンショット 2017-02-14 16.40.31

このようにしておけば、「X10」か「X11」が入れば「M100」で自己保持をかけます。

そして自己保持を解除する「T10」があります。この「T10」の時間を変更しているのです。

つまり「X10」で「M100」をONするのと、「X11」で「M100」をONするのでは、切れるまでの時間が変わってきます。

 

後で説明しますが、プログラムの順序に注意してください。上の例では[MOV]命令を最後に持っていくと、へんな動きをすると思います。

データレジスタでは数値を扱えますが制限があります。値が「−32768〜32767」の範囲でしか使用が出来ません。

理由は、データレジスタは16個のビットで成り立っているからです。

 

もっと簡単に説明すると、データレジスタは16個のコイルで成り立っています。

そしてそのON、OFFの組み合わせで数値と認識しています。

そして一番左のビットは、正か負をあらわしています。

 

しかし、この範囲以上の値を使用したいときがあります。その時は「ダブルワード」で使用します。

ダブルワードはデータレジスタ2個を1セットとして32ビットで使用します。

ダブルワードで使用すると、−2147483648〜2147483647までの値が使用できます。 使用方法も簡単で、命令の前に「D」をつけるだけです。

 

[DMOV K100 D0]

 

これで「D0」と「D1」の2個のデータレジスタをダブルワードで使用します。

注意しないといけないのは、ダブルワードといっても、指定した命令の部分だけがダブルワードになるだけです。

元の「D0」と「D1」というデバイスが合体するわけではありません。元のデータレジスタの組み合わせでそのように表示させているだけです。

 

そのためダブルワードで指定したら、そのデータレジスタは今後ダブルワードで使用する必要があります。

※ダブルワードで指定して0~32767の範囲であればシングルに戻しても問題はありません。記号の位置が変わるので、マイナス値は記号がなくなります。またダブルワードからシングルワードに変換する命令もあります。

次はデータの比較でデータレジスタを使用してみます。

スクリーンショット 2017-02-14 16.40.41

このように書けば「D0」の値が5以上になれば「M100」がONしますし、10より小さい場合は「M101」がONします。

「D1」の内容と比較したりもできます。上の回路のように等符号を使用して書くと、接点のように動作させることもできます。

先頭に書いてある「M8000」は特殊な接点で、シーケンサーがRUN状態のときは常にONしています(FXシリーズのシーケンサー)。

 

そのため特に書く必要はないのですが、プログラムを組む人にもよります。

私は書きます。同じ動作をまとめたりもできます。まあ見た目の問題ですが。

最後にデータレジスタの内容を変化させて見ましょう。

スクリーンショット 2017-02-14 16.40.52

特に何でもない回路です。何かの動作をするわけでもありませんが、説明用に作ってみました。

まず「M8013」なのですが、これも特殊な接点で1秒周期でON、OFFを繰り返します。

このようにシーケンサーには最初からある特殊なリレーがたくさんあります。

 

簡単に使用できますし、ぜひ使ってみてください。メニューの「ヘルプ」→「特殊リレー/レジスタ」から表示できます。

上のイラストでは「M8013」が1秒周期でONしたりOFFしたりします。

その後の「INCP」は値を1ずつ追加する命令です。「INCP」の最後の「P」はパルスです。

 

つまり「INC」命令が実行された一回のみ「D10」に値を追加しています。この「P」がないと、パルスとして実行しないため、毎スキャン1を追加してしまいます。

シーケンサー内でプログラムが回転するだけ値を追加するということです。 0.5秒実行しても、かなりの数を追加すると思います。

その次は、「D10」の値が100になったら「MOV K0 D10」となっています。これは0の値をD10に書き込むということです。

 

つまり「D10」の値が100になると、「D10」の値を0に戻して再びカウントを行うということです。

ここで重要なのは、「D10」の値が100になると動作を実行すればいいのに、100以上とプログラムはかいてあります。

この規模のプログラムなら特に問題はないのですが、大規模なプログラムになると、ほかの要因やプログラムミスで「D10」の値が突然100を超えるかも知れません。

 

100=D10という条件であれば、「D10」の値が100を超えてしまったら復帰することができなくなります。 そのため100以上という条件にしています。

また、プログラムの仕様にもよりますが、この場合のMOV命令はパルス化しないほうがいいと思います。

プログラムには必ずバグや予想外の動きが発生します。そのときの逃げ道を作ることも大切なのです。

 

出典:『基礎からはじめる シーケンス制御講座』

参考書

これだけ!シーケンス制御 (これだけ!シリーズ)
武永 行正
秀和システム
売り上げランキング: 70,884
図解入門よくわかる最新シーケンス制御と回路図の基本 (How‐nual Visual Guide Book)
武永 行正
秀和システム
売り上げランキング: 31,176

1977年、広島県福山市生まれ。武永制御 代表。「基礎からはじめるシーケンス制御講座」管理人。◎福山職業能力開発短期大学校(制御科)を卒業。某電機会社にて設備エンジニアを務めた後、武永制御を創業。◎著作に『図解入門よくわかる最新シーケンス制御と回路図の基本』(2013年 秀和システム)、『これだけ!シーケンス制御』(2014年 秀和システム これだけ!シリーズ)がある。◎基礎からはじめるシーケンス講座 http://plckouza.com/index.html