キーエンスKV-Xシリーズにおける「平均値算出(AryMean)」は、指定した要素分の範囲の平均値を算出するファンクションです。
平均値算出(AryMean)を用いることにより「配列要素の平均値を算出する」プログラムを作ることができます。
この記事では、キーエンスKV-X500/X300シリーズにおける平均値算出(AryMean)の指令方法とラダープログラム、ST言語の例について解説します。
目次
1. 平均値算出の指令方法
平均値算出(AryMean)はLD表現(ラダープログラム)とST表現(ST言語)で使用することができます。

Result := AryMean(Src, Count);
平均値算出(AryMean)は↓の引数で構成されています。
引数 | タイプ | データ型 | 初期値 | コメント |
---|---|---|---|---|
EN | IN | BOOL | – | イネーブル入力 |
ENO | OUT | BOOL | – | イネーブル出力 |
Src | IN | – | – | 算出する範囲の先頭 |
Count | IN | UDINT | 0 | 算出する要素数 |
Result | RETURN | – | – | 平均値格納先 |
LD表現
↓がLD表現で使用したラダープログラム例です。

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

微分指定する場合、命令の引数設定ダイアログで微分(E)にチェックを入れます。

ST表現
↓がST表現で使用したST言語例です。
IF InFlag THEN
OutData := AryMean(InData[0], UDINT#10);
END_IF;
このSTでは、InFlag(入力フラグ)がON(TRUE)している間、InData[0]~[9](要素数10)の平均値をOutData(出力データ)に格納します。※前述のLD表現と同じ動作です。
2.【例題】配列型変数の平均値を求める
下記仕様のラダープログラム、STを平均値算出(AryMean)を用いて解説します。
スイッチ緑を押すと、配列型変数Ary00[0]~[4]の値をゼロクリアする。
配列型変数Ary00は一次元配列、要素は[0]~[4]の要素数5とする。
Ary00[0]~[4]の平均値をData00に格納する処理に平均値算出(AryMean)を使用します。
Ary00[0]~[4]をゼロクリアする処理に変数リセット(Clear)ファンクションを使用します。キーエンスKV-X500/X300の変数リセット(Clear)ファンクションについては以下のページで解説しております。

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

配列型変数Ary00[0]~[4]の平均値を常時Data00に格納します。
スイッチ緑を押すと、配列型変数Ary00[0]~[4]の値をゼロクリアします。
使用する変数
使用する変数は以下になります。
変数 | データ型 | コメント |
---|---|---|
SwGreen | BOOL | スイッチ緑 |
Data00 | UINT | データ00(平均値) |
Ary00 | ARRAY[0..4] OF UINT | 配列00 |
_AlwaysOn | BOOL | 常時ON(システム変数) |
ラダープログラム
ラダープログラムは以下のようになります。

算出する範囲の先頭にAry00[0]、算出する要素数にUDINT#5、平均値格納先にData00を平均値算出(AryMean)に指令することで、Ary00[0]~[4](要素数5)の平均値をData00に格納します。
イネーブル入力に_AlwaysOn(常時ON)を指令することで、平均値の算出を常時行います。
イネーブル入力にSwGreen(スイッチ緑)、対象変数にAry00を変数リセット(Clear)に指令することで、スイッチ緑を押すとAry00の配列要素を全てゼロクリアします。
ST言語
ST言語は下記のようになります。
//Ary00[0]~[4]の平均値を常時Data00に格納
Data00 := AryMean(Ary00[0], UDINT#5);
//スイッチ緑押下でAry00の値をゼロクリア
IF SwGreen THEN
Clear(Ary00);
END_IF;
3. おわりに
キーエンスKV-X500/X300シリーズにおける平均値算出(AryMean)について解説しました。
電気ハード設計、PLC/TPソフト設計、ロボットティーチング、制御盤製作の外注業務は、ぜひ永工舎にご相談ください。

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