(57)【特許請求の範囲】
【請求項１】
ラダープログラムを解析するラダープログラム解析手段と、
前記ラダープログラム解析手段で解析されたプログラム中の命令の構成とデバイスの種類が等しく、かつ、デバイスの番号が異なる複数の回路ブロックに対して、デバイスの表現を置き換えることによって共通部分式として扱うと共に、当該置き換えられたプログラムに対して、プログラムサイズが削減され、かつ当該置き換えの前後で処理の等価性が保たれているかを確認するプログラム最適化手段と、
前記プログラム最適化手段で確認されたプログラムからラダープログラムを生成するラダープログラム生成手段とを備えたラダープログラム最適化装置。
【請求項２】
デバイスの並びの置き換えを行うデバイスソート手段を備え、
プログラム最適化手段は、前記デバイスソート手段によってデバイスの並びが置き換えられたプログラムに対してデバイスの表現を置き換えることを特徴とする請求項１記載のラダープログラム最適化装置。
【請求項３】
デバイス種類かデバイス番号のうち少なくとも一方を置き換えるデバイス変換手段を備え、
プログラム最適化手段は、前記デバイス変換手段によって、デバイス種類かデバイス番号のうち少なくとも一方を置き換えたプログラムに対してデバイスの表現を置き換えることを特徴とする請求項１または請求項２記載のラダープログラム最適化装置
【請求項４】
プログラム最適化手段は、デバイスの表現を置き換えることによってループ処理に置き換えたプログラムに対して、当該ループに無関係な処理をループ外に移動させることを特徴とする請求項１から請求項３のうちのいずれか１項記載のラダープログラム最適化装置。
【請求項５】
ラダープログラムに対して最適化処理を行うコンピュータを、請求項１から請求項４のうちいずれか１項のラダープログラム最適化装置として機能させるための最適化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えばプログラマブルコントローラに使用されるラダープログラムの最適化を行うラダープログラム最適化装置および最適化プログラムに関するものである。
【背景技術】
【０００２】
プログラマブルコントローラは、小規模な機械の制御から大規模な生産設備の制御まで幅広く用いられている。このプログラマブルコントローラには、各種センサやスイッチなどの入力機器と、モータや電磁弁などの出力機器が接続される。大規模な生産設備では、この入力機器と出力機器の数は膨大なものとなる。
【０００３】
プログラマブルコントローラは、入力機器と出力機器の接続をラダープログラムで表現する。このラダープログラムは、設計者がプログラム開発環境から入力するか、既にプログラマブルコントローラに書き込まれているラダープログラムの一部をモジュール化し、組み合わせて作成する。
【０００４】
新規にラダープログラムを作成する場合、小規模な機械を制御するラダープログラムは、プログラム開発環境を用いて初めからラダープログラムを作成することができる。しかし、大規模な生産設備では、入力機器や出力機器の数が膨大となり、またそれらの接続を表現するラダープログラムも複雑となるため、最初から入力する方法では効率が悪い。このような場合は、過去に作成したモジュール化されたラダープログラムを組み合わせることによって、プログラムを作成する。
ところが、モジュール化されたラダープログラムを組み合わせる方法では、プログラムの作成は効率化されるが、論理の重複や冗長なデータ転送が含まれてしまうため、プログラムサイズが大きいラダープログラムとなってしまう。
【０００５】
また、人が読みやすいラダープログラムには、論理の重複や冗長性が存在するためサイズが大きくなる。プログラムサイズを削減する目的で、プログラムの最適化を意識してプログラムを記述することもできる。しかし、最適化を意識せずにプログラムを作成した方が、短時間でプログラムの開発を行うことができる。また、論理的な冗長性を全く持たないプログラムは、実行効率は高いが処理内容の解読に時間を要し、デバッグやメンテナンス作業の効率が低下してしまう。このようにプログラムの開発やメンテナンスの効率化を優先すると、ラダープログラムのサイズは大きくなる。
【０００６】
更に、近年は機器の制御のみならず生産に関連するデータの処理もプログラマブルコントローラ上で行うようになっている。機器の制御に関するラダープログラムだけではなく、データ処理のためのラダープログラムが必要となるため、ラダープログラムのサイズが大型化している。
【０００７】
プログラムのサイズが大きくなれば、処理量の増加に伴い実行時間が長くなると共に、プログラムのサイズがプログラマブルコントローラのプログラム容量に収まらなくなるといった問題がある。プログラムの処理時間やプログラムのサイズを短縮する目的で、目視によってプログラムをチェックし、よりサイズが小さくなるプログラム記述への置き換えを進めることも可能である。しかし、何万行もあるプログラムの中から、最適化可能な部分を見つけ出し、元のプログラムと完全に等価な処理でサイズを削減した記述し直す作業は、多大な時間と労力を要してしまう。
【０００８】
このような問題を解決するため、自動的に論理の重複を取り除き、共通の処理をまとめることでラダープログラムを最適化する方法が提案されている。例えば、特許文献１には、重複する論理の統合、部分ブロック置換、サブルーチン化処理について示されている。
この中で部分ブロック置換は、ラダープログラムの共通部分を検出し、その部分ブロックの演算結果を１つの変数に代入し、以降のプログラムで共通部分が出現する箇所を、その変数に置き換える処理である。これにより、重複する処理を繰り返さないため、プログラムのサイズが小さくなり、処理時間も短縮することができる。
【０００９】
【特許文献１】特開平９−１９８１１０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
このような従来の部分ブロック置換による最適化方法では、命令とデバイスの構成が全く同じ部分式を対象としているため、命令の構成が同じであるがデバイスが異なる場合に対応できない、という問題があった。ここでのデバイスとは、高級プログラミング言語の変数に相当するものである。
【００１１】
プログラマブルコントローラでは、同様の機器を複数接続し、それらに対して同じ入力信号による論理の組み合わせで出力信号を算出する場合がある。このような場合、全く同じ処理をほぼ同じデバイスの組み合わせによって記述し、出力先や入力元の一部のデバイスのみが異なるラダープログラムになる。従来の最適化方法では、命令とデバイスの構成が全く同じ部分式を対象としているため、このようなラダープログラムについては、最適化できないという問題点があった。
【００１２】
この発明は上記のような課題を解決するためになされたもので、作成後や編集後のラダープログラムを自動的に最適化することができ、かつ、最適化の範囲を拡大することのできるラダープログラム最適化装置および最適化プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１３】
この発明に係るラダープログラム最適化装置は、ラダープログラム解析手段で解析されたプログラム中の命令の構成とデバイスの種類が等しく、かつ、デバイスの番号が異なる複数の回路ブロックに対して、デバイスの表現を置き換えることによって共通部分式として扱うと共に、置き換えられたプログラムに対して、プログラムサイズが削減され、かつ置き換えの前後で処理の等価性が保たれているかを確認するプログラム最適化手段を備えたものである。
【発明の効果】
【００１４】
この発明のラダープログラム最適化装置は、命令の構成とデバイスの種類が等しく、かつ、デバイスの番号が異なる複数の回路ブロックに対して、デバイスの表現を置き換えるようにしたので、作成後や編集後のラダープログラムを自動的に最適化することができ、かつ、最適化の範囲を拡大することができる。
【発明を実施するための最良の形態】
【００１５】
実施の形態１．
図１は、この発明の実施の形態１によるラダープログラム最適化装置の適用例を示す構成図である。
図１に示すプログラマブルコントローラ１００は、ＣＰＵ１０１やＩ／Ｏ１０２を備え、生産設備２００を制御するためのものであり、ラダープログラムによってその動作が記述されている。ＣＰＵ１０１は、Ｉ／Ｏ１０２を介して各種スイッチやセンサからの信号を受け取り、モータや電磁弁へ信号を出力することにより、生産設備の制御を行うためのプロセッサである。また、Ｉ／Ｏ１０２は、生産設備２００との信号の入出力を行うためのインタフェースである。
【００１６】
ラダープログラム開発装置３００は、プログラマブルコントローラ１００で実行するラダープログラムの作成や編集を行い、プログラマブルコントローラ１００に対して出力する機能を有するものである。また、プログラマブルコントローラ１００からラダープログラムを取り出す機能も有しており、プログラマブルコントローラ１００に格納されている既存のラダープログラムを取り出した後、編集を行い、再度プログラマブルコントローラ１００に書き込むことが可能である。また、ラダープログラム開発装置３００は、ラダープログラム最適化装置４００との間で、ラダープログラムの受け渡しが可能である。
【００１７】
ラダープログラム最適化装置４００は、本発明のラダープログラムの最適化方法が実際に動作する装置である。ラダープログラム最適化装置４００は、ラダープログラム開発装置３００からラダープログラムを受け取り、そのラダープログラムを最適化した後、再びプログラム開発装置に渡す機能を有している。尚、ラダープログラム開発装置３００とラダープログラム最適化装置４００とが物理的に一つの装置上で組み合わされている形態であってもよい。
【００１８】
次に、ラダープログラム最適化装置４００の詳細について説明する。
図２は、実施の形態１のラダープログラム最適化装置の構成図である。
ラダープログラム最適化装置４００は、図示のように、ラダープログラム解析手段４０１、プログラム最適化手段４０２、ラダープログラム生成手段４０３から構成される。
【００１９】
ラダープログラム解析手段４０１は、入力される最適化前ラダープログラム５０１を、例えば、インストラクション・リスト表現（以下ＩＬ）といった所定の表現に変換する機能を有する。プログラム最適化手段４０２は、ラダープログラム解析手段４０１で変換されたＩＬプログラムに対して、最適化の処理を行う機能を有する。ここでの最適化には、論理的な冗長性を排除する論理条件の最適化、実行されることの無い命令を削除する無用命令の削除などの他に、本発明の最適化方法による最適化を含んでいる。
【００２０】
プログラム最適化手段４０２は、ラダープログラム解析手段４０１で解析されたプログラム中の命令の構成とデバイスの種類が等しく、かつ、デバイスの番号が異なる複数の回路ブロックに対して、デバイスの表現を置き換えることによって共通部分式として扱うと共に、置き換えられたプログラムに対して、プログラムサイズが削減され、かつ置き換えの前後で処理の等価性が保たれているかを確認する機能を有している。また、プログラム最適化手段４０２はプログラム置換判定手段４０４を有し、このプログラム置換判定手段４０４によって、置き換えられたプログラムに対して、プログラムサイズが削減され、かつ置き換えの前後で処理の等価性が保たれているかを確認する機能を実現している。
【００２１】
即ち、プログラム置換判定手段４０４は、プログラム最適化手段４０２によって検出された最適化可能な部分について、最適化候補プログラムへの置き換えの是非を判定する機能を有する。例えば、置き換え候補のプログラムについて、プログラムサイズが削減されているか、プログラムの置き換えによって問題が発生しないかを判定する。プログラムサイズが削減され、かつ問題が発生しない場合は、置き換えを認める判定を行う。一方、プログラムサイズが同じ場合や増加する場合、あるいは、プログラムサイズが削減されるが、置き換えによって問題が発生する場合は、プログラムの置き換えを認めない。
【００２２】
ラダープログラム生成手段４０３は、プログラム最適化手段４０２で最適化されたプログラムに基づいて、ラダープログラムを生成し、最適化後ラダープログラム５０２として出力する手段である。
【００２３】
このようなラダープログラム最適化装置４００は、コンピュータによって実現され、ハードウェアとしては、図示しないＣＰＵ、ＲＯＭ、ＲＡＭ、表示装置、入力装置、ハードディスクを備え、また、各手段に対応したプログラムを有している。
【００２４】
例えば、ＣＰＵは、ＲＯＭやＲＡＭを用い、ハードディスクに記憶された所定のプログラムを読み込んでそれぞれのプログラムを実行し、ラダープログラム解析手段４０１、プログラム最適化手段４０２、ラダープログラム生成手段４０３としての機能を実現する。また、ＣＰＵは、入力装置、表示装置と共に最適化するプログラムの選択手段として機能する。また、表示装置は、最適化前後のラダープログラムを表示する。更に、ハードディスクは、最適化前後のラダープログラムの記録手段としての機能を有している。
【００２５】
次に、実施の形態１の動作について説明する。
図３は、最適化前ラダープログラム５０１の説明図である。
図４は、最適化後ラダープログラム５０２の説明図である。
図５は、解析後のＩＬプログラムの一部を示す説明図である。
ラダープログラム解析手段４０１は、図３に示す最適化前ラダープログラム５０１を入力し、図５に示すようなＩＬプログラムに変換する。
【００２６】
次に、プログラム最適化手段４０２の動作について説明する。
回路ブロックとは、ラダープログラムの最小単位であり、入力要素と出力要素の一まとまりを指す。プログラム最適化手段４０２は、ＩＬプログラムの中から、複数の回路ブロック間で共通する部分を検出する。プログラム最適化手段４０２は、命令の構成が同じでデバイス種類が同じ、かつデバイス番号が異なる箇所を検出し、インデックスデバイスによる表現に置き換える。ここで、命令の構成とは、命令の種類（ＬＯＡＤ命令、ＡＮＤ命令等）と、命令の並び（ＡＮＤ命令の後にＯＲ命令、といった並び）を意味している。
【００２７】
また、デバイス名とは、例えば“Ｘ１”や“Ｍ１００”といったデバイス種類とデバイス番号とから構成されたものを意味する。更に、デバイス種類とは、“Ｘ”、“Ｙ”、”Ｍ”等の使用目的毎に分類が決められたデバイスのまとまりを指す。また、デバイス番号とは、“Ｘ１”、“Ｙ１０”、“Ｍ１００”等、デバイスの種類を指す英文字の後に続く数字を指す。デバイスは、デバイス種類とデバイス番号によって、一意に決められる。
【００２８】
ここで、インデックスデバイスとは、デバイス番号を修飾するデバイスである。例えばインデックスデバイスは、“Ｚｎ”と表現される。ここでｎは整数である。インデックスデバイスは、デバイス番号の後に続けて記述する。インデックスデバイスを用いたデバイスの表現の例としては、“Ｘ０Ｚ１”が挙げられる。“Ｚ１”デバイスの値が０（ゼロ）の場合は、“Ｘ０Ｚ１”は、“Ｘ（０＋０）”→“Ｘ０”デバイスを意味する。また、“Ｚ１”デバイスの値が１の場合は、“Ｘ０Ｚ１”は、“Ｘ（０＋１）”→“Ｘ１”デバイスを意味する。このように、インデックスデバイスで修飾されたデバイスは、インデックスデバイスの値を変化させることによって、指し示すデバイスを切り換えることができる。
【００２９】
次に、図６のフローチャートを用いてプログラム最適化手段４０２の動作を詳細に説明する。
尚、図６に示す処理および後述する図７の処理はプログラム最適化手段４０２における図示しないプログラム最適化制御手段が行うものである。
【００３０】
先ず、ラダープログラムの先頭の回路ブロックの先頭の命令にカウンタＡを、次の回路ブロックの先頭の命令にカウンタＢを付加する（ステップＳＴ１０１）。次に、カウンタＡが指す命令及びデバイスと、カウンタＢが指す命令及びデバイスが同じであるかを判断する（ステップＳＴ１０２）。同じ場合は、プログラムの共通部分として、共通部分リストに登録する（ステップＳＴ１０３）。そして、カウンタＡ、カウンタＢをそれぞれ次の命令を指すように進める（ステップＳＴ１０４）。ここで、カウンタＡとカウンタＢの指し示す命令及びデバイスが同じか否かを示す相違フラグをＯＦＦに設定する（ステップＳＴ１０５）。
【００３１】
次に、カウンタＡとカウンタＢの指し示す命令及びデバイスが同じであるかを判定する（ステップＳＴ１０６）。同じ場合は、共通部分として、先の共通部分リストにその命令とデバイスを追加登録する（ステップＳＴ１０７）。そして、カウンタＡまたは、カウンタＢが回路ブロックの終端であれば、Ａの処理に移る（ステップＳＴ１０８）。Ａの処理は、プログラム置換判定手段４０４の処理であり、これについては後述する。カウンタＡまたは、カウンタＢが回路ブロックの終端でなければ、カウンタＡ及びカウンタＢを１つ進め、それぞれ次の命令を指すように変更する（ステップＳＴ１０９）。そして、ステップＳＴ１０６に戻り、再びカウンタＡとカウンタＢの指す命令及びデバイスが同じであるかを判定する。
【００３２】
ステップＳＴ１０６において、カウンタＡとカウンタＢの指し示す内容が異なる場合は、相違フラグの状態を判定する（ステップＳＴ１１０）。相違フラグがＯＦＦの場合は、ＯＮにする（ステップＳＴ１１１）。次に、カウンタＡとカウンタＢの指し示す命令及びデバイスのうち、命令が同じ場合は、異なるデバイスを相違デバイスリストに登録する（ステップＳＴ１１２）。一方、ステップＳＴ１１０において、相違フラグがＯＮの場合は、後述のプログラム置換判定手段４０４の処理に移行する。
【００３３】
また、ステップＳＴ１０２において、カウンタＡとカウンタＢが指し示す命令あるいはデバイスが異なる場合は、カウンタＢを次の命令を指すように１つ進める（ステップＳＴ１１３）。ここで、カウンタＢが回路ブロックの終端でなければ、ステップＳＴ１０２の処理に戻る（ステップＳＴ１１４）。カウンタＢが回路ブロックの終端であれば、カウンタＢを次の回路ブロックの先頭へ移す（ステップＳＴ１１５）。このとき、カウンタＢが指す次の回路ブロックが存在するかを判定する（ステップＳＴ１１６）。次の回路ブロックが存在すれば、ステップＳＴ１０２へ戻る。次の回路ブロックが存在しなければ、カウンタＡを次の回路ブロックの先頭へ、カウンタＢをカウンタＡの次の回路ブロックの先頭へ移動する（ステップＳＴ１１７）。そして、カウンタＡが最後の回路ブロックであるかを判定し（ステップＳＴ１１８）、最後の回路ブロックである場合は、終了する。最後でなければステップＳＴ１０２に戻る。
【００３４】
図４に示す最適化後のプログラムで、“ＦＯＲ”、“ＮＥＸＴ”で囲まれた部分は、“ＦＯＲ”の引数で指定した回数だけ繰り返し実行される。また、“ＩＮＣ”は、引数で指定したデバイスの値を１つ加算する命令である。
プログラムの置き換えでは、“ＦＯＲ”、“ＮＥＸＴ”、“ＩＮＣ”命令の追加が必要となり、必ずしも置き換えによってプログラムサイズが縮小されるとは限らない。そこで、プログラムの置き換えによってプログラムのサイズを削減する効果があるのか、また、プログラムを置き換えて等価な処理を実現できるかを判定するため、プログラム置換判定手段４０４でその判定を行う。
尚、この例では、“ＦＯＲ”、“ＮＥＸＴ”を用いているが、ジャンプ命令とラベルの組み合わせによる表現に変換することも可能である。
【００３５】
図７は、プログラム最適化手段４０２における相違デバイスに対する処理を示すフローチャートである。
先ず、上述した図６のステップＳＴ１１２で登録した相違デバイスリストについて、デバイスの種類が同一であるかを判定する（ステップＳＴ３０１）。デバイスの種類が同じ場合は、デバイスの番号の差を算出する（ステップＳＴ３０２）。次に、この差に基づいて、インデックスデバイス表現を作成する（ステップＳＴ３０３）。インデックスデバイス表現とは、図４に示したデバイスの表現である。即ち、ステップＳＴ３０３では、異なるデバイス番号の部分をインデックスデバイスによる表現に置き換えると共に、共通するプログラムが格納される共通部分リストに基づいて、その部分をＦＯＲ〜ＮＥＸＴ文で囲みループすることによって、プログラムサイズを削減したプログラムを作成する。更に、このプログラムを最適化後のプログラム置換候補として登録する（ステップＳＴ３０４）。また、ステップＳＴ３０１において、相違デバイスのデバイス種類が異なる場合は、直ちに終了する。
【００３６】
尚、この例では、異なるデバイス番号のデバイスが１つの場合を示したが、デバイス番号が異なるデバイスが複数存在する場合は、それぞれ対応するデバイスについて相違デバイスリストを作成し、各々のデバイスに対してインデックスデバイスを設定することにより、同様にプログラムサイズを削減することができる。
【００３７】
また、これまでは、２つの回路ブロックを対象としていたが、最適化の範囲を３つの回路ブロック拡大する場合は、最初にこれまでの方法の通り、２つの回路ブロックについて、共通部分リストと相違デバイスリストを作成する。次に、その２つの回路ブロックに続く３つめの回路ブロックについて、共通部分リストと共通する命令の構成が存在するかを判定する。共通する命令の構成が存在し、その命令に付属するデバイスも同じであり、かつ相違デバイスリストに対応する位置のデバイスのみが異なり、更にそのデバイス番号の差が、以前の２つの回路ブロックの差と同一であれば、共通部分として扱う。デバイスの差が異なる場合は、共通部分として扱うことができないため、最適化は前の２つの回路ブロックに閉じて行う。
【００３８】
また、デバイス番号の変化が１ではない場合は、デバイス番号の差を算出し、その値だけループ処理の中でデバイスの値を加算あるいは減算する処理に置き換えることによって実現することができる。図４に示す最適化後の例では、デバイス番号が１つ異なるため、デバイスの値を１加算するＩＮＣ命令を用いている。例えばデバイスの値が２増える場合は、ＡＤＤ命令を用いる。
【００３９】
次に、プログラム置換判定手段４０４の動作について説明する。
図８は、プログラム置換判定手段４０４の動作を示すフローチャートである。
プログラム置換判定手段４０４は、プログラム最適化手段４０２におけるプログラム最適化制御手段の置換による効果を確認すると共に、置き換えの正当性を判定する。プログラム置換判定手段４０４は、先ず、図７のステップＳＴ３０４において置き換え候補として登録されたプログラムについて、置き換え前後のプログラムサイズを比較する（ステップＳＴ４０１）。置き換え後のプログラムサイズが小さいと判定される場合は（ステップＳＴ４０２）、処理の等価性をチェックする（ステップＳＴ４０３）。この処理の等価性とは、置き換えによってプログラムの演算結果が異なることがないかを判定する処理である。論理的な等価性と共に、入力信号のタイミングの変化に対する等価性を確認する。等価性に問題が無ければ（ステップＳＴ４０４）、置換許可をプログラム最適化制御手段に通知する（ステップＳＴ４０５）。ステップＳＴ４０２において、プログラムサイズが縮小されない、あるいは、ステップＳＴ４０４において等価性に問題があれば、プログラム最適化制御手段に対して置換不許可を通知する（ステップＳＴ４０６）。
【００４０】
次に、上記ステップＳＴ４０３における処理の等価性について説明する。
プログラムの置き換えによって問題が発生する場合の例として、割込みプログラムが挙げられる。割込みプログラムの実行とは、設定された割込み条件が満たされた時点で、実行中のプログラムを中断し、その割込み条件に対応付けられたプログラムを実行する機能である。対応する割込みプログラムの処理が完了すると、中断されたプログラムに戻りその位置から実行を再開する処理である。
【００４１】
割込みプログラムに起因する問題は、最適化するプログラムと割込みプログラムで同じデバイスを使用している場合に発生する。あるデバイスの値を繰り返し読み出して、論理演算を行い、別のデバイスに代入する処理があると仮定する。ここで、あるデバイスの値が繰り返し読み出される部分の処理について共通部分が存在するため、サイズを削減するためにその部分を共通部分式として括り出し、別のデバイスに置き換えるとする。この置き換えによって、共通部分の処理が１つのデバイスに集約されるため、同じ処理を繰り返す必要が無くなり、プログラムのサイズを削減できる。
【００４２】
しかし、共通部分の演算結果を集約したデバイスに対して値を書き込んだ後に、そのデバイスの値が割込みプログラムによって書き換えられると、演算結果を格納したデバイスの値が変化するため、問題が発生する。
【００４３】
このような条件のプログラムについて最適化によってプログラムを置換すると、割込みのタイミングによって最適化の前後でプログラムの動作が異なるものとなる。従って、このようなプログラムの置き換えは行うべきではない。このような観点に基づき、プログラム置換判定手段４０４は、こうした問題が発生するプログラムの変換を抑制する。
【００４４】
このようにして、プログラム最適化手段４０２およびプログラム置換判定手段４０４により、ＩＬプログラムの最適化が行われると、ラダープログラム生成手段４０３は、最適化されたＩＬプログラムから、ラダープログラムを生成する。
【００４５】
このように、実施の形態１では、プログラムの置き換えを行った後、この置き換え処理を判定するプログラム置換判定手段４０４を設けたので、プログラムの最適化を適切に行うことができる。また、インデックスデバイス表現を取り入れることによって、プログラムの最適化対象を拡大することができる。更に、プログラムの追加によってプログラムサイズがプログラマブルコントローラ１００のプログラム容量を超えるような場合に、プログラムサイズの短縮に時間と労力かけずに短時間でプログラムをダウンロードし、実行できるという効果がある。また、等価な処理を行うより小さいプログラムに変換するため、同じプログラム容量を持つプログラマブルコントローラ１００の中で、より多くの処理を実現することができる。
【００４６】
以上のように、実施の形態１のラダープログラム最適化装置によれば、ラダープログラムを解析するラダープログラム解析手段と、ラダープログラム解析手段で解析されたプログラム中の命令の構成とデバイスの種類が等しく、かつ、デバイスの番号が異なる複数の回路ブロックに対して、デバイスの表現を置き換えることによって共通部分式として扱うと共に、置き換えられたプログラムに対して、プログラムサイズが削減され、かつ置き換えの前後で処理の等価性が保たれているかを確認するプログラム最適化手段と、プログラム最適化手段で確認されたプログラムからラダープログラムを生成するラダープログラム生成手段とを備えたので、作成後や編集後のラダープログラムを自動的に最適化することができ、かつ、最適化の範囲を拡大することができる。
【００４７】
実施の形態２．
図９は、実施の形態２のラダープログラム解析手段４０１を示す構成図である。
実施の形態２のラダープログラム解析手段４０１は、デバイスソート手段４０５と論理最適化手段４０６を備えている。デバイスソート手段４０５は、デバイスの並びを変更する機能を有し、論理最適化手段４０６は、論理演算の最適化を行う機能を有している。
【００４８】
本発明によるプログラムサイズの削減は、命令の構成が同じでデバイス番号が異なる２つのプログラムを対象としている。このため、命令の順序が異なるプログラムであっても、等価な演算結果が保証される範囲内で命令の並びの変更が可能であれば、命令の並びを変更して構成を統一し、最適化の対象とする。この変換により、本発明によるプログラムサイズの削減対象を拡大することができる。このような変換をデバイスソート手段４０５と論理最適化手段４０６によって行う。
【００４９】
先ず、デバイスソート手段４０５の動作について説明する。
“ＡＮＤ”命令が連続する場合や、“ＯＲ”命令が連続する場合に、使用されているデバイスを、デバイス番号を元に、例えば昇順にソートしてプログラムの命令の並びを変更する。デバイスをソートする前のサンプルプログラムを図１０に、ソート後のプログラムを図１１に示す。
【００５０】
また、図１２は、デバイスをソートする場合の動作を示すフローチャートである。
デバイスソート手段４０５は、先ず、ラダープログラム解析手段４０１中の図示しない変換手段で変換されたＩＬを１行読み込む（ステップＳＴ５０１）。ここで、１行とは、命令とデバイスの組み合わせである。次にプログラムの終端であるかを判定する（ステップＳＴ５０２）。終端の場合は、処理を終了する。終端でなければ、読み込んだＩＬプログラムの命令がＡＮＤ命令であるかを判定する（ステップＳＴ５０３）。ＡＮＤ命令の場合は、後続のプログラムに対して、ＡＮＤ命令が連続する限り命令を読み出し、対応するデバイスを登録する（ステップＳＴ５０４）。後続する命令がＡＮＤ命令でなくなった場合は、登録したデバイスを例えば昇順に並び換え、元のプログラムを変更する（ステップＳＴ５０５）。
【００５１】
また、ステップＳＴ５０３において、ＡＮＤ命令でない場合は、ＯＲ命令であるかを判定する（ステップＳＴ５０６）。ここで、後続する命令がＯＲ命令の場合は、ＯＲ命令が連続する限り命令を読み出し、対応するデバイスを登録する（ステップＳＴ５０７）。後続する命令がＯＲ命令でなくなった場合は、登録したデバイスを例えば昇順に並び替え、元のプログラムを変更する（ステップＳＴ５０８）。
【００５２】
更に、ステップＳＴ５０４〜ステップＳＴ５０５や、ステップＳＴ５０７〜ステップＳＴ５０８では、ＡＮＢやＯＲＢで接続される実行時にスタックを操作する上で、一まとまりとなる処理の単位でも、ソートを行う。このときのソートの基準の例としては、その一まとまりの中で最も小さいデバイス番号をそのまとまりの番号としてソートする方法がある。また、複数のデバイス種類が混在する場合は、先ずデバイス種類のアルファベット順に並べ、その後デバイス番号を基にソートする方法がある。
【００５３】
次に、論理最適化手段４０６の動作について説明する。
“ＡＮＤ”命令と“ＯＲ”命令の組み合わせで表現される場合、命令とその命令に対応するデバイスの順序を入れ替えることによって、等価な演算結果を生成するプログラムに変換することができる。特に、スタックの動作が最適となるように、命令と対応するデバイスの順序を入れ替えることにより、生成するラダープログラムのステップ数を削減することができる。この例を図１３と図１４に示す。
【００５４】
図１３は、命令の順序を入れ替える前のラダープログラムである。このプログラムのサイズは、３８ステップである。このラダープログラムでは、ＡＮＢ命令が入る。このＡＮＢ命令は、スタックのトップの要素とその次の要素の論理積をとる命令である。プログラムの命令の順序を入れ換えて、スタック操作の順番を変更することで、この命令の数を削減することができる。
図１４は、論理の最適化によってＡＮＢ命令を削減したラダープログラムである。命令の順序を入れ換えることによって、ステップ数を３６ステップに削減している。
【００５５】
このように命令の数を削減する方針でプログラムの命令の順序を並べ替えることにより、プログラム中の命令の順序を揃えることができる。このため、そのままでは共通部分として認識できない複数の回路ブロックが、プログラムサイズの縮小を基準とした並べ替えによって、共通部分を認識できるようになる場合があり、最適化の対象を拡大できる。
【００５６】
なお、これらのプログラムの変更は、ラダープログラム解析手段４０１で行うこともできるし、プログラム最適化手段４０２で、プログラムの置き換えを行う前に実施することもできる。即ち、デバイスソート手段４０５および論理最適化手段４０６は、ラダープログラム解析手段４０１またはプログラム最適化手段４０２のいずれに設けてもよい。
【００５７】
以上のように、実施の形態２のラダープログラム最適化装置によれば、デバイスの並びの置き換えを行うデバイスソート手段を備え、プログラム最適化手段は、デバイスソート手段によってデバイスの並びが置き換えられたプログラムに対してデバイスの表現を置き換えるようにしたので、最適化処理の適用対象を拡大することができ、その結果、更にプログラムのサイズを削減することができる。
【００５８】
実施の形態３．
図１５は、実施の形態３のプログラム最適化手段４０２ａの構成図である。
実施の形態３のプログラム最適化手段４０２ａは、デバイス変換手段４０７とプログラム置換判定手段４０４ａとを備え、入力されるＩＬプログラム５０３に対して最適化を行い、最適化後ＩＬプログラム５０４を出力するものである。デバイス変換手段４０７は、プログラム中に現れるデバイスを、別のデバイスに置き換える手段である。このデバイスの置き換えでは、本発明による最適化方法が適用できるようにデバイスの名前を置き換える。即ち、デバイスの名前を構成するデバイス種類かデバイス番号のうち少なくとも一方を置き換える。また、プログラム置換判定手段４０４ａは、デバイス変換手段４０７によってデバイスが置き換えられたプログラムに対して置換判定を行うものであり、置換判定そのものの処理は実施の形態１のプログラム置換判定手段４０４と同様である。
【００５９】
実施の形態１では、図７のステップＳＴ３０１およびステップＳＴ３０２において、デバイスの種類を判定し、そのデバイスの差分を算出している。この実施の形態３では、デバイス変換手段４０７により、デバイスの種類が異なる場合に、そのデバイスを置き換えることによって、デバイスの種類を統一し、本発明による最適化方法を適用する。更に３つ以上の複数の回路ブロックに対して、本発明による最適化方法を適用するように、デバイスの名前を置き換える。
【００６０】
デバイス名を置き換えるには、該当するデバイスについて、プログラム全体に渡って置き換える方法と、最適化する部分の前後のみ、デバイスを置き換える方法がある。プログラム全体に渡って置き換える方法では、プログラム全体に渡ってデバイスの名前を置き換えるため、プログラム全体としての動作が変わらないことが保証される範囲で置き換えを行わなければならない。従って、入力や出力信号に直接接続されているデバイスについては、このような置き換えの対象とすることはできない。直接入出力対象に影響しない入出力用のデバイスや、プログラマブルコントローラ１００内部での計算に使用されるデバイスが対象となる。
【００６１】
一方、最適化する部分の前後のみデバイスを置き換える方法は、置き換えによって影響される範囲が限定されるため、入出力に影響するデバイスを扱うことができる。しかし、最適化箇所の前で最適化できるようにデバイスの値を最適化用のデバイスに代入する必要がある。また、最適化箇所において、そのデバイスに対して書き込み処理が存在し、そのデバイスの値が変化する可能性がある場合は、最適化箇所の後に、そのデバイスから元のデバイスへ値を代入する必要がある。このように、最適化する部分の前後のみデバイスを置き換える方法は、デバイスの値を移すための処理を追加する必要があるため、プログラムサイズは大きくなる。プログラムを置換する場合には、この追加分のプログラムサイズを考慮して置換判定を行う。
【００６２】
図１６および図１７は、デバイス変換前のラダープログラムおよびデバイス変換を行って最適化したラダープログラムを示す説明図である。
図１６に示すプログラム例では、図３に示したラダープログラムとは異なり“Ｘ８”の部分が“Ｘ９”となっている。このため、図４に示したようなラダープログラムに最適化することができない。そこで、デバイス変換手段４０７によって、問題となる“Ｘ９”のデバイスを“Ｘ８”に置き換える。これらは、いずれもデバイス種類が“Ｘ”であるため、置き換えが可能である。
【００６３】
具体的には、図１７の２行目に示すように置き換えを行う。これは、“Ｘ９”の値を“Ｘ８”に代入することを意味しており、このような置き換えを行うには次の二つの条件が必要となる。プログラム置換判定手段４０４ａは、以下の条件を満たす場合にのみ置き換え可の判定結果を出力する。
【００６４】
（１）置き換えの追加によるプログラムサイズの増分を考慮しても最適化の効果があること
この例では、２行目の追加によって、２ステップ増える。但し、最適化前が３９ステップであったのに対し、最適化後は、２５＋２＝２７ステップ（実施の形態１で説明したように、２５ステップに最適化されるが、置き換え追加により２ステップ加算される）となり最適化の効果がある。
（２）置き換え先のデバイスがプログラム中の他の部分で使われていないこと
この例の場合、“Ｘ８”デバイスが、このプログラムの他の部分で使われていないことが必要である。
【００６５】
尚、この例ではＸデバイスについて、デバイス番号だけを置き換えたが、ＸデバイスからＭデバイスに置き換えるなど、必要に応じてデバイス種類を置き換えることも可能である。但し、置き換え先としてＹデバイスは指定しない。即ち、Ｙデバイスは出力に利用するデバイスであり、プログラム中に使用していないからといって、あるＹデバイス（例えばＹ１０）を置き換え先に指定すると、そのＹデバイスに対して値が代入され、外部に信号が出力されてしまうからである。
【００６６】
以上のように、実施の形態３のラダープログラム最適化装置によれば、デバイス種類かデバイス番号のうち少なくとも一方を置き換えるデバイス変換手段を備え、プログラム最適化手段は、デバイス変換手段によって、デバイス種類かデバイス番号のうち少なくとも一方を置き換えたプログラムに対してデバイスの表現を置き換えるようにしたので、更に最適化の対象を拡大し、結果としてプログラム全体の最適化効率をより改善することができる。
【００６７】
実施の形態４．
実施の形態４は、ループ化した後、共通部分をループ外へ括りだすようにしたものである。
図１８は、実施の形態４におけるプログラム最適化手段４０２ｂの構成図である。
実施の形態４のプログラム最適化手段４０２ｂは、ループ外移動手段４０８、プログラム置換判定手段４０４ｂを備え、入力されるＩＬプログラム５０３に対して最適化を行い、最適化後ＩＬプログラム５０４ａを出力するものである。ループ外移動手段４０８は、プログラム最適化手段４０２ｂ内の図示しないプログラム最適化制御手段によってループ化される部分について、ループ処理に関係の無い部分をループ外に移動する手段である。また、プログラム置換判定手段４０４ｂは、ループ外移動手段４０８で処理されたプログラムに対して置換判定を行う手段であり、置換判定そのものの処理は実施の形態１のプログラム置換判定手段４０４と同様である。
【００６８】
図１９は、共通部分をループ外へ移動する前のラダープログラムを示す説明図である。
この図において、破線枠５１０内の部分がループ中で毎回行われる処理であり、ループの外に出しても同じ演算結果が得られ、かつ処理時間が短縮できる。このため、ループ外移動手段４０８は、その部分の演算結果を他のデバイスに代入し、ループ内ではそのデバイスを参照するように変更する。
図２０は、図１９の共通部分をループ外へ移動した結果を示す説明図である。
図１９に示すラダープログラムでは３６ステップあるのに対して、図２０に示すラダープログラムでは３５ステップに削減されている。
【００６９】
ループ外への移動は、図６のステップＳＴ１０７によって抽出された、複数の回路ブロック間で共通する部分について行う。この共通部分の中で、ループを実行する度に変化する値を使用せず、ループに無関係な命令とデバイスの組み合わせを検出し、ループの外へ移動する。ループと命令及びデバイスとの関係は、ループ中でループ回数に依存するデバイスか否かを判断の基準とする。また、ループ回数に依存するデバイスの値に依存するデバイスもループに関係するデバイスとして、ループ外への移動対象から外す。
このようにループに無関係な処理をループ外へ移動することにより、プログラムのサイズを削減しつつ、プログラムの実行時間を短縮することが可能となる。
【００７０】
このように、実施の形態４では、同様の処理をループ化して統一しているため、可読性を向上することができる。また、変更する箇所が繰り返し記述されている演算の場合は、繰り返しと同数の箇所に対して変更する必要があるが、繰り返しをループ化することによって、変更箇所を一箇所にまとめることができ、メンテナンス性が向上するという効果がある。
【００７１】
以上のように、実施の形態４のラダープログラム最適化装置によれば、プログラム最適化手段は、デバイスの表現を置き換えることによってループ処理に置き換えたプログラムに対して、ループに無関係な処理をループ外に移動させるようにしたので、プログラムのサイズを削減しつつ、プログラムの実行時間を短縮することが可能となる。
【００７２】
また、本発明の最適化プログラムによれば、ラダープログラムに対して最適化処理を行うコンピュータを、実施の形態１から実施の形態４のうちいずれかのラダープログラム最適化装置として機能させるようにしたので、実施の形態１から実施の形態４のうちのいずれかの実施の形態の効果を奏するラダープログラム最適化装置をコンピュータ上に実現することができる。
【図面の簡単な説明】
【００７３】
【図１】この発明の実施の形態１によるラダープログラム最適化装置の適用例を示す構成図である。
【図２】この発明の実施の形態１によるラダープログラム最適化装置の構成図である。
【図３】この発明の実施の形態１によるラダープログラム最適化装置の最適化前ラダープログラムの説明図である。
【図４】この発明の実施の形態１によるラダープログラム最適化装置の最適化後ラダープログラムの説明図である。
【図５】この発明の実施の形態１によるラダープログラム最適化装置の解析後のＩＬプログラムの説明図である。
【図６】この発明の実施の形態１によるラダープログラム最適化装置の動作を示すフローチャートである。
【図７】この発明の実施の形態１によるラダープログラム最適化装置の相違デバイスに対する処理を示すフローチャートである。
【図８】この発明の実施の形態１によるラダープログラム最適化装置のプログラム置換判定手段の動作を示すフローチャートである。
【図９】この発明の実施の形態２によるラダープログラム最適化装置のラダープログラム解析手段を示す構成図である。
【図１０】この発明の実施の形態２におけるソート前のサンプルプログラムの説明図である。
【図１１】この発明の実施の形態２におけるソート後のサンプルプログラムの説明図である。
【図１２】この発明の実施の形態２におけるデバイスソート時の動作を示すフローチャートである。
【図１３】この発明の実施の形態２における命令の順序を入れ替える前のラダープログラムの説明図である。
【図１４】この発明の実施の形態２における命令の順序を入れ替えた後のラダープログラムの説明図である。
【図１５】この発明の実施の形態３によるラダープログラム最適化装置のプログラム最適化手段を示す構成図である。
【図１６】この発明の実施の形態３におけるデバイス変換前のラダープログラムを示す説明図である。
【図１７】この発明の実施の形態３におけるデバイス変換後のラダープログラムを示す説明図である。
【図１８】この発明の実施の形態４によるラダープログラム最適化装置のプログラム最適化手段を示す構成図である。
【図１９】この発明の実施の形態４における共通部分をループ外へ移動する前のラダープログラムを示す説明図である。
【図２０】この発明の実施の形態４における共通部分をループ外へ移動した後のラダープログラムを示す説明図である。
【符号の説明】
【００７４】
４００  ラダープログラム最適化装置、４０１  ラダープログラム解析手段、４０２，４０２ａ，４０２ｂ  プログラム最適化手段、４０３  ラダープログラム生成手段、４０４，４０４ａ，４０４ｂ  プログラム置換判定手段、４０５  デバイスソート手段、４０６  論理最適化手段、４０７  デバイス変換手段、５０１  最適化前ラダープログラム、５０２  最適化後ラダープログラム、５０３  ＩＬプログラム、５０４，５０４ａ  最適化後ＩＬプログラム。
【図１】
0004494361.tif 000002
【図２】
0004494361.tif 000003
【図３】
0004494361.tif 000004
【図４】
0004494361.tif 000005
【図５】
0004494361.tif 000006
【図６】
0004494361.tif 000007
【図７】
0004494361.tif 000008
【図８】
0004494361.tif 000009
【図９】
0004494361.tif 000010
【図１０】
0004494361.tif 000011
【図１１】
0004494361.tif 000012
【図１２】
0004494361.tif 000013
【図１３】
0004494361.tif 000014
【図１４】
0004494361.tif 000015
【図１５】
0004494361.tif 000016
【図１６】
0004494361.tif 000017
【図１７】
0004494361.tif 000018
【図１８】
0004494361.tif 000019
【図１９】
0004494361.tif 000020
【図２０】
0004494361.tif 000021