「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」は1993年に初版が発行され、2003年に第2版に改訂、そして2013年に第3版への改訂が行われました。今回の第3版では、異なるPLCベンダー間でのプログラム移植性を高めるためのいくつかの基本データ型、標準ファンクション、標準ファンクションブロックが追加されました。さらにオブジェクト指向拡張や名前空間の導入といったプログラミング言語機能の拡張が行われました。
原則としてこれら第3版における言語拡張は、第2版の言語仕様に対する後方互換性が保たれています。第2版の言語仕様に基づいて記述されたアプリケーションプログラムは、第3版に対応した実行環境においてもそのまま同じ振る舞いをします。そのため、ユーザーは新しい言語要素を知らなくても従来の言語仕様に沿ってプログラミングを行えるようになっています。
第2版から第3版での主な改訂点は次の通りです。
第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.