オムロンNJ/NXシリーズにおける「配列の転送(AryMove)FUN」は、複数の配列要素を転送するファンクションです。
配列の転送(AryMove)FUNを用いることにより、一回のFUNで「配列の連続した要素」を「他の配列の連続した要素」にコピーすることができます。(n→n)
この記事では、オムロンNJ/NXシリーズにおける配列の転送(AryMove)FUNの指令方法とラダープログラム、ST言語の例について解説します。
目次
1. 配列の転送FUNの指令方法
配列の転送(AryMove)FUNはLD表現(ラダープログラム)とST表現(ST言語)で使用することができます。

AryMove(In, AryOut, Size);
配列の転送(AryMove)FUNは↓の引数で構成されています。
引数 | タイプ | データ型 | 初期値 | コメント |
---|---|---|---|---|
EN | IN | BOOL | – | イネーブル入力 |
ENO | OUT | BOOL | – | イネーブル出力 |
In | IN | – | – | 転送対象配列 |
AryOut | IN-OUT | – | – | 転送結果配列 |
Size | IN | UINT | 1 | 転送要素数 |
Out | OUT | BOOL | – | 常にTRUE |
LD表現
↓がLD表現で使用したラダープログラム例です。

このラダープログラムでは、InFlag(入力フラグ)がON(TRUE)している間、InData[0]~[9](入力配列)の値をOutData[0]~[9](出力配列)に転送します。いずれも要素数10です。

InFlag(入力フラグ)がON(TRUE)中にInData[0]~[9](入力配列)の値が変化すると、OutData[0]~[9](出力配列)の値も追従して変化します。
InFlag(入力フラグ)がON(TRUE)した瞬間のみInData[0]~[9](入力配列)の値をOutData[0]~[9](出力配列)に転送する場合、「InFlag(入力フラグ)を立ち上がり検出(R_TRIG)ファンクションブロック等で微分化する」または「配列の転送(AryMove)FUNに微分型(@)を指定する」方法があります。
立ち上がり検出(R_TRIG)ファンクションブロックについては以下のページで解説しております。

微分型(@)を指定する場合、FUN(ファンクション)入力時、頭文字に@を付けます。

ST表現
↓がST表現で使用したST言語例です。
IF InFlag THEN
AryMove(In := InData[0], Dst := OutData[0], Size := UINT#10);
END_IF;
このSTでは、InFlag(入力フラグ)がON(TRUE)している間、InData[0]~[9](入力配列)の値をOutData[0]~[9](出力配列)に転送します。※前述のLD表現と同じ動作です。
2.【例題】配列指定変数の一部を複数転送
下記仕様のラダープログラム、STを配列の転送(AryMove)FUNを用いて解説します。
スイッチ黄を押すと、配列指定変数Ary01[1]~[3]の値をAry00[1]~[3]に転送する。
スイッチ緑と黄を両方押した場合、後から押された処理を適用する。
配列指定変数はいずれも一次元配列、要素は[0]~[4]の要素数5とする。
配列の転送(AryMove)FUNの転送対象配列と転送結果配列にAry00[1]またはAry01[1]、転送要素数に「3」を指定します。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

スイッチ緑を押すと、配列指定変数Ary00[1]~[3]の値をAry01[1]~[3]に転送します。
スイッチ黄を押すと、配列指定変数Ary01[1]~[3]の値をAry00[1]~[3]に転送します。
スイッチ緑と黄を両方押した場合、後から押された処理が適用されます。
使用する変数
使用する変数は以下になります。
変数 | データ型 | コメント |
---|---|---|
R_TRIG1 | R_TRIG | FBインスタンス |
R_TRIG2 | R_TRIG | FBインスタンス |
SwGreen | BOOL | スイッチ緑 |
SwYellow | BOOL | スイッチ黄 |
Ary00 | ARRAY[0..4] OF UINT | 配列00 |
Ary01 | ARRAY[0..4] OF UINT | 配列01 |
ラダープログラム
ラダープログラムは以下のようになります。

立ち上がり検出(R_TRIG)を使用することにより、各スイッチの立ち上がり(FALSE→TRUE)を検出した時のみ配列の転送(AryMove)FUNが実行されます。
転送対象配列にAry00[1]、転送結果配列にAry01[1]、転送要素数にUINT#3を指令することで、Ary00[1]~[3]の値をAry01[1]~[3]に転送します。(1行目のスイッチ緑押下)
転送対象配列にAry01[1]、転送結果配列にAry00[1]、転送要素数にUINT#3を指令することで、Ary01[1]~[3]の値をAry00[1]~[3]に転送します。(2行目のスイッチ黄押下)
ST言語
ST言語は以下のようになります。
//スイッチの立ち上がり検出
R_TRIG1(CLK := SwGreen);
R_TRIG2(CLK := SwYellow);
//スイッチ緑の立ち上がりでAry00[1]~[3]をAry01[1]~[3]に転送
IF R_TRIG1.Q THEN
AryMove(In := Ary00[1], AryOut := Ary01[1], Size := UINT#3);
END_IF;
//スイッチ黄の立ち上がりでAry01[1]~[3]をAry00[1]~[3]に転送
IF R_TRIG2.Q THEN
AryMove(In := Ary01[1], AryOut := Ary00[1], Size := UINT#3);
END_IF;
3. おわりに
オムロンNJ/NXシリーズにおける配列の転送(AryMove)FUNについて解説しました。
電気ハード設計、PLC/TPソフト設計、ロボットティーチング、制御盤製作の外注業務は、ぜひ永工舎にご相談ください。

当サイトを運営している電気設計人は、個人で永工舎として外注業務をお請けしております。
以下の参考書はラダープログラムの色々な「定石」が記載されており、実務で使用できるノウハウが多く解説されています。私がラダープログラムの参考書として自信をもってオススメできるものです。