説明

プログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ、プログラム、デバッグ方法

【課題】デバッグ時に逆コンパイル等を行う必要なく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行える。
【解決手段】開発支援装置60側では、コンパイラ62が、図形言語プログラムのソースコード66を入力してコンパイルすることで、最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68を生成する。このオブジェクト67生成の際の各図形要素の展開順序を展開順番対応表69に記憶しておき、オブジェクト68生成の際にはこの展開順番対応表69に記憶された展開順序に従ってコンパイルを行う。PLC80側では、通常時は最適化機械語オブジェクト67(84)を実行し、デバッグ時にはデバッグ可能機械語オブジェクト68(85)に切り替えて実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラマブルコントローラシステムに係わり、特にプログラムのデバッグ方法に関する。
【背景技術】
【0002】
従来、プログラマブルコントローラ(PLC)に係るシステムとして、例えば、プログラマブルコントローラ本体(PLC本体と記す)と、このPLC本体で実行するプログラム(特に各種制御対象機器の制御プログラム等;以下、PLCプログラムと記す)をユーザが任意に作成できるように支援する支援装置等から成るプログラマブルコントローラシステムが知られている。
【0003】
この様な支援装置(プログラミング装置)において、ユーザは、例えばニーモニック言語、あるいはラダー言語、FBD言語等の図形言語プログラムを用いて、任意のPLCプログラムを作成する。そして、作成されたPLCプログラムは、支援装置内でコンパイルされて機械語オブジェクトが生成される。支援装置は、この機械語オブジェクトを、PLC本体にダウンロードする。PLC本体は、ダウンロードされた機械語オブジェクトを記憶する。
【0004】
その後、PLC本体は、この機械語オブジェクトを実行して各種制御対象機器の制御等を行う。あるいは、PLC本体側で機械語オブジェクトを実行しつつ支援装置側でこれをモニタする形式のデバッグ(実機デバッグ等という)が行われる場合もある。
【0005】
上記PLC本体における制御処理等の高速化を図るため、上記支援装置におけるPLCプログラムのコンパイル時に最適化を行なう方法が提案されている。しかし、最適化された機械語オブジェクト(以降、最適化機械語オブジェクトと記す)は、最適化の際にプログラムの実行順序の変更や不要な変数など(ブレークポイント等も含まれる)の削除等が行われて成るものである為、ソースコード上でデバッグすることが困難となる。
【0006】
ここで、以下、上記最適化について説明しておく。
最近では、プログラムサイズの肥大化、システムの複雑化に伴い、ユーザアプリケーションの高速化が望まれており、ハードウェアだけでなくソフトウェア(コンパイラ)による高速化が実現されている。
【0007】
この様な最適化コンパイルの具体例を以下に示す。
例えば、まず「C=A+B」が実行され、続いて「F=(A+B)×D」が実行されるソースコードがあった場合、これをコンパイルすると、まず「C=A+B」に関しては最適化困難なため通常のコンパイルが行われ、下記の機械語オブジェクトが生成される。
【0008】
LD A
ADD B
ST C
次に、「F=(A+B)×D」関しては、最適化コンパイルが可能であり、コンパイルの結果、例えば(A+B)の部分が「LD C」となる。例えばこの様にして、不要な変数や演算の削除が行われる。この様にして作成された機械語オブジェクト(最適化機械語オブジェクト)は、その実行の際に、A+Bに係る演算を行う必要がなく、変数Cの値のロードを行えば済むので、処理の高速化が図れる。
【0009】
また、最適化コンパイルでは、ソースコードにブレークポイントが設定されている場合、これを削除する場合がある。
ここで、上記のように最適化機械語オブジェクトではソースコード上でデバッグすること(所謂“ソースコードレベルデバッグ/ソースコードデバッグ”)が困難となる問題に対して、例えば下記の従来技術が知られている。
【0010】
すなわち、従来、上記最適化機械語オブジェクトを入力し、この最適化機械語オブジェクトを逆コンパイルしてソースコードでデバッグするためのデバッグ用ソースコードを生成し、このデバッグ用ソースコードとシンボル情報などを用いてソースコード上でデバッグするようにしたソースコードレベルデバッグ装置が提案されている(例えば特許文献1参照)。
【0011】
また、特許文献2に記載の従来技術が知られている。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開平6−242942号公報
【特許文献2】特開2002−99312号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
しかしながら、上記特許文献1に記載の従来例にあっては、デバッグの都度、最適化機械語オブジェクトを逆コンパイルしてデバッグ用のソースコードを生成する必要があり、このため作業が煩雑になり、デバッグの効率がよくないという問題がある。
【0014】
また、上記ニーモニック言語の場合は問題ないが、上記ラダー言語、FBD言語等の図形言語プログラムの場合、コンパイルの際に各図形要素をどの順番でコンパイルするのかをコンパイラが決定するが、必ずしもユーザが意図した通りの順番で図形要素が展開されてコンパイルされるとは限らない。
【0015】
本発明の課題は、任意のソースコードに対して2つのコンパイラによって通常の機械語オブジェクトと最適化機械語オブジェクトの両方を生成すると共に、その際にこれら2つのコンパイラで図形要素の展開順番を一致させることで、デバッグ時に逆コンパイル等を行う必要なく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行えるようにするプログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ等を提供することである。
【課題を解決するための手段】
【0016】
本発明のPLCシステムは、プログラミング装置とプログラマブルコントローラとを有するPLCシステムであって、前記プログラミング装置は、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素の展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段とを有する。
【0017】
上記構成のPLCシステムにおいて、例えば、前記第一の機械語オブジェクトと前記第二の機械語オブジェクトの何れか一方は、通常のコンパイル処理によって生成される、デバッグ可能な機械語オブジェクトである非最適化機械語オブジェクトであり、他方は最適化コンパイル処理によって生成される、最適化された機械語オブジェクトである最適化機械語オブジェクトである。
【0018】
任意の図形言語プログラムのソースコードに対して、2種類のコンパイラ手段によって2種類の機械語オブジェクトを生成すると共に、その際の各図形要素の展開順序が同じくなるようにする。生成した2種類の機械語オブジェクトは、プログラマブルコントローラにダウンロードする。
【0019】
プログラマブルコントローラ側では、例えば通常時は上記最適化機械語オブジェクトを実行し、デバッグ時には上記非最適化機械語オブジェクトに切り替えて実行する。上記のように、コンパイルの際に各図形要素の展開順序が同じくなるようにしているので、2種類の機械語オブジェクトで相互に演算結果が異なるような事態にはならず、非最適化機械語オブジェクトに切り替えても問題なく動作する。
【発明の効果】
【0020】
本発明のプログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ等によれば、任意のソースコードに対して2つのコンパイラによって通常の機械語オブジェクトと最適化機械語オブジェクトの両方を生成すると共に、その際にこれら2つのコンパイラで図形要素の展開順番を一致させることで、デバッグ時に逆コンパイル等を行う必要なく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行えるようになる。
【図面の簡単な説明】
【0021】
【図1】プログラマブルコントローラシステムの構成例であって特にプログラミング装置の構成例である。
【図2】プログラマブルコントローラシステムの構成例であって特にプログラマブルコントローラの構成図である。
【図3】プログラマブルコントローラシステムの機能構成図である。
【図4】プログラミング装置における支援処理の一例を示すフローチャート図である。
【図5】メニュー画面の一例である。
【図6】プログラマブルコントローラにおけるオブジェクト展開処理の一例を示すフローチャート図である。
【図7】プログラマブルコントローラにおけるデバッグ制御処理の一例を示すフローチャート図である。
【図8】送信される機械語オブジェクトの構成例である。
【図9】デバッグ時に送信されるデバッグ情報の一例である。
【図10】機械語オブジェクトとアドレステーブルの展開を説明するための図である。
【図11】デバッグ時のアドレステーブルの展開状態を示す図である。
【図12】実施例2のプログラマブルコントローラシステムの機能構成例である。
【図13】実施例2のコンパイラの処理動作の一例を示す図である。
【図14】展開順番対応表の具体例を示す図である。
【図15】(a)〜(c)は、図形言語プログラムの具体例を示す図である。
【図16】(a)は通常時、(b)はデバッグ時のアドレステーブルの展開状態を示す図である。
【発明を実施するための形態】
【0022】
以下、図面を参照して、本発明の実施の形態について説明する。
図1、図2は、本例のプログラマブルコントローラシステムの構成例である。特に図1はプログラミング装置の詳細構成例を示し、図2はプログラマブルコントローラの詳細構成例を示すものである。
【0023】
図1、図2に示すように、本例のプログラマブルコントローラシステムは、任意の制御機器300を制御するものであって、プログラミング装置100、プログラマブルコントローラ(以下、PLC(プログラマブル・ロジック・コントローラ)という)200等を有する。プログラミング装置100とPLC200とは信号線400により接続されている。PLC200は、制御対象となる各種機器である制御機器300に接続されている。PLC200は、シーケンス制御プログラム等を実行して制御機器300を制御する。
【0024】
プログラミング装置100は、概略的には、ユーザが任意のシーケンス制御プログラム(そのソースコード)を作成するのを支援する機能や、作成されたソースコードをコンパイルして機械語オブジェクトを生成する機能や、生成した機械語オブジェクトを信号線400を介してPLC200にダウンロードする機能等を有する。
【0025】
上記ユーザが作成するシーケンス制御プログラム(ソースコード)は、通常、例えばニーモニック言語、あるいはラダー言語、FBD言語等の図形言語プログラムを用いて作成される。プログラミング装置100の機能については、詳しくは後述するものとする。
【0026】
プログラミング装置100のハードウェア構成例は、例えば図1に示すように、中央演算処理装置(CPU)101、内部メモリ104、記憶装置105、マウスやキーボード等である入力装置102、ディスプレイ等である表示器103、入出力インタフェース(I/O)106などから構成され、これらが共通バス107に接続されている。
【0027】
記憶装置105には、各種のデータが記憶されている。入力装置102は、オペレータによって外部から操作されるマウスやキーボード等からの入力イベントを、CPU101に通知する。また、記憶装置105には、予め、所定のアプリケーションプログラムが記憶されている。記憶装置105は、例えばハードディスク装置等である。
【0028】
表示器103は、例えば液晶ディスプレイ等からなり、例えば入力イベント等に応じて、各種データや画像を表示する。I/O106は、信号線400と接続している。CPU101は、I/O106、信号線400を介して、PLC200との通信(データの送受信)を行う。
【0029】
CPU101は、記憶装置105に記憶されている上記アプリケーションプログラムを、例えば内部メモリ104に読出し・実行することにより、各種処理機能(例えば後述する図3のユーザインタフェース部11やコンパイラ12の処理機能;あるいは例えば後述する図12のインタフェース機能部61やコンパイラ62の処理機能等)を実現する。これらについては、後に、図3や図12を参照して詳細に説明するが、ユーザインタフェース部11やインタフェース機能部61は、基本的には既存の処理機能であってよく、ユーザが任意のシーケンス制御プログラム(ソースプログラム)を作成するのを支援する処理機能である。このソースプログラムは、本例では上記の通り、例えばニーモニック言語、あるいはラダー言語、FBD言語等の図形言語を用いて作成されるものである。
【0030】
また、CPU101は、上記ユーザによってプログラミングされたシーケンス制御プログラム(ソースプログラム)をコンパイルして、PLC200側(後述する図2のCPU211)が直接実行可能な実行コード(機械語オブジェクト)に変換する処理機能も有する。この処理機能自体は、既存の処理であってよいが、コンパイラ12やコンパイラ62では、更に、後述する処理機能も有する。詳しくは後述する。
【0031】
また、CPU101は、PLC200に対する動作指示(コマンド/データ等;パラメータ等も含む場合もある)を、I/O106を介してPLC200に送信したり、PLC200で実行させる上記シーケンス制御プログラム(機械語オブジェクト)を、I/O106を介してPLC200にダウンロードする処理機能等も有する。
【0032】
尚、各種処理は、例えば記憶装置105から各種データを読み出しながら、あるいは記憶装置105に各種のデータを書き込みながら、実行されるものである場合もある。
上記シーケンス制御プログラムの実行コード(機械語オブジェクト)が、I/O106を介してPLC200にダウンロードされることにより、PLC200側の図2に示すCPUモジュール210は、ユーザプログラムメモリ213などに保持されていたシーケンス制御プログラムの実行コード(旧バージョン等)を、ダウンロードされた実行コード(新バージョン等)に更新することができる。
【0033】
PLC200のハードウェア構成例は、例えば図2に示すように、CPUモジュール210、入出力モジュール222等を有するものである。
このCPUモジュール210は、図2に示す例では、CPU211、システムプログラムメモリ(FLASH)212、ユーザプログラムメモリ(RAM)213、PLC固有バスインタフェース214、ユーザデータメモリ(RAM)215、システムワークメモリ(RAM)216、ドライバ/レシーバ217等を有し、これらがバス218に接続されている。
【0034】
また、CPUモジュール210は、PLC固有バスインタフェース214を介して、入出力モジュール222と接続される。入出力モジュール222は、制御機器300に接続されている。CPU211は、PLC固有バスインタフェース214、入出力モジュール222等を介して、制御機器300との通信(データ入出力)を行える。また、CPU211は、ドライバ/レシーバ217等を介して、プログラミング装置100との通信を行える。
【0035】
また、PLC200は、パワーオンまたはリセットスタート後、システムの初期化を経て、ユーザプログラムメモリ213に保持された上記シーケンス制御プログラム(実行コード;機械語オブジェクト)を、サイクリックに実行して、所定の制御周期で制御機器300の制御を行うように構成されている。
【0036】
図2に示す構成自体は、既存のPLCの一般的な構成であるので、これ以上詳細には説明しないが、例えばユーザプログラムメモリ213には、予め所定のアプリケーションプログラムが記憶されており、CPU211がこのアプリケーションプログラムを読出し・実行することにより、例えば図3に示す各種機能部(オブジェクト展開部25、デバッグ制御部26、プログラム実行部27など)の処理が実現される。また、図3のアドレステーブル24は、例えばユーザデータメモリ215に記憶されるものであるが、この例に限らない。
【0037】
図3は、上記プログラマブルコントローラシステムの機能構成図である。
プログラミング装置100(プログラミングローダ)は、上記の通り、ユーザによって任意のプログラム・ソースコード(上記シーケンス制御プログラムのソースプログラム等)を作成させる支援機能(図示のユーザインタフェース部11)や、このソースコードを機械語オブジェクトに変換するコンパイル機能(図示のコンパイラ12)を備える。
【0038】
プログラミング装置100によってコンパイルされて生成される上記機械語オブジェクト(実行コード)は、PLC200などのターゲットにダウンロードされる(不図示のダウンロード機能によるものとする)。
【0039】
ユーザは、ユーザインタフェース部11によって、ニーモニック言語、あるいはラダー言語、FBD言語等の図形言語で、任意のシーケンス制御プログラム(ソースコード)を記述・作成する。ユーザインタフェース部11は、作成されたソースコードをコンパイラ12に渡す。
【0040】
コンパイラ12は、渡されたソースコードをコンパイルして2種類の機械語オブジェクトを生成して記憶する。すなわち、コンパイラ12は、渡されたソースコードをコンパイルして、最適化機械語オブジェクト13を生成・出力すると共に、非最適化機械語オブジェクト15も生成・出力し、これらを不図示の記憶領域に格納する。その後、これら最適化機械語オブジェクト13および非最適化機械語オブジェクト15は、それぞれ通信部14を介してPLC200へダウンロードされる。
【0041】
最適化機械語オブジェクト13は、上記背景技術で説明した通りであり、最適化の際にプログラムの実行順序の変更や不要な変数の削除等が行われて成るものである。一方、非最適化機械語オブジェクト15は、最適化が行われない、通常のコンパイルによって生成される機械語オブジェクトであり、従って上記実機デバッグによるソースコードレベルデバッグが可能となるものである。
【0042】
PLC200にダウンロードされるデータパケット(機械語オブジェクト含む)は、図8に示すように、識別番号41、種別42、機械語オブジェクト(機械語オブジェクト本体)43で構成される。
【0043】
識別番号41は、例えばコンパイラ12が、上記生成した機械語オブジェクト(最適化機械語オブジェクト13および非最適化機械語オブジェクト15)に付与する任意の番号(例えばシリアル番号等であってよい)であり、ソースコードに対して一意に識別するための識別子である。これは、例えば、同一のソースコードから生成された最適化機械語オブジェクト13と非最適化機械語オブジェクト15は、その識別番号が同一となるようにする。あるいは、識別番号は、各ソースコード(特にPOU)毎に固有のユニークなIDであり、これより、任意のソースコードから生成される機械語オブジェクトには(それが最適化であっても非最適化であっても)生成元のソースコードの識別番号が付与されるものと考えても良い。これによって、例えば後に図10、図11で説明する例のようになる(詳しくは後述する)。
【0044】
機械語オブジェクト43は、上記コンパイラ12によって生成された機械語オブジェクトそのものであり、最適化機械語オブジェクト13または非最適化機械語オブジェクト15である。
【0045】
種別42は、機械語オブジェクト43が上記最適化機械語オブジェクト13と非最適化機械語オブジェクト15のどちらであるのかを示す種別コードである。ここでは、機械語オブジェクト43は、種別42=‘1’の場合には最適化機械語オブジェクト13であり、種別42=‘2’の場合には非最適化機械語オブジェクト15であるものとする。
【0046】
尚、後に図10、図11に示すように、上記データパケットには基本的に、同一のソースコードから生成された最適化機械語オブジェクト13と非最適化機械語オブジェクト15の両方が格納されるものである。
【0047】
尚、プログラミング装置100−PLC200間の通信は、図示の通信部14、通信部21を介して行われる。
一方、PLC200は、図3に示すオブジェクト展開部25、デバッグ制御部26、プログラム実行部27等の各種機能部を有する。
【0048】
上記オブジェクト展開部25は、プログラミング装置100が送信した上記データパケットを通信部21により受信すると、このデータパケットの種別42が‘1’である場合には、その機械語オブジェクト43を最適化機械語オブジェクト22としてユーザプログラムメモリ213に格納する。一方、受信した上記データパケットの種別42が‘2’である場合には、その機械語オブジェクト43を非最適化機械語オブジェクト23としてユーザプログラムメモリ213に格納する。また、オブジェクト展開部25は、上記最適化機械語オブジェクト22のユーザプログラムメモリ213上での格納アドレス(格納領域の先頭アドレスなど)を、アドレステーブル24に書き込む(詳細は後述する)。
【0049】
また、PLC200は、機械語オブジェクトを順次実行するプログラム実行部27を有し、このプログラム実行部27は、アドレステーブル24に保持されたアドレスデータ(通常は上記最適化機械語オブジェクト22の格納アドレス)を参照して、該アドレスデータを間接アドレス指定して、そのアドレス先に保持された機械語オブジェクトを実行するように構成されている。
【0050】
プログラム実行部27は、たとえば不図示のプログラム実行管理部によって所定の周期毎に呼び出されることで(コールされて)、前述のようにサイクリックに制御を実行するが、この例に限らない。上記の通り、通常時(PLC運用時)には、アドレステーブル24には最適化機械語オブジェクト22の格納アドレスが書き込まれているため、プログラム実行部27は最適化機械語オブジェクト22を実行することになる。
【0051】
一方、デバッグ時には、プログラミング装置100からデバッグ開始通知が送信されてくる。このデバッグ開始通知を受信したPLC200は、デバッグ制御部26によって、アドレステーブル24のアドレスデータを、非最適化機械語オブジェクト23の格納アドレス(格納領域の先頭アドレスなど)に書き換える。よって、デバッグ時には、プログラム実行部27が、上記のようにアドレステーブル24のアドレスデータを参照して機械語オブジェクトを実行すると、非最適化機械語オブジェクト23を実行することになる。
【0052】
その後、デバッグの終了時には、プログラミング装置100からデバッグ完了通知が送信されてくる。このデバッグ完了通知を受信したPLC200は、デバッグ制御部26によって、アドレステーブル24のアドレスデータを、最適化機械語オブジェクト22の格納アドレスに書き換える。つまり、通常時の状態(最適化機械語オブジェクト22が実行される状態)に戻すものである。
【0053】
このようにして、PLC200は、通常時とデバッグ時とで、実行する機械語オブジェクトとを切り替えている。つまり、通常時には最適化された機械語オブジェクトを実行し、デバッグ時には最適化されない(デバッグ可能な)機械語オブジェクトを実行する。
【0054】
すなわち、通常時は最適化機械語オブジェクト22の格納アドレスをアドレステーブル24に登録し、デバッグ時には非最適化機械語オブジェクト23の格納アドレスをアドレステーブル24に登録することにより、通常時とデバッグ時とで機械語オブジェクトを切り替えて実行することができる。これによって、通常時は最適化機械語オブジェクトを実行するPLC200のデバッグ作業が極めて容易になる。詳しくは後述する。
【0055】
ここで、プログラミング装置100の具体的な処理例について説明する。
図4は、プログラミング装置における支援処理の一例を示すフローチャート図である。
尚、図4の処理は、プログラミング装置100において図3には示していない不図示の全体制御部が行うものとして説明する。
【0056】
図4に示す処理例では、上記全体制御部は、まず、所定の処理メニューを表示する(ステップS1)。これは、任意のソースコードが作成される毎に表示してもよいし、ユーザの指示に応じて表示してもよい。
【0057】
図5は、この処理メニューの一例である。
図5の例の処理メニュー画面上には、少なくとも、コンパイル開始ボタン31、デバッグ開始ボタン32、終了ボタン33、デバッグ終了ボタン34の各種コマンドボタンが配置されている。ユーザがマウス、キーボード等の入力装置102を操作して、これらボタン31〜34のうちの任意のボタンを選択することで、所望のコマンドを選択・指定することができる。
【0058】
そして、上記全体制御部は、コンパイル開始ボタン31が選択されたか否かを判定する(ステップS2)。もし、コンパイル開始ボタン31が選択されていない場合には(ステップS2,NO)、続いて、デバッグ開始ボタン32が選択されたか否かを判定する(ステップS6)。
【0059】
コンパイル開始ボタン31が選択された場合には(ステップS2,YES)、ステップS3〜S5の処理を実行する。すなわち、まず、ソースコードを最適化コンパイルして最適化機械語オブジェクト13を生成する(ステップS3)。また、ソースコードを最適化せずにコンパイルして(通常のコンパイルを行って;非最適化コンパイルと言う場合もあるものとする)、通常の(デバッグ可能な)機械語オブジェクトとしての非最適化機械語オブジェクト15を生成する(ステップS4)。そして、生成した最適化機械語オブジェクト13及び非最適化機械語オブジェクト15を、通信部14を介してPLC200にダウンロードする(ステップS5)。そして、ステップS6へ移行する。
【0060】
ここで、プログラミング装置100における上記コンパイラ12は、例えば、最適化用のコンパイラと非最適化用のコンパイラの2つのコンパイラから成るものと見做してもよい。この例の場合、上記ステップS3では最適化用のコンパイラが動作し、上記ステップS4では非最適化用のコンパイラが動作することになる。
【0061】
あるいは、上記コンパイラ12は、例えば、上記ステップS3の最適化コンパイル機能と、上記ステップS4の非最適化コンパイル機能の2つの機能を有するものと見做してもよい。この例では、当然、コンパイラ12は、最適化する機能によってステップS3の処理を行って最適化機械語オブジェクト13を生成し、最適化しない機能によってステップS4の処理を行って非最適化機械語オブジェクト15を生成することになる。但し、本質的には、この様な2つの機能を有するものは、上記2つのコンパイラから成るものと同じであると見做すことができる。
【0062】
尚、上記2つの機能の例の場合、上記全体制御部は、例えばコンパイラ12に対して所定のパラメータを与えることで、上記2つの機能(モード)を切り替えさせるようにしてもよい。つまり、例えば、最適化モードのパラメータをコンパイラ12に与えることでステップS3の処理を実行させ、非最適化モードのパラメータをコンパイラ12に与えることでステップS4の処理を実行させる。
【0063】
上述したように、2つのコンパイラによって、あるいは1つのコンパイラをモードを切り替えて使用することで、最適化機械語オブジェクト13及び非最適化機械語オブジェクト15が、生成されることになる。
【0064】
尚、最適化機械語オブジェクト13及び非最適化機械語オブジェクト15には、ソースコードに対して一意に識別するための上記識別番号が付与され、この識別番号とソースコードとの対応が容易に管理されるように、所定に対応表(不図示)が、上記コンパイル時に作成されるようにしてもよい。
【0065】
次に、ステップS6以降の処理について説明する。
まず、上記の通り、ステップS6では、デバッグ開始ボタン32が選択されたか否かを判定する。
【0066】
そして、デバッグ開始ボタン32が選択されたものではない場合には(ステップS6,NO)、ステップS13に移行して、本処理(支援処理)を終了するか否かを判定する。この判定は、例えば、上記図5の処理メニューの終了ボタン33が選択されたか否かを判定するものであり、もしユーザが終了ボタン33を選択操作したならば(ステップS13,YES)、本処理は終了する。一方、未だ終了ボタン33が操作されないならば(ステップS13,NO)ステップS1に戻る。
【0067】
一方、ユーザによってデバッグ開始ボタン32が選択されたならば(ステップS6,YES)、ステップS7〜S12の処理を実行する。
すなわち、まず、デバッグ時にPLCの処理を停止させるべき箇所(ユーザが任意に決める;通常、複数個所となる)に、それぞれ、“ブレークポイント”を設定させる(ステップS7)。これは、例えば不図示のブレークポイント設定画面を表示する等して、この画面上でユーザに所望の“ブレークポイント”箇所を設定させる。
【0068】
尚、“ブレークポイント”の設定については後述するが、“ブレークポイント”とは、ソースコードにおける任意の位置に相当する箇所でプログラム実行を一時中止(一旦停止)させるための一種のマーカー(識別子)であり、その実現方法はどの様な形式であっても構わない。以降の説明では、一例として、ブレークポイント処理コード(ブレーク命令)を挿入する方法を用いるものとする。
【0069】
続いて、PLC200に対してデバッグ開始通知を送信する(ステップS8)。尚、このデバッグ開始通知には、例えば後述する図9のデバッグ情報(デバッグ対象となる機械語オブジェクトと“ブレークポイント”箇所の情報)が付加される。
【0070】
そして、このデバッグ開始通知に対してPLC200から処理完了通知が返信されてくるまで待機し、この処理完了通知を受信したら(ステップS9、YES)ステップS10へ移行する。尚、上記処理完了通知は、PLC200側でブレークポイント処理コードの挿入処理(後述する)が完了したこと(PLC200側で準備完了したこと)を意味する通知である。
【0071】
ステップS10の処理は、“実機デバッグ”の為の既存の処理であり、ここでは特に詳細には説明しないが、例えばPLC200の状態を表示して(例えばPLC200がブレークしたときのステータス表示等)デバッグを行うための処理である。ユーザは、例えば各ブレークポイント毎のステータス表示を参照しながら所定のデバッグ作業を行い、デバッグ作業が完了したならば、図5のデバッグ終了ボタン34を操作する。これにより、デバッグ処理終了と判定し(ステップS11,YES)、ステップS12の処理へ移行する。
【0072】
ステップS12の処理では、デバッグ完了通知を通信部14を介してPLC200へ送信する。そして、上記ステップS13の判定処理を行う。
一方、PLC200は、例えば図6や図7に示す処理を実行する。
【0073】
図6は、プログラマブルコントローラにおけるオブジェクト展開処理の一例を示すフローチャート図である。
図7は、プログラマブルコントローラにおけるデバッグ制御処理の一例を示すフローチャート図である。
【0074】
まず、図6の処理について説明する。尚、図6の処理は、上記オブジェクト展開部25の処理であると見做してもよい。上記ステップS5の処理によってプログラミング装置100側から機械語オブジェクトがダウンロードされると、図6の処理が実行される。
【0075】
すなわち、まず、受信した機械語オブジェクトが、最適化されたものであるか否かを判定する(ステップS20)。これは既に述べたように、受信パケットの種別42を参照して判定する。つまり、種別42が‘1’である場合には最適化されたものであると判定して(ステップS20,YES)ステップS21へ移行する。種別42が‘2’である場合には最適化されたものではないと判定して(ステップS20,NO)ステップS23へ移行する。
【0076】
ステップS21では、受信パケットの機械語オブジェクト43を最適化機械語オブジェクト22としてユーザプログラムメモリ213に格納する。これは、例えば、受信した機械語オブジェクト43を、ユーザプログラムメモリ213内の不図示の最適化機械語オブジェクト保存領域(予め決められている;保存領域αとする)内の任意の格納領域に転送・格納するものである。更に、受信パケットの識別番号41と上記機械語オブジェクト43の転送先アドレス(格納アドレス;保存領域α内の格納領域の先頭アドレス等)とを対応付けて、不図示のバックアップ領域に記憶するようにしてもよい。
【0077】
上記ステップS21の処理に続いて、最適化機械語オブジェクトである上記機械語オブジェクト43の転送先アドレス(格納アドレス;上記保存領域α内の格納領域の先頭アドレス等)を、アドレステーブル24に書き込む(ステップS22)ことで、本処理を終了する。
【0078】
一方、上記のようにステップS20の判定がNOの場合にはステップS23を実行する。ステップS23では、受信パケットの機械語オブジェクト43を非最適化機械語オブジェクト23としてユーザプログラムメモリ213に格納する。これは、例えば、機械語オブジェクト43を、ユーザプログラムメモリ213内の不図示の非最適化機械語オブジェクト保存領域(予め決められている;保存領域βとする)内の任意の格納領域に転送・格納するものである。更に、受信パケットの識別番号41と上記機械語オブジェクト43の転送先アドレス(格納アドレス;保存領域β内の格納領域の先頭アドレス等)とを対応付けて、不図示のバックアップ領域に記憶するようにしてもよい。
【0079】
次に、以下、図7のデバッグ制御処理について説明する。尚、図7の処理は、上記デバッグ制御部26の処理であると見做してもよい。
図7の処理は、上記ステップS7やS8の処理に伴ってプログラミング装置100側から送られてくるデバッグ開始通知(上記の通り、デバッグ情報(一例を図9に示す)が付加されている)を受信することで開始する。図9に示す例では、デバッグ情報は、識別番号51とブレーク位置52から成る。識別番号51は、上記識別番号41と同様であるが、ここでは特にデバッグ対象のソースコードに対応する機械語オブジェクトを示すIDを意味する。ブレーク位置52は、例えば上記ステップS7で設定されたブレークポイントの位置を示す情報であり、複数あってもよい。
【0080】
デバッグ制御部26は、上記受信したデバッグ情報に基づいて、まず、上記不図示のバックアップ領域を参照することで、上記識別番号51に対応する非最適化機械語オブジェクト23の格納アドレス(保存領域β内の格納領域の先頭アドレス等)を取得する。そして、この格納アドレスをアドレステーブル24に上書きする(ステップS30)。これによって、プログラム実行部27が最適化機械語オブジェクト22を実行する状態から、非最適化機械語オブジェクト23を実行する状態へと切り換わる。
【0081】
続いて、上記ブレーク位置52を参照してブレークポイントの位置を認識し、認識した位置にブレークポイント処理コード(ブレーク命令)を挿入する(ステップS31)。そして、挿入処理が終了したか否かを判定する(ステップS32)。つまり、ブレーク位置52は複数あってもよいので、未処理のブレーク位置52がある場合には挿入処理は未終了と判定して(ステップS32,NO)ステップS31に戻り、未処理のブレーク位置52に関して上記ブレークポイント処理コードを挿入する処理を行う。
【0082】
そして、全てのブレーク位置52に関して挿入処理が終了したならば(ステップS32,YES)、上記“処理完了通知”を通信部21を介してプログラミング装置100に送信する(ステップS33)。
【0083】
その後は、特に図示・説明は行わないが、PLC200において、上記ステップS10のデバッグ処理に係る既存の処理(プログラム実行部27による非最適化機械語オブジェクト23の実行とブレークポイントにおける停止およびそのときの状態をプログラミング装置100へ送信するなど)が実行される。
【0084】
一方、デバッグ制御部26自体は、プログラミング装置100から上記デバッグ完了通知が送られてくるまで待機する(ステップS34)。そして、プログラミング装置100からの上記デバッグ完了通知を受信したならば(ステップS34,YES)、アドレステーブル24の格納内容を、最適化機械語オブジェクト22の格納アドレスに変更して、本処理を終了する。
【0085】
上記本例のプログラマブルコントローラシステムについて、以下、具体例を用いて更に詳細に説明する。
プログラミング装置100を使用してPLC200に機械語オブジェクトをダウンロードする為には、ユーザは、まず、プログラミング装置100のユーザインタフェース部11の上記機能によって、ニーモニック言語、あるいはラダー言語、FBD言語等の図形言語で記述した、制御プログラムのソースコードを作成する。次に、ユーザは、作成したソースコードをコンパイルさせて機械語オブジェクトを生成させる。これは、例えば、プログラミング装置100の表示器103に上記図5の処理メニュー画面を表示させて、上記コンパイル開始ボタン31を選択・指示することで実現させる。この指示に応じて、コンパイラ12は、上記ソースコードをコンパイルして上記最適化機械語オブジェクト13を生成し、これを不図示の記憶領域に格納する。
【0086】
最適化機械語オブジェクト13は、例えばソースコードの実行順序の変更、レジスタの有効活用等が行われてコードサイズが縮小された(すなわち、最適化された)機械語オブジェクトである。最適化機械語オブジェクト13は、例えばPOU(Program Organization Unit)毎に生成される。POUとは、プログラム構成単位であり、PLC200の言語要素である。尚、POUの種類は、アプリケーションプログラム、ファンクションブロック等があり、C言語における関数に相当するものである。
【0087】
また、コンパイラ12は、上記コンパイルの際、更に非最適化機械語オブジェクト15も生成し、これを不図示の記憶領域に格納する。非最適化機械語オブジェクト15は、上記のような最適化が行われていない機械語オブジェクトである(つまり、通常のコンパイル処理によって生成される通常の機械語オブジェクトであり、当然、ソースコードレベルの実機デバッグが可能となるものである)。非最適化機械語オブジェクト15も、POU毎に生成される。
【0088】
プログラミング装置100は、上述したコンパイル処理が終了すると、上記生成した2種類の機械語オブジェクト(最適化機械語オブジェクト13と非最適化機械語オブジェクト15)を、通信部14を介してPLC200へダウンロードする。
【0089】
このとき、既に述べたように例えば図8に示すように、各POU毎の機械語オブジェクトは、それぞれ、その機械語オブジェクト(本体)43に、上記識別番号41及び種別42が付加されて、PLC200へダウンロードされる。
【0090】
識別番号41及び種別42に関しては既に述べた通りであり、識別番号はソースコード毎に与えられるものと見做してよいが、ここではソースコードはPOU単位で扱うものとする。従って、ここでは識別番号は各POUに固有の識別用IDであると見做してもよい。これより、本例では、任意の1つのPOUについて生成された2つの機械語オブジェクト(最適化機械語オブジェクト13と非最適化機械語オブジェクト15)には、同一の識別番号(そのPOUの識別番号)が与えられる。
【0091】
PLC200は、プログラミング装置100からのデータパケット(上記機械語オブジェクト(本体)43に、上記識別番号41及び種別42が付加されたパケット)を受信すると、その機械語オブジェクト43をユーザプログラムメモリ213に格納すると共に、それが最適化された機械語オブジェクトである場合には、その格納アドレスをアドレステーブル24に登録する。
【0092】
ここで、例えば図10に示すように、受信したデータパケット55が、4つの機械語オブジェクト(55a,55b,55c,55d)を含むものであったとする。図10に示すように、これら4つの機械語オブジェクト(55a,55b,55c,55d)それぞに、上記識別番号41及び種別42が付加されている。
【0093】
ここでは仮に図10に示すように、機械語オブジェクト55a、55bは、種別42=‘1’(つまり最適化機械語オブジェクト)であり、機械語オブジェクト55c、55dは、種別42=‘2’(つまり非最適化機械語オブジェクト)であるものとする。また、機械語オブジェクト55aと55cとが同じPOUから生成されたものであり、同一の識別番号(識別番号1)が与えられている。同様に、機械語オブジェクト55bと55dとが同じPOUから生成されたものであり、同一の識別番号(識別番号2)が与えられている。
【0094】
また、ここでは、ユーザプログラムメモリ213における上記最適化機械語オブジェクト保存領域(保存領域α)は、0番地〜7FFF番地であり、非最適化機械語オブジェクト保存領域(保存領域β)は、8000番地以降であるものとする。
【0095】
以上の具体例の場合、上記データパケット55を受信したPLC200は、まず、上記の通り機械語オブジェクト55a、55bは最適化機械語オブジェクトであると判別するので、これらを上記最適化機械語オブジェクト保存領域(保存領域α)に転送・格納する。これは、例えば識別番号41を参照して識別番号順に(例えば番号が若い順に)格納するが、この例に限らない。また、本例では1000番地区切りで管理するものとする。これより例えば図10に示すように、機械語オブジェクト55aは先頭アドレス=0番地の領域に格納され、機械語オブジェクト55bは先頭アドレス=1000番地の領域に格納される(そして、通常は空き領域が生じることになる)。
【0096】
更に、これら各格納領域の先頭アドレス(0番地と1000番地)を、図示のように、アドレステーブル24に登録する。すなわち、アドレステーブル24の識別番号1用のアドレス欄には「0000」番地が格納され、識別番号2用のアドレス欄には「1000」番地が格納される。また、これら各格納領域の先頭アドレス(0番地と1000番地)は、その格納領域に格納された機械語オブジェクトの識別番号と対応付けされて、不図示のバックアップ領域に記憶される。
【0097】
一方、上記の通り機械語オブジェクト55c、55dは非最適化機械語オブジェクトであると判別されるので、これらを上記非最適化機械語オブジェクト保存領域(保存領域β)に転送・格納する。これも、例えば識別番号41を参照して識別番号順に(例えば番号が若い順に)格納するが、この例に限らない。これより例えば図10に示すように、機械語オブジェクト55cは先頭アドレス=8000番地の領域に格納され、機械語オブジェクト55dは先頭アドレス=9000番地の領域に格納される。
【0098】
また、これら各格納領域の先頭アドレス(8000番地と9000番地)は、その格納領域に格納された機械語オブジェクトの識別番号と対応付けされて、不図示のバックアップ領域に記憶される。但し、これらは非最適化機械語オブジェクトであるので、上記アドレステーブル24への登録は行われない(後に、デバッグ処理の際に一時的に登録される)。
【0099】
尚、図示のように、機械語オブジェクト55aと55cは両方とも識別番号が‘1’である。これは、同一のPOUについて最適化コンパイルしたことで機械語オブジェクト55aが生成され、非最適化コンパイルしたことで機械語オブジェクト55cが生成されたことを意味する。これは機械語オブジェクト55bと55d(両方とも識別番号が‘2’)についても同様である。
【0100】
上述したように、PLC200は、受信した複数の機械語オブジェクトを、最適化機械語オブジェクトと非最適化機械語オブジェクトとに分類したうえで、それぞれの保存領域(α、β)に例えば識別番号順に格納する。
【0101】
その後、PLC200は、アドレステーブル24を参照して制御プログラム(機械語オブジェクト)を実行する。すなわち、アドレステーブル24を参照して、該アドレステーブル24のアドレスデータを間接アドレス指定して、機械語オブジェクトを実行する。通常時は、アドレステーブル24には上記のように最適化機械語オブジェクト22の格納アドレス(格納領域の先頭アドレス)が登録されているので、PLC200は最適化機械語オブジェクト22を実行することになり、高速化が図られている。
【0102】
一方、ユーザは、デバッグを行う場合には、上記のようにプログラミング装置100のメニュー画面上でデバッグ開始ボタン32を選択・指定することで、デバッグ処理を開始させる。ユーザは、まず、所望のソースコードにブレークポイントを設定する。つまり、所望のソースコードをオープンして、任意の箇所(行など)にブレークポイントを設定する(複数個所に設定してもよい)。但し、このソースコードは、新規のものではなく、既にコンパイル済みでありその機械語オブジェクトをPLC200へダウンロード済みであるプログラムのソースコードである。
【0103】
尚、上記識別番号は、ソースコードの識別用IDであるものとする例に限らず、例えばソースコードをコンパイルして機械語オブジェクトを生成したときに、この機械語オブジェクトに対して生成・付与するものとしてもよい。但し、この場合でも既に述べた通り、同じソースコードから複数の(2つの)機械語オブジェクトが生成される場合には、この複数の(2つの)機械語オブジェクトには同一の識別番号が付与されることになる。
【0104】
ここで、プログラミング装置100は、上記ソースコードをコンパイルした際に、そのファイル名(ソースコード名)と、これをコンパイルして得た機械語オブジェクトの識別番号とを対応付けるテーブル(不図示;ソースコード識別番号対応テーブルというものとする)を、不図示の記憶領域に保持している。これより、ユーザによって開かれているソースコードのソースコード名に対応する機械語オブジェクトの識別番号を、このソースコード識別番号対応テーブルを参照することで獲得できる。
【0105】
そして、獲得した識別番号と上記ユーザによるブレークポイント設定内容に基づいて、上記図9に示すデバッグ情報を生成する。すなわち、プログラミング装置100は、上記ユーザによって指定されたブレークポイントの位置(行など)を認識して、これを図9のデバッグ情報のブレーク位置52とすると共に、上記獲得した識別番号を識別番号51とするデバッグ情報を生成する。そして、このデバッグ情報をPLC200へ送信する。
【0106】
但し、上述したことは一例であり、識別番号は予め各POU毎に付与されているものであってもよい。
図11に示す例では、上記デバッグ情報は、識別番号51=‘2’であり、ブレーク位置52=‘2’となっている。
【0107】
ここで、従来からある既存技術として、コンパイラは、例えばソースコードがニーモニック言語等である場合(換言すれば、図形言語プログラムではない場合)、ソースコードをコンパイルすることで、ソースコードの各行が、機械語オブジェクトのどの位置(どの行;但し、1対1の関係とは限らない)に変換されたのかを記録している。つまり、ソースコードの各行と、機械語オブジェクトの各位置(各行)との関連付けが可能となっている。
【0108】
これより、プログラミング装置100において、ソースコードにおける上記ユーザによるブレークポイント設定位置(行)に対応する機械語オブジェクト上の位置(行)が分かるので、これを上記ブレーク位置52とすることになる。よって、上記図11の例のように、ブレーク位置52=‘2’となっている場合、これはソースコード上におけるブレークポイント設定位置に対応する機械語オブジェクト上の位置が、2行目であることを意味している(尚、ソースコード上におけるブレークポイント設定位置は、図11だけを見ても分からない。例えば1行目かもしれないし2行目かもしれない)。
【0109】
また、上記のことは、ソースコードがニーモニック言語等である場合に限らず、図形言語プログラムである場合も、略同様である。すなわち、プログラミング装置100は、ユーザが任意の図形言語プログラム(ソースコード)上の任意の位置(図形)にブレークポイントを設定すると、この位置(図形)に対応する機械語オブジェクト上の位置(行)が分かるので、これを上記ブレーク位置52とすることになる。これは、例えば、任意の図形言語プログラム(ソースコード)を、一旦、中間コードに変換するが、その際、図形はある一定の規則で中間コードに変換できるので、図形の位置と、その図形が変換された中間コードの位置(行)とをコンパイラ12が記録できる。よって、この図形言語プログラム(ソースコード)上にブレークポイント設定されていた場合、ソースコード上におけるブレークポイント設定位置(図形)に対応する中間コード上の位置(行)も、分かることになる。
【0110】
よって、この様な中間コード上のブレークポイント位置(行)を記録しておけば、後は、この中間コードを機械語オブジェクトに変換する際に、上記ニーモニック言語等の場合と略同様にして、機械語オブジェクト上でのブレークポイント位置(行)が分かるので、これを上記ブレーク位置52とすることになる。
【0111】
PLC200は、この例のようなデバッグ情報を受信した場合、まず、その識別番号51=‘2’に応じて、アドレステーブル24における識別番号‘2’用アドレス欄に保持されたアドレス「1000」を、識別番号=‘2’の非最適化機械語オブジェクトである非最適化機械語オブジェクト55dが格納されたアドレスを指すように更新する(つまり、「9000」に更新する)。尚、このアドレス「9000」は、上記不図示のバックアップ領域を参照することで取得できる。上記の通り、上記ダウンロードされた非最適化機械語オブジェクトを保存領域βに転送・格納する際に、上記不図示のバックアップ領域に各非最適化機械語オブジェクトに関してその識別番号に対応付けてその格納アドレスが記憶されているので、これを参照することで、識別番号=‘2’に対応する格納アドレス(ここでは「9000」)が取得できる。
【0112】
PLC200は、このようにしてアドレステーブル24における識別番号‘2’用アドレス欄を更新したら、続いて、上記識別番号‘2’の非最適化機械語オブジェクト55dにおいて、上記デバッグ情報のブレーク位置52によって示される箇所(行)に、ブレークポイント処理コード(ブレーク命令)を挿入する。図11に示す例ではデバッグ情報のブレーク位置52は‘2’であるので、非最適化機械語オブジェクト55dの2行目にブレークポイント処理コードを挿入する。但し、ブレーク位置52は1つとは限らず、複数個所あってもよく、それぞれについて該当する箇所(行)にブレークポイント処理コードを挿入する。
【0113】
そして、全ての該当箇所にブレークポイント処理コードを挿入したら、上記処理完了通知をプログラミング装置100へ送信する。
その後、PLC200のプログラム実行部27は、識別番号‘2’のPOUに関しては、非最適化機械語オブジェクト23(ここでは55d)を実行することになる。そして、このオブジェクト55dを実行中に、ブレークポイント処理コード(上記例では2行目に挿入されている)を実行した時点で、当該オブジェクト55dの実行を停止し、待機状態となる。そして、例えば、プログラムをブレーク(停止)したこと、及び所定のデータ(たとえばCPU211のレジスタ値や入出力モジュール222の入出力データなど)を、プログラミング装置100へ送信する。
【0114】
尚、上記の通り、非最適化機械語オブジェクト23を実行するのは識別番号‘2’のPOUに関するものだけであり、それ以外のPOUに関しては引き続き最適化機械語オブジェクト22を実行することになる。
【0115】
プログラミング装置100は、PLC200からの上記処理完了通知を受信した後は、例えば、PLC200から上記ブレーク時に送信される上記所定のデータ等の受信待ち状態となり、上記所定のデータ等を受信する毎に、このデータ(上記レジスタ値や入出力データなど)を表示器103に表示することで、ユーザにブレーク状態を通知する(デバッグ処理)。そして、ユーザは、デバッグ作業終了の際には上記デバッグ終了ボタン34を選択・操作するので、これに応じてプログラミング装置100は上記デバッグ完了通知をPLC200へ送信する。
【0116】
上記デバッグ完了通知を受信したPLC200は、アドレステーブル24の格納内容を、デバッグ時用から通常用へ切り替える。すなわち、アドレステーブル24における識別番号‘2’用アドレス欄に保持されている上記アドレス「9000」を、元のアドレス「1000」に戻す。これによって、識別番号‘2’のPOUに関して、最適化機械語オブジェクト22(55b)が実行される状態に戻る。PLC200は、更に、識別番号‘2’の非最適化機械語オブジェクト23(55d)に挿入されたブレークポイント処理コードを削除する。上記の例では、非最適化機械語オブジェクト55dの2行目に挿入されていたブレークポイント処理コードを削除する。このようにして、PLC200は、デバッグ状態から運用状態(通常時)に復帰する。これは、本例では、識別番号‘2’のPOUに関しては最適化機械語オブジェクト22の実行を再開し、それ以外のPOUに関しては引き続き最適化機械語オブジェクト22を実行することになる。
【0117】
尚、PLC200には、通常、複数のPOUに対応する機械語オブジェクトが実装され、これら複数の機械語オブジェクトが連携して動作することで所定の制御処理が実行されるように構成されているため、運用状態からデバッグ状態への切り替えの際のアドレステーブル24へのアドレスデータの登録や、デバッグ状態から運用状態に復帰する際のアドレステーブル24へのアドレスデータの登録は、PLC200が制御機器300を制御するための制御周期に同期して実行することが望ましい。
【0118】
以上説明した実施の形態を、実施例1とする。
ここで、上記実施例1のようにプログラミング装置側で1つのソースコードに対して2つのコンパイラによって最適化と非最適化の2種類の機械語オブジェクトを生成してPLC側にダウンロードし、PLC側でこれら2種類の機械語オブジェクトの両方を実行する(実行時期は異なる)構成の場合、この2種類の機械語オブジェクトの実行論理(演算結果)が同一となることが必要となる。もし同一ソースコードに係わる2種類の機械語オブジェクトの演算結果が異なると、これら2種類の機械語オブジェクトを切り替えて実行した場合、システムの動作が不安定となり、ユーザに存在を与える可能性がある。
【0119】
しかしながら、ソースコードがニーモニック言語で記述される場合はともかく、ラダー言語、FBD言語等の図形言語を用いてPLCプログラム(複数の図形要素を任意の位置に配置して成るプログラム)を作成した場合、上記のように2つのコンパイラを用いる構成の場合、同一ソースコードに係わる2種類の機械語オブジェクトの演算結果が異なる可能性がある。つまり、コンパイルの際の図形要素の展開順番が演算結果に影響する(図形要素の展開順番が異なれば演算結果が異なる)可能性がある。
【0120】
この様になる原因は、図形言語の場合、図形要素の展開順番の基本的な規則は、上から下、左から右であるが、ユーザがフリーで自由に記述できるため、図形要素を様々な大きさと位置に配置でき、図形要素間の接続の組み合わせも自由にできるため、基本的な規則だけでは展開順番を一義的に確定させることができず、このため現実上、各コンパイラ独自の展開方法が存在するからである。
【0121】
このように、同一ソースコードを2つのコンパイラで別々にコンパイルして生成した2種類の機械語オブジェクトが、図形要素の展開順番が相互に異なることを主な原因として、その演算結果が異なることになる可能性がある。実施例2では、上記実施例1の構成においてこの様な問題が生じるのを防止するものである。
【0122】
以下、実施例2について詳細に説明する。
図12は、実施例2のプログラマブルコントローラシステムの機能構成例である。
図示のプログラマブルコントローラシステムは、開発支援装置(ローダ)60、PLC(ターゲット)80等から成る。
【0123】
開発支援装置60は、上記プログラミング装置100と略同様の機能を有すると共に、更に実施例2における機能(上記問題を解消するための機能)を有する。
開発支援装置60は、インタフェース機能部61、コンパイラ62、通信機能部63等の各種機能部を有する。尚、開発支援装置60は、画面(ディスプレイ)64、入力装置65等も有する。
【0124】
インタフェース機能部61と通信機能部63は、図1のユーザインタフェース部11、通信部14と同じであってよく、これらの説明は省略するが、ユーザはユーザインタフェース部11の機能によって、所望の制御プログラムのソースコード66を作成することになる。
【0125】
コンパイラ62も、基本的な機能は図1のコンパイラ12と同じであってよい。すなわち、コンパイラ62は、例えば2つのコンパイラから成り、任意のソースコード66を入力して、2つのコンパイラそれぞれで、このソースコード66に対応する機械語オブジェクトを生成する。これより、コンパイラ62は、2種類の機械語オブジェクト(最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68)を生成する。
【0126】
最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68は、基本的には、上記図1の最適化機械語オブジェクト13、非最適化機械語オブジェクト15と略同様であってよい。すなわち、最適化機械語オブジェクト67は、上記最適化機械語オブジェクト13と同様、ソースコードを最適化コンパイルして生成されたものである。デバッグ可能機械語オブジェクト68は、上記非最適化機械語オブジェクト15と同様、ソースコードに対して通常のコンパイルを行って生成されたものである。
【0127】
但し、上記のことから最適化機械語オブジェクト13と非最適化機械語オブジェクト15とでは演算結果が異なる(その生成の際の図形要素の展開順番が異なる)場合があり得るが、最適化機械語オブジェクト67とデバッグ可能機械語オブジェクト68とでは常に演算結果は同じであり(その生成の際の図形要素の展開順番が同一である)、演算結果が異なる可能性はない。
【0128】
これを実現する為に、コンパイラ62は、例えば最適化機械語オブジェクト67生成の際に、その図形要素展開順番を示す展開順番対応表69を生成しておく。そして、デバッグ可能機械語オブジェクト68の生成の為のコンパイル処理の際に、この展開順番対応表69を参照することで、最適化機械語オブジェクト67の場合と同じ展開順番でコンパイル処理を実行できる。
【0129】
また、コンパイラ62は、最適化機械語オブジェクト67生成の際に、当然、各変数のメモリアドレス割付け処理(一般的な処理であり説明は省略する)も行うが、この様に各変数に割り付けたアドレス情報を、変数アドレス対応表70に記憶するようにしてもよい。この場合、コンパイラ62は、デバッグ可能機械語オブジェクト68の生成の為のコンパイル処理の際に、この変数アドレス対応表70を参照することで、各変数に対して最適化機械語オブジェクト67の場合と同じメモリアドレスを割り付けることができる。
【0130】
尚、図示のソースコード識別番号対応表71は、上記実施例1において説明した「ソースコード識別番号対応テーブル」と同じものと見做してよく、ここでは特に説明しないが、実施例1で説明したように、例えば、ソースコードのファイル名と、このソースコードの識別番号(または、このソースコードから生成された機械語オブジェクトに付与される識別番号)とを対応付けて記憶したものである。
【0131】
上記生成された2種類の機械語オブジェクト(最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68)は、PLC80にダウンロードされる。尚、ダウンロードの際のデータパケット構成は、実施例1と同じであってよい(図8に示す)。
【0132】
ここで、図示のPLC80の機能は、上記PLC200と同じであってよい(多少、名称や形式が変わっていても、実質的には同じと考えてよい)。
すなわち、PLC80は、プログラム実行管理機能部81、アドレステーブル82、通信機能部83等の処理機能部を有する。アドレステーブル82、通信機能部83は、図1のアドレステーブル24、通信部21と同じであると見做してよく、ここでの説明は省略する。プログラム実行管理機能部81は、図1のオブジェクト展開部25、デバッグ制御部26、プログラム実行部27のすべての機能を含むものと見做してもよい。従って、PLC80の処理機能については、ここでは説明を省略するが、PLC80は、上記ダウンロードされる最適化機械語オブジェクト67、デバッグ可能機械語オブジェクト68を、図示の最適化機械語オブジェクト84、デバッグ可能機械語オブジェクト85として記憶する。
【0133】
図13に、上記コンパイラ62の処理動作の一例を示す。
尚、図13に示す例では、コンパイル処理の際に、ソースコードから一旦、中間コード(中間言語)を生成して、その後、中間コードから機械語オブジェクトを生成する例であるが、この例に限るものではない。中間コードを生成することなく、ソースコードから直接的に機械語オブジェクトを生成するものであってよい。尚、中間コード(中間言語)は、例えばC言語であるが、この例に限らない。
【0134】
尚、上記特許文献2には、インストラクションリスト等のシーケンス処理用の言語で記述された制御プログラム(ソースファイル)を、C言語等の高級プログラミング言語に変換して、このC言語表現のプログラムファイルをコンパイルしてオブジェクトファイルを生成することにより実行コードが得られる旨の開示がある。この様に、C言語等の中間言語を介することは、既存技術であり、ここではこれ以上説明しない。
【0135】
図13に示す例では、上記コンパイラ62は、2つのコンパイラ(コンパイラ62a,62b)から成るものとする。これら2つのコンパイラは、上記の通り、一旦、中間コードを生成するタイプであるものとする。
【0136】
コンパイラ62aは、通常のコンパイル処理を行って上記デバッグ可能機械語オブジェクト68を生成する。コンパイラ62bは、最適化コンパイル処理を行って上記最適化機械語オブジェクト67を生成する。本例では、コンパイラ62a,62bはそれぞれ、まずフロントエンド処理で中間コード(中間コード1、中間コード2)を生成し、その後、バックエンド処理で機械語オブジェクト(68,67)を生成する。
【0137】
従来であれば中間コード1と中間コード2とでは、その生成の際の図形要素の展開順番等が異なる可能性がある。既に説明した通り、展開順番が異なると、PLC80側で上記最適化機械語オブジェクト84を実行したときとデバッグ可能機械語オブジェクト85を実行したときとで、演算結果が異なるため問題となる。
【0138】
これに対して、本例のコンパイラ62では、まず、コンパイラ62aは、ソースコード66をコンパイル(フロントエンド処理)して中間コード1を生成する際に、例えばコンパイラ62bとは異なる独自の規則により図形要素の展開順番を決定するかもしれないが、この展開順番を展開順番対応表69に記憶しておく。
【0139】
尚、コンパイラ62bにおける最適化の処理は、例えばバックエンド処理において実現してもよい。これは例えば、コンパイラ62bは、例えばC言語コンパイラ(不図示)を有し、このC言語コンパイラがコンパイラ62bのバックエンド処理を実行する。C言語コンパイラは、C言語プログラムをコンパイルして機械語を生成する機能を有する、C言語用の既存の一般的なコンパイラであり、上記最適化のための処理機能も備えている。図13に示す構成例では、特に上記中間言語をC言語とした場合、この様な既存のC言語コンパイラの最適化機能を利用して、最適化を実現できるというメリットがある。
【0140】
図14に、展開順番対応表69の具体例を示す。
図示の例では、展開順番対応表69は、各図形要素の識別用IDである図形ID91に対応付けて、各図形要素の展開順番を示す実行順番(展開順番)92が登録される。図示の例では、図形ID91=‘1’、‘2’、‘3’の3つの図形要素の展開順番(実行順番)は、‘1’→‘3’→‘2’の順となる。
【0141】
そして、コンパイラ62aにおいてコンパイル処理が完了してデバッグ可能機械語オブジェクト68が生成された後、コンパイラ62bのコンパイル処理を開始する(あるいは、中間コード1が生成された後であっても構わない。換言すれば、展開順番対応表69の作成が完了した後であればよい)。尚、コンパイラ62aが、例えば自己のコンパイル処理が完了したら、ソースコード66をコンパイラ62bに渡すことで、コンパイラ62bがコンパイル処理を開始できるようにしてもよい。あるいは、コンパイラ62aが処理完了をコンパイラ62bに通知すると、コンパイラ62bがソースコード66を取得してコンパイル処理を開始するようにしてもよい。
【0142】
そして、コンパイラ62bは、展開順番対応表69を参照しながら、コンパイル処理を実行する。これより、コンパイラ62bにおいても、図形要素の展開順番はコンパイラ62aと同じとなる。例えば図14の例であればコンパイラ62aにおける図形要素の展開順番は‘1’→‘3’→‘2’の順であったことになり、コンパイラ62bにおいても同じ展開順番でコンパイル処理を行って中間コード2を生成することになる。
【0143】
従来であれば、コンパイラ62bは、独自の規則(図形要素コード生成規則)に従って展開順番を決めていたので、図形要素の展開順番が例えば‘1’→‘2’→‘3’の順となる可能性もあったが、本手法ではこの様な問題は起こらない。
【0144】
また、よく知られているように、PLCの制御プログラムのコンパイル処理では、各変数に任意のメモリアドレスを割当てる処理(既存の処理)も行われるが、本手法では、コンパイラ62aが、例えば中間コード1生成の際に各変数に割当てたアドレス情報を、変数アドレス対応表70に記憶するようにしてもよい。この場合には、コンパイラ62bは、更に変数アドレス対応表70も参照することで、各変数へのメモリアドレス割当てを、コンパイラ62aと同じとすることができる。
【0145】
変数アドレス対応表70の具体例は、特に示さないが、例えば各変数の識別用IDに対応付けて、その変数に割り付けたメモリアドレスが格納されるものである。
この様に、本手法では、2つのコンパイラ62a、62bで、図形要素の展開順番および各変数へのメモリアドレス割当て内容を、同一にすることができる。尚、変数アドレス対応表70の具体例は、特に示さないが、例えば各変数の識別用IDに対応付けて、その変数に割当てたアドレスの情報(例えば割当てたメモリ領域の先頭アドレスとサイズ等)が登録される。
【0146】
コンパイラ62aは、中間コード1をバックエンド処理で機械語オブジェクトに変換してデバッグ可能機械語オブジェクト68を生成する。コンパイラ62bは、中間コード2をバックエンド処理で機械語オブジェクトに変換して最適化機械語オブジェクト67を生成する。ここで、上述したように、中間コード1と中間コード2は、その生成の際の図形要素の展開順番が同じとなる。従って、これら中間コード1、中間コード2の機械語オブジェクト(デバッグ可能機械語オブジェクト、最適化機械語オブジェクト)をPLC80側で実行した場合、上述した問題は起こらない。すなわち、同一のソースコードに係る2種類の機械語オブジェクトの演算結果が、相互に異なるという事態が生じ、それによってシステム動作が不安定になる等という問題が生じる心配はない。
【0147】
尚、言うまでもないが、上記デバッグ可能機械語オブジェクト68と最適化機械語オブジェクト67を、PLC80側へダウンロードして上記デバッグ可能機械語オブジェクト85、最適化機械語オブジェクト84として記憶させることになる。そして、PLC80では、通常時は最適化機械語オブジェクト84を実行し、デバッグ時にはデバッグ可能機械語オブジェクト85に切り替えて実行することになるが、実施例2では、この切り替え後に、切り替え前とは演算結果が異なる等というような事態が生じることはなく、システム動作が不安定になるようなことはない。
【0148】
尚、図13は一例を示すものであり、この例に限らない。例えば、コンパイラ62bを先に実行し、その後にコンパイラ62aを実行するようにしてもよい。勿論、この場合には、コンパイラ62bが上記展開順番対応表69、変数アドレス対応表70を生成することになり、その後、コンパイラ62aが、これらの対応表69、70を参照しながらコンパイル処理を実行することで、図形要素の展開順番がコンパイラ62bと同じとなると共に、各変数へ割当てるメモリアドレスもコンパイラ62bと同じとなる。
【0149】
この様に、2つのコンパイラ62a、62bのうち何れか一方(基本的には先に処理実行する方)が上記展開順番対応表69、変数アドレス対応表70を生成し、他方がこれらの対応表69、70を参照しながらコンパイル処理を実行することで、同一のソースコードに係るデバッグ可能機械語オブジェクト68(85)と最適化機械語オブジェクト67(84)とで、演算結果が異なる事態となることは回避される。
【0150】
あるいは、図13では、一旦、中間コードを生成するタイプのコンパイラに本手法を適用した場合を示したが、勿論、この様な例に限らず、中間コードを生成することなくソースコードからダイレクトに機械語オブジェクトを生成するコンパイラにも、本手法は問題なく適用できる。
【0151】
図15に、図形言語プログラムの具体例を示す。
図15(a)には、ラダー図やファンクションブロック図等の図形言語プログラムの図形要素を示す。
【0152】
図15(b)、(c)には、ファンクションブロック図によるプログラム記述の具体例を示す。
図15(a),(b)の例については特に説明しないが、図15(b)の例では3つの図形要素が任意の位置に配置されていることになる。
【0153】
以下、図15(c)の例について説明する。
この例では、C=A+Bを演算する図形要素95と、F=C+Dを演算する図形要素96を示している。これら図形要素95、96の処理のどちらを先に実行するかによって、演算結果が異なる場合が有り得る。しかしながら、図15(c)に示す例では、図形要素95と図形要素96のどちらを先に実行するか明確ではない。
【0154】
すなわち、上記の通り、左から右、上から下の順番が基本規則であるが、図15(c)の場合、“左から右”ルールの方を優先させると図形要素95が先に実行されるが、“上から下”ルールの方を優先させると図形要素96が先に実行される可能性がある。あるいは、図15(c)の場合、“上から下”ルールに関して、図形要素95、96のどちらが上であるのか不明瞭である。
【0155】
そして、例えば、各変数A,B,C,D,Fに係る現在のメモリ保持値が、A=1、B=2、C=100、D=10、F=0であったとする。
この例の場合、仮に図形要素95→図形要素96の順に実行されると、まず、C=A+B=1+2=3となってCの値が上記100から3へと更新された後、F=C+D=3+10=13となる。よって、演算結果(上記演算後の各変数A,B,C,D,Fに係るメモリ保持値)は、A=1、B=2、C=3、D=10、F=13となる。
【0156】
一方、上記の例で図形要素96→図形要素95の順に実行された場合には、まず、F=C+D=100+10=110となってFの値が上記0から110へと更新された後、C=A+B=1+2=3となる。よって、演算結果(上記演算後の各変数A,B,C,D,Fに係るメモリ保持値)は、A=1、B=2、C=3、D=10、F=110となる。このように、図形要素95→図形要素96の順に実行された場合と、図形要素96→図形要素95の順に実行された場合とでは、演算結果が異なることになる。
【0157】
また、図16(a)は通常時、図16(b)はデバッグ時のアドレステーブル82の展開状態の具体例を示す図である。図示の通り、これらは内容的には図10、図11に示したものと略同様であり、図12において名称が図3とは異なるもの(非最適化機械語オブジェクト→デバッグ可能機械語オブジェクト)が存在することから、例えば図16(a),(b)に示すようになる。
【0158】
よって、ここでは図16(a)、(b)については特にこれ以上詳細には説明しないが、実施例1の場合と同様に実施例2においてもPOU単位で2種類の機械語オブジェクトを生成・ダウンロードすると共に、POU単位でデバッグの実行(デバッグ可能機械語オブジェクトの実行)を指示できる。よって、例えば、制御プログラム全体のなかで、その都度、ユーザが必要とする部分(POU)についてのみデバッグ可能機械語オブジェクトに切り替えて実行させることができ、デバッグ作業時間の短縮化、作業負担の軽減を図ることができる。
【0159】
尚、実施例2の開発支援装置60、PLC80のハードウェア構成例は、上記実施例1のプログラミング装置100、PLC200と同じであってよい。すなわち、開発支援装置60のハードウェア構成例は図1に示す通りであり、PLC80のハードウェア構成例は図2に示す通りであると考えてよい。但し、この例に限るものではない。
【0160】
また、図12に示す開発支援装置60の処理機能(符号61、62等)は、上記プログラミング装置100の場合と同様、例えば記憶装置105に予め記憶されているアプリケーションプログラムを、CPU101が実行することにより実現される。同様に、図12に示すPLC80の処理機能(符号81等)は、上記PLC200の場合と同様、例えばユーザプログラムメモリ213に予め記憶されているアプリケーションプログラムを、CPU211が実行することにより実現される。また、上記デバッグ可能機械語オブジェクト85、最適化機械語オブジェクト84は、ユーザプログラムメモリ213に格納される。
【0161】
実施例2は、基本的に、上記実施例1における図4〜図9の具体例において、ステップS3、S4の処理が多少変わるものであると見做しても構わない。すなわち、ステップS3の処理の際に、上記展開順番対応表69、変数アドレス対応表70を生成する処理が加わる。また、ステップS4の処理では、例えば独自の規定によって図形要素の展開順番を決定する代わりに、展開順番対応表69を参照することで、ステップS3の処理における図形要素の展開順番と同じ順番で、図形要素の展開を行ってコンパイル処理を実現するものとなる。また、ステップS4の処理では、更に、変数アドレス対応表70を参照することで、ソースコードの各変数に割り付けるメモリアドレスを、ステップS3の処理の場合と同じにする。これら以外は、実施例1と略同様であって構わないので、ここでは特に説明しない。
【0162】
以上のことから、特に図示しないが、上記実施例2の開発支援装置60(プログラミング装置)、PLC80(プログラマブルコントローラ)は、例えば下記の処理機能を有するものと考えても良い。
【0163】
まず、上記プログラミング装置(開発支援装置60)は、第一のコンパイラと第二のコンパイラとダウンロード部とを有するものと見做してもよい。
第一のコンパイラは、任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素の展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも上記各図形要素の展開順序を所定の記憶領域(記憶部)に記憶する。
【0164】
第二のコンパイラは、上記ソースコードを、上記記憶部に記憶された各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する。
【0165】
ダウンロード部は、上記第一の機械語オブジェクトと上記第二の機械語オブジェクトとを、プログラマブルコントローラにダウンロードする。
そして、例えば、上記第一の機械語オブジェクトと上記第二の機械語オブジェクトの何れか一方は、通常のコンパイル処理によって生成される、デバッグ可能な機械語オブジェクトである非最適化機械語オブジェクトであり、他方は最適化コンパイル処理によって生成される、最適化された機械語オブジェクトである最適化機械語オブジェクトである。
【0166】
一方、上記プログラマブルコントローラ(PLC80)は、通常時は上記最適化機械語オブジェクトを実行し、デバッグ時には上記非最適化機械語オブジェクトに切り替えて実行するプログラム実行部を有する。
【0167】
また、例えば、上記第一のコンパイラは、上記第一の機械語オブジェクト生成の際に、上記ソースコードから一旦中間言語を生成した後に該中間言語から上記第一の機械語オブジェクトを生成するものであって、該中間言語生成の際に上記各図形要素を展開順序の決定と上記記憶部への記憶を行う。
【0168】
また、例えば、上記第二のコンパイラは、上記第二の機械語オブジェクト生成の際に、上記ソースコードから一旦中間言語を生成した後に該中間言語から上記第二の機械語オブジェクトを生成するものであって、該中間言語生成の際に上記記憶部に記憶された上記各図形要素の展開順序を参照して該中間言語の生成を行う。
【0169】
また、例えば、上記第一のコンパイラは、更に、上記コンパイルの際にソースコードの各変数に割当てたメモリアドレスの情報を上記記憶部に記憶する。一方、上記第二のコンパイラは、上記コンパイルの際に更に、該記憶されたメモリアドレス情報を参照することで、上記各変数に上記第一のコンパイラと同じメモリアドレスを割当てる。
【0170】
また、例えば、上記プログラマブルコントローラは、更に下記の構成を有するものであってよい。
すなわち、上記プログラマブルコントローラは、
上記最適化機械語オブジェクトを保持する第一の記憶領域と、上記非最適化機械語オブジェクトを保持する第二の記憶領域と、上記最適化機械語オブジェクトの格納アドレスまたは上記非最適化機械語オブジェクトの格納アドレスを登録するアドレステーブルとを有する。
【0171】
そして、上記プログラム実行部は、例えば、該アドレステーブルに登録されている格納アドレスに応じて、上記最適化機械語オブジェクトと上記非最適化機械語オブジェクトの何れか一方を実行する。
【0172】
また、上記プログラマブルコントローラは、例えば、上記アドレステーブルに上記最適化機械語オブジェクトの格納アドレスを登録することで、上記プログラム実行部に上記最適化機械語オブジェクトを実行させる最適化機械語オブジェクト実行部と、上記プログラミング装置からのデバッグ指示に応じて上記アドレステーブルに上記非最適化機械語オブジェクトの格納アドレスを登録することで、上記プログラム実行部に上記非最適化機械語オブジェクトを実行させるデバッグ制御部とを更に有する。
【0173】
また、上記プログラマブルコントローラは、上記プログラミング装置から上記最適化機械語オブジェクト、上記非最適化機械語オブジェクトがダウンロードされると、受信した最適化機械語オブジェクトは上記第一の記憶領域内に格納すると共に該格納領域の先頭アドレスを上記テーブルに登録すると共に、受信した非最適化機械語オブジェクトは上記第二の記憶領域内に格納するオブジェクト転送部を更に有する。
【0174】
また、例えば、上記プログラミング装置は、上記デバッグ指示を上記プログラマブルコントローラへ送信すると共に、これに伴って、任意に設定された上記非最適化機械語オブジェクトの実行の停止位置を示すブレーク位置情報も上記プログラマブルコントローラへ送信するデバッグ指示部を更に有する。
【0175】
また、上記プログラマブルコントローラにおいて、例えば、上記デバッグ制御部は、上記デバッグ指示と共に上記ブレーク位置情報を受信すると、上記非最適化機械語オブジェクトにおいて、該ブレーク位置情報に応じた所定位置に、機械語オブジェクトの実行を停止するためのブレーク命令を挿入する。
【0176】
また、上記プログラム実行部は、上記非最適化機械語オブジェクトの実行中には、上記ブレーク命令の実行に伴い、該非最適化機械語オブジェクトの実行を停止すると共に該停止状態を上記プログラミング装置へ送信する。
【0177】
あるいは、上最適化機械語オブジェクトは、POU単位で前記第一の記憶領域に保持され、上記非最適化機械語オブジェクトも、POU単位で前記第二の記憶領域に保持され、上記プログラム実行部は、デバッグ時に、任意のPOUに関してのみ非最適化機械語オブジェクトに切り替えて実行する。これは、例えば、プログラミング装置側においてユーザが指定したPOUに関してのみ、その識別番号を含む上記図9のデバッグ情報がPLC側に送られることで、PLC側ではこのPOUに関してのみ、非最適化機械語オブジェクトに切り替えて実行する。
【0178】
以上説明したように、実施例2のプログラマブルコントローラシステムでは、プログラミング装置(開発支援装置;ローダ)において、2つのコンパイラによって通常の機械語オブジェクトと最適化機械語オブジェクトの両方を生成すると共に、その際にこれら2つのコンパイラで図形要素の展開順番を一致させることで、デバッグ時に逆コンパイル等を行なうことなく且つシステム動作を不安定にすることなく、ソースコードレベルデバッグを行えることになる。
【符号の説明】
【0179】
11 ユーザインタフェース部
12 コンパイラ
13 最適化機械語オブジェクト
14 通信部
15 非最適化機械語オブジェクト
21 通信部
22 最適化機械語オブジェクト
23 非最適化機械語オブジェクト
24 アドレステーブル
25 オブジェクト展開部
26 デバッグ制御部
27 プログラム実行部
31 コンパイル開始ボタン
32 デバッグ開始ボタン
33 終了ボタン
34 デバッグ終了ボタン
41 識別番号
42 種別
43 機械語オブジェクト(機械語オブジェクト本体)
51 識別番号
52 ブレーク位置
55 データパケット
55a,55b,55c,55d 機械語オブジェクト
60 開発支援装置(ローダ)
61 インタフェース機能部
62 コンパイラ
62a コンパイラ(通常)
62b コンパイラ(最適化)
63 通信機能部
64 画面(ディスプレイ)
65 入力装置
66 ソースコード
67 最適化機械語オブジェクト
68 デバッグ可能機械語オブジェクト
69 展開順番対応表
70 変数アドレス対応表
71 ソースコード識別番号対応表
80 PLC
81 プログラム実行管理機能部
82 アドレステーブル
83 通信機能部
84 最適化機械語オブジェクト
85 デバッグ可能機械語オブジェクト
91 図形ID
92 実行順番
95,96 図形要素
100 プログラミング装置
101 中央演算処理装置(CPU)
102 入力装置
103 表示器
104 内部メモリ
105 記憶装置
106 入出力インタフェース(I/O)
107 共通バス
200 プログラマブルコントローラ(PLC)
210 CPUモジュール
211 CPU
212 システムプログラムメモリ(FLASH)
213 ユーザプログラムメモリ(RAM)
214 PLC固有バスインタフェース
215 ユーザデータメモリ(RAM)
216 システムワークメモリ(RAM)
217 ドライバ/レシーバ
218 バス
222 入出力モジュール
300 制御機器
400 信号線


【特許請求の範囲】
【請求項1】
プログラミング装置とプログラマブルコントローラとを有するPLCシステムであって、
前記プログラミング装置は、
任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素の展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、
前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、
前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段と、
を有することを特徴とするPLCシステム。
【請求項2】
前記第一の機械語オブジェクトと前記第二の機械語オブジェクトの何れか一方は、通常のコンパイル処理によって生成される、デバッグ可能な機械語オブジェクトである非最適化機械語オブジェクトであり、他方は最適化コンパイル処理によって生成される、最適化された機械語オブジェクトである最適化機械語オブジェクトであることを特徴とする請求項1記載のPLCシステム。
【請求項3】
前記プログラマブルコントローラは、
通常時は前記最適化機械語オブジェクトを実行し、デバッグ時には前記非最適化機械語オブジェクトに切り替えて実行するプログラム実行手段を有することを特徴とする請求項2記載のPLCシステム。
【請求項4】
前記第一のコンパイラ手段は、前記第一の機械語オブジェクト生成の際に、前記ソースコードから一旦中間言語を生成した後に該中間言語から前記第一の機械語オブジェクトを生成するものであって、該中間言語生成の際に前記各図形要素を展開順序の決定と前記記憶手段への記憶を行い、
前記第二のコンパイラ手段は、前記第二の機械語オブジェクト生成の際に、前記ソースコードから一旦中間言語を生成した後に該中間言語から前記第二の機械語オブジェクトを生成するものであって、該中間言語生成の際に前記記憶手段に記憶された前記各図形要素の展開順序を参照して該中間言語の生成を行うことを特徴とする請求項1〜3の何れかに記載のPLCシステム。
【請求項5】
前記第一のコンパイラ手段は、更に、前記コンパイルの際にソースコードの各変数に割当てたメモリアドレスの情報を前記記憶手段に記憶し、
前記第二のコンパイラ手段は、前記コンパイルの際に更に、該記憶されたメモリアドレス情報を参照することで、前記各変数に前記第一のコンパイラ手段と同じメモリアドレスを割当てることを特徴とする請求項1〜4の何れかに記載のPLCシステム。
【請求項6】
前記プログラマブルコントローラは、
前記最適化機械語オブジェクトを保持する第一の記憶領域と、
前記非最適化機械語オブジェクトを保持する第二の記憶領域と、
前記最適化機械語オブジェクトの格納アドレスまたは前記非最適化機械語オブジェクトの格納アドレスを登録するアドレステーブルと、
該アドレステーブルに登録されている格納アドレスに応じて、前記最適化機械語オブジェクトと前記非最適化機械語オブジェクトの何れか一方を実行する前記プログラム実行手段と、
前記アドレステーブルに前記最適化機械語オブジェクトの格納アドレスを登録することで、前記プログラム実行手段に前記最適化機械語オブジェクトを実行させる最適化機械語オブジェクト実行手段と、
前記プログラミング装置からのデバッグ指示に応じて前記アドレステーブルに前記非最適化機械語オブジェクトの格納アドレスを登録することで、前記プログラム実行手段に前記非最適化機械語オブジェクトを実行させるデバッグ制御手段と、
を更に有することを特徴とする請求項2〜5の何れかに記載のPLCシステム。
【請求項7】
前記プログラマブルコントローラは、
前記プログラミング装置から前記最適化機械語オブジェクト、前記非最適化機械語オブジェクトがダウンロードされると、受信した最適化機械語オブジェクトは前記第一の記憶領域内に格納すると共に該格納アドレスを前記アドレステーブルに登録し、受信した非最適化機械語オブジェクトは前記第二の記憶領域内に格納するオブジェクト転送手段を更に有することを特徴とする請求項6記載のPLCシステム。
【請求項8】
前記プログラミング装置は、前記デバッグ指示を前記プログラマブルコントローラへ送信すると共に、これに伴って、任意に設定された前記非最適化機械語オブジェクトの実行の停止位置を示すブレーク位置情報も前記プログラマブルコントローラへ送信するデバッグ指示手段を更に有し、
前記プログラマブルコントローラにおいて、
前記デバッグ制御手段は、前記デバッグ指示と共に前記ブレーク位置情報を受信すると、前記非最適化機械語オブジェクトにおいて、該ブレーク位置情報に応じた所定位置に、機械語オブジェクトの実行を停止するためのブレーク命令を挿入し、
前記プログラム実行手段は、前記非最適化機械語オブジェクトの実行中には、前記ブレーク命令の実行に伴い、該非最適化機械語オブジェクトの実行を停止すると共に該停止状態を前記プログラミング装置へ送信することを特徴とする請求項6または7記載のPLCシステム。
【請求項9】
前記最適化機械語オブジェクトは、POU単位で前記第一の記憶領域に保持され、
前記非最適化機械語オブジェクトも、POU単位で前記第二の記憶領域に保持され、
前記プログラム実行手段は、前記デバッグ時に、任意のPOUに関してのみ前記非最適化機械語オブジェクトに切り替えて実行することを特徴とする請求項6〜8の何れかに記載のPLCシステム。
【請求項10】
プログラミング装置とプログラマブルコントローラとを有するPLCシステムにおける前記プログラミング装置であって、
任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素を展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、
前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、
前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段と、
を有することを特徴とするPLCシステムのプログラミング装置。
【請求項11】
プログラミング装置とプログラマブルコントローラとを有するPLCシステムにおける前記プログラミング装置のコンピュータを、
任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素を展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶する第一のコンパイラ手段と、
前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成する第二のコンパイラ手段と、
前記第一の機械語オブジェクトと前記第二の機械語オブジェクトとを、前記プログラマブルコントローラにダウンロードするダウンロード手段、
として機能させるためのプログラム。
【請求項12】
プログラミング装置とプログラマブルコントローラとを有するPLCシステムの前記プログラミング装置におけるデバッグ方法であって、
任意の図形言語プログラムのソースコードを、該ソースコードを構成する各図形要素を展開順序を決定しつつ該展開順序に従ってコンパイルして第一の機械語オブジェクトを生成すると共に、少なくとも前記各図形要素の展開順序を記憶手段に記憶し、
前記ソースコードを、前記記憶手段に記憶された前記各図形要素の展開順序を参照して、該展開順序に従ってコンパイルして第二の機械語オブジェクトを生成することを特徴とするデバッグ方法。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図16】
image rotate

【図15】
image rotate


【公開番号】特開2013−84112(P2013−84112A)
【公開日】平成25年5月9日(2013.5.9)
【国際特許分類】
【出願番号】特願2011−223458(P2011−223458)
【出願日】平成23年10月7日(2011.10.7)
【出願人】(000005234)富士電機株式会社 (3,146)
【Fターム(参考)】