シーケンサ

MOV命令:【5選】シーケンサのデータ転送命令を解説

このページではPLCの
データ転送命令について
説明しています。

PLCで数値を扱うとき、
データの転送命令は必ずと
いっていいほど使われます。

このページでどういったものか、
その使い方を覚えてください。

PLCのメーカーは色々ありますが
三菱電機のシーケンサの記号・仕様で
書いています。

ですので、記号はMOVやPMOVに
なりますね。

1.読む前に確認してください

データ転送命令の説明を読む前に
確認してください。

シーケンサにおけるデータ(数値)が
どう表現され、どこに格納されるか
など知っておかないと
理解が難しいかと思います。

このページではデータレジスタに
ついても、知っていること前提で
書いていますので。。。

あなたが、よくわかってない場合は
以下のページをまず読んでください。

 →データレジスタとは

データレジスタDについて
説明しています。

このページを読んで
更に分からないことが
でてくるかもしれません。

このページにも更に
さかのぼって説明したページへの
リンクをつけているので
活用ください。

データレジスタDは簡単に
いうと

数値を格納(保存)する
箱ですね。

その箱がシーケンサ内部には
複数個 内蔵されています。

2.そもそもデータ転送とは

このページで書いている
PLCのデータ転送とは
そもそも何かについて
説明しておきます。

PLCは電磁リレーシーケンス回路設計を
するリレーシーケンスと違い
コンピューターなので数値を
そのまま扱うことができます。

(リレーシーケンスについては以下のサイトを参考ください。
 ⇒リレーシーケンスとは何かを速習したい初心者のためのサイト)

足したり、引いたり、比較したりして
数値化した方がいい/数値化できる
制御を行えるのです。

例えば、〇kgの力で圧縮するとか
数値で指定した方が確かな仕事が
できることがありますよね。

この数値は、GOTなどの
タッチパネルやデジタルスイッチ、
アナログボリューム
などを使って外部から入力します。

(デジタルスイッチについては以下のサイトを参考ください。
 ⇒デジタルスイッチとは)

(アナログボリュームについては以下のサイトを参考ください。
 ⇒シーケンサのアナログボリュームについて)

その数値(変数)はプログラム上で
そのまま使われるわけではなく

一旦、データレジスタに格納して
データレジスタに格納されている
数値として使われます。

100なら100として使わず
D0のデータレジスタにある数値と
して使うのです。

このデータレジスタは元々は
空なので、100という数値を
一旦転送する必要があるのです。

そして、転送後に
D0内の数値としてプログラムで
使われていくのです。

プログラム上で、100と記述しなくても
D0と記述するだけで100を示しますし

一旦転送命令をしておくと
100が200に変わっても
D0内の数値は200に変わっています。

ここまでは、タッチパネルなどを
使った入力する数値について書きましたが
プログラム内でも数値データの
やり取りでもデータ転送は使われます。

例えば
D0とD3の数値の足し算を
D5に転送(格納)するとかですね。

ちょっと分かりにくかったかも
しれません。

次からの説明を読めば
理解の助けになると思います。

3.MOV命令

データ転送には色々な命令が
ありますが、最も使われ
基本となるのがMOV命令です。

[MOV 〇 △]

上記がMOV命令の記述です。

〇のデータを△に
転送する 

という命令となります。

転送はBIN値(BINARY)で
行われます。

BIN値とは
2進数(BINARY Number)の
ことです。

(2進数については以下のページを参考ください。
 ⇒2進数(BINARY NUMBER))

〇、△に入るデバイスを
分けて説明していきます。

定数をデータレジスタへ転送

[MOV K10 D0]

上記の記述は
定数である10進数(K)の
10をデータレジスタD0へ
転送する

という内容です。

転送時、10はBIN値に変換して
D0へ格納されます。

GXWorks2で実際動作させた
画像で検証しましょう。

MOV命令:定数をデータレジスタへMOV命令:定数をデータレジスタへ

上のラダー図で説明します。

MOV命令でK18をD0に
H18をD1に転送する内容です。

Kは10進数の、Hは16進数の
定数を示します。

ですので、同じ18でも
10進数にすると数値は
違います。

D0とD1の下に青字がありますが
それが転送後の10進数での
数値です。

10進数はそのまま18ですが
16進数の方は24になってますよね。

K18とH18はBIN値で
D0とD1に格納されるわけですが
それも見てみましょう。

BIN値格納データBIN値格納データ

上はGXWorks2の
デバイス/バッファメモリ一括モニター
で見た画面です。

データレジスタには
2進数に変換して
格納されていますね。

2進数の見方等も
前述で紹介したページで
書いていますので
参考ください。

 ⇒2進数(BINARY NUMBER)

データレジスタ間で転送

[MOV D3 D10]

上記の記述は
データレジスタD3のデータを
D10へ転送する内容です。

同じ16ビットのデータレジスタ
ですので、D3がそのまま
D10に転送されます。

ビットデバイスをデータレジスタへ転送

シーケンサでは
K3M10などの記述で
ビットデバイスで数値を
作ることがあります。

これが分からないと
ここから先は理解できないので
分からない場合は
まずは以下のページを見てください。

 ⇒ビットデバイスで数値をつくる方法

MOV命令:ビットデバイスをデータレジスタへMOV命令:ビットデバイスをデータレジスタへ

上のラダー図を例に説明します。

[MOV K1X003 D0] の記述より
K1で4ビット指定で
X003,X004,X005,X006の
ON/OFFが0/1となって
D0へ転送されます。

下がGXWorks2の
デバイス/バッファメモリ一括モニター
で見た画面です。

BIN値格納データ2BIN値格納データ2

ラダー図から
X003はONなので0は1
X004はOFFなので1は0
X005はOFFなので2は0
X006はONなので3は1

がD0のデータレジスタへ
格納されていますね。

K1で4ビットのデータですので
X007、X013はONしていますが
無視されD0のそのビットは
0になります。

あと以下も説明しておきます。

[MOV C0 D12]

[MOV T6 D12]

Cはカウンター、Tはタイマーです

この2つはビットデバイスですが
上の記述では現在値を示します。

C0のカウンターの現在の
カウント数
T6のタイマーの現在の
経過時間

をD12のデータレジスタへ
転送します。

ここでのC0、T6は
三菱電機ではデータレジスタの
1つで現在値レジスタと
呼んでいます。

カウンターとタイマーが
ビットデバイスなので
この項に加えました。

データレジスタをビットデバイスへ転送

前項とは逆で
データレジスタの16ビットデータで
指定した桁分のビットデバイスへ
転送します。

データレジスタのビットが1なら
転送先のデバイスはONになります。

MOV命令:データレジスタをビットデバイスへMOV命令:データレジスタをビットデバイスへ

上のラダー図を例に説明します。

[MOV D0 K1Y002] の記述より

K1で4ビット指定で
Y002,Y003,Y004,Y005に
D0のデータレジスタの1桁目の
0/1がON/OFFとして
転送されます。

まずは、[MOV K2165 D0]で
10進数2165をD0へ転送します。

下がGXWorks2の
デバイス/バッファメモリ一括モニター
で見た画面です。

BIN値格納データ3BIN値格納データ3

BIN値に変換して転送されるので
このようになります。

K1の1桁指定ですので
0が1なのでY002はON
1が0なのでY003はOFF
2が1なのでY004はON

3が0なのでY005はOFF
になっています。
(青色になったa接点は
ONしていることを示します)

Y005,Y006にあたる
4,5は1ですが
1桁指定ですので範囲外で
Y005,Y006はOFFになります。

4.PMOV命令

PMOV命令は
PLS命令とMOV命令が
合体したようなものです。

PLS命令については
以下のサイトを参考ください。

シーケンサのPLS命令,PLF命令とは

MOV命令とタイムチャートMOV命令とタイムチャート

上図はMOV命令のラダー図例と
タイムチャートです。

駆動接点であるX000がON
している間は
MOV命令も動作しています。

ですので、X000がONしている間
D3の数値が変われば
D5の数値も変わります。

下図はPMOV命令のラダー図例と
タイムチャートです。

PMOV命令とタイムチャートPMOV命令とタイムチャート

PMOV命令は
駆動接点であるX000がON
した直後の1周期(1スキャン)
だけPMOV命令は動作します。

1周期(1スキャン)だけです。

スキャンについては
以下のサイトを参考ください。

シーケンサのプログラム処理とスキャンタイムについて

X000がONしている間に
D3の値が変わっても
D5へは転送されないので
D5は最初の値のままです。

転送するためには
1回X000をOFFにして
再度ONにする必要があります。

5.DMOV命令、PDMOV命令

MOV命令、PMOV命令は
16ビット、データレジスタ1つ分の
転送命令でした。

データレジスタ1つ16ビットで
扱える数値-32,768~+32,767の
範囲を超える数値を扱う場合は

データレジスタ2つ32ビットに
して対処します。

これで
-2,147,483,648~2,147,483,647
を扱えます。

DMOV命令、PDMOV命令は
32ビットのデータ転送を
します。

[DMOV K800000 D0]

上記記述の場合
D0だけではなく、デバイス番号に
1を足したD1も使います。

[MOV K800000 D0]

この記述にすると
GXWorks2で記述自体できません。

6.BMOV命令

BMOVは一括転送する命令です。

[BMOV D0 D10 K3]

上記のように記述します。

何をしているかというと

D0→D10
D1→D11
D2→D12

転送元、転送先の
デバイス番号を先頭として
K〇で指定した〇個の
デバイス番号のデータを
転送させます。

K3だったので
3個のデータを転送したのです。

MOV命令でも1つずつ記述
すればできますが

沢山のデータを転送する時は
ステップ数は増え
プログラムが分かりにくくなります。

そのような時に使うと
便利な命令です。

7.FMOV命令

FMOVは多点転送する命令です。

[FMOV D3 D10 K5]

上記のように記述します。

何をしているかというと

D3→D10
D3→D11
D3→D12
D3→D13
D3→D14

転送元であるD3のデータは固定、

転送先は記述したデバイス番号を
先頭としてK〇で指定した〇個の
デバイス番号のデータを
転送させます。

K5だったので
転送先が5個でD10~D14に
転送するのです。

8.まとめ

転送命令は数値を扱う
プログラムでは必ず使います。

MOV命令が基本となりますが
ここで紹介した他の命令も
状況に応じて使ってみてください。

当方ではこのページにも関連する
初心者向のシーケンス制御の教材も
扱っていますので

興味があれば
以下の画像をクリックして
ご確認ください。

●リレーシーケンス教材に
 ついては以下の画像をクリック

リレーシーケンス教材リレーシーケンス教材について


●シーケンサ教材に
 ついては以下の画像をクリック

PLC(シーケンサ)教材PLC(シーケンサ)教材について