【PLC】MELSEC iQ-R シリーズCPU SFCプログラム 基礎知識

- **説明：** システム案件でSFCプログラムを用いるにあたり、知識があまりにも足りなかったので、最低限知っておかないといけない知識を纏めました。

## ステップの種類
ステップの種類を示します。

1. **イニシャルステップ**
![iQ-R_SFCプログラム_ステップ種類_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/a9bd3b98-e301-85e2-d4c4-82ed5f2484ae.png)
![iQ-R_SFCプログラム_ステップ種類_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/96700099-9668-d58a-949a-4cbec47d138d.png)
ブロックの先頭を示すステップです。ブロックの先頭を示すステップです。ステップが活性中は，常にそのステップの次にある移行条件をチェックし，移行条件が成立すると次のステップに活性を移行します。SC，SE，ST，Rの属性を付加することができます。動作出力を作成しないステップとすることもできます。
1. **通常ステップ**
![iQ-R_SFCプログラム_ステップ種類_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/7a1f22d4-461a-46dc-667d-15673ec8e8b8.png)
![iQ-R_SFCプログラム_ステップ種類_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/f127bd49-c748-5b6c-ad3c-23621a2373c0.png)
ブロックを構成する基本となるステップです。ステップが活性中は，常にそのステップの次にある移行条件を
チェックし，移行条件が成立すると次のステップに活性を移行します。SC，SE，ST，R，BC，BSの属性を付加することができます。動作出力を作成しないステップとすることもできます。

1. **エンドステップ**
![iQ-R_SFCプログラム_ステップ種類_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/4433beb0-4bfa-f34e-eae1-188b6b4d9602.png)
ブロックを終了させるステップです。動作出力は作成できません。

次に、ステップの属性を示します。<br>
1. **SC コイル保持ステップ**
![iQ-R_SFCプログラム_ステップ種類_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/77d112f7-eae7-cfb4-08cd-803b1e81cb91.png)
活性が移行した後も動作出力でONしているコイルの出力を保持するステップです。
1. **SE 動作保持ステップ(移行チェックなし)**
![iQ-R_SFCプログラム_ステップ種類_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/830e41a9-1df8-2b88-48e0-9978fb513b6c.png)
活性が移行した後も動作出力を実行し続けるステップです。移行条件が成立し，次のステップが活性した後は移行条件のチェックは行いません。
1. **ST 動作保持ステップ(移行チェックあり)**
![iQ-R_SFCプログラム_ステップ種類_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/1fda90cf-e72f-eaef-102f-697d04fe4a3c.png)
活性が移行した後も動作出力を実行し続けるステップです。移行条件が成立し，次のステップが活性した後も，繰り返して移行条件のチェックを行います。
1. **R リセットステップ**
![iQ-R_SFCプログラム_ステップ種類_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/7a8d12b0-13cd-88cc-74cb-19164434bc51.png)
指定ステップを非活性にするステップです。
1. **BC ブロック起動ステップ(終了チェックあり)**
![iQ-R_SFCプログラム_ステップ種類_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/35fb3ec2-5f33-55f2-9ec5-02e2e321458a.png)
指定ブロックを活性させるステップです。指定ブロックが非活性になり移行条件が成立すると，活性が次のステップに移行します。動作出力は作成できません。
1. **BS ブロック起動ステップ(終了チェックなし)**
![iQ-R_SFCプログラム_ステップ種類_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/b5515a76-504f-25d9-9e85-96732650c976.png)
指定ブロックを活性させるステップです。移行条件が成立すると，活性が次のステップに移行します。動作出力は作成できません。

### POINT
- ステップのプロパティ画面で，"属性"の設定を変更することでステップの種類が変更できます。
- リセットステップ[R]，ブロック起動ステップ(終了チェックあり)[BC]，ブロック起動ステップ(終了チェックなし)[BS]は，プロパティ画面の"属性指定先"にステップ名またはブロックNo.を指定します。

## 移行条件の種類
移行条件の種類を示します。

1. **直列移行**
![iQ-R_SFCプログラム_移行条件_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/b7247a13-2fd9-bf6a-a9b4-1fd7e02c1fc4.png)
移行条件が成立すると，先行するステップから後続のステップへ活性が移行します。
1. **選択移行(分岐/結合)**
![iQ-R_SFCプログラム_移行条件_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/d4ceee41-d24d-9818-b949-58c02bcfa7b6.png)
分岐: 1つのステップから複数の移行条件に分岐し，一番早く移行条件が成立した列のステップにだけ活性が移行します。
結合: 一番早く移行条件が成立した列の結合直前の移行条件が成立すると，次のステップへ活性が移行します。

1. **並列移行(分岐/結合)**
![iQ-R_SFCプログラム_移行条件_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/0ad4ab28-0a4a-3450-cc08-2e73f80d9c6f.png)
分岐: 1つのステップから分岐している複数のステップすべてに，同時に活性が移行します。
結合: 結合直前のステップがすべて活性すると，共通の移行条件成立により，次ステップへ活性が移行します。

1. **ジャンプ移行**
![iQ-R_SFCプログラム_移行条件_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295191/6356d4bf-9c5e-4f49-4a39-ecc49f77c2a0.png)
移行条件成立にて，同一ブロック内の指定したステップへ活性が移行します。

### POINT
- **選択移行**と**並列移行**の仕様の違いに十分注意して下さい。

## SFC用情報デバイス
ブロックに対して強制起動/終了と一時停止/再開の指示，およびステップの移行条件の成立と活性ステップ数の確認，または移行条件の連続移行動作を指示するデバイスまたはラベルです。SFC用情報デバイスは，ブロックごとに設定します。

1. **ブロック起動終了ビット**
ブロックの活性状態を確認するデバイスまたはラベルを設定します。また設定したビットのONでブロックを起動させ，OFFでブロックを終了させることができます。
    - 備考：ブロック内のSFCを起動するための条件。設定したブロックが起動すると、自動的にONする(例：スキャンプログラムで登録した場合等)。SFCプログラム実行中にOFFすると、活性化ステップがInitialに戻る。
      
1. **ステップ移行ビット**
実行中のステップの移行条件の成立を確認するデバイスまたはラベルを設定します。各ステップの動作出力実行後，次ステップへの移行条件が成立するとONします。

1. **ブロック停止再開ビット**
活性中のブロックを一時停止または再開させるデバイスまたはラベルを設定します。設定したビットのONでブロックは実行中ステップで停止させ，OFFでブロックを停止していたステップから実行を再開させます。
    - 備考：SFCプログラムを一時停止するイメージ。例えば、活性化ステップが途中であればそのまま保持するが、処理内で実装したコイル出力はONしない。

1. **ブロック停止モードビット**
ブロックを停止させるタイミングを決めるデバイスまたはラベルを設定します。設定したビットのONで各ステップの移行後に停止させ，OFFで全ステップを即停止させます。

1. **連続移行ビット**
移行条件が成立したとき，連続移行の動作を決めるデバイスまたはラベルを設定します。設定したビットのONで連続移行ありとなり，同一スキャン内で次のステップの動作出力を実行します。OFFで連続移行なしとなり，1スキャンに1ステップずつ実行します。

1. **活性ステップ数レジスタ**
レジスタブロックの現在活性しているステップの数を格納するデバイスまたはラベルを設定します。

## MELSAP-L命令
### MELSAP-L命令での移行条件
|項目|MELSAP-L(命令形式)|例|
|-|-|-|
|a接点(LD命令)|a口|aX0|
|b接点(LDI命令)|b口|bX1|
|立上りa接点(LDP命令)|p口|pM2|
|立下りa接点(LDF命令)|f口|fM3|
|演算結果反転(INV命令)|& INV|aM0 & INV|
|演算結果パルス化命令(立上り)(MEP命令)|& MEP|aM1 & MEP|
|演算結果パルス化命令(立下り)(MEF命令)|& MEF|aM2 & MEF|
|エッジリレー演算結果パルス化命令(立上り)(EGP命令)|& EGP口|aM3 & EGP V0|
|エッジリレー演算結果パルス化命令(立下り)(EGF命令)|& EGF口|aM4 & EGF V1|
|接点相当の比較演算命令|ラダー言語での命令入力と同様に記述|< D10 D20|
|並列接続(OR)|\||aX0 \| aM0|
|直列接続(AND)|&|aX0 & aM0|
|括弧|()|(aX0 l aM0) & aX1|

### MELSAP-L命令での動作出力

|項目|MELSAP-L(命令形式)|例|
|-|-|-|
|コイル出力(OUT命令)|o口|oY0|
|デバイスのセット(SET命令)|s口|sM0|
|デバイスのリセット(RST命令)|r口|rM0|
|低速タイマ(OUT T命令)|o口 Kn|oT0 K100|
|高速タイマ(OUTH T命令)|h口 Kn|hT1 K10|
|カウンタ(OUT C命令)|o口 Kn|oC0 K10|
|上記以外の命令|ラダー言語での命令入力と同様に記述(※)|MOV D10 D120|

※ 以下の命令は使用できません。
MC/MCR/FEND/END/CJ/SCJ/JMP/GOEND/IRET/BREAK/RET/TRAN<br>

## 引用
こちらを見て頂いたほうが早いです＾＾；
- [MELSEC iQ-R プログラミングマニュアル(プログラム設計編)](https://dl.mitsubishielectric.co.jp/dl/fa/members/document/manual/plc/sh081225/sh081225q.pdf)