(57)【特許請求の範囲】
【請求項１】
シーケンス制御用プログラムにおける個々のシーケンス処理を実行する複数の処理実行手段と、各処理実行手段がシーケンス処理に伴う入力データ、中間処理データ、およびスキャン周期で処理を実行する処理過程における、処理実行手段で求められた次の周期で行うべき個々の処理の活性状態データのうち少なくとも１以上のデータを含むシーケンス処理実行時情報が保持されている共有情報保有手段と、各処理実行手段が実行する個々のシーケンス処理の割り当てを記述した割当テーブルを複数保有する割当テーブル保有手段と、前記割当テーブルを選定するための切替条件と、その切替条件を満たしたときに選定される割当テーブルの識別子とを記述したテーブル切替情報を有し、前記シーケンス処理実行時情報が前記切替条件に合致した割当テーブルを選択する割当テーブル切替手段とを備え、上記複数の処理実行手段は、上記割当テーブル切替手段により選択された割当テーブルで指定された割り当てにしたがってシーケンス制御用プログラムにおける個々のシーケンス処理を実行することを特徴とするシーケンス処理実行装置。
【請求項２】
切替条件は、シーケンス制御用プログラムの変数値間の論理式、または変数値相互間の比較もしくは変数値と所定値との比較を表した算術演算結果を条件式として設定した切替条件であることを特徴とする請求項１記載のシーケンス処理実行装置。
【請求項３】
切替条件は、シーケンス処理における同一スキャン周期内で活性化する複数のシーケンス処理の組合せを示す活性状態の論理式が切替条件であることを特徴とする請求項１記載のシーケンス処理実行装置。
【請求項４】
切替条件は、シーケンス処理における同一スキャン周期内で活性化する１つのシーケンス処理、または複数のシーケンス処理の組合せを示す活性状態の論理式と、シーケンス制御用プログラムの変数値間の論理式、または変数値相互間の比較もしくは変数値と所定値との比較を表した算術演算結果で設定した条件式とで構成された、切替条件であることを特徴とする請求項１記載のシーケンス処理実行装置。
【請求項５】
処理実行手段は、シーケンス制御プログラムの個々のシーケンス処理の実行時間を計測し、前記計測した個々の処理の実行時間を保持する実行時間保持手段と、前記実行時間を基準にして、複数の処理実行手段に対する割当テーブル上の個々の処理の割り当てを更新する割当テーブル更新手段を備えたことを特徴とする請求項１記載のシーケンス処理実行装置。
【請求項６】
割当テーブル更新手段は、処理実行手段がシーケンス処理を実行していないタイミング又はユーザにより指定されたタイミングで割当テーブルの更新処理を実行することを特徴とする請求項５記載のシーケンス処理実行装置。
【請求項７】
割当テーブル切替手段は、スキャン周期でシーケンス処理を実行する処理過程における、処理実行手段で求められた次の周期で行うべき個々のシーケンス処理の組合せが、テーブル切替情報の中に切替条件として存在しないとき、前記次の周期で行うべき個々のシーケンス処理の組合せ中に存在している各シーケンス処理に対して、処理実行手段の割り当てを指定した割当テーブルを新規に生成し、この新規作成割当テーブルの識別子と、前記個々のシーケンス処理の組合せを示す切替条件とをテーブル切替情報の中に設定するとともに、前記新規作成割当テーブルにおけるシーケンス処理の処理実行手段への割り当てを各処理実行手段に割り当てられるシーケンス処理の実行にかかる時間が各処理実行手段間で均等になるように、割り当てを更新することを特徴とする請求項５記載のシーケンス処理実行装置。
【請求項８】
割当テーブル切替手段は、割当テーブルを生成するとき、割当テーブル切替手段による選択頻度が最も小さい既存の割当テーブルを破棄することを特徴とする請求項７記載のシーケンス処理実行装置。
【請求項９】
外部の装置との間で複数の割当テーブルおよびテーブル切替情報を入出力する手段を有することを特徴とする請求項１から請求項８のうちのいずれか１項記載のシーケンス処理実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば、ＳＦＣ（シーケンシャル・ファンクション・チャート）で記述されているシーケンス制御用プログラムにおける個々のシーケンス処理を並列に実行する複数の演算装置を搭載しているシーケンス処理実行装置に関するものである。
【背景技術】
【０００２】
シーケンス制御用プログラム（ＩＥＣ６１１３１−３で定義されているＳＦＣを用いて記述されているプログラム）における個々のシーケンス処理を複数の演算装置で並列に実行させる場合、シーケンス制御用プログラムにおける個々のシーケンス処理を複数の演算装置に割り当てる必要がある。
例えば、以下の特許文献１に開示されているシーケンス処理実行装置では、シーケンス制御用プログラムにおいて、明示的に並列に実行可能であるように表記されている部分（同時分岐）に対し、ステップ及びトランジションのシーケンスをグループとして識別し、各グループを複数の演算装置に割り当てるという手段を講じている。
グループの割り当てを決定する方法としては、グループに含まれているステップ及びトランジションの処理時間の中で、最大の処理時間をグループの処理時間に設定し、複数の演算装置が実行するグループの処理時間が均一になるように、複数のグループを複数の演算装置に割り当てる方法を採用している。
【０００３】
例えば、グループＧＲ１〜ＧＲ４を演算装置Ａ又は演算装置Ｂに割り当てる場合において、グループＧＲ１〜ＧＲ４の処理時間が下記の通りであるとする。
ただし、演算装置Ａには既にグループＧＲ１が割り当てられており、演算装置Ｂには未だグループが割り当てられていないとする。
ＧＲ１＝１８０μｓ
ＧＲ２＝６２０μｓ
ＧＲ３＝３８０μｓ
ＧＲ４＝１００μｓ
この場合、演算装置Ｂの処理時間が０であり、演算装置Ｂの処理時間が演算装置Ａの処理時間（＝１８０μｓ）より短いため、演算装置Ｂがグループの割当対象に選択され、グループＧＲ２〜ＧＲ４の中で処理時間が最長のグループＧＲ２が演算装置Ｂに割り当てられる。
これにより、演算装置Ａの処理時間が１８０μｓになり、演算装置Ｂの処理時間が６２０μｓになる。
【０００４】
次に、演算装置Ａの処理時間（＝１８０μｓ）が演算装置Ｂの処理時間（＝６２０μｓ）より短いため、演算装置Ａがグループの割当対象に選択され、グループＧＲ３〜ＧＲ４の中で処理時間が最長のグループＧＲ３が演算装置Ａに割り当てられる。
これにより、演算装置Ａの処理時間が５６０μｓ（＝１８０＋３８０μｓ）になり、演算装置Ｂの処理時間が６２０μｓになる。
【０００５】
次に、演算装置Ａの処理時間（＝５６０μｓ）が演算装置Ｂの処理時間（＝６２０μｓ）より短いため、演算装置Ａがグループの割当対象に選択され、グループＧＲ４が演算装置Ａに割り当てられる。
これにより、演算装置Ａの処理時間が６６０μｓ（＝１８０＋３８０＋１００μｓ）になり、演算装置Ｂの処理時間が６２０μｓになる。
【０００６】
【特許文献１】特開平７−２８３９０号公報（段落番号［００２１］、図７）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来のシーケンス処理実行装置は以上のように構成されているので、演算装置Ａと演算装置Ｂが並列にシーケンス処理を実行する前に、演算装置Ａと演算装置Ｂの処理時間が均一になるように、グループＧＲ１〜ＧＲ４が固定的に割り当てられる。しかし、シーケンス制御用プログラムにおける個々のシーケンス処理を実行しているとき、例えば、負荷状況の変動が発生して、グループＧＲ１〜ＧＲ４の処理時間が変動しても、演算装置Ａ及び演算装置Ｂに対するグループＧＲ１〜ＧＲ４の割り当てを変更することができず、演算装置Ａ及び演算装置Ｂが効率的にシーケンス処理を実行することができなくなることがあるなどの課題があった。
【０００８】
この発明は上記のような課題を解決するためになされたもので、負荷状況に変動が発生したら、その負荷状況に応じて複数の演算装置に対するシーケンス処理の割り当てを最適化することができるシーケンス処理実行装置を得ることを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係るシーケンス処理実行装置は、シーケンス処理実行時情報が切替条件に合致した割当テーブルを選択する割当テーブル切替手段を備え、複数の処理実行手段が割当テーブル切替手段により選択された割当テーブルで指定された割り当てにしたがってシーケンス制御用プログラムにおける個々のシーケンス処理を実行するようにしたものである。
【発明の効果】
【００１０】
この発明によれば、シーケンス処理実行時情報が切替条件に合致した割当テーブルを選択する割当テーブル切替手段を備え、複数の処理実行手段が割当テーブル切替手段により選択された割当テーブルで指定された割り当てにしたがってシーケンス制御用プログラムにおける個々のシーケンス処理を実行するように構成したので、負荷状況に変動が発生したら、変動後の負荷状況に応じて複数の処理実行手段に対するシーケンス処理の割り当てを最適化することができるようになり、その結果、シーケンス制御用プログラムの処理時間を短縮することができる効果がある。
【発明を実施するための最良の形態】
【００１１】
実施の形態１．
図１はこの発明の実施の形態１によるシーケンス処理実行装置を示す構成図であり、図において、シーケンス処理実行装置１はプログラミング装置２及び外部機器３と接続されている。
プログラミング装置２はシーケンス処理実行装置１の利用者がプログラム開発を行う装置であり、シーケンス処理実行装置１にダウンロード又はアップロードするシーケンス制御用プログラムや各種データを生成する機能を有している。
また、プログラミング装置２は後述する割当テーブルやテーブル切替条件などを必要に応じてシーケンス処理実行装置１に与える一方、シーケンス処理実行装置１に保有されている割当テーブルやテーブル切替条件などを収集する機能を有している。
図１の例では、プログラミング装置２がシーケンス処理実行装置１の共有バス５０に接続されているが、例えば、“ＲＳ２３２Ｃ”や“Ｅｔｈｅｒｎｅｔ(登録商標)”のような一般的な通信手段を用いてシーケンス処理実行装置１と接続するようにしてもよい。
外部機器３はシーケンス処理実行装置１の制御対象であり、シーケンス処理実行装置１はシーケンス処理の実行結果となる出力データを外部機器３に対して出力したり、シーケンス処理の入力となるデータを外部機器３から取り込んだりする。シーケンス処理実行装置１の内部では、入出力装置４０を介して、外部機器３とデータ入出力を実施している。
【００１２】
シーケンス処理実行装置１は演算装置１０，２０、共有メモリ３０、入出力装置４０及び共有バス５０から構成されている。
演算装置１０，２０はシーケンス制御用プログラムにおける個々のシーケンス処理を並列に実行することが可能な処理実行手段を保有し、例えばＣＰＵ１１や専用回路１３を搭載している（図２を参照）。
図１では、シーケンス処理実行装置１が演算装置を２個実装している例を示しているが、演算装置を３個以上実装してもよい。
【００１３】
共有メモリ３０は例えばプログラミング装置２から取得した割当テーブル（ステップ割当テーブル、トランジション割当テーブル）やテーブル切替条件（ステップ割当テーブル切替条件、トランジション割当テーブル切替条件）などを保有しているメモリである。
入出力装置４０は、シーケンス処理実行装置１が、その制御対象である外部機器３とデータ入出力を行うための機能を有しており、シーケンス処理実行装置１内部で演算した結果の外部への出力や、シーケンス処理実行装置１内部で演算を実行するために必要となるデータの外部からの入力を取り扱っている。
【００１４】
図１９はこの発明の実施の形態１によるシーケンス処理実行装置１の構成ブロックである。このシーケンス処理実行装置１はシーケンス制御用プログラムにおける個々のシーケンス処理を実行する２つの処理実行手段Ａ（５０１）と処理実行手段Ｂ（５０１）とを備える。各処理実行手段Ａ，Ｂ（５０１）は、共有情報保有手段５０２が保持する次のスキャン周期で行うべきシーケンス処理の活性状態データに基づきシーケンス処理を実行する。ここで、入力データ、中間処理データの活性状態データのうち少なとも１のデータを含むデータをシーケンス処理実行時情報と呼ぶ。上述のシーケンス処理の実行において、シーケンス処理に伴う入力データを共有情報保有手段５０２から取得し、中間処理データを共有情報保有手段５０２ヘ出力する。また、処理実行手段Ａ，Ｂ（５０１）は、シーケンス処理の実行結果によって、次のスキャン周期で行うべきシーケンス処理の活性状態を定める。以上は、各シーケンス処理を実行する処理実行手段５０１が割り当てられている場合の処理であるが、以下はシーケンス処理の処理実行手段５０１ヘの割り当てについて説明する。
割当テーブル保有手段５０３は、各処理実行手段５０１が実行するシーケンス処理の割り当てを記述した割当テーブルを複数個保有する。割当テーブル切替手段５０４は、共有情報保有手段５０２が保持するシーケンス処理実行時情報が、割当テーブルを選定するための切替条件に合致した割当テーブルを選択する。この選択のために、割当テーブル切替手段５０４は、切替条件と、切替条件を満たしたときに選定される割当テーブルの識別子とを記述したテーブル切替情報を保有する。
そして、処理実行手段５０１は、割当テーブル切替手段５０４により選択された割当テーブルで指定された割り当てに従って、シーケンス処理を実行する。
【００１５】
また、処理実行手段５０１は、シーケンス処理の実行時間を計測し、前記計測した実行時間を実行時間保有手段５０５に記憶する。割当テーブル更新手段５０６は、実行時間を基準にして、複数の処理実行手段に対する割当テーブル上のシーケンス処理の割り当てを更新するように構成することもできる。
【００１６】
図１では、図３にその詳細を示すように、演算装置１０，２０が、共有メモリ３０に保有されている複数のステップ割当テーブル１１０（トランジション割当テーブル１４０）の中から、ステップ割当テーブル切替テーブル１３０（トランジション割当テーブル切替テーブル１６０）に保有されているステップ割当テーブル切替条件（トランジション割当テーブル切替条件）に合致するステップ割当テーブル（トランジション割当テーブル）を選択するステップ割当テーブル切替機能（トランジション割当テーブル切替機能）や、そのステップ割当テーブル（トランジション割当テーブル）にしたがってシーケンス制御用プログラムにおける個々のシーケンス処理であるステップ（トランジション）を自己に割り当てるステップ／トランジション実行機能などを備えていることを想定しているが、ステップ割当テーブル切替機能が、シーケンス処理実行装置１の内部において、明示していない管理装置上で実現され、本管理装置が共有バス５０に接続されるような形態も存在する。
【００１７】
図２はこの発明の実施の形態１によるシーケンス処理実行装置１の演算装置１０を示す構成図である。図２では演算装置１０の内部構成を示しているが、演算装置２０の内部構成は演算装置１０の内部構成と同じである。
図２において、ＣＰＵ１１はソフトウェアで実現されているシーケンス処理を実行する処理実行部である。
メモリ１２はＣＰＵ１１が実行するプログラムや被演算データや、専用回路１３が使用する被演算データ等の各種情報を保持している。
専用回路１３は特定シーケンス処理を実行する処理実行部であり、専用回路１３としては、例えば、ＡＳＳＰ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｓｔａｎｄａｒｄ  Ｐｒｏｄｕｃｔ）やＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  ＩＣ）のような形態も存在すれば、例えば、ＦＰＧＡのような任意の回路を実現可能な形態も存在する。また、例えば、ＦＰＧＡ上に、ある特定シーケンス処理のみを実行可能な回路を実現するという手段も存在する。
計時用機能部１４はＣＰＵ１１及び専用回路１３により実行されるシーケンス処理に対する処理時間を計測する機能を備えている。
【００１８】
図２では、ＣＰＵ１１と専用回路１３が共に存在する構成を示しているが、ＣＰＵ１１を含まない構成や、専用回路１３を含まない構成も考えられ、ＣＰＵ１１又は専用回路１３のどちらか一方が存在していればよい。
また、図２では、メモリ１２がＣＰＵ１１や専用回路１３とは独立した構成要素である例を示しているが、メモリ１２がＣＰＵ１１又は専用回路１３の内部に存在する構成や、ＣＰＵ１１及び専用回路１３の双方の内部に存在する構成も考えられる。
また、メモリ１２が図１の共有メモリ３０上に、各々の演算装置１０，２０がメモリ領域を予約して、対応するメモリ領域として使用する構成も存在する。
さらに、図２では、計時用機能部１４がＣＰＵ１１や専用回路１３とは独立した構成要素である例を示しているが、計時用機能部１４がＣＰＵ１１や専用回路１３の内部に存在する構成も存在する。
【００１９】
図３はこの発明の実施の形態１によるシーケンス処理実行装置１の演算装置１０が保有している機能を示す説明図である。図３では演算装置１０が保有している機能を示しているが、演算装置２０が保有している機能は演算装置１０が保有している機能と同じである。
演算装置１０，２０は共有メモリ３０にアクセスするための共有メモリアクセス機能４００、複数のステップ割当テーブルの中からステップ割当テーブル切替条件に合致するステップ割当テーブルを選択するステップ割当テーブル切替機能４３０、複数のトランジション割当テーブルの中からトランジション割当テーブル切替条件に合致するトランジション割当テーブルを選択するトランジション割当テーブル切替機能４４０、ステップ割当テーブルを更新するステップ割当更新機能４５０、トランジション割当テーブルを更新するトランジション割当更新機能４６０を備えている。
また、演算装置１０，２０はステップ割当テーブル切替機能４３０およびトランジション割当テーブル切替機能４４０が選択した割当テーブル上の割り当てにしたがってシーケンス制御プログラムにおける個々のステップおよびトランジションを実行するためのステップ／トランジション実行機能４１０、他の演算装置２０，１０と同期を図る装置間同期機能４２０を備えている。
なお、演算装置１０，２０が保有している機能は、ＣＰＵ１１又は専用回路１３で実行される。あるいは、ＣＰＵ１１及び専用回路１３の双方で実行される。
【００２０】
図４はこの発明の実施の形態１によるシーケンス処理実行装置１の共有メモリ３０が保有している情報を示す説明図である。
共有メモリ３０は、どのステップを次の処理開始のタイミングで実行するかを指定する活性ステップ情報１００、どのステップをどの演算装置で実行するかを指定する複数のステップ割当テーブル１１０、ステップ割当テーブル１１０における特定のテーブルＩＤ（テーブルの識別子）を保持しているステップ割当テーブル参照変数１２０、ステップ割当テーブル１１０の中から割当テーブルを選択するための切替条件と、切替条件に対応する割当テーブルの識別子（テーブルＩＤ）との組を複数保有するステップ割当テーブル切替テーブル１３０を保有している。
また、共有メモリ３０は、どのトランジションをどの演算装置で実行するかを指定する複数のトランジション割当テーブル１４０、トランジション割当テーブル１４０における特定のテーブルＩＤを保持しているトランジション割当テーブル参照変数１５０、トランジション割当テーブル１４０の中から割当テーブルを選択するための切替条件と、切替条件に対応する割当テーブルの識別子（テーブルＩＤ）との組を複数保有するトランジション割当テーブル切替テーブル１６０を保有している。
なお、ここでステップ割当テーブル切替テーブル１３０とトランジション割当テーブル切替テーブル１６０は、テーブル切替情報である。ステップ割当テーブル１１０とトランジション割当テーブル１４０は、割当テーブル保有手段５０３で保有され、この手段は共有メモリ３０で実現される。
【００２１】
また、共有メモリ３０は、ステップの実行時間を示すステップ実行時間情報２００、トランジションの実行時間を示すトランジション実行時間情報２１０、どのような実行時間情報を保持するかを指定するプロファイル制御用パラメータ３００、どのようにシーケンス処理を複数の演算装置に割当てるかの割当方式を示す割当方式決定用パラメータ３１０、ステップ実行可能装置を指定するステップ実行可能装置指定フラグ３２０（割当可否情報）、トランジション実行可能装置を指定するトランジション実行可能装置指定フラグ３３０（割当可否情報）、更新処理の実行タイミングを指定する更新処理実行タイミング指定パラメータ３４０を保有している。ステップ実行時間情報２００とトランジション実行時間情報２１０は、実行時間保有手段５０５で保有され、この手段は共有メモリ３０で実現される。
【００２２】
次に動作について説明する。
シーケンス処理実行装置１がシーケンス制御用プログラムを実行するに先立って、シーケンス処理実行装置１の利用者がプログラミング装置２を使用して、シーケンス制御用プログラムを作成する。
シーケンス制御用プログラムは、図５に示すように、ＩＥＣ６１１３１−３規格で規定されているシーケンス制御向けのプログラミング言語ＳＦＣ（シーケンシャル・ファンクション・チャート）を使用したプログラムである。
【００２３】
図５のＳＦＣプログラムについて簡単に説明する。
ＳＦＣプログラムは、処理を実行する「ステップ」と、条件の成立によりステップの遷移を制御する「トランジション」という概念で、シーケンス処理記述を行う構成となっている。
図５において、接頭文字として“Ｓ”が付加されているブロックが「ステップ」を表しており、Ｓ１〜Ｓ１１までの１１個の「ステップ」が存在している。
ステップＳ１〜Ｓ１１には、アクションクオリファイヤとアクションブロックが関連付けられている。
アクションブロックは、実際に行う処理の中身をＩＬ（インストラクションリスト）、ＬＤ（ラダーダイヤグラム）、ＦＢ（ファンクションブロック）や、ＳＴ（ストラクチャードテキスト）などのような高級プログラミング言語で記述されたブロックである。
図５では、例えば、ステップＳ１に対してアクションブロックａ１が関連付けられており、ステップＳ２に対してアクションブロックａ２が関連付けられている。
【００２４】
また、各アクションブロックに付随する形で、アクションクオリファイヤが存在する。
アクションクオリファイヤは、ステップＳに付随するアクションの実行条件が定義されたものであり、ＩＥＣ６１１３１−３規格では、例えば、下記に示すような複数のアクションクオリファイヤが定義されている。
Ｎ    非保持：そのステップが活性の間、継続実行される。
Ｐ    パルス：そのステップが活性に変化した時、パルス的に１回だけ実行される。
アクションクオリファイヤのグラフィカルな表現としては、ステップのブロックと、アクションブロックを接続する部分のブロックとして表される。
図５では、ステップＳ１に付随するアクションａ１には、アクションクオリファイヤとして“Ｎ”が指定され、ステップＳ１１に付随するアクションａ１１には、アクションクオリファイヤとして“Ｐ”が指定されている。
【００２５】
また、ステップとステップを接続する線の途中の部分にある横線が「トランジション」を表している。
図５では、接頭文字として“ｔ”が使用されている部分が「トランジション」を示しており、ｔ１〜ｔ８までの８個のトランジションが存在している。
トランジションｔ１〜ｔ８には、ＢＯＯＬ型変数や、上述したＩＬ，ＬＤ，ＳＴなどのプログラム言語で真偽値を返す処理が記述されており、条件が成立したときに（結果が真のとき）、その次のステップに遷移することを示している。
図５では、例えば、ステップＳ２において、トランジションｔ２が成立すればステップＳ５に遷移を行い、ステップＳ３において、トランジションｔ３が成立すればステップＳ６に遷移を行うことを示している。
【００２６】
なお、図５では、説明の簡単化のため、各ステップに対して、各々一つずつのアクションしか記述していないが、各ステップに対して、複数のアクションを関連付けることも可能である。
また、図５で、ステップＳ１を記述したブロックの両脇が二重線になっているが、これはステップＳ１がイニシャルステップであることを示している。イニシャルステップとは、ＳＦＣプログラムの実行を開始するステップを示している。したがって、図５のＳＦＣプログラムにおいては、ステップＳ１から実行が開始される。
シーケンス処理実行装置１の利用者は、このようなプログラミング記述で表されるシーケンス制御用プログラムをプログラミング装置２上のプログラミング環境を使用して作成する。
【００２７】
プログラミング装置２は、シーケンス制御用プログラムを作成すると、そのシーケンス制御用プログラムをシーケンス処理実行装置１上で実行可能なプログラムに変換する。
即ち、プログラミング装置２は、シーケンス制御用プログラムをシーケンス処理実行装置１上で実行可能なプログラムに変換するプログラム変換機能を実装しており、シーケンス処理実行装置１に搭載されている演算装置１０，２０の種別情報を参照して、シーケンス制御用プログラムを変換する。ここで、種別情報とは、演算装置１０、２０が保有しているＣＰＵ１１や専用回路１３等がどのようなものであるかを特定するための情報である。
プログラミング装置２における種別情報の獲得の仕方としては、シーケンス処理実行装置１の種類毎に種別情報が確定している場合に、その情報をそのままつかう場合もあれば、シーケンス処理実行装置１から種別情報をアップロードするようにしてもよい。
プログラミング装置２により作成されたＳＦＣプログラムにおいて、演算装置１０，２０で実行される、いわゆるシーケンス処理の内容は、ＳＦＣプログラム上のアクション部に記述された処理内容と、トランジション部に記述された処理内容である。
プログラミング装置２では、ＳＦＣプログラム上のアクション部に記述された内容及びトランジション部に記述された内容を、以下に示すような方法で、実行可能なプログラムに変換する。
【００２８】
（１）演算装置１０，２０がＣＰＵ１１のみで構成されている場合、ＳＦＣプログラムを次のように変換する。
ＣＰＵ１１は一般的なＣＰＵであるため、プログラミング装置２は、作成したＳＦＣプログラムをコンパイルして、ＣＰＵ１１上で直接実行可能なオブジェクトコードに変換する。
ただし、ＣＰＵ１１が、何かしらの中間コードをインタプリットして実行する形態のインタプリタ方式を採用している場合には、対応する中間コードに変換する。
【００２９】
（２）演算装置１０，２０が専用回路１３のみで構成されている場合、ＳＦＣプログラムを次のように変換する。
ここでは、専用回路１３が、図９に示すように、フィルタ回路１１００と、コンフィグレーションデータ１０００と、実行制御回路１２００とから構成されているものとして説明する。ただし、図９は専用回路１３の構成例であり、専用回路１３の構成が図９の構成例に限定されるものではない。
フィルタ回路１１００には、コンフィグレーションデータ１０００（フィルタ回路１１００の内部処理の実行に必要となる設定データ）が付加されている。
コンフィグレーションデータ１０００は、１６進数で示している各アドレス（例えば、左側のｈ００，ｈ０４など）に対応するデータ領域を定義している。
【００３０】
図１０はフィルタ回路１１００が実行する処理内容（アルゴリズムのリスト）を示す説明図である。
図１０の処理内容を、フィルタ回路１１００の外部入出力信号（例えば、ｓｔａｒｔ，ｄｏｎｅなど、フィルタ回路１１００に入出力される信号）と照らし合わせながら簡単に説明する。
フィルタ回路１１００では、クロック信号（ｃｌｏｃｋ）が入力される度に、ｓｔａｒｔ信号がａｃｔｉｖｅ（Ｈｉｇｈ状態）になっているか否かを確認する。
フィルタ回路１１００は、ｓｔａｒｔ信号が“ａｃｔｉｖｅ”であれば、内部のｆｏｒループの実行を開始する。
最初に、フィルタ回路１１００は、コンフィグレーションデータ１０００のアドレスｈ０８に格納されている“ＩＯ＿ＮＵＭ”を取得する。
内部変数ｉが、“ＩＯ＿ＮＵＭ”の値より小さければ、本ｆｏｒループを“ＩＯ＿ＮＵＭ”の回数だけ実行する。
内部変数ｉに関連するｆｏｒループ部の実行が開始されると、内部変数ＳＵＭが“０”にクリアされる。
【００３１】
その次に、フィルタ回路１１００は、コンフィグレーションデータ１０００のアドレスｈ０Ｃに格納されている“ＦＬＴ＿ＮＵＭ”を取得する。
内部変数ｊが、“ＦＬＴ＿ＮＵＭ”の値より小さければ、本ｆｏｒループを“ＦＬＴ＿ＮＵＭ”の回数だけ実行する。本ｆｏｒループでは、まず、コンフィグレーションデータ１０００のアドレスｈ００に格納されている“ＩＮ＿ＡＤＤＲ”に対して、内部変数ｉと内部変数ｊを加算した値をアドレスとして生成し、そのアドレスに対応するデータ値をフィルタ回路１１００の外部から読み込む（図１０のＲＥＡＤ部分）。その際、図９のフィルタ回路１１００からは、ＡＤＤＲ［３１：０］信号に該当するアドレス値が出力されると共に、ｒｅａｄ＿ｒｅｑ信号がＨｉｇｈになる。
このｒｅａｄ＿ｒｅｑ信号は、実行制御回路１２００を介して、専用回路１３の外部にアクセスされ、該当アドレスのデータ値が、ＩＯ＿ＤＡＴＡ［３１：０］を介してフィルタ回路１１００に取り込まれ、内部変数ｄａｔａ＿ｉｎに格納される。
また、フィルタ回路１１００の内部では、コンフィグレーションデータ１０００上に保持されているフィルタ係数値（ｗ０，ｗ１，ｗ２など）を読み取り、ｗｅｉｇｈｔ変数に取り込む（図１０のＷＥＩＧＨＴ＿ＶＡＬＵＥ部分）。
【００３２】
ＷＥＩＧＨＴ＿ＶＡＬＵＥ（ｊ）では、指定された内部変数ｊの値が“０”であればｗ０の値、内部変数ｊの値が“１”であればｗ１の値を順次取り込む。その後、ｄａｔａ＿ｉｎとｗｅｉｇｈｔの値を掛け合わせ、その結果を内部変数ＳＵＭに追加加算する。
ＦＬＴ＿ＮＵＭ回分のループ処理を完了した後、図１０のＷＲＩＴＥ部で、ＯＵＴ＿ＡＤＤＲ＋ｉの値に対応するアドレスに“ＳＵＭ”の値を書き込む。上記処理を内部変数ｉに対応するｆｏｒループの“ＩＯ＿ＮＵＭ”の回数分だけ実施した後、ｄｏｎｅ信号をＨｉｇｈにして、再度、ｓｔａｒｔ信号がＨｉｇｈになるのを待つ。
このように、フィルタ回路１１００ではフィルタ処理が実施される。回路の挙動として、クロック信号（ｃｌｏｃｋ）のエッジに同期した形で一般的に処理が実行されるが、本説明では、図１０中の、どの処理タイミングがクロックエッジに同期しているかの詳細な説明は省略する。
【００３３】
図１０に示されるような処理内容を持つフィルタ回路１１００において、実現可能であるＳＦＣプログラム中の処理記述がなされている場合、実行可能なプログラムに変換する方法としては、対応するコンフィグレーションデータ１０００に設定される適切な値を持つコンフィグレーションデータを生成することである。
例えば、利用者により記述されたＳＦＣプログラムの処理（アクション）において、図１０のプログラムで、下記の（Ａ）ように設定すれば（右辺の数値の接頭文字“ｄ”は、１０進数であることを示している）、処理が実現可能なコンフィグレーションデータ１０００は、下記の（Ｂ）のように生成される。
【００３４】
（Ａ）IN_ADDR    = h0050_0000;
OUT_ADDR    = h0050_0800;
IO_NUM    = d1024
FLT_NUM    = d11
w0        = d512
w1        = d256
w2        = d128
w4        = d64
w5        = d32
w6        = d16
w7        = d8
w8        = d4
w9        = d2
w10        = d1
【００３５】
（Ｂ）h00:        h0050_0000
h04:        h0050_0800
h08:        d1024
h0c:        d11
h10:        d512
h14:        d256
h18:        d128
h1c:        d64
h20:        d32
h24:        d16
h28:        d8
h2c:        d4
h30:        d2
h34:        d1
【００３６】
本例では、専用回路１３に対して実行可能なプログラムを生成する手段として、特定処理に対応する処理回路が既に実現されており、その演算に必要となる各種の被演算データをコンフィグレーションデータ１０００として設定することで、利用者が指定した処理を専用回路１３で実現する仕組みを説明したが、他の実行可能プログラムの生成方式としては、例えば、Ｃ言語等の高級プログラミング言語で記述された処理コードから専用回路１３の記述を生成するようなツール（いわゆる高位合成ツール）を用いて回路を生成し、例えば、ＦＰＧＡで実現されている専用回路１３の領域に実装するという手段も考えられる。その場合、プログラムとは、いわゆるＦＰＧＡでのコンフィグレーションデータである。
上記の例では、ＣＰＵ１１又は専用回路１３に対して、ＳＦＣプログラムから実行可能なプログラムを生成する手段を説明したが、ＣＰＵ１１及び専用回路１３を共に保有する演算装置においては、ＣＰＵ１１及び専用回路１３の両者に対するプログラム生成処理が行われる。
このように生成された実行可能プログラムは、プログラミング装置２から共有バス５０を介して、シーケンス処理実行装置１に送られ、シーケンス処理実行装置１の演算装置１０，２０上にロードされる。
【００３７】
次に、利用者により記述されたＳＦＣプログラムをシーケンス処理実行装置１上で実行させるに際して、どのステップの処理と、どのトランジションの処理を、どの演算装置で実行させるかの割当機能と割当データについて説明する。
これ以降の説明においては、説明の簡単化のため、割当単位をステップとして記述するが、例えば、アクション毎に割当を実現するなど、より細かな粒度に拡張することは容易である。
【００３８】
シーケンス処理実行装置１が搭載している共有メモリ３０は、図４に示すように、どのステップを次の処理開始のタイミングで実行するかを指定する活性ステップ情報１００が存在する。
図１１は活性ステップ情報１００の一例を示す説明図であり、図１１の一番左の列は、どのステップに関する情報であるかを示しており、その次の「Ｘ」の列は、今回どのステップが活性状態（アクティブ）であるかを示している。「Ｘ」の表記は、ＩＥＣ６１１３１−３のステップの活性状態Ｘ（Ｓ１．Ｘ等で変数としてシーケンス処理プログラム中から参照可能）に対応している。ＩＥＣ６１１３１−３の定義では、ステップは活性／非活性の２つの状態を保有している。ここでは活性の場合、前記Ｘが“１”であり、非活性の場合、前記Ｘが“０”となるような、論理変数として表現されているとする。なお、活性／非活性を表すＸの具体的な値のことを、活性状態データと呼称する。活性ステップ状態１００では、全てのステップに対する、この活性状態データが保持されている。
その次の「Ｘｎｅｘｔ」の列は、次の実行のタイミングにおいて、各ステップが活性かどうか（実行するかどうか）を示している。
また、その次の「Ｐ」の列は、アクションクオリファイヤＰに対応する情報を保持している列であり、次の実行タイミングにおいて、アクションクオリファイヤＰで指定されたアクションを実行するか否かを判断する情報を保持している。
【００３９】
ＳＦＣプログラムを最初に実行する場合においては、どのステップがイニシャルステップであるかを指定する必要があるが、図５のＳＦＣプログラムでは、イニシャルステップとしてステップＳ１が指定されているため、このようなＳＦＣプログラムに対応する活性ステップ情報１００では、ステップＳ１の「Ｘ」と「Ｐ」が“１”で、それ以外の全てが“０”に初期化される。
この初期の活性ステップ情報１００も、先の実行可能プログラムと同様に、プログラミング装置２からシーケンス処理実行装置１の共有メモリ３０にロードされる。
【００４０】
また、シーケンス処理実行装置１が搭載している共有メモリ３０は、図４に示すように、どのステップをどの演算装置で実行するかを指定するステップ割当テーブル１１０と、どのトランジションをどの演算装置で実行するかを指定するトランジション割当テーブル１４０が存在する。
図１２はステップ割当テーブル１１０の一例を示す説明図であり、図１２の例では、ステップ割当テーブル１１０が４つのテーブル（Ａ）〜（Ｄ）から構成されている。
ステップ割当テーブル１１０のテーブル（Ａ）〜（Ｄ）は、テーブルを区別するテーブルの識別子であるテーブルＩＤ（ＩＤ：ＴＡＢＬＥ０、ＩＤ：ＴＡＢＬＥ１、ＩＤ：ＴＡＢＬＥ２、ＩＤ：ＴＡＢＬＥ３）と、どのステップ（Ｓ１〜Ｓ１１）をどの演算装置（図１２では、ＰＥ１が演算装置１０を示し、ＰＥ２が演算装置２０を示している）で実行するかを示す情報が含まれている。
【００４１】
テーブル（Ａ）〜（Ｄ）の行数は可変であり、また必ずしも各テーブルが、ＳＦＣプログラム中の全てのステップに関する演算装置の指定を含む必要はない。
トランジション割当テーブル１４０は、その詳細を図示してはいないが、図１２のステップ割当テーブル１１０と同様な構成を取っている。
共有メモリ３０は、ステップ割当テーブル１１０とトランジション割当テーブル１４０に各々対応して、ステップ割当テーブル参照変数１２０とトランジション割当テーブル参照変数１５０が存在している。両変数は、各々、ステップ割当テーブル１１０とトランジション割当テーブル１４０に存在する特定のテーブルへのテーブルＩＤを一つ保持しており、本変数が指し示す特定の割当テーブル上に指定されている演算装置への割り当てにしたがって、各シーケンス処理が対応する演算装置上で実行される。
少なくとも、シーケンス処理実行装置１が、ＳＦＣプログラムで記述されたシーケンス処理を開始する際（本例では、イニシャルステップＳ１の実行を開始する際）には、ステップ割当テーブル１１０の内部には一つのテーブルと、トランジション割当テーブル１４０の内部には一つのテーブルと、各々のテーブルに対応したテーブルＩＤが、ステップ割当テーブル参照変数１２０とトランジション割当テーブル参照変数１５０に設定されている必要がある。そのため、本例における説明では、図１２に示されているテーブル（Ａ）がステップ割当テーブル１１０に設定され、テーブル（Ａ）に対応するテーブルＩＤである“ＴＡＢＬＥ０”がステップ割当テーブル参照変数１２０に設定されるとする。また、明示していないが、トランジションに対しても同様な設定がなされるとする。
【００４２】
次に、演算装置１０，２０上で、ＳＦＣプログラムがどのように実行されるかについて説明する。ここで説明する機能は、図３におけるステップ／トランジション実行機能４１０が保有する機能であり、演算装置１０，２０のＣＰＵ１１又は専用回路１３により実行される。
ＣＰＵ１１により実行される場合には、ＣＰＵ上で実行されるシステムソフトウェアが本機能を保有し、専用回路１３上で実行される場合には、図９の実行制御回路１２００が本機能を保有している。
【００４３】
図６は演算装置１０，２０の処理実行手段のフローチャートを示している。
ただし、図６のフローチャートでは、“ステップ”をＳＦＣプログラム上の“ステップ”と区別するため、ステップの符号として“ＳＴ”を付している。
図６において、ステップＳＴ２００，ＳＴ３００，ＳＴ４００，ＳＴ５００は、各々の内部にフローチャートを持つように階層化されている。
即ち、ＳＴ２００の詳細な処理内容は図７、ＳＴ３００の詳細な処理内容は図８、ＳＴ４００の詳細な処理内容は図７、ＳＴ５００の詳細な処理内容は図８に示している。
【００４４】
最初に、演算装置１０，２０は、処理の開始要求が発生しているか否かを確認する（ステップＳＴ１００）。処理の開始要求は、例えば、周期的に発生するシグナル信号によって演算装置１０，２０に同時に通知される。
一般的に、シーケンス制御プログラムを実行するシーケンス処理実行装置１は、このように一定の周期でシーケンス処理が実行される。この一定周期は、一般的にスキャン周期と呼ばれる。
演算装置１０，２０は、処理の開始要求を受けると、自装置に割り当てられたステップの実行を開始する（ステップＳＴ２００）。
即ち、演算装置１０，２０は、共有メモリ３０に保有されている活性ステップ情報１００（図１１を参照）を参照して、全ての行について評価を実施したか否かを判定する（図７のステップＳＴ８１０）。
演算装置１０，２０は、全ての行について評価を実施していなければ、活性ステップ情報１００から一つの行を取得する（ステップＳＴ８２０）。
【００４５】
演算装置１０，２０は、一つの行を取得すると、その行の列「Ｘ」が“１”であるか否かを調べることにより、その行のステップがアクティブか否かを判断する（ステップＳＴ８３０）。
演算装置１０，２０は、その行のステップがアクティブでなければ、ステップＳＴ８１０の処理に戻るが、その行のステップがアクティブであれば、共有メモリ３０に保有されている複数のステップ割当テーブル１１０の中から、今回使用するステップ割当テーブルをステップ割当テーブル参照変数１２０に基づいて特定し、特定したステップ割当テーブルから該当するＳＦＣステップの割当情報を取得する（ステップＳＴ８４０）。
【００４６】
演算装置１０，２０は、該当するＳＦＣステップの割当情報を取得すると、その割当情報を参照して、当該ステップが、自演算装置に割り当てられているステップか否かを判定する（ステップＳＴ８５０）。
演算装置１０，２０は、自演算装置に割り当てられていないステップであれば、ステップＳＴ８１０の処理に戻るが、自演算装置に割り当てられているステップであれば、そのステップに対応する処理、具体的には、そのステップに関連付けられているアクションを実行し（ステップＳＴ８６０）、ステップＳＴ８１０の処理に移行する。
【００４７】
演算装置１０，２０は、自演算装置に割り当てられている全てのステップの処理を実行すると、他の演算装置２０，１０との同期を図る処理を実行する（図６のステップＳＴ３００）。
即ち、演算装置１０，２０は、自演算装置に割り当てられている全てのステップの処理を実行すると、全ての処理が完了した旨を示す処理完了通知を他の演算装置２０，１０に送信する（図８のステップＳＴ９１０）。
演算装置１０，２０は、処理完了通知を他の演算装置２０，１０に送信すると、他の演算装置２０，１０との同期を図るため、他の演算装置２０，１０から送信される処理完了通知を受信するまで待機し、他の演算装置２０，１０から送信される処理完了通知を受信すると（ステップＳＴ９２０）、同期処理を終了する。
【００４８】
演算装置１０，２０は、他の演算装置２０，１０との同期を図ると、自装置に割り当てられたトランジションの実行を開始する（ステップＳＴ４００）。
自装置に割り当てられたトランジションの実行は、ステップＳＴ２００におけるＳＦＣステップの実行とほぼ同様であり、図７のフローチャートにしたがって動作する。
自装置に割り当てられたトランジションを実行する場合、共有メモリ３０に保有されているトランジション割当テーブル１４０の中から、今回使用するトランジション割当テーブルをトランジション割当テーブル参照変数１５０に基づいて特定し、特定したトランジション割当テーブル１４０から該当するトランジションの割当情報を取得する（ステップＳＴ８４０）。
【００４９】
演算装置１０，２０は、該当するトランジションの割当情報を取得すると、その割当情報を参照して、当該トランジションが、自演算装置に割り当てられているトランジションか否かを判定する（ステップＳＴ８５０）。
演算装置１０，２０は、自演算装置に割り当てられていないトランジションであれば、ステップＳＴ８１０の処理に戻るが、自演算装置に割り当てられているトランジションであれば、そのトランジションに対応する処理を実行し（ステップＳＴ８６０）、ステップＳＴ８１０の処理に移行する。
なお、各トランジション処理の演算結果（真偽値）は、活性ステップ情報１００のＸｎｅｘｔ列に設定される（図１１を参照）。
【００５０】
演算装置１０，２０は、自演算装置に割り当てられている全てのトランジションの処理を実行すると、ステップＳＴ３００の処理と同様に、他の演算装置２０，１０との同期を図る処理を実行する（図６のステップＳＴ５００）。
演算装置１０，２０は、他の演算装置２０，１０との同期を図ると、活性ステップ情報１００の更新を実行する（ステップＳＴ６００）。
活性ステップ情報１００の更新は、図１１のテーブルに対して、次活性状態を示すＸｎｅｘｔ列の値をＸ列に書き写し、例えば、Ｐ列のようなアクションクオリファイヤの情報を設定する処理である。
例えば、Ｐ列の値は、「〜Ｘ  ∧  Ｘｎｅｘｔ」の論理式で計算される（〜は値の反転を表し、∧は論理積を表す。今回のＸが非活性で、次回のＸｎｅｘｔが活性ならばＰは真（１）になる）。
ステップＳＴ６００の処理を、どの演算装置が実行するかは、予め設定されている特定の演算装置が実施してもよいし、任意の演算装置に処理を割り振るようにしてもよい。
【００５１】
次に、シーケンス処理実行装置１が実行するシーケンス処理の負荷状況が変動したとき、複数の演算装置に割り当てるシーケンス処理を動的に変更し、処理の割り当てを最適化する手段について説明する。
シーケンス処理実行装置１で実行されている各ステップ（厳密にはアクション）の実行時間は、常に一定とは限らない。
各アクションの処理内容が、例えば、図１５に示すように、条件分岐を多用して記述されている場合、入力データである外部入力変数Ｘ０が真偽のどちらであるか、中間処理データである内部変数Ｍ０が真偽のどちらであるかにより、実行する処理ブロックが異なり（処理ブロック１、処理ブロック２又は処理ブロック３を実行する）、各処理ブロックの実行時間が大きく異なる場合、同じアクションではあるが、その実行時間は異なるものとなる。
【００５２】
外部入力変数Ｘ０や内部変数Ｍ０の値が、外部要因によって変更される場合や、ある任意の時間、処理を実行した結果として値が変動する場合には、その変動に応じて、各処理が実行される演算装置の割当を動的に変更することが、処理割当の最適性から望まれる。
また、ＳＦＣプログラムの作成時に先見的に分かる処理分岐（例えば、外部入力変数Ｘ０が偽であれば、処理ブロック３が実行される）であれば、その分岐に対応する割当テーブルを用意しておくことが割当の即応性から望まれる。
この実施の形態１では、シーケンス処理実行装置１におけるステップ割当テーブル切替機能４３０及びトランジション割当テーブル切替機能４４０が、実行するシーケンス処理の実行時間や変数値の計測結果に基づいて、動的な割当の変更や先見的な割当の変更を行う。
以下、ステップ割当テーブル切替機能４３０及びトランジション割当テーブル切替機能４４０の動作について説明する。
【００５３】
最初に、先見的にプログラミング装置２上で実施する割当テーブルの設定及び切替条件指定について説明する。
図５のＳＦＣプログラムでは、先見的にステップＳ２とステップＳ３とステップＳ４が同時にアクティブになることが自明である。
このステップの組み合せにおけるシーケンス処理が実行されているとき、ステップＳ３およびステップＳ４の処理時間が図１４の通りであるとする。また、ステップＳ２については、図１４での処理時間とは異なり、アクションａ２の処理内容が図１５であり、図１５における各処理ブロックの処理時間が図１６の通りであるとする。
【００５４】
この場合、ステップ割当テーブル切替テーブル１３０に対応した図である図１３の１行目から３行目に示すような割当テーブルの切替条件が設定される。
〜Ｘ０
Ｘ０  ∧  Ｍ０
Ｘ０  ∧  〜Ｍ０
また、上記の３つの切替条件に対して、各々、割当テーブルおよび対応する割当テーブルの識別子が準備される。
ＴＡＢＬＥ１
ＴＡＢＬＥ２
ＴＡＢＬＥ３
【００５５】
ここで、“〜”は値の反転を表し、∧は論理積を表している。
テーブルＩＤであるＴＡＢＬＥ１，ＴＡＢＬＥ２，ＴＡＢＬＥ３が各々指し示す割当テーブル（Ｂ）（Ｃ）（Ｄ）に対して、演算装置１０及び演算装置２０に最適なシーケンス処理を割り当てるための戦略は様々存在するが、演算装置１０，２０に各々割り当てたシーケンス処理の合計処理時間の最大が最も小さくなる方式を例にとると、ＴＡＢＬＥ１に対する割当は、次のようになる。
ステップＳ２    →    演算装置１０
ステップＳ３    →    演算装置２０
ステップＳ４    →    演算装置２０
このとき、演算装置１０，２０のシーケンス処理の合計実行時間は、次のようになる。
演算装置１０    →    ２００μｓ
演算装置２０    →    ３２０μｓ
【００５６】
同様に、ＴＡＢＬＥ２に対する割当は、次のようになる。
ステップＳ２    →    演算装置２０
ステップＳ３    →    演算装置２０
ステップＳ４    →    演算装置１０
このとき、演算装置１０，２０のシーケンス処理の合計実行時間は、次のようになる。
演算装置１０    →    １６０μｓ
演算装置２０    →    １７５μｓ
【００５７】
同様に、ＴＡＢＬＥ３に対する割当は、次のようになる。
ステップＳ２    →    演算装置２０
ステップＳ３    →    演算装置２０
ステップＳ４    →    演算装置１０
このとき、演算装置１０，２０のシーケンス処理の合計実行時間は、次のようになる。
演算装置１０    →    １６０μｓ
演算装置２０    →    ２４０μｓ
【００５８】
この場合の設定値は、図１２の表（Ｂ）（Ｃ）（Ｄ）中に記載した演算装置割当に対応している。また、テーブル値の設定と共に、ステップ割当テーブルの切替条件と対応するテーブルＩＤも図１３のように設定し、シーケンス処理実行装置１の共有メモリ３０上に存在するステップ割当テーブル切替テーブル１３０に設定する。
【００５９】
シーケンス処理実行装置１のステップ割当テーブル切替機能４３０は、共有メモリ３０に設定されているステップ割当テーブル切替テーブル１３０、即ち、図１３におけるテーブルの切替条件に合致したならば、利用者により指定されたテーブルＩＤを共有メモリ３０に保有されているステップ割当テーブル参照変数１２０に設定する。
ここで切替条件に合致するとは、ステップ割当テーブル切替テーブル１３０に設定されている切替条件に対して、共有メモリ３０上に存在している、その外部入力変数Ｘ０や内部変数Ｍ０や、ステップの活性状態に対応するデータを読み出し、切替条件に設定されている式を評価し、結果として真偽値を求め、その結果が真であるということである。なお、これら切替条件への入力データとして評価される、入力データ、中間処理データ、ステップの活性状態のうち、少なくとも１以上のデータを、シーケンス処理実行時情報と呼称する。シーケンス処理実行時情報は、共有情報保有手段５０２により保有され、この手段は共有メモリ３０で実現される。
これにより、利用者により指定された任意の条件にしたがって使用する割当テーブルを切り替えることが可能になる。
ここでは、ステップの割当について説明を行ったが、トランジションに対しても同様な機能を実現するトランジション割当テーブル切替機能４４０及びトランジション割当テーブル切替テーブル１６０が存在する。
【００６０】
また、シーケンス処理実行装置１のステップ割当テーブル切替機能４３０は、図１３のＴＡＢＬＥ４及びＴＡＢＬＥ５を指定する行の条件が成立したとき、すなわち条件中に含まれる同一スキャン周期における各ステップの組合せを示す活性状態の論理式が真となったとき、テーブルを切り替えることも可能である。
【００６１】
また、図１３の“ｏｔｈｅｒ”で示した行のように、成立条件が存在しない場合には、標準で使用されるテーブル（ＴＡＢＬＥ０）を設定することが可能である。
また、ステップ割当テーブル切替テーブル１３０及びトランジション割当テーブル切替テーブル１６０に設定する切替条件としては、単純な論理式のみではなく、様々な算術演算結果の比較による真偽値のような複雑な演算も定義可能である。
また、切替条件として、単純な論理式や先述の複雑な演算や、先述の同一スキャン周期における各ステップの組合せを示す活性状態の論理式の組合せの論理式も定義可能である。
また、ステップ割当テーブル切替テーブル１３０及びトランジション割当テーブル切替テーブル１６０で設定されている切替条件の各々は、独立した条件である必要はなく、例えば、図１３の上の行ほど、優先順位が高い条件として設定すれば、高い優先順位の条件が真となれば、対応するテーブルへの切り替えを発生させることも可能である。
【００６２】
次に、演算装置１０，２０に対するシーケンス処理の動的な割当変更について説明する。
シーケンス処理実行装置１のステップ割当更新機能４５０は、処理実行手段が計測した実行中のステップの処理時間に対し、その処理時間に基づいて割当を更新する機能を提供している。
演算装置１０，２０は、図２に示すように、タイマ等で実現された計時用機能部１４が存在しており、ステップおよびトランジションの実行時間を計測することが可能である。
また、共有メモリ３０には、図４に示すように、ステップの実行時間を保持するステップ実行時間情報２００と、トランジションの実行時間を保持するトランジション実行時間情報２１０とが存在している。
【００６３】
即ち、ステップ実行時間情報２００は、図１４に示すように、演算装置１０，２０が各ステップの処理を実行した場合の実行時間を保持するものであり、演算装置１０，２０における処理実行手段が各ステップの処理を実行する度に、その処理時間を計測して、図１４の対応する欄に実行時間値を格納する。
ここでは、各ステップに対する演算装置１０，２０の処理時間に対し、１つのサンプル値だけ保持する例を示したが、例えば、そのサンプル値が、時系列での処理時間の最大値であってもよいし、平均値であってもよいし、その他の一般的な統計量であってもよい。
また、保持するサンプル数が１つだけでなくても、過去何回かの実行時間の系列であっても構わない。どのような情報を保持しておくかを指定する設定が、共有メモリ３０上にプロファイル制御用パラメータ３００として存在している。
プロファイル制御用パラメータ３００のパラメータ値を変更すれば、上記の様々な方式のサンプル値が取得可能である。なお、トランジション実行時間情報２１０も、上記のステップ実行時間情報２００の説明と同様である。
【００６４】
このようにステップ実行時間情報２００及びトランジション実行時間情報２１０に取得されたデータから、ステップ割当テーブル１１０及びトランジション割当テーブル１４０に対して、最適な割当を計算し、適切なテーブルに対して割当の更新を行う処理をステップ割当更新機能４５０が実施する。最適な割当とは、各演算装置に割り当てられ、各々実行される複数のシーケンス処理の処理時間が均等になるような割当のことである。
その均等となるような割当を決定する処理には、様々な方法が存在し、共有メモリ３０上に存在する割当方式決定用パラメータ３１０により割当方式の切替が可能である。
例えば割当決定のために幾らでも時間をかけても良い場合に、均等化される処理時間の最小値を求める手段もあれば、ある限られた時間の中で決定するために極小値を求める手段も存在する。
以下、幾つかの割当方式について説明する。
【００６５】
[割当方式１]
ある時点における全てのステップ／トランジションの処理時間から、全ての割当テーブル上に存在するステップ／トランジションの組み合せに対し、演算装置１０，２０で実行される処理時間の最大値が最も小さくなるような割当を計算し、計算が完了した時点で、全ての割当テーブルの設定を変更する。変更完了後、再度計算を開始するか、何スキャン周期後から計算を開始する。
【００６６】
[割当方式２]
現在使用中の割当テーブルに存在するステップ／トランジションの組み合せに対し、演算装置１０，２０で実行される処理時間の最大値が最も小さくなるような割当を計算し、計算が完了した時点で、使用中の割当テーブルの設定を変更する。
計算が完了するまでの間に割当テーブルが切り替わった場合には、計算を中断して切り替わった割当テーブルに対して同様の処理を開始するか、もしくは、切り替わった場合でも現在計算中の割当テーブルを把握しておき、計算完了後、その割当テーブルに対して設定を変更する。変更完了後、直ぐに計算を再度開始するか、何周期後から計算を開始する。
【００６７】
[割当方式３]
次のスキャン周期で実行されるステップの組み合せと、次のスキャン周期で使用される割当テーブルが決定した後で、該当するステップの組み合せに対し、演算装置１０，２０で実行される処理時間の最大値が最も小さくなるような割当を計算し、計算が完了した時点で、該当する割当テーブルの設定を変更する。
【００６８】
このような機能をステップ割当更新機能４５０とトランジション割当更新機能４６０が有している。
また、上記の割当方式の計算においては、ステップ実行可能装置指定フラグ３２０及びトランジション実行可能装置指定フラグ３３０が参照される。
これらは、任意のステップもしくはトランジションが、任意の演算装置上で実行可能か否かを示すフラグが、その組み合せだけ定義されており、割当不可能である旨の指定がされている場合には、その装置へのステップもしくはトランジションの割当は行われない。
【００６９】
図１８はステップ実行可能装置指定フラグ３２０の一例を示す説明図である。
値が“１”のとき実行可能、“０”のとき実行不可能を表している。
図１８の例では、演算装置１０がステップＳ２，Ｓ４，Ｓ７，Ｓ８を実行することが可能であることを表し、演算装置２０が全てのステップを実行することが可能であることを表している。
また、ステップ割当テーブル切替機能４３０とトランジション割当テーブル切替機能４４０は、ステップ割当テーブル１１０やトランジション割当テーブル１４０に対して、新たなテーブルの生成機能を有しており、また、新たに作成したテーブルへの切替条件と対応するテーブルＩＤをステップ割当テーブル切替テーブル１３０やトランジション割当テーブル切替テーブル１６０に追加する機能も有している。
【００７０】
例えば、下記の条件は、図１３のステップ割当テーブル切替テーブル１３０には登録されていない切替条件であるとする。
Ｓ２．Ｘ  ∧  Ｓ６．Ｘ  ∧  Ｓ１０．Ｘ
上記の条件が、次のスキャン周期でアクティブになるステップの組み合せになると、上記の条件に対応するテーブル（例えば、ＴＡＢＬＥ６）を自動的に生成し、そのテーブルにステップＳ２，Ｓ６，Ｓ１０を任意の演算装置で実行するように指定（例えば、Ｓ２→ＰＥ１，Ｓ６→ＰＥ１，Ｓ１０→ＰＥ２）し、ステップ割当テーブル切替テーブル１３０に、下記の条件を追加する。
Ｓ２．Ｘ  ∧  Ｓ６．Ｘ  ∧  Ｓ１０．Ｘ    →    ＴＡＢＬＥ６
【００７１】
これにより、それ以降、同時に実行される新たなステップの組み合せが発生した場合に、その動作パターンに対応する割当テーブルが自動的に生成され、そのテーブルに対して動的な割当を行うことが可能になる。
なお、新たな割当テーブルを生成し、そのテーブルに対する切替条件と対応するテーブルＩＤを、テーブル切替テーブルに設定する場合には、図１３におけるotherの条件が設定されていないか、もしくは、設定されていたとしてもその条件を無視するように構成されている。
なお、上記の例では、新たに生成するステップ割当テーブル１１０における、各シーケンス処理をどの演算装置で実行するかの割当を、任意に設定するとして説明したが、ステップ割当テーブル切替テーブル１３０において切替条件がotherの場合における割当テーブルに記載されている割当を設定しても良い。
また、新たな割当テーブルを生成する際に、共有メモリ３０の空き領域が少ない場合、使用頻度が最も少ない割当テーブルを破棄するようにすることも可能である。これにより、限られたメモリ量の中で、必要となる最適な割当を実現する事が可能となる。
なお、上記では、テーブル切替情報をステップ割当テーブル切替テーブル１３０や、トランジション割当テーブル切替テーブル１６０のようにテーブルという形態で説明したが、テーブルという形態ではなく、割当テーブル切替手段をプログラムの形態で実現してもよい。なお、本情報に該当するものをテーブル切替情報と呼称する。
【００７２】
また、ステップ割当更新機能４５０とトランジション割当更新機能４６０は、演算装置１０，２０が処理を実行していないＩＤＬＥ時に行うことが可能である。
例えば、図１７において、ＴＩＭＥ１が図６のフローチャートにおける処理開始要求が発生した時刻（ステップＳＴ１００）であり、ＴＩＭＥ１−１がステップＳＴ３００に対応する演算装置間の同期が完了した時刻であり、ＴＩＭＥ１−２がステップＳＴ５００に対応する演算装置間の同期が完了した時刻であり、ＴＩＭＥ２が次の処理開始要求が発生した時刻（ステップＳＴ１００）であるとする。
また、ＴＩＭＥ１からＴＩＭＥ２の間に、ステップＳ２，Ｓ３，Ｓ４及びトランジションｔ２，ｔ３，ｔ４が、図示された割り当てで処理されているとする。
また、図１７において、上から下向きが時間の流れを表し、Ｓ２，Ｓ３，Ｓ４，ｔ２，ｔ３，ｔ４が処理を実行している間は、白い四角で表されている。
【００７３】
シーケンス処理実行装置１における演算装置１０，２０間では、適宜、同期を取り処理を進めていかなければならないため、図上の斜線で示した部分（ＩＤＬＥ１、ＩＤＬＥ２、ＩＤＬＥ３、ＩＤＬＥ４）では、演算装置１０，２０は何も処理を実行していない。
ステップ割当更新機能４５０とトランジション割当更新機能４６０は、演算装置１０，２０のＩＤＬＥ時間を利用して更新処理を実施することが可能である。
更新処理の内容によっては、ＴＩＭＥ１−１もしくはＴＩＭＥ１−２の同期タイミングを完了してから実行しなければならないケースも存在するが、そのような更新処理実行タイミングは、上記の各々の割当方式を実装する際、明確に指定されている場合もあれば、共有メモリ３０上に存在する更新処理実行タイミング指定パラメータ３４０で切り替えることも可能である。
【００７４】
また、ユーザは、プログラミング装置２を使用して、シーケンス処理実行装置１上の、ステップ割当テーブル１１０、ステップ割当テーブル切替テーブル１３０、トランジション割当テーブル１４０、トランジション割当テーブル切替テーブル１６０など、共有メモリ３０に存在する情報をアップロードし、プログラミング装置２上のファイルに保存することが可能である。また、保存されていた情報をシーケンス処理実行装置１上の共有メモリ３０にダウンロードすることも可能である。これにより、同様な構成を取る他のシーケンス処理実行装置１に対して、最適な割り当てを短時間に設定することが可能となる。
これにより、一度、あるシーケンス処理実行装置１において、最適な割振りを、テーブルの自動生成等を実施して決定したもの、いわゆる学習したものを、他の、同じシーケンス処理を行うシーケンス処理実行装置１上で利用可能となるため、他のシーケンス処理実行装置１上で新たに学習をさせなくとも、同様な効果を、即時に利用することが可能となる。
【００７５】
なお、本例では、プログラミング装置２を介して、シーケンス処理実行装置１から、ステップ割当テーブル１１０、ステップ割当テーブル切替テーブル１３０、トランジション割当テーブル１４０、トランジション割当テーブル切替テーブル１６０等をアップロードし、他のシーケンス処理実行装置１に提供する形態について説明を行ったが、他のシーケンス処理実行装置１が共有バス５０のような、何かしらの通信手段を使用して接続し、直接前記割当テーブル、割当テーブル切替テーブルのような共有メモリ３０上のデータの入出力を行う方式も考えられる。なお、シーケンス処理実行装置１が、説明した本方式のようにデータの入出力を行う外部装置は、プログラミング装置２や、他のシーケンス処理実行装置１のみに限定するものではない。
【００７６】
シーケンス処理実行装置１は、このように構成され動作するため、実行中にシーケンス処理時間の変動が発生した場合にも、シーケンス処理の割り当てが自動的に計算され、応答性の高いシーケンス処理実行装置１を実現することが可能である。また、先見的な知識を元に、特定の処理パターンを実行する場合に、予め、そのパターンに対して最適なシーケンス処理の割当を規定した割当テーブルが用意されているため、処理パターンの切り替えが発生した場合にも、即座に応答性の高いシーケンス処理が実行可能である。また、先見的に明白ではない処理パターンに対しても、自動的に専用の割当を管理するテーブルが生成されるため、自動的に応答性の高いシーケンス処理の実行を実現することが可能である。
【００７７】
以上で明らかなように、この実施の形態１によれば、共有メモリ３０に保有されている複数の割当テーブルの中から、予め設定されたテーブル切替条件に合致する割当テーブルを選択する割当テーブル切替機能４３０，４４０を設け、その割当テーブル切替機能４３０，４４０により選択された割当テーブルにしたがってシーケンス制御用プログラムにおける個々のステップ／トランジションを演算装置１０，２０に割り当てるように構成したので、負荷状況に変動が発生したら、変動後の負荷状況に応じて演算装置１０，２０に対するシーケンス処理の割り当てを最適化することができるようになり、その結果、シーケンス制御用プログラムの処理時間を短縮することができる効果を奏する。
【００７８】
また、この実施の形態１によれば、演算装置１０，２０の実行時間を基準にして、演算装置１０，２０に対する割当テーブル上の個々のシーケンス処理の割り当てを変更するように構成したので、シーケンス処理の実行状況に変動が発生したら、その変動に応じて演算装置１０，２０に対するシーケンス処理の割り当てを最適化することができるようになり、その結果、シーケンス制御用プログラムの処理時間を短縮することができる効果を奏する。
【００７９】
また、この実施の形態１によれば、現在選択中の割当テーブルがテーブル切替条件に合致しなくなると、そのテーブル切替条件に合致する他の割当テーブルに切り替えるように構成したので、負荷状況が変動しても、変動後の負荷状況に応じて演算装置１０，２０に対するシーケンス処理の割り当てを最適化することができる効果を奏する。
この実施の形態１によれば、演算装置１０，２０がシーケンス処理を実行していないタイミング又はユーザにより指定されたタイミングで割当テーブルの切替処理を実行するように構成したので、演算装置１０，２０が持つ演算リソースを効率的に活用することが可能になり、限られた時間内でも最適なシーケンス処理の割り当てを実行することができる効果を奏する。
【００８０】
この実施の形態１によれば、割当テーブル切替条件に登録されていない活性化したステップの組み合せ条件が発生した際に、自動的に割当テーブルを生成し、その割当テーブルを使用するための条件を割当テーブル切替条件に自動的に登録するため、事前に全ての割当テーブルを準備しなくともよく、最適なシーケンス処理の割り当てを決定するための開発期間が短縮されると共に、シーケンス処理実行装置１上で使用されるメモリ量の削減を図ることができるという効果を奏する。
【００８１】
この実施の形態１によれば、割当テーブルを生成する際、既存の割当テーブルの中で選択頻度が最も小さい割当テーブルを破棄するように構成したので、共有メモリ３０の空き容量が少ない場合でも、最適なシーケンス処理の割り当てを実現することができる効果を奏する。
また、この実施の形態１によれば、割当テーブルを生成する際、特定のシーケンス処理を実行することが可能であるかを示す割当可否情報を参照して、演算装置１０，２０にシーケンス処理を割り当てるように構成したので、特定のシーケンス処理を実行することができない演算装置に、その特定のシーケンス処理を割当てるという状況を回避することができる効果を奏する。
【００８２】
この実施の形態１によれば、プログラミング装置２等の外部装置から複数の割当テーブルやテーブル切替条件を取得する機能を有するとともに、保有している複数の割当テーブルやテーブル切替条件をプログラミング装置２等の外部装置に出力する機能を有するように構成したので、同様な構成をとる他のシーケンス処理実行装置でも、短時間に最適なシーケンス処理の割り当てを利用することができる効果を奏する。
【図面の簡単な説明】
【００８３】
【図１】この発明の実施の形態１によるシーケンス処理実行装置を示す構成図である。
【図２】この発明の実施の形態１によるシーケンス処理実行装置の演算装置１０を示す構成図である。
【図３】この発明の実施の形態１によるシーケンス処理実行装置の演算装置１０が保有している機能を示す説明図である。
【図４】この発明の実施の形態１によるシーケンス処理実行装置の共有メモリ３０が保有している情報を示す説明図である。
【図５】この発明の実施の形態１によるシーケンス制御用プログラムの一例を示す説明図である。
【図６】この発明の実施の形態１による演算装置１０、２０の処理実行手段のフローチャートである。
【図７】この発明の実施の形態１による演算装置１０，２０におけるアクションの実行手段を示すフローチャートである。
【図８】この発明の実施の形態１による演算装置１０、２０における他の演算装置２０、１０との同期処理を示すフローチャートである。
【図９】この発明の実施の形態１による演算装置１０，２０における専用回路１３の構成例を示す構成図である。
【図１０】この発明の実施の形態１による専用回路１３のフィルタ回路が実行する処理内容（アルゴリズムのリスト）を示す説明図である。
【図１１】この発明の実施の形態１による活性ステップ情報１００の一例を示す説明図である。
【図１２】この発明の実施の形態１によるステップ割当テーブル１１０の一例を示す説明図である。
【図１３】この発明の実施の形態１によるステップ割当テーブル切替テーブル１３０の一例を示す説明図である。
【図１４】この発明の実施の形態１によるステップ実行時間情報２００の一例を示す説明図である。
【図１５】この発明の実施の形態１によるアクションの処理内容を示す説明図である。
【図１６】この発明の実施の形態１による各処理ブロックの処理時間を示す説明図である。
【図１７】この発明の実施の形態１による割当更新機能の処理時間を示す説明図である。
【図１８】この発明の実施の形態１によるステップ実行可能装置指定フラグ３２０の一例を示す説明図である。
【図１９】この発明の実施の形態１によるシーケンス処理実行装置の構成ブロックである。
【符号の説明】
【００８４】
１  シーケンス処理実行装置、２  プログラミング装置、３  外部機器、１０，２０  演算装置、３０  共有メモリ（共有情報保有手段、割当テーブル保有手段）、４０  入出力装置、５０  共有バス、１１  ＣＰＵ（処理実行手段、割当テーブル切替手段）、１２  メモリ、１３  専用回路（処理実行手段、割当テーブル切替手段）、１４  計時用機能部、１００  活性ステップ情報、１１０  ステップ割当テーブル、１２０  ステップ割当テーブル参照変数、１３０  ステップ割当テーブル切替テーブル、１４０  トランジション割当テーブル、１５０  トランジション割当テーブル参照変数、１６０  トランジション割当テーブル切替テーブル、２００  ステップ実行時間情報、２１０  トランジション実行時間情報、３００  プロファイル制御用パラメータ、３１０  割当方式決定用パラメータ、３２０  ステップ実行可能装置指定フラグ、３３０  トランジション実行可能装置指定フラグ、３４０  更新処理実行タイミング指定パラメータ、４００  共有メモリアクセス機能、４１０  ステップ／トランジション実行機能、４２０  装置間同期機能、４３０  ステップ割当テーブル切替機能、４４０  トランジション割当テーブル切替機能、４５０  ステップ割当更新機能、４６０  トランジション割当更新機能、５０１  処理実行手段Ａ，Ｂ、５０２  共有情報保有手段、５０３  割当テーブル保有手段、５０４  割当テーブル切替手段、５０５  実行時間保有手段、５０６  割当テーブル更新手段、１０００  コンフィグレーションデータ、１１００  フィルタ回路、１２００  実行制御回路。
【図１】
0004547469.tif 000002
【図２】
0004547469.tif 000003
【図３】
0004547469.tif 000004
【図４】
0004547469.tif 000005
【図５】
0004547469.tif 000006
【図６】
0004547469.tif 000007
【図７】
0004547469.tif 000008
【図８】
0004547469.tif 000009
【図９】
0004547469.tif 000010
【図１０】
0004547469.tif 000011
【図１１】
0004547469.tif 000012
【図１２】
0004547469.tif 000013
【図１３】
0004547469.tif 000014
【図１４】
0004547469.tif 000015
【図１５】
0004547469.tif 000016
【図１６】
0004547469.tif 000017
【図１７】
0004547469.tif 000018
【図１８】
0004547469.tif 000019
【図１９】
0004547469.tif 000020