データテーブルを扱う
インデックス修飾の具体的な使い方を解説します。ほかにもたくさん使い方はありますが、便利な使い方を紹介します。
作成日:2016年05月10日
更新日:2022年10月11日
インデックス修飾でデータを扱う
インデックス修飾の本来の使用方法を説明します。シーケンサーでかなり多いデータの取り扱い時に使用してみます。と言っても、ここでかなり多いデータをすべて書くのはめんどくさいので、一部分だけ書いて説明します。
シーケンサーはFA機器で、設備の自動化などに使うことが多いと思います。1台の設備を1種類の製品加工のみに使うこともありますし、複数の機種に対応した設備もあります。複数の機種に対応した設備の場合、機種により動作を変更したり、判定値を変更する必要があります。今回は説明用として試験機の判定値を変更する方向で考えて見ます。
複数の機種といっても、10機種程度であれば特に問題はないのですが、10000程度になると大変な事になります。まずは下の表のように機種を一定の法則で振り分けます。
大条件は機種を大きく分ける条件で、車で例えると「メーカー」です。条件は更に詳細な条件で、車で例えると「排気量」になります。ここで注意が必要な条件はメーカーAの車には1600ccがあり、メーカーBには1600ccがなくても、メーカーBにも1600ccという条件を設定しておかなければいけません。もちろんここには値が入ってきませんが、並び方を一定にしておかなければ演算ができません。
大条件1条件 | 値1 | 値2 | 値3 | 値4 |
---|---|---|---|---|
1 | ZR0 | ZR1 | ZR2 | ZR3 |
2 | ZR4 | ZR5 | ZR6 | ZR7 |
3 | ZR8 | ZR9 | ZR10 | ZR11 |
4 | ZR12 | ZR13 | ZR14 | ZR15 |
5 | ZR16 | ZR17 | ZR18 | ZR19 |
6 | ZR20 | ZR21 | ZR22 | ZR23 |
7 | ZR24 | ZR25 | ZR26 | ZR27 |
8 | ZR28 | ZR29 | ZR30 | ZR31 |
9 | ZR32 | ZR33 | ZR34 | ZR35 |
10 | ZR36 | ZR37 | ZR38 | ZR39 |
条件 | 値1 | 値2 | 値3 | 値4 |
---|---|---|---|---|
1 | ZR40 | ZR41 | ZR42 | ZR43 |
2 | ZR44 | ZR45 | ZR46 | ZR47 |
3 | ZR48 | ZR49 | ZR50 | ZR51 |
4 | ZR52 | ZR53 | ZR54 | ZR55 |
5 | ZR56 | ZR57 | ZR58 | ZR59 |
6 | ZR60 | ZR61 | ZR62 | ZR63 |
7 | ZR64 | ZR65 | ZR66 | ZR67 |
8 | ZR68 | ZR69 | ZR70 | ZR71 |
9 | ZR72 | ZR73 | ZR74 | ZR75 |
10 | ZR76 | ZR77 | ZR78 | ZR79 |
上記のように設定します。ZRというのはファイルレジスタで、ラッチ領域のデータレジスタでも問題ありません。そして大条件や条件は数値で指定します。例えば「D0」が1の時は大条件1、「D1」が5の時は条件5、つまり「ZR16」~「ZR19」間での値を読み込みます。
大条件や条件を増やせばさらに機種も増えますし、さらに細かく条件設定させることも可能です。今回は説明なので80個程度で説明します。
機種設定は手動で人が行うか、自動で行うかは設備の環境によります。手動で行う場合GOT(三菱のタッチパネル)などで行うと思いますが、GOTで行う場合、大条件1のボタン(実際には機種の名前)を押すと、直接「D0」に値を書き込んでもかまいません。それか、ビットスイッチによってシーケンサーの回路上で書き込んでも同じです。自動で行う場合は製品に機種情報を持たせる必要があります。その機種情報から「D0」と「D1」に値を書き込めばいいのです。
例えば「大条件2」の「条件5」に機種変更を行います。「D0」には2、「D1」には5が入力されました。
「D0」と「D1」の値が1以上になっていることを確認して、両方とも1を引きます。つまり0から始まるようにしてください。
「D0」は1、「D1」は4になりました。大条件が40個のファイルレジスタで構成されています。そして条件は4個のファイルレジスタで構成されています。下記式で演算させます。
(「D0」×40)+(「D1」×4)=(1×40)+(4×4)=56
「大条件2」の「条件5」の先頭(表の左側)アドレスを見て下さい。「ZR」56となっています。つまり上記演算で出てきた答えと一致します。4個のデータがあるため順番に読込めばデータは読込めます。
上記演算値を「Z1」に入れます。
[MOVP ZR0Z1 D20]
[MOVP ZR1Z1 D21]
[MOVP ZR2Z1 D22]
[MOVP ZR3Z1 D23]
このようにすれば、演算後読込するたびに、「D20」~「D23」に機種データを読込んできます。
テーブルデータの読出し
実際のプログラムで確認してみましょう
ここまでの回路は、大条件と条件のデータを設定する回路です。ここでは「B0」などを使用していますが、これはリンクリレーと呼ばれ、もっと別の使い道があるのですが、GOT(タッチパネル)のビットスイッチ(押しボタンスイッチ)などによくしようされます。このように「B」を使えば、GOTで設定されたスイッチと分かります。会社によっては標準化されている場合もあります。
GOTのボタンが押されると、大条件と条件に値が転送される回路になっています。GOTでなくても「D0」と「D1」に、なんらかの方法で値を転送すればいいのです。
読出部分の回路説明をします。
「B30」で演算を行い、データを読み込みますが、「D0」と「D1」が0より大きいことを条件としてください。機種設定をしていないと実行できないようにするのです。演算の最初で-1を実行するので、後の演算でエラーを出してしまいます。
そして上で説明した演算を行って、インデックスレジスタ「Z1」値を入れて、MOVで転送します。今回のデータ量は少ないですが、実際には20000個以上のファイルレジスタから、必要なデータを読み込むのも簡単にできるのです。
図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。