(57)【特許請求の範囲】
【請求項１】
ラダー処理を実行する第１のプロセッサと、タスク処理を実行する第２のプロセッサと、プログラムとしてラダー処理のための複数のラダープログラムとタスク処理のための複数のタスクプログラムを収納する主メモリを備え、前記複数のラダープログラムと複数のタスクプログラムについて、処理の優先度に応じてラダープログラムとタスクプログラムの組み合わせを定めておき、
前記第２のプロセッサは、処理の優先度ごとの処理周期での割り込みに応じて、当該優先度でのラダープログラムの実行を前記第１のプロセッサに指示し、
前記第１のプロセッサは、前記第２のプロセッサの指示に従って主メモリ内のラダープログラムから当該優先度のラダープログラムを得、これに従ってラダー処理を実行し、
前記第２のプロセッサは、主メモリ内のタスクプログラムから当該優先度のタスクプログラムを得、これに従ってタスク処理を実行し、
指定された割り込みの優先度ごとの処理周期内に、当該優先度でのタスクプログラムによるタスク処理と、当該優先度でのラダープログラムによるラダー処理を完了するとともに、前記処理の優先度ごとの処理周期は、処理の優先度が上位であるほど短い処理周期とされており、
前記第２のプロセッサは、前記割り込みの新たな発生を監視して実行中の優先度よりも上位の優先度の第２の割り込みであることを検知し、
前記第１のプロセッサおよび、または前記第２のプロセッサは、実行中の前記プログラムを用いた処理を中断して、上位の優先度の第２の割り込みで定まるプログラムを用いた処理を実行し、
前記第１のプロセッサおよび、または前記第２のプロセッサは、前記上位の優先度の第２の割り込みで定まるプログラムを用いた処理の完了後に、第２の割り込み発生前に実行中のプログラムを用いた処理を前記の中断した個所から再開し、
指定された割り込みの優先度ごとの処理周期内に、当該優先度でのタスクプログラムによるタスク処理と、当該優先度でのラダープログラムによるラダー処理を完了する
ことを特徴とするコントローラ。
【請求項２】
請求項１に記載のコントローラにおいて、
前記第１のプロセッサは、ラダー処理の実行中に異常が発生したことを検知して前記第２のプロセッサに報告し、
前記第２のプロセッサは、当該優先度のタスク処理を実行すると共に、次回割り込み時の当該優先度のラダー処理についての処理の可否を決定する
ことを特徴とするコントローラ。
【請求項３】
請求項１または請求項２に記載のコントローラにおいて、
前記主メモリに収納されたラダー処理のためのラダープログラムは、複数の一連のラダー命令で構成され、
前記第１のプロセッサは、前記ラダー命令に従い当該のラダー処理を実行すると共に、実行できないラダー命令を検出した際には、ラダー処理を一時停止し、
前記第２のプロセッサは、前記停止したラダー命令を実行し、
前記第１のプロセッサは、前記第２のプロセッサにおける前記停止したラダー命令の実行後に、ラダー処理を停止したアドレスの次の番地から継続してラダー処理を再開することを特徴とするコントローラ。
【請求項４】
請求項１から請求項３のいずれか１項に記載のコントローラにおいて、
ラダー処理を行う前記第１のプロセッサは、ソフトウェアを使用して実行されている
ことを特徴とするコントローラ。
【請求項５】
請求項１から請求項４のいずれか１項に記載のコントローラにおいて、
割り込みにより指定された同一優先度の前記第１のプロセッサのラダー処理と、前記第２のプロセッサのタスク処理は、その処理周期内で一方の処理が完了後に他方の処理を実行する直列処理とされる
ことを特徴とするコントローラ。
【請求項６】
請求項１から請求項５のいずれか１項に記載のコントローラにおいて、
割り込みにより指定された同一優先度の前記第１のプロセッサのラダー処理と、前記第２のプロセッサのタスク処理は、その処理周期内で双方の処理が同時に実行される期間を含む並列処理とされる
ことを特徴とするコントローラ。
【請求項７】
ラダー処理を実行する第１のプロセッサと、タスク処理を実行する第２のプロセッサとを備え、複数のラダー処理と複数のタスク処理について、処理の優先度に応じてラダー処
理とタスク処理の組み合わせを定めておき、処理の優先度ごとに定められた処理周期での割り込みを行い、
割り込みに応じて、当該優先度でのラダー処理を前記第１のプロセッサで行い、
当該優先度でのタスク処理を前記第２のプロセッサで行い、
割り込みの優先度ごとの処理周期内に、当該優先度でのタスク処理と、当該優先度でのラダー処理を完了するとともに、前記処理の優先度ごとの処理周期は、処理の優先度が上位であるほど短い処理周期とされており、
処理の優先度ごとの処理周期の期間内に、実行中の優先度よりも上位の優先度の第２の割り込みで発生したときに、
第１のプロセッサと第２のプロセッサは、第２の割り込みで定まる優先度のラダー処理とタスク処理を実行し、
前記上位の優先度の第２の割り込みで定まる処理の完了後に、第２の割り込み発生前に実行中の処理を前記中断した個所から再開し、
指定された割り込みの優先度ごとの処理周期内に、当該優先度でのタスク処理と、当該優先度でのラダー処理を完了する
ことを特徴とするタスクとラダーの処理方法。
【請求項８】
請求項７に記載のタスクとラダーの処理方法において、
前記第１のプロセッサが、ラダー処理の実行中に異常が発生したことを検知したとき、
前記第２のプロセッサは、当該優先度のタスク処理を実行すると共に、次回割り込み時の当該優先度のラダー処理についての処理の可否を決定する
ことを特徴とするタスクとラダーの処理方法。
【請求項９】
請求項７または請求項８に記載のタスクとラダーの処理方法において、
前記第１のプロセッサは、一連のラダー命令に従いラダー処理を実行すると共に、実行できないラダー命令を検出した際には、ラダー処理を一時停止し、
前記第２のプロセッサは、前記停止したラダー命令をソフト処理により実行し、
前記第１のプロセッサは、ラダー処理を停止したアドレスの次の番地から継続してラダー処理を再開する
ことを特徴とするタスクとラダーの処理方法。
【請求項１０】
請求項７から請求項９のいずれか１項に記載のタスクとラダーの処理方法において、
ラダー処理を行う前記第１のプロセッサは、ソフトウェアを使用して実行されている
ことを特徴とするタスクとラダーの処理方法。
【請求項１１】
請求項７から請求項１０のいずれか１項に記載のタスクとラダーの処理方法において、
割り込みにより指定された同一優先度の前記第１のプロセッサのラダー処理と、前記第２のプロセッサのタスク処理は、その処理周期内で一方の処理が完了後に他方の処理を実行する直列処理とされる
ことを特徴とするタスクとラダーの処理方法。
【請求項１２】
請求項７から請求項１１のいずれか１項に記載のタスクとラダーの処理方法において、
割り込みにより指定された同一優先度の前記第１のプロセッサのラダー処理と、前記第２のプロセッサのタスク処理は、その処理周期内で双方の処理が同時に実行される期間を含む並列処理とされる
ことを特徴とするタスクとラダーの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はタスク処理とラダー処理を実行するコントローラ、およびタスクとラダーの処理方法に関する。
【背景技術】
【０００２】
一般にコントローラは、ラダー処理を実行するソフトウェア、または、ラダー処理プロセッサを設けており、定周期で、または連続してラダー処理の実行を行っている。またコントローラは、定周期でラダー処理を実行した後の空いた時間でラダー処理以外のプログラム実行（タスク処理）を行っている。
【０００３】
また、リアルタイムＯＳのマルチタスクスケジューリングでは、タスクは優先度に基づいてプリエンプティブスケジューリングされ、最高優先度の実行可能タスクを実行する。仮に、現在実行中のタスクよりも高い優先度のタスクが実行可能となった場合、即座にタスクの切り替えを行っている。
【０００４】
上記の処理を可能とするコントローラにおけるラダー処理実行方法に関し、以下の特許文献のように処理することが知られている。
【０００５】
特許文献１では、第２のプロセッサから第１のプロセッサに対して、異なるサイクルで異なるレベルの割り込みを入れ、割り込みに応じあらかじめ登録済みのラダー処理を実行している。
【０００６】
特許文献２では、定周期で実行されるラダー処理実行後に条件の成立したタスクを実行している。
【０００７】
特許文献３では、複数のラダープログラムを必要に応じ実行させ、プロセッサの演算量を減らしコントローラの応答性能向上を行っている。
【０００８】
特許文献４では、ラダー処理によるタスクのスケジューリングを行っている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００１−００５５０５号公報
【特許文献２】特開平０１−２８１５０３号公報
【特許文献３】特開平０１−１４０３０１号公報
【特許文献４】特開平０８−２７２６３０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記の特許文献による処理では、以下の問題に対応することができない。
【００１１】
第１に、複数の組のラダー処理を実行させることができていない。上記の、ラダー処理プロセッサを持ちラダー処理の実行を行うコントローラでは、１組のラダー処理を周期的に実行し、ラダー処理実行の空いた時間でラダー処理以外のタスクの実行を行っているにすぎない。
【００１２】
第２に、タスクを先に実行させ、タスク処理からラダー処理を呼び出して動作させること、あるいは１つのタスクから複数のラダー処理を呼び出すといったことができない。これは、マイクロプロセッサが実行するタスク処理とラダー処理を組み合わせて動作させた場合は、マルチタスク処理等で発生するタスクの中断等により、タスクの演算時間が延びた場合にラダー処理のリアルタイム演算（所定の時間内に演算終了することを保障する）ができないからである。
【００１３】
第３に、ラダー処理、または、タスク処理において異常を検出した場合、コントローラ自体を停止させるためコントローラとしての可用性が低いことが問題であった。
【００１４】
本発明では、前記した問題を解決し、複数の組のラダー処理の実行とタスク処理を優先順位に応じたマルチタスクスケジューリングを実現するコントローラ、およびタスクとラダーの処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
前記課題を解決するために、本発明のコントローラでは、ラダー処理を実行する第１のプロセッサと、タスク処理を実行する第２のプロセッサと、プログラムとしてラダー処理のための複数のラダープログラムとタスク処理のための複数のタスクプログラムを収納する主メモリを備え、複数のラダープログラムと複数のタスクプログラムについて、処理の優先度に応じてラダープログラムとタスクプログラムの組み合わせを定めておき、第２のプロセッサは、処理の優先度ごとの処理周期での割り込みに応じて、当該優先度でのラダープログラムの実行を前記第１のプロセッサに指示し、第１のプロセッサは、第２のプロセッサの指示に従って主メモリ内のラダープログラムから当該優先度のラダープログラムを得、これに従ってラダー処理を実行し、第２のプロセッサは、主メモリ内のタスクプログラムから当該優先度のタスクプログラムを得、これに従ってタスク処理を実行し、指定された割り込みの優先度ごとの処理周期内に、当該優先度でのタスクプログラムによるタスク処理と、当該優先度でのラダープログラムによるラダー処理を完了する。
【００１６】
また、処理の優先度ごとの処理周期は、処理の優先度が上位であるほど短い処理周期とされている。
【００１７】
また、第２のプロセッサは、割り込みの新たな発生を監視して、実行中の優先度よりも上位の優先度の第２の割り込みであることを検知し、第１のプロセッサおよび、または第２のプロセッサは、実行中のプログラムを用いた処理を中断して、上位の優先度の第２の割り込みで定まるプログラムを用いた処理を実行し、第１のプロセッサおよび、または第２のプロセッサは、上位の優先度の第２の割り込みで定まるプログラムを用いた処理の完了後に、第２の割り込み発生前に実行中のプログラムを用いた処理を再開し、指定された割り込みの優先度ごとの処理周期内に、当該優先度でのタスクプログラムによるタスク処理と、当該優先度でのラダープログラムによるラダー処理を完了する。
【００１８】
また、第１のプロセッサは、ラダー処理の実行中に異常が発生したことを検知して第２のプロセッサに報告し、第２のプロセッサは、当該優先度のタスク処理を実行すると共に、次回割り込み時の当該優先度のラダー処理についての処理の可否を決定する。
【００１９】
また、主メモリに収納されたラダー処理のためのラダープログラムは、複数の一連のラダー命令で構成され、第１のプロセッサは、ラダー命令に従い当該のラダー処理を実行すると共に、実行できないラダー命令を検出した際には、ラダー処理を一時停止し、第２のプロセッサは、停止したラダー命令を実行し、第１のプロセッサは、第２のプロセッサにおける停止したラダー命令の実行後に、ラダー処理を停止したアドレスの次の番地から継続してラダー処理を再開する。
【００２０】
また、第１のプロセッサはハードウェアで構成され、第２のプロセッサは、ソフトウェアで構成されている。
【００２１】
また、割り込みにより指定された同一優先度の第１のプロセッサのラダー処理と、第２のプロセッサのタスク処理は、その処理周期内で一方の処理が完了後に他方の処理を実行する直列処理とされる。
【００２２】
また、割り込みにより指定された同一優先度の第１のプロセッサのラダー処理と、第２のプロセッサのタスク処理は、その処理周期内で双方の処理が同時に実行される期間を含む並列処理とされる。
【００２３】
前記課題を解決するために、本発明のタスクとラダーの処理方法では、ラダー処理を実行する第１のプロセッサと、タスク処理を実行する第２のプロセッサとを備え、複数のラダー処理と複数のタスク処理について、処理の優先度に応じてラダー処理とタスク処理の組み合わせを定めておき、処理の優先度ごとに定められた処理周期での割り込みを行い、割り込みに応じて、当該優先度でのラダー処理を第１のプロセッサで行い、
当該優先度でのタスク処理を第２のプロセッサで行い、割り込みの優先度ごとの処理周期内に、当該優先度でのタスク処理と、当該優先度でのラダー処理を完了する。
【００２４】
また、処理の優先度ごとの処理周期は、処理の優先度が上位であるほど短い処理周期とされている。
【００２５】
また、処理の優先度ごとの処理周期の期間内に、実行中の優先度よりも上位の優先度の第２の割り込みで発生したときに、第１のプロセッサと第２のプロセッサは、第２の割り込みで定まる優先度のラダー処理とタスク処理を実行し、上位の優先度の第２の割り込みで定まる処理の完了後に、第２の割り込み発生前に実行中の処理を再開し、指定された割り込みの優先度ごとの処理周期内に、当該優先度でのタスク処理と、当該優先度でのラダー処理を完了する。
【００２６】
また、第１のプロセッサが、ラダー処理の実行中に異常が発生したことを検知したとき、第２のプロセッサは、当該優先度のタスク処理を実行すると共に、次回割り込み時の当該優先度のラダー処理についての処理の可否を決定する。
【００２７】
また、第１のプロセッサは、一連のラダー命令に従いラダー処理を実行すると共に、実行できないラダー命令を検出した際には、ラダー処理を一時停止し、第２のプロセッサは、停止したラダー命令をソフト処理により実行し、第１のプロセッサは、ラダー処理を停止したアドレスの次の番地から継続してラダー処理を再開する。
【００２８】
また、第１のプロセッサはハードウェアで構成され、第２のプロセッサは、ソフトウェアで構成されている。
【００２９】
また、割り込みにより指定された同一優先度の第１のプロセッサのラダー処理と、第２のプロセッサのタスク処理は、その処理周期内で一方の処理が完了後に他方の処理を実行する直列処理とされる。
【００３０】
また、割り込みにより指定された同一優先度の第１のプロセッサのラダー処理と、第２のプロセッサのタスク処理は、その処理周期内で双方の処理が同時に実行される期間を含む並列処理とされる。
【発明の効果】
【００３１】
本発明によれば、リアルタイム演算において複数の組のラダー処理を実行することが可能となる。また本発明の実施例によれば、１つの組のラダー処理が異常となった場合においても、該当のラダー処理のみを停止することで、他の組のラダー処理は影響を受けず継続してラダー処理を実行でき可用性を向上させることができる。
【図面の簡単な説明】
【００３２】
【図１】図２の処理を実現する為のコントローラの全体構成を示す図。
【図２】コントローラで実現する処理内容の概念を説明するための図。
【図３】ラダー処理プロセッサ３と主メモリ４の各部の詳細を示す図。
【図４】ラダープログラム４４内の具体的な記憶内容を示す図。
【図５】コントローラ１全体としての処理手順を示す図。
【図６】タイマー種別、優先度、ラダー処理並びにタスク処理の関連を示す図。
【図７】ラダー処理とタスク処理の直列実行に関する説明図。
【図８】ラダー処理中に異常発生したときの処理（ラダー処理中段）を示す図。
【図９】ラダー処理中に異常発生したときの処理（ラダー処理再開）を示す図。
【図１０】ラダー処理とタスク処理の並列実行に関する説明図。
【図１１】ラダー処理とタスク処理の直列実行に関する説明図。
【図１２】タスク処理、ラダー処理の順番の並列実行に関する説明図。
【図１３】上位割り込みのときのラダー処理プロセッサ３の設定に関する説明図。
【図１４】ソフト実効命令検出時のソフト実行手順を示す図。
【図１５】マイクロプロセッサでソフト処理を行うときの各部処理内容を示す図。
【発明を実施するための形態】
【００３３】
以下本発明の実施例を、図面を用いて説明する。
【実施例】
【００３４】
最初に、本発明のコントローラで実現する処理の概念について図２を用いて説明する。これは、複数の周期で動作するラダー処理を１つの環境でマルチタスク動作させるための考え方を示している。
【００３５】
ここでは、複数のラダー処理が優先度に応じて区別されている。優先度が１位のラダー処理（ラダー１）に対して、タイマー１による割り込み周期Ｔ１が設定されており、タイマー１による割り込みの都度、優先度１位のラダー処理（ラダー１）が実行される。
【００３６】
以下同様に、優先度が２位のラダー処理（ラダー２）に対して、タイマー２による割り込み周期Ｔ２が設定されており、タイマー２による割り込みの都度、優先度２位のラダー処理（ラダー２）が実行される。また、優先度が３位のラダー処理（ラダー３）に対して、タイマー３による割り込み周期Ｔ３が設定されており、タイマー３による割り込みの都度、優先度３位のラダー処理（ラダー３）が実行される。
【００３７】
なお、タスク処理も優先度に応じて区別されており、各優先度のラダー処理実行後にタスク処理が実行される。また、優先度が高いほど、タイマーによる割り込み周期Ｔが短く設定されている。
【００３８】
従って、図２において例えば時刻ｔ１から優先度が３位のラダー処理（ラダー３）実行中に、時刻ｔ２においてタイマー２による割り込みが発生した場合、これを中断して優先度が２位のラダー処理（ラダー２）の実行に移る。
【００３９】
また、この優先度が２位のラダー処理（ラダー２）に続くタスク２の実行中に、時刻ｔ３においてタイマー１による割り込みが発生した場合、これを中断して優先度が１位のラダー処理（ラダー１）の実行に移る。
【００４０】
また、優先度が２位のラダー処理（ラダー２）に続くタスク２の残余部分の実行は、上位割り込みによるラダー処理（ラダー１）とこれに続くタスク１が完了した時刻ｔ４のタイミング以降に実行される。同様に、優先度が３位のラダー処理（ラダー３）の残余部分とこれに続くタスク３の実行は、上位割り込みによるラダー処理（ラダー２）とこれに続くタスク２が完了した時刻ｔ５のタイミング以降に実行される。
【００４１】
なお、図２の時刻ｔ６から時刻ｔ９の間でも上位割り込みが発生し、この間下位側が待機している状況が発生している。この部分の動作説明については、上記説明から容易に理解できることなので説明を省略する。
【００４２】
図１は、図２の処理を実現する為のコントローラの全体構成を示している。
【００４３】
コントローラ１は、マイクロプロセッサ２、ラダー処理プロセッサ３、主メモリ４、並びにこれらを相互に接続するバス５で構成される。このうち、主メモリ４は、管理ソフトウェア４１、タスクプログラム４２、タスク管理テーブル４３、ラダープログラム４４、ラダー管理テーブル４５を含む。
【００４４】
このように図１には、マイクロプロセッサ２と、ラダー処理プロセッサ３を備えており、これらそれぞれのプロセッサは以下の役割を担う。
【００４５】
まず、ラダー処理プロセッサ３は、ラダー命令で記述されたラダープログラム４４を実行する専用のプロセッサである。本発明では、ハードウェアで命令を解釈し実行する。このために、ラダープログラム４４内のラダー命令はラダー処理プロセッサ３に取り込まれ使用される。
【００４６】
他方、マイクロプロセッサ２は、ラダープログラム４４で処理できないような複雑な処理（ネットワーク通信処理、Ｉ／Ｏデバイス制御処理、二重化構成制御など）を、例えばＣ言語を用いてプログラムし、そのプログラムを実行するプロセッサである。
【００４７】
マイクロプロセッサ２は、基本的に管理ソフトウェア４１であるＯＳが動作している。ＯＳはタスクプログラム４２を用いて、タスク管理テーブル４３内のタスクのマルチタスクスケジューリングを行い、タスクを制御する。このため、タスク管理テーブル４３内のタスクは、マイクロプロセッサ２に取り込まれ使用される。
【００４８】
本発明では、このマルチタスクスケジューリングとラダー処理の起動・停止を連携させ動作させる。このためマイクロプロセッサ２は、ラダー処理プロセッサ３に対して、ラダー処理の実行（起動）と停止を指示する。また、ラダー処理プロセッサ３は、指示に応じたラダー処理の完了後に、ラダー処理の終了を報告する。
【００４９】
また、ラダー処理プロセッサ３は、ラダー命令の実行を監視しており、異常停止したこと、或いは処理遅延などの異常をマイクロプロセッサ２に報告する。
【００５０】
また、ラダー処理プロセッサ３がハードウェアで実行できないラダー命令を検出した場合には、検出場所でラダー処理実行を停止し、マイクロプロセッサ２のソフトウェアに連絡する。連絡を受けたマイクロプロセッサ２上のソフトウェアはラダー処理の実行を行い、ラダー処理実行後ラダー処理プロセッサ３の再開を指示する。或いは、原因が特定されるまで以降の当該優先度のラダー処理を停止するなどの処理を実行する。
【００５１】
なお、マイクロプロセッサ２におけるタスクの実行は、図２の例では同一優先度のラダー処理の実行後に行われる。従って、ラダー処理プロセッサ３のラダー処理終了報告を受けてから、この優先度のタスク処理が実行される運びになる。
【００５２】
本発明のコントローラ１においては、上記したようにラダー処理プロセッサ３とマイクロプロセッサ２が連携している。このように、ラダー処理プロセッサ３、マイクロプロセッサ２の２つのプロセッサを持つことにより、Ｃ言語で記述されたプログラムを実行中に、ラダー処理をラダー処理プロセッサで平行して動作させることもできる。並行処理する事例については後で図１０を用いて説明する。
【００５３】
なお、ラダー処理をラダー処理プロセッサ３とハードウェアで実行してもよく、インタプリタのようにソフトウェア的に実行することも考えられる。この処理については種々実現可能である。
【００５４】
図１のラダー処理プロセッサ３と主メモリ４の各部の詳細が図３に記載されているので、これらの詳細構成を図３で説明する。
【００５５】
図３において、まずラダー処理プロセッサ３の内部には、プログラムカウンタ３１、管理テーブル番号３２、ワークレジスタ３３、ラダー制御レジスタ３４、実行ステータス３５などを備えている。これらが如何なる機能を果たすのかは、以後の動作説明の中で明らかにする。
【００５６】
また図３において、主メモリ４内のタスクプログラム４２の記憶エリア内には図２で説明した優先度別のタスクが記憶されている。ここでは、タスク１が４２１、タスク２が４２２、タスク３が４２３で表示されている。これらのタスクはＣ言語で記述されており、マイクロプロセッサ２に読み込まれて使用される。
【００５７】
主メモリ４内のタスク管理テーブル４３の記憶エリア内には、タスクプログラム４２内の各タスクの管理テーブルが設けられている。ここでは、タスク１の管理テーブルが４３１、タスク２の管理テーブルが４３２、タスク３の管理テーブルが４３３で表示されている。
【００５８】
また図３において、主メモリ４内のラダープログラム４４の記憶エリア内には図２で説明した優先度別のラダーが記憶されている。ここでは、ラダー１が４４１、ラダー２が４４２、ラダー３が４４３で表示されている。これらのラダーは、ラダー処理プロセッサ３に読み込まれて使用される。
【００５９】
主メモリ４内のラダー管理テーブル４５の記憶エリア内には、ラダープログラム４４内の各ラダーの管理テーブルが設けられている。ここでは、ラダー１の管理テーブルが４５１、ラダー２の管理テーブルが４５２、ラダー３の管理テーブルが４５３で表示されている。
【００６０】
ラダープログラム４４内の具体的な記憶内容が図４に示されている。ここでは、例えばラダー３（Ｌ３）が、複数の一連のラダー命令（ここではＬ３１からＬ３ｎまで）で構成されていることがわかる。他のラダーＬ１、Ｌ２も同様に複数の一連のラダー命令で構成されている。
【００６１】
また図２において、各周期内でのラダー処理では、一時中断されることがあるにしても、この複数の一連のラダー命令の全てが同一周期内で実行される必要がある。従って、各ラダーの管理テーブル４５１、４５２、４５３では、複数の一連のラダー命令について現在時点での処理内容、処理順番を記憶管理することになる。
【００６２】
なお、図示していないが、タスクプログラム４２内の各タスクも基本的には、図４のラダーのように構成されている。例えばタスク１は、複数の一連のタスク命令で構成されている。タスク命令についても各周期内でのタスク処理では、一時中断されることがあるにしても、この複数の一連のタスク命令の全てが同一周期内で実行される必要がある。従って、各タスクの管理テーブル４３１、４３２、４３３では、複数の一連のタスク命令について、現在時点での処理内容、処理順番を記憶管理することになる。
【００６３】
図３、図４に示すようにラダー処理プロセッサ３あるいは主メモリ４内各部が構成されている。係る前提の構成において、コントローラ１は以下のように作動する。コントローラ１全体としての処理手順を図５に示す。
【００６４】
まずマイクロプロセッサ２は、ラダープログラムを先頭から動作させるとき、以下の手順でラダー処理プロセッサ３を起動する。
【００６５】
まずステップＳ１００では、タイマーによる割り込みの受理と内容解析を行い、例えばこれが優先度３の割り込みであることを確認する。このことのために、マイクロプロセッサ２内には、タイマー種別と、優先度と、このときのラダー処理並びにタスク処理の関連が例えば表形式で記憶されている。
【００６６】
図６がこの表の一例であり、タイマー１が優先度１で、ラダー１並びにタスク１を実行する。同様にタイマー２が優先度２で、ラダー２並びにタスク２を実行し、タイマー３が優先度３で、ラダー３並びにタスク３を実行するという関係にある。因みにこの表には、ラダー並びにタスクに関連して、このプログラムを収納する主メモリ４内のアドレスが記憶されているのが望ましい。
【００６７】
ステップＳ１０１では、この割り込みが優先度下位の処理実行中に生じた上位割り込みかどうか確認する。上位割り込みであるときステップＳ１０２、上位割り込みでないときにステップＳ１０３の処理に入る。
【００６８】
この場合には優先度３の実行なので、上位割り込みではない。ステップＳ１０３において、マイクロプロセッサ２はラダー処理プロセッサ３起動準備のための各種設定を実行する。
【００６９】
ここでは、最初に主メモリ４に格納されているラダープログラム４４の実行すべきアドレス４０１を、図３に示すラダー処理プロセッサ３のプログラムカウンタ３１に設定する。例えば、図４のラダーＬ３を先頭から動作させようとするときには、これを収納する４４３内の最初のラダー命令Ｌ３１の格納位置を示すアドレスを設定する。
【００７０】
次に、使用する管理テーブル４０２の番号（例えばラダー３管理テーブル４５３）を、ラダー処理プロセッサ３の管理テーブル番号３２に設定する。また、ワークレジスタ３３のクリアを行い、以後の処理に備える。
【００７１】
ステップＳ１０４では、マイクロプロセッサ２による以上の設定処理を受けて、ラダー処理プロセッサ３は、マイクロプロセッサ２に指定されたアドレス４０１からラダープログラムを読み込み、ラダー処理を実行し、順次の命令（図４の複数の一連のラダー命令）を読み込み、ラダー処理を実行する。
【００７２】
一方、マイクロプロセッサ２側では引き続き割り込み監視を継続しており、上位割り込みが発生し、ステップＳ１０２の処理が実行されたものとする。このとき、マイクロプロセッサ２は、ラダー処理の停止をするために、ラダー処理プロセッサ３のラダー制御レジスタ３４に停止指示を行う。
【００７３】
ラダー処理プロセッサ３では、ラダー処理（ステップＳ１０４）での逐次命令の処理を継続しながら、ステップＳ１０５において停止指示を確認している。この停止指示を受けたときに、ラダー処理プロセッサ３がラダー処理実行中である場合、ラダー処理プロセッサ３のプログラムカウンタ３１は、図４に示すラダー処理の途中で停止する。つまり、下位ラダーを停止し、この状態を保持する。
【００７４】
例えば、図４のラダーＬ３を先頭から実行しており、ラダー命令Ｌ３ｍの格納位置まで進んだところでラダー制御レジスタ３４に停止指示を受けたとすると、プログラムカウンタ３１にはこのラダー命令Ｌ３ｍの格納エリアを示すアドレスが設定され、記憶される。係る停止状態は、図２の処理の流れにおいて、時刻ｔ２でラダー３が上位割り込みを受けた状態に相当する。
【００７５】
ステップＳ１０７では、上位割り込みによる上位のラダー処理、タスク処理が実行される。つまり、図５において、ステップＳ１０３の設定から始まり、ラダー処理（ステップＳ１０４）、タスク処理（ステップＳ１１１）までの一連の上位の処理が新たに実行される。ここでは、この全てが滞りなく処理されて、処理ステップＳ１０８に至ったものとする。
【００７６】
なお、上位割り込み発生時及び上位割り込み回復時のラダー処理プロセッサ３の具体的な内部処理については、後で図１３を参照して説明する。
【００７７】
この回復状態は、例えば図１の時刻ｔ２から始まったラダー３の停止状態が、時刻ｔ５になりラダー３に対する上位割り込みが解除されたときに相当する。処理ステップＳ１０８では、ラダー処理を再開する。
【００７８】
このときマイクロプロセッサ２は、ラダー処理の再実行指示を、ラダー制御レジスタ３４に設定する。これを受けてラダー処理プロセッサ３はラダー処理を再開する。このときに、停止時にプログラムカウンタ３１に記憶されたラダー命令Ｌ３ｍの格納エリアを示すアドレスが参照され、ここから再実行がされることは言うまでもない。ステップＳ１０８での再開準備完了後は、ステップＳ１０４に移り、残余のラダー処理を継続する。
【００７９】
なお、ステップＳ１０５で、停止が指示されない場合、ラダー命令は図４のラダー終了命令Ｌ３ｎまでラダー処理を実行する。ステップＳ１０９において、ラダー終了命令Ｌ３ｎを検出すると、ラダー処理プロセッサ３によるラダー処理は停止し、実行ステータス３５にラダー処理終了のステータスを設定して完了する。
【００８０】
ステップＳ１１０では、これを受けてラダー処理プロセッサ３は、マイクロプロセッサ２に処理の完了を報告する。
【００８１】
ステップＳ１１１でマイクロプロセッサ２は、この優先度のタスクを主メモリ４のタスクプログラム４２から導入して、タスク処理を実行する。この場合には、タスク３が実行される。タスク３の実行完了をもって最初に設定された優先度３の割り込みに対するラダーとタスクに関する一連の処理が完了する。
【００８２】
図７は、マルチタスクスケジューリングの優先度に従ったラダー処理のスケジューリングの例を示す。この例は、ラダー処理とタスク処理の直列実行を行う場合である。本説明では優先度の若い数値の方が、優先度が高いものとして説明する。タスク４２１とラダー４４１が優先度１、タスク４２２とラダー４４２が優先度２、タスク４２３とラダー４４３が優先度３に設定されている。このラダー処理とタスク処理の組み合わせは、図６に示すように優先度を持たせ関連付けて動作させる。
【００８３】
そして、より優先度の高いタスクが動作可能状態となったとき、実行中のラダー処理を停止し、優先度の高いタスクと関連付けされたラダー処理を起動する。優先度の高いタスク、ラダー処理の動作が完了した後、割り込まれたラダー処理は中断された番地から継続して処理を実行する。
【００８４】
図７の場合には、時刻ｔ１０のタイマー３割り込みによりラダー３処理４４３の実行が開始される。ラダー３処理４４３実行中に、時刻ｔ１１のタイマー２割り込みにより、より優先度の高いラダー２処理４４２へ切り替えを行うため、ラダー３処理４４３を停止し、ラダー２処理４４２を実行する。
【００８５】
優先度の高いラダー２処理後は、引き続き優先度の高いタスク２処理４２２を実行する。その途中に、時刻ｔ１２のタイマー１割り込みにより、より優先度の高いラダー１処理４４１へ切り替えを行い、ラダー１処理４４１、タスク１処理４２１を行う。時刻ｔ１３のタスク１終了後、待ち状態であったタスク２処理４２２を再開する。時刻ｔ１４のタスク２処理４２２の終了後、待ち状態であったラダー３処理４４３を再開し、その後、タスク３処理が実行される。
【００８６】
図８のマルチタスクスケジューリングの例では、ラダー処理プロセッサ３におけるラダー処理中に、異常発生を検知してこれをマイクロプロセッサ２に報告したときの処理を示している。図５処理ステップＳ１１２から処理ステップＳ１１５には、この場合の処理フローが記載されている。
【００８７】
この図８の例では、時刻ｔ２０での割り込みによるラダー３の処理４４３を実行中に、異常発生４４３１した。このことは、図５の処理ステップＳ１１２で検知されラダー処理プロセッサ３がこれを検出して時刻ｔ２１においてマイクロプロセッサ２に報告（処理ステップＳ１１３）したとする。この場合に、マイクロプロセッサ２は、異常発生となったラダー３の処理４４３について次周期実行時、スケジューリングから外し実行を行わない（処理ステップＳ１１４）事を決定する。なお、この優先度のタスク処理は、今回も次回以降も引き続き実行する。
【００８８】
つまり、マイクロプロセッサ２でのタスク処理４２３は異常発生側のラダー処理プロセッサ３と独立に実行可能であるので、このタスク処理のみ継続実行する。マイクロプロセッサ２は、割り込み時刻ｔ２０から周期Ｔ３経過後の割り込み時刻ｔ２６の処理では、ラダー処理３をマルチタスクスケジューリングの対象から除外している。
【００８９】
このようにすることで、該当のラダー３処理４４３のみを停止することが可能となり、他のラダー処理への影響はなくなり、さらに優先度の高いラダー処理（４４１、４４２）の定周期性が保障される。
【００９０】
但し、異常を検出した次周期以降の処理については、図９に示すようにラダー３処理４４３、タスク３処理４２３を実行することも可能である。この場合には、割り込み周期Ｔ３の間にラダー３処理４４３の健全性が確認されていることが望ましい。
【００９１】
図２、図７、図８、図９は、同一優先度のラダー処理とタスク処理をこの順番で直列に実行する説明図であるが、本発明ではラダー処理プロセッサ３とマイクロプロセッサ２を有し、それぞれが処理を分担しているため、ラダー処理とタスク処理は同時刻に並列で実行することも可能である。
【００９２】
図１０では、各優先度において、ラダー処理とタスク処理を並列に実行している。この場合、同じ優先度のラダー処理とタスク処理は割り込みにより同じタイミングで処理開始するが、それぞれの処理時間長は一般には相違する。このため、上位割り込みによりラダー処理側が中断する場合（時刻ｔ３１での割り込み）と、タスク処理側が中断する場合（時刻ｔ３２での割り込み）とが発生し得る。この場合の中断並びに再開処理は、ラダー処理プロセッサ３とマイクロプロセッサ２で個別に準備され、実行されることになる。
【００９３】
また図１１で示すように、基本的にはラダー処理とタスク処理をこの順番で直列に実行しながら、上位割り込みが発生した側の処理のみを遅らせ、あるいは中断させることもできる。図１１の例では、基本的にラダー処理とタスク処理は、この順番で直列に実行している。これは、時刻ｔ４０、ｔ４１、ｔ４５、ｔ４９の処理から明らかであり、優先度の高い処理が存在しない状態ではこの関係が維持されている。
【００９４】
ラダー３について、優先度の高いラダー２の割り込み（時刻ｔ４１）により、時刻ｔ４１からｔ４２の期間中断して、その後ｔ４３に一連の処理を完了する。図７などの例では、ラダー処理終了に続いてタスク３が開始されるタイミングになるが、図１１では優先度の高いタスク２の終了まで開始が遅れている。また開始後も、より上位のタスク１の処理期間（ｔ４６−ｔ４７）中断する。
【００９５】
また、図７では、タイマー割り込みにより、ラダー処理が実行され、その後タスク処理の実行の順番で実行を行う説明図であるが、この順番に限定する必要はなく、図１２に示すように、タイマー割り込みにより、タスク処理が実行され、その後ラダー処理の実行を順番で実行してもよい。
【００９６】
また、図７の説明図において、タイマー割り込みから、複数のラダー処理の実行を行ってもよく、図１２の説明図において、１つのタスク処理から、複数のラダー処理の実行を行ってもよい。
【００９７】
図５の処理フローのステップＳ１０７の説明において、上位割り込み、さらには上位割り込み解除のときのラダー処理プロセッサ３の設定の説明を後述することにしていた。図１３を用いて、優先度の低いラダー３処理から、より優先度の高いラダー２処理への切り替えを行うときの具体的な処理内容について説明する。図１３は、基本的に図３と同じ回路部分（ラダー処理プロセッサ３、主メモリ４）を主体に記載しているが、説明の都合上ラダープログラムのみ記述した点と、ワークレジスタ３３の内容を記述した点で相違している。
【００９８】
ここでは、ラダー３処理４４３を実行中、より優先度の高いラダー２処理４４２が動作可能状態となったとする。マイクロプロセッサ２は、ラダー３処理４４３のラダー処理を停止するよう、ラダー制御レジスタ３４にラダー処理停止の指示を行う。
【００９９】
ラダー処理停止の指示を受けたラダー処理プロセッサ３は、実行中のラダー処理を停止する。停止したときのラダー処理プロセッサ３のプログラムカウンタ３１がアドレス４０４（ラダー命令Ｌ３ｍ＋１）を指しているとする。
【０１００】
プロセッサ２は、プログラムカウンタ３１とワークレジスタ３３の内容を管理テーブル番号３２が指し示すラダー３管理テーブル４５３へ退避する。
【０１０１】
次に実行すべきラダー２処理４４２の、管理テーブル番号を管理テーブル番号３２へ設定し、ラダー２管理テーブル４５２からプログラムカウンタ２１、ワークレジスタ３３を回復し、ラダー２処理を実行する環境を整える。ラダー制御レジスタ３４にラダー処理実行の指示を行うことでラダー２処理４４２を実行する。
【０１０２】
ラダー２処理の実行終了後、プロセッサ２は、実行待ちとなっているラダー３処理４２３の、管理テーブル番号を管理テーブル番号３２へ設定し、ラダー３管理テーブル４５３から退避していたプログラムカウンタ２１、ワークレジスタ３３を回復し、ラダー３処理を実行する環境を整える。このときプログラムカウンタは退避していたアドレス４０４を指し、ワークレジスタは演算中のレジスタ値となる。ラダー制御レジスタ３４にラダー処理実行の指示を行うことでラダー３処理４４３をアドレス４０４から再開する。
【０１０３】
図１において、ラダー処理プロセッサ３の処理が命令解読不能により実行不可能状態に陥ったときに、これをマイクロプロセッサ２に報告し、マイクロプロセッサ２がソフト処理することについて説明した。
【０１０４】
図１４は、ソフト実効命令の検出時の、ソフト実行手順を示す。ラダー処理プロセッサ３は、主メモリ４のラダープログラム４４を用いて、優先度３のラダー３を読み込み実行中に、ラダー命令Ｌ３ｍの解読不能により実行不可能状態に陥ったとする。
【０１０５】
ラダー処理プロセッサ３は、ソフト実行の命令を検出したときは、アドレス４０５にてラダー処理を停止し、ラダー命令Ｌ３ｍにこれがソフト実効命令の対象であることと、この時の各種のパラメータを保持する。またマイクロプロセッサ２に対して割り込みを行うか、あるいは実行ステータス３５を用いてプロセッサ２に対してソフト実効命令の検出を知らせる。
【０１０６】
マイクロプロセッサ２は、ソフト実効命令の連絡を受け、主メモリ４のラダープログラム４４のアドレス４０５からソフト実効命令の読み出し、パラメータの読み出しを行い、プログラムカウンタ３１を４０６（ラダー命令Ｌ３ｍ＋１）にする。そのうえで、ラダー命令Ｌ３ｍに対するソフト実効命令、パラメータによりソフト処理を行い、ソフト処理が終了した時点で、ラダー制御レジスタ３４に起動指示を行い、再びアドレス４０６（ラダー命令Ｌ３ｍ＋１）からラダー処理を継続する。
【０１０７】
図１５は、マイクロプロセッサ２におけるソフト処理を行うときの各部処理内容を示す図である。この図で、横方向にはマイクロプロセッサ２、ラダー処理プロセッサ３、主メモリを示し、縦方向には時間を示している。
【０１０８】
この図によれば、マイクロプロセッサ２は時刻ｔ１００の割り込みを受けて、ラダー処理プロセッサ３を起動（時刻ｔ１０１）する。以後ラダー処理プロセッサ３は、メモリ４内のラダー命令を逐次取り込んで処理を進める。この間の処理では、ラダー処理プロセッサ３とメモリ４の間でラダー演算データの入出力を行っている。
【０１０９】
これに対し、実行できないラダー命令が生じると、ラダー処理プロセッサ３は時刻ｔ１０２でマイクロプロセッサ２に対してソフト処理を要求する。マイクロプロセッサ２は、改めてメモリ４にアクセスし、メモリ４の間でラダー演算データの入出力を行ない、ラダー命令のソフト処理を実行する。ラダー命令のソフト処理を完了すると、時刻ｔ０３においてソフト処理完了をラダー処理プロセッサ３に通知する。
【０１１０】
ラダー処理プロセッサ３は、再度メモリ４内のラダー命令を逐次取り込んで処理を進める。このときに再開するラダー命令は、中断し、マイクロプロセッサ２でソフト処理されたラダー命令の次の順番のラダー命令とされる。このために、再開以後の処理では、再度ラダー処理プロセッサ３とメモリ４の間でラダー演算データの入出力を行っている。
【０１１１】
ラダー処理プロセッサ３は、ラダー終了命令までの一連のラダー処理を実行完了した時点ｔ１０４でラダー処理完了をマイクロプロセッサ２に報告し、以後マイクロプロセッサ２における同じ優先度レベルのタスク処理を実行する。
【０１１２】
タスク処理では、マイクロプロセッサ２は、改めてメモリ４にアクセスし、メモリ４の間でタスク処理データの入出力を行ない、タスク命令のソフト処理を実行する。
【０１１３】
以上述べたように、本発明ではラダー処理プロセッサ３とマイクロプロセッサ２にタスクとラダーの処理を分散し、かつ優先度に応じて処理するタスクとラダーの組み合わせを変更したことにより、コントローラの同一環境下でマルチタスクスケジューリングが可能である。
【符号の説明】
【０１１４】
１：コントローラ
２：マイクロプロセッサ
３：ラダー処理プロセッサ
４：主メモリ
５：バス
４１：管理ソフトウェア
４２：タスクプログラム
４３：タスク管理テーブル
４４：ラダープログラム
４５：ラダー管理テーブル
【図１】
0005771114.tif 000002
【図２】
0005771114.tif 000003
【図３】
0005771114.tif 000004
【図４】
0005771114.tif 000005
【図５】
0005771114.tif 000006
【図６】
0005771114.tif 000007
【図７】
0005771114.tif 000008
【図８】
0005771114.tif 000009
【図９】
0005771114.tif 000010
【図１０】
0005771114.tif 000011
【図１１】
0005771114.tif 000012
【図１２】
0005771114.tif 000013
【図１３】
0005771114.tif 000014
【図１４】
0005771114.tif 000015
【図１５】
0005771114.tif 000016