(57)【特許請求の範囲】
【請求項１】
ＰＬＣ用のプログラムを変換する装置であって、ＦＢに対する外部変数にはデータ型が定義されているが該ＦＢの内部変数にはデータ型が定義されていない場合がある旧プログラムを、新プログラムに変換するコンバート装置であって、
前記旧プログラム上にある前記ＦＢを検出すると、該検出したＦＢに係わる全てのＦＢインスタンスを探索して、該探索した全てのＦＢインスタンスの各々に係わる各外部変数の前記データ型同士を比較して、最大サイズのデータ型を前記検出したＦＢの内部変数のデータ型に決定する内部変数データ型決定手段と、
該内部変数データ型決定手段により決定された、ＦＢの内部変数のデータ型を用いて、前記旧プログラムを修正する旧プログラム修正手段と、
該修正された旧プログラムを、前記新プログラムに変換する変換手段と、
を有することを特徴とするプログラムコンバート装置。
【請求項２】
前記旧プログラムはIEC61131-3に準拠していないプログラムであり、前記新プログラムはIEC61131-3に準拠したプログラムであることを特徴とする請求項１記載のプログラムコンバート装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを変換する装置等に関する。
【背景技術】
【０００２】
ＰＬＣ用のプログラム（制御プログラム等）は、そのソースコードのプログラム言語として、例えばラダー図を用いるものや、ＦＢ（ファンクションブロック）を用いるもの等が知られている。
【０００３】
また、ＰＬＣ用のプログラムとしては、IEC61131-3に準拠したものと、準拠していないものとが存在している。IEC61131-3に準拠したプログラムの場合、そのＦＢ（ファンクションブロック）の内部変数についても、データ型を定義する必要がある。一方、IEC61131-3に準拠していないプログラムの場合、そのＦＢ（ファンクションブロック）の内部変数については、データ型は定義されない場合がある。これについて図５を参照して説明する。図５には、ＦＢの入出力変数の一例を示す。
【０００４】
図５には、制御プログラムに含まれる任意の１つのＦＢのみを示している。このＦＢには、不図示の前段の処理の結果である入力データａが入力される。ここで、このＦＢには、内部変数として、入力変数αと出力変数βとが設けられている。そして、上記入力データａが、入力変数αに代入されることになる（α＝ａ）。そして、ＦＢの処理結果が出力変数βとして出力され、これが出力データｂとして不図示の後段の処理に渡される（ｂ＝β）。
【０００５】
ここで、IEC61131-3に準拠しているか否かに関係なく、入力データ（入力変数）ａと出力データ（出力変数）ｂに関しては、データ型を定義する必要がある。例えば、「int a」、「dint b」等と定義される。また、IEC61131-3に準拠しているプログラムの場合、内部変数（α、βなど）に関しても、データ型を定義する必要がある。
【０００６】
一方、IEC61131-3に準拠していないプログラムの場合、内部変数（入力変数α、出力変数β等）に関しては、データ型が定義されていなくても構わない。この場合、IEC61131-3に準拠していないＰＬＣシステムは、入力変数αのデータ型は入力データａのデータ型と同じと見做し、出力変数βのデータ型は出力データｂのデータ型と同じと見做して処理実行する。つまり、上記の例では入力変数αのデータ型は“ｉｎｔ” 、出力変数βのデータ型は“dint”と見做して、図示のＦＢに係わる処理を実行する。
【０００７】
尚、上記内部変数（α、βなど）に対応させて、上記入力データａ、出力データｂを外部変数等と呼ぶ場合もあるものとする。
また、例えば、特許文献１，２等に記載の従来技術が知られている。
【０００８】
特許文献１の発明は、独自の言語仕様で開発されたＰＬＣのアプリケーションプログラムを、Ｊ１ＳＢ３５０３（ＩＥＣ６１１３１−３）言語に準拠したプログラムへ、容易の自動変換する発明である。
【０００９】
特許文献１の技術は、ＩＥＣ６１１３１−３準拠のＰＬＣ間で行われているＸＭＬによる相互運用を利用して、旧ＰＬＣのアプリケーションプログラムをＸＭＬ変換し、ＩＥＣ６１１３１−３言語のプログラムに変換するものである。この変換に関して、プログラムの分割と、アドレスの変換と、プログラムの変換と、データの型変換および特殊命令の変換の各手段を用意しておく。
【００１０】
特許文献２の発明は、イベントが発生したときに所定の処理を実行するイベント駆動型ファンクションブロックを、効率よく起動し、且つ制御システム全体のプログラムの可読性を向上させる発明である。
【００１１】
特許文献２の技術は、イベントの有無を表す２値のデータ型を定義し、イベント変数をこのデータ型に定義する。イベント駆動型のファンクションブロックＦＢを呼び出す際に、上位プログラムがその前段のファンクションブロックＦＢのイベント変数の有無を検索し、イベント有りに設定されているときに呼び出し先のファンクションブロックＦＢのイベント入力変数をイベント有りに設定する。そして、このファンクションブロックＦＢを呼び出した後、前段のファンクションブロックＦＢのイベント出力をイベント無しに設定し、呼び出されたファンクションブロックＦＢは、所定の処理を実行しイベント入力変数の参照が全て終了した後、イベント入力変数をイベント無しに設定する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１０−１７６３７７号公報
【特許文献２】特開２００３−２６３３２８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ここで、ＰＬＣシステムを、古い設備から新しい設備へと更新する場合がある。これは、例えば、IEC61131-3に準拠していないシステムから、IEC61131-3に準拠したシステムへと更新する場合がある。そして、この場合において、古いシステムのプログラムを、新しいシステムでも用いたい場合がある。その為のプログラムコンバート処理自体は、既存技術であり、ここでは特に説明しない。
【００１４】
ここで、上記のことから、IEC61131-3に準拠していないプログラムでは上記ＦＢの内部変数についてデータ型が定義されていない為、コンバート結果においても、ＦＢの内部変数についてデータ型が定義されていないことになる。つまり、実質的に、IEC61131-3に準拠していないプログラムを、IEC61131-3に準拠したプログラムに自動的にコンバートすることが出来ず、コンバート結果に対してユーザ等が例えば手作業等によりＦＢの内部変数のデータ型を設定する必要があった。
【００１５】
本発明の課題は、IEC61131-3に準拠していないプログラムを、IEC61131-3に準拠したプログラムにコンバートする装置であって、ＦＢ（ファンクションブロック）の内部変数のデータ型を自動的に定義することができるプログラムコンバート装置等を、提供することである。
【課題を解決するための手段】
【００１６】
本発明のプログラムコンバート装置は、ＰＬＣ用のプログラムを変換する装置であって、ＦＢに対する外部変数にはデータ型が定義されているが該ＦＢの内部変数にはデータ型が定義されていない場合がある旧プログラムを、新プログラムに変換するコンバート装置であって、以下の各手段を有する。
【００１７】
・前記旧プログラム上にある前記ＦＢを検出すると、該検出したＦＢに係わる全てのＦＢインスタンスを探索して、該探索した全てのＦＢインスタンスの各々に係わる各外部変数の前記データ型同士を比較して、最大サイズのデータ型を前記検出したＦＢの内部変数のデータ型に決定する内部変数データ型決定手段；
・該内部変数データ型決定手段により決定された、ＦＢの内部変数のデータ型を用いて、前記旧プログラムを修正する旧プログラム修正手段；
該修正された旧プログラムを、前記新プログラムに変換する変換手段。
【発明の効果】
【００１８】
本発明のプログラムコンバータ装置等によれば、IEC61131-3に準拠していないプログラムを、IEC61131-3に準拠したプログラムにコンバートする装置であって、ＦＢ（ファンクションブロック）の内部変数のデータ型を自動的に定義することができる。
【図面の簡単な説明】
【００１９】
【図１】本例のコンバートシステムの概略構成図である。
【図２】コンバータ機能部の処理フローチャート図である。
【図３】ＦＢ（ファンクションブロック）の具体例を示す図である。
【図４】（ａ）、（ｂ）は、変換部の処理の一例を説明する為の図である。
【図５】ＦＢの入出力変数の一例である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のコンバートシステムの概略構成図である。
ここでは、任意の工場等において、古いＰＬＣ（プログラマブコントローラ）１を、新しいＰＬＣ２に交換する際に、旧ＰＬＣ１のプログラム（旧プログラム１ａ）の処理機能を、新ＰＬＣ（プログラマブルコントローラ）２で利用したい場合を想定する。この為、旧プログラム１ａを、新ＰＬＣ２で動作するプログラムに変換する必要があり、この変換処理を図示のコンバート装置１０が実行するものである。そして、コンバート装置１０は、旧プログラム１ａをコンバートして生成した新プログラム２ａを、新ＰＬＣ２にダウンロードする。但し、これは一例であり、この例に限らない。
【００２１】
ここでは、例えば、上記旧ＰＬＣ１はIEC61131-3に準拠していないものであり、上記新ＰＬＣ２はIEC61131-3に準拠したものである。よって、上記旧プログラム１ａはIEC61131-3に準拠していないプログラムであり、上記新プログラム２ａはIEC61131-3に準拠したプログラムである。また、背景技術で説明したことから、これら各プログラム１ａ，２ａは、ＦＢ（ファンクションブロック）を用いるプログラムであるものとする。
【００２２】
これより、背景技術で説明したように、旧プログラム１ａにおいては、上記外部変数についてはデータ型が定義されているが、上記ＦＢの内部変数に関しては必ずしもデータ型は定義されていないことになる。
【００２３】
図示のプログラムコンバート装置１０は、入力部１１、コンバータ機能部１２、出力部１３等を有する。
ここで、プログラムコンバート装置１０は、例えばパソコン等の一般的な汎用のコンピュータにより実現される。よって、プログラムコンバート装置１０のハードウェア構成は、特に図示しないが、パソコン等の構成であってよい。すなわち、プログラムコンバート装置１０は、例えば不図示のＣＰＵ、ハードディスク／メモリ等の記憶部、入出力インタフェース等を有している。そして、上記記憶部には予め所定のアプリケーションプログラムが記憶されている。上記ＣＰＵが、このアプリケーションプログラムを実行することによって、例えば上記入力部１１、コンバータ機能部１２、出力部１３等や、後述する内部変数データ型決定部１２ａ、旧プログラム修正部１２ｂ、変換部１２ｃ等の各種処理機能部が、実現される。
【００２４】
入力部１１は、旧ＰＬＣ１から制御プログラム（旧プログラム１ａ）を吸い上げる（取得する）。この制御プログラム（旧プログラム１ａ）は、上述したIEC61131-3に準拠していないプログラムである。従って、ここでは、そのＦＢの内部変数に関してはデータ型が定義されていないものとする。
【００２５】
コンバータ機能部１２は、この旧プログラム１ａを、上記新プログラム２ａに変換する。この変換処理において既存技術については特に説明しないが、本手法では、ＦＢの内部変数のデータ型を自動的に決定・設定する処理が追加されている。これについて、以下、図２、図３を参照して説明する。尚、出力部１３は、上記コンバータ機能部１２による変換結果を、上記新プログラム２ａとして、上記新ＰＬＣ２へダウンロード等する機能部である。
【００２６】
尚、図示の構成は一例であり、この例に限らない。コンバート装置１０は、基本的に、IEC61131-3に準拠していないプログラムを、IEC61131-3に準拠したプログラムに変換する機能を有するものであり、上記旧プログラム１ａ、新プログラム２ａはその一例であり、この例に限らない。勿論、旧ＰＬＣ１、新ＰＬＣ２も一例であり、入力部１１や出力部１３も必ずしも必要ないものである。
【００２７】
コンバータ機能部１２は、内部変数データ型決定部１２ａ、旧プログラム修正部１２ｂ、変換部１２ｃ等の各種処理機能部を有する。
内部変数データ型決定部１２ａは、上記旧プログラム１ａ上にある上記ＦＢ（ファンクションブロック）を検出する毎に、該検出したＦＢに係わる全てのＦＢインスタンスを探索して、該探索した全てのＦＢインスタンスの各々に係わる各外部変数のデータ型同士を比較して、最大サイズのデータ型を上記検出したＦＢの内部変数のデータ型に決定する。
【００２８】
旧プログラム修正部１２ｂは、この内部変数データ型決定部１２ａにより決定された、上記「ＦＢの内部変数のデータ型」を用いて、旧プログラム１ａを修正する。この修正は、例えば、上記内部変数に対して上記決定されたデータ型を記述するものである。
【００２９】
変換部１２ｃは、該修正された旧プログラム１ａを、新プログラム２ａに変換する。尚、変換部１２ｃ自体は、既存技術であり、従来と同様の処理を行うので、ここでは特に説明しない。従来と異なる点は、変換対象が上記「修正された旧プログラム１ａ」であり、従って内部変数に関してもデータ型が定義されている点である。これより、これを変換して得た新プログラム２ａには、内部変数に関してもデータ型が定義されていることになる。よって、従来のように変換結果に対してユーザ等が手作業で内部変数のデータ型を記述する必要はない。つまり、プログラム変換作業に係わるユーザの作業負担を軽減することができる。
【００３０】
図２は、上記コンバータ機能部１２の処理フローチャート図である。
また、図３に、ＦＢ（ファンクションブロック）の具体例を示す。ここでは、ＦＢの処理内容を、Ｃ言語のプログラムで示す。また、図３（ａ）には変換前の状態、図３（ｂ）には変換後の状態を示す。
【００３１】
以下、図２、図３を参照してコンバータ機能部の処理について説明する。
まず、図３（ａ）に示す例のＦＢの処理は、図示の関数ｆの処理（ｃ＝ｃ＋１）であり、内部入力変数（内部変数）が‘ｃ’となっている。そして、内部変数‘ｃ’に関するデータ型は、定義されていない。そして、外部からの入力は、変数ａ、ｂであり、これらの変数のデータ型は、変数ａがｉｎｔ、変数ｂがdintとなっている。尚、これらの変数ａ、ｂが、上記外部変数に相当する。これより、外部変数ａ、外部変数ｂ等と呼ぶ場合もあるものとする。そして、これら外部変数を用いて、図示のｆ（ａ）、ｆ（ｂ）の各ＦＢインスタンス処理が実行される。
【００３２】
そして、図２のコンバート処理では、まず、コンバート対象の旧プログラム１ａをスキャンして（ステップＳ１１）、プログラム上にＦＢが無ければ（ステップＳ１２，ＮＯ）、そのまま既存のコンバート処理を実行して（ステップＳ１３）新プログラム２ａを生成する。この既存のコンバート処理自体は、既存技術であるので、ここでは特に説明しない。
【００３３】
一方、旧プログラム上にＦＢ（ファンクションブロック）があれば（ステップＳ１２，ＹＥＳ）、ステップＳ１４以降の処理を実行して旧プログラム１ａを修正したうえで、既存のコンバート処理を実行して（ステップＳ１８）、新プログラム２ａを生成する。尚、図３の例の場合、上記関数ｆを検出した場合にはＦＢありと判定することになる。
【００３４】
まず、ステップＳ１４の処理では、上記検出したＦＢに係わるＦＢインスタンスを探索し、当該ＦＢインスタンスをメモリ上に保持する。図３の例では、上記関数ｆに係わるインスタンスを探索することになり、図示のｆ（ａ）、ｆ（ｂ）が該当することになるが、最初にｆ（ａ）が検出されてメモリ上に保持されるものとする。
【００３５】
そして、メモリ上に保持したものと同じＦＢに係わるＦＢインスタンスを探索し、これが存在する場合には（ステップＳ１５，ＹＥＳ）、当該検出したＦＢインスタンスのデータ型を、上記メモリ上に保持したＦＢインスタンスのデータ型と比較して、データ型のサイズが大きい方をメモリ上に保持する（ステップＳ１６）。図３の例では、ステップＳ１５でｆ（ｂ）が検出されることになり、この変数ｂのデータ型dintと、上記メモリ上に保持されているｆ（ａ）の変数ａのデータ型intとを比較することになる。この場合、サイズはdint＞intであるので、ｆ（ｂ）が新たにメモリ上に保持されることになる。
【００３６】
ステップＳ１５、Ｓ１６の処理を、メモリ上に保持したものと同じＦＢに係わるＦＢインスタンスが見つからなくなるまで繰り返して、見つからなくなったら（ステップＳ１５，ＮＯ）、その時点でメモリ上に保持したＦＢインスタンスの外部変数のデータ型を、当該ＦＢに係わる内部変数のデータ型に決定する。図３の例では、上記内部入力変数ｃのデータ型は、上記変数ｂのデータ型であるdintに決定されることになる。
【００３７】
この様にして、本例では、旧プログラム１ａ上に任意のＦＢを検出する毎に、旧プログラム１ａにおいてこのＦＢに係わるＦＢインスタンスを全て探索して、これら各ＦＢインスタンスに係わる各外部変数のデータ型同士を比較して、最大サイズのデータ型を上記検出したＦＢの内部変数のデータ型に決定する。
【００３８】
そして、旧プログラム１ａに対して、この内部変数のデータ型の宣言の記述を追加することで、旧プログラム１ａを修正する（ステップＳ１７）。この例では、旧プログラム１ａに「dint c;」の記述を追加する修正を行うことになる。その結果、修正後の旧プログラム１ａは、例えば図３（ｂ）に示すようになる。
【００３９】
そして、この様な修正後の旧プログラム１ａに対して、既存のコンバート処理を実行することで（ステップＳ１８）、IEC61131-3に準拠した新プログラム２ａへと変換する。上記の例の場合、修正後の旧プログラム１ａにおいてはＦＢの内部変数ｃに関してもデータ型で定義されていることになるので、問題なく、IEC61131-3に準拠した新プログラム２ａへと変換することができる。
【００４０】
尚、上述した一例では、入力変数を例にしたが、特に図示・説明等しないが、出力変数に関しても入力変数の場合と略同様の処理によって、ＦＢの内部出力変数のデータ型を決定することができる。勿論、この決定に基づいて旧プログラム１ａを修正する処理も、入力変数の場合と略同様であってよい。
【００４１】
尚、上述したことから、本手法の場合、外部変数のデータ型が、内部変数のデータ型と一致しない場合も起こり得る。図３の例の場合、外部変数ｂはよいが、外部変数ａに関しては内部入力変数ｃのデータ型と一致しない。しかしながら、これは特に問題にはならない。例えば外部変数ａが４bitデータとして入力され、これを８ｂｉｔである内部入力変数ｃに代入する場合、８bitの上位４bit分を全て‘０’にすればよい事であり、この様な操作は一般的に行われていることである。
【００４２】
最後に、図４（ａ）、（ｂ）を参照して、上記変換部１２ｃのコンバート処理の一例について説明する。但し、上記の通り、コンバート処理自体は既存技術であるので、以下、簡単に説明するものとする。
【００４３】
変換部１２ｃは、例えば予め図４（ａ）に一例を示すコンバート対応表を保持している。コンバート対応表は、予め開発者等が任意に作成したものである。
図４（ａ）において、図上左側に示す変換前命令が、例えば上記旧プログラム１ａの命令に相当する。図上右側に示す変換後命令が、例えば上記新プログラム２ａの命令に相当する。コンバート対応表は、図示の変換前命令と変換後命令とを紐付けるテーブルである。これは、基本的に、同じ処理内容または略同様の処理内容となる命令同士を、紐付けるものである。例えば、アップダウンカウンタは、変換前命令は図４（ａ）において左上に示すものであり、変換後命令は図４（ａ）において右上に示すものであり、両者が紐付けられている。同様に、リングカウンタは、変換前命令は図４（ａ）において左下に示すものであり、変換後命令は図４（ａ）において右下に示すものであり、両者が紐付けられている。
【００４４】
あるいは、コンバート対応表は、例えば、IEC61131-3に準拠していないプログラムコード（変換前命令）と、IEC61131-3に準拠したプログラムコード（変換後命令）とを紐付けるテーブルであると見做しても構わない。
【００４５】
変換部１２ｃは、この様なコンバート対応表を用いて、上記既存のコンバート処理を実行する。この処理の一例を、図４（ｂ）に示す。
変換部１２ｃは、まず変換前プログラム（旧プログラム１ａ等）を入力する（ステップＳ２１）。そして、上記コンバート対応表を参照して、変換前プログラムの各命令（変換前命令）を、当該変換前命令に紐付いている変換後命令に置き換える（ステップＳ２２）。例えば、変換前プログラム中に上記図４（ａ）において左上に示すアップダウンカウンタがあった場合、これを上記図４（ａ）において右上に示す変換後命令に置き換える。この様にして全ての命令を置き換えることで、変換後プログラム（新プログラム２ａ等）が生成される。そして、生成された変換後プログラムを出力する（ステップＳ２３）。
【符号の説明】
【００４６】
１０  プログラムコンバート装置
１１  入力部
１２  コンバータ機能部
１３  出力部
１２ａ  内部変数データ型決定部
１２ｂ  旧プログラム修正部
１２ｃ  変換部
【図１】
0006264242.tif 000002
【図２】
0006264242.tif 000003
【図３】
0006264242.tif 000004
【図４】
0006264242.tif 000005
【図５】
0006264242.tif 000006