JP2006294010A - プログラマブル・コントローラのユーザプログラム実行方法 - Google Patents
プログラマブル・コントローラのユーザプログラム実行方法 Download PDFInfo
- Publication number
- JP2006294010A JP2006294010A JP2006071710A JP2006071710A JP2006294010A JP 2006294010 A JP2006294010 A JP 2006294010A JP 2006071710 A JP2006071710 A JP 2006071710A JP 2006071710 A JP2006071710 A JP 2006071710A JP 2006294010 A JP2006294010 A JP 2006294010A
- Authority
- JP
- Japan
- Prior art keywords
- execution
- cycle
- divided
- task
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Programmable Controllers (AREA)
Abstract
【課題】本来的に高速実行を要求するプログラムモジュールについては1サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了とする。
【解決手段】ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させる。
【選択図】図7
【解決手段】ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させる。
【選択図】図7
Description
本発明は、ユーザプログラムを構成する複数個のプログラムモジュールをそれぞれ分割実行タスクに割り付けることにより、個々のプログラムモジュールを複数のサイクルをかけて比較的低速に実行可能としたプログラマブル・コントローラ(以下、「PLC」と言う)のユーザプログラム実行方法に関する。
PLCのユーザプログラムが複数のプログラムモジュールで構成される場合、PLC上での実行単位をプログラムモジュール単位とする場合がある。その場合は、その実行単位をタスクと呼ぶことがある。そのタスクは、「サイクル実行タスク」と「割込実行タスク」とに大別されるのが一般的である。
一例としては、サイクル実行タスクに割り付けられたプログラムモジュールは、その実行条件が成立するのを待って、毎サイクルにつき先頭から末尾(END命令)まで、タスクNo.の若いものから順に、一巡実行される。
これに対して、割込実行タスクに割り付けられたプログラムモジュールは、その割込条件が成立した場合に割込により実行される。例えば、サイクル実行タスクを実行中に割込条件が成立した場合は、サイクルク実行タスクに割り付けられたプログラムモジュールの実行を強制的に中断して、割込実行タスクに割り付けられたプログラムモジュールが実行される。
このような「サイクル実行タスク」と「割込実行タスク」とでユーザプログラムを実行するPLCにあっては、さほど高速実行を必要としないプログラムモジュールについても毎サイクル一巡実行されるため、プログラムモジュールの数が増大するに連れて、1サイクル時間が長大化することにより、本来高速実行を必要とするプログラムモジュールの実行に支障を来す。特に、プログラムモジュール内で使用される命令が大容量のテーブルや文字列を処理するような命令の場合は、その命令の実行に多大の処理時間を要するため1サイクル時間の長大化に拍車をかけることになる。
そこで、実行に長時間を要する命令を複数のサイクルにわたって実行可能とするPLCが従来より知られている(特許文献1参照)。
特開2002-268708号公報
しかしながら、上述の実行に長時間を要する命令を複数のサイクルにわたって実行可能とするPLCにあっても、実行に長時間を要する命令がプログラムモジュール内に多数存在したり、そのようなプログラムモジュールの数が増加した場合の対策は全く考慮されてはいない。
この発明は、上述した従来の問題点に着目してなされたものであり、その目的とするところは、本来的に高速実行を要求するプログラムモジュールについては1サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスク(プログラムモジュールを複数サイクルにかけて実行するもの)に割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了できるようにしたPLCのユーザプログラム実行方法を提供することにある。
この発明のさらに他の目的並びに作用効果については、明細書の以下の記述を参照することにより、当業者であれば容易に理解されるであろう。
この発明のプログラマブル・コントローラのユーザプログラム実行方法は、ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、1サイクル時間で規定される高速時間内での応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保される、ことを特長とするものである。
このような構成によれば、本来的に高速実行を要求するプログラムモジュールについては1サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了できることとなる。
このとき、1回の分割実行の規定分量はステップ数で決定されるようにしてもよい。このようにすれば、プログラムモジュールの大小に拘わらず、規定分量を適切に設定することができる。
また、1回の分割実行の規定分量は実行時間で決定されるようにしてもよい。このようにすれば、1サイクル時間の余裕度合を勘案しつつ、規定分量を適切に設定することができる。
また、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールについて一括して毎サイクル行われる、ようにしてもよい。このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて僅かに遅らせつつ低速実行させることができる。
また、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールから1プログラムモジュールを毎サイクル交替に選んで1モジュールずつ行われるようにしてもよい。このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて大きく遅らせつつ低速実行させることができる。
また、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の終了後に行われるようにしてもよい。このようにすれば、分割実行処理を実現するためのシステムプログラムの設計が容易となる。
さらに、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われるようにしてもよい。このようにすれば、サイクル実行タスクに割り当てられた一連のプログラムモジュールとの連繋が容易となり、ユーザプログラムの設計自由度が向上する。
本発明によれば、本来的に高速実行を要求するプログラムモジュールについては1サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了させることができる。
以下に、この発明の好適な実施の一形態を添付図面を参照しながら詳細に説明する。先に述べたように、本発明のPLCのユーザプログラム実行方法は、ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、1サイクル時間で規定される高速応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保されるようにしたものである。
そこで、まず、このようなユーザプログラム実行方法が適用されるPLCそれ自体について説明する。周知のごとく、PLCは、CPUユニットと、I/Oユニットと、各種特殊機能ユニット等を含んで構成される。
PLCのCPUユニットのハードウェア構成図が図1に示されている。同図に示されるように、このCPUユニット1は、ユーザプログラムメモリ(UM)101と、入出力メモリ(IOM)102と、ROM103と、ワークRAM104と、データ格納用不揮発性メモリ105と、アプリケーションスペシフィックIC(ASIC)106と、マイクロプロセッサ(MPU)107とを含んでいる。
ユーザプログラムメモリ(UM)101は、ユーザプログラムを格納するメモリである。入出力メモリ(IOM)102は、外部I/O割付用のメモリ、あるいはユーザプログラムで使用するデータメモリ等として使用されるメモリである。ROM103は、システムプログラムを格納するメモリである。ワークRAM104は、システムワークとして使用されるメモリである。データ格納用不揮発性メモリ105は、異常通知の設定や異常ステータス等を格納するメモリである。ASIC106は、ユーザプログラムメモリ(UM)101からプログラムを順番に読み出して実行し、実行結果を、入出力メモリ(IOM)102へ書き込む機能を有する。
マイクロプロセッサ(MPU)107は、CPUユニット1の全体を統括制御するものである。ROM103には、マイクロプロセッサ(MPU)107で処理されるシステムプログラムが記憶され、データ格納用不揮発性メモリ105には、バックアップされたユーザプログラムが記憶されている。ワークRAM104には、マイクロプロセッサ(MPU)107の処理全般にわたる各種データが記憶される。入出力メモリ(IOM)102は、プログラム実行により入出力装置に対して入出力される入出力情報の代用として参照/書き換えられるメモリである。ユーザプログラムメモリ(UM)101には、データ格納用不揮発性メモリと等価なユーザプログラムが記憶され、ここから読み出されたユーザプログラムが実行される。ASIC106は、ユーザプログラムメモリ(UM)101からプログラムを順番に読み出し実行し、実行結果を、入出力メモリ(IOM)102へと書き込む。
周知のように、CPUユニット1の基本的な動作は、共通処理、I/Oリフレッシュ処理、ユーザプログラム実行処理、周辺サービス処理を1サイクルとして、これを繰り返し実行するものである。この一巡実行サイクルのことを、以下に「サイクル」と称する。
この種のPLCのユーザプログラムを実行するためのタスクは、「サイクル実行タスク」と「割込実行タスク」とに大別されるのが一般的である。また、「割込実行タスク」には、電断割込、定時割込、I/O割込、及び外部割込の4種類が存在する。
サイクル実行タスクに割り付けられたプログラムモジュールは、1サイクルに1回(先頭からEND命令まで)、タスクの状態が実行可能状態と呼ばれる状態になれば、タスクナンバーの若い順に順次実行される。割込実行タスクに割り付けられたプログラムモジュールは、割込要求が発生すると、上記サイクル実行タスク/追加タスクが実行中であっても、強制的に割り込んで実行される。ユーザプログラム実行処理、I/Oリフレッシュ処理、周辺サービス処理のサイクル内の任意のタイミングで条件成立時に実行される。以上述べたサイクル実行タスクと割込実行タスクとの関係が図2の説明図にまとめて示されている。
タスクとプログラムとの関係を示す説明図が図3に示されている。同図に示されるように、この例にあっては、プログラムモジュールAはサイクル実行タスク0に、プログラムモジュールBは割込実行タスク100に、プログラムモジュールCはサイクル実行タスク1に、プログラムモジュールDはサイクル実行タスクnにそれぞれ割り付けられており、I/Oリフレッシュ処理に先立ってそれらの処理が実行される。この場合、プログラムモジュールA→プログラムモジュールC→プログラムモジュールDの順に通常は実行される。例えば、プログラムモジュールAの実行中に、割込実行タスク100の割込条件が成立すると、プログラムモジュールAの実行は中断され、プログラムモジュールBが実行された後、プログラムモジュールAの実行が中断された位置から、再開される。
図2や図3に示されるように、「サイクル実行タスク」と「割込実行タスク」とでユーザプログラムを実行するPLCにあっては、さほど高速実行を必要としないプログラムモジュールについても毎サイクル一巡実行されるため、プログラムモジュールの数が増大するにつれて、1サイクル時間が長大化することにより、本来高速実行を必要とするプログラムモジュールの実行に支障を来す。そこで、本発明にあっては、1個のプログラムモジュールを複数サイクルをかけて比較的低速に実行するようにした「分割実行タスク」を導入する。「分割実行タスク」を導入するについては、以下の2つの方法が考えられる。
第1の方法は、図4に示されるように、サイクル実行タスクの実行中に分割実行タスク処理を行うものである。
この場合、図1に示されるCPUユニット1内のユーザプログラムメモリ(UM)101には、サイクル実行タスク0、サイクル実行タスク1、分割実行タスク2、サイクル実行タスク3・・・分割実行タスクm、サイクル実行タスクnにそれぞれ割り付けられるべき複数のプログラムモジュールが格納されている。
これらのプログラムモジュールは、実行タスクナンバーの順でユーザプログラムメモリ(UM)101から読み出され、ASIC106で命令実行条件の解析が行われ、命令が実行される。サイクル実行タスク、または分割実行タスクが実行中に、割込実行タスクの実行条件が成立した場合は、現在実行中のタスクの実行を中断し、当該タスクの実行条件を退避し、割込実行タスクを実行する。割込実行タスクの実行が完了すると、割込実行タスクの実行前の状態に戻し(退避したタスク実行条件を復元する)、割込実行タスクの実行前の処理を再開する。
このように、図4に示される例にあっては、規定分量ずつの分割実行(分割実行タスク2,分割実行タスクm)は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われる。そのため、サイクル実行タスクに割り当てられた一連のプログラムモジュールとの連繋が容易となり、ユーザプログラムの設計自由度が向上される。
第2の方法は、図5に示されるように、全サイクル実行タスクを実行完了後、分割実行タスク処理を行うものである。
すなわち、この例にあっても、ユーザプログラムメモリ(UM)101には、サイクル実行タスク0、サイクル実行タスク1、サイクル実行タスク2・・・、サイクル実行タスクn、分割実行タスク0、分割実行タスク1、分割実行タスク2にそれぞれ割り付けられるべき複数のプログラムモジュールが格納されている。
これらのプログラムモジュールは、まず、サイクル実行タスクがタスクナンバーの順でユーザプログラムメモリ(UM)101から呼び出されて実行され、その後、分割実行タスクがタスクナンバーの順に読み出されて実行される。
図から明らかなように、規定分量ずつの分割実行(分割実行タスク0,1)は、サイクル実行タスク(サイクル実行タスク0,1,2・・・n)に割り当てられた一連のプログラムモジュールの実行期間の終了後に行われる。このようにすれば、分割実行処理を実現するためのシステムプログラムの設計が容易となる。
すなわち、全サイクル実行タスクの実行完了後、分割実行タスク処理を行う例を示すタイムチャートが図9に、同処理を行うためのシステムプログラムのフローチャートが図10にそれぞれ示されている。
それらの図から明らかなように、まず、サイクル実行タスク1,2,3が順に実行される(ステップ1001,1002)。しかる後、分割実行タスク0が実行される。1サイクル目の実行では(ステップ1003YES)、分割実行タスク0の起動が行われ(ステップ1006)、2回目以降の分割実行タスク0の実行では(ステップ1003NO)、内部情報の復帰と分割実行タスク0の再開処理とが行われる(ステップ1004,1005)。その後、分割実行タスク0の実行中断タイミングの到来を待って(ステップ1007)、分割実行タスク0の中断処理が行われ(ステップ1008)、同時に内部情報の退避処理(ステップ1009)が実行される。
その結果、図9のタイムチャートに示されるように、まず1サイクル目のスキャンにおいては、共通処理に続いて、サイクル実行タスク1,2,3が順に実行され(実際には、サイクル実行タスク2は割込実行タスク0によって中断される)、サイクル実行タスク3が終了するのを待って、分割実行タスク0が実行を開始され、規定分量のプログラムが実行された後、分割実行タスク0の実行は中断されて、内部情報を保存した後、I/Oリフレッシュ処理が実行されて、1サイクル目から2サイクル目への移行が行われる。
2サイクル目のサイクル実行タスク1,2,3が全て完了した後、1サイクル目で退避した内部情報を復帰させ、先に中断した分割実行タスク0を再開する。分割実行タスク0を規定分量実行した後で分割実行タスク0の実行を中断し、内部情報を保存する。3サイクル目以降では、以上の処理を繰り返す。
以上説明したように、本発明にあっては、ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、1サイクル実行で規定される高速応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保されるようにしたものである。
殊に、図4に示される例にあっては、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われるようにしたため、サイクル時間タスクに割り当てられた一連のプログラムモジュールとの連繋が容易となり、ユーザプログラムの設計自由度が向上する。
また、図5に示される例にあっては、規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の終了後に行われるようにしたため、分割実行処理を実現するためのシステムプログラムの設計が容易となる。
次に、1サイクルあたりの分割実行量(規定分量)の決定方法の説明図が図6に示されている。同図に示されるように、この決定方法には、(1)に示される、設定時間で実行を区切る方法と、(2)に示される、設定ステップ数実行後で区切る方法とが存在する。
図6(1)に示されるように、1回の分割実行の規定分量が実行時間で決定されるようにすれば、1サイクル時間の余裕度合いを勘案しつつ、規定分量を適切に設定することができる。
図6(2)に示されるように、1回の分割実行の規定分量がプログラムのステップ数で決定されるようにすれば、プログラムモジュールの大小に拘わらず、規定分量を適切に設定することが可能となる。
次に、複数の分割実行タスクのサイクル内割り当て方法の説明図(その1)が図7に示されている。
同図に示されるように、この例にあっては、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールについて毎サイクル行われる。
すなわち、分割実行タスクm,m+1,m+2のそれぞれについての規定分量ずつの分割実行が、何れのサイクルにおいても全て存在する。このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて僅かに遅らせつつ低速実行させることができる。
次に、複数の分割実行タスクのサイクル内割り当て方法の説明図(その2)が図8に示されている。
同図に示されるように、この例にあっては、規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールから1プログラムモジュールを毎サイクル交替に選んで1モジュールずつ行われる。
すなわち、n回目のサイクルでは分割実行タスクmの規定分量が、n+1回目のサイクルでは分割実行タスクm+1の規定分量が、n+2回目のサイクルでは分割実行タスクm+2の規定分量が、n+3回目のサイクルでは分割実行タスクmの規定分量が、n+4回目のサイクルでは分割実行タスクm+1の規定分量がそれぞれ分割実行される。
このようにすれば、分割実行タスクに割り付けられた複数のプログラムモジュールを、サイクル実行されるプログラムモジュールと比べて大きく遅らせつつ低速実行させることができる。
次に、図7に示される分割実行動作を実現するためのシステムプログラムの手順を以下に具体的に説明する。なお、ここでは、図5に示されるように全サイクル実行タスクを実行完了後、分割実行タスクの実行処理を行なう方法を前提として説明する。
(1)分割実行タスクm〜m+2は、最終ステップ実行すると分割実行タスクmの先頭ステップを実行するループプログラムとする。
(2)プログラム実行前に分割実行タスクmの実行条件パラメータをテーブルに内部情報mとして登録する。
(3)プログラム実行前に分割実行タスクm+1の実行条件パラメータをテーブルに内部情報m+1として登録する。
(4)プログラム実行前に分割実行タスクm+2の実行条件パラメータをテーブルに内部情報m+2として登録する。
(5)nサイクル目のサイクル実行タスクの実行が全て完了後に内部情報mを復帰して分割実行タスクmを起動する。
(6)分割実行タスクmの実行中断タイミングで分割実行タスクmを中断し、ユーザプログラム実行の内部情報mを保存する。
(7)内部情報m+1を復帰して分割実行タスクm+1を起動する。
(8)分割実行タスクm+1の実行中断タイミングで分割実行タスクm+1を中断し、ユーザプログラム実行の内部情報m+1を保存する。
(9)内部情報m+2を復帰して、分割実行タスクm+2を起動する。
(10)分割実行タスクm+2の実行中断タイミングで分割実行タスクm+2を中断し、ユーザプログラム実行の内部情報m+2を保存する。
(11)n+1サイクル目以降は、(5)〜(10)を繰り返す。
(1)分割実行タスクm〜m+2は、最終ステップ実行すると分割実行タスクmの先頭ステップを実行するループプログラムとする。
(2)プログラム実行前に分割実行タスクmの実行条件パラメータをテーブルに内部情報mとして登録する。
(3)プログラム実行前に分割実行タスクm+1の実行条件パラメータをテーブルに内部情報m+1として登録する。
(4)プログラム実行前に分割実行タスクm+2の実行条件パラメータをテーブルに内部情報m+2として登録する。
(5)nサイクル目のサイクル実行タスクの実行が全て完了後に内部情報mを復帰して分割実行タスクmを起動する。
(6)分割実行タスクmの実行中断タイミングで分割実行タスクmを中断し、ユーザプログラム実行の内部情報mを保存する。
(7)内部情報m+1を復帰して分割実行タスクm+1を起動する。
(8)分割実行タスクm+1の実行中断タイミングで分割実行タスクm+1を中断し、ユーザプログラム実行の内部情報m+1を保存する。
(9)内部情報m+2を復帰して、分割実行タスクm+2を起動する。
(10)分割実行タスクm+2の実行中断タイミングで分割実行タスクm+2を中断し、ユーザプログラム実行の内部情報m+2を保存する。
(11)n+1サイクル目以降は、(5)〜(10)を繰り返す。
次に、図8に示される分割実行動作を実現するためのシステムプログラムの手順を以下に具体的に説明する。この説明においても、図5に示されるように全サイクル実行タスクを実行完了後、分割実行タスクの実行処理を行なう方法を前提とする。
(1)分割実行タスクm〜m+2は、最終ステップ実行すると分割実行タスクmの先頭ステップを実行するループプログラムとする。
(2)プログラム実行前に分割実行タスクmの実行条件パラメータをテーブルに内部情報mとして登録する。
(3)プログラム実行前に分割実行タスクm+1の実行条件パラメータをテーブルに内部情報m+1として登録する。
(4)プログラム実行前に分割実行タスクm+2の実行条件パラメータをテーブルに内部情報m+2として登録する。
(5)nサイクル目のサイクル実行タスクの実行が全て完了後に内部情報mを復帰して分割実行タスクmを起動する。
(6)分割実行タスクmの実行中断タイミングで分割実行タスクmを中断し、ユーザプログラム実行の内部情報mを保存する。
(7)n+1サイクル目のサイクル実行タスクを実行し、実行が全て完了後に内部情報m+1を復帰して分割実行タスクm+1を起動する。
(8)分割実行タスクm+1の実行中断タイミングで分割実行タスクm+1を中断し、ユーザプログラム実行の内部情報m+1を保存する。
(9)n+2サイクル目のサイクル実行タスクを実行し、実行が全て完了後に内部情報m+2を復帰して分割実行タスクm+2を起動する。
(10)分割実行タスクm+2の実行中断タイミングで分割実行タスクm+2を中断し、ユーザプログラム実行の内部情報m+2を保存する。
(11)(5)〜(10)を繰り返す。
(1)分割実行タスクm〜m+2は、最終ステップ実行すると分割実行タスクmの先頭ステップを実行するループプログラムとする。
(2)プログラム実行前に分割実行タスクmの実行条件パラメータをテーブルに内部情報mとして登録する。
(3)プログラム実行前に分割実行タスクm+1の実行条件パラメータをテーブルに内部情報m+1として登録する。
(4)プログラム実行前に分割実行タスクm+2の実行条件パラメータをテーブルに内部情報m+2として登録する。
(5)nサイクル目のサイクル実行タスクの実行が全て完了後に内部情報mを復帰して分割実行タスクmを起動する。
(6)分割実行タスクmの実行中断タイミングで分割実行タスクmを中断し、ユーザプログラム実行の内部情報mを保存する。
(7)n+1サイクル目のサイクル実行タスクを実行し、実行が全て完了後に内部情報m+1を復帰して分割実行タスクm+1を起動する。
(8)分割実行タスクm+1の実行中断タイミングで分割実行タスクm+1を中断し、ユーザプログラム実行の内部情報m+1を保存する。
(9)n+2サイクル目のサイクル実行タスクを実行し、実行が全て完了後に内部情報m+2を復帰して分割実行タスクm+2を起動する。
(10)分割実行タスクm+2の実行中断タイミングで分割実行タスクm+2を中断し、ユーザプログラム実行の内部情報m+2を保存する。
(11)(5)〜(10)を繰り返す。
次に、図7に示されるように複数の分割実行タスクを1サイクルの一定時間または一定ステップを処理する場合のフローチャートが図11及び図12に示されている。図11において、ステップ1101では、分割実行すべきタスクがあるか否かの判定を行う。ここで分割実行すべきタスクがなければ他の処理へと移行するのに対し、分割実行すべきタスクがあれば(ステップ1101)、ステップ1102へと進む。
ステップ1102では、分割実行タスクの実行方式についての判定が行われる。この判定は、実行方式が「時間固定/1サイクル」か、あるいは「ステップ/1サイクル」かの判定を行う。ここで、判定結果が「時間固定/1サイクル」であれば、続くステップ1103へと進むのに対し、判定結果が「ステップ/1サイクル」であれば、ステップ1106への移行が行われる。
ステップ1103では、タイマ設定及び実行予定分割実行タスクの実行を行う。ステップ1104では、設定時間タイマをスタートさせる。以後ステップ1105では、実行予定となる分割実行タスクを実行する。このタスクの実行中に、ステップ1103で設定されかつステップ1104でスタートされたタイマによって割込が発生すると、図12へ移って、ステップ1201ではユーザプログラム実行停止処理が実行され、続くステップ1202では停止の確認が行われ、その確認を待ってタスクの実行は中断される。
一方、ステップ1102において「ステップ/1サイクル」と判定されると、続くステップ1106では、設定ステップ数の設定および実行予定分割実行タスクの実行が行われ、続くステップ1107では設定ステップカウントスタートが行われ、しかる後、ステップ1108において実行予定分割実行タスクの実行が開始される。
このタスク実行中に、ステップ1106で設定されかつステップ1107でスタートされたカウンタによりステップカウント割込が発生すると、図12へ移って、ステップ1201ではユーザプログラム実行停止処理が実行され、続くステップ1202では停止の確認が行われ、確認されるのを待って、タスクの実行は中断する。
以上図11及び図12に示される処理が実行される結果、図5に示される全サイクル実行タスクを実行完了後、分割実行タスク処理を行う動作が実現される。
次に、図8に示されるように各分割実行タスクを1サイクルの一定時間または一定ステップを処理する場合のフローチャートが図13及び図14に示されている。図13において処理が開始されると、ステップ1301においては、分割実行すべきタスクの有無が判定される。ここで該当タスクが存在しないと判定されれば(ステップ1301NO)、他の処理への移行が行われるのに対し、該当タスクが存在すれば(ステップ1301YES)、ステップ1302への移行が行われる。
ステップ1302においては、分割実行タスクの実行方式が判定される。この例にあっても、分割実行タスクの実行方式としては、「実行時間/1サイクル」と「ステップ数/1サイクル」とが用意されている。
ここで、判定結果が「時間固定/1サイクル」であれば、ステップ1303が実行されて、タイマ設定および実行予定分割実行タスクの実行が行われ、続くステップ1304では設定時間タイマスタートが行われ、続くステップ1305では実行予定分割実行タスクの実行が行われる。
この状態において、ステップ1303において設定されかつステップ1304においてスタートされたタイマにより割込が発生すると、図14へ移って、ステップ1401においてユーザプログラム実行停止処理が実行され、続くステップ1402において停止の確認が行われ、停止の確認を待って実行中分割実行タスクは終了する。
再び図13に戻って、実行中分割実行タスクが終了すると(ステップ1306)、再びステップ1303へ戻って、先の処理ステップ1303,1304,1305が繰り返し実行される。その結果、番号順に順次タスクを進めつつ、それぞれのタスクにおいて規定分量ずつの分割実行が行われる。
一方、ステップ1302において「ステップ数/1サイクル」と判定されると、ステップ1307へ移って、設定ステップ数の設定および実行予定分割実行タスクの実行が行われ、続くステップ1308において設定ステップカウントスタートが行われ(ステップ1308)、しかる後ステップ1309において実行予定分割実行タスクの実行が開始される。
このタスクの実行中に、ステップ1307において設定されかつステップ1308においてスタートされたステップカウンタによりカウント割込が発生すると、図14へ移って、ステップ1401においてユーザプログラム実行停止処理が行われ、続くステップ1402において停止の確認が行われた後、処理は終了する。
再び図13に戻って、実行中分割実行タスクが終了すると(ステップ1310)、再びステップ1307へ戻って、以上の処理ステップ1307〜1309が繰り返し実行される。その結果、各タスクは規定分量ずつ分割実行される。
以上説明した図13及び図14の処理が実行される結果、図4に示されるように、サイクル実行タスクの実行中(合間)に、分割実行タスク処理を行う動作が実現される。
本発明によれば、本来的に高速実行を要求するプログラムモジュールについては1サイクル時間を規定値以内に止めることにより高速実行処理を可能とする一方、さほど高速実行を要求しないプログラムモジュールであっても、分割実行タスクに割り付けられたプログラムモジュールの個数に拘わらず、ある程度の決められた時間内に実行完了させることができる。
1 CPUユニット
101 ユーザプログラムメモリ
102 入出力メモリ
103 ROM
104 ワークRAM
105 データ格納用不揮発性メモリ
106 ASIC
107 マイクロプロセッサ(MPU)
101 ユーザプログラムメモリ
102 入出力メモリ
103 ROM
104 ワークRAM
105 データ格納用不揮発性メモリ
106 ASIC
107 マイクロプロセッサ(MPU)
Claims (7)
- ユーザプログラムを構成する複数のプログラムモジュールの中で、サイクル実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを毎サイクル全部実行させると共に、分割実行タスクに割り付けられた複数のプログラムモジュールについては、各プログラムモジュールを規定分量ずつ分割実行させ、それにより、サイクル実行タスクに割り付けられたプログラムモジュールについては、1サイクル時間で規定される時間内での応答性が維持される一方、分割実行タスクに割り付けられたプログラムモジュールについても、全部実行に要するサイクル数で定まる応答性が確保される、ことを特徴とするプログラマブル・コントローラのユーザプログラム実行方法。
- 分割実行される規定分量がステップ数で規定される、ことを特徴とする請求項1に記載のプログラマブル・コントローラのユーザプログラム実行方法。
- 分割実行される規定分量が実行時間で規定される、ことを特徴とする請求項1に記載のプログラマブル・コントローラのユーザプログラム実行方法。
- 規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールについて毎サイクル行われる、ことを特徴とする請求項1〜3のいずれかに記載のプログラマブル・コントローラのユーザプログラム実行方法。
- 規定分量ずつの分割実行は、分割実行タスクに割り付けられた全てのプログラムモジュールから1プログラムモジュールを毎サイクル交替に選んで1モジュールずつ行われる、ことを特徴とする請求項1〜3のいずれかに記載のプログラマブル・コントローラのユーザプログラム実行方法。
- 規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の終了後に行われる、ことを特徴とする請求項4又は5に記載のプログラマブル・コントローラのユーザプログラム実行方法。
- 規定分量ずつの分割実行は、サイクル実行タスクに割り当てられた一連のプログラムモジュールの実行期間の合間に行われる、ことを特徴とする請求項4又は5に記載のプログラマブル・コントローラのユーザプログラム実行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006071710A JP2006294010A (ja) | 2005-03-15 | 2006-03-15 | プログラマブル・コントローラのユーザプログラム実行方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005073086 | 2005-03-15 | ||
JP2006071710A JP2006294010A (ja) | 2005-03-15 | 2006-03-15 | プログラマブル・コントローラのユーザプログラム実行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006294010A true JP2006294010A (ja) | 2006-10-26 |
Family
ID=37414459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006071710A Pending JP2006294010A (ja) | 2005-03-15 | 2006-03-15 | プログラマブル・コントローラのユーザプログラム実行方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006294010A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019139365A (ja) * | 2018-02-07 | 2019-08-22 | オムロン株式会社 | アプリケーションプログラムを生成する方法、装置、プログラム |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63317834A (ja) * | 1987-06-22 | 1988-12-26 | Fanuc Ltd | ラダ−プログラム処理方式 |
-
2006
- 2006-03-15 JP JP2006071710A patent/JP2006294010A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63317834A (ja) * | 1987-06-22 | 1988-12-26 | Fanuc Ltd | ラダ−プログラム処理方式 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019139365A (ja) * | 2018-02-07 | 2019-08-22 | オムロン株式会社 | アプリケーションプログラムを生成する方法、装置、プログラム |
US10983772B2 (en) | 2018-02-07 | 2021-04-20 | Omron Corporation | Method, apparatus and program for generating application program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20130104137A1 (en) | Multiprocessor system | |
JP2007234017A (ja) | 優先順位による不揮発性メモリの演算処理装置及び方法 | |
WO2020121840A1 (ja) | 演算制御装置 | |
US9824229B2 (en) | Controller with enhanced reliability | |
US9152454B2 (en) | Method for enabling sequential, non-blocking processing of statements in concurrent tasks in a control device | |
US6880029B2 (en) | Programmable controller | |
CN109656868B (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
RU2603497C2 (ru) | Способ управления исполнением задачи в компьютерной системе | |
JP2006294010A (ja) | プログラマブル・コントローラのユーザプログラム実行方法 | |
JP2005332370A (ja) | 制御装置 | |
US11055163B2 (en) | Method and device for error handling in a communication between distributed software components | |
US10387334B2 (en) | Circuit and method for managing access to memory | |
US20030225812A1 (en) | Controller for machine | |
US7076641B2 (en) | Programmable controller | |
KR102259094B1 (ko) | Plc용 스캔 프로그램의 구동 방법 | |
CN111857538A (zh) | 数据处理方法、装置及存储介质 | |
CN116700135B (zh) | 可编程逻辑控制器任务调度方式的测试方法及装置 | |
JPS6368934A (ja) | タスクスケジユ−ル方式 | |
US20230084603A1 (en) | Methods and apparatus for context switching | |
US11048575B2 (en) | Method and device for error handling in a communication between distributed software components | |
JP3548782B2 (ja) | 制御装置及び方法 | |
JP3328714B2 (ja) | プログラマブルコントローラ | |
KR20220138137A (ko) | Plc 명령어 처리 방법 및 그 장치 | |
JPS63317834A (ja) | ラダ−プログラム処理方式 | |
JP2009110150A (ja) | 半導体装置および半導体装置の動作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Effective date: 20090114 Free format text: JAPANESE INTERMEDIATE CODE: A621 |
|
A977 | Report on retrieval |
Effective date: 20101006 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
A131 | Notification of reasons for refusal |
Effective date: 20101013 Free format text: JAPANESE INTERMEDIATE CODE: A131 |
|
A02 | Decision of refusal |
Effective date: 20110223 Free format text: JAPANESE INTERMEDIATE CODE: A02 |