(57)【要約】【課題】制御データのデータ型を考慮した制御プログラムの容易な開発を支援する。【解決手段】エディタ２５２は、制御データ別の変数と、当該変数に対応するデータ型であってデータの扱い方が同じとなる他のデータ型のうちの１つ以上を定義する情報と、制御装置で実行される処理を、定義された変数を用いて記述した命令コードとを生成する。コンパイラ２５４は、定義する情報および命令コードを用いて実行可能プログラムを生成する。コンパイラ２５４は、命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、演算式の型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定する。【選択図】図６
2019211823.tif 000002
【特許請求の範囲】
【請求項１】
対象を制御する制御装置で実行される実行可能プログラムを生成するサポート装置であって、
前記対象を制御するデータの型別に、当該データの型と、前記プログラムの実行時に前記制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報を格納するためのデータ格納手段と、
データ別の変数と、当該変数に対応するデータ型であって前記複数のデータ型のうちの１つ以上を定義する情報を生成する手段と、
前記制御装置で実行される処理を、定義された変数を用いて記述した命令コードを生成する手段と、
前記定義する情報および前記命令コードを用いて前記実行可能プログラムを生成する手段と、を備え、
前記実行可能プログラムを生成する手段は、
前記命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、
前記演算式の前記型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定するよう構成される、サポート装置。
【請求項２】
前記対象を制御するデータの型別の前記複数のデータ型は、前記対象のベンダ毎に格納されて、
前記ベンダ毎の前記複数のデータ型は、当該ベンダにより予め定められたデータ型と、当該予め定められたデータ型とデータの扱い方が同じとなり得る他のデータの型とを含む、請求項１に記載のサポート装置。
【請求項３】
前記定義する情報を生成する手段は、
前記データ別の変数と、当該変数に対応するデータ型として前記対象のベンダに対応した前記複数のデータ型を定義する情報を生成するよう構成される、請求項１または２に記載のサポート装置。
【請求項４】
前記サポート装置は、
前記制御装置から、当該制御装置に接続される前記対象のベンダを特定する情報を受信する、請求項３に記載のサポート装置。
【請求項５】
前記定義する情報を生成する手段は、
ユーザ操作に基き、前記データ別の変数に対応する１つ以上のデータ型を定義し、
前記変数と、当該変数に関連付けて前記複数のデータ型をモニタに表示させるよう構成される、請求項１から４のいずれか１項に記載のサポート装置。
【請求項６】
前記データ型による前記扱い方は、データサイズの大きさに基づく扱い方を含み、
各データ型に対応して、扱われる前記データサイズに基き当該データ型が他のデータ型に優先して前記変数に対応して設定される度合いを示す優先度を格納するための手段を、さらに備え、
前記演算結果のデータ型を決定することは、
前記型集合から、前記演算精度を保証するための基準に従う優先度を有したデータ型を選択し、演算結果のデータ型として決定することを含む、請求項１から５のいずれか１項に記載のサポート装置。
【請求項７】
前記型集合を生成することは、
前記演算式が有する演算子の種類に基き、当該式が有する変数に対応して定義された１つ以上のデータ型を含む型集合を生成することを含む、請求項１から６のいずれか１項に記載のサポート装置。
【請求項８】
対象を制御する制御装置で実行される実行可能プログラムを生成するサポートプログラムであって、前記サポートプログラムは、コンピュータに以下の手段として機能させ、
前記コンピュータは、
前記対象を制御するデータの型別に、当該データの型と、前記プログラムの実行時に前記制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報を格納するためのデータ格納手段を備え、
前記以下の手段は、
データ別の変数と、当該変数に対応するデータ型であって前記複数のデータ型のうちの１つ以上を定義する情報を生成する手段と、
前記制御装置で実行される処理を、定義された変数を用いて記述した命令コードを生成する手段と、
前記定義する情報および前記命令コードを用いて前記実行可能プログラムを生成する手段と、を備え、
前記実行可能プログラムを生成する手段は、
前記命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、
前記演算式の前記型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定するよう構成される、サポートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、機械や設備などのデバイスを制御するために用いられるプログラマブルロジックコントローラ（Programmable Logic Controller：以下「ＰＬＣ」とも称す）の使用および運用を支援するためのサポート装置、およびそのサポート装置を実現するためのサポートプログラムに関する。
【背景技術】
【０００２】
機械や設備などのデバイスを制御するためのコントローラとしては、典型的には、ＰＬＣが用いられる。このようなＰＬＣは、ユーザが制御対象のデバイスに応じてプログラムを自由に作成できるので汎用性が高く、広く普及している。従来のＰＬＣでは、デバイスを制御するための入力データ、出力データ、内部計算用データなどは、記憶領域の予め定められた位置に格納されていた。これらのデータをプログラムにおいて利用（参照）する場合には、記憶領域の（絶対または相対）アドレスを特定する必要があった。
【０００３】
これに対して、プログラムの再利用性や共通処理化（共通モジュール化）などを考慮して、オブジェクト指向のプログラミングが可能となりつつある。具体的には、入力データ、出力データ、内部計算用データなどをデータ別に変数を用いて利用（参照）できるようなプログラミング環境が提供されつつある。このようなプログラミング環境によって生成されるプログラムは、従来のプログラムと対比する意味で、「変数プログラム」とも称される。
【０００４】
一方で、ＰＬＣ本体の装置コストを低減するため、汎用的なデバイスが積極的に採用される傾向にある。このような汎用的なデバイスの採用に伴って、従来の製造メーカであるベンダ別の独自規格に代えて、複数のメーカがアライアンスを形成し、共通規格を導入するという動きが活発化している。これによって、ユーザから見れば、デバイスのベンダに依存することなく、統一的なシステムを構築できるというメリットが得られる。このような共通規格化の一例としては、デバイスを制御するデータ別の変数を共通化するなどが進行しつつある。
【０００５】
デバイスを制御するデータ別の変数を共通化する場合、変数が同じであってもデータの型が相違するケースがある。例えば、デバイスを供給するベンダが異なる場合、同じ変数であっても、ベンダ毎に当該変数のデータの型が相違する場合がある。これを、本明細書では、「デバイスがサポートするデータ型」が相違するともいう。
【０００６】
このような「デバイスがサポートするデータ型」が相違するとの背景のもと、プログラマはプログラミングにおいて、適切なデータ型を宣言するために、または適切なデータ型変換命令を記載するために、プログラマは、ＰＬＣを含むネットワーク内の個々のデバイスがサポートするデータ型を事前に把握する必要がある。このような「デバイスがサポートするデータ型」の把握には手間がかかり、プログラムの生産性向上のネックとなり得る。
【０００７】
特開２０１３−１６１１０６号公報（特許文献１）のサポート装置は、相手先のＰＬＣの種別に依存することなく、より容易にＰＬＣ間でデータを遣り取りするために、プログラマブルロジックコントローラの種別に応じて、変数に対応してメモリ上に確保されるデータのデータ構造を適合化する。
【０００８】
特開２０１０−１７６３７７号公報（特許文献２）は、独自の言語仕様で開発されたＰＬＣのアプリケーションプログラムを、Ｊ１ＳＢ３５０３（ＩＥＣ６１１３１−３）言語に準拠したプログラムへの変換するために、データの型変換命令を用いる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１３−１６１１０６号公報
【特許文献２】特開２０１０−１７６３７７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１と特許文献２では、「デバイスがサポートするデータ型」の相違に基づくプログラミングの効率化の提案はなされていない。
【００１１】
本開示は、制御対象のデバイスの制御データのデータ型を考慮した制御プログラムの容易な開発を支援する環境の提供を目的とする。
【課題を解決するための手段】
【００１２】
本開示の一例に係るサポート装置は、対象を制御する制御装置で実行される実行可能プログラムを生成するサポート装置であって、対象を制御するデータの型別に、当該データの型と、プログラムの実行時に制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報を格納するためのデータ格納手段と、データ別の変数と、当該変数に対応するデータ型であって複数のデータ型のうちの１つ以上を定義する情報を生成する手段と、制御装置で実行される処理を、定義された変数を用いて記述した命令コードを生成する手段と、定義する情報および命令コードを用いて実行可能プログラムを生成する手段と、を備える。
【００１３】
実行可能プログラムを生成する手段は、命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、演算式の型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定するよう構成される。
【００１４】
この開示によれば、命令コードの記述に用いるデータ別の変数に、制御装置による当該データの扱い方が同じである１または複数のデータ型を定義することができる。また、データ別の変数に複数のデータ型が定義されるとしても、実行可能プログラムの生成時には、変数を含んで記述された演算式のデータ型を、演算精度が保証されるデータ型に決定することができる。これにより、制御対象のデバイスがサポートするデータ型に依存することなく、対象を制御するプログラムの開発が可能となる。
【００１５】
上述の開示において、対象を制御するデータの型別の複数のデータ型は、対象のベンダ毎に格納されて、ベンダ毎の複数のデータ型は、当該ベンダにより予め定められたデータ型と、当該予め定められたデータ型とデータの扱い方が同じとなり得る他のデータの型とを含む。
【００１６】
この開示によれば、複数のデータ型に対象のベンダに依存したデータ型を含ませることができる。
【００１７】
上述の開示において、定義する情報を生成する手段は、データ別の変数と、当該変数に対応するデータ型として対象のベンダに対応した複数のデータ型を定義する情報を生成するよう構成される。
【００１８】
この開示によれば、対象のベンダ毎に、複数のデータ型を定義することができる。
上述の開示において、サポート装置は、制御装置から、当該制御装置に接続される対象のベンダを特定する情報を受信する。
【００１９】
この開示によれば、サポート装置は、対象のベンダの情報を例えば実機の制御装置から受信することができる。
【００２０】
上述の開示において、定義する情報を生成する手段は、ユーザ操作に基き、データ別の変数に対応する１つ以上のデータ型を定義し、変数と、当該変数に関連付けて複数のデータ型をモニタに表示させるよう構成される。
【００２１】
この開示によれば、ユーザは、モニタの表示される複数のデータ型から、定義するべきデータ型を選択する操作をすることできる。
【００２２】
上述の開示において、データ型による上述の扱い方は、データサイズの大きさに基づく扱い方を含み、各データ型に対応して、扱われるデータサイズに基き当該データ型が他のデータ型に優先して変数に対応して設定される度合いを示す優先度を格納するための手段を、さらに備え、演算結果のデータ型を決定することは、型集合から、演算精度を保証するための基準に従う優先度を有したデータ型を選択し、演算結果のデータ型として決定することを含む。
【００２３】
この開示によれば、データ型に対応したデータサイズに基き演算結果のデータ型を決定することで、制御装置で演算を実施した場合における、演算結果における桁落ち、桁あふれなどの情報ロスを回避することができる。
【００２４】
上述の開示において、型集合を生成することは、演算式が有する演算子の種類に基き、当該式が有する変数に対応して定義された１つ以上のデータ型を含む型集合を生成することを含む。
【００２５】
この開示によれば、型集合を、演算式に含まれる演算子の種類に応じた内容に異ならせることができる。
【００２６】
本開示の一例によれば、対象を制御する制御装置で実行される実行可能プログラムを生成するサポートプログラムが提供される。サポートプログラムは、コンピュータに以下の手段として機能させる。コンピュータは、対象を制御するデータの型別に、当該データの型と、プログラムの実行時に制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報を格納するためのデータ格納手段を備える。
【００２７】
上記の手段は、データ別の変数と、当該変数に対応するデータ型であって複数のデータ型のうちの１つ以上を定義する情報を生成する手段と、制御装置で実行される処理を、定義された変数を用いて記述した命令コードを生成する手段と、定義する情報および命令コードを用いて実行可能プログラムを生成する手段と、を備え、実行可能プログラムを生成する手段は、命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、演算式の型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定するよう構成される。
【００２８】
この開示によるサポートプログラムがコンピュータにより実行されることで、命令コードの記述に用いるデータ別の変数に、制御装置による当該データの扱い方が同じである１または複数のデータ型を定義することができる。また、データ別の変数に複数のデータ型が定義されるとしても、実行可能プログラムの生成時には、変数を含んで記述された演算式のデータ型を、演算精度が保証されるデータ型に決定することができる。
【発明の効果】
【００２９】
本開示の一例によれば、制御対象のデバイスの制御データのデータ型を考慮した制御プログラムの容易な開発を支援する環境を提供することができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施の形態に係るＰＬＣシステムＳＹＳの一例を示す模式図である。
【図２】本発明の実施の形態に係るＰＬＣの処理ユニット１０のハードウェア構成の一例を示す模式図である。
【図３】本発明の実施の形態に係るサポート装置２００のハードウェア構成の一例を示す模式図である。
【図４】本発明の実施の形態に係るＰＬＣの処理ユニット１０に実装されるソフトウェア構成の一例を示す模式図である。
【図５】本発明の実施の形態に係るサポート装置２００に実装されるソフトウェア構成の一例を示す模式図である。
【図６】本実施の形態に係るサポート装置２００におけるプログラムの開発環境の一例を概略的に示す図である。
【図７】本実施の形態に係るプログラム開発の概略処理の一例を示すフローチャートである。
【図８】本実施の形態に係るソースプログラム２７１の一例を示す図である。
【図９】本実施の形態に係るエディタ情報２７７の一例を模式的に示す図である。
【図１０】本実施の形態に係るデバイスのベンダごとのデータ型の対応情報２９４の一例を示す図である。
【図１１】本実施の形態に係るデータ型同一視の原則の一例を説明する図である。
【図１２】本実施の形態に係るプログラムを表示する画面の一例を示す図である。
【図１３】本実施の形態に係る一括設定処理の一例を概略的に示す処理フローチャートである。
【図１４】本実施の形態に係る変数化処理の一例を示すフローチャートである。
【図１５】本実施の形態に係る個別設定処理の一例を示す処理フローチャートである。
【図１６】本実施の形態に係る個別設定処理におけるデータ型候補の表示の一例を示す図である。
【図１７】本実施の形態に係るコンパイル処理の一例を示すフローチャートである。
【図１８】本実施の形態に係るコンパイル処理の一例を示すフローチャートである。
【図１９】本実施の形態に係る式に対応したＡＳＴの一例を示す図である。
【図２０】本実施の形態に係るコード解析処理におけるＡＳＴの変化の一例を示す図である。
【図２１】本実施の形態に係るコード解析処理におけるＡＳＴの変化の一例を示す図である。
【図２２】本実施の形態に係るコード解析処理におけるＡＳＴの変化の一例を示す図である。
【図２３】本実施の形態に係るコード解析処理におけるＡＳＴの変化の一例を示す図である。
【図２４】本実施の形態に係るコード解析処理におけるＡＳＴの変化の一例を示す図である。
【図２５】本実施の形態に係るコード解析処理に適用される関数の一例を示す図である。
【図２６】本実施の形態に係るコード解析処理に適用される関数の一例を示す図である。
【図２７】本実施の形態に係るコード解析処理に適用される関数の一例を示す図である。
【図２８】本実施の形態に係るランク表の一例を示す図である。
【図２９】本実施の形態に係るコード解析処理に適用される関数の一例を示す図である。
【発明を実施するための形態】
【００３１】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００３２】
＜Ａ．適用例＞
まず、図６を参照して、本発明が適用される場面の一例について説明する。図６は、本実施の形態に係るサポート装置２００におけるプログラムの開発環境の一例を概略的に示す図である。本実施の形態では、制御対象を制御する制御装置で実行される実行可能プログラムの開発を支援するサポート装置２００が提供される。実行可能プログラムは、例えば制御対象を制御するための制御プログラムを含み得る。制御装置は、例えばプログラマブルロジックコントローラを含み得る。制御対象は、制御装置により制御されるアクチュエータ、検出センサーなどのデバイスに相当する。
【００３３】
サポート装置２００は、制御プログラムなどのユーザプログラム、すなわち実行可能プログラムの開発を支援する環境としてプログラミングアプリケーション２５０を備える。サポート装置２００は、ソースプログラム２７１を編集して生成するエディタ２５２および編集されたソースプログラム２７１をコンパイルして実行可能プログラム２７３に変換するコンパイラ２５４を備える。また、サポート装置２００は、ソースプログラム２７１の編集時またはコンパイル時に利用されるデータを格納する領域および作業領域としてＲＡＭ（Random Access Memory），ＨＤＤ（Hard Disc Drive）などにより構成されるなどのデータ格納部２７０を備える。
【００３４】
データ格納部２７０は、エディタ情報２７７を含む。エディタ情報２７７は、対象を制御するデータの型別に、当該データの型と、プログラムの実行時に制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報を有する。このデータの扱い方とは、データ型により規定されるデータサイズ、またはデータのメモリにおけるアライメントを含む。対象は、アクチュエータ、検出センサーなどの各種デバイスに相当する。
【００３５】
エディタ２５２はソースプログラム２７１を、ユーザ操作に従い編集する。ソースプログラム２７１の編集時に、エディタ２５２は対応するソースコード２７２が生成される。ソースプログラム２７１は、予め定められたプログラム言語（例えば国際規格ＩＥＣ６１１３１−３）に従って記述されたプログラムを含む。なお、プログラム言語の種類は、国際規格ＩＥＣ６１１３１−３に従う言語に限定されない。
【００３６】
ソースプログラムは、変数エディタ２５３を用いて記述される変数宣言部と、エディタ２５２を用いて記述されるコード部とを含む。変数エディタ２５３は、変数宣言部において、データ別の変数と、当該変数に対応するデータ型であって上記の複数のデータ型のうちの１つ以上を定義する情報を生成する手段に相当する。エディタ２５２は、コード部において、制御装置で実行される処理を、定義された変数を用いて記述した命令コードを生成する手段に相当する。より具体的には、エディタ２５２は、キーボードなどを介して受け付けたユーザ操作に従い演算式を表す命令コードを生成する。この演算式は、論理演算または算術演算を含み、演算式は演算子（オペレータ）と被演算子（オペランド）とを含む。さらに、演算子は、単項演算子または二項演算子などを含む。
【００３７】
コンパイラ２５４は、このような変数宣言部の定義情報およびコード部の命令コードを用いて実行可能プログラム２７３を生成する。具体的には、コンパイラ２５４は、変数宣言部の定義情報およびコード部の命令コードを含むソースプログラム２７１（より特定的にはソースコード２７２）を予め定められたプログラム言語の仕様に従いコンパイルすることにより、ソースプログラム２７１から制御装置のプロセッサにより実行可能なコードからなる実行可能プログラム２７３を生成する。
【００３８】
実行可能プログラム２７３は、転送モジュール２１１によりＰＬＣなどの制御装置に転送（ダウンロードまたはアップロード）される。制御装置のプロセッサは、実行可能プログラム２７３を実行することにより、制御対象である各種デバイスを制御する。
【００３９】
コンパイラ２５４は、実行可能プログラムを生成する手段に相当する。コンパイラ２５４は、ソースプログラム２７１を走査して解析するために、字句解析部２１２、構文解析部２１３、意味解析部２１４およびコード解析部２１５を含む。さらに、コンパイラ２５４は、ソースプログラム２７１の解析結果に基き、ソースプログラム２７１から再配置可能コードを生成する再配置可能コード生成部２１６を含む。
【００４０】
コード解析部２１５は、ソースプログラム２７１のコード部に含まれる命令コードが示す演算式が有する変数に対応して変数宣言部で定義された１つ以上のデータ型を含む型集合を生成する手段を有する。具体的には、コード解析部２１５は、データ格納部２７０の規則２７８に従い、上記の演算式が有する変数に対応して変数宣言部で定義された１つ以上のデータ型を含む型集合を生成する。規則２７８は、上記の型集合を演算式が有する演算子の種類に基き、当該式が有する変数に対応して定義された１つ以上のデータ型を含む型集合を生成するための関数を含む。このような規則２７８に基くことで、型集合を、演算式の演算子が取り得るデータ型からなる型集合とすることができる。
【００４１】
また、コード解析部２１５は、演算式の型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定する手段を有する。
【００４２】
ここで、データ型によるデータの扱い方は、データサイズの大きさに基づく扱い方を含み得る。サポート装置２００は、データ格納部２７０に、各データ型に対応して、扱われるデータサイズに基き当該データ型が他のデータ型に優先して変数に対応して設定される度合いを示す優先度を格納したランク表２８９を有する。演算結果のデータ型を決定する場合、コード解析部２１５は、上記の型集合から、演算精度を保証するための基準に従う優先度を有したデータ型を選択し、演算結果のデータ型、すなわち演算式のデータ型として決定する。
【００４３】
本実施の形態に係るサポート装置２００によれば、エディタ２５２は、対象を制御するデータ別の変数と、当該変数に対応するデータ型であって制御装置による当該データの取り扱い方が同じである１または複数のデータ型を定義する情報と、制御装置で実行される処理を、定義された変数を用いて記述した命令コードから、ソースプログラム２７１を生成する。したがって、命令コードの記述に用いるデータ別の変数に、制御装置による当該データの取り扱い方が同じである１または複数のデータ型を定義することができる。
【００４４】
これにより、対象のデバイスを供給するベンダにより当該デバイスの制御データのデータ型が相違する場合であっても、すなわち「デバイスがサポートするデータ型」の相違がある場合であっても、ソースプログラム２７１では、このようなデータ型の相違を、データ別の変数に複数のデータ型を定義することにより対処することができる。
【００４５】
また、コード解析部２１５は、上記に述べたように、命令コードが示す演算式に、演算精度が保証されるように、当該演算式の変数に対応するデータ型の型集合から演算結果のデータ型を決定することができる。これにより、データ別の変数に複数のデータ型が定義されるとしても、実行可能プログラム２７３の生成時には、ソースプログラム２７１に記述された各演算式のデータ型を、演算精度が保証されるデータ型に決定することができる。
【００４６】
これにより、制御装置によるプログラム実行時には、命令コードが示す演算式に従う演算は、当該演算式について決定された演算精度が保証されるデータ型に従い実施される。したがって、プログラム実行時に取得される演算結果には、桁落ち，桁あふれなどの情報のロスが発生するのを回避し得る。このことは、「デバイスがサポートするデータ型」の相違があるとしても、制御装置は演算の結果に基く制御データによりデバイスである対象を適切に制御することが可能になる。
【００４７】
本明細書において、「プログラム」は、変数プログラムに対応し、典型的には、シーケンスプログラムを含み得る。シーケンスプログラムは、例えば国際電気標準会議（International Electrotechnical Commission：ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラムを包含する。シーケンスプログラムには、シーケンス命令および／またはモーション命令を含む各種命令を含み得る。なお、シーケンスプログラムとしては、国際規格ＩＥＣ６１１３１−３に従って記述された命令に限らず、ＰＬＣ（プログラマブルコントローラ）の製造メーカまたはベンダなどが独自に規定した命令を含むようにしてもよい。
【００４８】
本明細書において、「ユーザ」はプログラムを作成するプログラマを含む概念を示す。
本明細書において、「シーケンス命令」は、基本的には、デバイスを制御するための入力値、出力値、内部値などのパラメータを算出する１または複数の論理回路により記述される１または複数の命令を包含する用語である。本明細書において、「モーション命令」は、サーボモータなどのアクチュエータなどのデバイスに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などの当該デバイスを制御するためのパラメータを指令として算出するための１または複数の命令を包含する用語である。このような命令は、論理演算命令および算術演算命令を含み得る。
【００４９】
本明細書において、上記に述べたデバイスを制御するためのパラメータは、デバイスを制御するための制御データに対応する。本明細書においては、制御データは位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などを含み得る。変数プログラムにおいては、制御データ別に変数が割当てられて、上記の論理演算命令および算術演算命令などの算出命令の命令コードは、演算子と変数を用いて記述される。
【００５０】
本明細書において「データの扱い方」とは、ＰＬＣが予め定められたプログラミング言語の仕様に従いデータを適切に処理（演算、メモリにアクセス（読出、書込）などを含む）するためのデータの処理方法を示す。具体的には、「データの扱い方」は、例えば制御データのデータサイズ、メモリにアクセスする場合のメモリ上の位置の調整などのアライメント、データフォーマット（倍精度、単精度、固定小数点、浮動小数点など）などの基準に基いている。なお、「データの扱い方」の基準は、データサイズ、アライメント、データフォーマットに限定されない。本明細書において、このようなメモリは、物理的なメモリまたは論理的なメモリ（仮想的なメモリ）を含み得る。
【００５１】
本明細書において、「同一視可能なデータ型」とは、ＰＬＣによる「データの扱い方」が同一であるか否かという観点を示すものである。例えば、或るデータ型を有する制御データを、他のデータ型に変えた場合であっても、演算精度などを保証して他のデータ型を用いて制御データを適切に処理（演算、メモリにアクセス（読出、書込）などを含む）できる場合には、両データ型は「同一視可能なデータ型」であると言う。より具体的には、１のベンダが提供するデバイスの或る制御データが有するデータ型を、他のデータ型に変えた場合であっても、ＰＬＣが他のデータ型を用いて或る制御データを適切に処理（演算、メモリにアクセス（読出、書込）などを含む）することができる場合には、両データ型は「同一視可能なデータ型」を示す。
【００５２】
以下、本発明のより具体的な応用例として、本実施の形態に係るサポート装置２００のより詳細な構成および処理について説明する。
【００５３】
＜Ｂ．システム構成＞
まず、本実施の形態に係るサポート装置が使用および運用を支援するＰＬＣを含むシステムについて説明する。
【００５４】
図１は、本発明の実施の形態に係るＰＬＣシステムＳＹＳを示す模式図である。本実施の形態に係るＰＬＣシステムＳＹＳは、ネットワークＮＷを介してネットワーク接続された複数のＰＬＣ（ＰＬＣ１，ＰＬＣ２，ＰＬＣ３）を含む。これらのＰＬＣの種別は同じまたは異なっている。ＰＬＣ１とＰＬＣ２との間、ＰＬＣ２とＰＬＣ３との間、およびＰＬＣ３とＰＬＣ１との間では、ネットワークＮＷを介してデータを遣り取りする場合がある。
【００５５】
各ＰＬＣは、プログラムを実行する主体である処理ユニット１０と、処理ユニット１０などへ電力を供給する電源ユニット１２と、フィールドからの信号を遣り取りするＩＯ（Input/Output）ユニット１４とを含む。ＩＯユニット１４は、処理ユニット１０とシステムバス１１を介して接続されている。典型的には、ＩＯユニット１４は、フィールド機器である検出センサー６から入力信号を取得し、また処理ユニット１０でのプログラムの実行結果に応じてフィールド機器であるアクチュエータ７を駆動する。検出センサー６は例えばアクチュエータの制御量を検出する。検出センサー６およびアクチュエータ７は、ＰＬＣが制御する「対象」となるデバイスの一実施例であり、デバイスの種類は検出センサー６およびアクチュエータ７に限定されない。
【００５６】
サポート装置２００は、ＰＬＣで実行されるプログラム（以下「実行可能プログラム」とも称す）を生成する機能とともに、接続先のＰＬＣの運転状態や各種データの値などをモニタする機能を有している。さらに、サポート装置２００は、ユーザによる実行可能プログラムの生成を支援するため、エディタ機能、コンパイル機能、デバック機能、シミュレーション機能などを有していてもよい。コンパイル機能は、ビルダ機能として提供されてもよい。
【００５７】
＜Ｃ．ハードウェア構成＞
次に、図１に示すＰＬＣシステムＳＹＳを構成するＰＬＣおよびサポート装置２００のハードウェア構成について説明する。
【００５８】
（ｃ１：ＰＬＣのハードウェア構成）
図２は、本発明の実施の形態に係るＰＬＣの処理ユニット１０のハードウェア構成を示す模式図である。図２を参照して、処理ユニット１０は、プロセッサ１００と、チップセット１０２と、メインメモリ１０４と、不揮発性メモリ１０６と、システムタイマ１０８と、システムバスコントローラ１２０と、ネットワークコントローラ１４０と、ＵＳＢコネクタ１１０とを含む。チップセット１０２と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００５９】
プロセッサ１００およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、プロセッサ１００は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、プロセッサ１００に必要な命令コードを生成する。さらに、チップセット１０２は、プロセッサ１００での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００６０】
処理ユニット１０は、メモリとして、メインメモリ１０４および不揮発性メモリ１０６を有する。
【００６１】
メインメモリ１０４は、揮発性の記憶領域であり、処理ユニット１０への電源投入後にプロセッサ１００で実行されるべき各種プログラムを格納する。メインメモリ１０４は、プロセッサ１００による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４としては、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）といったデバイスが用いられる。
【００６２】
不揮発性メモリ１０６は、リアルタイムＯＳ（Operating System）、システムプログラム、後述する実行可能プログラム２７３といった各種プログラム（モジュール）、システム設定パラメータおよびコンフィグ情報１０６１といったデータを不揮発的に格納する。コンフィグ情報１０６１は、ＰＬＣに接続されているデバイス毎に当該デバイスを制御するために用いるデータ（以下、制御データと称する）別の変数およびデータ型などを含む。
【００６３】
これらのプログラムやデータは、必要に応じて、プロセッサ１００がアクセスできるようにメインメモリ１０４にコピーされる。
【００６４】
処理ユニット１０は、通信インターフェイスとして、システムバスコントローラ１２０およびネットワークコントローラ１４０を有する。これらの通信インターフェイスは、出力データの送信および入力データの受信を行う。
【００６５】
システムバスコントローラ１２０は、システムバス１１を介したデータの遣り取りを制御する。より具体的には、システムバスコントローラ１２０は、ＤＭＡ（Dynamic MemoryAccess）制御回路１２２と、システムバス制御回路１２４と、バッファメモリ１２６とを含む。システムバスコントローラ１２０は、システムバスコネクタ１３０を介してシステムバス１１と内部的に接続される。
【００６６】
ネットワークコントローラ１４０は、ネットワークＮＷを介した他のＰＬＣとの間のデータの遣り取りを制御するために、ＤＭＡ（Dynamic MemoryAccess）制御回路１４２と、ネットワーク制御回路１４４と、バッファメモリ１４６とを含む。
【００６７】
ネットワーク制御回路１４４は、ネットワークＮＷに接続される他のＰＬＣとの間で、バッファメモリ１４６の出力データを送信する処理および入力データを受信してバッファメモリ１４６に格納する処理を行う。
【００６８】
ＵＳＢコネクタ１１０は、サポート装置２００と処理ユニット１０とを接続するための通信インターフェイスである。典型的には、サポート装置２００から転送される、処理ユニット１０のプロセッサ１００で実行可能なプログラムなどは、ＵＳＢコネクタ１１０を介してＰＬＣに取込まれる。
【００６９】
（ｃ２：サポート装置のハードウェア構成）
図３は、本発明の実施の形態に係るサポート装置２００のハードウェア構成の一例を示す模式図である。図３を参照して、サポート装置２００は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータであってもよい。
【００７０】
図３を参照して、サポート装置２００は、ＯＳを含む各種プログラムを実行するＣＰＵ２０１と、ＢＩＯＳや各種データを格納するＲＯＭ（Read Only Memory）２０２と、ＣＰＵ２０１でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリＲＡＭ２０３と、ＣＰＵ２０１で実行されるプログラムなどを不揮発的に格納するハードディスク（ＨＤＤ）２０４とを含む。
【００７１】
サポート装置２００は、さらに、ユーザからの操作を受け付ける操作部に相当するキーボード２０５およびマウス２０６と、情報をユーザに表示するためのモニタ２０７とを含む。サポート装置２００は、ＰＬＣ（処理ユニット１０）などと通信するための通信インターフェイス（ＩＦ）２０９を含む。
【００７２】
後述するように、サポート装置２００で実行される各種プログラムは、ＣＤ−ＲＯＭ３００に格納されて流通する。このＣＤ−ＲＯＭ３００に格納されたプログラムは、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）ドライブ２０８によって読取られ、ハードディスク（ＨＤＤ）２０４などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【００７３】
＜Ｄ．ソフトウェア構成＞
（ｄ１：ＰＬＣのソフトウェア構成）
次に、ＰＬＣ（処理ユニット１０）が各種機能を提供するためのソフトウェア構成について説明する。
【００７４】
図４は、本発明の実施の形態に係るＰＬＣの処理ユニット１０に実装されるソフトウェア構成の一例を示す模式図である。図４に示すソフトウェアに含まれる命令コードは、適切なタイミングで読出され、処理ユニット１０のプロセッサ１００へ提供されて実行される。
【００７５】
図４を参照して、処理ユニット１０には、リアルタイムＯＳ１９０上にＰＬＣでの処理に必要なプログラムが実装される。
【００７６】
リアルタイムＯＳ１９０は、処理ユニット１０のコンピュータアーキテクチャに応じて設計されており、プロセッサ１００がＰＬＣでの処理に必要なプログラムを実行するための基本的な実行環境を提供する。より具体的には、リアルタイムＯＳ１９０は、複数のプログラムを時間の経過に従い切り替えて実行するための環境を提供する。リアルタイムＯＳ１９０は、制御サイクル開始の割り込みが発生すると、プロセッサ１００での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラ１６０に切り替える。
【００７７】
本実施の形態に係る実行可能プログラムとしては、基本的には、ユーザ定義アプリケーション１７０が想定されている。ユーザ定義アプリケーション１７０は、サポート装置２００によって生成され、サポート装置２００から処理ユニット１０へ転送される。なお、ユーザ定義アプリケーション１７０の実行に必要な一部のモジュール（あるいは、ライブラリ）については、処理ユニット１０に予め格納されており、これらを適切なタイミングで呼び出して利用する形態（シンボリックリンク）を採用してもよい。この場合、サポート装置２００は、一部のモジュールを含まない実行可能プログラムを生成することになる。あるいは、ユーザ定義アプリケーション１７０および命令実行モジュール１８０を含めて、実行可能プログラムとしてもよい。
【００７８】
より具体的には、処理ユニット１０には、スケジューラ１６０と、ユーザ定義アプリケーション１７０と、入力処理モジュール１７２と、出力処理モジュール１７４と、通信処理モジュール１７６と、その他のシステムモジュール１７８と、命令実行モジュール１８０と、メモリマネジャー１８４とが実装される。
【００７９】
スケジューラ１６０は、ユーザ定義アプリケーション１７０、入力処理モジュール１７２、出力処理モジュール１７４、および通信処理モジュール１７６について、実行開始タイミングや処理中断を制御する。
【００８０】
ユーザ定義アプリケーション１７０は、ユーザがその制御目的に応じて作成する。すなわち、ＰＬＣシステムＳＹＳを用いて制御する対象のライン（プロセス）などに応じて、任意に設計されるプログラムである。ユーザ定義アプリケーション１７０には、サポート装置２００で生成される後述の実行可能プログラム２７３を含み得る。
【００８１】
ユーザ定義アプリケーション１７０は、シーケンス処理およびモーション演算などの特殊処理を含み得る。ユーザ定義アプリケーション１７０は、命令実行モジュール１８０と協働して、ユーザ定義アプリケーション１７０に含まれる処理を実現する。
【００８２】
命令実行モジュール１８０は、ユーザ定義アプリケーション１７０に定義された何らかのシーケンス命令あるいは何らかのファンクション命令が実行されるときに呼び出される。
【００８３】
入力処理モジュール１７２は、システムバスコントローラ１２０によって受信された入力データを、ユーザ定義アプリケーション１７０が使用するのに適した形式に再配置する。出力処理モジュール１７４は、ユーザ定義アプリケーション１７０の実行によって生成された出力データを、システムバスコントローラ１２０へ転送するのに適した形式に再配置する。
【００８４】
通信処理モジュール１７６は、ネットワークコントローラ１４０による他のＰＬＣとの間の通信処理またはサポート装置２００との通信を制御する。
【００８５】
その他のシステムモジュール１７８は、図４に個別に示したプログラム以外の、ＰＬＣ１の各種機能を実現するための１つまたは複数のモジュールをまとめて示したものである。
【００８６】
メモリマネジャー１８４は、メインメモリ１０４に格納されるデータを管理する。
（ｄ２：サポート装置のソフトウェア構成）
次に、サポート装置２００が各種機能を提供するためのソフトウェア構成について説明する。
【００８７】
図５は、本発明の実施の形態に係るサポート装置２００に実装されるソフトウェア構成の一例を示す模式図である。図５に示すソフトウェアに含まれる命令コードは、ＣＰＵ２０１により読出されて実行される。
【００８８】
図５を参照して、サポート装置２００には、ＯＳ２４０、プログラミングアプリケーション２５０およびネットワーク設定アプリケーション２８０が実装される。サポート装置２００ではＯＳ２４０が実行され、プログラミングアプリケーション２５０およびネットワーク設定アプリケーション２８０を実行可能な環境が提供される。本実施の形態に係るサポート装置２００を実現するためのサポートプログラムは、少なくともプログラミングアプリケーション２５０を含む。
【００８９】
プログラミングアプリケーション２５０は、後述する変数エディタ２５３を有するエディタ２５２と、コンパイラ２５４と、デバッガ２５６と、ＧＵＩ（Graphical User Interface）モジュール２５８と、シミュレータ２６０と、データ格納部２７０とを含む。プログラミングアプリケーション２５０に含まれるそれぞれのモジュールは、典型的には、ＣＤ−ＲＯＭ３００に格納された状態で流通して、サポート装置２００にインストールされる。データ格納部２７０は、ＲＯＭ２０２、ＲＡＭ２０３またはＨＤＤ２０４などを含んで構成される。
【００９０】
エディタ２５２は、予め定められたプログラム言語の仕様に従いソースプログラムを作成するための入力および編集といった機能を提供する。より具体的には、エディタ２５２は、ユーザによるキーボード２０５やマウス２０６の操作内容を受付けて、受付けた操作内容に従いソースプログラム２７１を編集（作成）する機能に加えて、作成したソースプログラム２７１の保存機能を提供する。エディタ２５２によるソースプログラムの編集時に、エディタ２５２はＧＵＩモジュール２５８を介して編集作業を支援するための情報をモニタ２０７に表示させる。
【００９１】
コンパイラ２５４は、予め定められたプログラム言語の仕様に従い、ソースプログラム２７１をコンパイルして、処理ユニット１０のプロセッサ１００で実行可能（オブジェクト）形式の実行可能プログラムを生成する機能を提供する。
【００９２】
デバッガ２５６は、実行可能プログラム（ソースプログラム）に対してデバッグを行うための機能を提供する。このデバッグの内容としては、ソースプログラムのうちユーザが指定した範囲を部分的に実行する、ソースプログラムの実行中における変数値の時間的な変化を追跡する、といった動作を含む。デバッガ２５６は、デバッグを支援するための情報をＧＵＩモジュール２５８をモニタ２０７に表示させる。
【００９３】
シミュレータ２６０は、サポート装置２００内にＰＬＣの処理ユニット１０でのプログラムの実行をシミュレーションする環境を構築する。
【００９４】
データ格納部２７０は、プログラミングアプリケーション２５０の各部により利用（読み書き）される各種情報を格納する。データ格納部２７０の格納される内容については、後述する。
【００９５】
ネットワーク設定アプリケーション２８０は、コンフィグレータ２５７と、データ格納部２９９とを含む。ネットワーク設定アプリケーション２８０に含まれるモジュールは、典型的には、ＣＤ−ＲＯＭ３００に格納された状態で流通して、サポート装置２００にインストールされる。
【００９６】
コンフィグレータ２５７は、ＰＬＣシステムＳＹＳのネットワーク構成を示すネットワーク情報２９３を取得し、取得したネットワーク情報２９３をデータ格納部２９９に格納する。ネットワーク情報２９３は、ネットワークＮＷに接続される各ＰＬＣから受信する（ダウンロードされる）コンフィグ情報を含む。なお、ネットワーク情報２９３が有するコンフィグ情報は、実機のＰＬＣから受信する情報、または実機の情報ではない論理的（仮想的）な情報を含む。論理的な情報は、ユーザがキーボード２０５やマウス２０６を操作することによりエディタ２５２を介して入力する情報を含み得る。
【００９７】
（ｄ３．プログラムの開発環境）
図６を再び参照して、サポート装置２００におけるプログラムの開発環境を説明する。図６では、説明のために、プログラミングアプリケーション２５０のうち、エディタ２５２およびコンパイラ２５４が示されて他の部分の図示は省略されている。また、図６では、エディタ２５２およびコンパイラ２５４に関連づけて、データ格納部２７０および転送モジュール２１１が示される。図６では、データ格納部２７０のデータのち、エディタ２５２およびコンパイラ２５４と関連する、ソースプログラム２７１、ソースコード２７２、実行可能プログラム２７３、エディタ２５２にいるプログラム編集時に参照されるエディタ情報２７７、後述するランク表２８９、および予め定められたプログラム言語の仕様に従う各種の規則２７８が示されている。エディタ情報２７７の詳細は後述する。規則２７８は、デバイスを制御するプログラムなどを記述するための予め定められたプログラム言語の記述仕様などを含む各種の規則を含む。転送モジュール２１１は、実行可能プログラム２７３をＰＬＣに転送（ダウンロードまたはアップロード）するように、通信ＩＦ２０９を制御する。
【００９８】
図６を参照して、エディタ２５２は、キーボード２０５またはマウス２０６を介して受付けるユーザ操作内容に従い記述されるソースプログラム２７１を編集（エディット）し、ソースプログラム２７１を予め定められたプログラム言語のソースコード２７２に変換する。エディタ２５２は、編集後のソースプログラム２７１およびソースコード２７２を、データ格納部２７０に格納する。
【００９９】
コンパイラ２５４は、予め定められたプログラム言語用のコンパイラを含む。具体的には、コンパイラ２５４は、字句解析部２１２、構文解析部２１３、意味解析部２１４、コード解析部２１５、および再配置可能コード生成部２１６を含む。これらは、規則２７８またはランク表２８９に従い、ソースプログラム２７１（より特定的にはソースコード２７２）をコンパイルし、ＰＬＣで実行することが可能なコードからなる実行可能プログラム２７３を生成する。
【０１００】
サポート装置２００は、実行可能プログラム２７３を転送モジュール２１１によりＰＬＣに転送する。ＰＬＣでは、プロセッサ１００により実行可能プログラム２７３が実行されることにより、ＰＬＣ間でのデータの遣り取り、または制御対象であるデバイスの制御が実施される。
【０１０１】
＜Ｅ．プログラム開発の処理＞
図７は、本実施の形態に係るプログラム開発の概略処理の一例を示すフローチャートである。図７を参照して、サポート装置２００では、ソースプログラム２７１を生成（変更）する場合に、まず、エディタ２５２が起動される。エディタ２５２は、ソースプログラム２７１のエディット（編集）処理を実施する（ステップＳ１）。具体的には、エディタ２５２は、キーボード２０５またはマウス２０６を介して受付けるユーザ操作内容に従い、ソースプログラム２７１を編集してモニタ２０７に表示するともに、ソースプログラム２７１に対応するソースコード２７２を生成する（ステップＳ１）。
【０１０２】
ソースプログラム２７１はコンパイルする場合、サポート装置２００はコンパイラ２５４を起動する。コンパイラ２５４は、ソースプログラム２７１（より特定的にはソースコード２７２）をコンパイルし、実行可能プログラム２７３を生成する（ステップＳ２）。コンパイル処理については、図１７で後述する。
【０１０３】
実行可能プログラム２７３をＰＬＣに転送する場合、転送モジュール２１１は、実行可能プログラム２７３をＰＬＣに転送するよう通信ＩＦ２０９を制御する（ステップＳ３）。
【０１０４】
（ｅ１．ソースプログラムの例示）
図８は、本実施の形態に係るソースプログラム２７１の一例を示す図である。図８を参照して、ソースプログラム２７１は、変数宣言部２８１とコード部２８２を含む。コード部２８２は、デバイスを制御する命令などを含む１または複数の命令コードとコメント部２８３を含む。コード部２８２は、例えば、デバイスを制御するための命令コードを含む。命令コードは、制御データの変数を用いて記述された１または複数の演算式（論理演算式または算術演算式）のコードを含む。コメント部２８３は、コンパイル対象から除外される記述内容であって、例えばデバッグなどのために利用される情報を含む。ここでは、コメント部２８３は、複数の演算式それぞれのセンテンスを指し示すための「文１」〜「文３」が記述されている。
【０１０５】
変数宣言部２８１には、コード部２８２で記述される変数２８４（より特定的には変数名などの識別子）と、各変数に関連付けて当該変数が割当てられる制御データのデータ型２８５が記述される。
【０１０６】
（ｅ２．エディタ情報）
図９は、本実施の形態に係るエディタ情報２７７の一例を模式的に示す図である。図１０は、本実施の形態に係るデバイスのベンダごとのデータ型の対応情報２９４の一例を示す図である。図１１は、本実施の形態に係るデータ型同一視の原則の一例を説明する図である。図９では、サポート装置２００のデータ格納部２７０に格納されるエディタ情報２７７が、ＰＬＣが有するコンフィグ情報１０６１と関連付けて示される。図９では、コンフィグ情報１０６１として、ＰＬＣに接続される各デバイスに対応して、当該デバイスの制御データ別の変数と当該制御データの型とを関連付けて含む。なお、ここではコンフィグ情報１０６１は、デバイス毎に制御データ別の変数とデータ型の組を示したが、コンフィグ情報１０６１の種類は、これらに限定されない。
【０１０７】
図９を参照して、エディタ情報２７７は、例えばデバイス情報群２９１、変数エディタ情報２９２、ネットワーク情報２９３、およびベンダ毎のデータ型の対応情報（以下、データ型対応情報と称する）２９４を含む。デバイス情報群２９１は、ＰＬＣシステムＳＹＳに接続され得るデバイス毎にデバイス情報２９を含む。
【０１０８】
デバイス情報２９は、当該デバイスの名称などのデバイス識別子２４１、当該デバイスのベンダの名称などのベンダ識別子２４２、および当該デバイスの各パラメータに対応のパラメータデータ２４３を含む。パラメータデータ２４３は、パラメータ名（param1、param2、・・・）と当該パラメータのデータ型を含む。なお、デバイス情報２９に含まれる情報をこれらに限定されない。デバイス情報２９は、ベンダ識別子２４２を含まない場合もある。デバイス情報群２９１は、ソースプログラム２７１のエディット時は変化しない、いわゆるスタティック情報である。
【０１０９】
変数エディタ情報２９２は、エディット時に変数エディタ２５３により動的に生成される、いわゆるダイナミック情報である。ネットワーク情報２９３は、コンフィグ情報１０６１と同様の内容を示す情報である。ネットワーク情報２９３は、例えば、サポート装置２００が実機のＰＬＣから受信するコンフィグ情報１０６１、またはキーボード２０５またはマウス２０６から受付けるユーザの操作内容に基づくコンフィグ情報を含む。
【０１１０】
対応情報２９４は、例えば各ベンダから提供される情報である。図１０を参照して、対応情報２９４は、ベンダ毎にレコード２９０を含む。各ベンダのレコード２９０は、当該ベンダを識別するベンダ情報２９５と、当該ベンダが同一視可能なデータ型として指定したデータ型群２９６を含む。同一視可能なデータ型群２９６は、当該ベンダが提供するデバイスのパラメータ（制御データ）が有するデータ型２９７と、各データ型２９７に対応した類似のデータ型からなる類似データ型群２９８を含む。類似データ型群２９８は、対応のデータ型２９７と同一視可能な１つ以上の他のデータ型からなる。
【０１１１】
同一視可能なデータ型群２９６のデータ型は、本実施の形態では、例えば図１１に示す原則（１）と（２）の２つの条件を同時に満たしている。図１１では、原則（１）と（２）のそれぞれに関連付けて、当該原則を満たすデータ型が例示されている。具体的には、原則（１）は、“同一視可能なデータ型どうしは、命令（ロジック）を実行するアーキテクチャ（ＰＬＣ）において、データサイズ（占有するビット数）およびアライメントが同じでなければならない”ことを示す。
【０１１２】
原則（１）の条件を満たす同一視可能なデータ型群２９６には、例えばUINT型（16ビット、アライメント2）およびWORD型（16ビット、アライメント2）が含まれる。この場合、UDINT型（32ビット、アライメント4）およびLWORD型（64ビット、アライメント4）は、UINT型（16ビット、アライメント2）およびWORD型（16ビット、アライメント2）との間では同一視可能なデータ型とはなり得ず（すなわち原則（１）を満たさず）、当該同一視可能なデータ型群２９６には、含まれない。
【０１１３】
また、原則（２）は、“同一視可能なデータ型どうしは、対応する変数に対するプログラム上の操作において、ある一方の操作によって、予め定められたプログラム言語仕様上、不適切な値（メモリ）になることがあってはならない”ことを示す。
【０１１４】
原則（２）の条件を満たす同一視可能なデータ型群２９６には、例えばUINT型およびWORD型が含まれる。また、例えばLTIME型およびLINT型は、そのデータフォーマトが同じでられば、両者は原則（２）の条件を満たす同一視可能なデータ型群２９６に含まれる。また、例えばLINT型およびLREAL型は原則（２）の条件を満たさない。つまり、LINT型は、浮動小数点数算術標準規格（ＩＥＥＥ（Institute of Electrical and Electronics Engineers）７５４）を含むデータフォーマットを適用することが、LREAL型は、当該浮動小数点数算術標準規格以外のデータフォーマットを適用することができないからである。
【０１１５】
図１１では、同一視可能なデータ型どうしが満たすべき原則として、原則（１）と原則（２）の２種類を例示したが、原則の種類は、これらに限定されない。また、これら原則を満たすデータ型として、UINT型、WORD型、UDINT型、LWORD型、LTIME型、LINT型、LREAL型などを例示したが、これらのデータ型に限定されない。
【０１１６】
＜Ｆ．エディット処理＞
本実施の形態では、ソースプログラム２７１を編集するエディット処理として、主に、変数宣言部２８１の編集を説明する。コード部２８２の編集においては、エディタ２５２はキーボード２０５のユーザ操作に基づき命令コードを記述する。コード部２８２の編集は、従来の編集方法を用いることができるので、ここでは説明を繰返さない。
【０１１７】
本実施の形態では、エディタ２５２は、変数宣言部２８１を編集する場合に変数エディタ２５３を起動する。変数エディタ２５３は、図１１で示された原則に基づき、変数宣言部２８１において、各変数にデータ型２８５の候補を設定する。本実施の形態では、変数２８４の設定およびデータ型２８５の候補の設定をするために、変数エディタ２５３は一括設定処理または個別設定処理を実施する。一括設定処理は、変数エディタ２５３は、ネットワーク情報２９３による示される各デバイスについて、当該デバイスの全てのパラメータ（制御データ）に対して変数２８４とデータ型２８５を設定する。また、個別設定処理では、変数エディタ２５３は、ユーザが指定したデバイスの全てのパラメータ（制御データ）に対して変数２８４とデータ型２８５を設定する。
【０１１８】
図１２は、本実施の形態に係るプログラムを表示する画面の一例を示す図である。本実施の形態では、ユーザは、コード部２８２を記述する場合、変数宣言部２８１で宣言（記述）された変数名を用いて命令コードを記述する。図１２のモニタ２０７の画面は、一括設定処理を起動するために操作されるボタン２８６および個別設定処理を起動するために操作されるボタン２８７を含む。
【０１１９】
（f１．一括設定処理）
図１３は、本実施の形態に係る一括設定処理の一例を概略的に示す処理フローチャートである。図１４は、本実施の形態に係る変数化処理の一例を示すフローチャートである。図１３および図１４のフローチャートに従う処理は、図７のエディット処理（ステップＳ１）において実施される。エディット処理では、例えばエディタ２５２は、図１２のようにモニタ２０７に編集中のプログラムを表示させる。
【０１２０】
図１２のボタン２８６が操作されて一括設定処理が起動されると、図９のエディタ情報２７７はデータ格納部２７０から読出されてモニタ２０７に表示され得る。ユーザは、モニタ２０７に表示されるエディタ情報２７７のネットワーク情報２９３が示す全てのデバイスに対応するデバイス情報が、デバイス情報群２９１中に含まれているかを判断する（ステップＴ１）。
【０１２１】
含まれていない場合は（ステップＴ１でＮＯ）、ユーザは、キーボード２０５などを操作して、デバイスのベンダが提供するデバイス情報を、既存のデバイス情報群２９１に追加する（ステップＴ３）。全てのデバイスのデバイス情報がデバイス情報群２９１中に含まれている場合は（ステップＴ１でＹＥＳ）、変数エディタ２５３は、デバイスのパラメータ（制御データ）の変数化処理（ステップＴ７）を実施する。
【０１２２】
図１４のフローチャートを参照して、変数化処理を説明する。変数化処理では、変数エディタ２５３は、キーボード２０５の操作内容に基づき、変数化処理が、ネットワークに接続された全てのデバイスを対象にするか、またはユーザが指定するデバイスを対象にするかを判断する（ステップＴ７０）。
【０１２３】
変数エディタ２５３は、キーボード２０５を介したユーザの操作内容に基づき、全てのデバイスを対象に変数化処理を実施すると判断すると（ステップＴ７０でＹＥＳ）、変数エディタ２５３は、全てのデバイスのうちから１つ（以下、デバイスＤという）をネットワーク情報２９３から選択する（ステップＴ７１）。変数エディタ２５３は、選択されたデバイスＤについて設定処理（ステップＴ７２〜Ｔ７８）を実施する。
【０１２４】
設定処理では、変数エディタ２５３は、デバイスＤの識別子に基づきデバイス情報群２９１を検索する。その検索の結果に基づき、変数エディタ２５３は、デバイス情報群２９１からデバイスＤに対応のデバイス情報２９が取得できるか否かを判断する（ステップＴ７２）。取得できる場合（ステップＴ７２でＹＥＳ）、すなわちデバイス情報群２９１にデバイスＤのデバイス情報２９が有る場合、取得されたデバイスＤのデバイス情報２９に含まれるパラメータ名（param1、param2、・・・）のそれぞれについて、変数名とデータ型を設定する処理（ステップＴ７３〜Ｔ７７）を実施する。
【０１２５】
具体的には、まず、デバイスＤのデバイス情報２９から１つのパラメータ（以下、パラメータｐという）を選択する（ステップＴ７３）。デバイス情報２９からパラメータｐに対応したベンダ（以下、ベンダＶという）の識別子とデータ型（以下、データ型τという）を特定する。そして、対応情報２９４においてベンダＶのレコード２９０を検索し、検索の結果に基づき、レコード２９０の類似データ型群２９８に当該データ型τに関連付けられたデータ型が有るか否かを判断する（ステップＴ７４）。すなわち、データ型τと同一視可能な他のデータ型が有るか否かを判断する。
【０１２６】
変数エディタ２５３は、同一視可能な他のデータ型はないと判断すると（ステップＴ７４でＮＯ）、パラメータｐのパラメータ名とデータ型τを用いた表記データを、変数エディタ情報２９２に登録する（ステップＴ７５ａ）。これにより、変数エディタ情報２９２には、例えば図９の表記２９２２または表記２９２４などが登録される。
【０１２７】
一方、変数エディタ２５３は、同一視可能な他のデータ型が有ると判断すると（ステップＴ７４でＹＥＳ）、パラメータpのパラメータ名と、データ型τおよび類似データ型群２９８のデータ型（すなわち同一視可能な他のデータ型）を連結したデータ型集合表記を生成し（ステップＴ７５）、生成したデータ型集合表記を変数エディタ情報２９２に登録する（ステップＴ７６）。これにより、変数エディタ情報２９２には、例えば図９の表記２９２１または表記２９２３などが登録される。
【０１２８】
変数エディタ２５３は、デバイスＤのデバイス情報２９を検索し、検索の結果に基づき、次のパラメータデータ２４３で示されるパラメータ（未だ処理されていないパラメータｐ）が有るか否かを判断する（ステップＴ７７）。変数エディタ２５３は、次のパラメータｐが有ると判断すると（ステップＴ７７でＹＥＳ）、ステップＴ７３に戻り、次のパラメータｐについてステップＴ７４以降の処理を上述と同様に実施する。
【０１２９】
一方、変数エディタ２５３は、次のパラメータｐはないと判断すると（ステップＴ７７でＮＯ）、すなわちデバイスＤのデバイス情報２９に含まれる全てのパラメータｐについて、その表記を変数エディタ情報２９２に登録完了した場合は、ステップＴ７９に移行する。
【０１３０】
ステップＴ７９では、変数エディタ２５３は、デバイス情報群２９１を検索し、検索の結果に基づき、次のデバイス情報２９（未だ設定処理がなされていないデバイス情報２９）が有るか否かを判断する（ステップＴ７９）。変数エディタ２５３は、次のデバイス情報２９が有ると判断すると（ステップＴ７９でＹＥＳ）、ステップＴ７１に戻り、次のデバイス情報２９についてステップＴ７２以降の設定処理を上述と同様に実施する。
【０１３１】
ステップＴ７９において、変数エディタ２５３は、次のデバイス情報２９（未だ設定処理がなされていないデバイス情報２９）は無いと判断すると（ステップＴ７９でＮＯ）、すなわちデバイス情報群２９１の全てのデバイス情報２９について設定処理を実施したと判断すると、変数エディタ２５３は、変数エディタ情報２９２の内容をデータ格納部２７０のソースプログラム２７１の変数宣言部２８１に記述する（ステップＴ８２）。このように変数宣言部２８１の記述を含むソースプログラム２７１が、例えば図１２のようにモニタ２０７に表示される。
【０１３２】
一方、変数エディタ２５３は、デバイス情報群２９１にデバイスＤのデバイス情報２９はないと判断すると（ステップＴ７２でＮＯ）、ネットワーク情報２９３から、デバイスＤのパラメータｐのパラメータ名（param1、param2、・・・）と各パラメータ名に対応のデータ型τを抽出し、各パラメータｐについてパラメータ名とデータ型τとを用いた表記データを生成し、生成した表記データを変数エディタ情報２９２に登録する（ステップＴ７８）。これにより、変数エディタ情報２９２には、例えば図９の表記２９２２または表記２９２４などが登録される。その後、ステップＴ７９に移行する。
【０１３３】
変数エディタ２５３は、キーボード２０５を介したユーザの操作内容に基づき、ユーザが選択したデバイスを対象に変数化処理を実施すると判断すると（ステップＴ７０でＮＯ、Ｔ８０でＹＥＳ）、変数エディタ２５３は、ユーザが選択したデバイスについて、上記に述べた設定処理（ステップＴ７２〜Ｔ７８）を実施する（ステップＴ８１）。その後、変数エディタ２５３は、ステップＴ８２の処理を上述と同様に実施する。一方、変数エディタ２５３は、ユーザが選択したデバイスを対象に変数化処理を実施すると判断しない場合は（ステップＴ７０でＮＯ、Ｔ８０でＮＯ）、図１３の元の処理に戻る。
【０１３４】
上記に述べた図１４の変数化処理によれば、例えばソースプログラム２７１の変数宣言部２８１には、設定処理により設定された変数２８４と、各変数２８４が割当てられる制御データのデータ型２８５が記述される。本実施の形態では、変数エディタ２５３は、予め定められた規則に従い、各変数２８４を一意に識別可能に生成する。
【０１３５】
（f２．個別設定処理）
図１５は、本実施の形態に係る個別設定処理の一例を示す処理フローチャートである。図１６は、本実施の形態に係る個別設定処理におけるデータ型候補の表示例を示す図である。個別設定処理では、変数エディタ２５３は、変数宣言部２８１のパラメータ（変数）に、１または複数のデータ型（候補）のうちから、ユーザが選択したデータ型を設定（記述）する。図１３を参照して、或るデバイスのパラメータ（変数）のデータ型を設定する処理を説明する。
【０１３６】
ユーザは、キーボード２０５を操作することにより、デバイスＤの変数ｖのデータ型τを選択する。変数エディタ２５３は、このような変数ｖのデータ型τの選択操作を受付ける（ステップＴ１３）。
【０１３７】
変数エディタ２５３は、受付けた操作内容に基づき、デバイス情報群２９１を検索する（ステップＴ１５）。変数エディタ２５３は、検索の結果から、変数ｖに該当するベンダ識別子２４２がデバイス情報群２９１に有るか否かを判断する（ステップＴ１７）。ベンダ識別子２４２がデバイス情報群２９１に無いと判断すると（ステップＴ１７でＮＯ）、変数エディタ２５３は、モニタ２０７の変数宣言部２８１の変数ｖのデータ型の候補として、データ型τのみを表示する（ステップＴ２３）。
【０１３８】
一方、変数エディタ２５３は、検索の結果から、変数ｖに該当するベンダ識別子２４２がデバイス情報群２９１に有ると判断すると（ステップＴ１７でＹＥＳ）、変数エディタ２５３は、対応情報２９４から当該ベンダ識別子２４２に一致するベンダ情報２９５に対応のデータ型２９７に、ユーザから受付けたデータ型τが有るか否かを判断する（ステップＴ１９）。変数エディタ２５３は、データ型２９７にデータ型τが無いと判断した場合（ステップＴ１９でＮＯ）、変数ｖのデータ型の候補２７６として、データ型τのみを表示する（ステップＴ２３）。その後、ステップＴ２５に移行する。
【０１３９】
また、変数エディタ２５３は、データ型２９７にデータ型τが有ると判断した場合（ステップＴ１９でＹＥＳ）、データ型２９７のデータ型τに対応する類似データ型群２９８に含まれる同一視可能なデータ型の一つ一つ、および、それらを連結したデータ型集合表記を候補２７５として、モニタ２０７の変数宣言部２８１に表示する（ステップＴ２１）。ステップＴ２３、Ｔ２１における、候補２７６、２７５の表示例が図１６に示される。
【０１４０】
例えば、ユーザから受付けたデータ型τがUNITを示す場合、ステップＴ２３では、変数エディタ２５３は、図１６の候補２７６のように、ユーザから受付けたデータ型τ（すなわちUNIT）のみを表示する。これに対して、ステップＴ２１では、変数エディタ２５３は、モニタ２０７のユーザの選択操作を受付けた位置にプロンプト２７９を表示しながら、プロンプト２７９に関連して候補２７５を表示する。候補２７５は、ユーザから受付けたデータ型τ（すなわちUNIT）と同一視可能なデータ型の一つ一つ（例えば、UNIT、WORD）、および、それらを連結したデータ型集合表記（例えば、UNIT WORD）の３つの候補を含む。
【０１４１】
ユーザは、キーボード２０５を操作して、モニタ２０７に表示された候補２７５の３つの候補のうちから１つを選択する。変数エディタ２５３は、ユーザの選択操作を選択されたデータ型をプロンプト２７９の位置で表示する（ステップＴ２４）。
【０１４２】
変数エディタ２５３は、ステップＴ２４またはステップＴ２３で表示されたデータ型を、データ格納部２７０のソースプログラム２７１の変数宣言部２８１に記述する（ステップＴ２５）。
【０１４３】
このように、本実施の形態に係る個別設定処理では、変数エディタ２５３は、ユーザが変数宣言部２８１のパラメータ（変数）に対応のデータ型を設定するための操作を支援する情報として、対応情報２９４に基づいた１または複数のデータ型（候補）をモニタ２０７を介して提示する。
【０１４４】
＜Ｇ．コンパイル処理＞
図１７と図１８は、本実施の形態に係るコンパイル処理の一例を示すフローチャートである。コンパイラ２５４は、エディット処理により編集されたソースプログラム２７１（より、特定的にはソースコード２７２）をコンパイルする。コンパイル処理は、ソースプログラム２７１のシンタックスエラーなどの検出、コード部２８２に記述された制御データのデータ型の決定などを含むが、シンタックスエラーなどの検出については従来の方法を用いることができるので、本実施の形態では、主に、データ型の決定を説明する。
【０１４５】
図１７（Ａ）を参照して、コンパイル処理では、字句解析部２１２および構文解析部２１３は、ソースプログラム２７１を、コンパイルに適したデータ構造に変換する。このデータ構造として、例えばＡＳＴ（abstract syntax tree、抽象構文木）を用いる。具体的には、字句解析部２１２は、ソースプログラム２７１を走査しながら解析し、解析の結果に基づき変数などの識別子を含む複数のトークンに分類し、分類されたトークンからなるトークン列を出力する。構文解析部２１３は、字句解析部２１２からのトークン列を解析し、解析の結果に基づきＡＳＴを生成する（ステップＳ２１）。意味解析処理では、意味解析部２１４は、構文解析部２１３が出力するＡＳＴに基づき、ソースコード２７２をプログラム言語の記述仕様に適合するようにデータの型または命令コードからなる式の型を決定する（ステップＳ２３）。再配置可能コード生成部２１６は、意味解析により得られた式のデータ型の情報に基づき従来と同様に、ソースプログラム２７１のソースコード２７２を再配置可能コードに変換する（ステップＳ２５）。コンパイラ２５４は、再配置可能コード生成部２１６により生成された再配置可能コードを、実行可能プログラム２７３としてデータ格納部２７０に格納する。その後、図７の元の処理に戻る。この再配置可能コードは、実行可能プログラム２７３に相当する。
【０１４６】
図１７（Ｂ）を参照して、意味解析処理（ステップＳ２３）は、シンボル解決処理（ステップＳ３１）とコード解析処理（ステップＳ３２）を含む。シンボル解決処理では、意味解析部２１４は、変数宣言部２８１で宣言された変数２８４をデータ格納部２７０の図示しないシンボルテーブルに登録し、コード部２８２に記述された識別子（変数）を、シンボルテーブルを用いてシンボルに置換する。
【０１４７】
コード解析処理（ステップＳ３２）では、コード解析部２１５は、コード部２８２に記述される各式を表現するＡＳＴを解析し、解析の結果に基づき当該式のデータ型を決定する。ここでは、ソースプログラム２７１の全体のＡＳＴは、コード部２８２に記述された各式に対応した部分ＡＳＴを含む。
【０１４８】
図１８を参照して、コード解析部２１５は、ソースプログラム２７１のＡＳＴに含まれる全ての式に対応したＡＳＴを解析処理したかを判断する（ステップＳ４１）。全ての式に対応したＡＳＴを解析したと判断すると（ステップＳ４１でＹＥＳ）、コード解析処理を終了し、図１７（Ｂ）の元の処理に戻る。
【０１４９】
未解析の式に対応したＡＳＴがあると判断すると（ステップＳ４１でＮＯ）、コード解析部２１５は、ソースプログラム２７１のＡＳＴから解析していない次の式に対応したＡＳＴを抽出する（ステップＳ４２）。コード解析部２１５は、抽出したＡＳＴを解析し、解析の結果に基き当該式のデータ型を決定する（ステップＳ４３）。その後、ステップＳ４１に戻る。
【０１５０】
（ｇ１．式の型解析処理）
コード解析部２１５による式の型を決定する処理（ステップＳ４３）を説明する。コード解析部２１５は、例えば、ソースプログラム２７１に含まれ文１、文２および文３のそれぞれの演算式をどのデータ型で演算するかを決定する。図１９は、本実施の形態に係る式に対応したＡＳＴの一例を示す図である。図２０〜図２４は、本実施の形態に係るコード解析処理におけるＡＳＴの変化の一例を示す図である。図２５、図２６、図２７および図２９は、本実施の形態に係るコード解析処理に適用される関数の一例を示す図である。図２８は、本実施の形態に係るランク表２８９の一例を示す図である。図２５、図２６、図２７および図２９の関数を含む規則２７８および図２８のランク表２８９はデータ格納部２７０に格納されている。
【０１５１】
（ｇ１−１．ＡＳＴの構造）
図１９の（Ａ）、（Ｂ）および（Ｃ）は、ソースプログラム２７１に含まれ文１、文２および文３のそれぞれの式に対応したＡＳＴを示す。例えば、文１〜文３は、演算子（オペレータ）として代入の演算子（：＝）を用いて、右辺の演算式の結果（値）を左辺の変数（被演算子（オペランド））に代入する演算式を表している。ここでは、説明を簡単にするために、文２の単項演算、または文１，文３の２項演算を示すが、演算式はこれらに限定されない。
【０１５２】
文１、文２および文３のそれぞれの式に対応したＡＳＴは階層構造を有する。階層構造は、演算子（：＝）が割当られるノードＮ１と、その右辺に含まれる演算子が割当られるノードＮ２と、ノードに接続される被演算子である変数が割当られるリーフを含む。階層構造において、演算子（：＝）が割当てられるノードＮ１はルートノードＮ１とも称し、ルートノードＮ１には下位層の（次位の）ノード（例えばノードＮ２）またはリーフＬ１が接続され、ノードＮ２にはリーフＬ２，Ｌ２１，Ｌ２２などが接続される。コード解析部２１５は、ＡＳＴを処理する場合、下位層から上位層に向かって処理を実施する。
【０１５３】
（ｇ１−２．リーフの型集合を算出）
まず、コード解析部２１５は、文１〜文３の式に対応のＡＳＴのそれぞれについて、図２５のＬ関数を用いて、全てのリーフに対応する型集合を算出する。本実施の形態では、型集合とは、データ型を元として含むデータ型の数学的な集合を示す。図２５を参照して、Ｌ関数は、式に対応のＡＳＴの各リーフを引数として、リーフが取り得るデータ型の型集合を返すと定義される。したがって、コード解析部２１５は、図１９（Ａ）〜（Ｃ）の文１〜文３の式に対応のＡＳＴのそれぞれについて、Ｌ関数を用いて各リーフの型集合を算出することにより、図２０（Ａ）〜（Ｃ）のＡＳＴを生成する。図２０（Ａ）〜（Ｃ）のＡＳＴは、図１９（Ａ）〜（Ｃ）のＡＳＴのリーフが、当該リーフの型集合に置換されたものである。
【０１５４】
（ｇ１−３．ノードの型集合を算出）
コード解析部２１５は、図２０（Ａ）〜（Ｃ）のＡＳＴの一つの演算子とそれに付随するオペランドに対応する型集合を、図２６のＦ１関数、または図２７のＦ２関数を適用して算出する。コード解析部２１５は、この操作を、図２０（Ａ）〜（Ｃ）の式に対応のＡＳＴのすべての演算子に対して行う。ＡＳＴに対応の式が複数の演算子を含む場合は、コード解析部２１５は、予め定められたプログラム言語の仕様で定める演算子の優先順位に従い各演算子に操作を適用する。
【０１５５】
図２６のＦ１関数は、演算子が単項演算子である場合に適用される関数を示す。Ｆ１関数は、単項演算子（θ）と当該演算子のノードに接続されるリーフ（オペランド）の型集合（Ａ）を引数として、当該単項演算子が取れるデータ型のみを元とする型集合を返すと定義される。図２０（Ｂ）の文２の下位層のノードＮ２の演算子は単項演算子である。したがって、コード解析部２１５は、図２０（Ｂ）の文２の式に対応のＡＳＴのノードＮ２の単項演算子について、Ｆ１関数を用いて当該単項演算子が取れるデータ型のみを元とする型集合を算出する。具体的には、コード解析部２１５は、図２０（Ｂ）のノードＮ２の単項演算子を処理する場合、Ｆ１関数に、引数として、単項演算子（θ）に“ＮＯＴ”および型集合（Ａ）に“UNIT WORD”をそれぞれ設定して、Ｆ１関数を実行する。これにより、図２６に示すようにＦ１関数の演算結果として、図２１（Ｂ）のようにノードＮ２の型集合（WORD）が取得される。
【０１５６】
図２７のＦ２関数は、演算子が二項演算子である場合に適用される関数を示す。この関数は、二項演算子（θ）、当該二項演算子のノードに左に接続されるリーフのオペランド（すなわち左オペランド）の型集合（Ａ）および当該二項演算子のノードに右に接続されるリーフのオペランド（すなわち右オペランド）の型集合（Ｂ）を引数として、当該二項演算子がオペランドに取り得るデータ型のみを元として含む型集合を返すと定義される。
【０１５７】
Ｆ２関数の実行中は、図２８のランク表２８９が参照される。ランク表２８９は、予め定められたプログラム記述言語の仕様に従い記述することが可能な複数のデータ型のランクが定義されている。図２８のランク表２８９は、「データの扱い方」が基づく基準により、これら複数のデータ型が、他のデータ型よりも優先して変数のデータ型として設定される度合いを示す優先度に従い、ランク付けした情報を示す。本実施の形態では、優先度を決定する上記の基準は、例えば、データ型が取り得るデータサイズとしているが、当該基準はデータサイズに限定されない。
【０１５８】
図２０（Ａ）の文１と図２０（Ｃ）の文３において、下位層のノードＮ２の演算子はいずれも二項演算子である。したがって、コード解析部２１５は、図２０（Ａ）と図２０（Ｃ）のＡＳＴのノードＮ２の二項演算子について、Ｆ２関数を用いて当該二項演算子が取り得るデータ型のみを元とする型集合を算出する。
【０１５９】
具体的には、コード解析部２１５は、図２０（Ａ）のノードＮ２の二項演算子を処理する場合、Ｆ２関数に、引数として、二項演算子（θ）に“＋”、型集合（Ａ）に“UNIT”および型集合（Ｂ）に“UNIT WORD”をそれぞれ設定して、Ｆ２関数を実行する。これにより、図２７に示すようにＦ２関数の演算結果の中間値Ｍ（Ａ，Ｂ）として、二項演算子（θ）に基づき型集合（Ａ）と型集合（Ｂ）から型集合（UNIT）が算出される。この中間値Ｍ（Ａ，Ｂ）の型集合は１つの型のみを含むので、図２８のランク表２８９を適用する必要はない。したがって、当該中間値Ｍ（Ａ，Ｂ）の型集合が、Ｆ２関数の最終の演算結果の型集合（UNIT）を示す。これにより、Ｆ２関数を実行することで、図２１（Ａ）のようにノードＮ２の型集合（UNIT）が取得される。
【０１６０】
また、コード解析部２１５は、図２０（Ｃ）のノードＮ２の二項演算子を処理する場合、Ｆ２関数に、引数として、二項演算子（θ）に“−”、型集合（Ａ）に“LINT TIME”および型集合（Ｂ）に“SINT INT DINT LINT USINT UINT UDINT ULINT BYTE WORD DWORD LWORD REAL LREAL TIME”をそれぞれ設定して、Ｆ２関数を実行する。これにより、図２７に示すようにＦ２関数の演算結果の中間値Ｍ（Ａ，Ｂ）として、二項演算子（θ）に基づき型集合（Ａ）と型集合（Ｂ）から型集合（LINT TIME SINT INT DINT USINT UINT UDINT ULINT BYTE WORD DWORD LWORD REAL LREAL TIME LINT ULINT REAL LREAL）が算出される。この中間値Ｍ（Ａ，Ｂ）の型集合は複数の型を含むので、中間値Ｍ（Ａ，Ｂ）に図２８のランク表２８９が適用されて、より高い優先度のデータ型が選択される。これにより、Ｆ２関数の最終の演算結果の型集合（LINT ULINT REAL LREAL TIME）が、図２１（Ｃ）のようにノードＮ２の型集合として取得される。
【０１６１】
このようにＦ２関数を適用することで、二項演算子のオペランドのデータ型は、図２８のランク表２８９におけるより高い優先度のデータ型に決定される。優先度がデータサイズを基準としている場合、二項演算子のオペランドに設定されるデータ型は、より大きなデータサイズを扱うことが可能なデータ型となるように決定される。これにより、例えばプログラム実行中に、当該二項演算子を用いた演算がＰＬＣにより実行される場合、オペランドに設定されたデータ型が有する有効桁などのデータサイズが小さいことに起因した、演算結果または演算途中の結果における桁落ち、桁あふれなどの情報のロスト（情報落ち）を回避することが可能となる。
【０１６２】
コード解析部２１５は、上記に述べたように下位層のノードＮ２の型集合を算出するこれにより、図２０（Ａ）〜（Ｃ）のＡＳＴを、それぞれ図２１（Ａ）〜（Ｃ）のＡＳＴに変換する。
【０１６３】
次に上位層のノードＮ１の型集合を、Ｆ１関数またはＦ２関数を用いてノードＮ２と同様に算出する。図２１（Ａ）〜図２１（Ｃ）のノードＮ１の演算子はいずれも二項演算子（：＝）である。したがって、コード解析部２１５は、図２１（Ａ）〜図２１（Ｃ）のＡＳＴのノードＮ１の二項演算子について、Ｆ２関数を用いて当該二項演算子が取り得るデータ型のみを元とする型集合を算出する。
【０１６４】
具体的には、コード解析部２１５は、図２１（Ａ）〜図２１（Ｃ）のＡＳＴのノードＮ１の二項演算子を処理する場合、Ｆ２関数に、引数として、二項演算子（θ）に“：＝”、型集合（Ａ）にノードＮ１の左オペランドの型集合および型集合（Ｂ）にノードＮ１の右オペランドの型集合をそれぞれ設定して、Ｆ２関数を実行する。これにより、図２１（Ａ）のノードＮ１の場合は、図２２（Ａ）のように型集合（UNIT）が取得されて、図２１（Ｂ）のノードＮ１の場合は、図２２（Ｂ）のように型集合（UNIT）が取得される。図２１（Ｃ）のノードＮ１の場合は、図２２（Ｃ）のように型集合（LINT ULINT REAL LREAL TIME)が取得される。
【０１６５】
コード解析部２１５は、上記に述べたようにノードＮ１の型集合を算出するこれにより、図２１（Ａ）〜（Ｃ）のＡＳＴを、それぞれ図２２（Ａ）〜（Ｃ）の型集合に変換する。
【０１６６】
（ｇ１−４．式の型決定）
コード解析部２１５は、図２２（Ａ）〜（Ｃ）に示される各式に対応のＡＳＴについて最終的に取得された型集合から、新たな型集合を図２９のU関数を実行することにより取得する。図２９のU関数は、図２２（Ａ）〜（Ｃ）の型集合（Ａ）を引数として、当該引数の型集合のうちの１つの元（データ型）のみを含む型集合を返すと定義される。図２９を参照して、U関数は、実行されると、引数の型集合（Ａ）が空集合であれば空集合を返すが、空集合でなければ、型集合（Ａ）に含まれるデータ型のうち、図２８のランク表２８９に定義された優先度に基き、最も低いランク（優先度）に該当するデータ型を返す。これにより、コード解析部２１５は、図２２（Ａ）〜（Ｃ）のＡＳＴを、それぞれ図２３（Ａ）〜（Ｃ）の型集合に変換する。
【０１６７】
このようにU関数を適用することで、式の型（すなわち式の左辺のオペランドのデータ型）は、図２８で定義されたランクにおいてより低い優先度のデータ型に決定される。これにより、文１〜文３の式の算出値を示すオペランドの変数が、ソースプログラム２７１の他の式中でオペランドとして用いられた場合に、コード解析部２１５により当該他の式のＡＳＴに対してＬ関数またはＦ１関数，Ｆ２関数が実行されたときは、当該オペランドの変数のデータ型よりも優先度の高いデータ型を含む型集合を取得できる可能性を保証することできる。
【０１６８】
コード解析部２１５は、U関数を実行することにより取得された図２３（Ａ）〜（Ｃ）のＡＳＴの型集合を、それぞれ図２４（Ａ）〜（Ｃ）の文１〜文３に対応した式のデータ型に変換する。具体的には、コード解析部２１５は、図２３（Ａ）〜（Ｃ）のＡＳＴの型集合が単元であれば、その元を当該ＡＳＴに対応の式のデータ型として決定し、そうでなければ（空集合であれば）、型不適合のエラーとして処理を終了する。
【０１６９】
本実施の形態によれば、変数エディタ２５３は、ソースプログラム２７１のエディット時に、変数宣言部２８１において、デバイスベンダ毎のデータ型の対応情報２９４に基き、デバイスの制御データ（変数）別の同一視可能な１または複数のデータ型候補を定義する。エディット後のソースプログラム２７１のコンパイル時には、コンパイラ２５４は、ソースプログラム２７１中の各式について、当該式の変数に定義された１または複数のデータ型候補から、予め定められた規則（Ｌ関数、Ｆ１関数、Ｆ２関数およびU関数）、図２８のランク表２８９に従い、演算精度を保証するように当該式のデータ型を決定する。これにより、ＰＬＣシステムＳＹＳに含まれるデバイス毎にサポートし得るデータ型が異なるとしても、エディタ２５２およびコンパイラ２５４は、プログラマに対し、プログラミングにおいて適切なデータ型の宣言をサポートする機能、およびプログラ実行時のエラー（桁落ち、桁あふれ等の情報ロス）を回避し得るような実行可能コードの生成を支援する環境を提供することができる。
【０１７０】
＜Ｈ．エディタおよびコンパイラのプログラム＞
本実施の形態では、サポート装置２００のＣＰＵ２０１が必要なプログラムを実行することによって、エディタ２５２およびコンパイラ２５４による上記の処理を実行してもよい。当該プログラムは、ＨＤＤ２０４などの記憶ユニットに記憶されていてもよい。ＣＰＵ２０１が必要なプログラムを実行する際は、記憶ユニットに記憶された対象となるプログラムをＲＡＭ２０３に展開する。そして、ＣＰＵ２０１は、ＲＡＭ２０３に展開された当該プログラムを解釈及び実行することにより、エディタ２５２およびコンパイラ２５４の変数エディタ２５３、字句解析部２１２、構文解析部２１３、意味解析部２１４、コード解析部２１５および再配置可能コード生成部２１６の各要素の処理を実施する。
【０１７１】
ＣＰＵ２０１は、情報処理に応じてサポート装置２００の各構成要素を制御する。上記の記憶ユニットは、例えば、ＨＤＤ２０４に限定されず、ソリッドステートドライブ等の補助記憶装置を含み得る。このような記憶ユニットは、プログラムと、規則２７８およびエディタ情報２７７などのデータを格納し得る。
【０１７２】
サポート装置２００には、プログラムまたはデータは記憶媒体を介して提供され得る。このような記憶媒体は、コンピュータその他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を、電気的、磁気的、光学的、機械的または化学的作用によって蓄積する媒体である。本実施の形態では、このような記憶媒体は、例えばＣＤ−ＲＯＭ３００を含む。また、サポート装置２００は、このようなプログラムおよび／またはデータを、通信ネットワークを介して外部装置から受信することも可能である。
【０１７３】
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
対象（６、７）を制御する制御装置（ＰＬＣ１〜ＰＬＣ３）で実行される実行可能プログラム（２７３）を生成するサポート装置（２００）であって、
前記対象を制御するデータの型別に、当該データの型と、前記プログラムの実行時に前記制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報（２９４）を格納するためのデータ格納手段（２７０）と、
データ別の変数と、当該変数に対応するデータ型であって前記複数のデータ型のうちの１つ以上を定義する情報（２８１）を生成する手段（２５３）と、
前記制御装置で実行される処理を、定義された変数を用いて記述した命令コード（２８２）を生成する手段（２５２）と、
前記定義する情報および前記命令コードを用いて前記実行可能プログラムを生成する手段（２１５、２１６）と、を備え、
前記実行可能プログラムを生成する手段は、
前記命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、
前記演算式の前記型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定するよう構成される、サポート装置。
【０１７４】
[構成２]
前記対象を制御するデータの型別の前記複数のデータ型は、前記対象のベンダ毎に格納されて、
前記ベンダ毎の前記複数のデータ型は、当該ベンダにより予め定められたデータ型（２９７）と、当該予め定められたデータ型とデータの扱い方が同じとなり得る他のデータの型（２９８）とを含む、構成１に記載のサポート装置。
【０１７５】
[構成３]
前記定義する情報を生成する手段は、
前記データ別の変数と、当該変数に対応するデータ型として前記対象のベンダに対応した前記複数のデータ型を定義する情報を生成するよう構成される、構成１または２に記載のサポート装置。
【０１７６】
[構成４]
前記サポート装置は、
前記制御装置から、当該制御装置に接続される前記対象のベンダを特定する情報を受信する、構成３に記載のサポート装置。
【０１７７】
[構成５]
前記定義する情報を生成する手段は、
ユーザ操作に基き、前記データ別の変数に対応する１つ以上のデータ型を定義し、
前記変数と、当該変数に関連付けて前記複数のデータ型をモニタ（２０７）に表示させるよう構成される、構成１から４のいずれか１項に記載のサポート装置。
【０１７８】
[構成６]
前記データ型による前記扱い方は、データサイズの大きさに基づく扱い方を含み、
各データ型に対応して、扱われる前記データサイズに基き当該データ型が他のデータ型に優先して前記変数に対応して設定される度合いを示す優先度を格納するための手段（２８９）を、さらに備え、
前記演算結果のデータ型を決定することは、
前記型集合から、前記演算精度を保証するための基準に従う優先度を有したデータ型を選択し、演算結果のデータ型として決定することを含む、構成１から５のいずれか１項に記載のサポート装置。
【０１７９】
[構成７]
前記型集合を生成することは、
前記演算式が有する演算子の種類に基き、当該式が有する変数に対応して定義された１つ以上のデータ型を含む型集合を生成することを含む、構成１から６のいずれか１項に記載のサポート装置。
【０１８０】
[構成８]
対象（６、７）を制御する制御装置（ＰＬＣ１〜ＰＬＣ３）で実行される実行可能プログラム（２７３）を生成するサポートプログラムであって、前記サポートプログラムは、コンピュータに以下の手段として機能させ、
前記コンピュータは、
前記対象を制御するデータの型別に、当該データの型と、前記プログラムの実行時に前記制御装置による当該データの型とデータの扱い方が同じとなり得る他のデータ型からなる複数のデータ型の情報（２９４）を格納するためのデータ格納手段（２７０）を備え、
前記手段は、
データ別の変数と、当該変数に対応するデータ型であって前記複数のデータ型のうちの１つ以上を定義する情報（２８１）を生成する手段（２５３）と、
前記制御装置で実行される処理を、定義された変数を用いて記述した命令コード（２８２）を生成する手段（２５２）と、
前記定義する情報および前記命令コードを用いて前記実行可能プログラムを生成する手段（２１５、２１６）と、を備え、
前記実行可能プログラムを生成する手段は、
前記命令コードが示す演算式が有する各変数に対応して定義された１つ以上のデータ型からなる型集合を生成し、
前記演算式の前記型集合から、演算精度を保証するための基準に基き１つを選択し、演算結果のデータ型として決定するよう構成される、サポートプログラム。
【０１８１】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１８２】
６  検出センサー、７  アクチュエータ、２００  サポート装置、３００  ＣＤ−ＲＯＭ、ＲＯＭ  ２０２、２０３  ＲＡＭ、２０５  キーボード、２０６  マウス、２０７  モニタ、２１１  転送モジュール、２１２  字句解析部、２１３  構文解析部、２１４  意味解析部、２１５  コード解析部、２１６  再配置可能コード生成部、２４１  デバイス識別子、２４２  ベンダ識別子、２４３  パラメータデータ、２５０  プログラミングアプリケーション、２５２  エディタ、２５３  変数エディタ、２５４  コンパイラ、２７０  データ格納部、２７１  ソースプログラム、２７２  ソースコード、２７３  実行可能プログラム、２７７  エディタ情報、２７８  規則、２７９  プロンプト、２８０  ネットワーク設定アプリケーション、２８１  変数宣言部、２８２  コード部、２８３  コメント部、２８４，ｖ  変数、２８５，２９７  データ型、２８６，２８７  ボタン、２８９  ランク表、２９０  レコード、２９１  デバイス情報群、２９２  変数エディタ情報、２９３  ネットワーク情報、２９４  対応情報、２９５  ベンダ情報、２９６  同一視可能なデータ型群、２９８  類似データ型群、１０６１  コンフィグ情報、Ｌ１，Ｌ２，Ｌ２１，Ｌ２２  リーフ、Ｎ１，Ｎ２  ノード、ＮＷ  ネットワーク、ＳＹＳ  ＰＬＣシステム、Ｖ  ベンダ、ｐ  パラメータ。
【図１】
2019211823.tif 000003
【図２】
2019211823.tif 000004
【図３】
2019211823.tif 000005
【図４】
2019211823.tif 000006
【図５】
2019211823.tif 000007
【図６】
2019211823.tif 000008
【図７】
2019211823.tif 000009
【図８】
2019211823.tif 000010
【図９】
2019211823.tif 000011
【図１０】
2019211823.tif 000012
【図１１】
2019211823.tif 000013
【図１２】
2019211823.tif 000014
【図１３】
2019211823.tif 000015
【図１４】
2019211823.tif 000016
【図１５】
2019211823.tif 000017
【図１６】
2019211823.tif 000018
【図１７】
2019211823.tif 000019
【図１８】
2019211823.tif 000020
【図１９】
2019211823.tif 000021
【図２０】
2019211823.tif 000022
【図２１】
2019211823.tif 000023
【図２２】
2019211823.tif 000024
【図２３】
2019211823.tif 000025
【図２４】
2019211823.tif 000026
【図２５】
2019211823.tif 000027
【図２６】
2019211823.tif 000028
【図２７】
2019211823.tif 000029
【図２８】
2019211823.tif 000030
【図２９】
2019211823.tif 000031