IEC 61131-3の最新技術動向とJIS B 3503:PLCの国際標準プログラミング入門(6)(1/2 ページ)
「IEC 61131-3」と「PLCopen」について解説する本連載。最終回となる今回は2013年2月に改訂されたPLC用プログラミング言語国際規格「IEC 61131-3 第3版」の内容と、対応するJIS規格である「JIS B 3503」への取り込み状況について解説します。
「IEC 61131-3」と「PLCopen」について解説する本連載。前回は「PLCopenの「Safety FB」とは」をテーマに、具体的な事例を挙げながら紹介しました。
6回目となる今回は、2013年2月に改訂されたPLC用プログラミング言語国際規格「IEC 61131-3 第3版」の内容と、対応するJIS規格である「JIS B 3503」への取り込み状況について解説します。
IEC 61131-3第3版における改訂概要
「IEC 61131-3」は1993年に初版が発行され、2003年に第2版に改訂、そして2013年に第3版への改訂が行われました。今回の第3版では、異なるPLCベンダー間でのプログラム移植性を高めるためのいくつかの基本データ型、標準ファンクション、標準ファンクションブロックが追加されました。さらにオブジェクト指向拡張や名前空間の導入といったプログラミング言語機能の拡張が行われました。
原則としてこれら第3版における言語拡張は、第2版の言語仕様に対する後方互換性が保たれています。第2版の言語仕様に基づいて記述されたアプリケーションプログラムは、第3版に対応した実行環境においてもそのまま同じ振る舞いをします。そのため、ユーザーは新しい言語要素を知らなくても従来の言語仕様に沿ってプログラミングを行えるようになっています。
第2版から第3版での主な改訂点は次の通りです。
- オブジェクト指向拡張
- クラス(CLASS)とメソッド(METHOD)の導入
- インタフェース(INTERFACE)とPOUによるその実装(IMPLEMENTS)の導入
- 継承(EXTENDS)によるボディとメソッドのオーバーライド(OVERRIDE)の導入
- ファンクションブロックのオブジェクト指向拡張
- 名前空間(NAMESPACE)とアクセス限定子INTERNALの追加
- 標準データ型の追加
- 64ビット精度時間型(LTIME、LTOD、LDT)、文字型(CHAR、WCHAR)追加
- 上記追加に伴う総称データ型(ANY_DURATION、ANY_CHARS、ANY_CHAR)の追加
- 標準ファンクション/ファンクションブロックの追加
- 追加されたデータ型を扱うファンクション群
- 型指定TRUNC命令、エンディアン変換命令、データ正当性確認命令、三角関数ATAN2 など
- ユーザー定義データ型に対する拡張
- 参照型の導入(型情報付きポインタ、算術演算は禁止)
- 入/出力変数において可変長配列型が利用可能に
- 列挙型の列挙子に基本データ型と値を指定できるように拡張
- 構造体型メンバに対する先頭からの相対アドレス指定(重複指定も可)
- ANY_BIT型変数へのドット”.”を用いた部分アクセス記法の追加
- その他の拡張
- コメント表記方法の拡張(//、/* */、コメントの入れ子の許容)
- ラダーにおける比較接点の追加
- ストラクチャードテキスト(ST)におけるCONTINUE文の追加
- 戻り値のないファンクションの許容
- POUの再帰呼び出しが禁止ではなくベンダー実装依存に変更
- 代入に伴う暗黙型変換/明示的型変換ルールの明確化
オブジェクト指向拡張として追加された主な言語要素
第3版での特徴的な拡張項目である“オブジェクト指向拡張”に関連して追加された主な言語要素は表1の通りです。
これらの言語要素とその間の実装(IMPLEMENTS)、継承(EXTENDS)といった関連は、基本的にC++やJavaといった汎用オブジェクト指向プログラミング言語と同様のものと考えて問題ありません。オブジェクト指向設計の経験があるユーザーにとっては、オブジェクト指向で行った設計をそのままIEC 61131-3言語で実装できるようになった点がこの言語拡張の利点の1つといえるでしょう。
以前からのIEC 61131-3ユーザーには、まずメソッドの利点について紹介したいと思います。ファンクションブロックは、データ(内部変数)と処理ロジック(ボディ)をカプセル化したものではありましたが、処理ロジックとしてボディを1つだけしか持っていないため、基本的に1つの機能しか持つことができませんでした。
これに対し、第3版で追加されたクラスおよび拡張されたファンクションブロックには、その内部変数を共有した複数の処理ロジックをメソッドとして定義することができるため「関連の深いデータとそれを取り扱う複数の機能を1つのPOUとしてカプセル化する」ことができます。そのクラスおよびファンクションブロックに定義された複数のメソッドは、外部から選択的に呼び出すことができます。
例えば、本連載第4回『PLCopenの「Motion Control FB」とは』で紹介された「Motion Control FB」群は、従来のIEC 61131-3第2版に基づいて定義されています。そのため、軸を示すAXIS_REF構造体と、それを入出力変数として受け取りその軸に対する各種の動作指示を実行する数十個のファンクションブロック群(MC_MoveAbsolute、MC_MoveRelativeなど)で構成されています。これらは第3版の言語機能を用いると、AXIS_REFを内部変数としファンクションブロック群をそれぞれメソッドとすることによって、Motion Control FB群を1つのクラスにまとめてしまえると考えられます。
このように、従来は「複数のファンクションブロック群を、その間での変数値を引き渡しながら呼び出すこと」で実現していた一連の機能を、メソッドを備えた1つのPOUにまとめてしまうことでアプリケーションの見通しとメンテナンス性を向上させられます。さらに、インタフェースや実装、継承、メソッドのオーバーライドといったオブジェクト指向言語機能をうまく利用することで、さらにメンテナンスや再利用性を向上させることが期待できます。ただ、それら言語機能ついての紹介は紙面の都合上また別の機会にさせていただきます。
Copyright © ITmedia, Inc. All Rights Reserved.