• 締切済み

シーケンサのサブルーチンについて

cozy_kr38の回答

回答No.3

ANo.2です。先程の回答に間違えがありました。 やはり、メインルーチンなり、サブルーチンなりで、A命令を実行しない条件(B命令)を記述(実行)しないと、いつまでもA命令は実行し続けます(つまりC0はリセットされ続けます)。サブルーチンから抜けると、M8000がOFFされ、A命令は実行されないのではなく、あくまでもA命令を実行しない条件を実行しないとA命令は停止(OFF)しません。

uran2048
質問者

お礼

何だか動作確認までしていただいたようで、ありがとうございます。 たとえM8000でなくても、サブルーチン内でリセットしたらその効果はずっと継続するようですね。 それは、そういうものだと思うしかないですかね。 しかし、 >やはり、メインルーチンなり、サブルーチンなりで、A命令を実行しない条件(B 命令)を記述(実行)しないと、いつまでもA命令は実行し続けます。 で、言われている・・・B命令を記述(実行)しないと・・・の箇所は、B命令を記述しなさいと言っているのか、それともB命令を実行しなさいと言っているのかどちらでしょうか。 M8001配下ですから、B命令は記述はしてあるが、実行はされないリセット命令ですよね。 実行しなくても、記述するだけで意味があるという概念が私にはどうしても納得できないのです。 そのことについてもう少し突っ込んだご説明が伺えるとありがたいのですが。

関連するQ&A

  • 三菱シーケンサのデバイスについて教えて下さい。

    三菱シーケンサのデバイスについて教えて下さい。 三菱シーケンサ(PCタイプ:Q06(H))のデバイスで内部リレー(M)について教えて下さい。 シーケンサの電源断時に内部リレー(M)の値は保持されるでしょうか? マニュアルを見ると以下の様に書かれています。 ======= マニュアル内容 ======= (a) 内部リレーは,QCPU内部で使用するラッチ(停電保持)のできない補助リレーです。 下記操作を行うと内部リレーは,すべてOFFします。 ・電源OFFの状態から電源を投入したとき ・QCPUをリセットしたとき ・QCPUをラッチクリアしたとき ============================= 上記内容から、電源断時には内部リレー(M)の値はクリア(OFF)されそうですが、CPUユニットに電池を実装していたら、クリアされず保持されるものでしょうか? デバイスにはラッチリレー(L)やデータレジス(D)、リンクリレー(B)など、色々ありますが、ラッチ(停電保持)対象でないデバイスは、電池を実装してもデータは保持されないものなのでしょうか。 ご存知の方、教えて下さい。宜しくお願い致します。

  • オムロン PLC 自己保持

    オムロンPLC CJ2Mシリーズを使用しています 自己保持回路を電源がOFFしても保持したままにしたいです なにかいい方法、命令はありますか?

  • 三菱電機 Q02H SORT命令

    教えて下さい。三菱電機PLC(Q02H)を使い回路を作っているのですが、今回、SORT命令を使うことになりました。非常に便利なのですがイマイチ上手くいきません。シュミレータにてプログラミングマニュアルに書いてあるプログラム例を実行すると、格納されている数を上手く並べ替えてくれるのですが、現在、使用しているPLC(Q02H)を使う為、プログラム例にあるデバイスは使用できません。空きデバイスを確認し使用していないデバイスで試すのですがダメです。状態としては回路にてSM703をONしたのち、SORT回路を実行すると格納されている数を値の大きい順に並べ替えてデバイスの一番上まで送ってくれるのですが、SM703をOFFした状態でSORT回路を実行すると値が小さい順に並べ替えてくれるのですが、一番上まで値を移動してくれず、一番小さい値の格納デバイスからスタートしてしまいます。どこがいけないのでしょうか。 プログラミングマニュアルに書いてあるプログラム例 0  LD X0 1  OUT SM703 2  LD x10 3  SORT D0 K4 K1 M0 D10 4  END 私が実行したプログラム 0  LD X0 1  OUT SM703 2  LD X10 3  SORT D151 K11 K1 M1010 D430 4  END

  • ラダーにてセットリセットを使わない方がいい?

    PLCラダープログラム、初級者です。 先日、セットリセットモジュール(セットリセットフリップフロップ)、或いは、リセットセットモジュールを用いてラダープログラムを行っていたのですが、ある人から、セットリセットモジュールを使うのではなく、自己保持回路を使った方がいい、とのアドバイスを受けました。 理由を説明して貰ったのですが、よく理解できませんでした。 なぜ、同じ機能なのに、自己保持回路を使った方がいいのでしょうか? すみませんが、よろしくお願いします。

  • fortran 外部サブルーチンの読み込みについて

    c c main.f c dimension x(2) x(1)=1 x(2)=2 y=5 call sub(x,y,z) write(*,*)'x1=',x(1) write(*,*)'x2=',x(2) write(*,*)'y=',y write(*,*)'z=x1+x2+y=',z stop end c---------------------------------- c sub.f c subroutine sub(a,b,c) dimension a(2) c=a(1)+a(2)+b write(*,*)'b=',b return end  以上のようなプログラムをmain.fとsub.fに分離して、別々にコンパイル。最後にそれぞれの実行ファイルをつなげるといったことがしたいのですが、どのようにすればいいのでしょうか。 サブルーチンをメインプログラムが参照するといったことがしたいです。

  • device netを使用したインバータ制御に関…

    device netを使用したインバータ制御に関して device netを初めて使用する者です 今回、海外での仕事でdevice netで接続されている 三菱製インバータ(A700シリーズ)をシーメンス製インバータ(MICROMASTER440)に 交換された機械のシーケンスプログラムの変更を行なってくる予定です 現在シーケンスプログラムを記述した担当者がいないので、詳細に関しては わからない状況ですが、プログラムを見る限り運転/停止/周波数設定 のみしか行なっていないと思われます(三菱のdevice netのマニュアルから判断) シーメンス製インバータの場合、どのようにプログラムを記述したら良いのか わかる方がおりましたら教えて頂ければ幸いです (ちなみにPLCはキーエンス製です)

  • バイナリ指定で複数レジスタを順次リセットするラダ…

    バイナリ指定で複数レジスタを順次リセットするラダーシーケンス ラダー(シーケンス)回路の組み方を教えてください。 入力が1点:リセットPB 出力が4点:リセット入力 :レジスタ#1 :レジスタ#2 :レジスタ#3 出力先(相手機器)は7ヶのレジスタを持っており レジスタ#1~レジスタ#3の 3ビットでレジスタを指定し同時に リセット入力 をonすることによって所定のレジスタがリセットされます。 1回 リセットPB を押すだけで複数のレジスタをリセットする回路を作らなければいけません。話しを簡単にするために7ヶすべてのレジスタを1プッシュでリセットする回路と考えてけっこうです。 順次指定を変えてリセットを繰り返す方法がわかりません。 失礼しました。入力がもう1点 リセット確認:RSTACKがありました, レジスタは1ビットと考えてください。 入力: XO:PB押しボタン X1:RSTACK 出力: Y0:RST Y1:#1(2-0) Y2:#2(2-1) Y3:#3(2-2) 途中まで考えてみましたが M2~M7 をたてる方法がわかりません。 RSTACKは1個のレジスタをリセットするごとに1パルス同一信号が返ってきます。 X0 --||----------[PLS M0] X1 --|/|---------(M99) | M0 M99 --||--+--|/|---(M1) M1 | --||--+ M1 --||-----------(Y0) M2 | --||--+ M3 | --||--+ M4 | --||--+ Mn | --||--+ ** M5~M7 すべてパラ M1 --||--+--------(Y1) M3 | --||--+ M5 | --||--+ M7 | --||--+ M2 --||--+--------(Y2) M3 | --||--+ M5 | --||--+ M7 | --||--+ M4 --||--+--------(Y3) M5 | --||--+ M7 | --||--+ レジスタとの表現が誤解を招きました。外部機器(カウンタ)です。 カウンタを255ヶ持っており。そのカウントのリセットのための入力が,リセット信号:1ビット,カウンタ指定信号:8ビットです。リセット完了応答が"RSTACK"1ビットです。 PLC側はmov命令他たいていのコマンドは使えます。ラダー表記の他にニモニックでもプログラムできますがラダーの方が解釈しやすいです。 タイミングパルスとカウンタを使う等して順次作動する回路は作れそうな気がしますがいかにも複雑です。もっと単純スマートな方法がありそうな気がします。 "PB"入力を保持して, ラダー図上段から1かたまり(1段)ずつ作動し(2回以上作動しない), 最下段が作動完了で保持を解除でよいと思うのですが。 応答が"RSTACK"1本なので・・?。 1段目は"RSTACK"でリセットするとして, 2段目は PB(M0)and"RSTACK(a)" でonしてよいか,保持offを"RSTACK(b)"でよいか(a),(b)が同ブロックに存在? 最終段リセット完了(M99)はどうやって作るか?

  • VBのEXEから他のVBのEXEのファンクションを実行したい

    メインルーチンからサブルーチンを呼ぶような イメージで VBののEXE‥(1)(メインプログラム)から 他のVBののEXE‥(2)のファンクションを呼び出して値を返したいのですが どうすればよいでしょうか? (1)はバッチファイルのような感じで コマンドライン引数が○○のとき(2)の××と△△を実行するという内容のもの (2)はマスタを更新するプログラムがマスタごとに いくつかのファンクションにわかれたものです。 説明不足で伝わりにくいかとおもいますが、 よろしくおねがいいたします。

  • ハイパースレディングのレジスタについて

    ハイパースレディングのレジスタについて ハイパースレッデイングのCPUで2つのスレッドA,Bを動かすとする。 このときAの実行状態を示す汎用レジスタやプログラムカウンタと     Bの実行状態を示す汎用レジスタやプログラムカウンタの扱いはどうなのでしょうか。 次の2つの方法が考えられる。 (1) レジスタのロード、実行、レジスタのセーブを繰り返す方法。     CPU内に高速なメモリを持ち、実行前にレジスタに値をロードして、命令を実行して、レジスタの値を保存を繰り返して、A,Bのスレッドを実行する方法。 (2) A用のレジスタとB用のレジスタを2組用意して、相互に切り替えながら実行する方法。     Aを実行するときはA用のレジスタを使用して、Bを実行するときはB用のレジスタを使用する方法。 の2つが考えられるが、それとも他の方法があるのでしょうか。 それに関連して、1度に実行する機械語命令の個数はいくつなのでしょうか。 スレッドAの機械語命令を実行して、切り替えてBの機械語命令を実行するときに、 Aの1命令を実行してから、Bの1命令を実行する。1命令毎に切り替えるのでしょうか、 それともAの数個の命令を実行してから、Bの数個の命令を実行するのでしょうか。 このときスレッドを切り替える際に1度に実行する機械語命令の個数はいくつでしょうか。 ご存知の方がおりましたら、教えて下さい。

  • シーケンス ラダー図と配線について

    簡単なセンサー制御をしたいのですが、素人でなかなかうまくいかないので教えてください。 やりたいこと センサーAにワークが通過している間に、センサーBがONするか否かを判定し、ONしない場合に警報装置が作動する。 そして、リセットボタンを押すまでは警報して、リセットボタンを押したら再度検査を再開する。 A B リセットSW      出力500 ------||------||-------|/|----------------○--               |    出力500            | ------||---------- ---------------------------------------END-- ---------------------------------------ENDH- このように組みました。 PLCは、キーエンスのKV-24DRです。 自己保持してワークの検出はできたのですが、リセットスイッチを押してもリセットされません。 端子の配線がまちがってるのでしょうか? わからないので教えてください。