(57)【要約】【課題】ＳＦＣで記述されたプログラムを、複数の演算装置に割り振る場合に最適な割り振りを行うことのできるシーケンス処理実行装置を得る。【解決手段】活性ステップ組合せ情報１４２として、シーケンス処理実行装置内の演算装置上で、ＳＦＣ言語で記述されたプログラムを実際に実行した場合の複数のステップの組合せの情報を保持する。ステップ対演算装置割当部３０４において、活性ステップ組合せ情報１４２に基づいて、各ステップを任意の演算装置に割り振った場合を評価し、その結果に基づいて複数の演算装置１１０，１２０で実行するステップの割当を決定する。【選択図】図１
2007241434.tif 000002
【特許請求の範囲】
【請求項１】
シーケンシャル・ファンクション・チャートで記述されたプログラムを実行し、シーケンス処理を行う複数の演算装置と、
前記複数の演算装置で、実際に前記プログラムを動作させた際に、同時に実行されるシーケンシャル・ファンクション・チャート記述上の複数のステップの組合せの情報を保持する組合せ情報取得手段と、
前記組合せの情報に基づいて、前記複数の演算装置で実行するステップの割当を行うステップ割当手段と
を備えたシーケンス処理実行装置。
【請求項２】
プログラムを動作させた際に、実行したシーケンシャル・ファンクション・チャート記述上のステップの処理時間の情報を取得するステップ処理時間取得手段を備えたことを特徴とする請求項１記載のシーケンス処理実行装置。
【請求項３】
ステップ割当手段は、組合せ情報取得手段で保持した組合せの情報と、ステップ処理時間取得手段で取得した処理時間の情報とに基づいて、複数の演算装置で実行するステップの割当を行うことを特徴とする請求項２記載のシーケンス処理実行装置。
【請求項４】
ステップ割当手段は、複数の演算装置とは別装置として設けられ、通信路を介して接続されていることを特徴とする請求項３記載のシーケンス処理実行装置。
【請求項５】
ステップ割当手段は、複数の演算装置と同一装置内に設けられていることを特徴とする請求項３記載のシーケンス処理実行装置。
【請求項６】
ステップ割当手段は、各ステップをどの演算装置に割り当てるかの判定を、各ステップを任意の演算装置に割り振った場合を評価し、組合せ情報に対応する各演算装置でのステップ実行時間を導出し、導出した全てのステップの組合せにおける各演算装置でのステップ実行時間の最大値が、全てのステップを任意の演算装置への割り振った場合の中で最も小さくなるようにステップの割当を決定することを特徴とする請求項３から請求項５のうちのいずれか１項記載のシーケンス処理実行装置。
【請求項７】
ステップ処理時間の閾値を示すステップ閾値データを設け、
ステップ割当手段は、ステップ処理時間取得手段で取得された処理時間が、当該ステップ閾値データを超えた場合にステップ割当処理を実行することを特徴とする請求項６記載のシーケンス処理実行装置。
【請求項８】
シーケンシャル・ファンクション・チャートで記述されたプログラムを実行し、シーケンス処理を行う複数の演算装置と、
前記複数の演算装置で、実際に前記プログラムを動作させた際に、実行したシーケンシャル・ファンクション・チャート記述上のトランジションの処理時間の情報を取得するトランジション処理時間取得手段と、
前記トランジション処理時間取得手段の処理時間の情報に基づいて、前記複数の演算装置で実行するトランジションの割当を行うトランジション割当手段と
を備えたシーケンス処理実行装置。
【請求項９】
トランジション割当手段は、複数の演算装置とは別装置として設けられ、通信路を介して接続されていることを特徴とする請求項８記載のシーケンス処理実行装置。
【請求項１０】
トランジション割当手段は、複数の演算装置と同一装置内に設けられていることを特徴とする請求項８記載のシーケンス処理実行装置。
【請求項１１】
トランジション割当手段は、各トランジションをどの演算装置に割り当てるかの判定を、各トランジションを任意の演算装置に割り振った場合を評価し、各演算装置でのトランジション実行時間を導出し、導出した全てのトランジションを任意の演算装置への割り振った場合の中でトランジション実行時間が最も小さくなるようにトランジションの割当を決定することを特徴とする請求項８から請求項１０のうちのいずれか１項記載のシーケンス処理実行装置。
【請求項１２】
トランジション処理時間の閾値を示すトランジション閾値データを設け、
トランジション割当手段は、トランジション処理時間取得手段で取得された処理時間が、当該トランジション閾値データを超えた場合にトランジション割当処理を実行することを特徴とする請求項１１記載のシーケンス処理実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＳＦＣ（シーケンシャル・ファンクション・チャート）で記述されたシーケンス処理プログラムを、並列に演算を実行可能なシーケンス処理実行装置（プログラマブル・ロジック・コントローラ）で実行させるシーケンス処理実行装置に関するものである。
【背景技術】
【０００２】
シーケンス処理実行装置で、ＩＥＣ６１１３１−３で定義されているＳＦＣを用いて記述されたシーケンス処理を、並列に動作可能な演算装置で実行する場合、処理を各演算装置に割り振らなければならない。従来は、ＳＦＣプログラムを開発および実行する利用者が、明確に処理を実行する複数の演算装置を認識し、各々の演算装置向けにプログラムを分割して実装していた。このように一つの処理を複数のプログラムで実現する事は簡単では無く、開発およびテストの工数が非常にかかるため、元々の一つのＳＦＣプログラムを自動的に分割するための手段の実現が求められていた。
【０００３】
このような問題に対処するため、例えば特許文献１に示すように、複数の演算装置に対するＳＦＣプログラムの割り振り方として、ＳＦＣのプログラム記述上で、明示的に並列に実行可能であるように表記されている部分（同時分岐）に対し、ステップおよびトランジションのシーケンスをグループとして識別し、各グループを各演算装置に割り振るという手段を講じたものがあった。グループの割り振りを決定する具体的な方法は、グループの処理時間というものを考え、その定義を、そのグループに含まれている各ステップ・トランジションの処理時間の中で最大のものであるとし、各演算装置上で実行される各グループの処理時間が平均化されるように割り振るというものである。
【０００４】
【特許文献１】特開平７−２８３９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来のような割り振り方法では、ＳＦＣプログラムを、並列に実行可能な複数の演算装置を持つシーケンス処理実行装置において、複数の演算装置への処理の割り振りが最適に行われないという問題があった。即ち、同時分岐後の並列に実行可能なステップの間には、制御的な依存関係が存在する場合も多々存在する。例えば、あるステップの処理が実行した場合や完了した場合に成立する条件により、並列に実行されている他のステップが遷移するというような関係が存在する場合である。そのような場合、実際に並列に実行されるステップの組合せは、各グループに属するステップが、各々依存関係が無く実行される場合の組合せよりも少ない組合せとなる。従って、各グループの処理時間を、そのグループに含まれるステップの処理時間中で最大の処理時間と定義し、その処理時間でグループを割り振ると、そのステップの組合せが実際の処理としては発生しない可能性がある。その場合、従来の方式で処理を割り振った場合、必ずしも最適な割り振りとはならないという問題があった。
【０００６】
また、複数の演算装置へのステップの割り振りを一度決めた後、シーケンス処理実行装置で処理を実行中、ステップの処理時間が変動した場合に、必ずしも最適に割り振った状態ではなくなるため、その場合に、再度割り振りを実施する必要がある事を識別し、割り振りの再実行を行う必要があった。
【０００７】
この発明は、上記のような問題点を解決するためになされたものであり、ＳＦＣで記述されたプログラムを、複数の演算装置に割り振る場合に最適な割り振りを行うことのできるシーケンス処理実行装置を得ることを目的としている。
【課題を解決するための手段】
【０００８】
この発明に係るシーケンス処理実行装置は、ＳＦＣ言語で記述されたプログラムを実行し、シーケンス処理を行う複数の演算装置と、これら複数の演算装置で、実際にプログラムを動作させた際に、同時に実行されるＳＦＣ記述上の複数のステップの組合せの情報を保持する組合せ情報取得手段と、前記組合せの情報に基づいて、複数の演算装置で実行するステップの割当を行うステップ割当手段とを備えたものである。
【発明の効果】
【０００９】
この発明のシーケンス処理実行装置は、複数の演算装置で、実際にプログラムを動作させた際に、同時に実行されるＳＦＣ記述上の複数のステップの組合せの情報を保持し、この組合せ情報に基づいて複数の演算装置で実行するステップの割当を行うようにしたので、複数の演算装置に最適な割り振りを行うことができる。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
図１は、この発明の実施の形態１によるシーケンス処理実行装置を示す構成図である。
図２は、この発明の実施の形態１によるシーケンス処理実行装置における演算装置が保有する手段を示す説明図である。
図３は、この発明の実施の形態１によるシーケンス処理実行装置における共有メモリが保有する手段を示す説明図である。
【００１１】
これらの図において、シーケンス処理実行装置は、シーケンス処理実行部１００と、外部機器２００と、プログラミング装置３００と、共有バス４００とを備えている。
【００１２】
シーケンス処理実行部１００は、実際のシーケンス処理を実行するための装置であり、２台の演算装置１１０，１２０と、入出力装置１３０と、共有メモリ１４０とを備え、これら演算装置１１０，１２０、入出力装置１３０および共有メモリ１４０は、共有バス４００を介して相互に接続されている。尚、本実施の形態では一例として演算装置を２台設けた場合を説明しているが、この台数に限定されるものではなく、三つ以上の演算装置を保有していてもよい。
【００１３】
各演算装置１１０，１２０には、シーケンス処理を実行するためのＣＰＵ（中央処理ユニット）１１１，１２１と、シーケンス処理に含まれる演算を実行するために必要となるメモリ１１２，１２２と、処理時間を計測するためのタイマ１１３，１２３を備えている。
【００１４】
また、図２に示すように、各演算装置１１０，１２０では、組合せ情報取得手段１５１ステップ処理時間取得手段１５２、トランジション処理時間取得手段１５３を構成している。組合せ情報取得手段１５１は、実際にＳＦＣ（シーケンシャル・ファンクション・チャート）プログラムを動作させた際に、同時に実行されるＳＦＣ記述上の複数のステップの組合せの情報を取得する手段であり、ステップ処理時間取得手段１５２は、ＳＦＣプログラムを動作させた際に、実行したＳＦＣ記述上のステップの処理時間の情報を取得する手段であり、トランジション処理時間取得手段１５３は、実際にＳＦＣプログラムを動作させた際に、実行したＳＦＣ記述上のトランジションの処理時間の情報を取得する手段である。
【００１５】
尚、これら組合せ情報取得手段１５１〜トランジション処理時間取得手段１５３は、それぞれの手段に対応したソフトウェアを、メモリ１１２，１２２やタイマ１１３，１２３を用いて、ＣＰＵ１１１，１２１が実行することによって実現されるものである。
【００１６】
これら演算装置１１０，１２０は、共有バス４００によって接続されている。入出力装置１３０は、外部機器２００とのデータおよび信号の入出力を行う装置であり、これらの入出力データを格納する入出力データ格納部１３１を備えている。共有メモリ１４０は、複数の演算装置１１０，１２０からデータの読み込みおよび書き込みが可能なメモリであり、活性ステップ情報１４１、活性ステップ組合せ情報１４２、ステップ処理時間情報１４３、ステップ対演算装置割当情報１４４、トランジション処理時間情報１４５、トランジション対演算装置割当情報１４６、ステップ閾値データ１４７、トランジション閾値データ１４８を保持するよう構成されている。
【００１７】
尚、これら活性ステップ組合せ情報１４２〜トランジション対演算装置割当情報１４６は、図３に示す活性ステップ組合せ情報保持手段１６１〜トランジション対演算装置割当情報保持手段１６５によって保持されている。即ち、活性ステップ組合せ情報保持手段１６１が活性ステップ組合せ情報１４２を、ステップ処理時間情報保持手段１６２がステップ処理時間情報１４３を、ステップ対演算装置割当情報保持手段１６３がステップ対演算装置割当情報１４４を、トランジション処理時間情報保持手段１６４がトランジション処理時間情報１４５を、トランジション対演算装置割当情報保持手段１６５がトランジション対演算装置割当情報１４６を各々保持している。
【００１８】
活性ステップ情報１４１は、ＳＦＣ言語で記述されたプログラムのステップの実行を制御する情報であり、その時点でアクティブな（活性状態の）ステップの情報を示している。活性ステップ組合せ情報１４２は、ＳＦＣプログラムの同時分岐後の、並列に動作するステップにおいて、実際にどのようなステップの組合せが発生したかを保持するための情報であり、活性ステップ情報１４１と共に、組合せ情報取得手段１５１によって取得されるものである。ステップ処理時間情報１４３は、各ステップを実行した際にどれだけの処理時間がかかったか、その値を保持するための情報であり、ステップ処理時間取得手段１５２によって取得されるものである。ステップ対演算装置割当情報１４４は、各ステップをどの演算装置１１０，１２０上で実行させるかを指定するための情報であり、後述するステップ対演算装置割当部３０４によって生成されるものである。
【００１９】
トランジション処理時間情報１４５は、各トランジションを実行した際に、どれだけの処理時間がかかったかその値を保持するための情報であり、トランジション処理時間取得手段１５３によって取得されるものである。トランジション対演算装置割当情報１４６は、各トランジションをどの演算装置１１０，１２０上で実行させるかを指定するための割当情報であり後述するトランジション対演算装置割当部３０６によって生成されるものである。ステップ閾値データ１４７は、ステップに関連する処理に対する閾値を示すデータであり、トランジション閾値データ１４８は、トランジションに関連する処理に対する閾値を示すデータである。
【００２０】
外部機器２００は、シーケンス処理実行部１００が制御対象とする機器であり、入出力装置１３０を介してデータの授受を行うようになっている。
プログラミング装置３００は、シーケンス処理実行部１００とは別装置として設けられ、ＳＦＣプログラムを作成すると共に、作成したＳＦＣプログラムを、演算装置１１０，１２０で実行可能なコードに変換してシーケンス処理実行部１００に供給する装置であり、入力部３０１、プログラムコード変換部３０２、データ取得部３０３、ステップ対演算装置割当部３０４、データ送信部３０５、トランジション対演算装置割当部３０６を備えている。入力部３０１は、ＳＦＣプログラムの入力機能を構成し、プログラムコード変換部３０２は、演算装置１１０，１２０上のＣＰＵ１１１，１２１でプログラムを実行させるために必要となるプログラムコードの変換機能を構成している。データ取得部３０３は、シーケンス処理実行部１００の共有メモリ１４０に保持された活性ステップ組合せ情報１４２と、ステップ処理時間情報１４３を、シーケンス処理実行部１００から取り込むための機能を構成している。
【００２１】
ステップ対演算装置割当部３０４は、ステップ割当手段に相当するもので、シーケンス処理実行部１００から取り込んだ、活性ステップ組合せ情報１４２とステップ処理時間情報１４３から、ＳＦＣのどのステップをどの演算装置上で実行させるかを決定し、ステップ対演算装置割当情報１４４を生成するための機能を構成している。データ送信部３０５は、ＳＦＣプログラムの各ステップをどの演算装置上で実行させるかを指定するステップ対演算装置割当情報をシーケンス処理実行部１００の共有メモリ１４０上の対応する情報領域に書き込むためのデータ送信機能である。また、トランジション対演算装置割当部３０６は、トランジション割当手段に相当するもので、シーケンス処理実行部１００から取り込んだトランジション処理時間情報１４５に基づいて、ＳＦＣのどのトランジションをどの演算装置上で実行させるかを決定し、トランジション対演算装置割当情報１４６を生成するための機能を構成している。
【００２２】
また、共有バス４００は、シーケンス処理実行部１００内の演算装置１１０，１２０と入出力装置１３０および共有メモリ１４０を接続すると共に、シーケンス処理実行部１００とプログラミング装置３００とを接続するデータの通信路を構成している。
【００２３】
次に、このように構成されたシーケンス処理実行装置の動作について説明する。
最初に、利用者がプログラミング装置３００上で、ＳＦＣプログラムを作成する。作成したＳＦＣはプログラミング装置３００上のプログラムコード変換部３０２で、演算装置１１０，１２０上のＣＰＵ１１１，１２１で実行可能な実行可能コードに変換される。また、複数の演算装置１１０，１２０では、各々を識別するためのＩＤ番号が付加されている。更に、複数の演算装置１１０，１２０においては、いわゆる主（マスタ）となる演算装置が一つ規定されている。本実施の形態では、その主となる演算装置を演算装置１１０とする。その主となる演算装置１１０は、並列に実行可能なステップが存在しない場合、即ち一つしか実行可能なステップが存在しない場合に処理が実行される演算装置である。
【００２４】
プログラミング装置３００上で、実行可能コードに変換されたＳＦＣプログラムは、特に何も指定していなければ、主の演算装置１１０上で実行される形態となる。この事は、ＳＦＣプログラム開発者が、ステップ対演算装置割当部３０４を使用しない場合に、ステップ対演算装置割当情報１４４に設定される値が、何も規定されない、もしくは、主となる演算装置１１０を示すＩＤ番号が規定されることを表している。
【００２５】
プログラミング装置３００から、本実施の形態では共有バス４００を介してシーケンス処理実行部１００と通信を行い、シーケンス処理実行部１００の各演算装置１１０，１２０が保有するメモリ１１２，１２２に、実行可能コードがロードされ、シーケンス処理実行部１００上でシーケンス処理の実行が開始可能となる。以下、シーケンス処理実行部１００上でのシーケンス処理の実行方法について説明する。
【００２６】
シーケンス処理実行部１００上では、一定周期毎に図示していないトリガが入出力装置１３０に対し、処理の実行を通知する。入出力装置１３０では、トリガによる処理の実行の通知により、接続された外部機器２００の状態を、通信により内部の入出力データ格納部１３１に取り込む。取り込みが完了した後、各演算装置１１０，１２０に処理の実行を、図示していないトリガにより通知する。各演算装置１１０，１２０は、共有メモリ１４０上のステップ対演算装置割当情報１４４を各々読み取り、各々自身に割り振られている、即ちステップ対演算装置割当情報１４４で、各ステップに指定されている演算装置のＩＤが、自身のＩＤと同じであるならば、そのステップを自身が処理しなければならないと認識し、そのステップが活性状態であるかを、共有メモリ１４０上の活性ステップ情報１４１で確認する。もし、ステップが活性状態ならば、ステップに関連付けられている処理を実行する。もし活性状態でないのならば何もしない。
【００２７】
各演算装置１１０，１２０が、自身に割り振られているステップに対応する処理を全て完了すると、図示していない同期手段により、他の演算装置のステップに対応する処理の完了を待ち合わせる。全ての演算装置１１０，１２０のステップに対応する処理が完了すると、全ての演算装置１１０，１２０の待ち合わせは解除され、トランジションの処理の実行を開始する。
【００２８】
トランジションの処理の実行も、ステップの場合と同じように、共有メモリ１４０上に存在しているトランジション対演算装置割当情報１４６を、各演算装置１１０，１２０が各々読み取り、各トランジションに指定されている演算装置のＩＤが、自身のＩＤと同じであるならば、そのトランジションを自身が処理しなければならないと認識し、トランジション演算を行う。各演算装置１１０，１２０が自身に割り振られているトランジションに対応する処理を全て完了すると、図示していない同期処理により、他の演算装置のトランジションに対応する処理の完了を待ち合わせる。全ての演算装置のトランジションに対応する処理が完了すると、全ての演算装置の待ち合わせは解除され、入出力装置１３０からの処理開始のトリガを待つ状態に入る。
【００２９】
また、全ての演算装置１１０，１２０のトランジションに対応する処理が完了し、全ての演算装置１１０，１２０の待ち合わせが解除されたならば、先の主（マスタ）となる演算装置から、図示していない方法で、処理の完了通知が入出力装置１３０に通知される。入出力装置１３０では、処理の完了通知を受け取ると、先のステップに関連付けられている処理の結果により更新された入出力データ格納部１３１上の出力情報を外部機器２００に、通信により出力し、次の入出力装置１３０へのトリガを待つ。このように、シーケンス処理実行部１００上では、シーケンス処理が実施される。
【００３０】
このようにシーケンス処理実行部１００上でシーケンス処理が実行されるため、一定周期毎の処理の開始のトリガが入った後に、外部機器２００から入力となるデータを読み取り、できるだけ短い時間でステップおよびトランジションに関係する処理を実行し、外部機器２００へ結果を出力できれば、外部機器２００に対して素早い応答性を持つ処理を実行できるため、その高速化が望まれている。
【００３１】
また、シーケンス処理実行部１００上で、一定周期毎のトリガで処理の開始をするのではなく、全てのトランジションに関連する処理が完了し、入出力装置１３０が、外部機器２００への出力を完了すると同時に、次の処理を開始するという動作モードも一般的に利用可能である。このケースにおいても、できるだけステップおよびトランジションに関連する処理を高速化することが、素早い応答性と、短い周期で処理を繰り返すことによるきめ細かな処理の実現性から望まれている。処理の高速化は、複数の演算装置を持つシーケンス処理実行装置上で考えると、少しでも短い時間で全ての演算装置に割り振られたステップおよびトランジションに関連する処理を完了できるという事であるため、これを実現できる、いわゆる最適な、ステップおよびトランジションの各演算装置への割り振り方法の実現が必要である。
【００３２】
次に、シーケンス処理実行部１００上で、ＳＦＣプログラム記述に対応させ、シーケンス処理がどのように実行されるかについて説明する。尚、以下の説明で、ユーザがプログラミング装置３００において、図４に示すようなＳＦＣプログラムを記述し、本ＳＦＣプログラムに対応した実行コードをシーケンス処理実行部１００上で動作させる形態に対する説明を行う。
【００３３】
シーケンス処理の実行が開始されると、シーケンス処理実行部１００上では、最初に実行するステップを検出し、そのステップに付随する処理を実行する。一般的にＳＦＣ記述では“イニシャルステップ”と呼ばれる最初に実行されるステップの存在が規定されている。イニシャルステップはＳＦＣプログラム記述上で指定し、本シーケンス処理実行部１００上では、そのイニシャルステップの、活性ステップ情報１４１が、最初から活性状態である事でイニシャルステップを認識できるようになっている。図４におけるイニシャルステップを、ここではステップＳＴＥＰ１であるとする（以下、ＳＦＣプログラム記述上のステップを図４に図示しているように英字のＳＴＥＰで表す）。
【００３４】
ＳＴＥＰ１に付随するステップのトランジション条件ＴＲ１が成立するまでは、常にＳＴＥＰ１に関連付けられた処理が実行される。トランジション条件ＴＲ１が成立するとは、トランジションＴＲ１に関連付けられた処理が実行され、その結果の論理値が真となる事を意味している。トランジション条件ＴＲ１が成立すると、ＳＦＣ記述上、ＳＴＥＰ２、ＳＴＥＰ３、およびＳＴＥＰ４が並列に実行可能となる。ステップ対演算装置割当情報１４４に明確な演算装置割当が行われていない場合、各ステップは主（マスタ）となる演算装置上で実行される（もしくはユーザが明確に演算装置割当を行わない場合、自動的に主（マスタ）となる演算装置上で実行されるという設定となる）ように指定されているため、主となる演算装置上でＳＴＥＰ２、ＳＴＥＰ３、およびＳＴＥＰ４に関連付けられた処理の実行が行われる。その際、各ステップにおいて、処理時間がどれだけかかったが、各演算装置上に保有されているタイマ１１３および１２３により取得される。
【００３５】
タイマ１１３および１２３は、いわゆるフリーランカウンタであり、各ステップの実行を開始した時点と、ステップの実行を終了した時点のタイマ値が、各々ＣＰＵ１１１および１２１で取得され、その差分により処理時間が計算される。差分として計算された処理時間は、ステップの処理時間として共有メモリ１４０上に存在するステップ処理時間情報１４３に保持される。尚、シーケンス処理実行中、何度も実行されるステップ（一般的に各ステップは非活性になるまで何度も実行される）に対しては、上記差分として計算される処理時間は、処理内容の条件分岐等により、毎回異なる値になる場合も多い。
【００３６】
ステップの処理時間として、共有メモリ１４０上のステップ処理時間情報１４３に保持される時間情報としては、“(1)計測した処理時間の中で最大値”、“(2)これまで計測した処理時間の平均値”が考えられる。シーケンス処理実行部１００では、(1)の最大値のみ、(2)の平均値のみ、もしくは両方の値を保持しておく事も可能である。ステップに関連付けられた処理時間が、最大値もしくは平均値のどちらに対応する値であるかという事は、各演算装置にステップを割り振る際の最適化を考える場合に、最悪値が最適に割り振られるようにする、もしくは平均値が最適に割り振られるようにする、のどちらの戦略をとるかに係るため、ユーザは、このどちらか、もしくは両方を選択して、ステップ処理時間情報１４３に保持し、後段の割り振り処理で使用することが可能となる。
【００３７】
また、ステップだけではなく、同じくトランジションに関連する処理も、タイマ１１３および１２３により取得され、同じく最大値、平均値もしくは両方の値をトランジション処理時間情報１４５に保持している。
【００３８】
また、ある時点で、実際に実行したステップの組合せとして発生した情報を、共有メモリ１４０上に存在する活性ステップ組合せ情報１４２に保持する。実際に実行したステップの組合せとは、ある時点で、活性となったステップが複数存在した事を意味しており、その同時に活性化されたのが、どのステップであったかが、活性ステップ組合せ情報１４２に保持されることになる。図４のＴＲ１成立後の時点では、｛ＳＴＥＰ２，ＳＴＥＰ３，ＳＴＥＰ４｝が活性化され、かつ処理が実行されるため、この三つのステップの組合せが実行されたという情報を、活性ステップ組合せ情報１４２に保持する。
【００３９】
その後、各ステップの後段のステップのトランジション条件（ＴＲ２，ＴＲ３，ＴＲ４）が成立するまで、各ステップは毎回実行され、また各ステップの処理時間は計測および保持され、また発生したステップの組合せは、常に共有メモリ１４０上に保持される。但し、活性ステップ組合せ情報１４２は、同時に活性したステップの組合せを知るためだけの情報であるため、履歴を持ったステップの組合せ情報としては保持されない。
【００４０】
トランジション条件は、入出力装置１３０を介して外部機器２００と通信をした結果による外部要因と、内部的なステップに関連する処理の実行結果により真偽が確定し、各々のトランジションに関連するステップが遷移を行う。最終的に、トランジション条件ＴＲ８が成立し、ＳＴＥＰ１１という一つのステップの実行になるまで、図４に記載された
ＳＴＥＰ２−［ＴＲ２］→ＳＴＥＰ５−［ＴＲ５］→ＳＴＥＰ８
ＳＴＥＰ３−［ＴＲ３］→ＳＴＥＰ６−［ＴＲ６］→ＳＴＥＰ９
ＳＴＥＰ４−［ＴＲ４］→ＳＴＥＰ７−［ＴＲ７］→ＳＴＥＰ１０
の三つのシーケンスが並列に実行されるが、実際に発生したステップの組合せは、単純にステップの組合せで計算される２７種類（＝３×３×３）ではなく、図５に記載するように６種類だったとする。
【００４１】
この例は、
ＳＴＥＰ４の実行によりＴＲ４が成立しＳＴＥＰ７に遷移
ＳＴＥＰ７の実行によりＴＲ２が成立しＳＴＥＰ５に遷移
ＳＴＥＰ５の実行によりＴＲ３が成立しＳＴＥＰ６に遷移
ＳＴＥＰ６の実行によりＴＲ５およびＴＲ６が成立しＳＴＥＰ８、ＳＴＥＰ９に遷移
ＳＴＥＰ８の実行によりＴＲ７が成立しＳＴＥＰ１０に遷移
ＳＴＥＰ８，ＳＴＥＰ９，ＳＴＥＰ１０の実行によりＴＲ８が成立しＳＴＥＰ１１に遷移
という制御的な依存性が存在し、その挙動として、この６種類のステップの組合せが発生した場合を示すものである。
【００４２】
この６種類のステップの組合せは、その各々のステップの実行時間が共有メモリ１４０上のステップ処理時間情報１４３に保持されると共に、この６種類の組合せが発生したことが同じく共有メモリ１４０上の活性ステップ組合せ情報１４２に保持されている。
【００４３】
ここでステップの処理時間（ステップ処理時間情報１４３）において、先述の“最大値”を選択し、その値を元にステップの割り振りを行う場合を例示する。また、その最大値は図６に示すような値であったとする。もし最大値ではなく“平均値”を考える場合には、以下の扱いとしては全く同じであり、図６の値が平均値の値だったとしても、以下の割り振り方式を実施することが可能である。
【００４４】
利用者は、シーケンス処理実行部１００上で、利用者が規定したある期間、シーケンス処理動作を実行する。実行させるシーケンス処理動作の方法であるが、シーケンス処理実行部１００に実際に外部機器２００を接続し、外部機器２００の制御を行うという、実際のシーケンス処理実行部１００の使用環境で発生する全ての実動作を実施する場合が考えられる。また、接続される外部機器２００として、実際の使用環境を模擬する装置を接続し、作成したＳＦＣプログラムのテストを行うための、全ての可能な実行パターンでテスト実行させる場合も考えられる。このように何かしら利用者が規定したある期間でのプログラム動作を行った後、利用者はプログラミング装置３００を使用し、シーケンス処理実行部１００の共有メモリ１４０上に保持されている、活性ステップ組合せ情報１４２とステップ処理時間情報１４３およびトランジション処理時間情報１４５を取得する。
【００４５】
次に、プログラミング装置３００上では、取得した活性ステップ組合せ情報１４２とステップ処理時間情報１４３およびトランジション処理時間情報１４５から、各ステップをどの演算装置上で実行させるべきかの割り振りの判定を行う。トランジションにかかる処理時間は一般的にステップの処理時間よりも小さいため、ここでは説明を簡略化するためトランジションにかかる処理時間を無視し、ステップの処理時間のみで割り振りを行う方法について説明する。トランジションの処理時間も含めて判定する場合については、以下の説明の後に行う。
【００４６】
割り振りの判定では、ある時点で並列に処理されるステップの組合せにおいて、各ステップを、存在する演算装置の、どのＩＤ番号を持つ演算装置に割り振ると、そのステップの組合せは、各演算装置上でどれだけの処理時間になるか、を導出し、各演算装置上の処理時間の最大値が、全てのステップの組合せに対し最小になるように決定する手段を講じる。この手段は、プログラミング装置３００上のステップ対演算装置割当部３０４により実施される。この割当方法を、フローチャートに沿って具体的に説明する。
【００４７】
図７は、割当処理を示すフローチャートである。
ステップ対演算装置割当部３０４は、最初に、発生したステップの組合せの中に存在するステップを全て認識する。図５から、ステップとして
｛ＳＴＥＰ２，ＳＴＥＰ３，ＳＴＥＰ４，ＳＴＥＰ５，ＳＴＥＰ６，ＳＴＥＰ７，ＳＴＥＰ８，ＳＴＥＰ９，ＳＴＥＰ１０｝
の９個のステップが存在することが認識される（ステップＳＴ１）。次に、任意のステップに対し任意の演算装置への割り振りを一つ設定する（ステップＳＴ２）。本実施の形態では演算装置１１０と演算装置１２０という二つの演算装置が存在するので、設定として、例えば、図８に示すようなステップと演算装置の組合せを考える。この場合、発生したステップの組合せにおける各演算装置１１０，１２０での処理時間の総和は図９のようになる。
【００４８】
図９中で、各演算装置１１０，１２０における処理時間総和の最大（ＭＡＸ）は、
ＭＡＸ（ＭＡＸ（演算装置１），ＭＡＸ（演算装置２））
であり、結果として、「１０５μｓ」が、この演算装置へのステップの割り振りでの時間となる（ステップＳＴ４）。そして、試した割り振りは最初の１回目であるため、この値がこれまでの最小値として保持すると共に、上記のステップの各演算装置１１０，１２０への割り振りを保持しておく（ステップＳＴ６）。次のステップＳＴ７において、ステップの演算装置への割り振りが全てテストされていないため、ステップＳＴ２に戻り、次の組合せとして例えば図１０に記載された組合せを考える。このケースでは、図１１のように、ステップの組合せにおける各演算装置での各処理時間が計算される（ステップＳＴ３）。
【００４９】
この場合の各演算装置における累積処理時間の最大（ＭＡＸ）となる
ＭＡＸ（ＭＡＸ（演算装置１），  ＭＡＸ（演算装置２））は、
６０μｓ
として計算される（ステップＳＴ４）。これは、前回求めた１０５μｓよりも小さいため（ステップＳＴ５）、この値を最小値として設定し、この場合のステップの演算装置への割り振りを保存しておく（ステップＳＴ６）。そして、全ての演算装置１１０，１２０への割り振りを完了するまで、割り振りのテストを進める（ステップＳＴ７）。図６に示した処理時間となる例では、図１０および図１１に対応する、６０μｓを下回る割り振りの組合せは存在しないため、この割り振り結果が、ステップの演算装置１１０および演算装置１２０への割り振りの中で最適な結果となり、従って、図１０で示す割り振りを確定する。
【００５０】
トランジションの各演算装置への割り振り方法であるが、上記のように、一般的にトランジションの処理時間は短いため、その値を無視して、ステップの処理時間のみで割り振りを考え、ステップの割り振りが確定した後、各ステップに関連するトランジション（各ステップに後続するトランジション）を同じ演算装置に割り振るという方法もある。また、各ステップに関連するトランジションの処理時間を、関連するステップの処理時間に加算し、その値を元に、上記のようにステップの割り振りを決め、各トランジションが関連するステップの割り振りを、トランジション側にも設定するという方法もある。また、トランジションは、トランジションのみで、上記手段により最適割り振りを求め、設定するという方法もある。
【００５１】
トランジションのみで最適割り振りを求める場合、ＳＦＣ言語で記述されたプログラムを複数の演算装置１１０，１２０で、実際にプログラムを動作させた際のトランジションの処理時間を計測してトランジション処理時間情報１４５で保持する。そして、トランジション対演算装置割当部３０６において、トランジション処理時間情報１４５に基づいて、どのトランジションをどの演算装置１１０，１２０で実行させたら良いかを求め、この結果をトランジション対演算装置割当情報１４６としてシーケンス処理実行部１００の共有メモリ１４０に保持させる。
【００５２】
ステップおよびトランジションの割り振りを確定した後、シーケンス処理実行部１００の共有メモリ１４０上に存在するステップ対演算装置割当情報１４４およびトランジション対演算装置割当情報１４６に、プログラミング装置３００から書き込みを行う。
【００５３】
その後、シーケンス処理実行部１００を動作させる事で、最適にステップの割り振りをした結果での、シーケンス処理の事項が、本シーケンス処理実行部１００上で実行される。
この様に確定したステップおよびトランジションの演算装置への割り振りに対し、恒常的に固定化した割り振りで処理を継続的に実施させる事も可能であるが、もしステップやトランジションに関連する処理の実行時間が、割り振りを確定した時の入力とした処理時間から大きく変動した場合、その割り振りが最適でなくなる状況が発生する。そのため、動的にステップおよびトランジションの割り振りを変えたい場合も存在する。
【００５４】
その実現を行うため、シーケンス処理実行部１００では、ステップに関連する処理に対するステップ閾値データ１４７と、トランジションに関連する処理に対するトランジション閾値データ１４８を設定することが可能であり、シーケンス処理実行部１００上の各演算装置１１０，１２０で実行されているステップおよびトランジションの処理時間が、設定されているステップ閾値データ１４７もしくはトランジション閾値データ１４８を超えた場合に、シーケンス処理実行部１００からプログラミング装置３００側に、閾値を超えた事を通知する信号が、シーケンス処理実行部１００とプログラミング装置３００を接続した共有バス４００を介して送信される。
【００５５】
設定するステップ閾値およびトランジション閾値の例としては、先に求めた各演算装置の最大処理時間と認識した“６０μｓ”や、何かしらシステムとして規定される、超えられない時間（例えば、一回の処理で１００μｓを超えると、制御している外部機器に問題が発生する場合には“１００μｓ”を設定）があればそれを設定する。
【００５６】
プログラミング装置３００側では、本通知信号が送られると、再度シーケンス処理実行部１００から、活性ステップ組合せ情報１４２と、ステップ処理時間情報１４３およびトランジション処理時間情報１４５を取り込み、先述の仕組みで再度ステップおよびトランジションの割り振り処理を行って、更新したステップおよびトランジションの割り振りを再度シーケンス処理実行部１００に設定する。また、合わせて、ステップ閾値データ１４７やトランジション閾値データ１４８も更新する。更新値として設定する値は、例えば、上記最適な割り振りを実行した際に導出される最大処理時間といった値である。また、シーケンス処理実行部１００上で、ステップ閾値もしくはトランジション閾値を超えた場合に、プログラミング装置３００に再割り振りのための信号を通知するのではなく、閾値オーバーエラーとして、シーケンス処理実行部１００が停止するよう構成してもよい。
【００５７】
本実施の形態で、シーケンス処理そのものは各演算装置１１０，１２０上のＣＰＵ１１１，１２１で実施されるが、それ以外の、上記の説明における、プログラミング装置３００との通信といったようなシーケンス処理実行部１００上で実行される処理は、各演算装置１１０，１２０で、シーケンス処理の実行をしていない時間（一定周期のトリガでシーケンス処理が実行される場合、ステップおよびトランジションの処理の実行を完了した後に、次の処理の開始待ちを行っている間）に各ＣＰＵ１１１，１２１で実行してもよいし、入出力装置１３０がその機能を有しても良い。
【００５８】
また、本実施の形態では、プログラミング装置３００が、共有バス４００を介してシーケンス処理実行部１００と接続されている形態を示したが、シーケンス処理実行部１００とプログラミング装置３００とを、ＲＳ２３２ＣやＵＳＢのような一般的な通信形態で接続しても良い。
【００５９】
以上のように、実施の形態１のシーケンス処理実行装置によれば、ＳＦＣで記述されたプログラムを実行し、シーケンス処理を行う複数の演算装置と、複数の演算装置で、実際にプログラムを動作させた際に、同時に実行されるＳＦＣ記述上の複数のステップの組合せの情報を保持する組合せ情報取得手段と、組合せの情報に基づいて、複数の演算装置で実行するステップの割当を行うステップ割当手段ととを備えたので、ＳＦＣで記述されたプログラムを複数の演算装置に割り振る場合、これら複数の演算装置に最適な割り振りを行うことができる。
【００６０】
また、実施の形態１のシーケンス処理実行装置によれば、プログラムを動作させた際に、実行したＳＦＣ記述上のステップの処理時間の情報を取得するステップ処理時間取得手段を備えたので、ＳＦＣで記述されたプログラムを複数の演算装置に割り振る場合、これら複数の演算装置に対して更に最適な割り振りを行うことができる。
【００６１】
また、実施の形態１のシーケンス処理実行装置によれば、ステップ割当手段は、組合せ情報取得手段で保持した組合せの情報と、ステップ処理時間取得手段で取得した処理時間の情報とに基づいて、複数の演算装置で実行するステップの割当を行うようにしたので、ＳＦＣで記述されたプログラムを複数の演算装置に割り振る場合、これら複数の演算装置により最適な割り振りを行うことができる。
【００６２】
また、実施の形態１のシーケンス処理実行装置によれば、ステップ割当手段は、複数の演算装置とは別装置として設けられ、通信路を介して接続されているようにしたので、どのステップをどの演算装置に割り当てるかの演算を、演算装置外部に保有できるため、シーケンス処理を実行する装置の内部構成を簡単にすることができ、従って、シーケンス処理実行装置の開発が容易になると共に、装置上に機能を実現するために必要となる部品（メモリサイズ等）が少なくなり、ユーザに安価なシーケンス処理実行装置を提供することができる。
【００６３】
また、実施の形態１のシーケンス処理実行装置によれば、ステップ割当手段は、各ステップをどの演算装置に割り当てるかの判定を、各ステップを任意の演算装置に割り振った場合を評価し、組合せ情報に対応する各演算装置でのステップ実行時間を導出し、導出した全てのステップの組合せにおける各演算装置でのステップ実行時間の最大値が、全てのステップを任意の演算装置への割り振った場合の中で最も小さくなるようにステップの割当を決定するようにしたので、ステップを演算装置に割り振る際に、最適なステップの割り振りが可能となるため、より最適に、ユーザが記述したＳＦＣプログラムを実行させることが可能になる。
【００６４】
また、実施の形態１のシーケンス処理実行装置によれば、ステップ処理時間の閾値を示すステップ閾値データを設け、ステップ割当手段は、ステップ処理時間取得手段で取得された処理時間が、ステップ閾値データを超えた場合にステップ割当処理を実行するようにしたので、シーケンス処理実行中に最適なステップの割り振りではない状態が発生した場合でも、再度割り振りを実施できるために、より最適にＳＦＣプログラムを実行することができる。
【００６５】
また、実施の形態１のシーケンス処理実行装置によれば、ＳＦＣで記述されたプログラムを実行し、シーケンス処理を行う複数の演算装置と、複数の演算装置で、実際にプログラムを動作させた際に、実行したＳＦＣ記述上のトランジションの処理時間の情報を取得するトランジション処理時間取得手段と、トランジション処理時間取得手段の処理時間の情報に基づいて、複数の演算装置で実行するトランジションの割当を行うトランジション割当手段とを備えたので、ＳＦＣで記述されたプログラム上に存在する、各トランジションの処理時間を正確に求めることが可能になり、トランジションを複数の演算装置に割り振る際に、より最適な割り振りを実行することを可能とすることができる。
【００６６】
また、実施の形態１のシーケンス処理実行装置によれば、トランジション割当手段は、複数の演算装置とは別装置として設けられ、通信路を介して接続されているようにしたので、どのトランジションをどの演算装置に割り当てるかの演算を、演算装置外部に保有できるため、シーケンス処理を実行する装置の内部構成を簡単にすることができ、従って、シーケンス処理実行装置の開発が容易になると共に、装置上に機能を実現するために必要となる部品（メモリサイズ等）が少なくなり、ユーザに安価なシーケンス処理実行装置を提供することができる。
【００６７】
また、実施の形態１のシーケンス処理実行装置によれば、トランジション割当手段は、各トランジションをどの演算装置に割り当てるかの判定を、各トランジションを任意の演算装置に割り振った場合を評価し、各演算装置でのトランジション実行時間を導出し、導出した全てのトランジションを任意の演算装置への割り振った場合の中でトランジション実行時間が最も小さくなるようにトランジションの割当を決定するようにしたので、トランジションを演算装置に割り振る際に、最適なトランジションの割り振りが可能となるため、より最適に、ユーザが記述したＳＦＣプログラムを実行させることが可能になる。
【００６８】
また、実施の形態１のシーケンス処理実行装置によれば、トランジション処理時間の閾値を示すトランジション閾値データを設け、トランジション割当手段は、トランジション処理時間取得手段で取得された処理時間が、トランジション閾値データを超えた場合にトランジション割当処理を実行するようにしたので、シーケンス処理実行中に最適なトランジションの割り振りではない状態が発生した場合でも、再度割り振りを実施できるために、より最適にＳＦＣプログラムを実行することができる。
【００６９】
実施の形態２．
実施の形態１では、シーケンス処理実行部１００に対する、ステップおよびトランジションに関連する処理の各演算装置への割り振りを実行する機能（ステップ対演算装置割当部３０４およびトランジション対演算装置割当部３０６）が、シーケンス処理実行部１００上ではなく、外部のプログラミング装置３００上で、必要な情報を通信しながら実施する形態として説明を行ったが、各演算装置１１０，１２０への割り振りを実行する機能（ステップ対演算装置割当部３０４の機能およびトランジション対演算装置割当部３０６の機能）がシーケンス処理実行部１００上に存在する形態の実現も可能である。即ち、シーケンス処理実行部１００において、ステップ割当手段とトランジション割当手段とを備えてもよい。これにより、実際にシーケンス処理実行部１００が使用されている、工業プラント、工場のライン等で、プログラミング装置３００を使用せずに、シーケンス処理実行部１００のみで、処理の割り振りの最適化を行うことが可能になる。
【００７０】
このような構成とした場合、ステップ対演算装置割当部３０４の機能およびトランジション対演算装置割当部３０６の機能は、各演算装置１１０，１２０の、シーケンス処理を実行していない間（一定周期のトリガでシーケンス処理が実行される場合、ステップおよびトランジションの処理の実行を完了した後に、次の処理の開始待ちを行っている間）に、各演算装置１１０，１２０のＣＰＵ１１１，１２１上で実行する形態が存在する。また、これらのステップ対演算装置割当部３０４の機能およびトランジション対演算装置割当部３０６の機能を入出力装置１３０に持たせ、この入出力装置１３０において、外部機器２００と通信を実施していない間に実行される形態も存在する。
【００７１】
以上のように、実施の形態２のシーケンス処理実行装置によれば、ステップ割当手段を、複数の演算装置と同一装置内に設けるようにしたので、ステップの各演算装置への割り振りを、外部の割当を行う装置を用いずに実施できるため、ユーザが本シーケンス処理実行装置を導入する際に必要となる全体の機器コストを抑えることができる。
【００７２】
また、実施の形態２のシーケンス処理実行装置によれば、トランジション割当手段を、複数の演算装置と同一装置内に設けるようにしたので、トランジションの各演算装置への割り振りを、外部の割当を行う装置を用いずに実施できるため、ユーザが本シーケンス処理実行装置を導入する際に必要となる全体の機器コストを抑えることができる。
【図面の簡単な説明】
【００７３】
【図１】この発明の実施の形態１によるシーケンス処理実行装置を示す構成図である。
【図２】この発明の実施の形態１によるシーケンス処理実行装置における演算装置が保有する手段を示す説明図である。
【図３】この発明の実施の形態１によるシーケンス処理実行装置における共有メモリが保有する手段を示す説明図である。
【図４】この発明の実施の形態１によるシーケンス処理実行装置で実行するＳＦＣプログラムの記述例を示す説明図である。
【図５】この発明の実施の形態１によるシーケンス処理実行装置で実際に発生したステップの組合せを示す説明図である。
【図６】この発明の実施の形態１によるシーケンス処理実行装置で実行するステップの処理時間を示す説明図である。
【図７】この発明の実施の形態１によるシーケンス処理実行装置におけるステップ割当処理を示すフローチャートである。
【図８】この発明の実施の形態１によるシーケンス処理実行装置におけるステップと演算装置の組合せの一例（その１）を示す説明図である。
【図９】この発明の実施の形態１によるシーケンス処理実行装置における図８の組合せの各演算装置の処理時間を示す説明図である。
【図１０】この発明の実施の形態１によるシーケンス処理実行装置におけるステップと演算装置の組合せの一例（その２）を示す説明図である。
【図１１】この発明の実施の形態１によるシーケンス処理実行装置における図１０の組合せの各演算装置の処理時間を示す説明図である。
【符号の説明】
【００７４】
１００  シーケンス処理実行部、１１０，１２０  演算装置、１４１  活性ステップ情報、１４２  活性ステップ組合せ情報、１４３  ステップ処理時間情報、１４４  ステップ対演算装置割当情報、１４５  トランジション処理時間情報、１４６  トランジション対演算装置割当情報、１４７  ステップ閾値データ、１４８  トランジション閾値データ、１５１  組合せ情報取得手段、１５２  ステップ処理時間取得手段、１５３  トランジション処理時間取得手段、１６１  活性ステップ組合せ情報保持手段、１６２  ステップ処理時間情報保持手段、１６３  ステップ対演算装置割当情報保持手段、１６４  トランジション処理時間情報保持手段、１６５  トランジション対演算装置割当情報保持手段、３００  プログラミング装置、３０４  ステップ対演算装置割当部、３０６  トランジション対演算装置割当部、４００  共有バス。
【図１】
2007241434.tif 000003
【図２】
2007241434.tif 000004
【図３】
2007241434.tif 000005
【図４】
2007241434.tif 000006
【図５】
2007241434.tif 000007
【図６】
2007241434.tif 000008
【図７】
2007241434.tif 000009
【図８】
2007241434.tif 000010
【図９】
2007241434.tif 000011
【図１０】
2007241434.tif 000012
【図１１】
2007241434.tif 000013