HOME > ソフテックだより > 第389号(2021年11月3日発行) 技術レポート「PLCプログラムにおける変数・構造体の利用〜キーエンス編〜」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第389号(2021年11月3日発行)
技術レポート

「PLCプログラムにおける変数・構造体の利用〜キーエンス編〜」

1. はじめに

三菱電機社のPLCソフト開発環境では以前(GX Works2)から変数(ラベル)・構造体の利用が可能でしたが、2020年4月にキーエンス社のPLC(KV-8000)でも変数・構造体が利用できるようになりました。
実案件でも利用する機会がありましたので、今回はキーエンス社製PLC(KV-8000)における変数・構造体機能について詳しくご紹介していきたいと思います。

PLCの変数(ラベル)プログラミングは、過去のソフテックだより第209号『PLCの構造化プログラミングについて』でもメリットやデメリットをご紹介していますので、今回は構造体の利用に重点を置いてご紹介させていただきます。

2. 構造体について

構造体はプログラミング言語におけるデータ型の1つで、複数の変数をひとまとめにして格納できます。
異なるデータ型でもまとめることができる点や、それぞれのメンバ変数に名前が付いているという特徴があります。
C言語など汎用プログラミングのご経験がある方にとってはお馴染みのデータ型かと思いますが、PLCソフト開発においても概念として違いもなく、分かり易く解説しているサイトが沢山ありますので、ここでの説明は省略させていただきます。

3. 使用までの流れ

早速ですが、まずは簡単にキーエンス製PLC(KV-8000)および専用エンジニアリングツール『KV STUDIO (Ver11.30)』において、変数・構造体を使用するまでの流れをご紹介していきます。

3-1. 構造体の作成

下記図の通り、KV STUDIOのプロジェクトにある構造体から新規作成することができます。

クリックで拡大
図 1. 構造体の新規作成

作成した構造体を選択し、編集ウィンドウからメンバ(変数)情報を設定します。

構造体のメンバ設定
図 2. 構造体のメンバ設定

3-2. 構造体型の変数定義

構造体を作成した後、作成した構造体型の変数を定義します。
変数名を命名し、データ型として作成した構造体を選択します。

クリックで拡大
図 3. 構造体型の変数定義

3-3. 使用イメージ

変数の定義ができましたので、早速コーディングしてみます。
ラダー(LD)言語でも使用できますが、見やすさを考慮して今回は全てスクリプトでご紹介します。
下記図のようなイメージとなります。

コーディングイメージ
図 4. コーディングイメージ

下記のように構造体型の変数を入力すると自動的にメンバ情報が表示され、選択して入力することも可能です。

入力時の自動表示
図 5. 入力時の自動表示

4. 構造体の活用例

簡単ではございますが、実際にプログラムで変数・構造体を使用するまでの流れをご紹介しました。
ここからは、構造体を使用することでどのようなメリットがあるか?どのような場面で使用するのが良いのか?といった点について、2つの具体例を挙げてご紹介していきたいと思います。

4-1. 同じ型式のセンサが複数台ある場合

3章で温湿度センサの構造体を作成しましたが、このセンサが例えば10台ある場合について考えてみます。
構造体を使用しない場合は、下記図のようにデータ項目分の変数を配列として定義する形になるかと思います。

クリックで拡大
図 6. 構造体を”使用しない”場合

対して構造体を使用する場合は、下記図のように構造体型の変数を配列として定義する形になります。
FOR文の終了条件に使用しているACNT命令は配列の要素数を返す命令で、この場合は0〜9までの10回となります。

クリックで拡大
図 7. 構造体を”使用する”場合

プログラム量にほとんど違いはありませんが、1セットにされた温度/湿度/異常というデータがセンサ台数分あるというデータ構造になるため、構造体を使用した方が分かり易く感じないでしょうか?

4-2. 同じ拡張ユニットを複数台接続する場合

PLCでは様々な機能を持つ拡張ユニットを増設することが多くあり、同じ拡張ユニットを複数台接続する場合もよくあります。
今回は例として、高速4chアナログ入力ユニット(KV-SAD04)が3台接続されている場合について考えてみます。

クリックで拡大
図 8. ユニット構成例

3台のデータメモリ(DM)割付は1台目D1000〜、2台目D1100〜、3台目 D1200〜とします。
(※当該ユニットは21ワード目以降もデータが格納されていますが、簡素化するため省略します)

データメモリ割付
図 9. データメモリ割付

早速、構造体を作成していきます。
まず+0〜19ワード目まで4ch分ずつデータが連続しているためこれらを下記図左のように1つの構造体としてまとめます。次に最初に作成した構造体とエラーコード用の変数を組み合わせてまとめます。

構造体の作成
図 10. 構造体の作成

2つ目に作成した構造体を使用して、ユニット3台分の配列型変数を定義し、割付デバイスに1台目先頭のD1000を設定しますと、下記左図のように2台目以降のデバイスも自動で割り当てられます。

クリックで拡大
図 11. 左:変数の定義、右:プログラムイメージ

5. その他

ここまで、構造体の使用手順や具体的な活用例といった基本的な内容をご紹介させていただきました。
キーエンスPLCで構造体を使用するにあたり、他にも知っておきたいなと感じるポイントがいくつかありますのでご紹介させていただきます。

5-1. デバイスモニタについて

PLCソフト開発において必要不可欠な機能として、デバイスにどんな値が入っているのか確認するデバイスモニタ機能があります。
下記図のように構造体を使用した変数でも通常のデバイスと同様にモニタすることが可能です。

デバイスモニタイメージ
図 12. デバイスモニタイメージ

5-2. タッチパネル(VT)との連携

PLCとは切り離せない関係としてタッチパネルがあります。
キーエンス社のホームページでも簡単に紹介されていますが、キーエンス社のタッチパネル(VTシリーズ)のエンジニアリングツール『VT STUDIO(Ver8.21)』でも変数・構造体を使用することができます。
下記図のように、KV STUDIOで作成した変数・構造体をそのまま読み込んで使用することができるため、タッチパネル含めてデバイスを意識しなくてもよくなります。

VT STUDIOでの取り込み
図 13. VT STUDIOでの取り込み

5-3. コーディング時の型表示

3-3使用イメージで自動的にメンバ情報が表示されるとご紹介しましたが、表示される情報として設定したコメントのみとなっています。(Ver11.30時)
一方で、三菱電機社の専用エンジニアリングツール『GX Works3 (Ver1.077F)』ではデータ型が表示されます。

コーディング時の表示(KV STUDIO) コーディング時の表示(GX Works3)
図 14. コーディング時の表示(左:KV STUDIO、右:GX Works3)

あくまでも執筆時点での仕様であり、もちろんハンガリアン記法で命名すれば良いだけという考えもありますが、個人的にはやはりデータ型が表示される方がより便利だと感じています。

6. おわりに

今回は変数(ラベル)プログラミングをより便利な物とする構造体に重点をおいてご紹介させていただきました。
今回は時間が足りずに書けませんでしたが、それぞれのメンバ変数にも名前が付くという構造体の特徴を利用して、通信フォーマットに沿った形で受信データを解析する等でも活用することができます。

ただ私自身の状況としては、まだまだラダー(LD)言語でのプログラミングが多くを占めており、文字列処理や単純なデータ転送命令が繰り返される処理などで部分的にスクリプトを組み込む形での実装が多いのが実際のところです。

ソフテックだより第347号『PLCプログラミング言語の比較』でもご紹介していますが、各言語には得意・不得意がありますので、それらを十分に理解した上で選択できるようになる必要があります。
また、キーエンス社では開発ツールである『KV STUDIO (Ver11.30)』のバージョンアップを頻繁に行っているため、バージョンアップを忘れないようにする必要があります。

最後までお読みいただきありがとうございました。

(Y.T.)

[参考]
・キーエンスHP デバイスを意識しないから、設計工数を削減できる
  https://www.keyence.co.jp/landing/req/controls/kv-8000_2030_02.jsp
・キーエンス KV STUDIO Ver.11 ユーザーズマニュアル
・キーエンス KV-8000/7000/5000/3000/1000シリーズ スクリプトプログラミングマニュアル

関連ページへのリンク

関連するソフテックだより

ページTOPへ