キーエンスKV-Xシリーズにおける「文字列長検出(LEN)」は、指定した文字列の文字数をカウントして結果を格納するファンクションです。
文字列長検出(LEN)を用いることにより「表示器や外部機器から入力された文字列」や「ラダープログラム内で格納した文字列」の文字列長(何文字か)をカウントするプログラムを作ることができます。
この記事では、キーエンスKV-X500/X300シリーズにおける文字列長検出(LEN)の指令方法とラダープログラム、ST言語の例について解説します。
目次
1. 文字列長検出の指令方法
文字列長検出(LEN)はLD表現(ラダープログラム)とST表現(ST言語)で使用することができます。

Result := LEN(In);文字列長検出(LEN)は↓の引数で構成されています。
| 引数 | タイプ | データ型 | 初期値 | コメント |
|---|---|---|---|---|
| EN | IN | BOOL | – | イネーブル入力 |
| ENO | OUT | BOOL | – | イネーブル出力 |
| In | IN | STRING[65534] | – | 対象文字列 |
| Result | RETURN | UINT | – | 文字列長結果 |
LD表現
↓がLD表現で使用したラダープログラム例です。

このラダープログラムでは、InFlag(入力フラグ)がON(TRUE)している間、文字列InStrの文字数をOutData(出力データ)に格納します。
InFlag(入力フラグ)がON(TRUE)中に文字列InStrの文字列長が変化すると、OutData(出力データ)の値も追従して変化します。
InFlag(入力フラグ)がON(TRUE)した瞬間のみ文字列InStrの文字数をOutData(出力データ)に転送する場合、「InFlag(入力フラグ)を立ち上がり検出(R_TRIG)ファンクションブロック等で微分化する」または「文字列長検出(LEN)FUNを微分指定する」方法があります。
立ち上がり検出(R_TRIG)ファンクションブロックについては以下のページで解説しております。
微分指定する場合、命令の引数設定ダイアログで微分(E)にチェックを入れます。

ST表現
↓がST表現で使用したST言語例です。
IF InFlag THEN
OutData := LEN(In := InStr);
END_IF;このSTでは、InFlag(入力フラグ)がON(TRUE)している間、文字列InStrの文字数をOutData(出力データ)に格納します。※前述のLD表現と同じ動作です。
2.【例題】変数の文字列長を検出
下記仕様のラダープログラム、STを文字列長検出(LEN)を用いて解説します。
スイッチ黄を押すと、Str01に格納されている文字列長(何文字か)をData00に格納する。
スイッチ赤を押すと、定数”0”をData00に格納する。
文字列変数(Str00,Str01)に格納されている文字列長(何文字か)をData00に格納する処理に文字列長検出(LEN)を使用します。
Data00に定数”0”を格納する処理に転送(MOVE)ファンクションを使用します。キーエンスKV-X500/X300シリーズの転送(MOVE)ファンクションについては以下のページで解説しております。
タッチパネルの動作イメージ
タッチパネルの動作イメージは以下のようになります。

スイッチ緑を押すと、Str00に格納されている文字列長(何文字か)をData00に格納します。スイッチ黄を押すと、Str01に格納されている文字列長(何文字か)をData00に格納します。
スイッチ赤を押すと、定数”0”をData00に格納します。
使用する変数
使用する変数は以下になります。
| 変数 | データ型 | コメント |
|---|---|---|
| SwGreen | BOOL | スイッチ緑 |
| SwYellow | BOOL | スイッチ黄 |
| SwRed | BOOL | スイッチ赤 |
| Data00 | UINT | データ00(文字列長) |
| Str00 | STRING[30] | 文字列00 |
| Str01 | STRING[30] | 文字列01 |
ラダープログラム
ラダープログラムは以下のようになります。

イネーブル入力にSwGreen(スイッチ緑)、対象文字列にStr00、文字列長結果にData00を指令することで、スイッチ緑を押すとStr00に格納されている文字列長(何文字か)をData00に格納します。(1行目)
イネーブル入力にSwYellow(スイッチ黄)、対象文字列にStr01、文字列長結果にData00を指令することで、スイッチ黄を押すとStr01に格納されている文字列長(何文字か)をData00に格納します。(2行目)
イネーブル入力にSwRed(スイッチ赤)、転送元にUINT#0、転送先にData00を指令することで、スイッチ赤を押すとData00にUINT#0(1ワード符号なし整数の0)を格納します。(3行目)
ST言語
ST言語は下記のようになります。
//スイッチ緑押下でStr00の文字列長をData00に格納
IF SwGreen THEN
Data00 := LEN(In := Str00);
END_IF;
//スイッチ黄押下でStr01の文字列長をData00に格納
IF SwYellow THEN
Data00 := LEN(In := Str01);
END_IF;
//スイッチ赤押下でData00に定数"0"を格納
IF SwRed THEN
Data00 := UINT#0;
END_IF;3. おわりに
キーエンスKV-X500/X300シリーズにおける文字列長検出(LEN)について解説しました。
電気ハード設計、PLC/TPソフト設計、ロボットティーチング、制御盤製作の外注業務は、ぜひ永工舎にご相談ください。

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

