内容
X-Yテーブルで座標を渦巻き状に動かす機会がありましたので、そこで使った「
うず巻カウンター
」をサンプルとして公開致します。 |
●PDF を表示 ●コードをダウンロード ●登 録モニ タをダウンロード ●EXCELファイル をダウンロード |
◆ 初期化ルーチン ・変数 [Initial] がFの時は未初期化なので、サブルーチン0にジャンプします。 ・サブルーチン0を実行すると [Initial] はTとなり次スキャンからは初期化はパスされます。 ・サブルーチン番号0で、変数 [Initial] をTにします。また、サブルーチン番号1を呼出して、各カウンターをクリアします。 ・サブルーチン番号1では各カウンターをクリアしています。サブルーチン0から呼ばれていますが、スキャン内コードからも呼出されます。 ・[@FM8] [@FM9] [@FM12] [@FM13] はカウンタコード内では "1ワード符号あり整数" 扱いにしていますが、"1ワード符号なし整数" として0を代入しても差し支えありません。 ・[Reset] をONする事でサブルーチン1を呼出し、カウンタをクリアしています。 |
◆ 渦巻き座標カウンター
・渦巻きグラフはこのPDFで確認して下さい。 ・変数 [Trigger] がTになるとカウントアップします。スクリプトの実行条件を制御できる「ボックススクリプト」です。 ・スペースの関係でスクリプトの表示は省略します。記述内容はPDFで確認するか、「KV-STUDIO」で確認して下さい。 ボックススクリプトは、いつ、どの タイミングで、KVスクリプトで記述されたプログラムを実行するかをラダーで指定できる、 ラダー実行条件付きスクリプトで す。 ラダーで指定した実行条件が成立し ている間だけボックススクリプトが実行されるので、 演算式の記述などに適しています。 ・変数 [Continu] をTにしておくと一度Tにした [Trigger] がリセットされないので、連続してカウントアップさせることができます。 ・[Continu] をFにしていると、[Trigger] を毎回ONにする事でカウントアップします。 ・次座標への「移動ピッチ」と「移動方向」を算出するため、「A」/「B」 2つのカウンタをつくりました。 ・渦巻きが1進む毎に、カウンター「A」と「B」は次の様にインクリメントします。 A×2 = B ⇒ 「A」をインクリメントし、「B」を1にする。 A×2 ≠ B ⇒ 「B」をインクリメントする。 ・同様に「X」と「Y」の移動量(個々の座標が変化すれば"1"変化なしなら"0")は次の手順で計算します。 ( B−1 ) ÷ A = 0 ⇒ 「X」の移動量は"1"、「Y」の移動量は"0" ( B−1 ) ÷ A = 1 ⇒ 「X」の移動量は"0"、「Y」の移動量は"1" ・同様に「X」と「Y」の移動方向は次の手順で計算します。 「A」が奇数 ⇒ 正方向 「A」が偶数 ⇒ 負方向 ・個々の座標は、以上の「X」と「Y」の値を積算していくだけです。 ・次に渦巻きの角からの距離を計算します。上記の「X」と「Y」の値を積算していき、角に到達したら積算値をリセットします。 ・角の判定は次の手順で行います。 B ÷ A の余り = 0 ⇒ 角 ・角に到達した時点で個々の移動量が0なら各々の距離をリセットします。 |
◆ 確認 ・上 の画面にある登録モニタウィンドウを用意しています。 ●登 録モニタをダウンロード からダウンロードしてください。136行目にもモニター用のデバイスを記述しています。 ・シミュレートモードでRUN中に「登録モニタ」中の [Trigger] をONして下さい。([Trigger] にカーソルを合わせ、左ダブルクリックまたはスペースキー押下) ・[Trigger] がTになるとカウントアップします。この時 [Continu] がFであればONする度に、Tであれば [Trigger] がTの期間は連続でカウントアップします。 ・座標は( X , Y ) = [@FM8] , [@FM9] 。角からの距離は( X , Y ) = [@FM12] , [@FM13] です。現在地が角の場合 [Corner] がTになります。 ・[Reset] をONすると、カウンターがクリアします。 ・シミュレーションモニタの数値をEXCELで比較確認できます。●EXCELファイル をダウンロード ・EXCELファイルを開いて 【C116】 に任意の数字を入れてください。"I"カラムがX座標、"J"カラムがY座標です。 ・【C116】 セル以外は入力禁止にしています。 |
◆ 他の方式(条件分岐)
・最近とある事情で、今回の渦巻き移動コードを新たに他の方が書き直す事になりました。コードを頂きましたので参考にご覧ください。 図をクリックするとPDFを開き ます。 ・アルゴリズムはスクリプトの"SELECT CASE"文を使った、渦巻きカウンターに対応した条件分岐になっています。 ・条件分岐なので記述に限界があります。(ここでは100までの様です)渦巻きグラフを作成してそれを"にらめっこ" しながらコーディングする必要があります。 バグの可能性が増えます。 ・このコードでは、渦巻きカウンターは"1"から始まっています。 ・CASE文の中に物理座標の計算式を書いているので、無駄な記述があります。(まず論理座標を導いて、最後に実ピッチを掛けて物理座標にしましょう。) ・スクリプト文のインデントを揃えた方が良いかも知れません。 ・他にはメモリーに結果を書込んでおいて、それを参照するテーブル引もありますが、同様にデータ作成が大変です。 |
●PDF を表示 ●コードをダウンロード ●登 録モニ タをダウンロード ●EXCELファイル をダウンロード |