MELSEC-Qのパルス命令について

MELSEC-Qのパルス命令についての説明です。
パルス命令は入力や処理を1スキャンだけONや実行するものです。（雑な説明）

# 種類

## 立上り出力，立下り出力
PLSが立ち上がり。PLF立ち下がり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/239f0e63-36d2-6515-8ff1-5ba95cd6c569.png)

## 命令の立ち上がり実行
○○○Pのように末尾がPの命令はパルス化です。
(すべての命令がパルス化出来るわけではないが演算命令や転送命令はだいたいパルス化できる)
これはMOV命令をパルス化したものです。
立ち上がり時のみ転送されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/0371d49e-33d5-515f-f4e4-c5d65c11e9d1.png)

## 接点のパルス演算
入力をパルス化したいときに使えます
↑=立ち上がり,↓=立ち下がり（以下全部この表記なので省略）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/0423b215-4ec9-e533-7f57-4c42201a6eed.png)

## 接点のパルス否定演算
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/6688fb54-610e-01d4-a3ec-876da2f60988.png)

説明しずらいので回路で説明します。
回路Aと回路Bは同じ動作になります。
回路Bはステップ数を減らせますが慣れないと見づらいですね。
**回路A**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/f66ffbc2-9489-0953-c510-26dacee28e36.png)
**回路B**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/c29eb7fc-e78f-e773-3867-31c22cdaa8c2.png)


## 演算結果パルス化
これは↑↓命令の前までの条件をパルス化するものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/876619c6-86f3-8c42-7cf6-e1296b3fa91a.png)
回路Aと回路Bは同じ動作になります。

**回路A**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/60ef8970-f762-b8c4-563e-d373f68eb854.png)

**回路B**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/9473be3e-a11b-639b-fd30-766a578c32a0.png)

演算結果パルス化は回路構成によっては意図しない動作になります。

https://qiita.com/fa_yoshinobu/items/35a14bd531f7316abe4a

## エッジリレー演算結果パルス化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/d20b825d-906b-a654-3bfc-b427671c3681.png)

例えば下のような回路Aのように入力のパルス化を32個作る場合です。
32個作るのは手間です。(実際はGXWorks2の連続貼り付けを使えるので楽なのですが)
Bのようにループ処理で同じ事が可能です。
Vを使うのはループ内でパルス命令は使えないのですが、エッジリレーを併用することで可能になります。

**回路A**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/66f362de-45a8-98e7-9782-f4abeee138d1.png)

**回路B**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/1313fd8f-edda-9e73-7127-2d27694c6cb9.png)

# そもそもパルスとは？
そもそもパルスとは何だろう、パルス命令を使わずにパルスを作る場合このようになります。
M0でX0の前スキャンの状態を記憶して変化があるか判定すれば作れます。
つまりパルスを実現するには1カ所あたりメモリが1bit必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/c18b26ab-12f7-de95-0179-99965e9576a3.png)

SIEMENSではパルスを使う場合メモリの割り当てが必要です。
P=positive signal edge
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/85aa55e5-4612-a21c-6b12-6d2719f3cc34.png)

## シグナルフローメモリ
MELSECでも立ち上がり、立ち下がり判定用にメモリが内部で割り当てられているはずですが、ラダー上では見えないということになります。
この領域をシグナルフローメモリというらしいですがマニュアルでは説明らしき事はほぼ書かれていません。謎ですね。
MELSEC-Qのマニュアルでは余り触れられてない。説明があるのは下記の2カ所。
ちなみにMELSEC iQ-RとiQ-Fのマニュアルでは説明がちゃんとあるので探してみてください。
参考:SH-081224 MELSEC iQ-R CPUユニット ユーザーズマニュアル(応用編)
参考:JY997D54301 MELSEC iQ-F FX5ユーザーズマニュアル(応用編)

### MELSEC-Q 2重化CPUのパラメータ説明
SH-080803 Qn(H)/QnPH/QnPRHCPU ユーザーズマニュアル （機能解説・プログラム基礎編）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/8f10e0fe-bbe0-a2f4-42f9-b3dd48a15cf4.png)

### MELSEC-Q RUN時にシグナルフローメモリを初期化するか否か
SH-080730 GX Works2 Version 1 オペレーティングマニュアル（共通編）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/4b7646ec-371c-0ef0-dda5-2f5cc3b2e968.png)

# ループ内でパルス命令を実行
今までの説明でパルス命令に対して個数分のビットが必要な事がわかりました。
つまり下記の回路はダメですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/0b6a25ad-181b-bef5-540b-ebb6cb058650.png)
これが正しく動く例です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/32f83e10-86a1-444c-014b-40f1cabfd0fd.png)

おまけですが下記の回路もダメです。シグナルフローメモリが1個しか割り当てられないので
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/4fd4416b-6f77-f1c4-76de-743d5a41188e.png)

ループ内使うすべてのパルス命令はエッジリレー(V)で表現できる形にする必要があることがわかりましたね。
めでたしめでたし😤

# エッジリレーがない場合は？

MELSEC iQ-Fやキーエンスではエッジリレー(V)がありません。
このような前回値を比較する回路を作ることで判定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2146151/1f95f66b-435b-83c1-5dde-17064243655f.png)