オムロンNJ/NXシリーズにおける「文字列置換(REPLACE)」は、文字列の指定した部分を置換するファンクションです。
文字列置換(REPLACE)を用いることにより「表示器や外部機器から入力された文字列」や「ラダープログラム内で格納した文字列」の一部を指定した文字列に置換する回路を作ることができます。
この記事では、オムロンNJ/NXシリーズにおける文字列置換(REPLACE)の指令方法とラダープログラム、ST言語の例について解説します。
目次
1. 文字列置換の指令方法
文字列置換(REPLACE)はLD表現(ラダープログラム)とST表現(ST言語)で使用することができます。

Out := REPLACE(In1, In2, L, P);文字列置換(REPLACE)は↓の引数で構成されています。
| 引数 | タイプ | データ型 | 初期値 | コメント |
|---|---|---|---|---|
| EN | IN | BOOL | – | イネーブル入力 |
| ENO | OUT | BOOL | – | イネーブル出力 |
| In1 | IN | STRING | ” | 置換対象文字列 |
| In2 | IN | STRING | ” | 置換する文字列 |
| L | IN | UINT | 1 | 置換文字数(0~1985) |
| P | IN | UINT | 1 | 置換開始位置(1~1985) |
| Result | RETURN | STRING | – | 置換された文字列結果 |
LD表現
↓がLD表現で使用したラダープログラム例です。

このラダープログラムでは、InFlag(入力フラグ)がON(TRUE)している間、文字列ABCDEFの文字列DE(置換文字数「2」、置換開始位置「4」)を文字列XYZに置換してOutStr(出力文字列)に格納します。

削除された文字列結果には終端コードNULL(00H)が付与されます。
InFlag(入力フラグ)がON(TRUE)中に置換対象文字列(上記だとABCDEF)や他の引数の値が変化すると、OutStr(出力文字列)の結果も追従して変化します。
InFlag(入力フラグ)がON(TRUE)した瞬間のみ文字列を置換する場合、「InFlag(入力フラグ)を立ち上がり微分(R_TRIG)ファンクションブロック等で微分化する」または「文字列置換(REPLACE)FUNに微分型(@)を指定する」方法があります。
立ち上がり検出(R_TRIG)ファンクションブロックについては以下のページで解説しております。
微分型(@)を指定する場合、FUN(ファンクション)入力時、頭文字に@を付けます。

ST表現
↓がST表現で使用したST言語例です。
IF InFlag THEN
OutStr := REPLACE(In1 := 'ABCDEF', In2 := 'XYZ', L := UINT#2, P := UINT#4);
END_IF;このSTでは、InFlag(入力フラグ)がON(TRUE)している間、文字列ABCDEFの文字列DE(置換文字数「2」、置換開始位置「4」)を文字列XYZに置換してOutStr(出力文字列)に格納します。※前述のLD表現と同じ動作です。
2.【例題】変数の文字列を一部置換する
下記仕様のラダープログラム、STを文字列置換(REPLACE)を用いて解説します。
Str00の文字列長が5文字以上の場合のみ、置換処理を行う。
※Str00の文字列長が5文字未満であればスイッチ緑を押しても置換処理は行わない。
Str00に格納されている文字列の3文字目から2文字を文字列XXXに置換してStr01に格納する処理に文字列置換(REPLACE)を使用します。
Str00の文字列長が5文字以上の場合のみ削除処理を行うため、文字列長さ検出(LEN)を使用してStr00の文字列長を一度変数に格納します。オムロンNJ/NXシリーズの文字列長さ検出(LEN)ファンクションについては以下のページで解説しております。
Str00の文字列長を格納した変数と定数”5”を比較して、5以上の場合のみ文字列置換(REPLACE)にて置換処理を行うようにします。(変数≧定数5)
オムロンNJ/NXシリーズの比較(>=)ファンクションについては以下のページで解説しております。(他の比較についてもまとめて解説しております。)
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

スイッチ緑を押すと、Str00に格納されている文字列の3文字目から2文字を文字列XXXに置換してStr01に格納します。
Str00の文字列長が5文字以上の場合のみ、置換処理を行います。5文字未満の場合は、スイッチ緑を押しても置換処理を行いません。
使用する変数
使用する変数は以下になります。
| 変数 | データ型 | コメント |
|---|---|---|
| SwGreen | BOOL | スイッチ緑 |
| Str00_Len | UINT | 文字列00長さ |
| Str00 | STRING[30] | 文字列00(置換対象文字列) |
| Str01 | STRING[30] | 文字列01(置換された文字列結果) |
ラダープログラム
ラダープログラムは以下のようになります。

イネーブル入力にP_On(常時ON)、対象文字列にStr00、文字列長結果にStr00_Lenを指令することで、Str00に格納されている文字列長(何文字か)を常にStr00_Lenに格納します。(1行目)
イネーブル入力にSwGreen(スイッチ緑)、Str00_Len>=UINT#5の比較を指令することで、Str00が5文字以上の状態でスイッチ緑を押した場合のみ文字列置換(REPLACE)が実行されます。(2行目の条件)
イネーブル入力に上記、置換対象文字列にStr00、置換する文字列に’XXX’、置換文字数にUINT#2、置換開始位置にUINT#3、置換された文字列結果にStr01を指令することで、Str00が5文字以上の状態でスイッチ緑を押した場合のみ、Str00の3文字目から2文字を文字列XXXに置換した結果をStr01に格納します。(2行目の文字列置換(REPLACE))
ST言語
ST言語は下記のようになります。
//Str00の文字列長をStr00_Lenに格納
Str00_Len := LEN(Str00);
//スイッチ緑押下かつStr00_Lenが5以上の場合、Str01にStr00の3文字目から2文字をXXXに置換した結果を格納
IF SwGreen AND Str00_Len >= UINT#5 THEN
Str01 := REPLACE(In1 := Str00, In2 := 'XXX', L := UINT#2, P := UINT#3);
END_IF;3. おわりに
オムロンNJ/NXシリーズにおける文字列置換(REPLACE)について解説しました。


