0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MELSEC-Q INV,MEP,MEF,EGP,EGF使用時の注意点

Last updated at Posted at 2021-10-26

INV,MEP,MEF,EGP,EGFって言われてもわからんけど、こいつらです。
image.png
INV 演算結果反転
MEP,MEF 演算結果パルス化
EGP,EGF エッジリレー演算結果パルス化

マニュアル見ててほぇ~って思ったのでちょっと調べてみた。

問題

下のSample1とSample2の動作は同じか?(Yはアドレス変えてあります)
image.png

答えは「同じではない」です。
Sample2は見た目通りの動きにはなります。
Sample1は見た目とは違う挙動になります。
マニュアル参照[SH-080804 MELSEC-Q/L プログラミングマニュアル(共通命令編)/演算結果反転 INV]

ではSample1はどのような動きになるのでしょうか?
答えは下の回路と同じ動きになります。
要するに分岐手前のM0は反転対象から除外されるとうことですね。
さてどうしてでしょうね?
image.png

下はSample1のリスト表示です。
INVはLD命令からINVまでの演算結果を反転する動作のようで、LD M0は反転対象に含まれず
LD M1からINVまで、LD M10からINVの演算結果が反転されるようです。
LD
が実行されるたびにそれまでの演算結果はどこかに退避されORB/ANBで退避した演算結果とAND/ORされるようです。
(たぶん…あんまりマニュアルには詳しく書いてなかった)

()は命令ではなく説明です

;Sample1
LD M0
(→演算結果退避A)
LD M1
AND M2
INV
(→演算結果退避B)
LD M10
AND M20
INV
ORB (←退避BとOR)
ANB (←退避AとAND)
OUT Y10

Sample1とSample1と同じ挙動の回路は見た目は違いますがリストで見比べるとほぼ同じような処理をしています。

;Sample1と同じ挙動
LD M1
AND M2
INV
(→演算結果退避A)
LD M10
AND M20
INV
ORB(←退避AとOR)
AND M0
OUT Y10

MEP,MEF,EGP,EGFではどうか?

下の回路は[SH-080804 MELSEC-Q/L プログラミングマニュアル(共通命令編)/エッジリレー演算結果パルス化 EGP,EGF]のPointに書いてある回路です。
EGP,EGF命令は,下記の回路ブロックの位置で使用できません。と…

image.png
実際は使えないのではなくこれもINV命令と同じでパルスの適用範囲が見た目と違うということです。

動かしてみると[Sample3と同じ動き]の回路と同じ動作になります。

;Sample3
LD X0
LD X1
EGP V0
OR X2
ANB
INC W0
;Sample3と同じ動き
LD X1
EGP V1
OR X2
AND X0
INC W1

まとめ

回路を整理しようとして大きな回路ブロックを作るとこういう罠にはまるような気がします。
回路の途中での反転やパルス化は便利なので。
気をつけよう😀

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?