(57)【特許請求の範囲】
【請求項１】
コントローラで実行させる制御プログラムの作成を支援するプログラミング装置において、
左から右へパワー又はシグナルが流れるように解釈する制御プログラム言語と上から下に状態遷移するように解釈する制御プログラム言語とを含む複数種類の制御プログラム言語で混在表記された制御プログラムをネットワーク単位及びサブネットワーク単位による有向グラフとして扱い、有向グラフにおける各ノードに対して右下から左に向かい上段にあがって再び右から左に向かう順序でノード番号を付し、このノード番号の付された有向グラフに対する深さ優先探索アルゴリズムを適用して前記各ノードの拾い上げを行い、前記各ノードの実行順序を決定し、前記サブネットワーク単位で状態遷移の外部条件の演算、状態遷移の演算、状態遷移結果による外部動作演算の順序を守るように実行順序を決定し、前記ネットワーク単位で左から右、上から下の順序を守るように実行順序を決定し、前記ネットワーク及び前記サブネットワークにおける実行順序を考慮して、前記コントローラの理解する命令語を取得するように、前記混在表記された制御プログラムをコンパイルするコンパイラを備えたことを特徴とするプログラミング装置。
【請求項２】
請求項１記載のプログラミング装置において、
前記コンパイラは、前記混在表記された制御プログラムの内容とモニタデータとを関係付けて保存するとし、
前記コンパイラによるコンパイル時の関係付けに基づいて、モニタデータを混在表記された制御プログラム上に配置するモニタデータ重ね表示手段を付加したことを特徴とするプログラミング装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、鉄鋼プラント、製紙プラント、上下水道などの公共システム、自動車産業などの生産工程、化学・石油プラントなどの制御を行うプログラムの開発を支援するプログラミング装置に関する。
【０００２】
【従来の技術】
一般的に、シーケンスプログラムはプログラミング装置によって作成され、この作成されたシーケンスプログラムは機械語に変換されてプログラマブルコントローラ（以下、「コントローラ」という）で実行可能な状態となる。そして、機械語に変換されたシーケンスプログラムは、コントローラに送られ、コントローラ側で機械語プログラムとして保存され、実行される。
【０００３】
シーケンスプログラムの作成に利用される制御プログラミング言語には、様々な言語が存在するが、主なものにラダーダイヤグラム（ＬＤ言語）、ファンクションブロックダイヤグラム（ＦＢＤ言語）、シーケンスフローチャート（ＳＦＣ言語）などがある。このＬＤ言語、ＦＢＤ言語、ＳＦＣ言語はIEC61131-3規格のグラフィカル３言語である。
【０００４】
表１は、ＬＤ言語、ＦＢＤ言語、ＳＦＣ言語の特徴を示すテーブルである。
【０００５】
【表１】
0003819639.tif 000002
【０００６】
例えば、この表１より、ＬＤ言語は論理演算を利用する制御のプログラミングに向いている。また、論理演算はシーケンス制御に利用される傾向がある。したがって、ＬＤ言語はシーケンスコントローラで実行させるプログラムの作成に利用される傾向がある。
【０００７】
また、ＦＢＤ言語は数値演算を利用する制御のプログラミングに向いている。また、数値演算はループ制御に利用される傾向がある。したがって、ＦＢＣ言語はループコントローラで実行させるプログラムの作成に利用される傾向がある。
【０００８】
さらに、ＳＦＣ言語は順次処理を利用する制御のプログラミングに向いているが、論理演算や、数値演算、文字処理は不可能である。
【０００９】
このように、ＬＤ言語、ＦＢＤ言語、ＳＦＣ言語はぞれにおいて特徴が異なるため、ユーザ（例えばプログラマ）が制御対象や制御の内容、自己の理解度を判断し、いずれかの言語を任意に選択し、プログラミングに利用している。
【００１０】
また、従来においては、上記したように、作成したシーケンスプログラムから機械語プログラムへの変換を行うのは、もっぱらプログラミング装置の役目であり、コントローラがこの機械語変換を行うことはない。
【００１１】
【発明が解決しようとする課題】
以上のように、従来においては、ユーザがシーケンスプログラムの作成前に選択するいずれかの制御プログラミング言語によってプログラミングが行われている。
【００１２】
しかしながら、近年、制御の対象や制御処理の内容が複雑化しており、複数種類の制御プログラミング言語を利用して一連の制御に関するプログラムを作成する機会が多くなっている。例えば演算処理と数値処理を組み合わせてシーケンスプログラムを作成する等の必要性が向上している。
【００１３】
このような場合に、従来では、ユーザは一連の制御内容を分割し、各分割した内容毎に、適した制御プログラミング言語を利用してプログラミングを行っている。
【００１４】
したがって、グラフィカルな制御プログラミング言語を利用したとしても、ユーザは、分割作成するプログラムの全体の状態を把握しにくいという問題がある。
【００１５】
図２０は、従来のプログラミング装置において異種の制御プログラミング言語を利用して作成したプログラムの表示例を示す画面図である。
【００１６】
例えば、プログラミング装置として動作する計算機によってシーケンスプログラムのある部分をＬＤ言語で記述し、他のある部分をＳＦＣ言語で記述したとする。
【００１７】
すると、このシーケンスプログラムを計算機の画面１００に表示させる場合には、ＬＤ言語で記述された部分がウィンドウ２００ａ上に表示されるが、さらにＳＦＣ言語で記述された部分が別のウィンドウ２００ｂ上に表示される。このような画面１００では、ユーザは異なるウィンドウ２００ａ、２００ｂ間でプログラム間の呼び合いを辿る等しながらプログラムの内容（処理の流れ等）を確認しなければならなず、容易に内容を理解できない。
【００１８】
また、従来においては、作成され機械語に変換された後のシーケンスプログラムがコントローラに保存され、実行されている。なお、この実行中のシーケンスプログラムの処理状態をプログラミング装置でモニタする場合には、機械語変換される前の元のシーケンスプログラムが必要である。
【００１９】
しかしながら、シーケンスプログラムの作成・変換を行ったプログラミング装置とは異なるプログラミング装置で、この実行中のシーケンスプログラムをモニタしたい場合が生じる。
【００２０】
図２１は、このように、シーケンスプログラムの作成を行ったプログラミング装置とモニタを行うプログラミング装置とが異なる場合の例を示すブロック図である。
【００２１】
プログラミング装置３００ａで生成された元のプログラム４００ａは、変換されて機械語のプログラム５００ａとなり、コントローラ６００に保存、実行され、制御対象７００の一部分が制御される。
【００２２】
同様に、プログラミング装置３００ｂで生成された元のプログラム４００ｂは、変換されて機械語のプログラム５００ｂとなり、コントローラ６００に保存、実行され、制御対象７００の他の部分が制御される。
【００２３】
ここで、制御対象７００の装置が変更されたため、プログラミング装置３００ｂで新規のプログラムを作成する際に、他のプログラミング装置３００ａで作成した元のプログラム４００ａをモニタしたい場合がる。
【００２４】
この場合、モニタを行うプログラミング装置３００ｂには、モニタしたい元のプログラム３００ａが保持されていないため、モニタすることが困難である。なお、単に、コントローラ６００に保持されている機械語のプログラム５００ａを逆変換して、モニタを行うプログラミング装置３００ｂが元のプログラム４００ａを得るのは、プログラムの作成を行ったプログラミング装置３００ａとモニタを行うプログラミング装置３００ｂとの間で利用する制御プログラミング言語が異なる場合に困難である。
【００２５】
また、従来においては、複数の制御プログラミング言語を利用可能なプログラミング装置がある。
【００２６】
しかしながら、この複数の言語を利用可能なプログラミング装置であっても、ある制御プログラミング言語で作成されたプログラムを、他の制御プログラミング言語で作成されたプログラムに変換して表示させるというユーザの要請に対処可能なプログラミング装置は存在しない。
【００２７】
以上をまとめると、従来においては、異種の制御プログラミング言語で記述されたプログラムの混在表記ができず、また混在表記したプログラムの編集、コンパイル、制御実行、オンラインモニタができない。
【００２８】
また、従来においては、異なる種類の制御プログラミング言語でシーケンスプログラムを作成すると、統一的に取り扱うことが困難である。
【００２９】
本発明は、上記実情に鑑みてなされたもので、異種の制御プログラミングをまとめて取扱い可能とすることにより、ユーザによるプログラム記述性、理解度を向上させ、ユーザの作業効率を向上させるプログラミング装置を提供することを目的とする。
【００３０】
【課題を解決するための手段】
本発明の骨子は、複数種類の制御プログラミング言語を自由に利用可能とする点にある。
【００３１】
以下、本発明を実現するに校閲あたって講じた具体的手段について説明する。
【００３２】
第１の発明は、コントローラで実行させる制御プログラムの作成を支援するプログラミング装置において、左から右へパワー又はシグナルが流れるように解釈する制御プログラム言語と上から下に状態遷移するように解釈する制御プログラム言語とを含む複数種類の制御プログラム言語で混在表記された制御プログラムをネットワーク単位及びサブネットワーク単位による有向グラフとして扱い、有向グラフにおける各ノードに対して右下から左に向かい上段にあがって再び右から左に向かう順序でノード番号を付し、このノード番号の付された有向グラフに対する深さ優先探索アルゴリズムを適用して各ノードの拾い上げを行い、各ノードの実行順序を決定し、サブネットワーク単位で状態遷移の外部条件の演算、状態遷移の演算、状態遷移結果による外部動作演算の順序を守るように実行順序を決定し、ネットワーク単位で左から右、上から下の順序を守るように実行順序を決定し、ネットワーク及びサブネットワークにおける実行順序を考慮して、コントローラの理解する命令語を取得するように、混在表記された制御プログラムをコンパイルするコンパイラを備えたプログラミング装置である。
【００３３】
これにより、ユーザが制御プログラムの内容を容易に理解することができる。
なお、制御手段の例としてはプログラマブルコントローラがあり、制御プログラムの例としてはシーケンスプログラムがある。
【００３６】
これにより、混在表記させていたプログラムをそのままコンパイルすることができるため、各種言語の利点を活用したプログラムを作成し、このプログラムを制御手段に実行させることができる。
【００３７】
第２の発明は、第１の発明のプログラミング装置において、コンパイラは混在表記された制御プログラムの内容とモニタデータとを関係付けて保存するとし、コンパイラによるコンパイル時の関係付けに基づいて、モニタデータを混在表記された制御プログラム上に配置するモニタデータ重ね表示手段を付加するとした。
【００３８】
この第２の発明では、制御プログラムの内容とモニタデータとの関係を利用することで、混在表記された制御プログラム上にモニタデータを配置することができ、これによりユーザがプログラムの問題点を容易に認識できる。
【００９２】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００９３】
（第１の実施の形態）
本実施の形態においては、複数の制御プログラミング言語を混在表記（同一表記）可能としたプログラミング装置について説明する。
【００９４】
また、本実施の形態においては、複数の言語により混在表記されたプログラムをコンパイルして実行可能なプログラムを得るプログラミング装置について説明する。
【００９５】
なお、本実施の形態においては、ＬＤ言語、ＦＢＤ言語、ＳＦＣ言語の３種の制御プログラミング言語を利用する場合について説明するが、他の言語の場合も同様である。
【００９６】
図１は、本実施の形態に係るプログラミング装置の構成を示すブロック図である。
【００９７】
このプログラミング装置１は、ユーザの指示にしたがった制御プログラミング言語でプログラムを表示するが、さらに３種類の言語を混在させた状態でもプログラムを表示する。また、ユーザの指示に従って３種類の制御プログラミング言語を混在させて作成されたプログラムを変換し、プログラマブルコントローラ２に送信する。
【００９８】
このプログラミング装置１は、主に、入力装置３、表示装置４、伝送装置５を備え、プログラム編集６、プログラム表示７、プログラムコンパイル８、ファイル送信９、モニタデータ取得１０、モニタ重ね表示１１等の各種処理を実行する。
【００９９】
このうち、本実施の形態において特徴的な部分は。プログラムコンパイル８の処理内容と、このプログラムコンパイル８やプログラム編集６等の処理で扱われるプログラムファイル１２と、モニタデータ重ね表示１１で扱われるモニタデータ１３にある。
【０１００】
なお、図１に示すプログラミング装置１においては、通常のプログラミング装置と同様の構成装置を備え同様の処理を実行可能であるが、説明を簡略にするために他の構成装置及び処理の記載を省略している。
【０１０１】
このプログラミング装置１の入力装置３は、対人的な指示インターフェイスであり、この入力装置３からプログラム編集６、プログラム表示７、プログラムコンパイル８、モニタ重ね表示１１の各処理への指示が出力される。一般的には、キーボード、マウスが利用される。
【０１０２】
表示装置４は、グラフィック及びキャラクタを表示可能な装置であり、ＣＲＴや液晶ディスプレイが利用される。
【０１０３】
伝送装置５は、このプログラミング装置１とコントローラ２の間を伝送接続する装置であり、一般にはRS232CやEthernet等の伝送ボードやケーブルを指す。
【０１０４】
プログラム編集６は、入力装置３からの指示にしたがい、３種類の制御プログラミング言語による回路グラフィックを入力、切り取り、貼り付け、コピー、削除する処理である。すなわち、このプログラム編集６の処理により、３種類の制御プログラミング言語が混在したプログラムの作成がなされ、作成されたプログラムをプログラムファイル１２の一要素として保存する。
【０１０５】
なお、プログラムファイル１２は、プログラムの表示及び実行に関連するファイル群の総称である。例えば、上記のようなプログラム編集６から得られる３種類の制御プログラミング言語により記述されたコンパイル前のプログラムや、プログラムコンパイル８によるコンパイル後のプログラムを含む。
【０１０６】
プログラム表示７は、プログラムファイル１２に基づいて、プログラム編集６等で扱われる回路グラフィック等を表示する処理である。
【０１０７】
すなわち、このプログラム編集６とプログラム表示７とにより、ユーザは３種の言語の記述要素を利用してグラフィカルなプログラムの作成が可能となる。
【０１０８】
例えば、各種の制御プログラム言語で利用される要素（ＬＤ言語における接点、コイル、ＦＢＤ言語におけるファンクション、ファンクションブロック、ＳＦＣ言語におけるステップ、トランジション、その他処理の流れを示す線等）をマウスでドラッグし、移動させてリリースするなどにより、３種の言語が混在した回路グラフィックを表示させつつ、プログラムの編集が可能となる。
【０１０９】
プログラムコンパイル８は、３種類の言語が混在している環境に適用される特別のコンパイル理論により、３種の言語が混在している回路グラフィックをコンパイルし、コントローラ２が実時間に実行できる命令語（コントローラが処理する順序に並べられた命令語）にコンパイル可能な形式を生成し、プログラムファイルの一部として保存する処理である。なお、コントローラ２が実時間に実行できる命令語にコンパイル可能な形式とは、グラフィカルに記述されたプログラムから実際にコントローラ２によって処理する順序を定めた形式をいう。
【０１１０】
また、プログラムコンパイル８は、適切な順序の命令語にコンパイル可能な形式をさらに機械語のプログラムにコンパイルし、プログラムファイル１２の一部として保存する。なお、グラフィカルに記述されたプログラムが例えばコントローラ２におけるマクロ命令等のように、そのままコントローラ２上で実行可能であれば、この機械語への変換は必要ない。
【０１１１】
ファイル送信９は、伝送装置５を利用してプログラムファイル１２のうち少なくとも機械語によるプログラムをコントローラ２の指定箇所へ送信する処理である。
【０１１２】
モニタデータ取得１０は、伝送装置５を利用してモニタデータ１３をコントローラから取得する処理である。
【０１１３】
なお、モニタデータ１３は、プログラム中の演算結果や変数の現在値を示すデータである。このモニタデータは、３種類の言語が混在している環境において、回路グラフィック上に重ねて描画可能とするための特別なデータ構造を持ち、回路グラフィック上に重ねて描写することでモニタリングが可能となる。
【０１１４】
モニタ重ね表示１１は、モニタデータ１３を回路グラフィックに重ねてモニタ表示する処理である。
【０１１５】
コントローラ２は、プログラミング装置１から受信した機械語のプログラムに基づいて図示しない制御対象を制御する。また、この制御対象の状態やプログラムの実行結果から得られるモニタデータ１３をプログラミング装置１に送信する。
【０１１６】
このコントローラ２は、主に、伝送装置１４とＩ／Ｏ装置１５とを備え、ファイル受信１６、プログラム実行１７、モニタデータ出力１８、モニタデータ返信１９等の各種処理を実行する。なお、図１に示すコントローラ２においては、説明を簡略にするために他の構成装置及び処理の記載を省略しているが、通常のコントローラと同様の構成装置を備え、同様の処理を実行可能である。
【０１１７】
伝送装置１４は、先の伝送装置５と同様に、プログラミング装置１とコントローラ２の間を伝送接続する装置である。
【０１１８】
Ｉ／Ｏ装置１５は、このコントローラ２が図示しない制御対象のプロセスからのＩ／Ｏ信号を入出力するための装置であり、一般的にはＩ／ＯカードやＩ／Ｏバスなどが利用される。
【０１１９】
ファイル受信１６は、伝送装置１４を利用してプログラムファイル１２のうちの少なくとも機械語によるプログラムをプログラミング装置１から受信し、指定箇所に配置する処理である。
【０１２０】
プログラム実行１７は、ファイル受信１６の処理によって受信されたプログラムファイル１６の内容を解釈し、Ｉ／Ｏ信号を入出力しながら機械語（命令語）を実行する。
【０１２１】
モニタデータ出力１８は、実行されたプログラムの演算結果や変数の値からモニタデータ１８を生成する処理である。
【０１２２】
モニタデータ返信１９は、モニタデータ出力１８によって生成されたモニタデータ１３を、伝送装置１４を利用してプログラミング装置１に送信する処理である。
【０１２３】
上記のような構成を持つプログラミング装置１におけるプログラムコンパイル８で採用されたコンパイル理論について以下に説明する。このコンパイル理論により、３種混在した制御プログラミング言語のコンパイルが実現される。
【０１２４】
なお、ここでいうコンパイルとは、ネットワークの集合体からコントローラ２の理解する最終的な命令語を、IEC61131-3規格にしたがった解釈で並べることをいう。したがって、命令語への変換と実行順決定がここで説明しているコンパイル論理の骨子である。
【０１２５】
図２は、本実施の形態に係るプログラミング装置１で採用されたコンパイル理論を説明するためのフロー図である。
【０１２６】
まず、３種の言語が混在したプログラムをノード及び矢印の要素に分解する処理が実行される（ｓ１）。
【０１２７】
図３は、本実施の形態に係るプログラミング装置によって混在表記されているプログラムの例を示す図である。
【０１２８】
このプログラム２０においては、ＬＤ言語、ＦＢＤ言語、ＳＦＣ言語が混在して記述されている。
【０１２９】
ＬＤ言語による記述部分には接点２１やコイル２２等のグラフィックシンボルが記述されている。ＦＢＤ言語による記述部分にはファンクション（ファンクションブロック）２３等のグラフィックシンボルが記述されている。ＳＦＣ言語による記述部分にはステップ２４、トランジション２５等のグラフィックシンボルが記述されている。
【０１３０】
ここでは、上記のような各言語のグラフィックシンボルを「ノード」として扱う。
またノードを接続する線を「矢印」として扱う。
【０１３１】
ＬＤ言語では、IEC61131-3規格において、左から右へパワーが流れるように解釈すると約束されている（Power flow）。
【０１３２】
同様に、ＦＢＤ言語では、左から右へシグナルが流れるように解釈すると約束されている（Signal Flow）。
【０１３３】
さらに、ＳＦＣ言語では、上から下に状態遷移するように解釈すると約束されている（Activity flow）。
【０１３４】
したがって、ＬＤ言語及びＦＢＤ言語で記述されているノードを「○」とし、ＳＦＣ言語で記述されているノードを「△」とし、矢印の方向をパワー、シグナル、状態遷移の方向で表せば、ノード及び矢印で３種混在したプログラムを書き換えることができる。
【０１３５】
図４は、ノードと矢印でプログラムを表した場合の状態図である。この図４では先の図３に示すプログラム２０を書き換えた状態２６を示している。
【０１３６】
次に、ノードと矢印で示された状態２６に対するネットワーク単位のグルーピング処理が実行される（ｓ２）。
【０１３７】
このネットワーク単位のグルーピング処理においては、ノードと矢印が接触されている集合体の単位が１つのネットワークとされる。図４の状態２６においては、グルーピングの結果、３つのネットワークNetwork1、Network2、Network3が取得される。
【０１３８】
次に、ノードと矢印で示された状態２６に対するサブネットワーク単位のグルーピング処理が実行される（ｓ３）。
【０１３９】
このサブネットワーク単位のグルーピング処理においては、先のネットワーク単位のグルーピング処理において取得されたネットワークがＳＦＣのノードを含む場合に、ＳＦＣ言語のトランジションに接続されたＬＤ言語あるいはＦＢＤ言語のネットワーク部分がサブネットワークとされる。また、ＳＦＣのステップ・トランジションのみで構成されたネットワーク部分がサブネットワークとされる。さらに、ＳＦＣ言語のステップに接続されたＬＤ言語あるいはＦＢＤ言語のネットワーク部分がサブネットワークとされる。
【０１４０】
上記のサブネットワークのグルーピング処理により、図４の状態２６においては、ネットワークNetwork2がＳＦＣ言語のノードを含むため、まずネットワークNetwork2のうちのＬＤ言語を含む部分がサブネットワークAction1とされる。また、ネットワークNetwork2のうちＳＦＣ言語のステップ・トランジションのみで構成された部分がサブネットワークState1とされる。さらに、ネットワークNetwork2のうちのＦＢＤ言語を含む部分がサブネットワークCondition1とされる。
【０１４１】
次に、上記処理により取得されたネットワーク単位、及びサブネットワーク単位は、ノードとそれを接続する矢印から構成されるため、このネットワーク単位及びサブネットワーク単位をグラフ理論における「有向グラフ」とみなして実行順序が決定される（ｓ４）。
【０１４２】
なお、有向グラフとはノード間の相対順序が決められたグラフをいい、この有向グラフで結ばれているノードを整列させる一般的な手法としてトポロジカル・ソートがある。しかしながら、例えばIEC1131-3規格にしたがうとすると、ネットワーク単位又はサブネットワーク単位による有向グラフが必ずしもトポロジカル・ソートで順序を比較できない半順序関係を形成する場合がある。有向グラフがこのような半順序関係を含む場合には、トポロジカル・ソートの解が一つとならない。
【０１４３】
そこで、本実施の形態におけるプログラムコンパイル８のコンパイル理論においては、以下のような手順にしたがって、ネットワーク単位及びサブネットワーク単位による有向グラフの実行順序を決定する。
【０１４４】
図５は、本実施の形態で採用されたノードの順序決定手法を示す概念図である。
【０１４５】
ネットワークあるいはサブネットワークが図５（ａ）のような有向グラフで示されるとする。
【０１４６】
まず、横書き文章の逆順（右下から左へ移動し、上段にあがって再び右から左へ移動する動作を繰り返す順序）に、各ノードが番号付けされる。
【０１４７】
このノード番号付けにより得られる状態が図５（ｂ）である。
【０１４８】
次に、ネットワークあるいはサブネットワークによる有向グラフに対して、深さ優先探索（depth first search）のアルゴリズムを適用して各ノードの拾い上げが行われ、図５（ｃ）の結果が得られる。
【０１４９】
なお、深さ優先探索のアルゴリズムとは、まず視点を出発し、番号の若い順に進む位置を調べ、行けるところ（辺で連結されていてまだ訪問していない）まで進む。行き場所がなくなったら、行き場所があるところまで戻り、再び行けることろまで進む。そして、行き場所がすべてなくなったら終わる（来た道を戻る）というアルゴリズムである。
【０１５０】
この深さ優先探索のアルゴリズムにより「６、３、５、８、４、２、１、７」というノードの実行順序が得られる。
【０１５１】
次に、上記のようなネットワーク及びサブネットワークにおける実行順序を考慮して、コントローラ２の理解する命令語を取得するためのコンパイラまとめ処理が実行される（ｓ５）。
【０１５２】
上記の処理により、ネットワーク及びサブネットワーク単位内でのノードの実行順序が取得される。
【０１５３】
ここで、ノードは、実際にはグラフィック表記上「命令シンボル」であり、これがコントローラ１上の「マクロ命令」（命令語シンボルを実行するためのＣＰＵの理解する命令の集合）と考えれば、ノードの実行順序はコントローラ２上の命令語実行順序に等しい。
【０１５４】
したがって、コンパイラまとめ処理では、最後の処理としてサブネットワーク単位間及びネットワーク単位間での実行順序を求める。
【０１５５】
サブネットワーク単位間の実行順序は、ＳＦＣ言語がステートマシンとして動作する基本の順序を守るように決定される。
【０１５６】
すなわち、
順序１：状態遷移の外部条件（Condition）の演算
順序２：状態遷移（State）の演算
順序３：状態遷移（Action）結果による外部動作演算
の順序を守ればよい。
【０１５７】
したがって、サブネットワークはCondition1〜N、State、Action1〜Lの順で実行すればよく、先の図４に示すネットワークNetwork2の場合も同様にサブネットワークCondition1、State、Action1の順で実行すればよい。
【０１５８】
ネットワーク単位間の実行順序は、各ネットワーク単位の接続は独立であるため、例えばIEC61131-3規格の自然な流れにしたがって、左から右、上から下の順序を守るように決定される。
【０１５９】
以上のような順序決定により３種混在したプログラムのコンパイルが実行されるが、実際には編集画面を横書き文章の順（左上から右へ移動し、下段にさがって再び左から右へ移動する動作を繰り返す順序）に、ネットワークが取得され、この取得されたネットワーク内でもっとも若い順序となるノードをそのネットワークの代表と考え、そのノード間で最も若い順にネットワークを実行してゆけばよい。
【０１６０】
図６は、上記のコンパイル理論により得られるコンパイル結果を示す概念図である。
【０１６１】
このコンパイル結果２７には、ネットワークNerwork1〜5、ネットワークNetwork3内に含まれるサブネットワークCondition1,2、Action1,2、ネットワークあるいはサブネットワーク内に含まれるノードNode1〜6が実行順に記述されている。
【０１６２】
続いて、上記のような構成を持つプログラミング装置１において扱われるモニタデータ１３の構造について説明する。このモニタデータ１３の構造により、３種類の言語の混在表記上に入力値及び出力値等を表示させ、制御動作のモニタが実現される。
【０１６３】
ここで、モニタとは、コンパイルした結果がコントローラ２で実行された場合に、このコントローラ２上で実行されている命令シンボル（命令語）の入力値、出力値を実時間でユーザが確認可能とすることをいう。実際には、表示装置４におけるグラフィック表記上の対応位置にこの入力値、出力値を重ね合わせて表示することで、モニタが実現させる。
【０１６４】
図７は、本実施の形態に係るプログラミング装置１によって扱われるモニタデータ１３の構造、コンパイル結果の構造、及びモニタデータ構造テンプレートを示す関係図である。
【０１６５】
上記のコンパイル理論によるコンパイルの結果から知り得るのは、命令語とその命令語の位置（アドレス）であり、コンパイル結果の構造２８として各ノードNode1〜8に対してアドレスAddress1〜8を割り当てた構造が得られる。
【０１６６】
ここで、命令語には、固有値として入力、出力の数とデータ型とがあるため、命令語に対して一意のモニタデータ構造があるといえる。
【０１６７】
したがって、コンパイル時にモニタデータ構造テンプレート２９を作成しておくことで、コントローラ２の演算時に外部出力するモニタデータについて、その構造３０を予め作成しておくことができる。
【０１６８】
なお、ここでは、モニタデータの構造３０は、各モニタデータData1〜8に対してアドレスMaddress1〜8を割り当てた構造としている。
【０１６９】
また、モニタデータ構造テンプレート２９では、各ノードNode1〜8のアドレスAddress1〜8と、各モニタデータのアドレスMaddress1〜8と、各データの型DataType1〜8とが関係付けられている。
【０１７０】
これにより、コンパイル結果の構造２８に対応するモニタデータを取得可能となり、３種の言語を混在表記させたグラフィック上に配置可能となる。
【０１７１】
図８は、３種の制御プログラミング言語でプログラムを混在表記し、このグラフィック表記上にモニタデータを重ねて表示した場合の一例を示す画面図である。
【０１７２】
同様に、図９も、３種の言語でプログラムを混在表記し、このグラフィック表記上にモニタデータを重ねて表示した場合の他の例を示す画面図である。
【０１７３】
以上説明したように、本実施の形態に係るプログラミング装置１においては、複数の制御プログラミング言語を混在させて表示可能とした。
【０１７４】
これにより、各種言語を同一編集平面上に表記できるため、呼び合いを辿る等の必要がなくユーザが全体をまとめて認識することができる。
【０１７５】
また、各種言語を自然に混在させ、補完することができるため、仕様可読性を向上させることができる。
【０１７６】
すなわち、ユーザが制御処理の内容や作成するプログラムの内容を容易に理解することができる。
【０１７７】
ゆえに、プログラムの生産性を向上させることができ、またユーザの作業効率を向上させることができる。
【０１７８】
また、本実施の形態に係るプログラミング装置１においては、各種言語の記述要素をノードとして扱い、各種言語の流れを矢印として扱い、グラフ理論における深さ探索優先アルゴリズムにより処理順序を決定してコンパイルを行う。
【０１７９】
したがって、複数の制御プログラミング言語を自然に混在させて補完しつつ、編集したプログラムをそのままコンパイルし、コントローラ２にダウンロードして制御を実行させることができる。
これにより、各種言語の利点を活かしつつプログラムを作成することができ、仕様記述性を向上させることができる。
【０１８０】
また、本実施の形態に係るプログラミング装置１においては、コンパイル時に、各種言語の記述要素とモニタデータとを関連付けておくことで、各種の言語によるグラフィック表記上にモニタデータを重ねて表記できるため、ユーザが容易に問題点を発見することができる。
ゆえに、ユーザは品質の高い制御用のプログラムを作成することができる。
【０１８１】
（第２の実施の形態）
本実施の形態においては、制御プログラムの共用性を向上させるプログラミング装置について説明する。
【０１８２】
図１０は、本実施の形態に係るプログラミング装置のハードウェア構成を示すブロック図である。
【０１８３】
プログラミング装置３１は、コントローラのシーケンスプログラム実行状態を監視したり、シーケンスプログラムの作成・修正に使用される。また、ＣＲＴ他の表示装置とキーボード他の入力装置をもつ。
【０１８４】
このプログラミング装置３１は、ＣＰＵ３２、ＯＳ・プログラムメモリ３３、ワークメモリ３４、入出力インターフェイス３５、表示インターフェイス３６、通信インターフェイス３７がマイコンパス４１で相互に送受信可能に接続されて構成されている。また、入出力インターフェイス３５に入力装置３８が接続されており、さらに表示インターフェイス３６に表示器３９が接続されている。
【０１８５】
また、このプログラミング装置３１は、通信インターフェイス３７を介してプログラマブルコントローラ４０と通信可能となっている。
【０１８６】
このプログラミング装置３１の備えるＣＰＵ３２は、プログラミング装置３１の中枢部分であり、プログラミング装置３１全体の実行制御を行う。
【０１８７】
ＯＳ・プログラム３３は、ＣＰＵ３２が実行するプログラムが格納されているメモリであり、ＯＳや制御プログラムが格納される。
【０１８８】
ワークメモリ３４は、ＣＰＵ３２が全体制御を実行するときに作業領域として使用する。
【０１８９】
入出力インタフェース３５は、キーボード他の入力機器を接続するためのインタフェース回路である。
【０１９０】
入力装置３８はキーボードやタッチパネルなどで構成され、シーケンスプログラムを入力するのに使用される。
【０１９１】
表示インタフェース３６は、表示器３９を接続するためのインタフェース回路であり、表示データ用メモリなどを含む。
【０１９２】
表示器３９は、シーケンスプログラム（制御プログラムの一種）やデータの表示に使用されるＣＲＴや液晶表示器などの表示器である。
【０１９３】
通信インタフェース３７はプログラミング装置３１とプログラマブルコントローラ４０などを通信媒体を介して接続するためのインタフェース回路である。
【０１９４】
マイコンバス４１はプログラミング装置３１内の要素をＣＰＵ３２と接続するためのバスであり、アドレスバス、データバス、制御バスの総体である。
【０１９５】
図１１は、上記のようなハードウェア構成を持つプログラミング装置３１における処理内容を示すブロック図である。
【０１９６】
ユーザが、このプログラミング装置３１を利用して、例えばＬＤ言語で記述されたシーケンスプログラム４２をソース・プログラムとして作成したとする。なお、このシーケンスプログラム４２は、入力装置３８から入力され、表示器３９に表示されて編集され、図や変数と共にワークメモリ３４内に格納される。
【０１９７】
プログラミング装置３１は、ソース・プログラムを中間言語による記述に変換するための中間コンパイラ４３を搭載しており、この中間コンパイラ４３により、シーケンスプログラム４２が中間言語プログラム４４に書き換えられる。
【０１９８】
なお、中間言語とは、機械語にも変換可能であり、またソース・プログラムを記述した言語にも変換可能な状態でプログラムを記述する言語である。
【０１９９】
具体的には、例えばＩＬ（Instruction List）言語のように命令コードとオペランドの組み合わせで表現され、テキスト形式で格納される言語が中間言語として適用できる。
【０２００】
中間コンパイラ４３によって得られた中間プログラム４４は、ワークメモリ３４に格納される。
【０２０１】
表２は、ＬＤ言語によって記述されたシーケンスプログラムを中間言語によって記述された中間言語プログラムに変換する変換ルールの一部を示すテーブルである。
【０２０２】
【表２】
0003819639.tif 000003
【０２０３】
このような変換ルールに従うことにより、ＬＤ言語のような図式プログラムをテキスト形式の中間プログラムに変換することが可能となる。命令文の区切りはスペース又は改行コードで示される。
【０２０４】
さらに、プログラミング装置３１は、中間言語で記述された中間言語プログラムを機械語のプログラムによる記述に変換するための機械語コンパイラ４５を搭載しており、この機械語コンパイラ４５により、中間言語プログラム４４がコントローラ４０で実行可能な機械語プログラム４６に書き換えられる。
【０２０５】
表３は、中間言語によって記述された中間言語プログラムを機械語によって記述された機械語プログラムに変換する変換ルールの一部を示すテーブルである。
【０２０６】
【表３】
0003819639.tif 000004
【０２０７】
このような変換ルールに従うことにより、中間言語プログラム４４を機械語プログラム４６に変換することが可能となる。
【０２０８】
なお、この機械語コンパイラ４５による変換によって得られる機械語プログラムに含まれる機械語コードは、命令コード部分及びオペランドアドレス部分とからなるが、この命令コード部分及びオペランドアドレス部分は固定長とされる。
【０２０９】
これにより、変換後の機械語プログラムがコントローラ４０で実行される際の演算処理が容易となる。
【０２１０】
さらに、プログラミング装置３１は、中間言語で記述された中間言語プログラムをＬＤ言語で記述されたソース・プログラムによる記述に変換するための逆コンパイラ４７を搭載している。
【０２１１】
この逆コンパイラ４７で利用される変換ルールは、先の表２を逆に適用する手法が採用される。
【０２１２】
この逆コンパイラ４７により、中間言語プログラム４４がシーケンスプログラム４２に書き換えられる。
【０２１３】
以上説明したように、本実施の形態に係るプログラミング装置３１においては、ソースの図式プログラムがテキスト形式の中間言語に変換されて格納される。
【０２１４】
したがって、プログラムの保存や伝送が容易になる。また、この中間言語により記述された中間プログラムを表示させた場合であっても人間が内容を確認しやすい。
【０２１５】
また、生成した機械語プログラム４６を構成する命令語コードとオペランドアドレスとを固定長としたため、機械語プログラムをコントローラ４０で処理しやすくなる。
【０２１６】
なお、本実施の形態においては、ソース・プログラムがＬＤ言語によって記述された場合を例として説明しているが、これに限定されるものではなく、ＦＢＣ言語、ＳＦＣ言語、ＳＴ言語、ニーモニック言語等の各種制御プログラムに対して同様に適用できる。
【０２１７】
また、本実施の形態に係るプログラミング装置３１においては、中間言語から機械語へ変換する機械語コンパイラ４５を搭載しているが、例えば中間言語自体がコントローラ４０で実行可能な言語であればこの機械語コンパイラ４５を省略させることができる。
【０２１８】
（第３の実施の形態）
本実施の形態においては、上記第２の実施の形態に係るプログラミング装置３１の変形例であり、制御プログラムを実行させるコントローラ毎に機械語コンパイラを切り換えるプログラミング装置について説明する。
【０２１９】
図１２は、本実施の形態に係るプログラミング装置における処理内容を示すブロック図である。
【０２２０】
本実施の形態に係るプログラミング装置４８において、中間言語プログラムを得るまでに関係する構成、処理は、上記第２の実施の形態に係るプログラミング装置３１と同様であるため、説明を省略する。
【０２２１】
プログラミング装置４８は、中間言語を機種の異なる複数のコントローラ４０ａ〜４０ｃのそれぞれに対応した機械語に変換する機械語コントローラ４５ａ〜４５ｃを搭載している。
【０２２２】
したがって、各機械語コンパイラ４５ａ〜４５ｃによる変換により、ある中間言語プログラム４４から各コントローラ４０ａ〜４０ｃに対応した複数種類の機械語プログラム４６ａ〜４６ｃが得られる。
【０２２３】
以上説明したように、本実施の形態に係るプログラミング装置４８においては、対象となるコントローラの種類に応じて複数のコンパイラを用意しており、同一の中間言語プログラムから複数の種類の機械語プログラムを作成することが可能である。
【０２２４】
これにより、例えば同一シリーズのコントローラにおいて、メモリ容量が異なる機種用に機械語プログラムを作成するために、アドレス範囲の変更やアドレス割付の変更を容易に実現でき、容易に機械語プログラムを作成することができる。
ゆえに、機種毎に図式プログラムを再入力する労力を削減することができる。
【０２２５】
（第４の実施の形態）
本実施の形態においては、上記第２又は第３の実施の形態に係るプログラミング装置３１、４８の変形例であり、各種ソース・プログラムを中間言語による記述に変換するために複数の中間コンパイラを備えたプログラミング装置について説明する。
【０２２６】
図１３は、本実施の形態に係るプログラミング装置における処理内容を示すブロック図である。この図１３において、図１１と同一の部分については同一の符号を付してその説明を省略し、ここでは異なる部分についてのみ詳しく説明する。
【０２２７】
本実施の形態に係るプログラミング装置４９において、中間言語プログラムを得た後に関係する構成、処理は、上記第２の実施の形態または第３の実施の形態に係るプログラミング装置３１、４８と同様であるため、説明を省略する。
【０２２８】
プログラミング装置４９は、ＬＤ言語で図式に作成されたプログラム４２を中間言語プログラム４４に変換する中間コンパイラ４３に加え、ＳＴ（ストラクチャードテキスト）言語、ニーモニック言語で記述されたシーケンスプログラム４２ａ、４２ｂを、同一の中間言語プログラム４４に変換する中間コンパイラ４３ａ、４３ｂを搭載している。
【０２２９】
ＬＤ言語を中間言語に変換する変換ルールの一部は、先で説明した表２と同様であり、中間コンパイラ４３で採用されている。
【０２３０】
表４は、ＳＴ言語を中間言語に変換する変換ルールの一部を示すテーブルである。この表４の変換ルールは、中間コンパイラ４３ａで採用されている。
【０２３１】
【表４】
0003819639.tif 000005
【０２３２】
表５は、ニーモニック言語を中間言語に変換する変換ルールの一部を示すテーブルである。この表５の変換ルールは、中間コンパイラ４３ｂで採用されている。
【０２３３】
【表５】
0003819639.tif 000006
【０２３４】
以上説明したように、本実施の形態に係るプログラミング装置４９においては、３種別々の言語にて作成されたシーケンスプログラムであっても同一の形式の中間言語プログラムに変換することが可能である。すなわち、複数のシーケンスプログラムに対してもその表現している論理が同一であれば、同一の中間言語プログラムに変換が可能となる。
【０２３５】
ユーザは、種々のシーケンスプログラムを統一した形式の中間言語プログラムとして管理することができる。
【０２３６】
また、複数のプログラミング言語で作成されたシーケンスプログラムに対する中間言語プログラムが同一の形式であることを利用し、中間コンパイラ４３、４３ａ、４３ｂと逆の変換を行う逆コンパイラを加えることで、あるプログラミング言語で作成されたシーケンスプログラムを他のプログラミング言語にて自由に表示したり、編集したりすることも可能になる。
【０２３７】
さらに、ソース・プログラムの記述されている言語がどの言語であっても、中間言語に変換されていれば同様に機械語コンパイラにより機械語の記述に変換することができる。ゆえに、複数の種類のシーケンスプログラムから作成された中間言語プログラムであっても同様に機械語プログラムに変換することが可能である。
【０２３８】
なお、本実施の形態においては、ＬＤ言語、ＳＴ言語、ニーモニック言語を中間言語に変換、あるいは、逆変換可能としているが、これに限定されるものではなく、他の各種の制御プログラミング言語を同様に利用することができる。
【０２３９】
（第５の実施の形態）
本実施の形態においては、上記第２から第４の実施の形態に係るプログラミング装置で利用されているテキスト形式の中間言語ではなく、固定長の機械語の命令コードと固定長のアドレスとからなる形式の中間言語を利用するプログラミング装置について説明する。
【０２４０】
図１４は、本実施の形態に係るプログラミング装置で採用される中間言語の記述形式を示す概念図である。
【０２４１】
ここでは、先の第２から第４の実施の形態における中間言語で採用されたテキスト形式に代えて、命令語と変数の表現とを、コントローラの命令語コード５０ａと変数アドレスコード５０ｂからなるバイナリ形式５０で表す。
【０２４２】
また、中間言語で採用される命令語コード５０ａと変数アドレスコード５０ｂとを固定長とする。
【０２４３】
ただし、この場合は変数名がコントローラ内のメモリの物理アドレスまたは論理アドレスに変換されてしまう。
【０２４４】
したがって、本実施の形態に係るプログラミング装置は、ソース・プログラムへの逆変換を可能とするために、命令語と命令コードの対応テーブルを中間言語プログラムと同時に保存する。
【０２４５】
表６は、ソース・プログラムへの逆変換を可能とするための命令語と命令コードの対応テーブルである。
【０２４６】
【表６】
0003819639.tif 000007
【０２４７】
また、本実施の形態に係るプログラミング装置は、同様の理由により、変数名とアドレスコードの対応テーブルを中間言語プログラムと同時に保存する。
【０２４８】
表７は、ソース・プログラムへの逆変換を可能とするための変数名とアドレスコードの対応テーブルである。
【０２４９】
【表７】
0003819639.tif 000008
【０２５０】
以上説明したように、本実施の形態に係るプログラミング装置においては、中間言語によって記述される中間プログラムがコントローラの命令語コードと変数アドレスとにより記述される。
【０２５１】
したがって、中間言語自体がコントローラで実行可能な言語であるので機械語コンパイラを省略させることができ、中間プログラムをそのままコントローラで実行させることができる。
【０２５２】
また、中間プログラムをそのまま実行可能とすることにより、機械語プログラムが必要ないため、メモリを節約することができる。
【０２５３】
（第６の実施の形態）
本実施の形態においては、プログラミング装置との間でメモリ容量やＣＰＵ能力等に基づく負荷レベルが比較され、プログラミング装置よりも自己の方が負荷レベルが低い場合に、中間コンパイラ、機械語コンパイラ、逆コンパイラを動作させるプログラマブルコントローラについて説明する。
【０２５４】
図１５は、本実施の形態に係るプログラマブルコントローラのハードウェア構成を示すブロック図である。
【０２５５】
このプログラマブルコントローラ５１は、ＣＰＵ５２、プログラムメモリ５３、ワークメモリ５４、シーケンス演算装置５５、シーケンスプログラムメモリ、データメモリ、通信インターフェイス、Ｉ／Ｏ装置がマイコンバス６５で相互に送受信可能に接続されて構成されている。
【０２５６】
このプログラマブルコントローラ５１は、通信インターフェイス５８を介して分散部６１を搭載したプログラミング装置６０と通信可能となっている。
【０２５７】
このプログラマブルコントローラ５１の備えるＣＰＵ５２は、このプログラマブルコントローラ５１の中枢部分であり、コントローラ全体の実行制御を行う。
【０２５８】
プログラムメモリ５３は、ＣＰＵ５２が実行するプログラムが格納されているメモリであり、ＯＳや制御プログラムが格納される。
【０２５９】
ワークメモリ５４は、ＣＰＵ５２が全体制御を実行するときに作業領域として使用する。
【０２６０】
シーケンス演算装置（シーケンス演算プロセッサ）５５は、シーケンスプログラムを実行するプロセッサである。
【０２６１】
シーケンスプログラムメモリ５６は、ユーザが作成したシーケンスプログラムを格納するメモリである。
【０２６２】
データメモリ５７はユーザが使用する変数などのデータを格納するメモリである。
【０２６３】
通信インタフェース５８はこのプログラマブルコントローラ５１とプログラミング装置６０などを通信媒体を介して接続するためのインタフェース回路である。
【０２６４】
Ｉ／Ｏ装置５９は、このプログラマブルコントローラ５１と外部の制御対象を接続するための入出力装置である。
【０２６５】
マイコンバス６５は、プログラマブルコントローラ５１内の要素をＣＰＵ５２やシーケンス演算装置５５と接続するためのバスであり、アドレスバス、データバス、制御バスの総体である。
【０２６６】
さらに、プログラマブルコントローラ５１は、先の第２から第５の実施の形態において説明した各種のコンパイラ（例えば中間コンパイラ４３、４３ａ、４３ｂ、機械語コンパイラ４５、逆コンパイラ４７）を搭載している。
【０２６７】
すなわち、このプログラマブルコントローラ５１のプログラムメモリ５３には、上記と同様の変換を行う中間コンパイラ、機械語コンパイラ、逆コンパイラが所持されている。
【０２６８】
一方、このプログラマブルコントローラ５１と通信可能なプログラミング装置６０は、上記第２から第５の実施の形態に係るプログラミング装置３１、４８、４９と同様の構成を持ち、同様に動作可能であるが、さらに分散部６１を備えている。
【０２６９】
分散部６１は、プログラマブルコントローラ５１とプログラミング装置６０との間におけるＣＰＵ処理能力やメモリ容量を調査する。そして、この調査結果に基づいて、各種プログラムの保存やコンパイル処理の実行をプログラマブルコントローラ５１とプログラミング装置６０のいずれで行うかを決定し、指示する。
【０２７０】
上記のような構成を持つ本実施の形態に係るプログラマブルコントローラ５１を利用することで、ソース・プログラムから中間言語プログラムへの変換処理、中間言語プログラムから機械語プログラムへの変換処理、中間言語プログラムからソース・プログラムへの逆変換処理が、プログラマブルコントローラ５１とプログラミング装置６０のいずれでも実行可能となる。
【０２７１】
したがって、プログラミング装置６０の分散部６１が、プログラマブルコントローラ５１とプログラミング装置６０との処理能力やメモリ容量にしたがって、ソース・プログラムや中間言語プログラムへの処理、及び配置を自由に選択する。
【０２７２】
図１６は、本実施の形態におけるプログラムの配置関係の第１の例を示すブロック図である。
【０２７３】
プログラミング装置６０の能力に余裕がある場合には、ソース・プログラム６１１、中間言語プログラム６２をプログラミング装置６０に配置して変換を行い、メモリ容量の少ないプログラマブルコントローラ５１には機械語プログラム６３を格納する。
【０２７４】
図１７は、本実施の形態におけるプログラムの配置関係の第２の例を示すブロック図である。
【０２７５】
プログラミング装置６０に比べてプログラマブルコントローラ５１にメモリ容量の余裕がある場合には、プログラミング装置６０にソース・プログラム６１１を格納し、中間言語プログラム６２及び機プログラム６３をプログラマブルコントローラ５１に格納する。
【０２７６】
図１８は、本実施の形態におけるプログラムの配置関係の第３の例を示すブロック図である。
【０２７７】
プログラミング装置６０の処理能力に余裕がなく、プログラマブルコントローラ５１のメモリ容量に余裕がある場合には、プログラミング装置６０にソース・プログラム６１１を格納し、プログラマブルコントローラ５１にソース・プログラム６１１を転送し、この転送後、プログラマブルコントローラ５１で中間言語プログラム６２及び機械語プログラム６３に変換し、保存する。
【０２７８】
以上説明したように、本実施の形態に係るプログラマブルコントローラ５１を適用することにより、プログラマブルコントローラ５１やプログラミング装置６０のメモリ容量やＣＰＵ能力にあわせて、シーケンスプログラムや、中間言語プログラム、機械語プログラムの格納場所や変換場所が選択される。
【０２７９】
ゆえに、プログラマブルコントローラ５１やプログラミング装置６０のどちらかの能力が低い場合でも、中間言語を利用することができる。
【０２８０】
なお、本実施の形態においては、プログラミング装置６０側に分散部６１を備えたが、これに限定されるものではなく、プログラマブルコントローラ５１側にこの分散部６１を備えてもよい。
【０２８１】
また、本実施の形態においても、上記各種のコンパイラを利用することで同様の効果を得ることができる。
【０２８２】
（第７の実施の形態）
本実施の形態においては、第６の実施の形態に係るプログラミング装置６０の変形例について説明する。
【０２８３】
先の第６の実施の形態においては、プログラマブルコントローラ５１とプログラミング装置６０のいずれでもプログラムを変換、配置することができるとしている。しかしながら、ソース・プログラムを除く他のプログラム（中間プログラム及び機械語プログラム）をプログラマブルコントローラ５１に固定的に配置するとし、変換処理もこのプログラマブルコントローラ５１で実行すると定めてもよい。
【０２８４】
すなわち、プログラマブルコントローラ５１は、プログラミング装置６０からソース・プログラム６１１のみを受信して格納し、このプログラマブルコントローラ５１で中間言語、機械語への変換がなされる。
【０２８５】
これにより、表示器と入力装置と簡単な処理装置と通信インターフェイスだけを持つプログラミング装置６０を利用しても中間言語を利用したプログラミングが可能となる。
【０２８６】
なお、本実施の形態においても、上記各種のコンパイラを利用することで、上記と同様の効果を得ることができる。
【０２８７】
（第８の実施の形態）
本実施の形態においては、上記第２から第７の実施の形態の変形例であり、ソース・プログラムには含まれているが中間言語に変換した際に不要となる記述の取扱いについて説明する。
【０２８８】
シーケンスプログラムには、命令語の他に変数宣言、ラベル、コメントなどのような、コンパイル後には不要となる部分も含まれている場合がある。
【０２８９】
本実施の形態においては、中間コンパイラがコンパイル後に不要になる部分を特別の中間言語コードに変換し、中間言語プログラムに付加させる。
【０２９０】
表８は、コンパイル後に不要な部分を中間言語表記のコードに変換する変換ルールの一部を示すテーブルである。
【０２９１】
【表８】
0003819639.tif 000009
【０２９２】
図１９は、本実施の形態における中間プログラムの記述形式を示す図であり、変換後の中間言語コード６４ａが中間プログラム６４に付加されている状態を示している。
【０２９３】
以上説明したように、本実施の形態においては、コンパイル後に不要となる記述をソース・プログラムが含んでいる場合には、この不要となる記述をコード化して中間言語プログラムに含めておく。
【０２９４】
したがって、上記の変換処理を行う中間コンパイラを先で述べたプログラミング装置やプログラマブルコントローラに搭載することで、変数名やコメント文も含む元のシーケンスプログラムへ容易に逆変換可能となる。
【０２９５】
また、プログラミング言語の種類に関係しない中間言語形式にもなっているので、ユーザが選択したプログラミング言語に逆変換して表示や編集をすることが可能となる。
【０２９６】
さらに、中間言語プログラムから機械語プログラムへのコンパイル時にこの不要部分のコードのみを容易に分離できるため、機械語への変換を行うコンパイル作業が簡単化できる。
【０２９７】
（第９の実施の形態）
本実施の形態においては、上記第８の実施の形態の変形例であり、中間言語プログラムが機械語コードで記述される場合について説明する。
【０２９８】
先の第５の実施の形態と同様に、本実施の形態においては中間言語プログラムをプログラマブルコントローラの機械語コードを使用して、かつ固定長のコードで表現できるように構成する。
【０２９９】
ここで、第８の実施の形態と同様に、コメント文等のプログラムの実行に直接関与しない部分（コンパイル後に不要となる部分）の中間言語プログラムにはプログラマブルコントローラが演算処理において非実行命令であると解釈可能な命令コードを付与する。
【０３００】
なお、ここではバイナリコードによってコンパイル後に不要となる部分のコードを記述する。
【０３０１】
表９は、コンパイル後に不要な部分をバイナリ形式の中間言語表記のコードに変換する変換ルールの一部を示すテーブルである。
【０３０２】
【表９】
0003819639.tif 000010
【０３０３】
以上説明したように、本実施の形態における変換処理を先で述べたプログラミング装置やプログラマブルコントローラに搭載されている中間コンパイラに適用すると、プログラマブルコントローラが機械語コードを使用して固定長化された中間言語プログラムを直接実行することが可能となる。
【０３０４】
また、この中間言語は変数名やコメント文も含んでいるので容易に元のシーケンスプログラムへ逆変換可能であるし、プログラミング言語の種類に関係しない中間言語形式にもなっているので、ユーザが選択したプログラミング言語に逆変換して表示や編集をすることが可能である。
【０３０５】
このように構成することにより、プログラマブルコントローラ内に１種類の中間言語プログラムをもたせるだけで、直接実行も可能であり、元のシーケンスプログラムへの逆変換も可能にできる。
【０３０６】
（第１０の実施の形態）
本実施の形態においては、上記各実施の形態の変形例について説明する。
【０３０７】
第１の実施の形態で説明したプログラミング装置においては、３種混在したプログラムをコンパイル後、複数のコントローラに自動分散させて処理を実行させるとしてもよい。例えば、混在表記されたプログラムのうち所定の言語で記述された部分は所定のコントローラで実現させ、他の言語で記述された部分は他のコントローラで実現させる等の手法で自動的に処理を分散、実行させることができる。また、これにより、各処理に対する適切なコントローラを自動的に選択し、処理を実行させることができる。
【０３０８】
また、上記各実施の形態で説明したプログラミング装置やプログラマブルコントローラは、クライアント・サーバ型でも、スタンドアローン型でも利用可能とすることができる。サーバが存在する場合には、自装置に備えられていないサーバの機能を流用することができ、例えば自装置が持っていないファンクションやファンクションブロック、プログラムをサーバから読み出して利用することができる。
【０３０９】
また、上記各プログラミング装置において、トップダウン方式のプログラミングを可能としてもよい。このように、トップダウン方式によりプログラミングを行うことで、システム構成設計のブロックから順次、関連する下位のブロックを開いていき、機能、設計レベル、Ｉ／Ｏ設計レベル、モジュール設計レベル、取扱い説明書の参照などが可能となる。
【０３１０】
また、トップダウン方式のプログラミングを可能とすることで、プログラミング装置上で作成した設計仕様書などのドキュメントと、このドキュメントに関連するプログラムを有機的にリンクさせ、ドキュメントとプログラムの相関関係を規定することができる。機能ブロック図などでは、そのブロックからプログラム編集、モニタを実行することができ、ライブラリを活用することにより、システムエンジニアリングからプログラミング、メンテナンスまでをシームレスに実行することができる。
【０３１１】
また、上記各プログラミング装置において、ボトムダウン方式のプログラミングを可能としてもよい。このように、ボトムダウン方式によりプログラミングを行うことで、Ｉ／Ｏ設計、モジュール設計を並行に進行させた後に機能モジュールとして統合し、システムとしてもプログラムを作成することができる。
【０３１２】
また、上記各プログラミング装置を、従来のプログラマブルコントローラで使用されていたレジスタと同一名称の変数を自動的に定義し、あたかもレジスタを使用してプログラムを作成しているように利用できるとしてもよい。
【０３１３】
また、上記各プログラミング装置において、作成するプログラム間の参照関係図を表示するとしてもよい。これにより、一方のプログラムを変更した場合に、他方のプログラムの変更が必要か否かど、プログラム変更時の影響をユーザが容易に認識することができる。
【０３１４】
また、上記各実施の形態で説明したプログラミング装置やプログラマブルコントローラは、例えばＬＤ言語によって記述された接点やコイル命令をフォースする際に、プログラム全体をコンパイルし直すことなくプログラム中の対象になる命令のコードだけを変更することにより、フォース機能を実現することができる。
【０３１５】
なお、上記各実施の形態に係るプログラミング装置及びプログラマブルコントローラの各機能、各要素（例えば異なる言語の混在表示機能、混在プログラムをコンパイルするコンパイラ、中間コンパイラ、機械語コンパイラ、逆コンパイラ等）は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク（フロッピーディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリなどの記録媒体に書き込んで適用したり、通信媒体により伝送して計算機あるいは計算機システム、プログラマブルコントローラに適用することも可能である。上記各機能を実現するコンピュータは、記録媒体に記録されたプログラムを読み込み、プログラムによって動作が制御されることにより、上述した処理を実行する。
【０３１６】
【発明の効果】
以上詳記したように本発明においては、複数種類の制御プログラミング言語を混在表記できるため、ユーザが制御プログラムの内容を容易に理解することができる。
【０３１７】
また、本発明においては、混在表記させていたプログラムをそのままコンパイルすることができるため、各種言語の利点を活用したプログラムを作成し、実行させることができる。
【０３１８】
また、本発明においては、モニタデータを混在表記させたプログラム上に表示させるため、ユーザが容易に問題点を発見することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るプログラミング装置の構成を示すブロック図。
【図２】同実施の形態に係るプログラミング装置で採用されたコンパイル理論を説明するためのフロー図。
【図３】同実施の形態に係るプログラミング装置によって混在表記されているプログラムの例を示す画面図。
【図４】ノードと矢印でプログラムを表した場合を示す状態図。
【図５】同実施の形態で採用されたノードの順序決定手法を示す概念図。
【図６】同実施の形態で採用されたコンパイル理論により得られるコンパイル結果を示す概念図。
【図７】同実施の形態に係るプログラミング装置によって扱われるモニタデータの構造と、コンパイル結果の構造、及びモニタデータ構造テンプレートを示す関係図。
【図８】３種の制御プログラミング言語でプログラムを混在表記し、モニタデータを重ねて表示した場合の一例を示す画面図。
【図９】３種の制御プログラミング言語でプログラムを混在表記し、モニタデータを重ねて表示した場合の他の例を示す画面図。
【図１０】本発明の第２の実施の形態に係るプログラミング装置のハードウェア構成を示すブロック図。
【図１１】同実施の形態に係るプログラミング装置における処理内容を示すブロック図。
【図１２】本発明の第３の実施の形態に係るプログラミング装置における処理内容を示すブロック図
【図１３】本発明の第４の実施の形態に係るプログラミング装置における処理内容を示すブロック図
【図１４】本発明の第５の実施の形態に係るプログラミング装置で採用される中間言語の記述形式を示す概念図。
【図１５】本発明の第６の実施の形態に係るプログラマブルコントローラのハードウェア構成を示すブロック図。
【図１６】同実施の形態におけるプログラムの配置関係の第１の例を示すブロック図。
【図１７】同実施の形態におけるプログラムの配置関係の第２の例を示すブロック図。
【図１８】同実施の形態におけるプログラムの配置関係の第３の例を示すブロック図。
【図１９】本発明の第８の実施の形態における中間プログラムの記述形式を示す図。
【図２０】従来のプログラミング装置において異種の制御プログラミング言語を利用して作成したプログラムを表示した例を示す画面図。
【図２１】シーケンスプログラムを作成したプログラミング装置とモニタを行うプログラミング装置が異なる場合の例を示すブロック図。
【符号の説明】
１、３１、４８、４９、６０…プログラミング装置
２、４０、４０ａ〜４０ｃ、５１…プログラマブルコントローラ
６…プログラム編集
７…プログラム表示
８…プログラムコンパイル
１０…モニタデータ
１１…モニタ重ね表示
１２…プログラムファイル
１３…モニタデータ
１７…プログラム実行
１８…モニタデータ出力
１９…モニタデータ返信
３２、５２…ＣＰＵ
３３…ＯＳ・プログラムメモリ
３４、５４…ワークメモリ
４２、４２ａ、４２ｂ…シーケンスプログラム
４３、４３ａ、４３ｂ…中間コンパイラ
４４、６２…中間言語プログラム
４５、４５ａ〜４５ｃ…機械語コンパイラ
４６、４６ａ〜４６ｃ、６３…機械語プログラム
４７…逆コンパイラ
５０…バイナリ形式中間言語
５３…プログラムメモリ
５５…シーケンス演算装置
５６…シーケンスプログラムメモリ
５７…データメモリ
６１…処理分散部
６１１…ソース・プログラム
【図１】
0003819639.tif 000011
【図２】
0003819639.tif 000012
【図３】
0003819639.tif 000013
【図４】
0003819639.tif 000014
【図５】
0003819639.tif 000015
【図６】
0003819639.tif 000016
【図７】
0003819639.tif 000017
【図８】
0003819639.tif 000018
【図９】
0003819639.tif 000019
【図１０】
0003819639.tif 000020
【図１１】
0003819639.tif 000021
【図１２】
0003819639.tif 000022
【図１３】
0003819639.tif 000023
【図１４】
0003819639.tif 000024
【図１５】
0003819639.tif 000025
【図１６】
0003819639.tif 000026
【図１７】
0003819639.tif 000027
【図１８】
0003819639.tif 000028
【図１９】
0003819639.tif 000029
【図２０】
0003819639.tif 000030
【図２１】
0003819639.tif 000031