(57)【特許請求の範囲】
【請求項１】
制御対象機器のシーケンス動作を記述した動作フローの要素毎に該要素が実行可能か否かを示す活性情報と、該要素が実行済みであるか否かを示す実行済情報と、該要素の実行を保留状態にする保留情報とを設け、
前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が未実行、かつ保留情報が非保留と判定されたとき、前記要素の処理を実行した後、前記要素の実行済情報を実行済みに変更する処理とからなるステップ処理と、
前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が実行済み、保留情報が非保留であると判定されたとき、前記要素の活性情報を非活性、実行済情報を未実行に変更し、次の要素の活性情報を活性に変更して実行権を次の要素に渡す処理とからなるトランジション処理とを自動生成するシーケンスプログラムの自動生成方法。
【請求項２】
前記動作フローの要素毎に少なくとも要素番号、要素種別、接続要素番号、要素で使用する部品名、部品の入力データ、範囲指定が行われている場合の範囲名と範囲内の位置を示す情報、起動工程名からなる要素データを作成すると共に、複数の該要素データからなるネットファイルを生成し、
前記要素番号からなる要素番号セルと、前記要素番号と行先要素番号からなる要素番号＋行先要素番号セルが交互に配置され、前記要素番号＋行先要素番号セル内の前記要素番号は該セルの直前の前記要素番号セルに存在し、前記要素番号＋行先要素番号セル内の行先要素番号は該セルの直後の前記要素番号セルに存在するように構成された処理順序ファイルを前記ネットファイルの前記要素データに基づいて作成し、
前記処理順序ファイルの先頭から順に前記要素番号と要素番号＋行先要素番号を取り出し、前記要素番号で指定される要素の前記ステップ処理を生成し、前記要素番号＋行先要素番号で指定される要素のトランジション処理を生成し、前記トランジション処理において、前記行先要素番号で指定される要素の活性情報を活性にすることを特徴とする請求項１記載のシーケンスプログラムの自動生成方法。
【請求項３】
前記動作フローの任意の要素間でのイベントの発生を監視するためのイベント監視の範囲指定が行われている場合に、該動作フローから、イベント発生時に起動されるイベントプログラムを生成し、指定範囲内の要素のトランジション処理としてイベント発生を監視し、イベントの発生が検出されたとき、活性状態の要素の保留情報を保留にして実行権の移動を停止させ、前記イベントプログラムを起動させた後、復帰命令待ち状態となり、該イベントプログラムからの復帰命令としてリターン命令が与えられた場合には、前記保留状態にした要素の保留情報を非保留にして実行権の移動を再開させ、復帰命令として指定要素へのジャンプ命令が与えられた場合には、前記保留状態にした要素の保留情報を非保留にし、かつ活性情報を非活性にし、ジャンプ先要素の活性情報を活性にして実行権をジャンプ先要素に移動させるイベント監視処理を生成することを特徴とする請求項１記載のシーケンスプログラムの自動生成方法。
【請求項４】
前記動作フローの任意の要素間でのイベント発生を監視するためのイベント監視の範囲指定が行われている場合に、該動作フローから、イベント発生時に起動されるイベントプログラムを生成し、指定範囲内の要素のトランジション処理としてイベント発生を監視し、イベントの発生が検出されたとき、活性状態の要素の保留情報を保留にして実行権の移動を停止させ、イベントの発生を通知するイベント監視処理を生成し、前記イベント監視処理からイベントの発生が通知されたとき、前記イベントプログラムを起動させた後、復帰命令待ち状態となり、該イベントプログラムからの復帰命令がリターンの場合には、前記保留状態にした要素の保留情報を非保留にして実行権の移動を再開させ、復帰命令が指定要素へのジャンプの場合には、前記保留状態にした要素の保留情報を非保留にし、かつ活性情報を非活性にし、ジャンプ先要素の活性情報を活性にして実行権をジャンプ先要素に移動させる範囲指定処理を生成することを特徴とする請求項１記載のシーケンスプログラムの自動生成方法。
【請求項５】
前記動作フローの任意の要素間でタイマの計測時間を監視するタイマ監視の範囲指定が行われている場合に、範囲指定された入口要素のトランジション処理としてタイマのスタート処理を生成し、出口要素のトランジション処理としてタイマのストップ処理を生成し、指定された範囲内の要素のトランジション処理としてタイマで計測される時間を監視するタイマ監視処理を生成することを特徴とする請求項１記載のシーケンスプログラムの自動生成方法。
【請求項６】
前記動作フローの要素として該要素で使用される部品と該部品に対する指令が記述された場合に、予め生成されている該部品の実行プログラムを格納した部品ファンクションブロックの入力条件を設定するパラメータ設定処理と部品ファンクションブロックをコールする処理とを生成することを特徴とする請求項１記載のシーケンスプログラムの自動生成方法。
【請求項７】
前記動作フローの要素が判断で、該要素で使用される部品の出力と数値の比較が記述された場合に、予め定められている該部品の実行プログラムを格納した部品ファンクションブロックの出力と前記数値を比較する処理と、部品ファンクションブロックをコールする処理とを生成することを特徴とする請求項１記載のシーケンスプログラムの自動生成方法。
【請求項８】
前記部品ファンクションブロックの実行方法が前記動作フローの要素の実行時のみコールする関数型部品の場合には、該要素に対応するステップ処理として該部品ファンクションブロックをコールする処理を生成し、前記部品ファンクションブロックの実行方法が要素の実行とは独立してコールされる常時型部品で、かつ前記動作フローから生成されるシーケンスプログラムと同一タスクで動作する場合には、該シーケンスプログラム内に前記部品ファンクションブロックをコールする処理を生成し、前記部品ファンクションブロックの実行方法が常時型で、かつ前記シーケンスプログラムと異なるタスクで動作する場合には、該異なるタスクで該部品ファンクションブロックをコールする処理を生成することを特徴とする請求項７記載のシーケンスプログラムの自動生成方法。
【請求項９】
制御対象機器のシーケンス動作を記述した動作フローの要素毎に該要素が実行可能か否かを示す活性情報と、該要素が実行済みであるか否かを示す実行済情報と、該要素の実行を保留状態にする保留情報とを生成する実行情報生成手段と、
前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が未実行、かつ保留情報が非保留と判定されたとき、前記要素の処理を実行した後、前記要素の実行済情報を実行済みに変更する処理とからなるステップ処理と、前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が実行済み、保留情報が非保留であると判定されたとき、前記要素の活性情報を非活性、実行済情報を未実行に変更し、次の要素の活性情報を活性に変更して実行権を次の要素に渡す処理からなるトランジション処理を生成するプログラム生成手段とを有するシーケンスプログラムの自動作成装置。
【請求項１０】
前記動作フローの要素毎に少なくとも要素番号、要素種別、接続要素番号、要素で使用する部品名、部品の入力データ、範囲指定が行われている場合の範囲名と範囲内の位置を示す情報、起動工程名とからなる要素データを作成すると共に、複数の該要素データからなるネットファイルを作成するネットファイル作成手段と、
前記要素番号からなる要素番号セルと、前記要素番号と行先要素番号からなる要素番号＋行先要素番号セルが交互に配置され、前記要素番号＋行先要素番号セル内の前記要素番号は該セルの直前の前記要素番号セルに存在し、前記要素番号＋行先要素番号セル内の前記行先要素番号は該セルの直後の前記要素番号セルに存在する複数のセルからなる処理順序ファイルを前記ネットファイルの前記要素データに基づいて作成する処理順序ファイル作成手段とを有し、
前記プログラム生成手段は、前記処理順序ファイルの先頭から順に前記要素番号と要素番号＋行先要素番号を取り出し、該要素番号で指定される要素の前記ステップ処理を生成し、該要素番号＋行先要素番号で指定される要素の前記トランジション処理を生成し、前記トランジション処理において、前記行先要素番号で指定される要素の活性情報を活性にすることを特徴とする請求項９記載のシーケンスプログラム作成装置。
【請求項１１】
前記動作フローの任意の要素間でのイベント発生を監視するためのイベント監視の範囲指定が行われている場合に、前記プログラム生成手段は、イベント発生時に起動されるイベントプログラムを生成するイベントプログラム生成手段と、指定範囲内の要素のトランジション処理としてイベント発生を監視し、イベントの発生が検出されたとき、活性状態の要素の保留情報を保留にして実行権の移動を停止させ、イベントの発生を通知するイベント監視処理を生成するイベント監視生成手段と、前記イベント監視処理からイベントの発生が通知されたとき、前記イベントプログラムを起動させた後、復帰命令待ち状態となり、該イベントプログラムからの復帰命令がリターンの場合には、前記保留状態にした要素の保留情報を非保留にして実行権の移動を再開させ、復帰命令が指定要素へのジャンプの場合には、保留状態にした要素の保留情報を非保留にし、かつ活性情報を非活性にし、ジャンプ先要素の活性情報を活性にして実行権をジャンプ先要素に移動させる範囲指定処理を生成する範囲指定生成手段とを備えることを特徴とする請求項９記載のシーケンスプログラム作成装置。
【請求項１２】
前記動作フローの任意の要素間でのタイマ監視のための範囲指定が行われている場合に、前記プログラム生成手段は、指定範囲内の入口要素のトランジション処理としてタイマの計測を開始するタイマスタート処理を生成し、出口要素のトランジション処理としてタイマの計測を停止させるタイマストップ処理を生成し、指定範囲内の要素のトランジション処理としてタイマ時間を監視するタイマ監視処理を生成するタイマ監視生成手段を有することを特徴とする請求項９記載のシーケンスプログラム作成装置。
【請求項１３】
制御対象機器のシーケンス動作を記述した動作フローの要素毎に該要素が実行可能か否かを示す活性情報と、該要素が実行済みか否かを示す実行済情報と、該要素の実行を保留状態にする保留情報とを生成させる実行情報生成処理と、
前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が未実行、保留情報が非保留と判定されたとき、前記要素の処理を実行した後、前記要素の実行済情報を実行済みにするステップ処理と、前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が実行済み、保留情報が非保留であると判定されたとき、前記要素の活性情報を非活性、かつ実行済情報を未実行に変更し、次の要素の活性情報を活性に変更して実行権を次の要素に移動させるトランジション処理とを生成させる処理とからなるシーケンスプログラムを自動生成するプログラムを記憶したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラマブルコントローラ等のシーケンスプログラムを自動生成する方法、シーケンスプログラムを作成する装置及びシーケンスプログラムを自動生成するプログラムを記憶した記憶媒体に関する。
【０００２】
【従来の技術】
従来、機械の動作、あるいは工場のコンベア制御などのためにプログラマブルコントローラが用いられている。プログラマブルコントローラにより制御対象機器を制御するためには、プログラマブルコントローラの制御動作を定めるシーケンスプログラムを作成する必要がある。シーケンスプログラムを作成する場合、プログラミング知識の無い機械技術者が機械の動作仕様を動作フローチャートで記述し、これを元にプログラミング担当者がシーケンスプログラムのフローチャートを作成していた。
【０００３】
この場合、２つのフローは、図３７に示すように各要素の意味が異なっているので、プログラミング担当者が動作フローチャートの各要素の内容を解釈してプログラムフローを作成する必要がある。これはプログラム開発そのものであり、プログラミング担当者に依存したものとなり、動作フローとプログラムフローとを完全に一致させることは困難であった。
【０００４】
【発明が解決しようとする課題】
上述した動作フローからシーケンスプログラムに変換する方法では、その変換をプログラミング担当者が行う必要があるので、変換ミスを生じる可能性があり、またプログラミング担当者の習熟度によりシーケンスプログラムの実行性能に差がでるという問題点があった。また、プログラミング担当者が作成する方法では、デザインレビュー、机上デバッグ、実機テスト等、プログラムの開発に多大な労力を要するという問題点があった。
【０００５】
さらに、制御対象機械の試験中に様々な理由によりシーケンスプログラムを変更する場合があるが、その変更が動作フローに反映されないまま試験完了となり、動作フローとシーケンスプログラムとが一致しないことがあるという問題点があった。
【０００６】
一方、動作フローに近い表現でプログラムを記述する方法としてシーケンシャルファンクションチャート（ＳＦＣ）が知られているが、この方法は、次のような欠点がある。（ａ）シーケンス制御の各ステップから独立した異常監視処理、非常停止処理等の記述が困難である。（ｂ）ステップとステップとの間にトランジションが必要である等の記述の制約が多い。（ｃ）シーケンシャルファンクションチャートで記述される要素は全て同一のタスク上の要素であり、アクションのみ別のタスクで実行させることができない。
【０００７】
本発明の課題は、動作フローからシーケンスプログラムを自動的に生成できるようにすることである。
【０００８】
【課題を解決するための手段】
本発明のシーケンスプログラムの自動生成方法は、制御対象機器のシーケンス動作を記述した動作フローの要素毎に該要素が実行可能か否かを示す活性情報と、該要素が実行済みであるか否かを示す実行済情報と、該要素の実行を保留状態にする保留情報とを設け、前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が未実行、かつ保留情報が非保留と判定されたとき、前記要素の処理を実行した後、前記要素の実行済情報を実行済みに変更する処理とからなるステップ処理と、前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が実行済み、保留情報が非保留であると判定されたとき、前記要素の活性情報を非活性、実行済情報を未実行に変更し、次の要素の活性情報を活性に変更して実行権を次の要素に渡す処理からなるトランジション処理とを自動生成する。
【００１０】
請求項１記載の発明によれば、動作フローからその動作フローの制御を実現するシーケンスプログラムを自動生成することができるので、プログラム開発の負担が軽減される。また、例えば、一定周期毎に繰り返されるシーケンスプログラムにおいて、動作の終了までに時間のかかる処理を実行する場合に、活性情報、実行済情報、保留情報等が一定の条件を満たしていなければ、実行権が次の処理に移動せず、かつ条件を満たさない場合にシーケンスプログラムのエンドまで処理を進めることができる。従って、シーケンスプログラムの実行時間に制約がある場合でも、その制約時間内でプログラムが実行され、かつ動作フローの通りに実行されるシーケンスプログラムを生成することができる。
【００１１】
また、フロー要素自体の実行処理であるステップ処理と実行権を移動するためのトラジション処理とが自動生成されるので、従来のようにプログラミング担当者のミスによりステップ処理やトラジション処理が欠落することが無くなる。
【００１２】
本発明のシーケンスプログラムの自動生成方法の他の態様は、イベント発生を監視するための範囲指定が行われている場合に、イベント発生時に、該当要素を保留状態にし、イベントプログラムの開始要素を活性にして実行権をイベントプログラムに移動させ、イベントプログラムからの復帰命令により、該当する要素を活性にして実行権を元のプログラムに移動させるイベント監視のシーケンスプログラムを動作フローから自動生成することができる。
【００１３】
本発明のシーケンスプログラム作成装置は、制御対象機器のシーケンス動作を記述した動作フローの要素毎にその要素が実行可能か否かを示す活性情報と、その要素が実行済みであるか否かを示す実行済情報と、その要素の実行を保留状態にする保留情報とを生成する実行情報生成手段と、前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が未実行、かつ保留情報が非保留と判定されたとき、前記要素の処理を実行した後、前記要素の実行済情報を実行済みに変更する処理とからなるステップ処理と、前記要素の活性情報が活性か否か、実行済情報が実行済みか否か、保留情報が保留か否かを判定する判定処理と、前記判定処理により前記要素の活性情報が活性、実行済情報が実行済み、保留情報が非保留であると判定されたとき、前記要素の活性情報を非活性、実行済情報を未実行に変更し、次の要素の活性情報を活性に変更して実行権を次の要素に渡す処理からなるトランジション処理を生成するプログラム生成手段とを有する。
【００１４】
本発明のシーケンスプログラム作成装置によれば、動作フローの各要素に対応する処理が生成される際に、要素毎に活性情報、実行済情報、保留情報が生成されるので、例えば分岐要素に対応する処理で分岐条件が成立したとき、次の要素に実行権が移動するようなシーケンスプログラムを動作フローから自動生成することができる。これによりプログラムを作成するための負担が軽減される。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。図１は、本発明の実施の形態のシーケンスプログラムの自動作成装置のブロック図である。
【００１６】
ユーザがキーボード１１、マウス１２を操作して動作フローの要素と要素の接続情報を入力すると、装置本体１３内のフロー作画処理部１５が入力されたデータに応じたフロー画像をディスプレー１４に表示すると共に、各要素の要素データをネット（ｎｅｔ）ファイル１６に書き込む。なお、動作フローで記述され、シーケンスプログラムで使用される標準部品は部品データベース１７に格納されている。
【００１７】
コンパイラ１８は、ネットファイル１６の要素データ及び部品データベース１７の部品データに基づいて、図２に示す処理、つまり各要素の処理順序を決める処理順序ファイルの生成処理ＳＴ２０１、処理順序ファイルに基づいて後述するステップ処理及びトランジション処理を生成するフロー要素処理生成処理ＳＴ２０２、部品データベース１７の部品ファンクションブロックＦＢの起動法、タスク指定に従って部品処理を生成する部品処理生成処理ＳＴ２０３及びネットファイル１６の要素データから範囲指定データを探し、範囲指定がなされている場合に、範囲指定番号毎に範囲指定処理を生成する範囲指定処理生成処理ＳＴ２０４を実行する。
【００１８】
これによりコンパイラ１８によりフロー要素処理、部品処理、範囲指定処理等からなるシーケンスプログラム１９が生成され、プログラマブルロジックコントローラＰＬＣ２０に出力される。
【００１９】
先ず、動作フローの要素毎に作成される要素データが複数集まって構成されるネットファイル１６を、図３を参照して説明する。
ユーザにより動作フローが作成されると、フロー作画処理部１５により各要素毎に要素データが作成される。要素データは、一定の規則のもとに要素の配列順に定められる要素番号と、要素の種別（例えば、開始、指令、待ち、並列分岐、選択分岐、並列合流、選択合流、ＥＮＤ、ＲＥＴＵＲＮ、ＲＥＰＥＡＴ）と、来先要素数と、来先要素番号と、行先要素数と、行先要素番号と、その要素で実行する項目（例えば、種別が指令であった場合、部品の各端子に入力する値）と、その要素が範囲指定されている場合に、範囲指定番号と、範囲内の位置（入口または中または出口）とから構成されている。範囲番号は、さらに、イベント、つまり事象の変化の監視か、タイマ監視の何れであるかを示す監視種別と、タイマ監視の場合の時間と、イベント監視の場合の信号名とからなる範囲指定情報からなる。
【００２０】
なお、図３に部品名コンベア１として表されているデータは、部品データベース１７に格納されている部品ファンクションブロックであり、部品名と、起動法（関数or常時orタスク指定）と、タスク指定の場合の周期、優先度とからなり、その他にそのコンベア１の部品プログラムからなる。ここで、動作フローに記述可能な部品としては、要素の実行時のみコールされる関数型部品と、フローの進行とは独立して動作する常時型部品とがあり、常時型部品は、さらに生成されるプログラムと同じタスクで動作するものと別のタスクで動作するものがある。また、部品プログラム本体は、プログラマブルコントローラ用プログラム作成ツールにより作成し、部品データベース１７に格納しておく。
【００２１】
上記のようにしてネットファイル１６が作成されたなら、そのネットファイル１６を元に図４に示すような処理順序ファイル４０を作成する。以下、図２の処理順序ファイル作成処理ＳＴ２０１の処理内容を、図５を参照して説明する。
【００２２】
最初に、ポインタＰに「１」を設定し、ネットファイル１６から要素種別が開始の要素データの要素番号ｎ１を得て、その要素番号ｎ１とデータ数（この場合、要素種別が開始であるのでデータ数「１」を処理順序ファイル４０の先頭にセットする（図５、ＳＴ５０１）。これにより、図４に示すように処理順序ファイル４０のアドレス１にデータとして開始要素の要素番号ｎ１が、データ数として「１」が記憶される。
【００２３】
次に、その処理順序ファイル４０のポインタＰの指すアドレスのデータＤ１とデータ数ｋ１を取得する（ＳＴ５０２）。データＤ１として複数のデータｄが存在する場合には、次のステップＳＴ５０３で、データＤ１の中のデータｄ１が要素番号のみか、それとも要素番号と行先要素番号とからなるかを判別する。
【００２４】
ステップＳＴ５０３で要素番号であると判別された場合には、ステップＳＴ５０４に進み要素番号−行先要素番号セット処理を実行し、要素番号と行先要素番号とからなると判別された場合には、ステップＳＴ５０５に進み要素番号セット処理を実行する。
【００２５】
図６は、図５のステップＳＴ５０４の要素番号−行先要素番号セット処理のフローチャートである。
先ず、要素ｄ１の要素種別が指令、開始、待ち、選択分岐、並列合流、選択合流、ＲＥＰＥＡＴか、並列分岐か、それともＥＮＤ、ＲＥＴＵＲＮの何れであるかを判別する（図６、ＳＴ６０１）。
【００２６】
ステップＳＴ６０１で、要素種別が指令、開始、待ち、選択分岐、並列合流、選択合流、ＲＥＰＥＡＴの内の１つと判別された場合には、さらに要素ｎ１の行先要素ｄ２の要素種別が並列合流、選択合流か、それ以外であるか否かを判別する（ＳＴ６０２）。来先要素ｄ２の要素種別が並列合流または選択合流であった場合には、ステップＳＴ６０３に進み行先要素ｄ２の合流リストが作成されているか否かを判別する。ステップＳＴ６０３で、行先要素ｄ２の合流リストが作成されていないと判別された場合には、要素ｄ２用合流リストを作成する（ＳＴ６０４）。
【００２７】
ここで、合流リスト７０とは、図７に示すように合流要素ｄ２の来先要素をまとめたリストであり、合流要素ｄ２とその来先要素の要素番号とチェックフラグとから構成されている。合流要素ｄ２の来先要素は、ネットファイル１６の要素ｄ２の来先要素番号を調べることにより得られる。
【００２８】
合流リスト７０を作成したなら、その合流リスト７０の来先要素とネットファイル１６の来先要素を照合して、該当する来先要素のチェックフラグをオンにする（ＳＴ６０５）。そして、合流リスト７０の来先チェックフラグが全てオンとなったか否かを判別する（ＳＴ６０６）。
【００２９】
一方、ステップＳＴ６０１で要素ｄ１の要素種別が並列分岐であると判別された場合には、ステップＳＴ６０７に進み、ネットファイル１６から要素ｄ１の行先要素を取得し、要素ｄ１とその行先要素ｄ１１，ｄ１２・・・ｄ１ｎとの接続関係を示すデータｄ１−（ｄ１１，ｄ１２・・・ｄ１ｎ）を、処理順序ファイル１６のポインタＰ１の指すアドレスの次のアドレスＰ１＋１に格納する。同時にデータ数＝１を格納する。例えば、要素ｄ１の行先要素がｄ２、ｄ３、ｄ４であった場合には、処理順序ファイル４０の次のアドレスＰ１＋１のデータＤ１として、要素ｄ１の接続先を示すｄ１−（ｄ２、ｄ３、ｄ４）が記憶され、データ数として「１」が記憶される。
【００３０】
また、ステップＳＴ６０２で要素ｄ１の行先要素ｄ２の要素種別が並列合流、選択合流以外であった場合、つまり行先要素ｄ２に自分以外の他の要素が接続されていないときには、ステップＳＴ６０８に進み、要素ｄ１の接続先を示すデータとしてｄ１−ｄ２を、処理順序ファイル４０の次のアドレスＰ１＋１に格納する。
【００３１】
ステップＳＴ６０６で合流リスト７０の来先チェックフラグが全てオンと判別された場合には、ステップＳＴ６０９に進み、行先要素ｄ２の要素種別が選択合流か、それとも並列合流かを判別する。
【００３２】
行先要素ｄ２の要素種別が選択合流であった場合には、要素ｄ１が接続される行先要素ｄ２の複数の接続先を示すデータ、例えば、図８の合流リスト７０に記載されている来先要素ｄ１、ｄ１１、ｄ１２との接続を示すｄ１−ｄ２、ｄ１１−ｄ２、ｄ１２−ｄ２を、処理順序ファイル８１のポインタＰ１の次のアドレスＰ１＋１に格納する。この場合、データ数は３となる。
【００３３】
他方、行先要素ｄ２の要素種別が並列合流であった場合には、ステップＳＴ６１１に進み、行先要素ｄ２の複数の来先要素との接続を示すデータを処理順序ファイル４０に格納する。
【００３４】
例えば、要素ｄ１の行先要素ｄ２の合流リスト７０が、図８に示すような内容で、行先要素ｄ２の要素種別が選択合流であった場合には、図８に示すように処理順序ファイル８１の要素番号ｄ１の格納されているアドレスＰ１の次のアドレスＰ１＋１に、合流要素ｄ２とその来先要素ｄ１，ｄ１１、ｄ１２との接続を示すｄ１−ｄ２、ｄ１１−ｄ２、ｄ１２−ｄ２と、データ数３が格納される。
【００３５】
また、行先要素ｄ２の要素種別が並列合流であった場合には、図８の処理順序ファイル８２の要素番号ｄ１のデータの格納されているアドレスの次のアドレスＰ１＋１に、要素ｄ１とその来先要素ｄ１、ｄ１１、ｄ１２との接続を示す（ｄ１、ｄ１１、ｄ１２）−ｄ２とデータ数１が格納される。
【００３６】
図６に戻り、ステップＳＴ６１２でデータ数ｋ１回分処理を繰り返したか否かを判別し、データ数ｋ１分処理を繰り返していなければ、ステップＳＴ６０１に戻り、上記の処理を繰り返す。
【００３７】
次に、図５のステップＳＴ５０５の要素番号セット処理を図９を参照して説明する。
先ず、処理順序ファイル４０のポインタＰ１＋１の指すアドレスに要素ｄ１の行先要素番号が格納されているか否かを判別する（図９，ＳＴ９０１）。最初の状態では、ポインタＰ１＋１の指すアドレスにはデータは何も格納されていないので、ステップ９０２に進み、ポインタＰ１＋１の指すアドレスに要素ｄ１の行先要素番号を、次の要素の要素番号として格納する。そして、データ数ｋ１回、上記の処理を繰り返したか否かを判別する（ＳＴ９０３）。
【００３８】
図１０（Ａ）〜（Ｄ）は、要素番号セット処理により作成される処理順序ファイル４０の一例を示す図である。処理順序ファイル４０は、要素番号からなる要素番号セルと、要素番号と行先要素番号とからなる要素番号＋行先要素番号セルとから構成されている。
【００３９】
図１０（Ａ）は、ポインタＰ１が要素番号ｎ１と行先要素番号ｎ２とが記憶されているアドレス「５」を指しているときに、処理順序ファイル１０４の次のアドレス「６」にその行先要素番号ｎ２が格納されることを示している。そして、その要素ｎ２の行先要素がネットファイル１６から探されて、要素ｎ２の要素番号ｎ２とその行先要素の要素番号が次のアドレス「７」に格納される。すなわち、処理順序ファイル１０４（４０）には、要素番号と、要素番号＋行先要素番号とが交互に格納されることになる。そして、要素番号と行先要素番号が格納された要素番号＋行先要素番号セル内の要素番号はそのセルの１つ前に配置される要素番号セル内に存在し、要素番号＋行先要素番号セルの行先要素番号はそのセルの次の要素番号セル内に存在することになる。
【００４０】
同様に、図１０（Ｂ）は、ポインタＰ１の指すセルの要素番号がｎ１で、その接続先の行先要素番号がｎ２、ｎ３、ｎ４の場合に、ポインタＰ１の指すアドレスの次のアドレスに１つ前のセルの行先要素番号が要素番号ｎ２、ｎ３、ｎ４として格納されることを示している。
【００４１】
図１０（Ｃ）は、ポインタＰ１の指すセルの要素ｎ１，ｎ２，ｎ３の行先要素の要素番号がｎ４の場合を示しており、次のアドレスＰ１＋１にその行先要素番号ｎ４が、要素番号ｎ４として格納される。
【００４２】
図１０（Ｄ）は、ポインタＰ１の指すセルの要素ｎ１、ｎ２、ｎ３の行先要素の要素番号がそれぞれｎ４、ｎ５、ｎ６の場合を示しており、ポインタＰ１の次のアドレスのセルの要素番号として行先要素番号ｎ４、ｎ５、ｎ６が格納される。
【００４３】
図５に戻り、ステップＳＴ５０４の要素番号−行先要素番号セット処理が終了し、ステップＳＴ５０６の判別でデータｄ１がＥＮＤ、ＲＥＴＵＲＮまたはＲＥＰＥＡＴでなかったとき、あるいはステップＳＴ５０５の要素番号セット処理が終了したときには、ステップＳＴ５０７に進みポインタＰ１に「１」を加算して、上述したステップＳＴ５０２以降の処理を繰り返す。そして、要素としてＥＮＤ、ＲＥＴＵＲＮまたはＲＥＰＥＡＴが検出されたなら、処理順序ファイル作成処理を終了する。
【００４４】
以上のようにして動作フローから処理順序ファイル４０を作成したなら、次にその処理順序ファイル４０に基づいてフロー要素処理の生成を行う。
図１１は、図２のフロー要素処理生成処理ＳＴ２０２の処理内容を示すフローチャートである。
【００４５】
先ず、ポインタＰ１を初期化する（図１１，ＳＴ１１０１）。次に、処理順序ファイル４０のポインタＰ１で指定されるアドレスからデータＤ１とデータ数ｋ１を読み出す（ＳＴ１１０２）。そして、処理順序ファイル４０の該当するアドレスにデータが記憶されているか否かを判別する（ＳＴ１１０３）。
【００４６】
ステップＳＴ１１０３で、処理順序ファイル４０にデータが記憶されていると判別されたときには、そのデータが要素番号か、それとも要素番号−行先要素番号の何れであるかを判別する（ＳＴ１１０４）。データが要素番号であれば、ステップＳＴ１１０５のステップ処理生成処理を実行し、データ型が要素番号−行先要素番号であれば、ステップＳＴ１１０６のトランジション生成処理を実行する。ステップ処理またはトランジション処理の生成が終了したならポインタＰ１をインクリメントしてＳＴ１１０２に戻り、上記の処理を繰り返す。
【００４７】
ここで、図１１のステップ処理生成処理ＳＴ１１０５の処理内容を、図１２を参照して説明する。
最初に、処理順序ファイル４０のポインタＰ１で指定されるアドレスのデータＤ１の中のデータｄ１を読み出し、そのデータｄ１に対応するステップスケルトンを生成する（図１２、ＳＴ１２０１）。
【００４８】
この実施の形態では、動作フローの要素毎にその要素が実行可能か否かを示す活性フラグ（活性情報）と、その要素が実行済みであるか否かを示す実行済フラグ（実行済情報）と、その要素を保留状態にする保留フラグ（保留情報）とを設け、要素に対応する処理の実行順序を管理している。要素に対応する処理を、要素自体の実行処理であるステップ処理と次の要素にトークンを移動させるトランジション処理とに分け、動作フローから各要素のステップ処理とトランジション処理を自動生成するようにしている。そして、要素の活性フラグがオン、かつ実行済フラグがオフのとき、その要素自体の処理を実行し、処理が終了したならその要素の実行済フラグをオンにする。そして、上流要素の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフのとき、その要素の活性フラグと実行済フラグをオフにして次の要素の活性フラグをオンにし、処理のトークン（実行権）を次の要素に移し次の要素を実行できるようにしている。
上記のステップスケルトン生成処理ＳＴ１２０１とは、図１３（Ａ）に示すような基本的な構成のステップ処理を生成する処理である。基本ステップ処理は、要素ｎの活性フラグがオン、かつ実行済フラグがオフか否かを判別するステップＳＴ１３０１と、活性フラグがオン、かつ実行済フラグがオフのとき、実行済フラグをオンにするステップＳＴ１３０２とからなる。
【００４９】
また、基本となるトランジション処理は、図１３（Ｂ）に示すように、上流要素ｎの活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフであるか否かを判別するステップＳＴ１３０３と、上流要素ｎの活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフのとき、上流要素ｎの活性フラグをオフし、実行済フラグをオフし、トークンを下流の要素ｎ１に移すために要素ｎ１の活性フラグをオンにするステップＳＴ１３０４とからなる。
【００５０】
これらの基本ステップ処理及び基本トランジション処理に、その要素自体の処理（例えば、指令、分岐など）、条件判定処理等を付加して各要素のステップ処理及びトランジション処理が生成される。
【００５１】
図１２に戻り、ステップスケルトンを生成したなら、次に要素ｄ１の要素種別をネットファイル１６から読み出し、要素種別が指令、待ちか、ＲＥＴＵＲＮか、その他かを判別する（図１２、ＳＴ１２０２）。
【００５２】
要素種別が指令または待ちであれば、ステップＳＴ１２０３に進み、部品のパラメータを設定する部品端子入力処理を生成する。また、部品が動作フローの要素の実行時のみコールする関数型部品の場合には、部品データベース１７の部品ファンクションブロックをコールする部品処理を生成する。部品がフローの進行と独立して動作する常時型部品の場合、あるいは常時型で、起動タスクが生成されプログラムと別タスクの場合には、後述する部品処理生成処理（図２、ＳＴ２０３）により部品処理が生成される。
【００５３】
ステップＳＴ１２０２でデータｄ１の要素種別がＲＥＴＵＲＮであると判別された場合には、ステップＳＴ１２０４のＲＥＴＵＲＮ生成処理を実行する。また、データｄ１の要素種別が指令、待ち、ＲＥＴＵＲＮ以外であったときには、何も処理を実行せずにステップＳＴ１２０５に進む。ステップＳＴ１２０５では、データ数ｋ１回分ステップ処理生成処理を実行したか否かを判別し、ｋ１回実行したなら元の処理に戻る。
【００５４】
次に、図１１のステップＳＴ１１０６のトランジション処理生成処理を図１４を参照して説明する。先ず、処理順序ファイル４０からポインタＰ１の指すアドレスのデータＤ１の内のデータｄ１を読み出し（図１４、ＳＴ１４０１）、ｄ１のデータ型がｎ１−ｍ１か、つまり来先と行先が１対１か、（ｎ１、ｎ２、・・・ｎａ）−ｍ１か、つまり来先と行先が多対１か、それともｎ１−（ｍ１、ｍ２・・・ｍａ）、つまり来先と行先が１対多の何れであるかを判別する（ＳＴ１４０２）。
【００５５】
来先と行先がｎ１−ｍ１の場合には、ステップＳＴ１４０３に進み、スケルトン生成処理を実行する。このスケルトン生成処理は、図１３（Ｂ）の基本トランジション処理を生成する処理である。
【００５６】
次に、イベント・タイマ監視処理を生成する（ＳＴ１４０４）。このイベント・タイマ処理監視処理の生成については後に説明する。次に、来先ｎ１の要素種別を判別する（ステップ１４０５）。来先要素ｎ１が、判定  選択分岐の場合には、判定条件、分岐条件をトークン移動条件に追加する（ＳＴ１４０６）。ことき、来先要素の要素種別が待ちであれば、ＳＴ１４０７に進み、基本トランジション処理に待ちの条件をトークン移動条件として追加する。また、来先要素ｎ１が判定、選択分岐、待ち以外であれば、そのままステップＳＴ１４０８に進む。ステップＳＴ１４０８では、データ数のｋ１回分処理を実行したかを判別し、ｋ１回実行したなら元の処理に戻る。
【００５７】
ステップＳＴ１４０２でデータｄ１のデータ型が（ｎ１、ｎ２・・・ｎａ）−ｍ１と判別された場合、つまり要素ｍ１に対して複数の来先要素がある場合には、各来先要素ｎａについて、ステップＳＴ１４０９〜１４１３まで上述したステップＳＴ１４０３〜１４０７と同じ処理を実行する。ただし、この場合、来先要素が複数あるので、ステップＳＴ１４１４でａ回ステップＳＴ１４１１〜１４１３の処理を実行したか否かを判別し、全ての来先要素ｎ１〜ｎａのトークン移動条件が確定したなら、ステップＳＴ１４０８に進み、データ数ｋ１回分のトランジション処理の生成が終了したか否かを判別する。
【００５８】
また、データｄ１のデータ型がｎ１−（ｍ１、ｍ２・・・ｍａ）で来先要素が１つだけのときには、トランジションスケルトンを生成する処理ＳＴ１４１５を実行した後、ステップＳＴ１４０８に進む。
【００５９】
ここで、指令要素と待ち要素を含む動作フローからシーケンスプログラムを生成する場合につて説明する。
図１５は、コンベアを１ｍ移動させ、移動の完了を検出したならランプを点灯させるシーケンス制御を行う動作フローである。本実施の形態では、この動作フローから、同図の右側に示すステップＳＴ１５０１〜１５０４からなるステップ処理とトランジション処理（生成ＰＧ）が自動生成される。
【００６０】
動作フローから、各要素の要素番号、要素種別、来先要素、行先要素、範囲指定がある場合には範囲指定等のデータからなるネットファイル１６が作成され、そのネットファイル１６から処理順序ファイル４０が作成される。そして、その処理順序ファイル４０に基づいて以下のステップ処理及びトランジション処理が生成される。
【００６１】
先ず、要素Ｓ２はコンベア１の移動指令であるので、図１２のステップ処理生成処理のステップＳＴ１２０３の部品端子入力処理生成処理及び部品実行処理生成処理により、部品データベース１７のコンベア１の部品ファンクションブロック（ＦＢ）のパラメータとして１ｍを設定する。コンベア１が関数部品の場合、そのコンベア１を動作させるプログラムが格納されているコンベア１ファンクションブロックをコールする命令が、図１３（Ａ）の基本ステップ処理に追加される。
【００６２】
これにより、Ｓ２ステップ処理として、図１６（Ａ）に示すように要素Ｓ２の活性フラグがオン（活性）で、かつ実行済フラグがオフ（未実行）か否かを判別するステップＳＴ１６０１と、そのステップＳＴ１６０１の判別がＹＥＳのとき、コンベア１のパラメータとして１ｍを設定し、部品データベース１７からコンベア１ＦＢをコールした後、要素Ｓ２の実行済フラグをオンにするステップＳＴ１６０２とが生成される。
【００６３】
次に、要素Ｓ２の行先要素は要素Ｓ３のみで、要素Ｓ３の来先は要素Ｓ２以外には無いので、要素Ｓ２、Ｓ３のトランジション処理として、図１６（Ｂ）に示すように要素Ｓ２の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別するステップＳＴ１６０３と、そのステップＳＴ１６０３の判別がＹＥＳのとき、要素Ｓ２の活性フラグを非活性、かつ実行済フラグを未実行とし、次の要素Ｓ３の活性フラグをオンにして下流要素Ｓ３にトークンを移動させるステップＳＴ１６０４とからなる基本トランジション処理が生成される。これは、図１４のトランジション生成処理のスケルトン生成処理ＳＴ１４０３により生成される。
【００６４】
次に、要素Ｓ３は要素種別が待ちで、かつコンベアの移動の完了を判定する処理であるので、要素Ｓ３のステップ処理は基本ステップ処理＋部品処理となり、図１６（Ｃ）に示すように要素Ｓ３の活性フラグかオン、かつ実行済フラグがオフか否かを判別するステップＳＴ１６０４と、ステップＳＴ１６０４がＹＥＳの場合に、コンベア１コールと実行済フラグをオンにするステップＳＴ１６０５が生成される。
【００６５】
次の要素Ｓ４の来先要素は要素Ｓ３のみであるので、要素Ｓ３とＳ４のトランジション処理として、図１６（Ｄ）に示すように要素Ｓ３の活性フラグがオン、かつ実行済フラグがオン、かつ要素Ｓ３の保留フラグがオフか否かを判別するステップＳＴ１６０６と、ステップＳＴ１６０６がＹＥＳのとき、コンベア１の移動が完了したか否かを判別するステップＳＴ１６０７と、ステップＳＴ１６０７がＹＥＳのとき、要素Ｓ３の活性フラグをオフにし、かつ実行済フラグをオフにし、かつ次の要素Ｓ４の活性フラグをオンにするステップＳＴ１６０８が生成される。ステップＳＴ１６０７のコンベア１の移動結果の判定処理は、図１４のトークン移動条件追加処理ＳＴ１４０７により生成される。
【００６６】
なお、図１６（Ｅ）の部品１６１は、部品データベース１７に予め標準部品として作成されているコンベア１の部品ファンクションブロックであり、前述した部品端子入力処理（図１２、ＳＴ１２０３）でパラメータとして１ｍが設定された後、コンベア１が１ｍ移動したとき部品１６１の移動結果が「１」となる。
【００６７】
上述したように動作フローからそれぞれの要素に対応するステップ処理とトランジション処理が自動生成されるので、従来のようにプログラミング担当者が動作フローからシーケンスプログラムを作成する必要がなくなる。
【００６８】
次に、分岐要素を含む動作フローからシーケンスプログラムを生成する場合について図１７及び図１８を参照して説明する。
図１７は、コンベア１を１ｍ移動させ、コンベア１に故障が発生したならランプを点灯させるシーケンス制御を行う動作フローである。この動作フローから同図の右側に示すシーケンスプログラムが生成される。
【００６９】
要素Ｓ６から要素Ｓ７に進む条件は、コンベア１に故障が発生している場合であるので、要素Ｓ６、要素Ｓ７のＳ６−Ｓ７トランジション処理は、図１８（Ａ）に示すように基準トランジションにコンベア１が故障のときトークンを下流の要素Ｓ７に移動させる条件を付加したものとなる。
【００７０】
前述した図１４のトランジション処理生成処理を参照して説明すると、この場合要素Ｓ６は選択分岐で、処理順序ファイル４０の要素番号Ｓ６の次のデータｄ１はＳ６−Ｓ７でデータ型がｎ１−ｍ１となるので、図１４のステップＳＴ１４０３のスケルトン生成処理により基準トランジション処理が生成される。この場合、範囲指定は無いのでステップＳＴ１４０４でイベント・タイマ監視処理は生成されない。そして、要素Ｓ６の要素種別が選択分岐であるので、ステップＳＴ１４０６のトークン移動条件追加処理により、コンベア１の故障の有無を判定し、故障が有るときトークンを要素Ｓ７に移動させる処理が追加される。
【００７１】
この結果、要素Ｓ６とＳ７のトランジション処理として、図１８（Ａ）に示す要素Ｓ６の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別する処理ＳＴ１８０１と、コンベア１の故障の有無を判別する処理ＳＴ１８０２と、コンベア１が故障のとき、要素Ｓ６の活性フラグをオフにし、かつ実行済フラグをオフにし、要素Ｓ７の活性フラグをオンにしてトークンを要素Ｓ７に移動させるステップＳＴ１８０３とからなる処理が生成される。
【００７２】
次に、要素Ｓ６から要素Ｓ８に進む条件は、コンベア１に故障が発生していない場合であるので、要素Ｓ６、Ｓ８のＳ６−Ｓ８トランジション処理は、基準トランジション処理に、コンベア１が故障でないときにトークンを下流の要素Ｓ８に移動させる条件を付加したものとなる。具体的には、図１８（Ｂ）に示すように基準トランジション処理のステップＳＴ１８０４、ＳＴ１８０６に、コンベア１の故障の有無を判定し、故障でないときにステップＳＴ１８０６に進む処理ＳＴ１８０５を追加したものとなる。
【００７３】
次に、要素Ｓ７、要素Ｓ９のＳ７−Ｓ９トランジション処理は、要素Ｓ７が判定、選択分岐、待ちの何れでも無いので、図１４のトランジション処理生成処理においてトークン移動条件の追加は行われず、図１８（Ｃ）に示すように要素Ｓ８の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別するステップＳＴ１８０６と、そのステップＳＴ１８０６がＹＥＳのとき、要素Ｓ７の活性フラグをオフ、かつ実行済フラグをオフ、かつ下流要素Ｓ９の活性フラグをオンにして要素Ｓ９にトークンを移動させるステップＳＴ１８０７とからなるトランジション処理が生成される。
【００７４】
同様に要素Ｓ８、Ｓ９のＳ８−Ｓ９トランジション処理は、トークン移動条件の追加は行われないので、図１８（Ｄ）に示すように要素Ｓ８の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別するステップＳＴ１８０８と、そのステップＳＴ１８０８がＹＥＳのとき、要素Ｓ８の活性フラグをオフし、かつ実行済フラグをオフし、要素Ｓ９の活性フラグをオンするステップＳＴ１８０９とからなるトランジション処理が生成される。
【００７５】
次に、並列実行要素を含む動作フローからシーケンスプログラムを生成する場合について図１９及び図２０を参照して説明する。
図１９は、コンベア１の移動の完了を待って、モータ１を正転及びモータ２を逆転させるシーケンス制御の動作フローとその動作フローから生成されるシーケンスプログラムを示している。
【００７６】
要素Ｓ８、Ｓ９は並列実行要素であるので、要素Ｓ７が実行された後、要素Ｓ８と要素Ｓ９が実行される。従って、要素Ｓ７、Ｓ８、Ｓ９のＳ７−（Ｓ８、Ｓ９）トランジション処理は、図１９に示すように上流要素Ｓ７の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かにより上流要素Ｓ７が実行された否かを判別するステップＳＴ１９０１と、ステップＳＴ１９０１がＹＥＳのとき、つまり要素Ｓ７が実行済のとき、要素Ｓ７の活性フラグをオフにし、かつ実行済フラグをオフにし、下流要素Ｓ８、Ｓ９の活性フラグをそれぞれオンにしてトークンを要素Ｓ８、Ｓ９に移動するステップＳＴ１９０２とからなるトランジション処理が生成される。
【００７７】
図２０は、図１９のシーケンスプログラムの要素（Ｓ８、Ｓ９）−Ｓ１０のトランジション処理を示す図である。
要素Ｓ８、Ｓ９が並列実行要素であるので、要素Ｓ８と要素Ｓ９の両方が実行された後、トークンが要素Ｓ１０に移動されて要素Ｓ１０が実行される。そこで、要素（Ｓ８、Ｓ９）−Ｓ１０のトランジション処理として、図１４のＳＴ１４０３のスケルトン生成処理及びＳＴ１４０６のトークン移動条件追加処理により、要素Ｓ８から要素Ｓ１０へのトークンの移動条件が成立したか否かを判別するステップＳＴ２００１と、要素Ｓ８の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別するステップＳＴ２００２と、そのステップＳＴ２００２がＹＥＳのとき、要素Ｓ８−Ｓ１０移動条件をオンにし、要素Ｓ８を非活性、未実行にするステップＳＴ２００３が生成される。
【００７８】
次に、要素Ｓ９から要素Ｓ１０への移動条件がオンか否かを判別するステップＳＴ２００４と、要素Ｓ９の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別するステップＳＴ２００５と、要素Ｓ９が実行されＳ９−Ｓ１０移動条件がオンのとき、要素Ｓ９の活性フラグをオフ、実行済フラグをオフにするステップＳＴ２００６とが生成される。
【００７９】
さらに、Ｓ８−Ｓ１０移動条件がオン、かつＳ９−Ｓ１０移動条件がオンか否かを判別するステップＳＴ２００７と、そのステップＳＴ２００７がＹＥＳのとき、Ｓ８−Ｓ１０の移動条件、Ｓ９−Ｓ１０の移動条件をオフし、要素Ｓ１０の活性フラグをオンするステップＳＴ２００８がトランジション処理として生成される。この（Ｓ８、Ｓ９）−Ｓ１０トランジション処理により、モータ１に正転、モータ２に逆転指令を発行後、トークンを要素Ｓ１０に移動させる処理が実行される。
【００８０】
以上のようにして図２のフロー要素処理生成処理２０２が終了したなら、次に図２のステップＳＴ２０３の部品処理生成処理を実行する。
図２１は、モータ１を正転させる制御を行う動作フローと、その動作フローから生成される部品処理のシーケンスプログラムを示す図である。
【００８１】
部品データベース１７には、標準部品として種々の部品ファンクションブロック（ＦＢ）が登録されている。各部品ＦＢは、図２２に示すようにその部品がフローの実行時のみコールされる関数型部品か、フローの進行と独立して動作する常時型部品か、タスクを指定して動作するかの別を示す起動法と、タスク指定の部品の場合、生成されるプログラムと同じタスクで動作するか、別のタスクで動作するかを示すタスク指定情報とが定義されている。
【００８２】
図２１において、モータ１が関数型部品の場合には、図１２のステップ処理生成処理の部品実行処理生成処理ＳＴ１２０３により、図２１（Ａ）に示すように要素Ｓ８の活性フラグがオン、かつ実行フラグがオンか否かを判別するステップＳＴ２１０１と、モータ１を正転させる指令と、モータ１ＦＢをコールしてモータ１を駆動させる処理と、要素Ｓ８の実行済フラグをオンにするステップＳＴ２１０２とかなるステップ処理が生成される。
【００８３】
モータ１が常時型で、生成されるプログラムと同一タスクの場合には、図２１（Ｂ）に示すように活性かつ実行済をチェックするＳＴ２１０３と、モータ１への指令と実行済ＯＦＦを行うＳＴ２１０４がステップ処理として生成され、モータ１ＦＢをコールするＳＴ２１０５が部品処理として生成される。
【００８４】
モータ１が常時型で、起動タスクが生成されるプログラムと別タスクの場合には、要素Ｓ８のステップ処理として、図２１（Ｃ）に示すように同図（Ａ）と同じステップＳＴ２１０６と、モータＦＢをコールするＳＴ２１０７の処理が生成され、図２１（Ｄ）に示すようにさらに別のタスク２としてモータ１ＦＢをコールする部品処理ＳＴ２１０８が生成される。
【００８５】
次に、範囲指定された動作フローから範囲指定処理を生成する図２のステップＳＴ２０４の範囲指定処理生成処理の処理内容を説明する。
範囲指定処理生成処理ＳＴ２０４は、ネットファイル１６の要素データを調べ、範囲指定番号毎に範囲指定処理を生成する。範囲指定処理は、標準のプログラムが用意されており、範囲指定番号、監視種別（タイマ監視またはイベント監視）、起動工程名等が定まると範囲指定処理が生成される。
【００８６】
図２３は、範囲指定された動作フローと、その指定された範囲内でイベントが発生したとき起動される工程２の動作フローを示す図である。同図は、コンベア１を１ｍ移動させる要素Ｓ２と、モータ１を停止させる要素Ｓ３が実行されるまでの間に停止スイッチがオンされたとき、工程２を起動させる工程１の動作フローを示しており、工程１の破線で示す範囲が範囲指定処理の対象となる。
【００８７】
工程１の動作フローから生成されるシーケンスプログラムの範囲指定処理の内容は、停止スイッチがオンされたとき、そのとき活性となっている要素を保留状態にして、メモリ２３１に起動工程名をセットし、メモリ２３２に範囲番号をセットして工程２を起動させる。また、範囲指定処理は、工程２から呼び出し元に戻る復帰情報を得たなら、保留にしてある要素の保留フラグをオフにする。また、要素Ｓ５にジャンプする復帰情報を得たなら、保留にしてある要素の活性フラグをオフにしてジャンプ先要素Ｓ５の活性フラグをオンにする。
【００８８】
工程２の動作フローはその一部を示してあるが、呼び出し元の要素が何かを判別し、呼び出し元が要素Ｓ２であれば、要素Ｓ２４が復帰情報をメモリ２３３にセットして、工程２の処理を終了し、呼び出し元が要素Ｓ２以外であれば、要素Ｓ２６がジャンプ先を要素Ｓ５とする復帰情報をメモリ２３３に書き込んだ後、ＲＥＴ要素を実行する。
【００８９】
図２４及び図２５は、図２３のイベント監視の範囲指定を含む工程１の動作フローから生成されるトランジション処理を示す図である。
要素Ｓ１と要素Ｓ２とのＳ１−Ｓ２トランジション処理として、図２４に示すように基本トランジション処理ＳＴ２４０１及びＳＴ２４０４に、停止スイッチがオフか否かを判別する処理ＳＴ２４０２と停止スイッチがオンされたとき、要素Ｓ１の保留フラグをオンにし、範囲指定処理ｈｎ１のモードとして「１」を設定して範囲指定処理ｈｎ１を有効にする処理ＳＴ２４０３を付け加えたプログラムが生成される。これは、図１４のスケルトン生成処理ＳＴ１４０４とイベント・タイマ監視処理生成処理ＳＴ１４０４により生成される。
【００９０】
同様に要素Ｓ３とＳ４とのＳ３−Ｓ４トランジション処理として、図２５に示すように、基本トランジション処理ＳＴ２５０１、ＳＴ２５０４に、停止スイッチがオフされたか否かを判別する処理ＳＴ２５０２と、停止スイッチがオンされたとき、要素Ｓ３の保留フラグをオンにして範囲指定処理ｈｎ１のモードとして「１」を設定して範囲指定処理ｈｎ１を有効にする処理ＳＴ２５０３と、ステップＳＴ２５０４で要素Ｓ３の活性フラグがオフ、かつ実行フラグがオフ、かつ要素Ｓ４の活性フラグがオンとされたとき、範囲指定処理ｈｎ１のモードを「０」にする処理ＳＴ２５０５とを付け加えたプログラムが生成される。これは、図１４のスケルトン生成処理ＳＴ１４０３とイベント・タイマ監視処理生成処理ＳＴ１４０４により生成される。
【００９１】
図２６は、図２３の動作フローから生成される範囲指定処理ｈｎ１のフローチャートである。
範囲指定条件が動作フローに記述されると、図２のＳＴ２０４の範囲指定処理生成処理により、図３のネットファイル１６の要素データから範囲番号ｈｎ１が検索され、監視の種別（タイマまたはイベント）、時間（タイマの場合）、信号名（イベントの場合）、起動工程名を得て、図２６に示すような範囲指定処理ＳＴ２３０１が生成される。
【００９２】
図２３の工程１の動作フローから、範囲指定処理ｈｎ１のモードの値が「１」となったか否か、つまり工程２を起動させる状態となったか否かを判別する処理ＳＴ２６０１と、ｈｎ１モードの値が「１」のとき、つまり範囲指定条件が成立したとき、工程２が停止中か否かを判別する処理ＳＴ２６０２と、工程２に自工程の工程名と範囲指定処理の範囲番号ｈｎ１を通知し、工程２の要素Ｓ２１の活性フラグをオンにし、ｈｎ１のモードを「２」にする処理ＳＴ２６０３とが生成される。
【００９３】
また、ｈｎ１のモードが「１」でないとき（ＳＴ２６０１、ＮＯ）、ｈｎ１モードが「２」か否か、つまり他のフローから復帰待ちの状態か否かを判別する処理ＳＴ２６０４と、ｈｎ１のモードが「２」のとき、他フローからの復帰コマンドが有るか否かを判別する処理ＳＴ２６０５と、他フローからの復帰コマンドが有るとき、ｈｎ１のモードとして「０」を設定する処理ＳＴ２６０６と、復帰コマンドがジャンプか否かを判別する処理ＳＴ２６０７と、復帰コマンドがジャンプのとき、呼び出し元の保留状態となっている要素を非活性、未実行とし、ジャンプ先要素の活性フラグをオンにする処理ＳＴ２６０８と、呼び出し元の保留フラグをオフにし、メモリ２３３の復帰コマンドをクリアする処理ＳＴ２６０９とが生成される。なお、図示していないが工程２のイベントプログラムも同様にして工程２の動作フローから生成される。
【００９４】
図２３の工程２の要素Ｓ２６で使用される、図２７（Ａ）に示す戻り先指定部品２７１は部品データベース１７に登録されている。戻り先部品２７１には、予め図２７（Ｂ）に示すような部品プログラムが格納されており、戻り先部品２７１に対する指令がジャンプか、リターンかの別と、指令がジャンプの場合のジャンプ先と、自工程の番号とが設定されると、指定されたジャンプ先要素にジャンプするプログラムが実行される。
【００９５】
部品プログラムは、先ず、メモリ２３１、２３２にデータが記憶されているか否かを判別する（ＳＴ２７０１）。メモリ２３１、２３２にデータが記憶されている場合、そのメモリに記憶されている起動工程１と範囲番号ｈｎ１を読み出し、範囲番号ｈｍ１からメモリ２３３を得る（ＳＴ２７０２）。そして、戻り先指定部品の指令がジャンプか否かを判別する（ＳＴ２７０３）。指令がジャンプであったときには、メモリ２３３に復帰情報としてジャンプ＋step番号をセットする（ＳＴ２７０４）。このとき、指令がジャンプでなければ、ステップＳＴ２７０５に進みメモり２３３に復帰情報としてリターンをセットする。その後、メモリ２３１、２３２をクリアし（ＳＴ２３０６）、結果として正常であったことを記憶する（ＳＴ７０７）。ステップＳＴ２７０１でメモリ２３１、２３２にデータが無い場合には、ステップＳＴ２７０８に進み結果として異常であったことを記憶する。
【００９６】
次に、図２８は、図２３のＲＥＴ要素Ｓ２５から生成されるステップ処理を示す図である。
要素Ｓ２５のステップ処理としては、要素Ｓ２５の活性フラグがオン、かつ実行済フラグがオフか否かを判別する処理ＳＴ２８０１と、活性フラグがオンで、かつ実行済フラグがオフのとき、実行済フラグをオンにする処理ＳＴ２８０２とが生成される。これは、図１２のステップＳＴ１２０１のステップスケルトン生成処理により生成される。
【００９７】
次に、メモリ２３１、２３２にデータが記憶されているか否かを判別する処理ＳＴ２８０３と、メモリ２３１、２３２から起動工程名１と範囲番号ｈｎ１とを得て、範囲番号ｈｎ１に対応するメモリ２３３に復帰情報としてリターンをセットする処理ＳＴ２８０４と、メモリ２３１、２３２をクリアする処理ＳＴ２８０５とが生成される。これは、図１２のステップＳＴ１２０４のＲＥＴＵＲＮ処理生成処理により生成される。
【００９８】
このＲＥＴ処理により、範囲番号に対応するメモリ２３３に復帰情報がセットされ、範囲指定処理（図２６）によって工程１が再開する。
ここで、図１４のトランジション処理生成処理で、データ型がｎ１−ｍ１の場合のイベント・タイマ監視処理生成処理ＳＴ１４０４と、データ型が（ｎ１、ｎ１・・・ｎａ）−ｍ１のイベント・タイマ監視処理生成処理ＳＴ１４１０の処理内容を、図２９及び図３０を参照して説明する。
【００９９】
先ず、ネットファイル１６の要素データから、要素ｎ１に範囲指定が行われているか否かを判別する（図２９、ＳＴ２９０１）。次に、要素ｎ１と行先要素ｍ１の位置が指定された範囲のどこに入るかを判別する（ＳＴ２９０２）。
【０１００】
行先要素ｍ１が指定された範囲の入口要素または要素ｎ１が範囲内の場合には、ステップＳＴ２９０３に進み監視イベントが発生したか否かを判別し、イベントが発生したときには、対応する範囲指定処理のモードを有効にするイベント監視処理を生成する。
【０１０１】
要素ｎ１が指定された範囲の出口要素の場合には、ステップＳＴ２９０４に進みイベントが発生したか否かを判別し、イベントが発生したときには活性状態の要素を保留にし、範囲指定処理のモードを有効にし、イベントが発生していない場合には、範囲指定処理のモードを無効にするイベント監視処理を生成する。
【０１０２】
これらの処理と前述した図１４のステップＳＴ１４０３のスケルトン生成処理により、行先要素ｍ１が指定された範囲の入口要素、または要素ｎ１が範囲内の要素で、その要素が活性、かつ実行済のとき、イベントの発生を監視し、イベントが発生したとき、活性状態の要素を保留にし、イベント監視の範囲指定処理を実行可能な状態にするトランジション処理が生成される。また、要素ｎ１が出口要素で、その要素ｎ１が活性、かつ実行済のときに、イベントが発生しなければ、範囲指定処理を実行しない状態として、次の要素を活性にしてトークンを指定範囲外に移動させるトランジション処理が生成される。
【０１０３】
ステップＳＴ２９０１で監視種別がタイマ監視と判別された場合には、ステップＳＴ２９０５に進み要素ｎ１、行先要素ｍ１の範囲指定の位置を判別する。
来先要素ｍ１が範囲指定の入口要素の場合には、ステップＳＴ２９０６に進みタイマ計測をスタートさせるタイマ監視処理を生成する。
【０１０４】
要素ｎ１が指定された範囲内の要素である場合には、監視対象のタイマの計測時間が所定値に達してタイマがオンとなっているか否かを判別し、タイマがオンのときには、上述したイベント監視と同様のタイマ監視の範囲指定処理のモードを有効にするタイマ監視処理を生成する。
【０１０５】
また、ステップＳＴ２９０５で要素ｎ１が範囲指定の出口要素であると判別された場合には、タイマがオンとなっているか否かを判別し、タイマがオンのときには、タイマ監視の範囲指定処理のモードを有効とし、タイマがオフのときには、範囲指定処理のモードを無効とし、タイマ計測をストップさせるタイマ監視処理を生成する。
【０１０６】
これらの処理と図１４のステップＳＴ１４０３のスケルトン生成処理により、、行先要素ｍ１が指定された範囲の入口要素で、その要素ｍ１が活性、かつ実行済のときに、次の要素を活性にし、さらにタイマ計測をスタートさせるトランジション処理が生成される。また、要素ｎ１が範囲内の要素で、その要素が活性、かつ実行済のとき、タイマを監視し、タイマがオンの場合には、要素ｎ１を保留にし、タイマ監視の範囲指定処理を実行可能な状態にし、タイマがオフの場合には、次の要素を活性にするトランジション処理が生成される。さらに、要素ｎ１が出口要素で、要素ｎ１が活性、かつ実行済のとき、タイマを監視し、タイマがオンの場合には、タイマ監視の範囲指定処理を実行可能な状態にし、タイマがオフの場合には、タイマ計測をストップさせ、範囲指定処理を実行しない状態にし、さらに次の要素を活性にしてトークンを範囲外の要素に移動するトランジション処理が生成される。
【０１０７】
次に、図３０は、図１４のトランジション処理生成処理において、処理順序ファイル４０のデータｄのデータ型が（ｎ１、ｎ２・・・ｎａ）−ｍ１の場合のイベント・タイマ監視処理生成処理ＳＴ１４１０の処理内容を示す図である。
【０１０８】
先ず、ネットファイル１６の要素データを参照して来先要素ｎ＊（ｎ１からｎａの任意の要素）に対して範囲指定が行われているか否か、範囲指定が行われている場合には、その監視種別がイベント監視か、それともタイマ監視の何れであるかを判別する（図３０、ＳＴ３００１）。来先要素ｎ＊に対して範囲指定が行われていて、監視種別がイベント監視の場合には、ステップＳＴ３００２に進み来先要素ｎ＊が指定された範囲内の要素か、それとも指定された範囲の出口要素かを判別する。
【０１０９】
来先要素ｎ＊が指定された範囲内の要素であれば、監視対象のイベントが発生したか否かを判別し、イベントが発生したならイベント監視の範囲指定処理のモードを有効にするイベント監視処理を生成する（ＳＴ３００３）。
【０１１０】
来先要素ｎ＊が指定された範囲の出口要素であれば、イベントが発生したか否かを判別し、イベントが発生したなら範囲指定処理のモードを有効にし、イベントが発生していなければ、範囲指定処理のモードを無効にするイベント監視処理を生成する（ＳＴ３００４）。
【０１１１】
ステップＳＴ３００１で監視種別がタイマ監視であると判別された場合には、ステップＳＴ３００５に進み来先要素ｎ＊が指定された範囲内の要素か、それとも指定された範囲の出口要素かを判別する。
【０１１２】
来先要素ｎ＊が指定された範囲内の要素の場合には、ステップＳＴ３００６に進み監視対象のタイマの計測時間が所定値に達してタイマがオンとなっているか否かを判別し、タイマがオンのときには、上述したイベント監視と同様のタイマ監視の範囲指定処理のモードを有効にするタイマ監視処理を生成する。
【０１１３】
来先要素ｎ＊が指定された範囲の出口要素の場合には、ステップＳＴ３００６に進み監視対象のタイマがオンとなっているか否かを判別し、タイマがオンのときにはタイマ監視の範囲指定処理のモードを有効にし、タイマがオフのときには、タイマ計測をストップさせるタイマ監視処理を生成する。
【０１１４】
上述した処理を来先要素数のａ回分実行したか否かを判別し、ａ回実行していなければステップＳＴ３００１に戻り、ａ回実行したなら元の処理に戻る（ＳＴ３００７）。
【０１１５】
上述したイベント・タイマ監視処理生成処理ＳＴ１４０４またはＳＴ１４１０により、範囲指定処理のモードを有効にする処理を含むトランジション処理が生成される。
【０１１６】
ここで、図１９の並列実行要素を含む動作フローが範囲指定されている場合に、上述したイベント・タイマ監視処理生成処理ＳＴ１４１０により生成されるプログラムを、図３１及び図３２を参照して説明する。
【０１１７】
最初に、イベント監視の場合について説明する。この場合、要素Ｓ８及びＳ９は並列実行要素であるので、処理順序ファイル４０の要素Ｓ８、Ｓ９、と要素Ｓ１０との接続を表すデータｄ１は、（Ｓ８、Ｓ９）−Ｓ１０となり、これは図１４のデータ型の（ｎ１、ｎ２・・・ｎａ）−ｍ１に該当する。従って、トランジション処理を生成する際に、図３０のイベント・タイマ監視処理生成処理ＳＴ１４１０が実行されて、図２０のようなトランジション処理が生成される。ここでＳＴ２００１〜ＳＴ２００３に対応する部分を図３１（Ａ）、（Ｂ）に示す。
【０１１８】
来先要素Ｓ８が指定された範囲内にある場合には、図３０のステップＳＴ３００３のイベント監視生成処理により、図３１（Ａ）のプログラムが生成される。先ず、要素Ｓ８から要素Ｓ１０にトークンを移動させる移動条件がオンか否かを判別する処理ＳＴ３１０１が生成される。
【０１１９】
次に、上流要素Ｓ８の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別する処理ＳＴ３１０２が生成される。これは、図１４のスケルトン生成処理ＳＴ１４０９により基本トランジション処理として生成される。
【０１２０】
次に、監視イベントが発生したか否かを判別する処理ＳＴ３１０３が生成される。監視イベントが発生している場合、要素Ｓ８を保留状態にし、イベント監視の範囲指定処理ｎｈ１のモードを「１」にする処理ＳＴ３１０４が生成される。また、監視イベントが発生していない場合、要素Ｓ８から要素Ｓ１０へトークンを移動する条件をオンにし、要素Ｓ８の活性フラグをオフ、かつ実行済フラグをオフにする処理ＳＴ３１０５が生成される。
【０１２１】
次に、来先要素Ｓ８が範囲指定の出口要素である場合には、図３０のステップＳＴ３００４のイベント監視生成処理により、図３１（Ｂ）のプログラムが生成される。上述した来先要素Ｓ８が指定された範囲内にある場合と同様に、要素Ｓ８から要素Ｓ１０にトークンを移動させるＳ８−１０条件がオンか否かを判別する処理ＳＴ３１０６と、要素Ｓ８が活性、かつ実行済、かつ非保留か否かを判別する処理ＳＴ３１０７が生成される。
【０１２２】
さらに、監視イベントがオフか否かを判別する処理ＳＴ３１０８と、イベントが発生しているときに要素Ｓ８を保留にして、範囲指定処理ｈｎ１のモードを「１」にして範囲指定処理ｎｈ１を実行可能な状態にする処理ＳＴ３１０９と、イベントが発生していない場合、要素Ｓ８から要素Ｓ１０にトークンを移動させるＳ８−１０条件をオンにし、要素Ｓ８の活性フラグをオフ、かつ実行済フラグをオフにする処理ＳＴ３１１０が生成される。次に、範囲指定処理ｈｎ１のモードを「０」にして範囲指定処理ｈｎ１を実行しない状態にする処理ＳＴ３１１１が生成される。
【０１２３】
次に、タイマ監視の場合について説明する。タイマ監視で、来先要素Ｓ８が指定された範囲内にある場合には、図３０のステップＳＴ３１０６のタイマ監視生成処理により、図３２（Ａ）のプログラムが生成される。
【０１２４】
先ず、要素Ｓ８から要素Ｓ１０にトークンを移動させるＳ８−１０条件がオンか否かを判別する処理ＳＴ３２０１が生成される。次に、来先要素Ｓ８の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別する処理ＳＴ３２０２が生成される。これは、図１４のスケルトン生成処理ＳＴ１４１０により基本トランジション処理として生成される。
【０１２５】
次に、監視タイマｈｎ１がオフ、つまりタイマの計測時間が所定時間に達せずにタイマがオフとなっているか否かを判別する処理ＳＴ３２０３が生成される。タイマがオンのとき、範囲指定処理ｈｎ１のモードを「１」にし、タイマをリセットする処理ステップＳＴ３２０４が生成される。また、タイマがオフのとき、要素Ｓ８から要素Ｓ１０へトークンを移動するＳ８−１０条件をオンにし、要素Ｓ８の活性フラグをオフ、かつ実行済フラグをオフにする処理ＳＴ３２０５が生成される。
【０１２６】
次に、来先要素Ｓ８が範囲指定の出口要素である場合には、図３０のステップＳＴ３００６のタイマ監視生成処理により、図３２（Ｂ）のプログラムが生成される。
【０１２７】
上記と同様に要素Ｓ８から要素Ｓ１０にトークンを移動させるＳ８−１０条件がオンか否かを判別する処理ＳＴ３２０６と、要素Ｓ８が活性、且つ実行済、かつ保留無しか否かを判別する処理ＳＴ３２０７が生成される。
【０１２８】
さらに、監視タイマがオフか否かを判別する処理ＳＴ３２０８と、タイマがオンのとき要素Ｓ８を保留にして、範囲指定処理ｈｎ１のモードを「１」にする処理ＳＴ３２０９が生成される。また、タイマがオフのとき、要素Ｓ８から要素Ｓ１０にトークンを移動させる条件をオンにし、要素Ｓ８の活性フラグをオフ、かつ実行済フラグをオフにする処理ＳＴ３２１０が生成される。次に、範囲指定処理ｈｎ１のモードを「０」にし、タイマをリセットする処理ＳＴ３２１１が生成される。
【０１２９】
図３３は、開始要素Ｓ３１からコンベア１を１ｍ移動させる要素Ｓ３２へトークンが移動したときタイマがスタートし、モータを停止させる要素Ｓ３３から次の要素Ｓ３４へトークンが移動したときタイマがストップし、タイマの計測時間が１０秒に達すると、工程４（図示せず）にジャンプする動作フローを示す図であり、図３４（Ａ）、（Ｂ）、（Ｃ）はその動作フローから生成されるトランジション処理を示す図である。
【０１３０】
要素Ｓ３１から要素Ｓ３２へトークンを移動させるＳ３１−Ｓ３２トランジション処理は、処理順序ファイル４０のデータｄ１のデータ型がｎ１−ｍ１で、行先要素Ｓ３２が指定範囲の入口要素であるので、図１４のトランジション処理生成処理及び図２９のステップＳＴ２９０６のタイマ監視生成処理により、図３４（Ａ）に示すプログラムが生成される。
【０１３１】
先ず、要素Ｓ３１が活性、かつ実行済、保留無しか否かを判別する処理ＳＴ３４０１と、ステップＳＴ３４０１がＹＥＳのとき、要素Ｓ３１を非活性、未実行とし、行先要素Ｓ３２を活性にする処理ＳＴ３４０２と、タイマｈｎ２による計時をスタートさせる処理ＳＴ３４０３が生成される。
【０１３２】
次に、要素Ｓ３２から要素Ｓ３３にトークンを移動させるＳ３２−Ｓ３３トランジション処理は、データｄ１のデータ型がｎ１−ｍ１で、要素Ｓ３２がタイマ監視の指定された範囲内の要素であるので、図１４のトランジション生成処理及び図２９のステップＳＴ２９０７のタイマ監視生成処理により、図３４（Ｂ）に示すプログラムが生成される。
【０１３３】
先ず、要素Ｓ３２の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別する処理ＳＴ３４０４が生成される。これは、図１４のスケルトン生成処理ＳＴ１４０３により生成される。
【０１３４】
次に、タイマｈｍ２出力がオフか否かを判別する処理ＳＴ３４０５と、タイマｈｎ２出力がオフでないとき、つまり指定された範囲内の要素Ｓ３２が実行済となるまでに１０秒以上経過したときに、要素Ｓ３２を保留状態にし、図示しないタイマ監視の範囲指定処理ｈｎ２のモードを有効（「１」）にし、タイマｈｎ２をリセットする処理ＳＴ３４０６とが生成される。これは、図２９のステップＳＴ２９０７のタイマ監視生成処理により生成される。
【０１３５】
さらに、要素Ｓ３３から要素Ｓ３４へトークンを移動させるＳ３３−Ｓ３４トランジション処理は、処理順序ファイル４０のデータ型がｎ１−ｍ１で、要素Ｓ３３がタイマ監視範囲の出口要素であるので、図１４のトランジション処理生成処理及び図２９のステップＳＴ２９０８のタイマ監視生成処理により、図３４（Ｃ）に示すプログラムが生成される。
【０１３６】
先ず、要素Ｓ３３の活性フラグがオン、かつ実行済フラグがオン、かつ保留フラグがオフか否かを判別する処理ＳＴ３４０８と、タイマｈｎ２の出力がオフか否かを判別する処理ＳＴ３００９が生成される。タイマｈｎ２の出力がオンのとき、要素Ｓ３３を保留状態にし、範囲指定処理ｈｎ２のモードを「１」にし、タイマｈｎ２をリセットする処理ＳＴ３４１０が生成される。
【０１３７】
また、タイマｈｎ２出力がオフのとき、要素Ｓ３３の活性フラグをオフ、かつ実行済フラグをオフ、次の要素Ｓ３４の活性フラグをオンにする処理ＳＴ３４１１と、ｈｎ２モードの値を「０」にしてタイマｈｎ２をリセットする処理ＳＴ３４１２が生成される。
【０１３８】
タイマ監視の範囲指定処理ｈｎ２は図示していないが、前述したイベント監視の範囲指定処理ＳＴ２３０１と同様に、ｈｎ２モードの値が「１」となったとき工程４を起動させる処理である。
【０１３９】
これらの処理により、図３３のタイマ監視を含む動作フローから各要素のトランジション処理を生成することができる。
以上述べたように動作フローからフロー作画処理１５によりネットファイル１６が作成され、コンパイラ１８によりそのネットファイル１６から処理順序ファイル４０が作成され、さらにその処理順序ファイル４０に基づいてステップ処理、トランジション処理、部品処理、範囲指定処理等が生成される。
【０１４０】
図３５は、上述したシーケンスプログラム作成装置により動作フローから生成されるシーケンスプログラムの概略を示す図である。
この動作フローは、コンベア１に１ｍ移動指令を与えた後、モータ１に停止指令を与えるものであり、動作フロー全体がタスク１として周期的に実行され、モータ１処理がタスク２として５ｍｓ毎に実行される。
【０１４１】
上述したシーケンスプログラムの自動生成方法により、動作フローの各要素毎にステップ処理と、要素間の接続と条件判断を行うトランジション処理が生成され、コンベア１を移動させる処理を起動させる処理が部品処理として生成され、５ｍｓ毎にモータ１処理等を起動する処理と範囲指定処理が生成される。
【０１４２】
上述した実施の形態によれば、動作フローの要素毎に活性フラグ、実行済フラグ、保留フラグを設け、それらのフラグが一定の条件を満足するとき、実行権を次の要素に渡すようにしたので、シーケンスプログラムの起動とプログラム内部の要素に対応する処理の実行を分離することができる。例えば、動作終了までに数秒かかるような要素の処理を実行するときに（コンベア１の移動など）、シーケンスプログラムに許容される実行時間が制限されている場合でも、その制御動作が終了するまで、その要素の活性フラグをオン、かつ実行済フラグをオフにしておくことで、実行権を次の要素に移動させず、そのシーケンスプログラムのエンドまで処理を進めることができる。従って、シーケンスプログラムの実行時間に上限がある場合でも、その実行時間以内で全体の処理を終了させ、かつそれより長い時間を要する要素の処理を実行することが可能となる。
【０１４３】
また、本実施の形態では、動作フローの各要素に対応するステップ処理とトランジション処理とが自動生成されるので、従来のようにプログラミング担当者がプログラムを作成する場合に発生するステップやトランジションの抜けが無くなる。また、ステップ処理とステップ処理との間には必ずトランジション処理が生成されるので、シーケンシャルファンクションチャートのようにステップとトランジションの記述順序をユーザが注意する必要が無くなる。さらに、仕様を変更する際は、動作フローのみを変更すれば、その動作フローに対応するシーケンスプログラムが作成されるので、従来のようにシーケンスプログラムのみが変更され、動作フローが実際のプログラムと異なるという問題も生じない。
【０１４４】
また、動作フローにイベント監視、あるいはタイマ監視等のための範囲指定が行われている場合にも、上述したイベント・タイマ監視処理生成処理等によりイベント監視、タイマ監視を行うシーケンスプログラムを自動生成することができる。
【０１４５】
さらに、動作フローで使用されるモータ等の部品の入出力条件、実行方法、その部品を動作させるプログラム等を部品ファンクションブロックとして部品データベース１７に登録しておくことで、その部品ファンクションブロックをコールする部品処理を、動作フローから生成されるプログラムと別のタスクとすることができる。従って、全ての要素が同一タスク内に存在する必要があるという、従来のシーケンシャルファンクションチャートの制限が無くなるので、動作フローの記述も簡単になる。また、従来、使用する部品の動作に必要なタスク毎にフローを記述し、タスク間でデータ交換を行うためのソフトウエア設計が必要であったが、本発明では１つの動作フローで別タスクで動作すべき部品が記述できるので、これらの作業が不要となる。その結果、ユーザはモータ等の使用部品が別のタスクで動作するか否かを考慮する必要がなく、機械動作そのものを記述するだけでシーケンスプログラムを生成することができる。
【０１４６】
なお、上述した実施の形態では、動作フローに対応するシーケンスプログラムを全て自動生成する場合について説明したが、ユーザが一部のプログラムを作成または修正するようにしてもよい。また、動作フローから生成するネットファイル１６、処理順序ファイル４０の構成は、実施の形態に示したものに限らず、他の構造のものであってもよいし、処理順序ファイルを作成せずに、ネットファイルから各要素の処理順序を定めそれぞれの処理を生成してもよい。
【０１４７】
さらに、本発明に係るシーケンスプログラムの自動生成プログラムを、図３６に示すフロッピーディスク３６０１、ＣＤＲＯＭ３６０２等の記憶媒体に格納しておいて、その記憶媒体を情報処理装置（パーソナルコンピュータ等）３６０３の媒体駆動装置（フロッピーディスクドライバー、ＣＤＲＯＭドライバー等）３６０４により読み取りシーケンスプログラムを自動生成するようにしてもよい。あるいは自動生成プログラムをプログラム提供者のコンピュータのハードディスク等の記憶装置に記憶しておいて、通信によりユーザのコンピュータに転送してハードディスク等に記憶し、その自動生成プログラムを用いてシーケンスプログラムを生成するようにしてもよい。
【０１４８】
【発明の効果】
本発明によれば、動作フローからその動作フローに対応するシーケンスプログラムを自動生成することができるので、プログラム開発の負担が軽減される。また、要素毎に活性情報、実行済情報等を設けることで、動作完了までに長い時間がかかる要素に対応する処理を実行する場合でも、実行済フラグを未実行にしておくことで実行権を次の処理に移動させずに、シーケンスプログラムをエンドまで進めることができる。これによりシーケンスプログラムの実行完了までの時間が制限されている場合でも、その制限時間以内に処理が終了し、動作フロー通りに実行するプログラムを生成することができる。また、要素毎にステップ処理とトランジション処理が自動生成されるので、シーケンスプログラムを作成する際にステップ処理やトランジション処理の抜けが生じない。さらに、部品毎に起動タスクを設定することにより動作フローから生成されるシーケンスプログラムと同一タスクとして部品処理を生成することも、別タスクとして部品処理を生成することもできる。その場合、動作フローと別タスク部品間の処理は自動生成されるため、従来のようにタスク間のデータ交換のためのソフトウェアの設計等が不要となる。
【図面の簡単な説明】
【図１】実施の形態のシーケンスプログラム作成装置のブロック図である。
【図２】コンパイラ１８の処理内容を示す図である。
【図３】ネットファイル１６の構成を示す図である。
【図４】処理順序ファイル４０の構成の一例を示す図である。
【図５】処理順序ファイル作成処理を示す図である。
【図６】要素番号ー行先要素番号セット処理を示す図である。
【図７】合流リスト７０を示す図である。
【図８】合流リスト７０から作成される選択合流要素の処理順序ファイル８１と並列合流要素の処理順序ファイル８２を示す図である。
【図９】要素番号セット処理を示す図である。
【図１０】同図（Ａ）〜（Ｄ）は処理順序ファイルの一例を示す図である。
【図１１】フロー要素処理生成処理を示す図である。
【図１２】ステップ処理生成処理を示す図である。
【図１３】同図（Ａ）はステップ処理の基本構成を示す図、同図（Ｂ）はトランジション処理の基本構成を示す図である。
【図１４】トランジション処理生成処理を示す図である。
【図１５】指令要素と待ち要素を含む動作フローとその動作フローから生成されるシーケンスプログラムを示す図である。
【図１６】同図（Ａ）〜（Ｅ）、指令要素と待ち要素を含むシーケンスプログラムのステップ処理とトランジション処理と部品とを示す図である。
【図１７】分岐要素を含む動作フローとその動作フローから生成されるシーケンスプログラムを示す図である。
【図１８】同図（Ａ）〜（Ｄ）は、分岐要素を含むシーケンスプログラムのトランジション処理を示す図である。
【図１９】並列実行要素を含む動作フローとその動作フローから生成されるシーケンスプログラムを示す図である。
【図２０】並列実行要素を含むシーケンスプログラムのトランジション処理を示す図である。
【図２１】同図（Ａ）〜（Ｄ）は、部品実行処理のシーケンスプログラムを示す図である。
【図２２】部品データベース１７の部品データを示す図である。
【図２３】範囲指定を含む動作フローとそれにより起動される工程の動作フローを示す図である。
【図２４】イベント監視の範囲指定を含む動作フローから生成されるトランジション処理を示す図である。
【図２５】イベント監視の範囲指定を含む動作フローから生成されるトランジション処理を示す図である。
【図２６】範囲指定処理のプログラムを示す図である。
【図２７】同図（Ａ）、（Ｂ）は戻り先指定部品とそのプログラムを示す図である。
【図２８】ＲＥＴ要素のステップ処理を示す図である。
【図２９】イベント・タイマ監視処理生成処理を示す図である。
【図３０】イベント・タイマ監視処理生成処理を示す図である。
【図３１】同図（Ａ）、（Ｂ）はイベント監視処理のプログラムを示す図である。
【図３２】同図（Ａ）、（Ｂ）はタイマ監視処理のプログラムを示す図である。
【図３３】タイマ監視を含む動作フローを示す図である。
【図３４】タイマ監視含むシーケンスプログラムのトランジション処理を示す図である。
【図３５】動作フローから生成されるシーケンスプログラムの一例を示す図である。
【図３６】記憶媒体を用いる場合の説明図である。
【図３７】従来の動作フローとプログラムフローのフロー要素を対比させた図である。
【符号の説明】
１３    シーケンスプログラム作成装置
１５    フロー作画処理
１６    ネットファイル
１７    部品データベース
１８    コンパイラ
１９    シーケンスプログラム
【図１】
0003852194.tif 000002
【図２】
0003852194.tif 000003
【図３】
0003852194.tif 000004
【図４】
0003852194.tif 000005
【図５】
0003852194.tif 000006
【図６】
0003852194.tif 000007
【図７】
0003852194.tif 000008
【図８】
0003852194.tif 000009
【図９】
0003852194.tif 000010
【図１０】
0003852194.tif 000011
【図１１】
0003852194.tif 000012
【図１２】
0003852194.tif 000013
【図１３】
0003852194.tif 000014
【図１４】
0003852194.tif 000015
【図１５】
0003852194.tif 000016
【図１６】
0003852194.tif 000017
【図１７】
0003852194.tif 000018
【図１８】
0003852194.tif 000019
【図１９】
0003852194.tif 000020
【図２０】
0003852194.tif 000021
【図２１】
0003852194.tif 000022
【図２２】
0003852194.tif 000023
【図２３】
0003852194.tif 000024
【図２４】
0003852194.tif 000025
【図２５】
0003852194.tif 000026
【図２６】
0003852194.tif 000027
【図２７】
0003852194.tif 000028
【図２８】
0003852194.tif 000029
【図２９】
0003852194.tif 000030
【図３０】
0003852194.tif 000031
【図３１】
0003852194.tif 000032
【図３２】
0003852194.tif 000033
【図３３】
0003852194.tif 000034
【図３４】
0003852194.tif 000035
【図３５】
0003852194.tif 000036
【図３６】
0003852194.tif 000037
【図３７】
0003852194.tif 000038