【オムロンNJ/NX】ブロック設定(SetBlock)FUNの指令方法とラダープログラム/ST例

01_【オムロンNJNX】ブロック設定(SetBlock)FUNの指令方法とラダープログラムST例

オムロンNJ/NXシリーズにおける「ブロック設定(SetBlock)FUN」は、転送元の値を転送先を先頭とする要素数分に一括転送するファンクションです。

ブロック設定(SetBlock)FUNを用いることにより、一回のFUNで「1ヶの値」を「他の連続した変数」にコピーすることができます。(1→n)

この記事では、オムロンNJ/NXシリーズにおけるブロック設定(SetBlock)FUNの指令方法ラダープログラム、ST言語の例について解説します。

注意
この記事中のプログラムはSysmac Studio Ver.1.62で作成しており、CPUはNJ501-1500に設定してあります。
当サイトは現場の技術者を応援するスポンサー様のご支援により運営されています。
スポンサー様一覧ページはこちら>>

1. ブロック設定FUNの指令方法

ブロック設定(SetBlock)FUNはLD表現(ラダープログラム)とST表現(ST言語)で使用することができます。

10_LD表現
ラダープログラム
ST言語
SetBlock(In, AryOut, Size);

ブロック設定(SetBlock)FUNは↓の引数で構成されています。

引数タイプデータ型初期値コメント
ENINBOOLイネーブル入力
ENOOUTBOOLイネーブル出力
InIN転送元
AryOutIN-OUT転送先の先頭
SizeINUINT1転送要素数
OutOUTBOOL常にTRUE

LD表現

↓がLD表現で使用したラダープログラム例です。

11_LD使用例
メモ
ブロック設定(SetBlock)はFUN(ファンクション)のため、インスタンス名を指令する必要はありません。

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

11_命令イメージ

InFlag(入力フラグ)がON(TRUE)中にInData(入力データ)の値が変化すると、OutData[0]~[9](出力配列)の値も追従して変化します。

InFlag(入力フラグ)がON(TRUE)した瞬間のみInData(入力データ)の値をOutData[0]~[9](出力配列)に転送する場合、「InFlag(入力フラグ)を立ち上がり検出(R_TRIG)ファンクションブロック等で微分化する」または「ブロック設定(SetBlock)FUNに微分型(@)を指定する」方法があります。

立ち上がり検出(R_TRIG)ファンクションブロックについては以下のページで解説しております。

00_【オムロンNJNX】立ち上がり微分(R_TRIG)FBの指令方法とラダープログラムST例 【オムロンNJ/NX】立ち上がり微分(R_TRIG)FBの指令方法とラダープログラム/ST例

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

20_微分型

ST表現

↓がST表現で使用したST言語例です。

ST言語
IF InFlag THEN
	SetBlock(In := InData, AryOut := OutData[0], Size := UINT#10);
END_IF;
メモ
引数タイプがIN、IN-OUTの場合は、「:=」で引数に値を引き渡します。引数タイプが「OUT」の場合は、「=>」で引数の値を変数に格納します。

このSTでは、InFlag(入力フラグ)がON(TRUE)している間、InData(入力データ)の値をOutData[0]~[9](出力配列)に転送します。※前述のLD表現と同じ動作です。

注意事項

InとAryOut[]のデータ型は同じにする必要があります。異なるとビルド時に異常になります。

2.【例題】配列指定変数の一部をブロック設定

下記仕様のラダープログラム、STをブロック設定(SetBlock)FUNを用いて解説します。

仕様
スイッチ緑を押すと、配列指定変数Ary00[0]の値をAry00[1]~[3]に転送する。
スイッチ黄を押すと、配列指定変数Ary00[1]~[3]の値をゼロクリアする。
スイッチ緑と黄を両方押した場合、後から押された処理を適用する。
配列指定変数はいずれも一次元配列、要素は[0]~[4]の要素数5とする。

ブロック設定(SetBlock)FUNの転送元にAry00[0]または定数「0」、転送先の先頭にAry00[1]、転送要素数に「3」を指定します。

タッチパネルの動作イメージ

タッチパネルの動作イメージは以下のようになります。

例題①_タッチパネルイメージ

スイッチ緑を押すと、配列型変数Ary00[0]の値をAry00[1]~[3]に転送します。

スイッチ黄を押すと、配列型変数Ary00[1]~[3]の値をゼロクリア(0を格納)します。

スイッチ緑と黄を両方押した場合、後から押された処理が適用されます。

使用する変数

使用する変数は以下になります。

変数データ型コメント
R_TRIG1R_TRIGFBインスタンス
R_TRIG2R_TRIGFBインスタンス
SwGreenBOOLスイッチ緑
SwYellowBOOLスイッチ黄
Ary00ARRAY[0..4] OF UINT配列00

ラダープログラム

ラダープログラムは以下のようになります。

例題①_ラダープログラム

立ち上がり検出(R_TRIG)を使用することにより、各スイッチの立ち上がり(FALSE→TRUE)を検出した時のみブロック設定(SetBlock)FUNが実行されます。

転送元にAry00[0]、転送先の先頭にAry00[1]、転送要素数にUINT#3を指令することで、Ary00[0]の値をAry00[1]~[3]に転送します。(1行目のスイッチ緑押下)

転送元にUINT#0、転送先の先頭にAry00[1]、転送要素数にUINT#3を指令することで、定数「0」(1ワード符号なし整数型)をAry00[1]~[3]に転送します。(2行目のスイッチ黄押下)

ST言語

ST言語は以下のようになります。

ST言語
//スイッチの立ち上がり検出
R_TRIG1(CLK := SwGreen);
R_TRIG2(CLK := SwYellow);

//スイッチ緑の立ち上がりでAry00[0]をAry00[1]~[3]に転送
IF R_TRIG1.Q THEN
	SetBlock(In := Ary00[00], AryOut := Ary00[1], Size := UINT#3);
END_IF;

//スイッチ黄の立ち上がりで定数0をAry00[1]~[3]に転送
IF R_TRIG2.Q THEN
	SetBlock(In := UINT#0, AryOut := Ary00[1], Size := UINT#3);
END_IF;

3. おわりに

オムロンNJ/NXシリーズにおけるブロック設定(SetBlock)FUNについて解説しました。

電気ハード設計、PLC/TPソフト設計、ロボットティーチング、制御盤製作の外注業務は、ぜひ永工舎にご相談ください。

当サイトを運営している電気設計人は、個人で永工舎として外注業務をお請けしております。

以下の参考書はラダープログラムの色々な「定石」が記載されており、実務で使用できるノウハウが多く解説されています。私がラダープログラムの参考書として自信をもってオススメできるものです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です