(57)【要約】  変数間依存解析部（３１０）は、シーケンス制御用の言語で記述された制御プログラムであるシーケンス制御プログラムに含まれる複数の命令の命令間の引数と返り値との関係を解析する。ＰＬＣ命令並び替え分割部（３１２）は、変数間依存解析部（３１０）により解析された命令間の引数と返り値との関係に基づき、複数の命令の命令実行順序の変更及び命令単位でのシーケンス制御プログラムの分割の少なくともいずれかを行う。
2018042520.tif 000002
【特許請求の範囲】
【請求項１】
シーケンス制御用の言語で記述された制御プログラムであるシーケンス制御プログラムに含まれる複数の命令の命令間の引数と返り値との関係を解析する関係解析部と、
前記関係解析部により解析された命令間の引数と返り値との関係に基づき、前記複数の命令の命令実行順序の変更及び命令単位での前記シーケンス制御プログラムの分割の少なくともいずれかを行うプログラム編集部とを有するプログラム編集装置。
【請求項２】
前記プログラム編集部は、
前記関係解析部により解析された命令間の引数と返り値との関係と、各命令に含まれる演算子とに基づき、前記複数の命令の命令実行順序の変更を行う請求項１に記載のプログラム編集装置。
【請求項３】
前記プログラム編集部は、
前記関係解析部により解析された命令間の引数と返り値との関係と、各命令に含まれる演算子とに基づき、連続実行により演算効率が向上する２以上の命令を前記複数の命令の中から指定し、指定した２以上の命令が連続して実行されるように前記複数の命令の命令実行順序の変更を行う請求項２に記載のプログラム編集装置。
【請求項４】
前記プログラム編集装置は、更に、
連続実行により演算効率が向上する演算子の組み合わせが推奨演算子組み合わせとして定義される命令情報を記憶する情報記憶部を有し、
前記プログラム編集部は、
前記複数の命令から任意の命令を選択し、
選択した選択命令の返り値を引数とする命令の返り値を引数とする命令以外の命令であって前記選択命令に含まれる演算子とともに前記命令情報において前記推奨演算子組み合わせに含まれる演算子が含まれる１以上の命令と、前記選択命令とを指定する請求項３に記載のプログラム編集装置。
【請求項５】
前記プログラム編集部は、
前記関係解析部により解析された命令間の引数と返り値との関係と、ＰＬＣ（Ｐｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）装置で同時に実行できる命令数である同時実行命令数とに基づき、命令単位での前記シーケンス制御プログラムの分割を行う請求項１に記載のプログラム編集装置。
【請求項６】
前記プログラム編集部は、
前記シーケンス制御プログラムを前記同時実行命令数と同数の分割プログラムに分割する請求項５に記載のプログラム編集装置。
【請求項７】
前記プログラム編集部は、
前記複数の命令から任意の命令を選択し、選択した選択命令と、前記選択命令の返り値を引数とする他の命令とが同じ分割プログラムに含まれるように、前記シーケンス制御プログラムを分割する請求項６に記載のプログラム編集装置。
【請求項８】
コンピュータが、シーケンス制御用の言語で記述された制御プログラムであるシーケンス制御プログラムに含まれる複数の命令の命令間の引数と返り値との関係を解析し、
前記コンピュータが、解析された命令間の引数と返り値との関係に基づき、前記複数の命令の命令実行順序の変更及び命令単位での前記シーケンス制御プログラムの分割の少なくともいずれかを行うプログラム編集方法。
【請求項９】
シーケンス制御用の言語で記述された制御プログラムであるシーケンス制御プログラムに含まれる複数の命令の命令間の引数と返り値との関係を解析する関係解析処理と、
前記関係解析処理により解析された命令間の引数と返り値との関係に基づき、前記複数の命令の命令実行順序の変更及び命令単位での前記シーケンス制御プログラムの分割の少なくともいずれかを行うプログラム編集処理とをコンピュータに実行させるプログラム編集プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム編集装置、プログラム編集方法及びプログラム編集プログラムに関する。
【背景技術】
【０００２】
特許文献１には、ソフトウェアＰＬＣ（Ｐｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）プログラミング装置が開示されている。特許文献１のソフトウェアＰＬＣプログラミング装置は、ＰＬＣ命令を用いてユーザが生成したシーケンス制御プログラムを、変換プログラムを用いて汎用的な高級言語の命令を使用したプログラムに変換する。そして、ソフトウェアＰＬＣプログラミング装置は、変換後のプログラムから汎用コンパイラを使用して汎用ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）用のバイナリコード（以下、単にバイナリともいう）を生成する。これにより、汎用的なコンピュータによるシーケンス制御が可能になる
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−２９５６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、ＰＬＣ命令を用いたシーケンス制御プログラムを変換プログラムによって高級言語のプログラムに変換し、変換後のプログラムからコンパイラによってバイナリを生成する。特許文献１では、シーケンス制御プログラムに記述される命令実行順序を維持してシーケンス制御プログラムを高級言語のプログラムに変更し、バイナリを生成する。
このため、命令実行順序が必ずしも効率化されておらず、バイナリを実行した際のシーケンス制御の実行所要時間が希望所要時間以内に収まらない場合がある。このような場合に、ユーザは、シーケンス制御の実行所要時間を希望所要時間以内に収めるように再度シーケンス制御プログラムを修正しなければないという課題がある。【０００５】
また、近年、汎用ＣＰＵはマルチコア化が進んでおり、複数のバイナリを並列して実行することができ、実行所要時間を短縮することができる。この場合、同時に実行されるバイナリの間で、処理内容が競合しないよう配慮する必要がある。しかし、所望の処理を複数のシーケンス制御プログラムに跨って記述することはユーザにとって容易ではない。また、シーケンス制御プログラムをいくつのバイナリに分割すれば最も効率的なのかはＰＬＣ装置やＰＬＣ装置内のプロセッサなどによって異なる。このため、ＰＬＣ装置を変更するたびにシーケンス制御プログラムを作り直す必要が発生するという課題がある。【０００６】
本発明は、上記の課題を解決することを主な目的とする。より具体的には、本発明は、ユーザが生成したシーケンス制御プログラムから、当該シーケンス制御プログラムと等しい結果が得られるより効率的なシーケンス制御プログラムを生成することを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明に係るプログラム編集装置は、
シーケンス制御用の言語で記述された制御プログラムであるシーケンス制御プログラムに含まれる複数の命令の命令間の引数と返り値との関係を解析する関係解析部と、
前記関係解析部により解析された命令間の引数と返り値との関係に基づき、前記複数の命令の命令実行順序の変更及び命令単位での前記シーケンス制御プログラムの分割の少なくともいずれかを行うプログラム編集部とを有する。
【発明の効果】
【０００８】
本発明によれば、シーケンス制御プログラムにおける命令実行順序の変更及びシーケンス制御プログラムの分割の少なくともいずれかにより、ユーザが生成したシーケンス制御プログラムから、当該シーケンス制御プログラムと等しい結果が得られるより効率的なシーケンス制御プログラムを生成することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係るプログラミング装置の機能構成例及びＰＬＣ装置のハードウェア構成例を示す図。
【図２】実施の形態１に係るプログラミング装置のハードウェア構成例を示す図。
【図３】実施の形態１に係るＰＬＣ装置の処理シーケンスを示す図。
【図４】実施の形態１に係るシーケンス制御プログラム最適化部の機能構成例を示す図。
【図５】実施の形態１に係るシーケンス制御プログラムの例を示す図。
【図６】実施の形態１に係る命令間の依存関係を解析する処理を示すフローチャート図。
【図７】実施の形態１に係る変数間依存情報の例を示す図。
【図８】実施の形態１に係る命令情報の例を示す図。
【図９】実施の形態１に係るＰＬＣ装置情報の例を示す図。
【図１０】実施の形態１に係る命令実行順序を変更する処理を示すフローチャート図。
【図１１】実施の形態１に係るシーケンス制御プログラムを分割する処理を示すフローチャート図。
【図１２】実施の形態１に係る等価最適化シーケンス制御プログラムの例を示す図。
【図１３】実施の形態１に係る等価最適化シーケンス制御プログラムの例を示す図。
【図１４】実施の形態２に係るプログラミング装置の機能構成例及びＰＬＣ装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分または相当する部分を示す。
【００１１】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１は、本実施の形態に係るプログラミング装置４００の機能構成例及びＰＬＣ装置４０１のハードウェア構成例を示す。
プログラミング装置４００は、プログラム編集装置の例である。また、プログラミング装置４００で行われる動作は、プログラム編集方法の例である。また、プログラミング装置４００で行われる動作を実現するプログラムは、プログラム編集プログラムの例である。
図１に示すように、プログラミング装置４００は、シーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２で構成される。
ＰＬＣ装置４０１は、プロセッサ５００、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）装置５０１、メモリ５０３、記憶装置５０４及びバス５０５で構成される。
【００１２】
プログラミング装置４００において、シーケンス制御プログラム最適化部３００は、ユーザ１００からシーケンス制御プログラム２００を取得し、シーケンス制御プログラム２００から等価最適化シーケンス制御プログラム２０１を生成する。そして、シーケンス制御プログラム最適化部３００は、生成した等価最適化シーケンス制御プログラム２０１を高級言語変換部３０１に出力する。
シーケンス制御プログラム２００は、シーケンス制御用の言語で記述された制御プログラムである。シーケンス制御プログラム２００には、複数のＰＬＣ命令（以下、単に命令ともいう）が含まれる。図５は、シーケンス制御プログラム２００の一例を示す。図５の詳細は後述する。シーケンス制御プログラム２００は、ユーザ１００により生成される。ユーザ１００は、ＰＬＣ装置４０１にシーケンス制御を行わせる者である。
等価最適化シーケンス制御プログラム２０１は、シーケンス制御プログラム最適化部３００により最適化されたシーケンス制御プログラムである。具体的には、等価最適化シーケンス制御プログラム２０１は、シーケンス制御プログラム２００内の複数のＰＬＣ命令の命令実行順序が変更されたシーケンス制御プログラム又は命令単位でシーケンス制御プログラム２００を分割して得られたシーケンス制御プログラムである。
【００１３】
高級言語変換部３０１は、シーケンス制御プログラム最適化部３００から等価最適化シーケンス制御プログラム２０１を取得し、等価最適化シーケンス制御プログラム２０１から高級言語プログラム２０２を生成する。そして、高級言語変換部３０１は、生成した高級言語プログラム２０２をコンパイラ３０２に出力する。
高級言語プログラム２０２は、汎用的な高級言語で記述された制御プログラムである。高級言語プログラム２０２は、例えばＣ言語などで記述された制御プログラムである。
【００１４】
コンパイラ３０２は、高級言語変換部３０１から高級言語プログラム２０２を取得し、高級言語プログラム２０２からバイナリ２０３を生成する。
バイナリ２０３は、ＰＬＣ装置４０１で実行可能なバイナリコードである。
【００１５】
ＰＬＣ装置４０１は、バイナリ２０３を実行して、シーケンス制御を行う。
本実施の形態では、ＰＬＣ装置４０１の種類は問わない。前述したように、ＰＬＣ装置４０１は、例えば、プロセッサ５００、Ｉ／Ｏ装置５０１、メモリ５０３、記憶装置５０４及びバス５０５で構成される。
【００１６】
プログラミング装置４００及びＰＬＣ装置４０１は、図１に示す全ての要素を必ず具備していなくてもよく、また、図１に示す要素以外の要素を備えていてもよい。
【００１７】
また、図２は、本実施の形態に係るプログラミング装置４００のハードウェア構成例を示す。
【００１８】
プログラミング装置４００は、バス１５０５に、プロセッサ１５００、Ｉ／Ｏ装置１５０１、メモリ１５０３、記憶装置１５０４及びユーザインタフェース装置１５０６が接続されているコンピュータである。
記憶装置１５０４には、図１に示すシーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２の機能を実現するプログラムが記憶されている。
これらプログラムは、記憶装置１５０４からメモリ１５０３にロードされて、プロセッサ１５００により実行される。つまり、プロセッサ１５００は、シーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２の動作を行う。
図２では、プロセッサ１５００がシーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２の機能を実現するプログラムを実行している状態を模式的に表している。
ユーザインタフェース装置１５０６は、ユーザ１００からシーケンス制御プログラム２００を取得する。
Ｉ／Ｏ装置１５０１は、設定値及びコンパイラ３０２により生成されたバイナリ２０３をＰＬＣ装置４０１に出力する。
【００１９】
図３は、ＰＬＣ装置４０１の処理シーケンス例を示す。
まず、ＰＬＣ装置４０１は、入力処理９００を実行する。入力処理９００では、ＰＬＣ装置４０１は、バイナリ２０３の実行に必要な設定値をプログラミング装置４００のＩ／Ｏ装置１５０１から取得する。なお、ＰＬＣ装置４０１は、入力処理９００の前にバイナリ２０３をＩ／Ｏ装置１５０１から取得済みである。
次に、ＰＬＣ装置４０１は、シーケンス制御処理９０１を行う。つまり、ＰＬＣ装置４０１は、入力処理９００で取得した設定値を用いてバイナリ２０３を実行する。
次に、ＰＬＣ装置４０１は、出力処理９０２にて、シーケンス制御処理９０１の実行結果を外部装置に出力したり、記憶装置５０４に格納する。
入力処理９００、シーケンス制御処理９０１、出力処理９０２は実行周期９０３ごとに繰り返し行われる。
実行周期９０３を短くし、一定時間内に行われる入力処理９００、シーケンス制御処理９０１、出力処理９０２の回数を多くすれば、ＰＬＣ装置４０１の性能を高めることができる。
また、ＰＬＣ装置４０１の振る舞いは入力処理９００と出力処理９０２で決まるため、入力処理９００と出力処理９０２との整合が取れれば、ＰＬＣ装置４０１は、シーケンス制御処理９０１をどのように行ってもよい。
【００２０】
図４は、シーケンス制御プログラム最適化部３００の機能構成例を示す。
シーケンス制御プログラム最適化部３００は、変数間依存解析部３１０、情報記憶部３１１及びＰＬＣ命令並び替え分割部３１２で構成される。
【００２１】
変数間依存解析部３１０は、シーケンス制御プログラム２００に含まれるＰＬＣ命令間の引数と返り値との関係（以下、依存関係ともいう）を解析する。
また、変数間依存解析部３１０は、ＰＬＣ命令間の依存関係が示される変数間依存情報２１０を出力する。図７は、変数間依存情報２１０の一例である。図７の詳細は後述する。
変数間依存解析部３１０は関係解析部の例である。また、変数間依存解析部３１０で行われる処理は関係解析処理の例である。
【００２２】
情報記憶部３１１は、命令情報２１１とＰＬＣ装置情報２１２を記憶している。
命令情報２１１には、例えば、複数の演算子のうち、連続実行により演算効率が向上する演算子の組み合わせが定義されている。図８は命令情報２１１の一例を示す。図８の詳細は後述するが、図８に記述されている演算子の組み合わせは、推奨演算子組み合わせに相当する。具体的には、ＡＤＤとＡＤＤ、ＡＤＤとＳＵＢの組み合わせ、ＳＵＢとＡＤＤ、ＳＵＢとＳＵＢの組み合わせが推奨演算子組み合わせに相当する。
ＰＬＣ装置情報２１２には、例えば、ＰＬＣ装置４０１の機種ごとに、ＰＬＣ装置４０１が同時に実行できるＰＬＣ命令の数（同時実行命令数）が定義されている。図９はＰＬＣ装置情報２１２の例である。図９の詳細は後述する。
なお、情報記憶部３１１は、ＰＬＣ命令に関する、図８とは異なる種類の情報を命令情報２１１として記憶していてもよい。
また、情報記憶部３１１は、ＰＬＣ装置４０１に関する、図９とは異なる種類の情報をＰＬＣ装置情報２１２として記憶していてもよい。
【００２３】
ＰＬＣ命令並び替え分割部３１２は、変数間依存情報２１０、命令情報２１１、ＰＬＣ装置情報２１２をもとに、シーケンス制御プログラム２００から等価最適化シーケンス制御プログラム２０１を生成する。
等価最適化シーケンス制御プログラム２０１は、シーケンス制御プログラム２００と処理結果が同一で、ＰＬＣ装置４０１がより高速に実行できるシーケンス制御プログラムである。
ＰＬＣ命令並び替え分割部３１２は、より具体的には、シーケンス制御プログラム２００内の複数のＰＬＣ命令の命令実行順序の変更及びＰＬＣ命令単位でのシーケンス制御プログラム２００の分割の少なくともいずれかを行って、等価最適化シーケンス制御プログラム２０１を生成する。
ＰＬＣ命令並び替え分割部３１２は、命令実行順序の変更を行う場合は、変数間依存情報２１０に示されるＰＬＣ命令間の引数と返り値との関係と、シーケンス制御プログラム２００内の各ＰＬＣ命令に含まれる演算子とに基づき、連続実行により演算効率が向上する２以上の命令を複数のＰＬＣ命令の中から指定する。そして、ＰＬＣ命令並び替え分割部３１２は、指定した２以上のＰＬＣ命令が連続して実行されるように複数のＰＬＣ命令の命令実行順序の変更を行う。
例えば、ＰＬＣ命令並び替え分割部３１２は、複数のＰＬＣ命令から任意のＰＬＣ命令を選択し、選択したＰＬＣ命令（選択命令ともいう）の返り値を引数とするＰＬＣ命令の返り値を引数とするＰＬＣ命令以外のＰＬＣ命令であって選択命令に含まれる演算子とともに命令情報２１１において推奨演算子組み合わせに含まれる演算子が含まれる１以上のＰＬＣ命令と、選択命令とを指定する。
また、ＰＬＣ命令並び替え分割部３１２は、シーケンス制御プログラム２００の分割を行う場合は、命令情報２１１に示されるＰＬＣ命令間の引数と返り値との関係と、ＰＬＣ装置情報２１２に示されるＰＬＣ装置４０１で同時に実行できる命令数（同時実行命令数）とに基づき、シーケンス制御プログラム２００を同時実行命令数と同数の分割プログラムに分割する。
例えば、ＰＬＣ命令並び替え分割部３１２は、複数のＰＬＣ命令から任意のＰＬＣ命令を選択し、選択した選択命令と、選択命令の返り値を引数とする他のＰＬＣ命令とが同じ分割プログラムに含まれるように、シーケンス制御プログラム２００を分割する。
ＰＬＣ命令並び替え分割部３１２は、プログラム編集部の例である。また、ＰＬＣ命令並び替え分割部３１２で行われる処理はプログラム編集処理の例である。
【００２４】
図５は、シーケンス制御プログラム２００の一例を示す。図５は、シーケンス制御プログラム２００の例としてラダープログラムを示す。
図５のシーケンス制御プログラム２００では、いわゆるラダー２０００に、ＰＬＣ命令２００１〜２００５が接続されている。図５のシーケンス制御プログラム２００では、ＰＬＣ命令２００１、ＰＬＣ命令２００２、ＰＬＣ命令２００３、ＰＬＣ命令２００４、ＰＬＣ命令２００５の順に実行される。
変数２０１０〜２０２０は、ＰＬＣ命令の入力値である引数又はＰＬＣ命令の出力値である返り値としてデータを保持する。
ＰＬＣ命令には様々な種類があり、それぞれの種類に応じて、引数で与えられたデータを処理して、処理結果のデータを返り値として出力する。たとえばＰＬＣ命令２００１、２００３、２００４は引数１の値と引数２の値とを加算し、加算値を返り値１として出力する。ＰＬＣ命令２００２は引数１の値と引数２の値とを乗算し、乗算値を返り値１として出力する。ＰＬＣ命令２００５は引数１の値を引数２の値で除算し、除算値を返り値１として出力する。
あるＰＬＣ命令の返り値として使用した変数を、のちに実行するＰＬＣ命令の引数として使用することもできる。また、シーケンス制御プログラム２００には、図５に示すＰＬＣ命令２００１〜２００５で行われる演算以外の演算が行われるＰＬＣ命令が含まれていてもよい。また、ＰＬＣ命令の引数及び返り値の数は、図５に示すものと異なっていてもよい。また、引数及び返り値のいずれかが存在しなくてもよい。
【００２５】
＊＊＊動作の説明＊＊＊
次に、本実施の形態の係る動作例を説明する。
【００２６】
ユーザ１００はシーケンス制御プログラム２００を生成し、生成したシーケンス制御プログラム２００をプログラミング装置４００に入力する。ここでは、ユーザ１００が図５のシーケンス制御プログラム２００を生成したものとする。
プログラミング装置４００のシーケンス制御プログラム最適化部３００の変数間依存解析部３１０は、図６に示す処理を行って変数間依存情報２１０を得る。
図６は、変数間依存解析部３１０の動作例を示す。
以下、図６を参照して変数間依存解析部３１０の動作例を説明する。
【００２７】
ステップＳ３００１では、変数間依存解析部３１０は、現在の処理の状態を示す変数であるｎとｍの値を初期値である１に設定する。
【００２８】
次に、ステップＳ３００２では、変数間依存解析部３１０は、シーケンス制御プログラム２００上のｎ番目のＰＬＣ命令（以下、命令ｎという）の引数に用いられている変数と返り値に用いられている変数と演算子とを取得する。
【００２９】
次に、ステップＳ３００３では、変数間依存解析部３１０は、ステップＳ３００２で取得した引数の変数と返り値の変数と演算子とを変数間依存情報２１０に書き込む。
【００３０】
次に、ステップＳ３００４では、変数間依存解析部３１０は、シーケンス制御プログラム２００上のｎ＋ｍ番目のＰＬＣ命令（以下、命令ｎ＋ｍという）の引数に用いられている変数が、ステップＳ３００２で取得した命令ｎの返り値の変数に一致するか否かを判定する。
【００３１】
命令ｎ＋ｍ番目の引数に用いられている変数が命令ｎの返り値の変数と一致すれば、変数間依存解析部３１０は、ステップＳ３００５において、命令ｎ＋ｍが命令ｎに依存していることを変数間依存情報２１０に書き込み、ステップＳ３００６に移る。
【００３２】
ステップＳ３００６では、変数間依存解析部３１０は、命令ｎ＋ｍがシーケンス制御プログラム２００の最後のＰＬＣ命令であるかどうかを判定する。
【００３３】
命令ｎ＋ｍがシーケンス制御プログラム２００の最後のＰＬＣ命令でなければ、変数間依存解析部３１０は、ステップＳ３００７において、変数ｍの値を１つ増やし、ステップＳ３００４に移る。
【００３４】
一方、命令ｎ＋ｍがシーケンス制御プログラム２００の最後のＰＬＣ命令であれば、変数間依存解析部３１０は、ステップＳ３００８において、命令ｎがシーケンス制御プログラム２００の最後のＰＬＣ命令であるかどうかを判定する。
【００３５】
命令ｎがシーケンス制御プログラム２００の最後のＰＬＣ命令であれば、変数間依存解析部３１０は処理を終了する。
【００３６】
一方、命令ｎがシーケンス制御プログラム２００の最後のＰＬＣ命令でなければ、変数間依存解析部３１０は、ステップＳ３００９において、変数ｎの値を１つ増やし、また、変数ｍの値を１に再設定し、ステップＳ３００２に移る。
【００３７】
図７は、図５のシーケンス制御プログラム２００について、変数間依存解析部３１０が図６に示す処理を行って得られた変数間依存情報２１０の例を示す。
図７において、命令１〜命令５は、図５に示す命令１〜命令５である。
種類の欄には、各ＰＬＣ命令に含まれる演算子が記述される。
引数の欄には、各ＰＬＣ命令の引数に用いられる変数が記述される。
返り値の欄には、各ＰＬＣ命令の返り値に用いられる変数が記述される。
依存先の欄には、各ＰＬＣ命令が依存している他のＰＬＣ命令が記述される。
【００３８】
図１０は、ＰＬＣ命令並び替え分割部３１２による命令実行順序を変更する処理を示す。
以下、図１０を参照してＰＬＣ命令並び替え分割部３１２の動作例を説明する。
【００３９】
ステップＳ３１０１では、ＰＬＣ命令並び替え分割部３１２は、現在の処理の状態を示す変数ｎと変数ｍと変数ｐの値を初期値である１に設定する。
【００４０】
次に、ステップＳ３１０２では、ＰＬＣ命令並び替え分割部３１２は、シーケンス制御プログラム２００上のｎ番目のＰＬＣ命令（以下、命令ｎという）を、等価最適化シーケンス制御プログラム２０１のｐ番目に配置する。なお、命令ｎは選択命令に相当する。
【００４１】
次に、ステップＳ３１０３では、ＰＬＣ命令並び替え分割部３１２は、シーケンス制御プログラム２００上のｎ＋ｍ番目のＰＬＣ命令（以下、命令ｎ＋ｍという）は命令ｎとともに効率よく実行できるか否かを判定する。
より具体的には、ＰＬＣ命令並び替え分割部３１２は、命令情報２１１を参照して、命令ｎと命令ｎ＋ｍとが効率よく実行できるか否かを判定する。
図８は命令情報２１１の例を示す。図８の例では、命令ｎに含まれる演算子がＡＤＤである場合に、命令ｎ＋ｍの演算子がＡＤＤ又はＳＵＢであれば、命令ｎと命令ｎ＋ｍは効率よく実行できる。同様に、命令ｎに含まれる演算子がＳＵＢである場合に、命令ｎ＋ｍの演算子がＡＤＤ又はＳＵＢであれば、命令ｎと命令ｎ＋ｍは効率よく実行できる。これらに該当しない場合は、命令ｎと命令ｎ＋ｍは効率よく実行できない。
【００４２】
命令ｎと命令ｎ＋ｍとを効率よく実行できる場合は、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３１０４において、シーケンス制御プログラム２００上で、命令ｎ＋ｍが、命令ｎ＋ｍと命令ｎとの間にある命令と依存関係にあるか否かを判定する。つまり、命令ｎ＋ｍが、命令ｎの返り値を引数とする命令の返り値を引数としているか否かを判定する。なお、ＰＬＣ命令並び替え分割部３１２は、変数間依存情報２１０を参照して、ステップＳ３１０４の判定を行う。
【００４３】
命令ｎ＋ｍが、命令ｎ＋ｍと命令ｎとの間にある命令と依存関係にある場合は、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３１０５において、命令ｎ＋ｍが、シーケンス制御プログラム２００の最後のＰＬＣ命令かどうかを判定する。
【００４４】
命令ｎ＋ｍが最後の命令でなければ、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３１０８において、変数ｍの値を１つ増やし、ステップＳ３１０３に移る。
また、命令ｎ＋ｍが最後の命令であれば、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３１０９において、変数ｎの値と変数ｐの値をそれぞれ１つ増やし、変数ｍの値を１に再設定し、ステップＳ３１０２に移る。
【００４５】
ステップＳ３１０４において、命令ｎ＋ｍが、命令ｎ＋ｍと命令ｎとの間にある命令と依存関係にない場合は、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３１０６において、命令ｎ＋ｍを等価最適化シーケンス制御プログラム２０１のｐ＋１番目に配置する。
【００４６】
次に、ステップＳ３１０７において、ＰＬＣ命令並び替え分割部３１２は、命令ｎがシーケンス制御プログラム２００の最後のＰＬＣ命令かどうかを判定する。
命令ｎが、最後の命令であれば、ＰＬＣ命令並び替え分割部３１２は処理を終了する。
一方、命令ｎが最後の命令でなければ、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３１０９に移る。
【００４７】
図１２は、図１０の処理により得られた等価最適化シーケンス制御プログラム２０１の一例を示す。
図５のシーケンス制御プログラム２００と比較すると、図１２の等価最適化シーケンス制御プログラム２０１では、ＰＬＣ命令の命令実行順序が変更されている。具体的にはＰＬＣ命令２００３がＰＬＣ命令２００２よりも先に実行されるように命令実行順序が変更されている。
ＰＬＣ命令２００３の演算子とＰＬＣ命令２００１の演算子はともにＡＤＤであり、ＡＤＤとＡＤＤとの組み合わせは、図８の命令情報２１１によれば、効率よく実行できる演算子の組み合わせに該当する。そして、ＰＬＣ命令２００３は、ＰＬＣ命令２００３とＰＬＣ命令２００１との間にあるＰＬＣ命令２００２に依存していない。
このため、ＰＬＣ命令２００３は図１０のステップＳ３１０６にてＰＬＣ命令２００１の次に配置される。この結果、図１２の等価最適化シーケンス制御プログラム２０１が得られる。
【００４８】
図１１は、ＰＬＣ命令並び替え分割部３１２によるシーケンス制御プログラムを分割する処理を示す。
以下、図１１を参照してＰＬＣ命令並び替え分割部３１２の動作例を説明する。
【００４９】
ステップＳ３２０１では、ＰＬＣ命令並び替え分割部３１２は、現在の処理の状態を示す変数であるｎとｍとｐとｔの値を初期値である１に設定する。なお、変数ｔは１に設定しなくてもよい。
【００５０】
ステップＳ３２０２では、ＰＬＣ命令並び替え分割部３１２は、ＰＬＣ装置情報２１２から、対象となるＰＬＣ装置４０１の同時実行命令数を取得し、取得した同時実行命令数を変数ｔに設定する。
前述したように、ＰＬＣ装置情報２１２は図９に示す通りである。ＰＬＣ装置情報２１２では、ＰＬＣ装置４０１の機種ごとに、ＰＬＣ装置４０１が何個のＰＬＣ命令を同時に実行できるかが定義されている。
ＰＬＣ命令並び替え分割部３１２は、現在対象としているＰＬＣ装置４０１の機種が機種２であれば、当該ＰＬＣ装置４０１の同時実行命令数として２を取得する。
【００５１】
次に、ステップＳ３２０３では、ＰＬＣ命令並び替え分割部３１２は、分割先となるシーケンス制御プログラムである分割プログラムをｔ個生成する。また、ＰＬＣ命令並び替え分割部３１２は、各分割プログラムに０番からｔ−１番までの番号を設定する。
なお、この時点では、各分割プログラムは空白である。
【００５２】
次に、ステップＳ３２０４では、ＰＬＣ命令並び替え分割部３１２は、ｔ個の分割プログラムのなかで、現在配置されているＰＬＣ命令数が最も少ない分割プログラムを特定し、当該分割プログラムの番号を変数ｐに設定する。
【００５３】
次に、ステップＳ３２０５では、ＰＬＣ命令並び替え分割部３１２は、シーケンス制御プログラム２００のｎ番目のＰＬＣ命令（以下、命令ｎという）を、ｐ番目の分割プログラムの最後尾に配置する。
【００５４】
次に、ステップＳ３２０６では、ＰＬＣ命令並び替え分割部３１２は、シーケンス制御プログラム２００のｎ＋ｍ番目のＰＬＣ命令（以下、命令ｎ＋ｍという）が、命令ｎと依存関係があるかを判定する。つまり、ＰＬＣ命令並び替え分割部３１２は、変数間依存情報２１０を参照して、命令ｎ＋ｍの引数の変数が命令ｎの返り値の変数と同じかどうかを判定する。
【００５５】
命令ｎ＋ｍが命令ｎと依存関係があれば、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３２０７において、命令ｎ＋ｍを、ｐ番目の分割プログラムの最後尾に配置する。
【００５６】
次に、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３２０８において、命令ｎが、シーケンス制御プログラム２００の最後のＰＬＣ命令であるかどうかを判定する。
命令ｎが最後のＰＬＣ命令ならば、ＰＬＣ命令並び替え分割部３１２は処理を終了する。
一方、命令ｎが最後のＰＬＣ命令でなければ、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３２１１に移る。
【００５７】
ステップＳ３２０６において命令ｎ＋ｍが命令ｎと依存関係になければ、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３２０９において、命令ｎ＋ｍが、シーケンス制御プログラム２００の最後のＰＬＣ命令であるかどうかを判定する。
命令ｎ＋ｍが最後のＰＬＣ命令でなければ、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３２１０において、変数ｍの値を１つ増やし、ステップＳ３２０６に移る。
一方、命令ｎ＋ｍが最後のＰＬＣ命令であれば、ＰＬＣ命令並び替え分割部３１２は、ステップＳ３２１１において、変数ｎの値を１つ増やし、変数ｍの値を１に初期化し、ステップＳ３２０４に移る。
【００５８】
図１３は、図１１の処理により得られた等価最適化シーケンス制御プログラム２０１の一例を示す。
図１３では、図５に示すシーケンス制御プログラム２００が分割プログラム１と分割プログラム２の２つに分割されている。
ＰＬＣ装置４０１が同時に２つのプログラムを実行可能であれば、図１３に示す分割プログラム１と分割プログラム２を並行して実行することにより、実行所要時間の短縮化が図られる。
【００５９】
以上のように、本実施の形態に係るプログラミング装置４００では、シーケンス制御プログラムの最適化（命令実行順序の変更、シーケンス制御プログラム２００の分割）を行うことができる。
ＰＬＣ命令並び替え分割部３１２は、図１０の命令実行順序の変更及び図１１のシーケンス制御プログラムの分割のいずれか一方のみを行ってもよい。また、ＰＬＣ命令並び替え分割部３１２は、図１０の命令実行順序の変更と図１１のシーケンス制御プログラムの分割の両者を行ってもよい。図１０の命令実行順序の変更と図１１のシーケンス制御プログラムの分割の両者を行う場合は、ＰＬＣ命令並び替え分割部３１２は、図１０の命令実行順序の変更を行った後のシーケンス制御プログラムに図１１のシーケンス制御プログラムの分割を行ってもよい。また、ＰＬＣ命令並び替え分割部３１２は、図１１のシーケンス制御プログラムの分割を行った後のシーケンス制御プログラム（分割プログラム）に図１０の命令実行順序の変更を行ってもよい。
【００６０】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態によれば、シーケンス制御プログラムにおける命令実行順序の変更及びシーケンス制御プログラムの分割の少なくともいずれかにより、ユーザが生成したシーケンス制御プログラムから、当該シーケンス制御プログラムと等しい結果が得られるより効率的なシーケンス制御プログラムを生成することができる。
このため、ユーザはＰＬＣ装置の構成などにとらわれることなく、所望の処理のみを記述すれば、最も高速にシーケンス制御が可能なプログラムを得ることができる。
【００６１】
実施の形態２．
図１４は、本実施の形態に係るプログラミング装置４００の機能構成例及びＰＬＣ装置４０１のハードウェア構成例を示す。
ＰＬＣ装置４０１のハードウェア構成例は、図１に示したものと同じであるため、説明を省略する。
本実施の形態では、プログラミング装置４００は、シーケンス制御プログラム最適化部３００により生成された等価最適化シーケンス制御プログラム２０１をユーザ１００に提示する。より具体的には、図２に示すユーザインタフェース装置１５０６が等価最適化シーケンス制御プログラム２０１を表示する。
ユーザ１００が生成したシーケンス制御プログラム２００が誤っていた場合は、等価最適化シーケンス制御プログラム２０１も誤ったものとなる。このため、シーケンス制御プログラム２００が誤っていた場合は、ＰＬＣ装置４０１はユーザの望む通りには動作しない。
本実施の形態では、等価最適化シーケンス制御プログラム２０１がユーザ１００に提示されるため、ユーザ１００は等価最適化シーケンス制御プログラム２０１内のＰＬＣ命令を１つずつ解析してＰＬＣ装置４０１の動作を確認してゆくことができる。
本実施の形態では、ＰＬＣ命令で記述されたシーケンス制御プログラム２００を、同様にＰＬＣ命令で記述された等価最適化シーケンス制御プログラム２０１に変換し、等価最適化シーケンス制御プログラム２０１をユーザ１００に提示する。これにより、ユーザ１００がＰＬＣ命令のみを理解し、高級汎用言語を理解していない場合でも、ユーザ１００は、最適化されたシーケンス制御プログラムを確認することができる。
【００６２】
以上、本発明の実施の形態について説明したが、これら２つの実施の形態を組み合わせて実施しても構わない。
あるいは、これら２つの実施の形態のうち、１つを部分的に実施しても構わない。
あるいは、これら２つの実施の形態を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【００６３】
＊＊＊ハードウェア構成の説明＊＊＊
最後に、プログラミング装置４００のハードウェア構成の補足説明を行う。
図２に示すプロセッサ１５００は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。
プロセッサ１５００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等である。
メモリ１５０３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
記憶装置１５０４は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等である。
Ｉ／Ｏ装置１５０１は、データを受信するレシーバー及びデータを送信するトランスミッターであり、例えば、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
ユーザインタフェース装置１５０６は、マウス、キーボード、ディスプレイ等である。
【００６４】
記憶装置１５０４には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。
そして、ＯＳの少なくとも一部がメモリ１５０３にロードされ、プロセッサ１５００により実行される。
プロセッサ１５００はＯＳの少なくとも一部を実行しながら、シーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２の機能を実現するプログラムを実行する。
プロセッサ１５００がＯＳを実行することで、タスク管理、メモリ管理、ファイル管理、通信制御等が行われる。
また、プログラミング装置４００は、プロセッサ１５００を代替する複数のプロセッサを備えていてもよい。
また、シーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２の処理の結果を示す情報やデータや信号値や変数値が、メモリ１５０３、記憶装置１５０４、プロセッサ１５００内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、シーケンス制御プログラム最適化部３００、高級言語変換部３０１及びコンパイラ３０２の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の可搬記憶媒体に記憶されてもよい。
【００６５】
また、シーケンス制御プログラム最適化部３００及び高級言語変換部３０１の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
また、プログラミング装置４００は、ロジックＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）といった電子回路により実現されてもよい。
なお、プロセッサ及び上記の電子回路を総称してプロセッシングサーキットリーともいう。
【符号の説明】
【００６６】
１００  ユーザ、２００  シーケンス制御プログラム、２０１  等価最適化シーケンス制御プログラム、２０２  高級言語プログラム、２０３  バイナリ、２１０  変数間依存情報、２１１  命令情報、２１２  ＰＬＣ装置情報、３００  シーケンス制御プログラム最適化部、３０１  高級言語変換部、３０２  コンパイラ、３１０  変数間依存解析部、３１１  情報記憶部、３１２  ＰＬＣ命令並び替え分割部、４００  プログラミング装置、４０１  ＰＬＣ装置、５００  プロセッサ、５０１  Ｉ／Ｏ装置、５０３  メモリ、５０４  記憶装置、５０５  バス、１５００  プロセッサ、１５０１  Ｉ／Ｏ装置、１５０３  メモリ、１５０４  記憶装置、１５０５  バス、１５０６  ユーザインタフェース装置。
【図１】
2018042520.tif 000003
【図２】
2018042520.tif 000004
【図３】
2018042520.tif 000005
【図４】
2018042520.tif 000006
【図５】
2018042520.tif 000007
【図６】
2018042520.tif 000008
【図７】
2018042520.tif 000009
【図８】
2018042520.tif 000010
【図９】
2018042520.tif 000011
【図１０】
2018042520.tif 000012
【図１１】
2018042520.tif 000013
【図１２】
2018042520.tif 000014
【図１３】
2018042520.tif 000015
【図１４】
2018042520.tif 000016
【国際調査報告】
2018042520.tif 000017
2018042520.tif 000018