"プログラミング装置とプログラマブルコントローラとを有するPLCシステムであって、前記プログラミング装置は、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素の展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段と、を有することを特徴とするPLCシステム。前記第一の機械語オブジェクトと前記第二の機械語オブジェクトの何れか一方は、通常のコンパイル処理によって生成される、デバッグ可能な機械語オブジェクトである非最適化機械語オブジェクトであり、他方は最適化コンパイル処理によって生成される、最適化された機械語オブジェクトである最適化機械語オブジェクトであることを特徴とする請求項1記載のPLCシステム。前記プログラマブルコントローラは、通常時は前記最適化機械語オブジェクトを実行し、デバッグ時には前記非最適化機械語オブジェクトに切り替えて実行するプログラム実行手段を有することを特徴とする請求項2記載のPLCシステム。前記第一のコンパイラ手段は、前記第一の機械語オブジェクト生成の際に、前記ソースコードから一旦中間言語を生成した後に該中間言語から前記第一の機械語オブジェクトを生成するものであって、該中間言語生成の際に前記各図形要素を展開順序の決定と前記記憶手段への記憶を行い、前記第二のコンパイラ手段は、前記第二の機械語オブジェクト生成の際に、前記ソースコードから一旦中間言語を生成した後に該中間言語から前記第二の機械語オブジェクトを生成するものであって、該中間言語生成の際に前記記憶手段に記憶された前記各図形要素の展開順序を参照して該中間言語の生成を行うことを特徴とする請求項1~3の何れかに記載のPLCシステム。前記第一のコンパイラ手段は、更に、前記コンパイルの際にソースコードの各変数に割当てたメモリアドレスの情報を前記記憶手段に記憶し、前記第二のコンパイラ手段は、前記コンパイルの際に更に、該記憶されたメモリアドレス情報を参照することで、前記各変数に前記第一のコンパイラ手段と同じメモリアドレスを割当てることを特徴とする請求項1~4の何れかに記載のPLCシステム。前記プログラマブルコントローラは、前記最適化機械語オブジェクトを保持する第一の記憶領域と、前記非最適化機械語オブジェクトを保持する第二の記憶領域と、前記最適化機械語オブジェクトの格納アドレスまたは前記非最適化機械語オブジェクトの格納アドレスを登録するアドレステーブルと、該アドレステーブルに登録されている格納アドレスに応じて、前記最適化機械語オブジェクトと前記非最適化機械語オブジェクトの何れか一方を実行する前記プログラム実行手段と、前記アドレステーブルに前記最適化機械語オブジェクトの格納アドレスを登録することで、前記プログラム実行手段に前記最適化機械語オブジェクトを実行させる最適化機械語オブジェクト実行手段と、前記プログラミング装置からのデバッグ指示に応じて前記アドレステーブルに前記非最適化機械語オブジェクトの格納アドレスを登録することで、前記プログラム実行手段に前記非最適化機械語オブジェクトを実行させるデバッグ制御手段と、を更に有することを特徴とする請求項2~5の何れかに記載のPLCシステム。前記プログラマブルコントローラは、前記プログラミング装置から前記最適化機械語オブジェクト、前記非最適化機械語オブジェクトがダウンロードされると、受信した最適化機械語オブジェクトは前記第一の記憶領域内に格納すると共に該格納アドレスを前記アドレステーブルに登録し、受信した非最適化機械語オブジェクトは前記第二の記憶領域内に格納するオブジェクト転送手段を更に有することを特徴とする請求項6記載のPLCシステム。前記プログラミング装置は、前記デバッグ指示を前記プログラマブルコントローラへ送信すると共に、これに伴って、任意に設定された前記非最適化機械語オブジェクトの実行の停止位置を示すブレーク位置情報も前記プログラマブルコントローラへ送信するデバッグ指示手段を更に有し、前記プログラマブルコントローラにおいて、前記デバッグ制御手段は、前記デバッグ指示と共に前記ブレーク位置情報を受信すると、前記非最適化機械語オブジェクトにおいて、該ブレーク位置情報に応じた所定位置に、機械語オブジェクトの実行を停止するためのブレーク命令を挿入し、前記プログラム実行手段は、前記非最適化機械語オブジェクトの実行中には、前記ブレーク命令の実行に伴い、該非最適化機械語オブジェクトの実行を停止すると共に該停止状態を前記プログラミング装置へ送信することを特徴とする請求項6または7記載のPLCシステム。前記最適化機械語オブジェクトは、POU単位で前記第一の記憶領域に保持され、前記非最適化機械語オブジェクトも、POU単位で前記第二の記憶領域に保持され、前記プログラム実行手段は、前記デバッグ時に、任意のPOUに関してのみ前記非最適化機械語オブジェクトに切り替えて実行することを特徴とする請求項6~8の何れかに記載のPLCシステム。プログラミング装置とプログラマブルコントローラとを有するPLCシステムにおける前記プログラミング装置であって、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素を展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段と、を有することを特徴とするPLCシステムのプログラミング装置。プログラミング装置とプログラマブルコントローラとを有するPLCシステムにおける前記プログラミング装置のコンピュータを、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素を展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段、として機能させるためのプログラム。プログラミング装置とプログラマブルコントローラとを有するPLCシステムの前記プログラミング装置におけるデバッグ方法であって、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素を展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶し、前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成することを特徴とするデバッグ方法。しかしながら、上記特許文献1に記載の従来例にあっては、デバッグの都度、最適化機械語オブジェクトを逆コンパイルしてデバッグ用のソースコードを生成する必要があり、このため作業が煩雑になり、デバッグの効率がよくないという問題がある。また、上記ニーモニック言語の場合は問題ないが、上記ラダー言語、FBD言語等の図形言語プログラムの場合、コンパイルの際に各図形要素をどの順番でコンパイルするのかをコンパイラが決定するが、必ずしもユーザが意図した通りの順番で図形要素が展開されてコンパイルされるとは限らない。本発明の課題は、任意のソースコードに対して2つのコンパイラによって通常の機械語オブジェクトと最適化機械語オブジェクトの両方を生成すると共に、その際にこれら2つのコンパイラで図形要素の展開順番を一致させることで、デバッグ時に逆コンパイル等を行う必要なく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行えるようにするプログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ等を提供することである。本発明のPLCシステムは、プログラミング装置とプログラマブルコントローラとを有するPLCシステムであって、前記プログラミング装置は、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素の展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段とを有する。上記構成のPLCシステムにおいて、例えば、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトの何れか一方は、通常のコンパイル処理によって生成される、デバッグ可能な機械語オブジェクトである非最適化機械語オブジェクトであり、他方は最適化コンパイル処理によって生成される、最適化された機械語オブジェクトである最適化機械語オブジェクトである。任意の図形言語プログラムのソースコードに対して、2種類のコンパイラ手段によって2種類の機械語オブジェクトを生成すると共に、その際の各図形要素の展開順序が同じくなるようにする。生成した2種類の機械語オブジェクトは、プログラマブルコントローラにダウンロードする。プログラマブルコントローラ側では、例えば通常時は上記最適化機械語オブジェクトを実行し、デバッグ時には上記非最適化機械語オブジェクトに切り替えて実行する。上記のように、コンパイルの際に各図形要素の展開順序が同じくなるようにしているので、2種類の機械語オブジェクトで相互に演算結果が異なるような事態にはならず、非最適化機械語オブジェクトに切り替えても問題なく動作する。本発明のプログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ等によれば、任意のソースコードに対して2つのコンパイラによって通常の機械語オブジェクトと最適化機械語オブジェクトの両方を生成すると共に、その際にこれら2つのコンパイラで図形要素の展開順番を一致させることで、デバッグ時に逆コンパイル等を行う必要なく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行えるようになる。以下、図面を参照して、本発明の実施の形態について説明する。図1、図2は、本例のプログラマブルコントローラシステムの構成例である。特に図1はプログラミング装置の詳細構成例を示し、図2はプログラマブルコントローラの詳細構成例を示すものである。図1、図2に示すように、本例のプログラマブルコントローラシステムは、任意の制御機器300を制御するものであって、プログラミング装置100、プログラマブルコントローラ以下、PLCプログラマブルロジックコントローラという200等を有する。プログラミング装置100とPLC200とは信号線400により接続されている。PLC200は、制御対象となる各種機器である制御機器300に接続されている。PLC200は、シーケンス制御プログラム等を実行して制御機器300を制御する。プログラミング装置100は、概略的には、ユーザが任意のシーケンス制御プログラムそのソースコードを作成するのを支援する機能や、作成されたソースコードをコンパイルして機械語オブジェクトを生成する機能や、生成した機械語オブジェクトを信号線400を介してPLC200にダウンロードする機能等を有する。上記ユーザが作成するシーケンス制御プログラムソースコードは、通常、例えばニーモニック言語、あるいはラダー言語、FBD言語等の図形言語プログラムを用いて作成される。プログラミング装置100の機能については、詳しくは後述するものとする。プログラミング装置100のハードウェア構成例は、例えば図1に示すように、中央演算処理装置CPU101、内部メモリ104、記憶装置105、マウスやキーボード等である入力装置102、ディスプレイ等である表示器103、入出力インタフェースI/O106などから構成され、これらが共通バス107に接続されている。記憶装置105には、各種のデータが記憶されている。入力装置102は、オペレータによって外部から操作されるマウスやキーボード等からの入力イベントを、CPU101に通知する。また、記憶装置105には、予め、所定のアプリケーションプログラムが記憶されている。記憶装置105は、例えばハードディスク装置等である。表示器103は、例えば液晶ディスプレイ等からなり、例えば入力イベント等に応じて、各種データや画像を表示する。I/O106は、信号線400と接続している。CPU101は、I/O106、信号線400を介して、PLC200との通信データの送受信を行う。CPU101は、記憶装置105に記憶されている上記アプリケーションプログラムを、例えば内部メモリ104に読出し実行することにより、各種処理機能例えば後述する図3のユーザインタフェース部11やコンパイラ12の処理機能;あるいは例えば後述する図12のインタフェース機能部61やコンパイラ62の処理機能等を実現する。これらについては、後に、図3や図12を参照して詳細に説明するが、ユーザインタフェース部11やインタフェース機能部61は、基本的には既存の処理機能であってよく、ユーザが任意のシーケンス制御プログラムソースプログラムを作成するのを支援する処理機能である。このソースプログラムは、本例では上記の通り、例えばニーモニック言語、あるいはラダー言語、FBD言語等の図形言語を用いて作成されるものである。また、CPU101は、上記ユーザによってプログラミングされたシーケンス制御プログラムソースプログラムをコンパイルして、PLC200側後述する図2のCPU211が直接実行可能な実行コード機械語オブジェクトに変換する処理機能も有する。この処理機能自体は、既存の処理であってよいが、コンパイラ12やコンパイラ62では、更に、後述する処理機能も有する。詳しくは後述する。また、CPU101は、PLC200に対する動作指示コマンド/データ等;パラメータ等も含む場合もあるを、I/O106を介してPLC200に送信したり、PLC200で実行させる上記シーケンス制御プログラム機械語オブジェクトを、I/O106を介してPLC200にダウンロードする処理機能等も有する。尚、各種処理は、例えば記憶装置105から各種データを読み出しながら、あるいは記憶装置105に各種のデータを書き込みながら、実行されるものである場合もある。上記シーケンス制御プログラムの実行コード機械語オブジェクトが、I/O106を介してPLC200にダウンロードされることにより、PLC200側の図2に示すCPUモジュール210は、ユーザプログラムメモリ213などに保持されていたシーケンス制御プログラムの実行コード旧バージョン等を、ダウンロードされた実行コード新バージョン等に更新することができる。PLC200のハードウェア構成例は、例えば図2に示すように、CPUモジュール210、入出力モジュール222等を有するものである。このCPUモジュール210は、図2に示す例では、CPU211、システムプログラムメモリFLASH212、ユーザプログラムメモリRAM213、PLC固有バスインタフェース214、ユーザデータメモリRAM215、システムワークメモリRAM216、ドライバ/レシーバ217等を有し、これらがバス218に接続されている。また、CPUモジュール210は、PLC固有バスインタフェース214を介して、入出力モジュール222と接続される。入出力モジュール222は、制御機器300に接続されている。CPU211は、PLC固有バスインタフェース214、入出力モジュール222等を介して、制御機器300との通信データ入出力を行える。また、CPU211は、ドライバ/レシーバ217等を介して、プログラミング装置100との通信を行える。また、PLC200は、パワーオンまたはリセットスタート後、システムの初期化を経て、ユーザプログラムメモリ213に保持された上記シーケンス制御プログラム実行コード;機械語オブジェクトを、サイクリックに実行して、所定の制御周期で制御機器300の制御を行うように構成されている。図2に示す構成自体は、既存のPLCの一般的な構成であるので、これ以上詳細には説明しないが、例えばユーザプログラムメモリ213には、予め所定のアプリケーションプログラムが記憶されており、CPU211がこのアプリケーションプログラムを読出し実行することにより、例えば図3に示す各種機能部オブジェクト展開部25、デバッグ制御部26、プログラム実行部27などの処理が実現される。また、図3のアドレステーブル24は、例えばユーザデータメモリ215に記憶されるものであるが、この例に限らない。図3は、上記プログラマブルコントローラシステムの機能構成図である。プログラミング装置100プログラミングローダは、上記の通り、ユーザによって任意のプログラムソースコード上記シーケンス制御プログラムのソースプログラム等を作成させる支援機能図示のユーザインタフェース部11や、このソースコードを機械語オブジェクトに変換するコンパイル機能図示のコンパイラ12を備える。プログラミング装置100によってコンパイルされて生成される上記機械語オブジェクト実行コードは、PLC200などのターゲットにダウンロードされる不図示のダウンロード機能によるものとする。ユーザは、ユーザインタフェース部11によって、ニーモニック言語、あるいはラダー言語、FBD言語等の図形言語で、任意のシーケンス制御プログラムソースコードを記述作成する。ユーザインタフェース部11は、作成されたソースコードをコンパイラ12に渡す。コンパイラ12は、渡されたソースコードをコンパイルして2種類の機械語オブジェクトを生成して記憶する。すなわち、コンパイラ12は、渡されたソースコードをコンパイルして、最適化機械語オブジェクト13を生成出力すると共に、非最適化機械語オブジェクト15も生成出力し、これらを不図示の記憶領域に格納する。その後、これら最適化機械語オブジェクト13および非最適化機械語オブジェクト15は、それぞれ通信部14を介してPLC200へダウンロードされる。最適化機械語オブジェクト13は、上記背景技術で説明した通りであり、最適化の際にプログラムの実行順序の変更や不要な変数の削除等が行われて成るものである。一方、非最適化機械語オブジェクト15は、最適化が行われない、通常のコンパイルによって生成される機械語オブジェクトであり、従って上記実機デバッグによるソースコードレベルデバッグが可能となるものである。PLC200にダウンロードされるデータパケット機械語オブジェクト含むは、図8に示すように、識別番号41、種別42、機械語オブジェクト機械語オブジェクト本体43で構成される。識別番号41は、例えばコンパイラ12が、上記生成した機械語オブジェクト最適化機械語オブジェクト13および非最適化機械語オブジェクト15に付与する任意の番号例えばシリアル番号等であってよいであり、ソースコードに対して一意に識別するための識別子である。これは、例えば、同一のソースコードから生成された最適化機械語オブジェクト13と非最適化機械語オブジェクト15は、その識別番号が同一となるようにする。あるいは、識別番号は、各ソースコード特にPOU毎に固有のユニークなIDであり、これより、任意のソースコードから生成される機械語オブジェクトにはそれが最適化であっても非最適化であっても生成元のソースコードの識別番号が付与されるものと考えても良い。これによって、例えば後に図10、図11で説明する例のようになる詳しくは後述する。機械語オブジェクト43は、上記コンパイラ12によって生成された機械語オブジェクトそのものであり、最適化機械語オブジェクト13または非最適化機械語オブジェクト15である。種別42は、機械語オブジェクト43が上記最適化機械語オブジェクト13と非最適化機械語オブジェクト15のどちらであるのかを示す種別コードである。ここでは、機械語オブジェクト43は、種別42=‘1’の場合には最適化機械語オブジェクト13であり、種別42=‘2’の場合には非最適化機械語オブジェクト15であるものとする。尚、後に図10、図11に示すように、上記データパケットには基本的に、同一のソースコードから生成された最適化機械語オブジェクト13と非最適化機械語オブジェクト15の両方が格納されるものである。尚、プログラミング装置100-PLC200間の通信は、図示の通信部14、通信部21を介して行われる。一方、PLC200は、図3に示すオブジェクト展開部25、デバッグ制御部26、プログラム実行部27等の各種機能部を有する。上記オブジェクト展開部25は、プログラミング装置100が送信した上記データパケットを通信部21により受信すると、このデータパケットの種別42が‘1’である場合には、その機械語オブジェクト43を最適化機械語オブジェクト22としてユーザプログラムメモリ213に格納する。一方、受信した上記データパケットの種別42が‘2’である場合には、その機械語オブジェクト43を非最適化機械語オブジェクト23としてユーザプログラムメモリ213に格納する。また、オブジェクト展開部25は、上記最適化機械語オブジェクト22のユーザプログラムメモリ213上での格納アドレス格納領域の先頭アドレスなどを、アドレステーブル24に書き込む詳細は後述する。また、PLC200は、機械語オブジェクトを順次実行するプログラム実行部27を有し、このプログラム実行部27は、アドレステーブル24に保持されたアドレスデータ通常は上記最適化機械語オブジェクト22の格納アドレスを参照して、該アドレスデータを間接アドレス指定して、そのアドレス先に保持された機械語オブジェクトを実行するように構成されている。プログラム実行部27は、たとえば不図示のプログラム実行管理部によって所定の周期毎に呼び出されることでコールされて、前述のようにサイクリックに制御を実行するが、この例に限らない。上記の通り、通常時PLC運用時には、アドレステーブル24には最適化機械語オブジェクト22の格納アドレスが書き込まれているため、プログラム実行部27は最適化機械語オブジェクト22を実行することになる。一方、デバッグ時には、プログラミング装置100からデバッグ開始通知が送信されてくる。このデバッグ開始通知を受信したPLC200は、デバッグ制御部26によって、アドレステーブル24のアドレスデータを、非最適化機械語オブジェクト23の格納アドレス格納領域の先頭アドレスなどに書き換える。よって、デバッグ時には、プログラム実行部27が、上記のようにアドレステーブル24のアドレスデータを参照して機械語オブジェクトを実行すると、非最適化機械語オブジェクト23を実行することになる。その後、デバッグの終了時には、プログラミング装置100からデバッグ完了通知が送信されてくる。このデバッグ完了通知を受信したPLC200は、デバッグ制御部26によって、アドレステーブル24のアドレスデータを、最適化機械語オブジェクト22の格納アドレスに書き換える。つまり、通常時の状態最適化機械語オブジェクト22が実行される状態に戻すものである。このようにして、PLC200は、通常時とデバッグ時とで、実行する機械語オブジェクトとを切り替えている。つまり、通常時には最適化された機械語オブジェクトを実行し、デバッグ時には最適化されないデバッグ可能な機械語オブジェクトを実行する。すなわち、通常時は最適化機械語オブジェクト22の格納アドレスをアドレステーブル24に登録し、デバッグ時には非最適化機械語オブジェクト23の格納アドレスをアドレステーブル24に登録することにより、通常時とデバッグ時とで機械語オブジェクトを切り替えて実行することができる。これによって、通常時は最適化機械語オブジェクトを実行するPLC200のデバッグ作業が極めて容易になる。詳しくは後述する。ここで、プログラミング装置100の具体的な処理例について説明する。図4は、プログラミング装置における支援処理の一例を示すフローチャート図である。尚、図4の処理は、プログラミング装置100において図3には示していない不図示の全体制御部が行うものとして説明する。図4に示す処理例では、上記全体制御部は、まず、所定の処理メニューを表示するステップS1。これは、任意のソースコードが作成される毎に表示してもよいし、ユーザの指示に応じて表示してもよい。図5は、この処理メニューの一例である。図5の例の処理メニュー画面上には、少なくとも、コンパイル開始ボタン31、デバッグ開始ボタン32、終了ボタン33、デバッグ終了ボタン34の各種コマンドボタンが配置されている。ユーザがマウス、キーボード等の入力装置102を操作して、これらボタン31~34のうちの任意のボタンを選択することで、所望のコマンドを選択指定することができる。そして、上記全体制御部は、コンパイル開始ボタン31が選択されたか否かを判定するステップS2。もし、コンパイル開始ボタン31が選択されていない場合にはステップS2,NO、続いて、デバッグ開始ボタン32が選択されたか否かを判定するステップS6。コンパイル開始ボタン31が選択された場合にはステップS2,YES、ステップS3~S5の処理を実行する。すなわち、まず、ソースコードを最適化コンパイルして最適化機械語オブジェクト13を生成するステップS3。また、ソースコードを最適化せずにコンパイルして通常のコンパイルを行って;非最適化コンパイルと言う場合もあるものとする、通常のデバッグ可能な機械語オブジェクトとしての非最適化機械語オブジェクト15を生成するステップS4。そして、生成した最適化機械語オブジェクト13及び非最適化機械語オブジェクト15を、通信部14を介してPLC200にダウンロードするステップS5。そして、ステップS6へ移行する。ここで、プログラミング装置100における上記コンパイラ12は、例えば、最適化用のコンパイラと非最適化用のコンパイラの2つのコンパイラから成るものと見做してもよい。この例の場合、上記ステップS3では最適化用のコンパイラが動作し、上記ステップS4では非最適化用のコンパイラが動作することになる。あるいは、上記コンパイラ12は、例えば、上記ステップS3の最適化コンパイル機能と、上記ステップS4の非最適化コンパイル機能の2つの機能を有するものと見做してもよい。この例では、当然、コンパイラ12は、最適化する機能によってステップS3の処理を行って最適化機械語オブジェクト13を生成し、最適化しない機能によってステップS4の処理を行って非最適化機械語オブジェクト15を生成することになる。但し、本質的には、この様な2つの機能を有するものは、上記2つのコンパイラから成るものと同じであると見做すことができる。尚、上記2つの機能の例の場合、上記全体制御部は、例えばコンパイラ12に対して所定のパラメータを与えることで、上記2つの機能モードを切り替えさせるようにしてもよい。つまり、例えば、最適化モードのパラメータをコンパイラ12に与えることでステップS3の処理を実行させ、非最適化モードのパラメータをコンパイラ12に与えることでステップS4の処理を実行させる。上述したように、2つのコンパイラによって、あるいは1つのコンパイラをモードを切り替えて使用することで、最適化機械語オブジェクト13及び非最適化機械語オブジェクト15が、生成されることになる。尚、最適化機械語オブジェクト13及び非最適化機械語オブジェクト15には、ソースコードに対して一意に識別するための上記識別番号が付与され、この識別番号とソースコードとの対応が容易に管理されるように、所定に対応表不図示が、上記コンパイル時に作成されるようにしてもよい。次に、ステップS6以降の処理について説明する。まず、上記の通り、ステップS6では、デバッグ開始ボタン32が選択されたか否かを判定する。そして、デバッグ開始ボタン32が選択されたものではない場合にはステップS6,NO、ステップS13に移行して、本処理支援処理を終了するか否かを判定する。この判定は、例えば、上記図5の処理メニューの終了ボタン33が選択されたか否かを判定するものであり、もしユーザが終了ボタン33を選択操作したならばステップS13,YES、本処理は終了する。一方、未だ終了ボタン33が操作されないならばステップS13,NOステップS1に戻る。一方、ユーザによってデバッグ開始ボタン32が選択されたならばステップS6,YES、ステップS7~S12の処理を実行する。すなわち、まず、デバッグ時にPLCの処理を停止させるべき箇所ユーザが任意に決める;通常、複数個所となるに、それぞれ、ブレークポイントを設定させるステップS7。これは、例えば不図示のブレークポイント設定画面を表示する等して、この画面上でユーザに所望のブレークポイント箇所を設定させる。尚、ブレークポイントの設定については後述するが、ブレークポイントとは、ソースコードにおける任意の位置に相当する箇所でプログラム実行を一時中止一旦停止させるための一種のマーカー識別子であり、その実現方法はどの様な形式であっても構わない。以降の説明では、一例として、ブレークポイント処理コードブレーク命令を挿入する方法を用いるものとする。続いて、PLC200に対してデバッグ開始通知を送信するステップS8。尚、このデバッグ開始通知には、例えば後述する図9のデバッグ情報デバッグ対象となる機械語オブジェクトとブレークポイント箇所の情報が付加される。そして、このデバッグ開始通知に対してPLC200から処理完了通知が返信されてくるまで待機し、この処理完了通知を受信したらステップS9、YESステップS10へ移行する。尚、上記処理完了通知は、PLC200側でブレークポイント処理コードの挿入処理後述するが完了したことPLC200側で準備完了したことを意味する通知である。ステップS10の処理は、実機デバッグの為の既存の処理であり、ここでは特に詳細には説明しないが、例えばPLC200の状態を表示して例えばPLC200がブレークしたときのステータス表示等デバッグを行うための処理である。ユーザは、例えば各ブレークポイント毎のステータス表示を参照しながら所定のデバッグ作業を行い、デバッグ作業が完了したならば、図5のデバッグ終了ボタン34を操作する。これにより、デバッグ処理終了と判定しステップS11,YES、ステップS12の処理へ移行する。ステップS12の処理では、デバッグ完了通知を通信部14を介してPLC200へ送信する。そして、上記ステップS13の判定処理を行う。一方、PLC200は、例えば図6や図7に示す処理を実行する。図6は、プログラマブルコントローラにおけるオブジェクト展開処理の一例を示すフローチャート図である。図7は、プログラマブルコントローラにおけるデバッグ制御処理の一例を示すフローチャート図である。まず、図6の処理について説明する。尚、図6の処理は、上記オブジェクト展開部25の処理であると見做してもよい。上記ステップS5の処理によってプログラミング装置100側から機械語オブジェクトがダウンロードされると、図6の処理が実行される。すなわち、まず、受信した機械語オブジェクトが、最適化されたものであるか否かを判定するステップS20。これは既に述べたように、受信パケットの種別42を参照して判定する。つまり、種別42が‘1’である場合には最適化されたものであると判定してステップS20,YESステップS21へ移行する。種別42が‘2’である場合には最適化されたものではないと判定してステップS20,NOステップS23へ移行する。ステップS21では、受信パケットの機械語オブジェクト43を最適化機械語オブジェクト22としてユーザプログラムメモリ213に格納する。これは、例えば、受信した機械語オブジェクト43を、ユーザプログラムメモリ213内の不図示の最適化機械語オブジェクト保存領域予め決められている;保存領域αとする内の任意の格納領域に転送格納するものである。更に、受信パケットの識別番号41と上記機械語オブジェクト43の転送先アドレス格納アドレス;保存領域α内の格納領域の先頭アドレス等とを対応付けて、不図示のバックアップ領域に記憶するようにしてもよい。上記ステップS21の処理に続いて、最適化機械語オブジェクトである上記機械語オブジェクト43の転送先アドレス格納アドレス;上記保存領域α内の格納領域の先頭アドレス等を、アドレステーブル24に書き込むステップS22ことで、本処理を終了する。一方、上記のようにステップS20の判定がNOの場合にはステップS23を実行する。ステップS23では、受信パケットの機械語オブジェクト43を非最適化機械語オブジェクト23としてユーザプログラムメモリ213に格納する。これは、例えば、機械語オブジェクト43を、ユーザプログラムメモリ213内の不図示の非最適化機械語オブジェクト保存領域予め決められている;保存領域βとする内の任意の格納領域に転送格納するものである。更に、受信パケットの識別番号41と上記機械語オブジェクト43の転送先アドレス格納アドレス;保存領域β内の格納領域の先頭アドレス等とを対応付けて、不図示のバックアップ領域に記憶するようにしてもよい。次に、以下、図7のデバッグ制御処理について説明する。尚、図7の処理は、上記デバッグ制御部26の処理であると見做してもよい。図7の処理は、上記ステップS7やS8の処理に伴ってプログラミング装置100側から送られてくるデバッグ開始通知上記の通り、デバッグ情報一例を図9に示すが付加されているを受信することで開始する。図9に示す例では、デバッグ情報は、識別番号51とブレーク位置52から成る。識別番号51は、上記識別番号41と同様であるが、ここでは特にデバッグ対象のソースコードに対応する機械語オブジェクトを示すIDを意味する。ブレーク位置52は、例えば上記ステップS7で設定されたブレークポイントの位置を示す情報であり、複数あってもよい。デバッグ制御部26は、上記受信したデバッグ情報に基づいて、まず、上記不図示のバックアップ領域を参照することで、上記識別番号51に対応する非最適化機械語オブジェクト23の格納アドレス保存領域β内の格納領域の先頭アドレス等を取得する。そして、この格納アドレスをアドレステーブル24に上書きするステップS30。これによって、プログラム実行部27が最適化機械語オブジェクト22を実行する状態から、非最適化機械語オブジェクト23を実行する状態へと切り換わる。続いて、上記ブレーク位置52を参照してブレークポイントの位置を認識し、認識した位置にブレークポイント処理コードブレーク命令を挿入するステップS31。そして、挿入処理が終了したか否かを判定するステップS32。つまり、ブレーク位置52は複数あってもよいので、未処理のブレーク位置52がある場合には挿入処理は未終了と判定してステップS32,NOステップS31に戻り、未処理のブレーク位置52に関して上記ブレークポイント処理コードを挿入する処理を行う。そして、全てのブレーク位置52に関して挿入処理が終了したならばステップS32,YES、上記処理完了通知を通信部21を介してプログラミング装置100に送信するステップS33。その後は、特に図示説明は行わないが、PLC200において、上記ステップS10のデバッグ処理に係る既存の処理プログラム実行部27による非最適化機械語オブジェクト23の実行とブレークポイントにおける停止およびそのときの状態をプログラミング装置100へ送信するなどが実行される。一方、デバッグ制御部26自体は、プログラミング装置100から上記デバッグ完了通知が送られてくるまで待機するステップS34。そして、プログラミング装置100からの上記デバッグ完了通知を受信したならばステップS34,YES、アドレステーブル24の格納内容を、最適化機械語オブジェクト22の格納アドレスに変更して、本処理を終了する。上記本例のプログラマブルコントローラシステムについて、以下、具体例を用いて更に詳細に説明する。プログラミング装置100を使用してPLC200に機械語オブジェクトをダウンロードする為には、ユーザは、まず、プログラミング装置100のユーザインタフェース部11の上記機能によって、ニーモニック言語、あるいはラダー言語、FBD言語等の図形言語で記述した、制御プログラムのソースコードを作成する。次に、ユーザは、作成したソースコードをコンパイルさせて機械語オブジェクトを生成させる。これは、例えば、プログラミング装置100の表示器103に上記図5の処理メニュー画面を表示させて、上記コンパイル開始ボタン31を選択指示することで実現させる。この指示に応じて、コンパイラ12は、上記ソースコードをコンパイルして上記最適化機械語オブジェクト13を生成し、これを不図示の記憶領域に格納する。最適化機械語オブジェクト13は、例えばソースコードの実行順序の変更、レジスタの有効活用等が行われてコードサイズが縮小されたすなわち、最適化された機械語オブジェクトである。最適化機械語オブジェクト13は、例えばPOUProgramOrganizationUnit毎に生成される。POUとは、プログラム構成単位であり、PLC200の言語要素である。尚、POUの種類は、アプリケーションプログラム、ファンクションブロック等があり、C言語における関数に相当するものである。また、コンパイラ12は、上記コンパイルの際、更に非最適化機械語オブジェクト15も生成し、これを不図示の記憶領域に格納する。非最適化機械語オブジェクト15は、上記のような最適化が行われていない機械語オブジェクトであるつまり、通常のコンパイル処理によって生成される通常の機械語オブジェクトであり、当然、ソースコードレベルの実機デバッグが可能となるものである。非最適化機械語オブジェクト15も、POU毎に生成される。プログラミング装置100は、上述したコンパイル処理が終了すると、上記生成した2種類の機械語オブジェクト最適化機械語オブジェクト13と非最適化機械語オブジェクト15を、通信部14を介してPLC200へダウンロードする。このとき、既に述べたように例えば図8に示すように、各POU毎の機械語オブジェクトは、それぞれ、その機械語オブジェクト本体43に、上記識別番号41及び種別42が付加されて、PLC200へダウンロードされる。識別番号41及び種別42に関しては既に述べた通りであり、識別番号はソースコード毎に与えられるものと見做してよいが、ここではソースコードはPOU単位で扱うものとする。従って、ここでは識別番号は各POUに固有の識別用IDであると見做してもよい。これより、本例では、任意の1つのPOUについて生成された2つの機械語オブジェクト最適化機械語オブジェクト13と非最適化機械語オブジェクト15には、同一の識別番号そのPOUの識別番号が与えられる。PLC200は、プログラミング装置100からのデータパケット上記機械語オブジェクト本体43に、上記識別番号41及び種別42が付加されたパケットを受信すると、その機械語オブジェクト43をユーザプログラムメモリ213に格納すると共に、それが最適化された機械語オブジェクトである場合には、その格納アドレスをアドレステーブル24に登録する。ここで、例えば図10に示すように、受信したデータパケット55が、4つの機械語オブジェクト55a,55b,55c,55dを含むものであったとする。図10に示すように、これら4つの機械語オブジェクト55a,55b,55c,55dそれぞに、上記識別番号41及び種別42が付加されている。ここでは仮に図10に示すように、機械語オブジェクト55a、55bは、種別42=‘1’つまり最適化機械語オブジェクトであり、機械語オブジェクト55c、55dは、種別42=‘2’つまり非最適化機械語オブジェクトであるものとする。また、機械語オブジェクト55aと55cとが同じPOUから生成されたものであり、同一の識別番号識別番号1が与えられている。同様に、機械語オブジェクト55bと55dとが同じPOUから生成されたものであり、同一の識別番号識別番号2が与えられている。また、ここでは、ユーザプログラムメモリ213における上記最適化機械語オブジェクト保存領域保存領域αは、0番地~7FFF番地であり、非最適化機械語オブジェクト保存領域保存領域βは、8000番地以降であるものとする。以上の具体例の場合、上記データパケット55を受信したPLC200は、まず、上記の通り機械語オブジェクト55a、55bは最適化機械語オブジェクトであると判別するので、これらを上記最適化機械語オブジェクト保存領域保存領域αに転送格納する。これは、例えば識別番号41を参照して識別番号順に例えば番号が若い順に格納するが、この例に限らない。また、本例では1000番地区切りで管理するものとする。これより例えば図10に示すように、機械語オブジェクト55aは先頭アドレス=0番地の領域に格納され、機械語オブジェクト55bは先頭アドレス=1000番地の領域に格納されるそして、通常は空き領域が生じることになる。更に、これら各格納領域の先頭アドレス0番地と1000番地を、図示のように、アドレステーブル24に登録する。すなわち、アドレステーブル24の識別番号1用のアドレス欄には0000番地が格納され、識別番号2用のアドレス欄には1000番地が格納される。また、これら各格納領域の先頭アドレス0番地と1000番地は、その格納領域に格納された機械語オブジェクトの識別番号と対応付けされて、不図示のバックアップ領域に記憶される。一方、上記の通り機械語オブジェクト55c、55dは非最適化機械語オブジェクトであると判別されるので、これらを上記非最適化機械語オブジェクト保存領域保存領域βに転送格納する。これも、例えば識別番号41を参照して識別番号順に例えば番号が若い順に格納するが、この例に限らない。これより例えば図10に示すように、機械語オブジェクト55cは先頭アドレス=8000番地の領域に格納され、機械語オブジェクト55dは先頭アドレス=9000番地の領域に格納される。また、これら各格納領域の先頭アドレス8000番地と9000番地は、その格納領域に格納された機械語オブジェクトの識別番号と対応付けされて、不図示のバックアップ領域に記憶される。但し、これらは非最適化機械語オブジェクトであるので、上記アドレステーブル24への登録は行われない後に、デバッグ処理の際に一時的に登録される。尚、図示のように、機械語オブジェクト55aと55cは両方とも識別番号が‘1’である。これは、同一のPOUについて最適化コンパイルしたことで機械語オブジェクト55aが生成され、非最適化コンパイルしたことで機械語オブジェクト55cが生成されたことを意味する。これは機械語オブジェクト55bと55d両方とも識別番号が‘2’についても同様である。上述したように、PLC200は、受信した複数の機械語オブジェクトを、最適化機械語オブジェクトと非最適化機械語オブジェクトとに分類したうえで、それぞれの保存領域α、βに例えば識別番号順に格納する。その後、PLC200は、アドレステーブル24を参照して制御プログラム機械語オブジェクトを実行する。すなわち、アドレステーブル24を参照して、該アドレステーブル24のアドレスデータを間接アドレス指定して、機械語オブジェクトを実行する。通常時は、アドレステーブル24には上記のように最適化機械語オブジェクト22の格納アドレス格納領域の先頭アドレスが登録されているので、PLC200は最適化機械語オブジェクト22を実行することになり、高速化が図られている。一方、ユーザは、デバッグを行う場合には、上記のようにプログラミング装置100のメニュー画面上でデバッグ開始ボタン32を選択指定することで、デバッグ処理を開始させる。ユーザは、まず、所望のソースコードにブレークポイントを設定する。つまり、所望のソースコードをオープンして、任意の箇所行などにブレークポイントを設定する複数個所に設定してもよい。但し、このソースコードは、新規のものではなく、既にコンパイル済みでありその機械語オブジェクトをPLC200へダウンロード済みであるプログラムのソースコードである。尚、上記識別番号は、ソースコードの識別用IDであるものとする例に限らず、例えばソースコードをコンパイルして機械語オブジェクトを生成したときに、この機械語オブジェクトに対して生成付与するものとしてもよい。但し、この場合でも既に述べた通り、同じソースコードから複数の2つの機械語オブジェクトが生成される場合には、この複数の2つの機械語オブジェクトには同一の識別番号が付与されることになる。ここで、プログラミング装置100は、上記ソースコードをコンパイルした際に、そのファイル名ソースコード名と、これをコンパイルして得た機械語オブジェクトの識別番号とを対応付けるテーブル不図示;ソースコード識別番号対応テーブルというものとするを、不図示の記憶領域に保持している。これより、ユーザによって開かれているソースコードのソースコード名に対応する機械語オブジェクトの識別番号を、このソースコード識別番号対応テーブルを参照することで獲得できる。そして、獲得した識別番号と上記ユーザによるブレークポイント設定内容に基づいて、上記図9に示すデバッグ情報を生成する。すなわち、プログラミング装置100は、上記ユーザによって指定されたブレークポイントの位置行などを認識して、これを図9のデバッグ情報のブレーク位置52とすると共に、上記獲得した識別番号を識別番号51とするデバッグ情報を生成する。そして、このデバッグ情報をPLC200へ送信する。但し、上述したことは一例であり、識別番号は予め各POU毎に付与されているものであってもよい。図11に示す例では、上記デバッグ情報は、識別番号51=‘2’であり、ブレーク位置52=‘2’となっている。ここで、従来からある既存技術として、コンパイラは、例えばソースコードがニーモニック言語等である場合換言すれば、図形言語プログラムではない場合、ソースコードをコンパイルすることで、ソースコードの各行が、機械語オブジェクトのどの位置どの行;但し、1対1の関係とは限らないに変換されたのかを記録している。つまり、ソースコードの各行と、機械語オブジェクトの各位置各行との関連付けが可能となっている。これより、プログラミング装置100において、ソースコードにおける上記ユーザによるブレークポイント設定位置行に対応する機械語オブジェクト上の位置行が分かるので、これを上記ブレーク位置52とすることになる。よって、上記図11の例のように、ブレーク位置52=‘2’となっている場合、これはソースコード上におけるブレークポイント設定位置に対応する機械語オブジェクト上の位置が、2行目であることを意味している。また、上記のことは、ソースコードがニーモニック言語等である場合に限らず、図形言語プログラムである場合も、略同様である。すなわち、プログラミング装置100は、ユーザが任意の図形言語プログラムソースコード上の任意の位置図形にブレークポイントを設定すると、この位置図形に対応する機械語オブジェクト上の位置行が分かるので、これを上記ブレーク位置52とすることになる。これは、例えば、任意の図形言語プログラムソースコードを、一旦、中間コードに変換するが、その際、図形はある一定の規則で中間コードに変換できるので、図形の位置と、その図形が変換された中間コードの位置行とをコンパイラ12が記録できる。よって、この図形言語プログラムソースコード上にブレークポイント設定されていた場合、ソースコード上におけるブレークポイント設定位置図形に対応する中間コード上の位置行も、分かることになる。よって、この様な中間コード上のブレークポイント位置行を記録しておけば、後は、この中間コードを機械語オブジェクトに変換する際に、上記ニーモニック言語等の場合と略同様にして、機械語オブジェクト上でのブレークポイント位置行が分かるので、これを上記ブレーク位置52とすることになる。PLC200は、この例のようなデバッグ情報を受信した場合、まず、その識別番号51=‘2’に応じて、アドレステーブル24における識別番号‘2’用アドレス欄に保持されたアドレス1000を、識別番号=‘2’の非最適化機械語オブジェクトである非最適化機械語オブジェクト55dが格納されたアドレスを指すように更新するつまり、9000に更新する。尚、このアドレス9000は、上記不図示のバックアップ領域を参照することで取得できる。上記の通り、上記ダウンロードされた非最適化機械語オブジェクトを保存領域βに転送格納する際に、上記不図示のバックアップ領域に各非最適化機械語オブジェクトに関してその識別番号に対応付けてその格納アドレスが記憶されているので、これを参照することで、識別番号=‘2’に対応する格納アドレスここでは9000が取得できる。PLC200は、このようにしてアドレステーブル24における識別番号‘2’用アドレス欄を更新したら、続いて、上記識別番号‘2’の非最適化機械語オブジェクト55dにおいて、上記デバッグ情報のブレーク位置52によって示される箇所行に、ブレークポイント処理コードブレーク命令を挿入する。図11に示す例ではデバッグ情報のブレーク位置52は‘2’であるので、非最適化機械語オブジェクト55dの2行目にブレークポイント処理コードを挿入する。但し、ブレーク位置52は1つとは限らず、複数個所あってもよく、それぞれについて該当する箇所行にブレークポイント処理コードを挿入する。そして、全ての該当箇所にブレークポイント処理コードを挿入したら、上記処理完了通知をプログラミング装置100へ送信する。その後、PLC200のプログラム実行部27は、識別番号‘2’のPOUに関しては、非最適化機械語オブジェクト23ここでは55dを実行することになる。そして、このオブジェクト55dを実行中に、ブレークポイント処理コード上記例では2行目に挿入されているを実行した時点で、当該オブジェクト55dの実行を停止し、待機状態となる。そして、例えば、プログラムをブレーク停止したこと、及び所定のデータたとえばCPU211のレジスタ値や入出力モジュール222の入出力データなどを、プログラミング装置100へ送信する。尚、上記の通り、非最適化機械語オブジェクト23を実行するのは識別番号‘2’のPOUに関するものだけであり、それ以外のPOUに関しては引き続き最適化機械語オブジェクト22を実行することになる。プログラミング装置100は、PLC200からの上記処理完了通知を受信した後は、例えば、PLC200から上記ブレーク時に送信される上記所定のデータ等の受信待ち状態となり、上記所定のデータ等を受信する毎に、このデータ上記レジスタ値や入出力データなどを表示器103に表示することで、ユーザにブレーク状態を通知するデバッグ処理。そして、ユーザは、デバッグ作業終了の際には上記デバッグ終了ボタン34を選択操作するので、これに応じてプログラミング装置100は上記デバッグ完了通知をPLC200へ送信する。上記デバッグ完了通知を受信したPLC200は、アドレステーブル24の格納内容を、デバッグ時用から通常用へ切り替える。すなわち、アドレステーブル24における識別番号‘2’用アドレス欄に保持されている上記アドレス9000を、元のアドレス1000に戻す。これによって、識別番号‘2’のPOUに関して、最適化機械語オブジェクト2255bが実行される状態に戻る。PLC200は、更に、識別番号‘2’の非最適化機械語オブジェクト2355dに挿入されたブレークポイント処理コードを削除する。上記の例では、非最適化機械語オブジェクト55dの2行目に挿入されていたブレークポイント処理コードを削除する。このようにして、PLC200は、デバッグ状態から運用状態通常時に復帰する。これは、本例では、識別番号‘2’のPOUに関しては最適化機械語オブジェクト22の実行を再開し、それ以外のPOUに関しては引き続き最適化機械語オブジェクト22を実行することになる。尚、PLC200には、通常、複数のPOUに対応する機械語オブジェクトが実装され、これら複数の機械語オブジェクトが連携して動作することで所定の制御処理が実行されるように構成されているため、運用状態からデバッグ状態への切り替えの際のアドレステーブル24へのアドレスデータの登録や、デバッグ状態から運用状態に復帰する際のアドレステーブル24へのアドレスデータの登録は、PLC200が制御機器300を制御するための制御周期に同期して実行することが望ましい。以上説明した実施の形態を、実施例1とする。ここで、上記実施例1のようにプログラミング装置側で1つのソースコードに対して2つのコンパイラによって最適化と非最適化の2種類の機械語オブジェクトを生成してPLC側にダウンロードし、PLC側でこれら2種類の機械語オブジェクトの両方を実行する実行時期は異なる構成の場合、この2種類の機械語オブジェクトの実行論理演算結果が同一となることが必要となる。もし同一ソースコードに係わる2種類の機械語オブジェクトの演算結果が異なると、これら2種類の機械語オブジェクトを切り替えて実行した場合、システムの動作が不安定となり、ユーザに存在を与える可能性がある。しかしながら、ソースコードがニーモニック言語で記述される場合はともかく、ラダー言語、FBD言語等の図形言語を用いてPLCプログラム複数の図形要素を任意の位置に配置して成るプログラムを作成した場合、上記のように2つのコンパイラを用いる構成の場合、同一ソースコードに係わる2種類の機械語オブジェクトの演算結果が異なる可能性がある。つまり、コンパイルの際の図形要素の展開順番が演算結果に影響する図形要素の展開順番が異なれば演算結果が異なる可能性がある。この様になる原因は、図形言語の場合、図形要素の展開順番の基本的な規則は、上から下、左から右であるが、ユーザがフリーで自由に記述できるため、図形要素を様々な大きさと位置に配置でき、図形要素間の接続の組み合わせも自由にできるため、基本的な規則だけでは展開順番を一義的に確定させることができず、このため現実上、各コンパイラ独自の展開方法が存在するからである。このように、同一ソースコードを2つのコンパイラで別々にコンパイルして生成した2種類の機械語オブジェクトが、図形要素の展開順番が相互に異なることを主な原因として、その演算結果が異なることになる可能性がある。実施例2では、上記実施例1の構成においてこの様な問題が生じるのを防止するものである。以下、実施例2について詳細に説明する。図12は、実施例2のプログラマブルコントローラシステムの機能構成例である。図示のプログラマブルコントローラシステムは、開発支援装置ローダ60、PLCターゲット80等から成る。開発支援装置60は、上記プログラミング装置100と略同様の機能を有すると共に、更に実施例2における機能上記問題を解消するための機能を有する。開発支援装置60は、インタフェース機能部61、コンパイラ62、通信機能部63等の各種機能部を有する。尚、開発支援装置60は、画面ディスプレイ64、入力装置65等も有する。インタフェース機能部61と通信機能部63は、図1のユーザインタフェース部11、通信部14と同じであってよく、これらの説明は省略するが、ユーザはユーザインタフェース部11の機能によって、所望の制御プログラムのソースコード66を作成することになる。コンパイラ62も、基本的な機能は図1のコンパイラ12と同じであってよい。すなわち、コンパイラ62は、例えば2つのコンパイラから成り、任意のソースコード66を入力して、2つのコンパイラそれぞれで、このソースコード66に対応する機械語オブジェクトを生成する。これより、コンパイラ62は、2種類の機械語オブジェクト最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68を生成する。最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68は、基本的には、上記図1の最適化機械語オブジェクト13、非最適化機械語オブジェクト15と略同様であってよい。すなわち、最適化機械語オブジェクト67は、上記最適化機械語オブジェクト13と同様、ソースコードを最適化コンパイルして生成されたものである。デバッグ可能機械語オブジェクト68は、上記非最適化機械語オブジェクト15と同様、ソースコードに対して通常のコンパイルを行って生成されたものである。但し、上記のことから最適化機械語オブジェクト13と非最適化機械語オブジェクト15とでは演算結果が異なるその生成の際の図形要素の展開順番が異なる場合があり得るが、最適化機械語オブジェクト67とデバッグ可能機械語オブジェクト68とでは常に演算結果は同じでありその生成の際の図形要素の展開順番が同一である、演算結果が異なる可能性はない。これを実現する為に、コンパイラ62は、例えば最適化機械語オブジェクト67生成の際に、その図形要素展開順番を示す展開順番対応表69を生成しておく。そして、デバッグ可能機械語オブジェクト68の生成の為のコンパイル処理の際に、この展開順番対応表69を参照することで、最適化機械語オブジェクト67の場合と同じ展開順番でコンパイル処理を実行できる。また、コンパイラ62は、最適化機械語オブジェクト67生成の際に、当然、各変数のメモリアドレス割付け処理一般的な処理であり説明は省略するも行うが、この様に各変数に割り付けたアドレス情報を、変数アドレス対応表70に記憶するようにしてもよい。この場合、コンパイラ62は、デバッグ可能機械語オブジェクト68の生成の為のコンパイル処理の際に、この変数アドレス対応表70を参照することで、各変数に対して最適化機械語オブジェクト67の場合と同じメモリアドレスを割り付けることができる。尚、図示のソースコード識別番号対応表71は、上記実施例1において説明したソースコード識別番号対応テーブルと同じものと見做してよく、ここでは特に説明しないが、実施例1で説明したように、例えば、ソースコードのファイル名と、このソースコードの識別番号または、このソースコードから生成された機械語オブジェクトに付与される識別番号とを対応付けて記憶したものである。上記生成された2種類の機械語オブジェクト最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68は、PLC80にダウンロードされる。尚、ダウンロードの際のデータパケット構成は、実施例1と同じであってよい図8に示す。ここで、図示のPLC80の機能は、上記PLC200と同じであってよい多少、名称や形式が変わっていても、実質的には同じと考えてよい。すなわち、PLC80は、プログラム実行管理機能部81、アドレステーブル82、通信機能部83等の処理機能部を有する。アドレステーブル82、通信機能部83は、図1のアドレステーブル24、通信部21と同じであると見做してよく、ここでの説明は省略する。プログラム実行管理機能部81は、図1のオブジェクト展開部25、デバッグ制御部26、プログラム実行部27のすべての機能を含むものと見做してもよい。従って、PLC80の処理機能については、ここでは説明を省略するが、PLC80は、上記ダウンロードされる最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68を、図示の最適化機械語オブジェクト84、デバッグ可能機械語オブジェクト85として記憶する。図13に、上記コンパイラ62の処理動作の一例を示す。尚、図13に示す例では、コンパイル処理の際に、ソースコードから一旦、中間コード中間言語を生成して、その後、中間コードから機械語オブジェクトを生成する例であるが、この例に限るものではない。中間コードを生成することなく、ソースコードから直接的に機械語オブジェクトを生成するものであってよい。尚、中間コード中間言語は、例えばC言語であるが、この例に限らない。尚、上記特許文献2には、インストラクションリスト等のシーケンス処理用の言語で記述された制御プログラムソースファイルを、C言語等の高級プログラミング言語に変換して、このC言語表現のプログラムファイルをコンパイルしてオブジェクトファイルを生成することにより実行コードが得られる旨の開示がある。この様に、C言語等の中間言語を介することは、既存技術であり、ここではこれ以上説明しない。図13に示す例では、上記コンパイラ62は、2つのコンパイラコンパイラ62a,62bから成るものとする。これら2つのコンパイラは、上記の通り、一旦、中間コードを生成するタイプであるものとする。コンパイラ62aは、通常のコンパイル処理を行って上記デバッグ可能機械語オブジェクト68を生成する。コンパイラ62bは、最適化コンパイル処理を行って上記最適化機械語オブジェクト67を生成する。本例では、コンパイラ62a,62bはそれぞれ、まずフロントエンド処理で中間コード中間コード1、中間コード2を生成し、その後、バックエンド処理で機械語オブジェクト68,67を生成する。従来であれば中間コード1と中間コード2とでは、その生成の際の図形要素の展開順番等が異なる可能性がある。既に説明した通り、展開順番が異なると、PLC80側で上記最適化機械語オブジェクト84を実行したときとデバッグ可能機械語オブジェクト85を実行したときとで、演算結果が異なるため問題となる。これに対して、本例のコンパイラ62では、まず、コンパイラ62aは、ソースコード66をコンパイルフロントエンド処理して中間コード1を生成する際に、例えばコンパイラ62bとは異なる独自の規則により図形要素の展開順番を決定するかもしれないが、この展開順番を展開順番対応表69に記憶しておく。尚、コンパイラ62bにおける最適化の処理は、例えばバックエンド処理において実現してもよい。これは例えば、コンパイラ62bは、例えばC言語コンパイラ不図示を有し、このC言語コンパイラがコンパイラ62bのバックエンド処理を実行する。C言語コンパイラは、C言語プログラムをコンパイルして機械語を生成する機能を有する、C言語用の既存の一般的なコンパイラであり、上記最適化のための処理機能も備えている。図13に示す構成例では、特に上記中間言語をC言語とした場合、この様な既存のC言語コンパイラの最適化機能を利用して、最適化を実現できるというメリットがある。図14に、展開順番対応表69の具体例を示す。図示の例では、展開順番対応表69は、各図形要素の識別用IDである図形ID91に対応付けて、各図形要素の展開順番を示す実行順番展開順番92が登録される。図示の例では、図形ID91=‘1’、‘2’、‘3’の3つの図形要素の展開順番実行順番は、‘1’→‘3’→‘2’の順となる。そして、コンパイラ62aにおいてコンパイル処理が完了してデバッグ可能機械語オブジェクト68が生成された後、コンパイラ62bのコンパイル処理を開始するあるいは、中間コード1が生成された後であっても構わない。換言すれば、展開順番対応表69の作成が完了した後であればよい。尚、コンパイラ62aが、例えば自己のコンパイル処理が完了したら、ソースコード66をコンパイラ62bに渡すことで、コンパイラ62bがコンパイル処理を開始できるようにしてもよい。あるいは、コンパイラ62aが処理完了をコンパイラ62bに通知すると、コンパイラ62bがソースコード66を取得してコンパイル処理を開始するようにしてもよい。そして、コンパイラ62bは、展開順番対応表69を参照しながら、コンパイル処理を実行する。これより、コンパイラ62bにおいても、図形要素の展開順番はコンパイラ62aと同じとなる。例えば図14の例であればコンパイラ62aにおける図形要素の展開順番は‘1’→‘3’→‘2’の順であったことになり、コンパイラ62bにおいても同じ展開順番でコンパイル処理を行って中間コード2を生成することになる。従来であれば、コンパイラ62bは、独自の規則図形要素コード生成規則に従って展開順番を決めていたので、図形要素の展開順番が例えば‘1’→‘2’→‘3’の順となる可能性もあったが、本手法ではこの様な問題は起こらない。また、よく知られているように、PLCの制御プログラムのコンパイル処理では、各変数に任意のメモリアドレスを割当てる処理既存の処理も行われるが、本手法では、コンパイラ62aが、例えば中間コード1生成の際に各変数に割当てたアドレス情報を、変数アドレス対応表70に記憶するようにしてもよい。この場合には、コンパイラ62bは、更に変数アドレス対応表70も参照することで、各変数へのメモリアドレス割当てを、コンパイラ62aと同じとすることができる。変数アドレス対応表70の具体例は、特に示さないが、例えば各変数の識別用IDに対応付けて、その変数に割り付けたメモリアドレスが格納されるものである。この様に、本手法では、2つのコンパイラ62a、62bで、図形要素の展開順番および各変数へのメモリアドレス割当て内容を、同一にすることができる。尚、変数アドレス対応表70の具体例は、特に示さないが、例えば各変数の識別用IDに対応付けて、その変数に割当てたアドレスの情報例えば割当てたメモリ領域の先頭アドレスとサイズ等が登録される。コンパイラ62aは、中間コード1をバックエンド処理で機械語オブジェクトに変換してデバッグ可能機械語オブジェクト68を生成する。コンパイラ62bは、中間コード2をバックエンド処理で機械語オブジェクトに変換して最適化機械語オブジェクト67を生成する。ここで、上述したように、中間コード1と中間コード2は、その生成の際の図形要素の展開順番が同じとなる。従って、これら中間コード1、中間コード2の機械語オブジェクトデバッグ可能機械語オブジェクト、最適化機械語オブジェクトをPLC80側で実行した場合、上述した問題は起こらない。すなわち、同一のソースコードに係る2種類の機械語オブジェクトの演算結果が、相互に異なるという事態が生じ、それによってシステム動作が不安定になる等という問題が生じる心配はない。尚、言うまでもないが、上記デバッグ可能機械語オブジェクト68と最適化機械語オブジェクト67を、PLC80側へダウンロードして上記デバッグ可能機械語オブジェクト85、最適化機械語オブジェクト84として記憶させることになる。そして、PLC80では、通常時は最適化機械語オブジェクト84を実行し、デバッグ時にはデバッグ可能機械語オブジェクト85に切り替えて実行することになるが、実施例2では、この切り替え後に、切り替え前とは演算結果が異なる等というような事態が生じることはなく、システム動作が不安定になるようなことはない。尚、図13は一例を示すものであり、この例に限らない。例えば、コンパイラ62bを先に実行し、その後にコンパイラ62aを実行するようにしてもよい。勿論、この場合には、コンパイラ62bが上記展開順番対応表69、変数アドレス対応表70を生成することになり、その後、コンパイラ62aが、これらの対応表69、70を参照しながらコンパイル処理を実行することで、図形要素の展開順番がコンパイラ62bと同じとなると共に、各変数へ割当てるメモリアドレスもコンパイラ62bと同じとなる。この様に、2つのコンパイラ62a、62bのうち何れか一方基本的には先に処理実行する方が上記展開順番対応表69、変数アドレス対応表70を生成し、他方がこれらの対応表69、70を参照しながらコンパイル処理を実行することで、同一のソースコードに係るデバッグ可能機械語オブジェクト6885と最適化機械語オブジェクト6784とで、演算結果が異なる事態となることは回避される。あるいは、図13では、一旦、中間コードを生成するタイプのコンパイラに本手法を適用した場合を示したが、勿論、この様な例に限らず、中間コードを生成することなくソースコードからダイレクトに機械語オブジェクトを生成するコンパイラにも、本手法は問題なく適用できる。図15に、図形言語プログラムの具体例を示す。図15aには、ラダー図やファンクションブロック図等の図形言語プログラムの図形要素を示す。図15b、cには、ファンクションブロック図によるプログラム記述の具体例を示す。図15a,bの例については特に説明しないが、図15bの例では3つの図形要素が任意の位置に配置されていることになる。以下、図15cの例について説明する。この例では、C=ABを演算する図形要素95と、F=CDを演算する図形要素96を示している。これら図形要素95、96の処理のどちらを先に実行するかによって、演算結果が異なる場合が有り得る。しかしながら、図15cに示す例では、図形要素95と図形要素96のどちらを先に実行するか明確ではない。すなわち、上記の通り、左から右、上から下の順番が基本規則であるが、図15cの場合、左から右ルールの方を優先させると図形要素95が先に実行されるが、上から下ルールの方を優先させると図形要素96が先に実行される可能性がある。あるいは、図15cの場合、上から下ルールに関して、図形要素95、96のどちらが上であるのか不明瞭である。そして、例えば、各変数A,B,C,D,Fに係る現在のメモリ保持値が、A=1、B=2、C=100、D=10、F=0であったとする。この例の場合、仮に図形要素95→図形要素96の順に実行されると、まず、C=AB=12=3となってCの値が上記100から3へと更新された後、F=CD=310=13となる。よって、演算結果上記演算後の各変数A,B,C,D,Fに係るメモリ保持値は、A=1、B=2、C=3、D=10、F=13となる。一方、上記の例で図形要素96→図形要素95の順に実行された場合には、まず、F=CD=10010=110となってFの値が上記0から110へと更新された後、C=AB=12=3となる。よって、演算結果上記演算後の各変数A,B,C,D,Fに係るメモリ保持値は、A=1、B=2、C=3、D=10、F=110となる。このように、図形要素95→図形要素96の順に実行された場合と、図形要素96→図形要素95の順に実行された場合とでは、演算結果が異なることになる。また、図16aは通常時、図16bはデバッグ時のアドレステーブル82の展開状態の具体例を示す図である。図示の通り、これらは内容的には図10、図11に示したものと略同様であり、図12において名称が図3とは異なるもの非最適化機械語オブジェクト→デバッグ可能機械語オブジェクトが存在することから、例えば図16abに示すようになる。よって、ここでは図16a、bについては特にこれ以上詳細には説明しないが、実施例1の場合と同様に実施例2においてもPOU単位で2種類の機械語オブジェクトを生成ダウンロードすると共に、POU単位でデバッグの実行デバッグ可能機械語オブジェクトの実行を指示できる。よって、例えば、制御プログラム全体のなかで、その都度、ユーザが必要とする部分POUについてのみデバッグ可能機械語オブジェクトに切り替えて実行させることができ、デバッグ作業時間の短縮化、作業負担の軽減を図ることができる。尚、実施例2の開発支援装置60、PLC80のハードウェア構成例は、上記実施例1のプログラミング装置100、PLC200と同じであってよい。すなわち、開発支援装置60のハードウェア構成例は図1に示す通りであり、PLC80のハードウェア構成例は図2に示す通りであると考えてよい。但し、この例に限るものではない。また、図12に示す開発支援装置60の処理機能符号61、62等は、上記プログラミング装置100の場合と同様、例えば記憶装置105に予め記憶されているアプリケーションプログラムを、CPU101が実行することにより実現される。同様に、図12に示すPLC80の処理機能符号81等は、上記PLC200の場合と同様、例えばユーザプログラムメモリ213に予め記憶されているアプリケーションプログラムを、CPU211が実行することにより実現される。また、上記デバッグ可能機械語オブジェクト85、最適化機械語オブジェクト84は、ユーザプログラムメモリ213に格納される。実施例2は、基本的に、上記実施例1における図4~図9の具体例において、ステップS3、S4の処理が多少変わるものであると見做しても構わない。すなわち、ステップS3の処理の際に、上記展開順番対応表69、変数アドレス対応表70を生成する処理が加わる。また、ステップS4の処理では、例えば独自の規定によって図形要素の展開順番を決定する代わりに、展開順番対応表69を参照することで、ステップS3の処理における図形要素の展開順番と同じ順番で、図形要素の展開を行ってコンパイル処理を実現するものとなる。また、ステップS4の処理では、更に、変数アドレス対応表70を参照することで、ソースコードの各変数に割り付けるメモリアドレスを、ステップS3の処理の場合と同じにする。これら以外は、実施例1と略同様であって構わないので、ここでは特に説明しない。以上のことから、特に図示しないが、上記実施例2の開発支援装置60プログラミング装置、PLC80プログラマブルコントローラは、例えば下記の処理機能を有するものと考えても良い。まず、上記プログラミング装置開発支援装置60は、第一のコンパイラと第二のコンパイラとダウンロード部とを有するものと見做してもよい。第一のコンパイラは、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素の展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも上記各図形要素の展開順序を所定の記憶領域記憶部に記憶する。第二のコンパイラは、上記ソースコードを、上記記憶部に記憶された各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する。ダウンロード部は、上記第一の機械語オブジェクトと上記第二の機械語オブジェクトとを、プログラマブルコントローラにダウンロードする。そして、例えば、上記第一の機械語オブジェクトと上記第二の機械語オブジェクトの何れか一方は、通常のコンパイル処理によって生成される、デバッグ可能な機械語オブジェクトである非最適化機械語オブジェクトであり、他方は最適化コンパイル処理によって生成される、最適化された機械語オブジェクトである最適化機械語オブジェクトである。一方、上記プログラマブルコントローラPLC80は、通常時は上記最適化機械語オブジェクトを実行し、デバッグ時には上記非最適化機械語オブジェクトに切り替えて実行するプログラム実行部を有する。また、例えば、上記第一のコンパイラは、上記第一の機械語オブジェクト生成の際に、上記ソースコードから一旦中間言語を生成した後に該中間言語から上記第一の機械語オブジェクトを生成するものであって、該中間言語生成の際に上記各図形要素を展開順序の決定と上記記憶部への記憶を行う。また、例えば、上記第二のコンパイラは、上記第二の機械語オブジェクト生成の際に、上記ソースコードから一旦中間言語を生成した後に該中間言語から上記第二の機械語オブジェクトを生成するものであって、該中間言語生成の際に上記記憶部に記憶された上記各図形要素の展開順序を参照して該中間言語の生成を行う。また、例えば、上記第一のコンパイラは、更に、上記コンパイルの際にソースコードの各変数に割当てたメモリアドレスの情報を上記記憶部に記憶する。一方、上記第二のコンパイラは、上記コンパイルの際に更に、該記憶されたメモリアドレス情報を参照することで、上記各変数に上記第一のコンパイラと同じメモリアドレスを割当てる。また、例えば、上記プログラマブルコントローラは、更に下記の構成を有するものであってよい。すなわち、上記プログラマブルコントローラは、上記最適化機械語オブジェクトを保持する第一の記憶領域と、上記非最適化機械語オブジェクトを保持する第二の記憶領域と、上記最適化機械語オブジェクトの格納アドレスまたは上記非最適化機械語オブジェクトの格納アドレスを登録するアドレステーブルとを有する。そして、上記プログラム実行部は、例えば、該アドレステーブルに登録されている格納アドレスに応じて、上記最適化機械語オブジェクトと上記非最適化機械語オブジェクトの何れか一方を実行する。また、上記プログラマブルコントローラは、例えば、上記アドレステーブルに上記最適化機械語オブジェクトの格納アドレスを登録することで、上記プログラム実行部に上記最適化機械語オブジェクトを実行させる最適化機械語オブジェクト実行部と、上記プログラミング装置からのデバッグ指示に応じて上記アドレステーブルに上記非最適化機械語オブジェクトの格納アドレスを登録することで、上記プログラム実行部に上記非最適化機械語オブジェクトを実行させるデバッグ制御部とを更に有する。また、上記プログラマブルコントローラは、上記プログラミング装置から上記最適化機械語オブジェクト、上記非最適化機械語オブジェクトがダウンロードされると、受信した最適化機械語オブジェクトは上記第一の記憶領域内に格納すると共に該格納領域の先頭アドレスを上記テーブルに登録すると共に、受信した非最適化機械語オブジェクトは上記第二の記憶領域内に格納するオブジェクト転送部を更に有する。また、例えば、上記プログラミング装置は、上記デバッグ指示を上記プログラマブルコントローラへ送信すると共に、これに伴って、任意に設定された上記非最適化機械語オブジェクトの実行の停止位置を示すブレーク位置情報も上記プログラマブルコントローラへ送信するデバッグ指示部を更に有する。また、上記プログラマブルコントローラにおいて、例えば、上記デバッグ制御部は、上記デバッグ指示と共に上記ブレーク位置情報を受信すると、上記非最適化機械語オブジェクトにおいて、該ブレーク位置情報に応じた所定位置に、機械語オブジェクトの実行を停止するためのブレーク命令を挿入する。また、上記プログラム実行部は、上記非最適化機械語オブジェクトの実行中には、上記ブレーク命令の実行に伴い、該非最適化機械語オブジェクトの実行を停止すると共に該停止状態を上記プログラミング装置へ送信する。あるいは、上最適化機械語オブジェクトは、POU単位で前記第一の記憶領域に保持され、上記非最適化機械語オブジェクトも、POU単位で前記第二の記憶領域に保持され、上記プログラム実行部は、デバッグ時に、任意のPOUに関してのみ非最適化機械語オブジェクトに切り替えて実行する。これは、例えば、プログラミング装置側においてユーザが指定したPOUに関してのみ、その識別番号を含む上記図9のデバッグ情報がPLC側に送られることで、PLC側ではこのPOUに関してのみ、非最適化機械語オブジェクトに切り替えて実行する。以上説明したように、実施例2のプログラマブルコントローラシステムでは、プログラミング装置開発支援装置;ローダにおいて、2つのコンパイラによって通常の機械語オブジェクトと最適化機械語オブジェクトの両方を生成すると共に、その際にこれら2つのコンパイラで図形要素の展開順番を一致させることで、デバッグ時に逆コンパイル等を行なうことなく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行えることになる。"