ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 CS1 インデックスレジスタを使いこなそう(5) いままで4回にわたって、インデックスレジスタを使った回路事例を 紹介してまいりましたが、どうも基本的な事柄がよく分からない どうも基本的な事柄がよく分からないとい どうも基本的な事柄がよく分からない うお声があるようですので、今回は、インデックスレジスタ処理の原 点に戻って、アドレス修飾 アドレス修飾の考え方と技法について整理してみました。 アドレス修飾 Ⅰ.アドレス修飾とは? インデックスレジスタの使い方を知るうえで避けて通れないのがアドレス修飾( アドレス修飾(Address アドレス修飾(Address Modification) Modification) の考え方です。アドレス修飾の手法は、もともと、コンピュータのプログラミング技法のひとつとして発 展してきたものですが、PLCの世界に於いても四則演算処理やデータのテーブル処理が一般化するにつ れて、命令セットの一環として組み込まれてきたものです。 ここでは、アドレス修飾の意味を理解するために、図1のように、<5×3×2×4>という乗算処理を 例に考えてみましょう。 最終的な姿 < 図1> 5×3×2×4=?の計算方法 1回目の演算命令 2回目の演算命令 3回目の演算命令 *B(BCD 乗算) *B(BCD 乗算) *B(BCD 乗算) A番地 (5) ×B番地 (3) Z番地(15) 5 × 3 = 15 Z番地(15) ×C番地 (2) Z番地(30) 15 × 2 = 30 Z番地 (30) ×D番地 (4) Z番地(120) 30 × 4 = 120 A番地 B番地 C番地 D番地 Z番地 5 3 2 4 120 5×3×2×4の乗算処理は、<図1>のように掛け算を3回行うことによって、Z番地に120 という答が得られる訳ですが、上の例のように乗算の回数が3回程度ですと、命令の数もたかが知 れていますが、これが10回、15回となりますと<*B命令>が乗算の回数分だけズラ∼ッと並 んでしまうことになります。 可変アドレス ■アドレス修飾の技法とは、プログラム・コンパクト化の技法と見つけたり! B 番地→C 番地 <図1> の演算処理プログラムの構造をヨ∼ク見つめている と分かることなのですが、1回目だけは“A×B=Z”となっ →D 番地と変化する ていますが、2回目、3回目は、“Z×C=Z”、“Z×D= Z”のように、「乗数」のエリアだけがC番地、D番地と変化 Z番地 × → Z番地 しているだけで、「被乗数」も「積」もZ番地と、参照アドレ スが固定していることに気づきます。そこで、上記プログラム 被乗数 乗数 積 の「乗数」の部分だけを変数扱いにして次頁<図2>のように 繰り返しループ形のプログラムを組んでみました。 固定アドレス 固定アドレス ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 < 図2>“アドレス修飾の技法”で参照番地を<変数>として処理する A番地(5) ワークエリア/Z 番地に → Z番地(5) A 番地の内容・ A+0番地 A+1番地 A+2番地 A+3番地 5 3 2 4 5 を転送する Z番地 (Z番地) ×(A+n番地) → (Z番地) NO 3回完了か? YES NEXT ワーク エ リア n: 1 → 2 → 3 <乗算処理> Z番地 1回目 5 A+n番地 Z番地 × 3(A+1番地) = 15 2回目 15 × 2(A+2番地) = 30 3回目 30 × 4(A+3番地) = 120 ループ処理の結果として、Z番地に 乗算結果の120が残る! <図1>と<図2>の違いがお分かりでしょうか。<図1>は、B番地、C番地、D番地と連続した アドレスに格納されている<乗数データ>を取り出すのに、都度、命令語によって、B番地、C番地、 D番地といった絶対アドレス 絶対アドレスで指定しています。 絶対アドレス これに対して、<図2>のメモリへのアクセス方法は、 基点 図3のように、A番地を基点 基点にして、A番地からどれだけ 基点 離れているかという相対アドレス 相対アドレスによって指定するものです。 相対アドレス A 番地 A+1番地 A+2番地 A+3番地 5 3 2 4 そして、この基点 基点となるアドレスからどれだけ離れているか 基点 を示す値を変位 変位と 変位 いいます。 変位 <図1>のA番地とB番地の変位は1、A番地とC番地の変位 は2ということになり、図3のように、B番地のことをA+1番地、 図3.アドレス修飾の考え方 C番地のことをA+2番地と表現することができます。 このように、ある基点 基点となるアドレスを定め、そこからの変位 変位で処理の対象となるメモリ番地を指定 基点 変位 することをアドレス修飾 アドレス修飾といいます。そして、変位量を示すパラメータのことをオフセット オフセットと呼んでいる アドレス修飾 オフセット のです。また、このようなアドレス修飾 アドレス修飾の技法は、通常、<図2>の FOR∼NENT 文のようなループ回路 アドレス修飾 と組み合わせて使用されます。 以上、コンピュータのソフトウェア技術の世界で古くから用いられてきたアドレス修飾 アドレス修飾の考え方につい アドレス修飾 て説明してまいりましたが、次章では、CS1で使用されているアドレス修飾の技法 アドレス修飾の技法について、前述の アドレス修飾の技法 「基点」と「変位」 「基点」 「変位」という2つの観点から説明させていただきます。 「変位」 ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 Ⅱ.CS1におけるアドレス修飾の技法 ∼インデックスレジスタとデータレジスタの使い方∼ インデックスレジスタ( データレジスタ(DR0 CS1 には、インデックスレジスタ インデックスレジスタ(IR0∼ データレジスタ(DR0∼ IR0∼IR15) IR15)とデータレジスタ( DR0∼DR15) DR15)というアドレス 修飾のためのレジスタがあります。 1.アドレスの基点を設定する / MOVR と MOVRW 基点設定の 種類 命令語(ニモニッ ク) シ ン ボ ル チャネル番号の 基点設定 MOVR MOVR 0020 IR0 動 作 説 明 0020CHの I/Oメモリ実効アドレス をイ ンデック ス レジ ス タ /IR0に 格納します * 0020CHの I/Oメモリ実効アドレス (*1): 0C014 IR0 0000C014 リレー番号の 基点設定 MOVR MOVR 0000.13 IR0 0000CH・13BITの I/Oメモリ実効アドレス をイ ンデック ス レジ ス タ /I R0に 格納します * 0000CH・ 13BITの I/Oメモリ実効アドレス : 0C000D IR0 000C000D タイマ / カウンタ番号の 基点設定 現在値エ リアの ・ 基点設定 MOVRW MOVRW TIM0000の 現在値エ リアの I/Oメモリ実効アドレス をイ ンデッ ク ス レジ ス タ /IR0に 格納します 。 T0000 IR0 * TIM0000の 現在値エリアの I/Oメモリ実効アドレス :0E000 IR0 同 上 同 上 ・ タ イ ムアップフラグ MOVR 0000E000 MOVR TIM0000の タイムアッ プ フラグ の I/Oメモリ実効アドレス をイ ンデッ カ ウ ントアップフラグ T0000 ク ス レジ ス タ /IR0に 格納 IR0 の 基点設定 * TIM0000の タイムアップ フラク の I/Oメ モリ 実効アド レス:0BE000 IR0 (*1) 000BE000 I/O メモリ実効アドレスとは? 入出力リレー、内部補助リレー、DM エリア、タイマ現在値等々、すべての I/O メモリエリアに おける連続アドレスのことで、MOVR 命令もしくは MOVRW 命令でインデックスレジスタにチャ ネル番号あるいはリレー番号を設定した時、そのレジスタに格納される内部コードのことを I/O メモリ実効アドレスといいます。あくまで、内部処理用のコードですからラダープログラムで直接 メモリ実効アドレス 指定することは避けるようにしてください。 (註)I/O 「アドレス修飾」の項をお読みいただけば、お分か I/O メモリ実効アドレスの意味は、次の「アドレス修飾」 メモリ実効アドレス 「アドレス修飾」 りいただけると思いますが、ここでは、MOVR 命令もしくは MOVRW 命令を実行した時、 インデックスレジスタに格納されるアドレス情報であるとだけ理解しておいてください。 ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 2.アドレス修飾の技法 前節では、MOVR MOVRやMOVRW命令 基点をインデックスレジスタに MOVR MOVRW命令を使って、メモリ・アドレスの基点 MOVRW命令 基点 設定する方法についてお話ししましたが、ここでは、そこで設定されたアドレスの基点 アドレスの基点にオフセット値 アドレスの基点 オフセット値 を加減算して、アドレス修飾( アドレス修飾(Address Modification)を行う方法について説明いたします。 アドレス修飾(Address Modification) メモリ・アドレスの基点 +/− = オフセット値 MOVR や MOVRW 命令で 命令 参照アドレス この章で勉強します! 変位量 インデックスレジスタに アドレス修飾 アドレスの基点を設定します アドレスの基点 2−1.インデックスレジスタ番号を指定することによって、メモリ・アドレスを 2−1.インデックスレジスタ番号を指定することによって、メモリ・アドレスを オフセットなしで間接的に指定する オフセットなし で間接的に指定する < ,IR□ ,IR□ > “ ,” IR□に格納されている I/O メモリ実効 IR□ IR□ ,,IR□ を アドレスが示すチャネル チャネルまたはリレー番号 リレー番号 アドレス チャネル 忘れないでネッ! □: 0∼ 0∼15 までの数字 を指定します オフセットなし ,IR□は、オフセットなし IR□ 間接指定とも呼ばれています 間接指定 MOVR と,IR□の関係について ,IR□の関係について アドレスの基点を設定するMOVR命令と メモリ・アドレスの間接指定 ,IR□の関係 ,IR□の関係 についてまとめてみました! MOVR D00000 IR0 D00000(の I/O MOVR メモリ実効アドレス) 0000.13 IR1 を IR0 にセット ,IR1 MOV #0000 ,IR0 (の I/O メモリ実効ア ドレス)を を IR1 に セット (IR0 が指し示す) D00000 に 定数 0000 を転送 MOV #0000 非常に重要です! 非常に重要です! リレー番号/0000.13 0000.13 リレー番号/ D00000 IR1 が指し示すリレー番号/0000.13 が指し示すリレー番号/0000.13 をロードする 0000.13 ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 2−2.IR□の内容に“定数”を+/− 2−2.IR□の内容に“定数”を+/−する<定数オフセット指定> IR□の内容に“定数”を+/−する<定数オフセット指定> IR0 が指し示すアドレスに +3 ,IR0 メモリ・アドレスの基点 +/− MOVR/MOVRW MOVR MOVRW 命令で 命令 +3します 定 数 = 参照アドレス オフセット値(変位量) アドレスの基点を アドレスの基点 IR□に設定 回 路 例 リレー番号/0000.13 0000.13 リレー番号/ (の I/O メモリ実効アドレス) D00010(の I/O メモリ実効アドレス)を を D00010 IR0 にセット を IR1 にセット MOVR 0000.13 IR1 +5 ,IR1 MOVR D00010 IR0 MOV #0000 -3,IR0 IR0 が指し示す IR1 が指し示すリレー番号/0000.13 が指し示すリレー番号/0000.13 に +5 番地したリレー番号/0001.02 番地したリレー番号/0001.02 をロードする 0001.02 D00010 から−3番地 した D00007 に 定数 0000 を転送する MOV #0000 D00007 ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 2−3.IR□の内容にDR□の内容をプラスする<DRオフセット指定> 2−3.IR□の内容にDR□の内容をプラスする<DRオフセット指定> IR0 が指し示すアドレスに DR1 ,IR0 DR1 の内容をプラスします オフセット値(変位量) メモリ・アドレスの基点 + DR□の内容 DR□の内容 = 参照アドレス MOVR/MOVRW MOVR MOVRW 命令で 命令 DR□には、あらかじめ MOV 命令等 アドレスの基点を アドレスの基点 IR□に設定 で定数 定数を格納しておきます 定数 回 路 例 (註)DR0 定数0003が格納されているものとします。 DR0には、あらかじめ MOV 命令等で定数0003 定数0003 D00100(の I/O D00100 メモリ実効アドレス)を を I/O メモリ リレ--番号/0001.05 0001.05 リレ 番号/0001.05(の IR0 にセット 実効アドレス)を を IR1 にセット MOVR D00100 MOVR IR0 0001.05 IR1 DR0 ,IR1 MOV #0000 DR0,IR0 IR0 が指し示す D00100 に DR0 の IR1 が指し示すリレー番号/0001.05 が指し示すリレー番号/0001.05 に 内容 0003 をプラスした をプラスした D00103 に DR0 の内容 0003 をプラスして 定数 0000 を転送 リレー番号/0001.08 番号/0001.08 をロード 0001.08 MOV #0000 D00103 ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 2−4.命令実行の直後に、 2−4.命令実行の直後に、IR 命令実行の直後に、IR□の内容を+1(または+2)する<オートインクリメント> IR□の内容を+1(または+2)する<オートインクリメント> ,IR1+ 命令実行の直後にIR1の内容 (*1) を+1します IR1++ ,,IR1++ 命令実行の直後にIR1の内容 (*1) を+2します (*1) I/O メモリ実効アドレス MOVR 0001.05 IR1 ,IR1++ リレー番号/0001.05(の 0001.05 LD 命令実行直後にリレー番号が I/O メモリ実効アドレス) を IR1 0001.05 から 0001.07 に更新され、 にセット 次の LD 命令の実行に備えます LD 0001.05 を実行後、IR1 の示すアドレスを 0001.05 +2して 0001.07 にします 2−5.IR 2−5.IR□の内容を−1(または−2)してから命令を実行する<オートデクリメント> IR□の内容を−1(または−2)してから命令を実行する<オートデクリメント> ,−IR2 IR2の内容 (*1) を−1してから命令を実行します ,−−IR2 IR2の内容 (*1) を−2してから命令を実行します (*1) I/O メモリ実効アドレス ■ オートインクリメント/ MOVR 0001.05 IR1 ,--IR1 リレー番号 0001.05 (の I/O メモリ実効アドレ ス)を を IR1 にセット デクリメント制御の意味合い CS1 に限らず、アドレス修飾の技法 アドレス修飾の技法とは、 アドレス修飾の技法 インデックスレジスタが指し示すアドレス を如何にコントロールするか?に掛かって います。オートインクリメント オートインクリメントやデクリ オートインクリメント デクリ IR1 の示すリレー番号/0001.05 の示すリレー番号/0001.05 から2番地 を引いたリレー番号/ リレー番号/0001.03 を引いた リレー番号/0001.03 をロード 0001.03 メントの技法は、本資料の2頁-図2でも メント 述べたような FOR∼NEXT 等のループ回路 との併用により、参照アドレスの更新処理 参照アドレスの更新処理 (±1/±2)に重要な役割を果たしています。 ANEWSMENT ●システム機器統括事業部 ●平成 13年 2月 1日発行 Ⅲ.まとめ アドレス修飾の意味とCS1に於ける各種技法についてお分かりいただけましたでしょうか? 今回、学習した<アドレス修飾の考え方>は、建造物に例えると「基礎」とか「土台」の部分に相当すると 思います。そして、この土台のうえに、どのような建物を建てることができるかは、ひとえに皆様の応用力に 掛かっているように思いますし、そのような応用力を養っていただく為に、本シリーズの既刊分である(1) ∼(4)の「インデックスレジスタの応用事例」との併読をお勧めする次第です。 最後に、前章でご紹介した「アドレス修飾の技法」と「既刊資料」の掲載関係を<表1>にリストアップし ておきましたので参考になさってください。 <表1> 各種技法の掲載リスト 掲 載 資 料 (1) (2) (3) (4) MOVR MOVRW ○ / ○ ○ ○ / ○ / ○ ○ ○ ○ ○ ○ ,IR□ ,IR□ + ○ ○ ,IR□ ++ / / ○ / / / / ○ / / ○ / / / / +1,IR□ ,-IR□ DR□ ,IR□ (註)<表1>の補足説明 (1)∼(4)の数字は、本シリーズ<インデックス <インデックス レジスタを使いこなそう>のシリアル・ナンバーを レジスタを使いこなそう> 示しています。 (○印: 掲載あり) / 本シリーズ / 今後の予定 次回、もう一度、インデックスレジスタの基本仕様 インデックスレジスタの基本仕様に対して解説を加えたうえで、次々回以降 インデックスレジスタの基本仕様 から再び、インデックスレジスタの応用事例 インデックスレジスタの応用事例を掲載してまいりたいと思っております。 インデックスレジスタの応用事例 ご期待の程を・・・・。 《 お知らせ 》 インデックスレジスタに関するアプリ事例を募集しています! “こんな回路があるのだが、インデックスレジスタを使用できないか?”といったような こんな回路があるのだが、インデックスレジスタを使用できないか? テーマがございましたら下記へご相談ください。急を要するもの以外でしたらどのような ものでも受け付けております。
© Copyright 2024 ExpyDoc