このブログは、サーバー代など、運営費のため広告やアフェリエイトがあります。
大変申し訳ありませんが、ご理解よろしくお願いします。

このブログは、サーバー代など、運営費のため広告やアフェリエイトがあります。
大変申し訳ありませんが、ご理解よろしくお願いします。

三菱シーケンサ ST言語① 基本編

スポンサーリンク

(これはアメブロからの移植です)

こんにちは。Yukiです。

最近、三菱シーケンサでST言語を使い始めましたが、情報が非常に少ないため使い方を備忘録として記しておこうと思います。

なお使用するソフトはGX Works2 使用するシーケンサは 三菱FX3G CPU となります。

・出力リレー

出力リレーは三菱シーケンサではYから始まるデバイスです。

例:Y001 Y004

ST言語ではこれらは代入できるような仕組みとなっています。

ただしST言語の代入は = ではなく := (コロン イコール)となります。

1(TRUE)でON 0(FALSE)でOFFとなっており、これらを代入することでON/OFF制御することができます。

例: 

Y001 := 1;

Y002 := 0;

上の例ではY001 を強制的にON Y002を強制的にOFF となります。

・入力リレーを用いたON/OFF制御

上のような回路ではシーケンサを使った意味がありません。

次に入力リレーを用いたON/OFF制御を行いたいと思います。

入力リレーは三菱シーケンサではXからはじまるデバイスです。

例: X005 X010

今回作るプログラムは次のような形になるプログラムです。

ボタンを押したらパイロットランプが光り、ボタンを放したらパイロットランプが消えるようなプログラムです。

入力リレーも入力リレーに電気が入ったら1(TRUE) 入っていなかったら0(FALSE)となるため次のようにプログラムできます。

Y002 := X005;

Y003 := X007;

上の例ではX005がONになれば Y002がON X007がONになれば Y003がONになります。

また次のようにプログラムすることも可能です。

OUT命令を用いて

OUT(X001,Y001);

のようにすることもできます。

上の例ではX001がONになればY001がONになる回路になります。

・自己保持回路

自己保持回路は入力リレーがOFFになっても出力リレーはONし続ける回路の事です。

例えばX001を押すとY001がONします。ここでX001を放してもY001はONしたままになります。

ST言語では自己保持回路は複数あります。

私が知る範囲では3つあります。今回は全て紹介しようと思います。

まず一つ目です。

実は出力リレーは入力リレーと同じように使用する事ができます。

出力リレーが1(TRUE)の時に入力リレーと同じように使用すると1(TRUE)となると言うことです。

これらを踏まえると次のようにプログラムすることができます。

Y001 := X001 OR Y001;

これはX001 をONにすると Y001がONになります。X001を放してもY001は常にONとなります。

次に二つ目の方法です。

SET命令を使う方法です。

次のようにプログラムします。

SET(X001,Y001);

これだけで一つ目と同じ事ができます。

ただしこれはラダー図からPLCを始めた人には分かりにくいかもしれません。

(実は、三菱シーケンサではラダー図でもSET命令を使用できます)

次に三つ目の方法です。

IFを使う方法です。 ただしこれはC言語から入った人は分かりやすいですが、プログラムがとんでもなく長くなるような形になります。私はあまり使いません。(バグも誘発しやすいようなイメージがあります)

IF X001 THEN

     Y001 := 1;

END_IF;

しかしこれでは問題になることが分かるでしょうか。

そうです。一度入力リレーに1が入ったら出力リレーは常に1になってしまいます。

リセットするまで出力リレーは0にできません。

これらを対策するために条件を増やしてあげるのです。

一つ目の方法ではこのように記述を増やします。

Y001 := ( X001 OR Y001 ) AND NOT X002;

このように記述すればX001がONになれば自己保持し、X002がONになればリセットできます。

二つ目の方法ではRST命令を使用します。

SET(X001,Y001);

RST(X002,Y001);

これでもX002で解除できます。

三つ目の方法です。

IF X001 THEN

     Y001 := 1;

ELSIF X002 THEN

     Y001 := 1;

END_IF;

説明はしませんが上のように記述します。

2つ目のやつが一番わかりやすいですね。

②はこちら

参考になったら、コーヒー1杯奢ってくれるとうれしいです
Buy Me A Coffee
電子工作
スポンサーリンク
シェアする
denshi1996をフォローする
スポンサーリンク

コメント

タイトルとURLをコピーしました