以下に本発明の一実施形態について図面を参照して説明する。図1には、本実施形態のプログラマブルコントローラシステム10の全体構成が示されている。図2には、プログラマブルコントローラシステム10のシステム処理手段24,34,44の詳細構成が示され、図3には、ソースコードの管理状況および実行プログラムの格納状況の一例が示されている。また、図4には、システム処理のうちの同期割込みを行う処理Aの流れがフローチャートで示され、図5には、システム処理のうちのアプリケーション運転状態への移行を行う処理Bの流れがフローチャートで示され、図6には、システム処理のうちのプログラム切替を行う処理Cの流れがフローチャートで示されている。さらに、図7には、システム処理の全体的な流れがタイムチャートで示されている。また、図8には、主メモリ23,33へのプログラム配置の一例が示され、図9には、変更後の機械語オブジェクトP2’の送信後の状態の一例が示され、図10には、変更後の機械語オブジェクトP2’の送信後に行う補完処理の説明図が示され、図11には、実行管理テーブルT1,T2の切替処理の説明図が示されている。
図1において、プログラマブルコントローラシステム10は、基本コントローラ20と、拡張コントローラ30と、管理部40とを備えて構成されている。本実施形態では、これらの基本コントローラ20、拡張コントローラ30、および管理部40は、それぞれ別々のプリント基板上に形成され、これらの3つの基板が1つの筐体(不図示)に収納される構成となっているが、これに限定されるものではなく、例えば、基本コントローラ20、拡張コントローラ30、および管理部40が、それぞれ別の筐体に収納されていてもよい。
基本コントローラ20は、バスLSI21と、マイクロプロセッサ22と、主メモリ23と、共有メモリ領域25と、フラッシュメモリ26と、データメモリ27とを備えている。そして、マイクロプロセッサ22およびその動作手順を規定するシステムプログラムγ、並びに作業領域である主メモリ23等により、システム処理手段24が構成されている。
拡張コントローラ30も同様な構成であり、バスLSI31と、マイクロプロセッサ32と、主メモリ33と、共有メモリ領域35と、フラッシュメモリ36と、データメモリ37とを備えている。そして、マイクロプロセッサ32およびその動作手順を規定するシステムプログラムδ、並びに作業領域である主メモリ33等により、システム処理手段34が構成されている。
管理部40は、基本コントローラ20や拡張コントローラ30とは異なった構成であり、バスLSI41と、マイクロプロセッサ42と、主メモリ43と、共有メモリ領域45と、フラッシュメモリ46と、USB接続部47Aと、イーサネット接続部47B(イーサネットは登録商標)と、シリアル接続部47Cと、スイッチ操作信号入力部48とを備えている。そして、マイクロプロセッサ42およびその動作手順を規定するシステムプログラムε、並びに作業領域である主メモリ43等により、システム処理手段44が構成されている。
基本コントローラ20、拡張コントローラ30、および管理部40のバスLSI21,31,41は、内部バス11に接続され、これらのバスLSI21,31,41による共有化のための内部バス11を介した通信機能により、基本コントローラ20、拡張コントローラ30、および管理部40の共有メモリ領域25,35,45に記憶された各種のデータは共有化され、各共有メモリ領域25,35,45のそれぞれに同じデータが保持されるようになっている。
マイクロプロセッサ22,32,42は、主メモリ23,33,43に記憶されたアプリケーションプログラムα,βやシステムプログラムγ,δ,εを読み込んで実行する中央演算処理装置である。なお、管理部40のマイクロプロセッサ42では、アプリケーションプログラムの実行処理は行わない。
主メモリ23,33,43は、本実施形態では、一例としてシンクロナスDRAM(SDRAM)とされているが、これに限定されるものではない。
共有メモリ領域25,35,45は、本実施形態では、一例としてSRAMとされているが、これに限定されるものではない。これらの共有メモリ領域25,35,45には、同期フリーランカウンタ25A,35A,45Aと、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を記憶するアプリ運転状態開始カウンタ値記憶手段25B,35B,45Bと、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を記憶するプログラム切替カウンタ値記憶手段25C,35C,45Cと、基本コントローラ20に対してアプリケーション運転開始要求が行われたか否かを示すフラグを記憶する基本コントローラ20用のアプリ運転開始要求フラグ記憶手段25D,35D,45Dと、拡張コントローラ30に対してアプリケーション運転開始要求が行われたか否かを示すフラグを記憶する拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段25E,35E,45Eと、基本コントローラ20用のアプリケーションαについての運転状態および停止状態を含むステータスを記憶する基本コントローラ20用のステータス記憶手段25F,35F,45Fと、拡張コントローラ30用のアプリケーションβについての運転状態および停止状態を含むステータスを記憶する拡張コントローラ30用のステータス記憶手段25G,35G,45Gとが設けられている。
なお、共有メモリ領域25,35,45には、その他に、基本コントローラ20に対してアプリケーション停止要求が行われたか否かを示すフラグを記憶する基本コントローラ20用のアプリ停止要求フラグ記憶手段(不図示)や、拡張コントローラ30に対してアプリケーション停止要求が行われたか否かを示すフラグを記憶する拡張コントローラ30用のアプリ停止要求フラグ記憶手段(不図示)等が設けられているが、本発明の処理に直接関係しないため、説明を省略する。
フラッシュメモリ26,36、46は、ローダ50でユーザにより作成されてコンパイルされたアプリケーションプログラムα,βや、システムプログラムγ,δ,εを格納するものである。
データメモリ27,37は、例えばSRAM等であり、アプリケーションプログラムα,βの実行時に使用される各種変数等を記憶するユーザデータ領域27A,37Aを有している。なお、管理部40では、アプリケーションプログラムを実行することはないので、データメモリ27,37に相当するメモリは設置されていない。
管理部40のUSB接続部47A、イーサネット接続部47B(イーサネットは登録商標)、およびシリアル接続部47Cは、外部端末との通信のために設けられ、ローダ50を接続することができる。なお、外部端末との通信のための接続部は、これらの種類に限定されるものではなく、有線、無線の別も問わない。また、管理部40のスイッチ操作信号入力部48は、スイッチ操作による外部からの起動要求等の信号を入力するものである。
ローダ50は、プログラマブルコントローラシステム10の管理部40に接続され、ユーザによるアプリケーションプログラムの開発を支援し、作成されたアプリケーションプログラム(機械語オブジェクト)を通信によりプログラマブルコントローラシステム10の管理部40へ送信する開発支援装置であり、ユーザによるアプリケーションのソースコードの編集(作成、変更等)を支援する処理を実行するソース編集処理手段51と、このソース編集処理手段51による編集支援で作成されたアプリケーションのソースコードを記憶するソースコード記憶手段52と、このソースコード記憶手段52に記憶されたソースコードをコンパイルして機械語オブジェクトに変換する処理を実行するコンパイラ53と、このコンパイラ53による変換処理で得られた機械語オブジェクトを記憶する機械語オブジェクト記憶手段54と、ソースコード名とその変換後の機械語オブジェクト名との対応関係を定めるソースコード管理表を記憶するソースコード管理表記憶手段55と、機械語オブジェクト記憶手段54に記憶された機械語オブジェクトをプログラマブルコントローラシステム10の管理部40へ送信する処理を実行する機械語オブジェクト送信処理手段56とを備えて構成されている。このローダ50は、例えば、ノート型等の汎用のコンピュータにより構成されていてもよく、あるいは専用のハンディローダ等であってもよい。
図2において、基本コントローラ20のシステム処理手段24は、システムイニシャル処理手段24Aと、アプリケーション起動周期待機処理手段24Bと、カウント更新処理手段24Cと、同期割込み送信処理手段24Dと、アプリケーション起動要求処理手段24Eと、外部要求待機処理手段24Fと、設定用カウンタ値算出・設定処理手段24Gと、アプリ運転開始要求フラグ設定処理手段24Hと、アプリ起動準備処理手段24Jと、アプリ運転状態開始タイミング判断処理手段24Kと、アプリ運転状態移行処理手段24Lと、機械語オブジェクト配置処理手段24Mと、実行管理テーブル補完処理手段24Nと、プログラム切替タイミング判断処理手段24Pと、実行管理テーブル切替処理手段24Qとを含んで構成されている。
また、拡張コントローラ30のシステム処理手段34は、システムイニシャル処理手段34Aと、同期割込み受信処理手段34Bと、アプリケーション起動要求処理手段34Cと、アプリ運転開始要求フラグ監視処理手段34Dと、アプリ起動準備処理手段34Eと、アプリ運転状態開始タイミング判断処理手段34Fと、アプリ運転状態移行処理手段34Gと、機械語オブジェクト配置処理手段34Hと、実行管理テーブル補完処理手段34Jと、プログラム切替タイミング判断処理手段34Kと、実行管理テーブル切替処理手段34Lとを含んで構成されている。
さらに、管理部40のシステム処理手段44は、プログラム切替カウンタ値算出・設定処理手段44Aを含んで構成されている。
このうち、基本コントローラ20の各処理手段24B,24C,24D,24Fおよび拡張コントローラ30の各処理手段34B,34Cは、図4の処理Aを実行する手段である。また、基本コントローラ20の各処理手段24F,24G,24H,24J,24K,24Lおよび拡張コントローラ30の各処理手段34D,34E,34F,34Gは、図5の処理Bを実行する手段である。さらに、基本コントローラ20の各処理手段24M,24N,24P,24Q、拡張コントローラ30の各処理手段34H,34J,34K,34L、および管理部40のプログラム切替カウンタ値算出・設定処理手段44Aは、図6の処理Cを実行する手段である。なお、後述するように、プログラム切替カウンタ値算出・設定処理手段は、基本コントローラ20に設けてもよい。
システムイニシャル処理手段24A,34Aは、リセット状態解除で立ち上がり、ハンドシェイク(通信用パラメータの取り決め等の通信規律の確立処理)により、基本コントローラ20と拡張コントローラ30との間のイニシャル完了待ち合わせを行うものである。また、基本コントローラ20のシステムイニシャル処理手段24Aは、同期フリーランカウンタ25Aを起動する処理を行い、これにより同期フリーランカウンタ25Aは、本実施形態では、ゼロからのカウントを開始する。
(処理Aを実行する手段)
基本コントローラ20のアプリケーション起動周期待機処理手段24Bは、タイマ時間計測により、所定の時間間隔(例えば1ミリ秒の間隔等)のアプリケーション起動周期が到来したか否かを判断する処理を繰り返し実行するものである。
基本コントローラ20のカウント更新処理手段24Cは、アプリケーション起動周期が到来したときに、同期割込み信号の送信直前に、同期フリーランカウンタ25A(図1参照)に、1カウントを加算する処理を実行するものである。従って、本実施形態では、同期フリーランカウンタ25Aの値は、同期割込み信号の1回の送信につき、1カウント増加することになる。
基本コントローラ20の同期割込み送信処理手段24Dは、アプリケーション起動周期が到来したときに、拡張コントローラ30へ同期割込み信号を送信する処理を実行するものである。従って、同期割込み信号は、アプリケーション起動周期の到来タイミングに合わせて送信されることになる。
拡張コントローラ30の同期割込み受信処理手段34Bは、基本コントローラ20からの同期割込み信号を受信する処理を実行するものである。
アプリケーション起動要求処理手段24E,34Cは、同期割込み信号の送受信の直後に、各々のステータス記憶手段25F,35G(図1参照)に記憶されたステータスを取得し、取得したステータスがアプリケーション運転状態(RUN)である場合に、各々のアプリケーションプログラムα,βの起動要求処理を実行するものである。従って、アプリケーションプログラムの起動要求処理は、アプリケーション起動周期の到来タイミングに合わせて行われることになる。このアプリケーションプログラムの起動要求処理が行われるときには、アプリケーションプログラムα,βは、既に主メモリ23,33上に配置されており、主メモリ23,33に記憶されている各コントローラ20,30のプログラム実行管理表ポインタにより指示された実行管理テーブル(図3、図8〜図11参照)に従って、複数の機械語オブジェクトを組み合わせてなるアプリケーションプログラムα,βの実行が開始される。つまり、マイクロプロセッサ22,32は、アプリケーションプログラムα,βを実行する場合、実行管理テーブルから、起動するプログラム(アプリケーションプログラムα,βを構成する機械語オブジェクト)が格納されている領域の先頭アドレス(格納先アドレス)を取得し、その取得したアドレスからプログラムを実行していくようになっている。なお、実行管理テーブルに記録されている格納先アドレスは、上から順に取得していく。
(処理Bを実行する手段)
基本コントローラ20の外部要求待機処理手段24Fは、管理部40のスイッチ操作信号入力部48(図1参照)に、スイッチ操作による外部からの起動要求信号の入力があったときに、この起動要求信号を管理部40から受信する処理を実行するものである。
基本コントローラ20の設定用カウンタ値算出・設定処理手段24Gは、外部からの起動要求信号を受信した場合に、同期フリーランカウンタ25A(図1参照)の現在値に、予め定められたアプリ運転状態開始タイミング設定用のカウント数C1を加算することにより、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値を、アプリ運転状態開始カウンタ値記憶手段25B(図1参照)に記憶させる処理を実行するものである。
具体的には、同期フリーランカウンタ25Aの現在値をLとすると、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値Nは、N=L+C1で算出される(図7参照)。
例えば、アプリ運転状態開始タイミング設定用のカウント数C1は、基本コントローラ20および拡張コントローラ30のメモリ処理化処理(データメモリ27,37のユーザデータ領域27A,37Aに記憶された各種変数の初期化処理)を含む各々のコントローラ20,30のアプリケーション起動準備処理に要する時間(例えば、数百ミリ秒)のうち最長のものの所要時間を考慮し、例えば1000カウント(仮に1カウントを1ミリ秒とすれば、1秒に相当する。)等と定められている。そして、このカウント数C1は、上記のように見込みの数値であるが、設定用カウンタ値算出・設定処理手段24G(システム処理手段24)を構成するシステムプログラムγ内に記述しておいてもよく、あるいはメモリ(例えばフラッシュメモリ26等)に記憶させておいてもよい。
基本コントローラ20のアプリ運転開始要求フラグ設定処理手段24Hは、外部からの起動要求信号を受信した場合に、基本コントローラ20に設けられた基本コントローラ20用のアプリ運転開始要求フラグ記憶手段25D(図1参照)に記憶されたフラグ、および基本コントローラ20に設けられた拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段25E(図1参照)に記憶されたフラグを立てる処理(運転開始要求があったことを示す状態に変更する処理)を実行するものである。なお、このアプリ運転開始要求フラグ設定処理手段24Hにより、基本コントローラ20に設けられた拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段25E(図1参照)に記憶されたフラグが立てられると、この状態が内部バス11を介して、共有メモリ機能により、拡張コントローラ30に設けられた拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段35E(図1参照)に記憶されたフラグに反映される。
拡張コントローラ30のアプリ運転開始要求フラグ監視処理手段34Dは、拡張コントローラ30に設けられた拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段35E(図1参照)に記憶されたフラグの状態を監視し、このフラグが立った状態に変更されたか否かを判断する処理を繰り返し実行するものである。
アプリ起動準備処理手段24J,34Eは、基本コントローラ20および拡張コントローラ30のメモリ初期化処理(データメモリ27,37のユーザデータ領域27A,37Aに記憶された各種変数の初期化処理)を含む各々のコントローラ20,30のアプリケーション起動準備処理を実行するものである。
アプリ運転状態開始タイミング判断処理手段24K,34Fは、同期フリーランカウンタ25A,35A(図1参照)の現在値と、アプリ運転状態開始カウンタ値記憶手段25B,35B(図1参照)に記憶された同期フリーランカウンタ値とが一致したか否かを判断することにより、アプリケーション運転状態の開始タイミングが到来したか否かを判断する処理を繰り返し実行するものである。
アプリ運転状態移行処理手段24L,34Gは、アプリ運転状態開始タイミング判断処理手段24K,34Fにより双方の値が一致した(つまり、アプリケーション運転状態の開始タイミングが到来した)と判断した場合に、各々のコントローラ20,30用のアプリ運転開始要求フラグ記憶手段25D,35E(図1参照)に記憶されたフラグを降ろす処理(運転開始要求が無いことを示す状態に変更する処理)を実行するとともに、各々のステータス記憶手段25F,35G(図1参照)に記憶されたステータスを、アプリケーション停止状態(STOP)からアプリケーション運転状態(RUN)へ移行させる処理を実行するものである。
(処理Cを実行する手段)
基本コントローラ20の機械語オブジェクト配置処理手段24Mは、ローダ50から送信されてくる変更後の機械語オブジェクトを、この変更後の機械語オブジェクトに対応する番号とともに受信し、受信した変更後の機械語オブジェクトのうち自コントローラ20用の変更後の機械語オブジェクトについては、主メモリ23に格納して配置する(つまり、自己の主メモリ23に残しておく)とともに、その配置した変更後の機械語オブジェクトの格納先アドレスを、主メモリ23に記憶されている現在使用中の実行管理テーブルT1とは別の実行管理テーブルT2(図3、図8〜図11参照)に記録し、拡張コントローラ30用の変更後の機械語オブジェクトについては、拡張コントローラ30のマイクロプロセッサ32に送信する処理を実行するものである。また、機械語オブジェクト配置処理手段24Mは、自コントローラ20用の変更後の機械語オブジェクトを、主メモリ23に展開することと併せ、自己のフラッシュメモリ26に記憶させる処理も行う。
この際、機械語オブジェクト配置処理手段24Mは、受信した番号を、実行管理テーブルのインデックスとして利用し、実行管理テーブル上における当該番号の示す位置に、当該番号に対応する機械語オブジェクトの格納先アドレスを記録する。例えば、図3に示す変更前のプログラムの格納状況を参照して説明すると、番号1に対応する機械語オブジェクトP1の格納先アドレスは、実行管理テーブルT1上の先頭の位置に記録し、番号2に対応する機械語オブジェクトP2の格納先アドレスは、実行管理テーブルT1上の2番目の位置に記録する。この格納先アドレス記録処理は、変更後のプログラムの格納時についても同様であり、実行管理テーブルT1が別の実行管理テーブルT2に変わるだけである。また、後述する拡張コントローラ30の機械語オブジェクト配置処理手段34Hの場合も同様である。
なお、機械語オブジェクト配置処理手段24Mは、受信した変更後の機械語オブジェクトが、拡張コントローラ30用の変更後の機械語オブジェクトであるか否かの判断を行わずに、ローダ50から受信した変更後の機械語オブジェクトの全てを、拡張コントローラ30のマイクロプロセッサ32に転送するようにしてもよい。
拡張コントローラ30の機械語オブジェクト配置処理手段34Hは、ローダ50から基本コントローラ20のマイクロプロセッサ22を介して送信されてくる変更後の機械語オブジェクトを、対応する番号とともに受信し、受信した変更後の機械語オブジェクトのうち自コントローラ30用の変更後の機械語オブジェクトのみ(なお、基本コントローラ20から拡張コントローラ30用の変更後の機械語オブジェクトのみが送信されてくる場合には、受信した変更後の機械語オブジェクトの全てとなる。)を、自己の主メモリ33に格納して配置するとともに、その配置した変更後の機械語オブジェクトの格納先アドレスを、主メモリ33に記憶されている現在使用中の実行管理テーブルT1とは別の実行管理テーブルT2(図3、図8〜図11参照)に記録する処理を実行するものである。また、機械語オブジェクト配置処理手段34Hは、自コントローラ30用の変更後の機械語オブジェクトを、主メモリ33に展開することと併せ、自己のフラッシュメモリ36に記憶させる処理も行う。
実行管理テーブル補完処理手段24N,34Jは、ローダ50から送信されてくる変更後の機械語オブジェクトの送信完了通知の信号を受信し、現在使用中の実行管理テーブルT1とは別の実行管理テーブルT2(図3、図8〜図11参照)を補完する処理を実行するものである。この補完処理は、現在使用中の実行管理テーブルT1に記録された機械語オブジェクトの格納先アドレスのうち、変更する必要のない機械語オブジェクトの格納先アドレスを、そのまま利用して別の実行管理テーブルT2に記録する処理である。
プログラム切替タイミング判断処理手段24P,34Kは、同期フリーランカウンタ25A,35A(図1参照)の現在値と、プログラム切替カウンタ値記憶手段25C,35C(図1参照)に記憶された同期フリーランカウンタ値とが一致したか否かを判断することにより、アプリケーションプログラムの切替タイミングが到来したか否かを判断する処理を繰り返し実行するものである。
実行管理テーブル切替処理手段24Q,34Lは、プログラム切替タイミング判断処理手段24P,34Kにより双方が一致した(つまり、アプリケーションプログラムの切替タイミングが到来した)と判断した場合に、主メモリ23,33に記憶されている各々のコントローラ20,30用の現在実行中の実行管理テーブルT1を、別の実行管理テーブルT2へ切り替える処理、すなわち主メモリ23,33に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルT1のアドレスから別の実行管理テーブルT2のアドレスへと切り替える処理(図11参照)を実行するものである。
管理部40のプログラム切替カウンタ値算出・設定処理手段44Aは、ローダ50から送信されてくるプログラムの切替指示の信号を受信し、同期フリーランカウンタ45Aの現在値に、予め定められたカウント数C2を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値を、プログラム切替カウンタ値記憶手段45C(図1参照)に記憶させる処理を実行するものである。
具体的には、同期フリーランカウンタ45Aの現在値をMとすると、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値Kは、K=M+C2で算出される(図7参照)。
例えば、プログラム切替タイミング設定用のカウント数C2は、数カウント(2カウント等)と定められている。このカウント数C2は、見込みの数値であるが、プログラム切替カウンタ値算出・設定処理手段44A(システム処理手段44)を構成するシステムプログラムε内に記述しておいてもよく、あるいはメモリ(例えばフラッシュメモリ46等)に記憶させておいてもよい。
(その他のシステム処理)
管理部40のシステム処理手段44は、プログラム切替カウンタ値算出・設定処理手段44Aによる処理の他に、スイッチ操作信号入力部48(図1参照)に、スイッチ操作による外部からの起動要求信号の入力があったときに、この起動要求信号を基本コントローラ20へ送信する処理等を実行するものである。
このような本実施形態においては、以下のようにしてプログラマブルコントローラシステム10におけるシステム処理が実行され、アプリケーションが起動される。
(処理Aの流れ)
図4において、基本コントローラ20および拡張コントローラ30において、システム処理のうちの処理Aを開始する(ステップS1,S2)。先ず、基本コントローラ20において、アプリケーション起動周期待機処理手段24Bにより、タイマ時間計測を行って所定の時間間隔(例えば1ミリ秒の間隔等)のアプリケーション起動周期が到来したか否かを繰り返し判断する(ステップS3)。
ステップS3でアプリケーション起動周期が到来したと判断された場合には、カウント更新処理手段24Cにより、同期フリーランカウンタ25Aに、1カウントを加算する(ステップS4)。なお、同期フリーランカウンタ25Aの値を変更した状態は、内部バス11を介して、共有メモリ機能により、他の同期フリーランカウンタ35A,45Aにも反映される。
続いて、同期割込み送信処理手段24Dにより、拡張コントローラ30へ同期割込み信号を送信する(ステップS5)。この同期割込み信号は、基本コントローラ20のバスLSI21、内部バス11、および拡張コントローラ30のバスLSI31を介して拡張コントローラ30のマイクロプロセッサ32に伝達される。そして、拡張コントローラ30において、同期割込み受信処理手段34Bにより、基本コントローラ20からの同期割込み信号を受信する(ステップS6)。
それから、同期割込み信号の送受信の後に、基本コントローラ20においては、アプリケーション起動要求処理手段24Eにより、基本コントローラ20用のステータス記憶手段25Fに記憶されたステータスを取得し、取得したステータスがアプリケーション運転状態(RUN)であるか否かを判断し(ステップS7)、アプリケーション運転状態(RUN)である場合には、基本コントローラ20のアプリケーションαの起動要求を行い(ステップS8)、処理Aを終了する(ステップS9)。一方、取得したステータスがアプリケーション停止状態(STOP)である場合には、アプリケーションαの起動要求は行わずに、処理Aを終了する(ステップS9)。
また、拡張コントローラ30においても同様にして、アプリケーション起動要求処理手段34Cにより、拡張コントローラ30用のステータス記憶手段35Gに記憶されたステータスを取得し、取得したステータスがアプリケーション運転状態(RUN)であるか否かを判断し(ステップS10)、アプリケーション運転状態(RUN)である場合には、拡張コントローラ30のアプリケーションβの起動要求を行い(ステップS11)、処理Aを終了する(ステップS12)。一方、取得したステータスがアプリケーション停止状態(STOP)である場合には、アプリケーションβの起動要求は行わずに、処理Aを終了する(ステップS12)。
なお、基本コントローラ20および拡張コントローラ30において、アプリケーションプログラムα,βの起動要求処理が行われると、図8〜図11に示すように、各々のコントローラ20,30のマイクロプロセッサ22,32により、主メモリ23,33に記憶されている各コントローラ20,30用のプログラム実行管理表ポインタを取得し、その取得時点のプログラム実行管理表ポインタにより指示されている主メモリ23,33上の実行管理テーブル(例えば、最初は、実行管理テーブルT1であり、切替後は、実行管理テーブルT2となる。)を取得し、取得した実行管理テーブルの1番目に記録されている機械語オブジェクトの先頭アドレスを取得し、取得したアドレスから、既に主メモリ23,33上に配置されているアプリケーションプログラムα,βを構成するプログラム(機械語オブジェクト)を実行していく。これらのアプリケーションプログラムα,βは、いずれも、図7中の縦の点線で示された一定周期(例えば1ミリ秒間隔等)内、すなわちアプリケーション起動周期内で実行が完了するように設定されている。
(処理Bの流れ)
図5において、基本コントローラ20および拡張コントローラ30において、システム処理のうちの処理Bを開始する(ステップS21,S22)。先ず、基本コントローラ20において、外部要求待機処理手段24Fにより、外部からの起動要求を待ち、管理部40のスイッチ操作信号入力部48(図1参照)に、スイッチ操作による外部からの起動要求信号の入力があったときに、この起動要求信号を管理部40から受信する(ステップS23)。
続いて、設定用カウンタ値算出・設定処理手段24Gにより、同期フリーランカウンタ25Aの現在値(図7の例では、L)に、予め定められたアプリ運転状態開始タイミング設定用のカウント数C1(例えば、C1=1000カウント等)を加算することにより、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値(図7の例では、N)を、N=L+C1として算出し、算出した同期フリーランカウンタ値(図7の例では、N)を、アプリ運転状態開始カウンタ値記憶手段25Bに記憶させる(ステップS24)。なお、アプリ運転状態開始カウンタ値記憶手段25Bに記憶された同期フリーランカウンタ値(図7の例では、N)は、内部バス11を介して、共有メモリ機能により、他のアプリ運転状態開始カウンタ値記憶手段35B,45Bにも反映される。
それから、アプリ運転開始要求フラグ設定処理手段24Hにより、基本コントローラ20用のアプリ運転開始要求フラグ記憶手段25Dに記憶されたフラグ、および拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段25Eに記憶されたフラグを立てる処理(運転開始要求があったことを示す状態に変更する処理)を実行する(ステップS25)。なお、基本コントローラ20用のアプリ運転開始要求フラグ記憶手段25Dに記憶されたフラグが立てられると、この状態が内部バス11を介して、共有メモリ機能により、拡張コントローラ30や管理部40に設けられた基本コントローラ20用のアプリ運転開始要求フラグ記憶手段35D,45Dに記憶されたフラグに反映される。同様に、拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段25Eに記憶されたフラグが立てられると、この状態が内部バス11を介して、共有メモリ機能により、拡張コントローラ30や管理部40に設けられた拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段35E,45Eに記憶されたフラグに反映される。
そして、拡張コントローラ30において、アプリ運転開始要求フラグ監視処理手段34Dにより、拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段35Eに記憶されたフラグの状態を監視し、このフラグが立った状態に変更されたか否かを判断する処理を繰り返し実行し(ステップS26)、フラグが立った場合には、次のステップに進む。
その後、基本コントローラ20および拡張コントローラ30において、アプリ起動準備処理手段24J,34Eにより、各コントローラ20,30のメモリ初期化処理(データメモリ27,37のユーザデータ領域27A,37Aに記憶されたアプリケーションα,β用の各種変数の初期化処理)を含む各コントローラ20,30のアプリケーション起動準備処理を実行する(ステップS27,S28)。
次に、基本コントローラ20においては、アプリ運転状態開始タイミング判断処理手段24Kにより、同期フリーランカウンタ25Aの現在値と、アプリ運転状態開始カウンタ値記憶手段25Bに記憶された同期フリーランカウンタ値(図7の例では、N)とが一致したか否かを判断することにより、アプリケーション運転状態の開始タイミングが到来したか否かを判断する処理を繰り返し実行する(ステップS29)。
ステップS29で双方の値が一致した(つまり、アプリケーション運転状態の開始タイミングが到来した)と判断された場合には、アプリ運転状態移行処理手段24Lにより、基本コントローラ20用のアプリ運転開始要求フラグ記憶手段25Dに記憶されたフラグを降ろす処理(運転開始要求が無いことを示す状態に変更する処理)を実行する(ステップS30)。なお、基本コントローラ20用のアプリ運転開始要求フラグ記憶手段25Dに記憶されたフラグが降ろされると、この状態が内部バス11を介して、共有メモリ機能により、拡張コントローラ30や管理部40に設けられた基本コントローラ20用のアプリ運転開始要求フラグ記憶手段35D,45Dに記憶されたフラグに反映される。
続いて、アプリ運転状態移行処理手段24Lにより、基本コントローラ20用のステータス記憶手段25Fに記憶されたステータスを、アプリケーション停止状態(STOP)からアプリケーション運転状態(RUN)へ移行させる処理を実行し(ステップS31)、処理Bを終了する(ステップS32)。なお、基本コントローラ20用のステータス記憶手段25Fに記憶されたステータスを変更すると、この変更後の状態が内部バス11を介して、共有メモリ機能により、拡張コントローラ30や管理部40に設けられた基本コントローラ20用のステータス記憶手段35F,45Fに記憶されたステータスに反映される。
また、拡張コントローラ30においては、アプリ運転状態開始タイミング判断処理手段34Fにより、同期フリーランカウンタ35Aの現在値と、アプリ運転状態開始カウンタ値記憶手段35Bに記憶された同期フリーランカウンタ値(図7の例では、N)とが一致したか否かを判断することにより、アプリケーション運転状態の開始タイミングが到来したか否かを判断する処理を繰り返し実行する(ステップS33)。
ステップS33で双方の値が一致した(つまり、アプリケーション運転状態の開始タイミングが到来した)と判断された場合には、アプリ運転状態移行処理手段34Gにより、拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段35Eに記憶されたフラグを降ろす処理(運転開始要求が無いことを示す状態に変更する処理)を実行する(ステップS34)。なお、拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段35Eに記憶されたフラグが降ろされると、この状態が内部バス11を介して、共有メモリ機能により、基本コントローラ20や管理部40に設けられた拡張コントローラ30用のアプリ運転開始要求フラグ記憶手段25E,45Eに記憶されたフラグに反映される。
続いて、アプリ運転状態移行処理手段34Gにより、拡張コントローラ30用のステータス記憶手段35Gに記憶されたステータスを、アプリケーション停止状態(STOP)からアプリケーション運転状態(RUN)へ移行させる処理を実行し(ステップS35)、処理Bを終了する(ステップS36)。なお、拡張コントローラ30用のステータス記憶手段35Gに記憶されたステータスを変更すると、この変更後の状態が内部バス11を介して、共有メモリ機能により、基本コントローラ20や管理部40に設けられた拡張コントローラ30用のステータス記憶手段25G,45Gに記憶されたステータスに反映される。
(処理Cの流れ)
図6において、ローダ50でのプログラムの開発支援処理を開始するとともに(ステップS41)、管理部40、基本コントローラ20、および拡張コントローラ30において、システム処理のうちの処理Cを開始する(ステップS42,S43,S44)。
先ず、ユーザは、ローダ50のソース編集処理手段51によるインターフェース機能により、変更対象のプログラムのソースコードの記述を変更する作業を行い、変更後のソースコードをソースコード記憶手段52に記憶させる(ステップS45)。
続いて、ローダ50のコンパイラ53により、ソースコード記憶手段52に記憶された変更後のソースコードをコンパイルすることにより、ターゲット上(各コントローラ20,30のマイクロプロセッサ22,32上)で動作する機械語オブジェクトに変換し、変換処理で得られた変更後の機械語オブジェクトを機械語オブジェクト記憶手段54に記憶させる(ステップS46)。また、図3に示すように、コンパイラ53により、ソースコード名と、その変換後の機械語オブジェクト名と、これらに付された番号との対応関係を定めるソースコード管理表を作成し、作成したソースコード管理表をソースコード管理表記憶手段55に記憶させる(ステップS46)。
それから、ローダ50の機械語オブジェクト送信処理手段56により、ソースコード管理表記憶手段55に記憶された機械語オブジェクト名と番号との対応関係を用いて、機械語オブジェクト記憶手段54からこの機械語オブジェクト名を付された変更後の機械語オブジェクトを取得し、取得した変更後の機械語オブジェクトを、対応する番号とともに、管理部40のUSB接続部47A、イーサネット接続部47B(イーサネットは登録商標)、またはシリアル接続部47Cのいずれかを用いた通信により、管理部40を介して(但し、図6では、管理部40の中継処理の図示は省略されている。)、基本コントローラ20へ送信する(ステップS47)。なお、複数の変更後の機械語オブジェクトがある場合には、全ての変更後の機械語オブジェクトを、管理部40を介して基本コントローラ20へ送信する。また、後述するように、管理部40の機能は、基本コントローラ20の1つの機能として実装されていてもよいので、この場合には、変更後の機械語オブジェクトを、対応する番号とともに、基本コントローラ20に直接に送信してもよい。
例えば、図8に示すように、プログラム更新前においては、基本コントローラ20のマイクロプロセッサ22用の主メモリ23には、機械語オブジェクトP1,P2が格納され、拡張コントローラ30のマイクロプロセッサ32用の主メモリ33には、機械語オブジェクトP2,P3が格納されているとする。そして、ユーザが、ローダ50で、機械語オブジェクトP2に対応するソースコードU2(図3参照)を変更し、その変更後のソースコードをコンパイルして機械語オブジェクトP2’が得られた場合には、この変更後の機械語オブジェクトP2’が、番号2とともに、管理部40を介して基本コントローラ20へ送信される。
基本コントローラ20では、機械語オブジェクト配置処理手段24Mにより、ローダ50から送信されてくる変更後の機械語オブジェクトを、対応する番号とともに受信する(ステップS48)。そして、機械語オブジェクト配置処理手段24Mにより、受信した変更後の機械語オブジェクトが、いずれのコントローラで実行される変更後の機械語オブジェクトであるかを判断し、受信した変更後の機械語オブジェクトのうち自コントローラ20用の変更後の機械語オブジェクトについては、主メモリ23に格納して配置するとともに、拡張コントローラ30用の変更後の機械語オブジェクトについては、拡張コントローラ30のマイクロプロセッサ32に送信する(ステップS49)。なお、拡張コントローラ30用の変更後の機械語オブジェクトであるか否かの判断を行うことなく、ローダ50から受信した変更後の機械語オブジェクトの全てを、拡張コントローラ30へ転送してもよい。
続いて、主メモリ23に配置した変更後の機械語オブジェクトを格納した領域の先頭アドレス(格納先アドレス)を、主メモリ23に記憶されている現在使用中の実行管理テーブルT1とは別の実行管理テーブルT2に記録する(ステップS50)。
例えば、図9に示すように、変更後の機械語オブジェクトP2’を、番号2とともに受信した場合には、受信した変更後の機械語オブジェクトP2’を主メモリ23に格納して配置するとともに、番号2であるから、実行管理テーブルT2の2番目の位置に、変更後の機械語オブジェクトP2’の格納先アドレスを記録する。
なお、機械語オブジェクト配置処理手段24Mにより、受信した変更後の機械語オブジェクトが、いずれのコントローラ用の変更後の機械語オブジェクトであるかの判断処理を行う際には、自コントローラ20用の変更後の機械語オブジェクトであるか否かを判断するだけであれば、現在使用中の実行管理テーブルT1を用いて、受信した番号の示す実行管理テーブルT1上の位置に、機械語オブジェクトの格納先アドレスが記録されているか否かにより判断することができる。また、受信した番号から、別途にメモリ(例えばフラッシュメモリ26等)に記憶されたデータ(番号とコントローラとの対応関係を示すデータ)を用いて判断してもよく、あるいは、ローダ50から機械語オブジェクトおよび番号とともに送信されてくるターゲット識別情報(いずれのコントローラで実行される機械語オブジェクトであるかを識別するための情報)を用いて判断してもよい。
その後、拡張コントローラ30では、機械語オブジェクト配置処理手段34Hにより、ローダ50から基本コントローラ20のマイクロプロセッサ22を介して送信されてくる変更後の機械語オブジェクトを、対応する番号とともに受信し(ステップS51)、受信した変更後の機械語オブジェクトのうち自コントローラ30用の変更後の機械語オブジェクトのみ(なお、基本コントローラ20から拡張コントローラ30用の変更後の機械語オブジェクトのみが送信されてくる場合には、受信した変更後の機械語オブジェクトの全てとなる。)を、自己の主メモリ33に格納して配置する(ステップS52)。
なお、基本コントローラ20から、拡張コントローラ30用の変更後の機械語オブジェクト以外の変更後の機械語オブジェクトも含めて送信されてきた場合には、現在使用中の実行管理テーブルT1を用いて、受信した番号の示す実行管理テーブルT1上の位置に、機械語オブジェクトの格納先アドレスが記録されているか否かにより、自コントローラ30用の変更後の機械語オブジェクトであるか否かを判断することができる。
続いて、機械語オブジェクト配置処理手段34Hにより、主メモリ33に配置した変更後の機械語オブジェクトの格納先アドレスを、主メモリ33に記憶されている現在使用中の実行管理テーブルT1とは別の実行管理テーブルT2に記録する(ステップS53)。
例えば、図9に示すように、変更後の機械語オブジェクトP2’を、番号2とともに受信した場合には、受信した変更後の機械語オブジェクトP2’を主メモリ33に格納して配置するとともに、番号2であるから、実行管理テーブルT2の2番目の位置に、変更後の機械語オブジェクトP2’の格納先アドレスを記録する。
そして、各コントローラ20,30で主メモリ23,33への変更後の機械語オブジェクトの格納が完了した後(複数の変更後の機械語オブジェクトがある場合には、全ての変更後の機械語オブジェクトの格納が完了した後)に、ローダ50では、機械語オブジェクト送信処理手段56により、機械語オブジェクトの送信完了通知の信号を、管理部40を介して(但し、図6では、管理部40の中継処理の図示は省略されている。)、各コントローラ20,30のマイクロプロセッサ22,32へ送信する(ステップS54)。
それから、基本コントローラ20では、実行管理テーブル補完処理手段24Nにより、ローダ50から送信されてくる変更後の機械語オブジェクトの送信完了通知の信号を受信し(ステップS55)、別の実行管理テーブルT2の補完処理、すなわち現在使用中の実行管理テーブルT1に記録された機械語オブジェクトの格納先アドレスのうち、変更する必要のない機械語オブジェクトの格納先アドレスを、そのまま利用して別の実行管理テーブルT2に記録する処理を実行する(ステップS56)。
また、拡張コントローラ30でも、実行管理テーブル補完処理手段34Jにより、ローダ50から送信されてくる変更後の機械語オブジェクトの送信完了通知の信号を受信し(ステップS57)、別の実行管理テーブルT2の補完処理、すなわち現在使用中の実行管理テーブルT1に記録された機械語オブジェクトの格納先アドレスのうち、変更する必要のない機械語オブジェクトの格納先アドレスを、そのまま利用して別の実行管理テーブルT2に記録する処理を実行する(ステップS58)。
例えば、図10に示すように、基本コントローラ20では、主メモリ23に記憶されている別の実行管理テーブルT2の補完処理として、機械語オブジェクトP1は変更されていないので、そのまま利用し、現在使用中の実行管理テーブルT1の1番目の位置に記録されている機械語オブジェクトP1の格納先アドレスを、別の実行管理テーブルT2の1番目の位置に記録する。また、図10に示すように、拡張コントローラ30では、主メモリ33に記憶されている別の実行管理テーブルT2の補完処理として、機械語オブジェクトP3は変更されていないので、そのまま利用し、現在使用中の実行管理テーブルT1の3番目の位置に記録されている機械語オブジェクトP3の格納先アドレスを、別の実行管理テーブルT2の3番目の位置に記録する。
次に、ローダ50から、管理部40に対してプログラムの切替指示の信号を送信し(ステップS59)、ローダ50でのプログラム変更に関する処理を終了する(ステップS60)。管理部40では、プログラム切替カウンタ値算出・設定処理手段44Aにより、ローダ50から送信されてくるプログラムの切替指示の信号を受信し(ステップS61)、同期フリーランカウンタ45Aの現在値(図7の例では、M)に、予め定められたカウント数C2(例えば、C2=2カウント等)を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値(図7の例では、K)を、K=M+C2として算出し、算出した同期フリーランカウンタ値(図7の例では、K)を、プログラム切替カウンタ値記憶手段45C(図1参照)に記憶させ(ステップS62)、管理部40での処理Cを終了する(ステップS63)。
その後、基本コントローラ20では、プログラム切替タイミング判断処理手段24Pにより、同期フリーランカウンタ25A(図1参照)の現在値と、プログラム切替カウンタ値記憶手段25C(図1参照)に記憶された同期フリーランカウンタ値(図7の例では、K)とが一致したか否かを判断することにより、アプリケーションプログラムの切替タイミングが到来したか否かを判断する処理を繰り返し実行する(ステップS64)。
そして、ステップS64で、プログラム切替タイミング判断処理手段24Pにより双方が一致した(つまり、アプリケーションプログラムの切替タイミングが到来した)と判断した場合には、実行管理テーブル切替処理手段24Qにより、主メモリ23に記憶されている基本コントローラ20用の現在実行中の実行管理テーブルT1を、別の実行管理テーブルT2へ切り替える処理、すなわち、図11に示すように、主メモリ23に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルT1のアドレスから別の実行管理テーブルT2のアドレスへと切り替える処理を実行し(ステップS65)、基本コントローラ20での処理Cを終了する(ステップS66)。
また、拡張コントローラ30では、プログラム切替タイミング判断処理手段34Kにより、同期フリーランカウンタ35A(図1参照)の現在値と、プログラム切替カウンタ値記憶手段35C(図1参照)に記憶された同期フリーランカウンタ値(図7の例では、K)とが一致したか否かを判断することにより、アプリケーションプログラムの切替タイミングが到来したか否かを判断する処理を繰り返し実行する(ステップS67)。
そして、ステップS67で、プログラム切替タイミング判断処理手段34Kにより双方が一致した(つまり、アプリケーションプログラムの切替タイミングが到来した)と判断した場合には、実行管理テーブル切替処理手段34Lにより、主メモリ33に記憶されている拡張コントローラ30用の現在実行中の実行管理テーブルT1を、別の実行管理テーブルT2へ切り替える処理、すなわち、図11に示すように、主メモリ33に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルT1のアドレスから別の実行管理テーブルT2のアドレスへと切り替える処理を実行し(ステップS68)、拡張コントローラ30での処理Cを終了する(ステップS69)。
(システム処理の全体の流れ)
図7において、先ず、図示は省略されているが、リセット状態解除により、基本コントローラ20および拡張コントローラ30において、システムイニシャル処理手段24A,34Aによる処理が開始される。この際、基本コントローラ20のシステムイニシャル処理手段24Aにより、同期フリーランカウンタ25Aが起動され、ゼロからのカウントが開始される。なお、同期フリーランカウンタ25Aの状態は、内部バス11を介して、共有メモリ機能により、拡張コントローラ30や管理部40に設けられた同期フリーランカウンタ35A,45Aに反映される。
また、基本コントローラ20のシステムイニシャル処理手段24Aにより、基本コントローラ20用のステータス記憶手段25Fに記憶されたステータスが、アプリケーション停止状態(STOP)に設定され、この状態が内部バス11を介して、共有メモリ機能により、拡張コントローラ30や管理部40に設けられた基本コントローラ20用のステータス記憶手段35F,45Fに記憶されたステータスに反映される。同様に、拡張コントローラ30のシステムイニシャル処理手段34Aにより、拡張コントローラ30用のステータス記憶手段35Gに記憶されたステータスが、アプリケーション停止状態(STOP)に設定され、この状態が内部バス11を介して、共有メモリ機能により、基本コントローラ20や管理部40に設けられた拡張コントローラ30用のステータス記憶手段25G,45Gに記憶されたステータスに反映される。なお、ステータスは、最初にイニシャル状態としておき、ハンドシェイクしてイニシャル処理を完了してから、アプリケーション停止状態(STOP)としてもよい。
続いて、基本コントローラ20のアプリケーション起動周期待機処理手段24Bによるアプリケーション起動周期の到来監視が開始され、以降、図7中の点線で示された縦線のように、一定周期(例えば1ミリ秒間隔等)で、すなわちアプリケーション起動周期のタイミングで、処理A(図4参照)の同期割込みが繰り返し実行されるとともに、同期フリーランカウンタ25Aのカウントアップが進んでいく。図7では、アプリケーション起動周期の到来(図4のステップS3)が点線の縦線で示され、同期フリーランカウンタ25Aのカウントアップ(図4のステップS4)で点線の直後からカウンタ値が1カウント増加し、さらにその直後の同期割込み信号の送受信(図4のステップS5,S6)が下方に向かう太い矢印で示されている。
その後、システムイニシャル処理手段24A,34Aにより、図示は省略されているが、ハンドシェイク(通信用パラメータの取り決め等の通信規律の確立処理)を行うことにより、基本コントローラ20と拡張コントローラ30との間のイニシャル完了待ち合わせを行う。
そして、イニシャル処理の完了後には、基本コントローラ20および拡張コントローラ30の双方とも、イニシャル状態(不図示)からアプリケーション停止状態となり、基本コントローラ20の外部要求待機処理手段24Fによる外部からの起動要求待ち(起動のスイッチ操作待ち)を行う処理B(図5参照)が開始される。
この際、処理B(図5参照)に対し、処理A(図4参照)は、一定周期での割込みとなるので、図7に示すように、処理Aと処理Bとが交互に実行されるタイムチャートとなる。但し、処理Aは、割込みの処理であるため、図7のタイムチャートにおいて、図4の処理Aの流れは何回も繰り返されるが、図5の処理Bの流れは1回である。なお、図7中において、点線で示されたアプリケーション起動周期の時間間隔(例えば1ミリ秒等)を示す長さと、処理Aの実行時間を示す長さと、処理Bの実行時間を示す長さとは、実際の時間の比率を示すものではなく、各処理の時間的関係をイメージし易くするための説明の便宜上の記載である。
図7に示すように、同期フリーランカウンタ25Aの値がLになった時点で、外部からの起動要求(図5のステップS23)があったとすると、この時点で、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値Nが、見込みで予め定められたカウント数C1を用いて、N=L+C1により算出され、算出された同期フリーランカウンタ値Nの設定が行われる(図5のステップS24)。
それから、基本コントローラ20では、アプリケーションαの起動準備処理が行われ(図5のステップS27)、拡張コントローラ30では、アプリケーションβの起動準備処理が行われる(図5のステップS28)。なお、図7の例では、アプリケーションαの起動準備処理がカウント値(N−1)まで続き、アプリケーションβの起動準備処理がカウント値(N−2)まで続くように記載されているが、これは、各コントローラ20,30によって起動準備処理に要する時間が異なることを示すための記載であり、実際のカウント値ではない。実際には、例えばC1=1000カウント等の大きさの数値を見込んでNを設定するので、Nよりも、もっと手前のカウント値でそれぞれの起動準備処理は終了する。
その後、アプリケーション起動周期の到来タイミングで、処理Aの同期フリーランカウンタ25Aのカウンタアップ(図4のステップS4)を行って、同期フリーランカウンタ25Aの値がNになったとする。そして、処理Aの同期割込み信号の送受信(図4のステップS5,S6)の後に、ステータスの確認(図4のステップS7,S10)を行っても、このときには、ステータスは、未だアプリケーション停止状態(STOP)であるから、アプリケーション起動要求(図4のステップS8,S11)は行われない。
この直後に、処理Aの割込みを終了し、処理Bに戻ると、同期フリーランカウンタ25A,35Aの値はNになっているので、アプリケーション運転状態の開始タイミングが到来したと判断され(図5のステップS29,S33)、基本コントローラ20および拡張コントローラ30において、基本コントローラ20用のステータスおよび拡張コントローラ30用のステータスが、それぞれアプリケーション停止状態(STOP)からアプリケーション運転状態(RUN)へ移行される(図5のステップS31,S35)。
続いて、同期フリーランカウンタ25A,35Aの値が(N+1)になった時点で、処理Aの同期割込み信号の送受信(図4のステップS5,S6)の後に、ステータスの確認(図4のステップS7,S10)を行うと、この時点では、ステータスは、既にアプリケーション運転状態(RUN)へ移行されているので、基本コントローラ20および拡張コントローラ30において、アプリケーションα,βが起動される(図4のステップS8,S11)。以降、同期フリーランカウンタ25A,35Aの値が(N+2),(N+3),…になった時点でも同様であり、ステータスは、アプリケーション運転状態(RUN)となっているので、アプリケーションα,βが起動される(図4のステップS8,S11)。従って、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値がNであれば、その次のカウンタ値(N+1)の時点から、アプリケーション運転状態(アプリケーションα,βの一定周期での起動が繰り返される期間)が続くことになる。
また、上述したように、同期フリーランカウンタ25A,35Aの値が(N+1)になった時点から、アプリケーションα,βの一定周期での起動が繰り返されるが、アプリケーションα,βは、一定周期内で実行が終了するように作成されているので、各周期におけるアプリケーションα,βの実行の終了後に、運転中のプログラムの更新を受け付ける処理C(図6参照)が待機状態となる。
従って、処理C(図6参照)に対し、処理A(図4参照)は、一定周期での割込みとなり、また、その割込みのタイミングで繰り返し起動されるアプリケーションα,βの実行は、各周期内で終了するので、図7に示すように、処理Aと、アプリケーションによる処理APLと、処理Cとが入れ替わりながら実行されるタイムチャートとなる。但し、図7のタイムチャートにおいて、図4の処理Aの流れや、アプリケーションによる処理APLは、何回も繰り返されるが、図6の処理Cの流れは1回である。なお、図7中において、点線で示されたアプリケーション起動周期の時間間隔(例えば1ミリ秒等)を示す長さと、処理Aの実行時間を示す長さと、アプリケーションによる処理APLの実行時間を示す長さと、処理Cの実行時間を示す長さとは、実際の時間の比率を示すものではなく、各処理の時間的関係をイメージし易くするための説明の便宜上の記載である。
図7に示すように、同期フリーランカウンタ45Aの値がMになる時点までに、変更後の機械語オブジェクトの送信および主メモリ23,33への格納が行われ、同期フリーランカウンタ45Aの値がMになった時点で、ローダ50からのプログラムの切替指示(図6のステップS59,S61)があったとすると、この時点で、プログラムの切替タイミングを示す同期フリーランカウンタ値Kが、見込みで予め定められたカウント数C2を用いて、K=M+C2により算出され、算出された同期フリーランカウンタ値Kの設定が行われる(図6のステップS62)。
その後、アプリケーション起動周期の到来タイミングで、処理Aの同期フリーランカウンタ25Aのカウンタアップ(図4のステップS4)を行って、同期フリーランカウンタ25Aの値がKになったとする。このとき、処理A(図4参照)の割込みのタイミングで同期して起動されたアプリケーションα,βの実行後に、処理C(図6参照)に戻ると、同期フリーランカウンタ25A,35Aの値はKになっているので、プログラムの切替タイミングが到来したと判断され(図6のステップS64,S67)、基本コントローラ20および拡張コントローラ30において、主メモリ23,33に記憶されている各コントローラ20,30用の現在実行中の実行管理テーブルT1を、別の実行管理テーブルT2へ切り替える処理、すなわち、図11に示すように、主メモリ23,33に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルT1のアドレスから別の実行管理テーブルT2のアドレスへと切り替える処理が行われる。
続いて、同期フリーランカウンタ25A,35Aの値が(K+1)になった時点で、処理Aのアプリケーションα,βの起動要求(図4のステップS8,S11)が行われると、この時点では、各コントローラ20,30用のプログラム実行管理表ポインタが既に切り替えられているので、切替後のプログラム実行管理表ポインタが指している実行管理テーブルT2に従って、主メモリ23,33に格納されたプログラムが実行される。すなわち、この時点では、実行管理テーブルが既にT1からT2へ切り替えられているので、切替後の実行管理テーブルT2に従って、主メモリ23,33に格納されたプログラムが実行される。そして、切替後の実行管理テーブルT2には、変更後の機械語プログラムの格納先アドレスが含まれているので、変更後の機械語プログラムを含むアプリケーションプログラムα,βが実行されることになる。従って、プログラムの切替タイミングを示す同期フリーランカウンタ値がKであれば、その次のカウンタ値(K+1)の時点から、切替後のプログラムによる運転状態が続くことになる。
このような本実施形態によれば、次のような効果がある。すなわち、基本コントローラ20のカウント更新処理手段24Cにより、同期フリーランカウンタ25Aの値を更新していき、基本コントローラ20および拡張コントローラ30の各々のプログラム切替タイミング判断処理手段24P,34Kにより、同期フリーランカウンタ25A,35Aの現在値と、プログラム切替カウンタ値記憶手段25C,35Cに記憶された同期フリーランカウンタ値とが一致したと判断した場合に、各々の実行管理テーブル切替処理手段24Q,34Lにより、各々のコントローラ20,30用の実行管理テーブルT1を、変更後の機械語オブジェクトの格納先アドレスが記録された別の実行管理テーブルT2へ切り替えるので、切替後には、各々のコントローラ20,30で、切替後の実行管理テーブルT2に従って、変更後の機械語オブジェクトを含んで構成される更新されたアプリケーションプログラムα,βを実行することができる。このため、プログラムの同期更新を実現することができる。
また、基本コントローラ20の同期割込み送信処理手段24Dおよび拡張コントローラ30の同期割込み受信処理手段34Bにより、同期割込み信号の送受信を行い、基本コントローラ20および拡張コントローラ30の各々のアプリケーション起動要求処理手段24E,34Cにより、同期割込み信号の送受信のタイミングで、各々のアプリケーションα,βの起動要求処理を実行するので(図4参照)、各々のアプリケーションα,βの周期的に繰り返される起動を毎回同期させることができる。
そして、このように周期的に繰り返されるアプリケーションプログラムα,βの起動の同期化を図ることができるので、同期割込み信号の送受信のタイミングで、変更後の機械語オブジェクトを含んで構成される各々のアプリケーションプログラムα,βを同期させて起動することができるため、プログラムの同期更新および同期起動の双方を実現することができる。
また、以上のように、基本コントローラ20と拡張コントローラ30との間での同期割込み信号および同期フリーランカウンタ25A,35Aによるタイミング制御により、プログラムの更新の同期化、および周期的に繰り返されるアプリケーションプログラムの起動の同期化を図ることができるので、制御対象の動作の不具合を未然に防止するとともに、高精度な同期制御を実現することができる。
さらに、プログラム切替カウンタ値算出・設定処理手段44Aは、同期フリーランカウンタ45Aの現在値に、予め定められたカウント数C2を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、設定する構成とされているので、ローダ50からのプログラム切替指示を受け付けたときに、そのときの同期フリーランカウンタ45Aの値を基準として、相対的にアプリケーションプログラムの切替タイミングを定めることができるため、適切でかつ早期の切替タイミングを設定することができる。
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲内での変形等は本発明に含まれるものである。
例えば、前記実施形態では、拡張コントローラ30は1つであるものとして説明を行ったが、拡張コントローラ30は複数でもよい。
また、前記実施形態では、管理部40に、プログラム切替カウンタ値算出・設定処理手段44Aが設けられていたが、基本コントローラ20に、プログラム切替カウンタ値算出・設定処理手段を設けてもよい。この場合、プログラム切替カウンタ値算出・設定処理手段は、ローダ50からのプログラム切替指示の信号を受信し、このときの同期フリーランカウンタ25Aの現在値に、予め定められたカウント数C2を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値をプログラム切替カウンタ値記憶手段25Cに記憶させる構成とすればよい。
そして、上記のプログラム切替カウンタ値算出・設定処理手段44Aの機能だけではなく、より一般的には、管理部40の機能(システム処理手段44により実現される機能全般)は、基本コントローラ20の1つの機能として実装されていてもよい。従って、図6に示されている管理部40で実行されるステップS42〜S63の処理は、基本コントローラ20で実行してもよい。
さらに、前記実施形態では、変更後の機械語オブジェクトは、ローダ50から管理部40を介して(但し、図6では、管理部40の中継処理の図示は省略されている。)基本コントローラ20へ送信された後に、基本コントローラ20から拡張コントローラ30へ送信されるようになっていたが、ローダ50から、管理部40を介して、基本コントローラ20および拡張コントローラ30へ直接に送信するようにしてもよい。つまり、基本コントローラ20から拡張コントローラ30への送信を行わないようにしてもよい。この場合、拡張コントローラ30へ直接に送信される変更後の機械語オブジェクトの中には、自コントローラ30用の変更後の機械語オブジェクトではないものが含まれることになるので、拡張コントローラ30の機械語オブジェクト配置処理手段34Hにより、受信した変更後の機械語オブジェクトが、自コントローラ30用の変更後の機械語オブジェクトであるか否かの判断を行えばよい。なお、管理部40で単なる中継処理を行うのではなく、管理部40のシステム処理手段44により、ローダ50から受信した変更後の機械語オブジェクトが、いずれのコントローラで実行される変更後の機械語オブジェクトであるかを判断し、受信した変更後の機械語オブジェクトのうち基本コントローラ20用の変更後の機械語オブジェクトについては、基本コントローラ20のマイクロプロセッサ22に送信し、拡張コントローラ30用の変更後の機械語オブジェクトについては、拡張コントローラ30のマイクロプロセッサ32に送信するようにしてもよい。
また、前記実施形態では、設定用カウンタ値算出・設定処理手段24Gにより、外部からの起動要求を受け付けたときの同期フリーランカウンタ25Aの値を基準として、相対的にアプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、設定する構成とされていたが(図5のステップS24)、これに限定されるものではなく、例えば、基本コントローラ20および拡張コントローラ30の双方(3つ以上のコントローラがある場合には、それらの全部)についてのアプリケーション起動準備処理が終了するのをフラグやステータス等を用いて確認してから(つまり、起動準備処理の終了を判断できるようなフラグやステータスを設けておく。)、確認後にアプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、設定する構成としてもよい。例えば、全部のアプリケーション起動準備処理が終了するのを確認した時点の同期フリーランカウンタ25Aの値に、予め定められたカウント数C3(例えば、C3=2カウント等)を加算することにより、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、設定してもよい。しかし、アプリケーション運転状態の開始タイミングの判断処理の容易化という観点からは、前記実施形態のような構成とすることが好ましい。
さらに、前記実施形態では、3つの共有メモリ領域25,35,45でデータを共有する構成とされていたが(図1、図2参照)、それぞれのマイクロプロセッサとバスで接続された1つの共有メモリ領域を設置してもよい。
また、実用上、同期フリーランカウンタ25Aの値のオーバーフローが問題になることはないが、万一、オーバーフローした場合(外部からの起動要求が著しく遅れた場合等)を考慮し、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値の算出処理を、次のようにしてもよい。すなわち、同期フリーランカウンタ25Aの最大値をMAXとし(0〜MAXの値をとるので、カウント総数は(MAX+1)となる。)、算出するアプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値をNとし、この算出処理の時点での同期フリーランカウンタ25Aの現在値をLとし、予め定められたカウント数をC1(このC1の値は、前記実施形態と同じでよい。)とすると、N=L+C1がMAXを超える場合には、N=L+C1−(MAX+1)とする処理を行ってもよい。つまり、カウント値がMAXとなった後に、0に戻ることを考慮し、カウント総数の(MAX+1)を減じている。なお、同期フリーランカウンタ25Aが1からカウントされるものとすれば(つまり、カウント値がMAXとなった後に、1に戻るとすれば)、1〜MAXの値をとるので、カウント総数はMAXとなり、N=L+C1−MAXでよい。要するに、カウント値がLの時点(外部からの起動要求があった時点)から、カウント数C1の時間分だけ経過した時点を定めることができればよい。