(57)【要約】【課題】本来的に高速実行を要求するプログラムモジュールについては１サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了とする。【解決手段】ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させる。【選択図】図７
2006294010.tif 000002
【特許請求の範囲】
【請求項１】
ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、１サイクル時間で規定される時間内での応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保される、ことを特徴とするプログラマブル・コントローラのユーザプログラム実行方法。
【請求項２】
分割実行される規定分量がステップ数で規定される、ことを特徴とする請求項１に記載のプログラマブル・コントローラのユーザプログラム実行方法。
【請求項３】
分割実行される規定分量が実行時間で規定される、ことを特徴とする請求項１に記載のプログラマブル・コントローラのユーザプログラム実行方法。
【請求項４】
規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールについて毎サイクル行われる、ことを特徴とする請求項１〜３のいずれかに記載のプログラマブル・コントローラのユーザプログラム実行方法。
【請求項５】
規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールから１プログラムモジュールを毎サイクル交替に選んで１モジュールずつ行われる、ことを特徴とする請求項１〜３のいずれかに記載のプログラマブル・コントローラのユーザプログラム実行方法。
【請求項６】
規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の終了後に行われる、ことを特徴とする請求項４又は５に記載のプログラマブル・コントローラのユーザプログラム実行方法。
【請求項７】
規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われる、ことを特徴とする請求項４又は５に記載のプログラマブル・コントローラのユーザプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザプログラムを構成する複数個のプログラムモジュールをそれぞれ分割実行タスクに割り付けることにより、個々のプログラムモジュールを複数のサイクルをかけて比較的低速に実行可能としたプログラマブル・コントローラ（以下、「ＰＬＣ」と言う）のユーザプログラム実行方法に関する。
【背景技術】
【０００２】
ＰＬＣのユーザプログラムが複数のプログラムモジュールで構成される場合、ＰＬＣ上での実行単位をプログラムモジュール単位とする場合がある。その場合は、その実行単位をタスクと呼ぶことがある。そのタスクは、「サイクル実行タスク」と「割込実行タスク」とに大別されるのが一般的である。
【０００３】
一例としては、サイクル実行タスクに割り付けられたプログラムモジュールは、その実行条件が成立するのを待って、毎サイクルにつき先頭から末尾（ＥＮＤ命令）まで、タスクＮｏ．の若いものから順に、一巡実行される。
【０００４】
これに対して、割込実行タスクに割り付けられたプログラムモジュールは、その割込条件が成立した場合に割込により実行される。例えば、サイクル実行タスクを実行中に割込条件が成立した場合は、サイクルク実行タスクに割り付けられたプログラムモジュールの実行を強制的に中断して、割込実行タスクに割り付けられたプログラムモジュールが実行される。
【０００５】
このような「サイクル実行タスク」と「割込実行タスク」とでユーザプログラムを実行するＰＬＣにあっては、さほど高速実行を必要としないプログラムモジュールについても毎サイクル一巡実行されるため、プログラムモジュールの数が増大するに連れて、１サイクル時間が長大化することにより、本来高速実行を必要とするプログラムモジュールの実行に支障を来す。特に、プログラムモジュール内で使用される命令が大容量のテーブルや文字列を処理するような命令の場合は、その命令の実行に多大の処理時間を要するため１サイクル時間の長大化に拍車をかけることになる。
【０００６】
そこで、実行に長時間を要する命令を複数のサイクルにわたって実行可能とするＰＬＣが従来より知られている（特許文献１参照）。
【特許文献１】特開２００２-２６８７０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述の実行に長時間を要する命令を複数のサイクルにわたって実行可能とするＰＬＣにあっても、実行に長時間を要する命令がプログラムモジュール内に多数存在したり、そのようなプログラムモジュールの数が増加した場合の対策は全く考慮されてはいない。
【０００８】
この発明は、上述した従来の問題点に着目してなされたものであり、その目的とするところは、本来的に高速実行を要求するプログラムモジュールについては１サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスク（プログラムモジュールを複数サイクルにかけて実行するもの）に割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了できるようにしたＰＬＣのユーザプログラム実行方法を提供することにある。
【０００９】
この発明のさらに他の目的並びに作用効果については、明細書の以下の記述を参照することにより、当業者であれば容易に理解されるであろう。
【課題を解決するための手段】
【００１０】
この発明のプログラマブル・コントローラのユーザプログラム実行方法は、ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、１サイクル時間で規定される高速時間内での応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保される、ことを特長とするものである。
【００１１】
このような構成によれば、本来的に高速実行を要求するプログラムモジュールについては１サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了できることとなる。
【００１２】
このとき、１回の分割実行の規定分量はステップ数で決定されるようにしてもよい。このようにすれば、プログラムモジュールの大小に拘わらず、規定分量を適切に設定することができる。
【００１３】
また、１回の分割実行の規定分量は実行時間で決定されるようにしてもよい。このようにすれば、１サイクル時間の余裕度合を勘案しつつ、規定分量を適切に設定することができる。
【００１４】
また、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールについて一括して毎サイクル行われる、ようにしてもよい。このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて僅かに遅らせつつ低速実行させることができる。
【００１５】
また、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールから１プログラムモジュールを毎サイクル交替に選んで１モジュールずつ行われるようにしてもよい。このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて大きく遅らせつつ低速実行させることができる。
【００１６】
また、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の終了後に行われるようにしてもよい。このようにすれば、分割実行処理を実現するためのシステムプログラムの設計が容易となる。
【００１７】
さらに、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われるようにしてもよい。このようにすれば、サイクル実行タスクに割り当てられた一連のプログラムモジュールとの連繋が容易となり、ユーザプログラムの設計自由度が向上する。
【発明の効果】
【００１８】
本発明によれば、本来的に高速実行を要求するプログラムモジュールについては１サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了させることができる。
【発明を実施するための最良の形態】
【００１９】
以下に、この発明の好適な実施の一形態を添付図面を参照しながら詳細に説明する。先に述べたように、本発明のＰＬＣのユーザプログラム実行方法は、ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、１サイクル時間で規定される高速応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保されるようにしたものである。
【００２０】
そこで、まず、このようなユーザプログラム実行方法が適用されるＰＬＣそれ自体について説明する。周知のごとく、ＰＬＣは、ＣＰＵユニットと、Ｉ／Ｏユニットと、各種特殊機能ユニット等を含んで構成される。
【００２１】
ＰＬＣのＣＰＵユニットのハードウェア構成図が図１に示されている。同図に示されるように、このＣＰＵユニット１は、ユーザプログラムメモリ（ＵＭ）１０１と、入出力メモリ（ＩＯＭ）１０２と、ＲＯＭ１０３と、ワークＲＡＭ１０４と、データ格納用不揮発性メモリ１０５と、アプリケーションスペシフィックＩＣ（ＡＳＩＣ）１０６と、マイクロプロセッサ（ＭＰＵ）１０７とを含んでいる。
【００２２】
ユーザプログラムメモリ（ＵＭ）１０１は、ユーザプログラムを格納するメモリである。入出力メモリ（ＩＯＭ）１０２は、外部Ｉ／Ｏ割付用のメモリ、あるいはユーザプログラムで使用するデータメモリ等として使用されるメモリである。ＲＯＭ１０３は、システムプログラムを格納するメモリである。ワークＲＡＭ１０４は、システムワークとして使用されるメモリである。データ格納用不揮発性メモリ１０５は、異常通知の設定や異常ステータス等を格納するメモリである。ＡＳＩＣ１０６は、ユーザプログラムメモリ（ＵＭ）１０１からプログラムを順番に読み出して実行し、実行結果を、入出力メモリ（ＩＯＭ）１０２へ書き込む機能を有する。
【００２３】
マイクロプロセッサ（ＭＰＵ）１０７は、ＣＰＵユニット１の全体を統括制御するものである。ＲＯＭ１０３には、マイクロプロセッサ（ＭＰＵ）１０７で処理されるシステムプログラムが記憶され、データ格納用不揮発性メモリ１０５には、バックアップされたユーザプログラムが記憶されている。ワークＲＡＭ１０４には、マイクロプロセッサ（ＭＰＵ）１０７の処理全般にわたる各種データが記憶される。入出力メモリ（ＩＯＭ）１０２は、プログラム実行により入出力装置に対して入出力される入出力情報の代用として参照／書き換えられるメモリである。ユーザプログラムメモリ（ＵＭ）１０１には、データ格納用不揮発性メモリと等価なユーザプログラムが記憶され、ここから読み出されたユーザプログラムが実行される。ＡＳＩＣ１０６は、ユーザプログラムメモリ（ＵＭ）１０１からプログラムを順番に読み出し実行し、実行結果を、入出力メモリ（ＩＯＭ）１０２へと書き込む。
【００２４】
周知のように、ＣＰＵユニット１の基本的な動作は、共通処理、Ｉ／Ｏリフレッシュ処理、ユーザプログラム実行処理、周辺サービス処理を１サイクルとして、これを繰り返し実行するものである。この一巡実行サイクルのことを、以下に「サイクル」と称する。
【００２５】
この種のＰＬＣのユーザプログラムを実行するためのタスクは、「サイクル実行タスク」と「割込実行タスク」とに大別されるのが一般的である。また、「割込実行タスク」には、電断割込、定時割込、Ｉ／Ｏ割込、及び外部割込の４種類が存在する。
【００２６】
サイクル実行タスクに割り付けられたプログラムモジュールは、１サイクルに１回（先頭からＥＮＤ命令まで）、タスクの状態が実行可能状態と呼ばれる状態になれば、タスクナンバーの若い順に順次実行される。割込実行タスクに割り付けられたプログラムモジュールは、割込要求が発生すると、上記サイクル実行タスク／追加タスクが実行中であっても、強制的に割り込んで実行される。ユーザプログラム実行処理、Ｉ／Ｏリフレッシュ処理、周辺サービス処理のサイクル内の任意のタイミングで条件成立時に実行される。以上述べたサイクル実行タスクと割込実行タスクとの関係が図２の説明図にまとめて示されている。
【００２７】
タスクとプログラムとの関係を示す説明図が図３に示されている。同図に示されるように、この例にあっては、プログラムモジュールＡはサイクル実行タスク０に、プログラムモジュールＢは割込実行タスク１００に、プログラムモジュールＣはサイクル実行タスク１に、プログラムモジュールＤはサイクル実行タスクｎにそれぞれ割り付けられており、Ｉ／Ｏリフレッシュ処理に先立ってそれらの処理が実行される。この場合、プログラムモジュールＡ→プログラムモジュールＣ→プログラムモジュールＤの順に通常は実行される。例えば、プログラムモジュールＡの実行中に、割込実行タスク１００の割込条件が成立すると、プログラムモジュールＡの実行は中断され、プログラムモジュールＢが実行された後、プログラムモジュールＡの実行が中断された位置から、再開される。
【００２８】
図２や図３に示されるように、「サイクル実行タスク」と「割込実行タスク」とでユーザプログラムを実行するＰＬＣにあっては、さほど高速実行を必要としないプログラムモジュールについても毎サイクル一巡実行されるため、プログラムモジュールの数が増大するにつれて、１サイクル時間が長大化することにより、本来高速実行を必要とするプログラムモジュールの実行に支障を来す。そこで、本発明にあっては、１個のプログラムモジュールを複数サイクルをかけて比較的低速に実行するようにした「分割実行タスク」を導入する。「分割実行タスク」を導入するについては、以下の２つの方法が考えられる。
【００２９】
第１の方法は、図４に示されるように、サイクル実行タスクの実行中に分割実行タスク処理を行うものである。
【００３０】
この場合、図１に示されるＣＰＵユニット１内のユーザプログラムメモリ（ＵＭ）１０１には、サイクル実行タスク０、サイクル実行タスク１、分割実行タスク２、サイクル実行タスク３・・・分割実行タスクｍ、サイクル実行タスクｎにそれぞれ割り付けられるべき複数のプログラムモジュールが格納されている。
【００３１】
これらのプログラムモジュールは、実行タスクナンバーの順でユーザプログラムメモリ（ＵＭ）１０１から読み出され、ＡＳＩＣ１０６で命令実行条件の解析が行われ、命令が実行される。サイクル実行タスク、または分割実行タスクが実行中に、割込実行タスクの実行条件が成立した場合は、現在実行中のタスクの実行を中断し、当該タスクの実行条件を退避し、割込実行タスクを実行する。割込実行タスクの実行が完了すると、割込実行タスクの実行前の状態に戻し（退避したタスク実行条件を復元する）、割込実行タスクの実行前の処理を再開する。
【００３２】
このように、図４に示される例にあっては、規定分量ずつの分割実行（分割実行タスク２，分割実行タスクｍ）は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われる。そのため、サイクル実行タスクに割り当てられた一連のプログラムモジュールとの連繋が容易となり、ユーザプログラムの設計自由度が向上される。
【００３３】
第２の方法は、図５に示されるように、全サイクル実行タスクを実行完了後、分割実行タスク処理を行うものである。
【００３４】
すなわち、この例にあっても、ユーザプログラムメモリ（ＵＭ）１０１には、サイクル実行タスク０、サイクル実行タスク１、サイクル実行タスク２・・・、サイクル実行タスクｎ、分割実行タスク０、分割実行タスク１、分割実行タスク２にそれぞれ割り付けられるべき複数のプログラムモジュールが格納されている。
【００３５】
これらのプログラムモジュールは、まず、サイクル実行タスクがタスクナンバーの順でユーザプログラムメモリ（ＵＭ）１０１から呼び出されて実行され、その後、分割実行タスクがタスクナンバーの順に読み出されて実行される。
【００３６】
図から明らかなように、規定分量ずつの分割実行（分割実行タスク０，１）は、サイクル実行タスク（サイクル実行タスク０，１，２・・・ｎ）に割り当てられた一連のプログラムモジュールの実行期間の終了後に行われる。このようにすれば、分割実行処理を実現するためのシステムプログラムの設計が容易となる。
【００３７】
すなわち、全サイクル実行タスクの実行完了後、分割実行タスク処理を行う例を示すタイムチャートが図９に、同処理を行うためのシステムプログラムのフローチャートが図１０にそれぞれ示されている。
【００３８】
それらの図から明らかなように、まず、サイクル実行タスク１，２，３が順に実行される（ステップ１００１，１００２）。しかる後、分割実行タスク０が実行される。１サイクル目の実行では（ステップ１００３ＹＥＳ）、分割実行タスク０の起動が行われ（ステップ１００６）、２回目以降の分割実行タスク０の実行では（ステップ１００３ＮＯ）、内部情報の復帰と分割実行タスク０の再開処理とが行われる（ステップ１００４，１００５）。その後、分割実行タスク０の実行中断タイミングの到来を待って（ステップ１００７）、分割実行タスク０の中断処理が行われ（ステップ１００８）、同時に内部情報の退避処理（ステップ１００９）が実行される。
【００３９】
その結果、図９のタイムチャートに示されるように、まず１サイクル目のスキャンにおいては、共通処理に続いて、サイクル実行タスク１，２，３が順に実行され（実際には、サイクル実行タスク２は割込実行タスク０によって中断される）、サイクル実行タスク３が終了するのを待って、分割実行タスク０が実行を開始され、規定分量のプログラムが実行された後、分割実行タスク０の実行は中断されて、内部情報を保存した後、Ｉ／Ｏリフレッシュ処理が実行されて、１サイクル目から２サイクル目への移行が行われる。
【００４０】
２サイクル目のサイクル実行タスク１，２，３が全て完了した後、１サイクル目で退避した内部情報を復帰させ、先に中断した分割実行タスク０を再開する。分割実行タスク０を規定分量実行した後で分割実行タスク０の実行を中断し、内部情報を保存する。３サイクル目以降では、以上の処理を繰り返す。
【００４１】
以上説明したように、本発明にあっては、ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、１サイクル実行で規定される高速応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保されるようにしたものである。
【００４２】
殊に、図４に示される例にあっては、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われるようにしたため、サイクル時間タスクに割り当てられた一連のプログラムモジュールとの連繋が容易となり、ユーザプログラムの設計自由度が向上する。
【００４３】
また、図５に示される例にあっては、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の終了後に行われるようにしたため、分割実行処理を実現するためのシステムプログラムの設計が容易となる。
【００４４】
次に、１サイクルあたりの分割実行量（規定分量）の決定方法の説明図が図６に示されている。同図に示されるように、この決定方法には、（１）に示される、設定時間で実行を区切る方法と、（２）に示される、設定ステップ数実行後で区切る方法とが存在する。
【００４５】
図６（１）に示されるように、１回の分割実行の規定分量が実行時間で決定されるようにすれば、１サイクル時間の余裕度合いを勘案しつつ、規定分量を適切に設定することができる。
【００４６】
図６（２）に示されるように、１回の分割実行の規定分量がプログラムのステップ数で決定されるようにすれば、プログラムモジュールの大小に拘わらず、規定分量を適切に設定することが可能となる。
【００４７】
次に、複数の分割実行タスクのサイクル内割り当て方法の説明図（その１）が図７に示されている。
【００４８】
同図に示されるように、この例にあっては、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールについて毎サイクル行われる。
【００４９】
すなわち、分割実行タスクｍ，ｍ＋１，ｍ＋２のそれぞれについての規定分量ずつの分割実行が、何れのサイクルにおいても全て存在する。このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて僅かに遅らせつつ低速実行させることができる。
【００５０】
次に、複数の分割実行タスクのサイクル内割り当て方法の説明図（その２）が図８に示されている。
【００５１】
同図に示されるように、この例にあっては、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールから１プログラムモジュールを毎サイクル交替に選んで１モジュールずつ行われる。
【００５２】
すなわち、ｎ回目のサイクルでは分割実行タスクｍの規定分量が、ｎ＋１回目のサイクルでは分割実行タスクｍ＋１の規定分量が、ｎ＋２回目のサイクルでは分割実行タスクｍ＋２の規定分量が、ｎ＋３回目のサイクルでは分割実行タスクｍの規定分量が、ｎ＋４回目のサイクルでは分割実行タスクｍ＋１の規定分量がそれぞれ分割実行される。
【００５３】
このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて大きく遅らせつつ低速実行させることができる。
【００５４】
次に、図７に示される分割実行動作を実現するためのシステムプログラムの手順を以下に具体的に説明する。なお、ここでは、図５に示されるように全サイクル実行タスクを実行完了後、分割実行タスクの実行処理を行なう方法を前提として説明する。
（１）分割実行タスクｍ〜ｍ＋２は、最終ステップ実行すると分割実行タスクｍの先頭ステップを実行するループプログラムとする。
（２）プログラム実行前に分割実行タスクｍの実行条件パラメータをテーブルに内部情報ｍとして登録する。
（３）プログラム実行前に分割実行タスクｍ＋１の実行条件パラメータをテーブルに内部情報ｍ＋１として登録する。
（４）プログラム実行前に分割実行タスクｍ＋２の実行条件パラメータをテーブルに内部情報ｍ＋２として登録する。
（５）ｎサイクル目のサイクル実行タスクの実行が全て完了後に内部情報ｍを復帰して分割実行タスクｍを起動する。
（６）分割実行タスクｍの実行中断タイミングで分割実行タスクｍを中断し、ユーザプログラム実行の内部情報ｍを保存する。
（７）内部情報ｍ＋１を復帰して分割実行タスクｍ＋１を起動する。
（８）分割実行タスクｍ＋１の実行中断タイミングで分割実行タスクｍ＋１を中断し、ユーザプログラム実行の内部情報ｍ＋１を保存する。
（９）内部情報ｍ＋２を復帰して、分割実行タスクｍ＋２を起動する。
（１０）分割実行タスクｍ＋２の実行中断タイミングで分割実行タスクｍ＋２を中断し、ユーザプログラム実行の内部情報ｍ＋２を保存する。
（１１）ｎ＋１サイクル目以降は、（５）〜（１０）を繰り返す。
【００５５】
次に、図８に示される分割実行動作を実現するためのシステムプログラムの手順を以下に具体的に説明する。この説明においても、図５に示されるように全サイクル実行タスクを実行完了後、分割実行タスクの実行処理を行なう方法を前提とする。
（１）分割実行タスクｍ〜ｍ＋２は、最終ステップ実行すると分割実行タスクｍの先頭ステップを実行するループプログラムとする。
（２）プログラム実行前に分割実行タスクｍの実行条件パラメータをテーブルに内部情報ｍとして登録する。
（３）プログラム実行前に分割実行タスクｍ＋１の実行条件パラメータをテーブルに内部情報ｍ＋１として登録する。
（４）プログラム実行前に分割実行タスクｍ＋２の実行条件パラメータをテーブルに内部情報ｍ＋２として登録する。
（５）ｎサイクル目のサイクル実行タスクの実行が全て完了後に内部情報ｍを復帰して分割実行タスクｍを起動する。
（６）分割実行タスクｍの実行中断タイミングで分割実行タスクｍを中断し、ユーザプログラム実行の内部情報ｍを保存する。
（７）ｎ＋１サイクル目のサイクル実行タスクを実行し、実行が全て完了後に内部情報ｍ＋１を復帰して分割実行タスクｍ＋１を起動する。
（８）分割実行タスクｍ＋１の実行中断タイミングで分割実行タスクｍ＋１を中断し、ユーザプログラム実行の内部情報ｍ＋１を保存する。
（９）ｎ＋２サイクル目のサイクル実行タスクを実行し、実行が全て完了後に内部情報ｍ＋２を復帰して分割実行タスクｍ＋２を起動する。
（１０）分割実行タスクｍ＋２の実行中断タイミングで分割実行タスクｍ＋２を中断し、ユーザプログラム実行の内部情報ｍ＋２を保存する。
（１１）（５）〜（１０）を繰り返す。
【００５６】
次に、図７に示されるように複数の分割実行タスクを１サイクルの一定時間または一定ステップを処理する場合のフローチャートが図１１及び図１２に示されている。図１１において、ステップ１１０１では、分割実行すべきタスクがあるか否かの判定を行う。ここで分割実行すべきタスクがなければ他の処理へと移行するのに対し、分割実行すべきタスクがあれば（ステップ１１０１）、ステップ１１０２へと進む。
【００５７】
ステップ１１０２では、分割実行タスクの実行方式についての判定が行われる。この判定は、実行方式が「時間固定／１サイクル」か、あるいは「ステップ／１サイクル」かの判定を行う。ここで、判定結果が「時間固定／１サイクル」であれば、続くステップ１１０３へと進むのに対し、判定結果が「ステップ／１サイクル」であれば、ステップ１１０６への移行が行われる。
【００５８】
ステップ１１０３では、タイマ設定及び実行予定分割実行タスクの実行を行う。ステップ１１０４では、設定時間タイマをスタートさせる。以後ステップ１１０５では、実行予定となる分割実行タスクを実行する。このタスクの実行中に、ステップ１１０３で設定されかつステップ１１０４でスタートされたタイマによって割込が発生すると、図１２へ移って、ステップ１２０１ではユーザプログラム実行停止処理が実行され、続くステップ１２０２では停止の確認が行われ、その確認を待ってタスクの実行は中断される。
【００５９】
一方、ステップ１１０２において「ステップ／１サイクル」と判定されると、続くステップ１１０６では、設定ステップ数の設定および実行予定分割実行タスクの実行が行われ、続くステップ１１０７では設定ステップカウントスタートが行われ、しかる後、ステップ１１０８において実行予定分割実行タスクの実行が開始される。
【００６０】
このタスク実行中に、ステップ１１０６で設定されかつステップ１１０７でスタートされたカウンタによりステップカウント割込が発生すると、図１２へ移って、ステップ１２０１ではユーザプログラム実行停止処理が実行され、続くステップ１２０２では停止の確認が行われ、確認されるのを待って、タスクの実行は中断する。
【００６１】
以上図１１及び図１２に示される処理が実行される結果、図５に示される全サイクル実行タスクを実行完了後、分割実行タスク処理を行う動作が実現される。
【００６２】
次に、図８に示されるように各分割実行タスクを１サイクルの一定時間または一定ステップを処理する場合のフローチャートが図１３及び図１４に示されている。図１３において処理が開始されると、ステップ１３０１においては、分割実行すべきタスクの有無が判定される。ここで該当タスクが存在しないと判定されれば（ステップ１３０１ＮＯ）、他の処理への移行が行われるのに対し、該当タスクが存在すれば（ステップ１３０１ＹＥＳ）、ステップ１３０２への移行が行われる。
【００６３】
ステップ１３０２においては、分割実行タスクの実行方式が判定される。この例にあっても、分割実行タスクの実行方式としては、「実行時間／１サイクル」と「ステップ数／１サイクル」とが用意されている。
【００６４】
ここで、判定結果が「時間固定／１サイクル」であれば、ステップ１３０３が実行されて、タイマ設定および実行予定分割実行タスクの実行が行われ、続くステップ１３０４では設定時間タイマスタートが行われ、続くステップ１３０５では実行予定分割実行タスクの実行が行われる。
【００６５】
この状態において、ステップ１３０３において設定されかつステップ１３０４においてスタートされたタイマにより割込が発生すると、図１４へ移って、ステップ１４０１においてユーザプログラム実行停止処理が実行され、続くステップ１４０２において停止の確認が行われ、停止の確認を待って実行中分割実行タスクは終了する。
【００６６】
再び図１３に戻って、実行中分割実行タスクが終了すると（ステップ１３０６）、再びステップ１３０３へ戻って、先の処理ステップ１３０３，１３０４，１３０５が繰り返し実行される。その結果、番号順に順次タスクを進めつつ、それぞれのタスクにおいて規定分量ずつの分割実行が行われる。
【００６７】
一方、ステップ１３０２において「ステップ数／１サイクル」と判定されると、ステップ１３０７へ移って、設定ステップ数の設定および実行予定分割実行タスクの実行が行われ、続くステップ１３０８において設定ステップカウントスタートが行われ（ステップ１３０８）、しかる後ステップ１３０９において実行予定分割実行タスクの実行が開始される。
【００６８】
このタスクの実行中に、ステップ１３０７において設定されかつステップ１３０８においてスタートされたステップカウンタによりカウント割込が発生すると、図１４へ移って、ステップ１４０１においてユーザプログラム実行停止処理が行われ、続くステップ１４０２において停止の確認が行われた後、処理は終了する。
【００６９】
再び図１３に戻って、実行中分割実行タスクが終了すると（ステップ１３１０）、再びステップ１３０７へ戻って、以上の処理ステップ１３０７〜１３０９が繰り返し実行される。その結果、各タスクは規定分量ずつ分割実行される。
【００７０】
以上説明した図１３及び図１４の処理が実行される結果、図４に示されるように、サイクル実行タスクの実行中（合間）に、分割実行タスク処理を行う動作が実現される。
【産業上の利用可能性】
【００７１】
本発明によれば、本来的に高速実行を要求するプログラムモジュールについては１サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了させることができる。
【図面の簡単な説明】
【００７２】
【図１】プログラマブル・コントローラのＣＰＵユニットのハードウェア構成図である。
【図２】サイクル実行タスクと割込実行タスクとの関係を示す説明図である。
【図３】タスクとプログラムとの関係を示す説明図である。
【図４】サイクル実行タスクの実行中（合間）に分割実行タスク処理を行う例の説明図である。
【図５】全サイクル実行タスクを実行完了後、分割実行タスク処理を行う例の説明図である。
【図６】１サイクルあたりの分割実行量の決定方法の説明図である。
【図７】複数の分割実行タスクのサイクル内割り当て方法の説明図（その１）である。
【図８】複数の分割実行タスクのサイクル内割り当て方法の説明図（その２）である。
【図９】全サイクル実行タスクの実行完了後、分割実行タスク処理を行う例を示すタイムチャートである。
【図１０】全サイクル実行タスクの実行完了後、分割実行タスク処理を行うためのシステムプログラムのフローチャートである。
【図１１】複数の分割実行タスクを１サイクルの一定時間または一定ステップを処理する場合のフローチャート（その１）である。
【図１２】複数の分割実行タスクを１サイクルの一定時間または一定ステップ数処理する場合のフローチャート（その２）である。
【図１３】各分割実行タスクを１サイクルの一定時間または一定ステップを処理する場合のフローチャート（その１）である。
【図１４】各分割実行タスクを１サイクルの一定時間または一定ステップ数を処理する場合のフローチャート（その２）である。
【符号の説明】
【００７３】
１  ＣＰＵユニット
１０１  ユーザプログラムメモリ
１０２  入出力メモリ
１０３  ＲＯＭ
１０４  ワークＲＡＭ
１０５  データ格納用不揮発性メモリ
１０６  ＡＳＩＣ
１０７  マイクロプロセッサ（ＭＰＵ）
【図１】
2006294010.tif 000003
【図２】
2006294010.tif 000004
【図３】
2006294010.tif 000005
【図４】
2006294010.tif 000006
【図５】
2006294010.tif 000007
【図６】
2006294010.tif 000008
【図７】
2006294010.tif 000009
【図８】
2006294010.tif 000010
【図９】
2006294010.tif 000011
【図１０】
2006294010.tif 000012
【図１１】
2006294010.tif 000013
【図１２】
2006294010.tif 000014
【図１３】
2006294010.tif 000015
【図１４】
2006294010.tif 000016