プログラム分岐

7 件の投稿を閲覧中 - 1 ~ 7 件(全 7 件)
  • 著者
    投稿
  • #4466
    hymd
    一般参加者

    例えば、サブルーチンを10個作成して、ボタンを押すと、順番に実行していくプログラムがあり、3番目のサブルーチンで、外部からOKを貰った時に次に進行して10個のサブルーチンを行うプログラムとします。
    外部から、OKが来なかった時に、4番以降のサブルーチンを実行しないで、最初に戻るようにしたいのですが、4~10番目まで実行してしまいます。
    イベント生成で、1から10まで実施するイベント番号を5とし、OKが来なかった時にイベント番号を指定してイベントを伝播してイベント番号を7でメッセージダイヤログを表示するところまでは、いいのですが、ダイヤログを閉じると、イベントが発生したところに戻って4番以降を実施してしまいます。

    お手数かけますが、ご教授ください。

    #4467
    MZPlatformユーザー会
    サイト管理者

    たいへん恐縮ですが、文章だけですとこちらが正確に状況を理解できているか判断が難しい内容に思われます。できれば、状況を再現した簡潔なアプリケーションを添付していただけると助かります。

    参考までに、処理の分岐を記述したアプリケーション(MZAX)をZIP形式に圧縮したファイルを添付します。2つのサブルーチンがあり、実行するとそれぞれメッセージダイアログが表示されます。チェックなしで開始ボタンを押すと処理1のみを実行し、チェックありで開始ボタンを押すと処理2まで実行します。

    お問い合わせの中で、「外部からOKが来なかった時」の具体的な状況がわかりませんが、基本的には添付したアプリのように何らかの値を使って処理の分岐を書くことになります。イベント生成を使って分岐をすることにはならないと思いますが、状況によってはイベント伝播制御コンポーネントなどを使うことはあるかもしれません。

    もう少し具体的な情報をいただければ詳細にご説明しますので、よろしくお願いします。

    添付ファイル:
    #4469
    hymd
    一般参加者

    文章だけで申し訳ありませんでした。
    TEST2.zipを添付します。プログラム内にコメントを入れています。
    実際は、シリアル通信でマイコン制御を行い製品に信号を送信し、製品が受け付けた場合OKを
    戻すようにしています。一回でOKが戻るとは限らず数回繰り返してOKを戻しています。これを何度か繰り返して、製品を作り上げています。製品が不良の場合、OKが戻らず無限ループになるので、解除するために添付のようなファイルを作成しました。エラーメッセージが発生した時でプログラムを開始時にジャンプしたいのですが、上手くいきません。
    お手数ですが、助言をお願いします。

    添付ファイル:
    #4471
    MZPlatformユーザー会
    サイト管理者

    拝見しました。
    外部通信の中の処理Aにサブルーチン4の「処理を呼び出す」が3回接続されていますので、このままでは常に3回実行します。改善方法は、処理Aに必ず実行する処理(サブルーチン4)と判定処理を接続する構造にすることです。

    例えば、サブルーチン4の処理の中で論理値格納変数を使ってOKのときにtrueを設定し、NGのときにfalseを設定しておけば、その値に従って処理を継続するかどうかを判定することができます。修正例を添付しますのでご覧ください。この例では、継続不可の場合に元のエラーメッセージが、継続可のときに別のメッセージが表示されるようにしてありますので、継続可のところに処理を追加すればOKのときのみ処理を継続することができると思います。

    添付ファイル:
    #4473
    hymd
    一般参加者

    ご回答ありがとうございます。
    TEST2modで、サブルーチン4を1回になっており、3回すると同様のことになります。
    サブルーチン4は便宜上のサブルーチンで3回繰り返すのは、別々のサブルーチンを実行することを想定しています。外部信号によって都度処理するようにしています。
    また、実際は、ボタン実行②のようになっており、NGの時にボタン②を実行する前の状態もしくは確認ダイヤログを選択する状態(初期状態)にできないかと思っています。前述と同様にテキストフィールドを設けていますが、この部分でサブルーチンを設けて個々の処理をしています。
    (test2mod1.zip)
    NGにならなければ、順調に動作しているのですが、イレギュラーでNGが発生した時の処理で困っています。
    プログラムの構成もあるかもしれませんが、ご助言お願いします。

    添付ファイル:
    #4475
    MZPlatformユーザー会
    サイト管理者

    TEST2mod1の処理では元の状態に戻りますので、このような記述をしてはいけません。同じアクションイベントに処理と判定処理を3組接続したら、必ず3回実行されます。処理と判定処理が1組だけ接続されるようにしてください。外部通信の中の処理を修正したファイルを添付します。

    同様に、修正してはいませんが実行2ボタンの処理のように書いてもいけません。これは必ず3回実行されます。こちらは外部通信からイベントが出てくるので、そのイベントが発生したら次を実行するように書けば良いと思います。

    添付ファイル:
    #4477
    hymd
    一般参加者

    処理と判定処理が1組だけ接続されるように、構成も含め、実際のプログラム変更を致します。
    ありがとうございました。

7 件の投稿を閲覧中 - 1 ~ 7 件(全 7 件)
  • このトピックに返信するには、ログインしてください。