(57)【特許請求の範囲】
【請求項１】
基本コントローラおよび少なくとも１つの拡張コントローラを備え、これらの複数のコントローラの各々で用意された実行管理テーブルに従って各々のアプリケーションプログラムを実行する構成とされたプログラマブルコントローラシステムであって、
前記基本コントローラおよび前記拡張コントローラで共有される共有メモリ領域に設けられた同期フリーランカウンタと、
前記共有メモリ領域に設けられてアプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を記憶するプログラム切替カウンタ値記憶手段とを備え、
前記基本コントローラは、
前記拡張コントローラへ同期割込み信号を送信する処理を実行する同期割込み送信処理手段と、
前記同期フリーランカウンタに、前記同期割込み信号の１回の送信につき、１カウント若しくは一定数のカウントを加算または減算する処理を実行するカウント更新処理手段とを備え、
前記拡張コントローラは、
前記基本コントローラからの前記同期割込み信号を受信する処理を実行する同期割込み受信処理手段を備え、
前記基本コントローラおよび前記拡張コントローラの各々は、
ローダから送信されてくる変更後の機械語オブジェクトを、各々のコントローラのプロセッサ用の主メモリに格納して配置するとともに、前記変更後の機械語オブジェクトの格納先アドレスを現在使用中の実行管理テーブルとは別の実行管理テーブルに記録する処理を実行する機械語オブジェクト配置処理手段と、
前記同期フリーランカウンタの現在値と前記プログラム切替カウンタ値記憶手段に記憶された前記同期フリーランカウンタ値とが一致したか否かを判断する処理を繰り返し実行するプログラム切替タイミング判断処理手段と、
このプログラム切替タイミング判断処理手段により一致したと判断した場合に、各々のコントローラ用の実行管理テーブルを前記別の実行管理テーブルへ切り替える処理を実行する実行管理テーブル切替処理手段と、
前記同期割込み信号の送受信のタイミングで、各々のコントローラ用の実行管理テーブルに従って実行される各々のアプリケーションプログラムの起動要求処理を実行するアプリケーション起動要求処理手段と
を備えたことを特徴とするプログラマブルコントローラシステム。
【請求項２】
前記複数のコントローラのプロセッサとは別のプロセッサを有する管理部、または前記基本コントローラは、
前記ローダからのプログラム切替指示を受け付けた場合に、前記同期フリーランカウンタの現在値に、予め定められたカウント数を加算または減算することにより、前記アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、算出した前記同期フリーランカウンタ値を前記プログラム切替カウンタ値記憶手段に記憶させる処理を実行するプログラム切替カウンタ値算出・設定処理手段を備えた
ことを特徴とする請求項１に記載のプログラマブルコントローラシステム。
【請求項３】
基本コントローラおよび少なくとも１つの拡張コントローラを備え、これらの複数のコントローラの各々で用意された実行管理テーブルに従って各々のアプリケーションプログラムを実行する構成とされたプログラマブルコントローラシステムのプログラム更新方法であって、
前記基本コントローラおよび前記拡張コントローラで共有される共有メモリ領域に、同期フリーランカウンタと、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を記憶するプログラム切替カウンタ値記憶手段とを設けておき、
前記基本コントローラの同期割込み送信処理手段が、前記拡張コントローラへ同期割込み信号を送信する処理を実行し、
前記基本コントローラのカウント更新処理手段が、前記同期フリーランカウンタに、前記同期割込み信号の１回の送信につき、１カウント若しくは一定数のカウントを加算または減算する処理を実行し、
前記拡張コントローラの同期割込み受信処理手段が、前記基本コントローラからの前記同期割込み信号を受信する処理を実行し、
前記基本コントローラおよび前記拡張コントローラの各々の機械語オブジェクト配置処理手段が、ローダから送信されてくる変更後の機械語オブジェクトを、各々のコントローラのプロセッサ用の主メモリに格納して配置するとともに、前記変更後の機械語オブジェクトの格納先アドレスを現在使用中の実行管理テーブルとは別の実行管理テーブルに記録する処理を実行し、
前記基本コントローラおよび前記拡張コントローラの各々のプログラム切替タイミング判断処理手段が、前記同期フリーランカウンタの現在値と前記プログラム切替カウンタ値記憶手段に記憶された前記同期フリーランカウンタ値とが一致したか否かを判断する処理を繰り返し実行し、
前記基本コントローラおよび前記拡張コントローラの各々の実行管理テーブル切替処理手段が、前記プログラム切替タイミング判断処理手段により一致したと判断した場合に、各々のコントローラ用の実行管理テーブルを前記別の実行管理テーブルへ切り替える処理を実行し、
前記基本コントローラおよび前記拡張コントローラの各々のアプリケーション起動要求処理手段が、前記同期割込み信号の送受信のタイミングで、各々のコントローラ用の実行管理テーブルに従って実行される各々のアプリケーションプログラムの起動要求処理を実行する
ことを特徴とするプログラマブルコントローラシステムのプログラム更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、基本コントローラおよび少なくとも１つの拡張コントローラを備え、これらの複数のコントローラの各々で用意された実行管理テーブルに従って各々のアプリケーションプログラムを実行する構成とされたプログラマブルコントローラシステムおよびそのプログラム更新方法に係り、実行中のアプリケーションプログラムを更新する場合に利用できる。
【背景技術】
【０００２】
従来、プログラマブルコントローラは、シーケンス命令を高速に実行させるために専用ハードウェアで実装するのが主流であったが、汎用ＣＰＵ（中央演算処理装置）の高速化に伴い、汎用ＣＰＵを用いたプログラマブルコントローラが開発されるようになってきている。また、演算処理の高速化のために、複数のプロセッサを用いたプログラマブルコントローラシステムの開発も行われている。
【０００３】
一方、プログラマブルコントローラには、運転中のシステムを停止しないで、プログラムを更新する機能があるが、従来の更新方式では、複数のプロセッサを備えたプログラマブルコントローラシステムの場合には、プロセッサ毎に個別にプログラムの更新を実施していた。
【０００４】
なお、複数のプロセッサを同期させるシステムとして、プログラム制御モードを示す情報を保持するプログラム同期フラグを備え、このプログラム同期フラグの情報を更新したときに、その更新情報を、プログラムの各命令を記憶する命令記憶部に通知するマルチプロセッサシステムが知られている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−７６６６７号公報（要約、請求項１）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、複数のプロセッサを備えたプログラマブルコントローラシステムにおいて、従来のようにプロセッサ毎に個別にプログラムの更新を行うと、つまり、同期をとらずに個々のタイミングで更新を行うと、各々のプロセッサの出力結果や動作が異なる結果、システムの動作に悪影響を及ぼすことがある。
【０００７】
例えば、アプリケーションプログラムは、複数のプログラムを組み合わせてなる階層構造を有しているので、複数のプロセッサで独立して実行される各々のアプリケーションプログラムには、同じ機能を備えたプログラム（例えばサブルーチンやファンクション等）が含まれることがある。すなわち、複数のプロセッサで共通に実行されるプログラム（例えばサブルーチンやファンクション等）がある。そして、このような共通のプログラムを変更した場合に、複数のプロセッサで個別にプログラムの更新を行うと、複数のプロセッサ間でプログラムの切替タイミングがずれるので、その間、変更前のプログラムを実行しているプロセッサと、変更後のプログラムを実行しているプロセッサとが混在する状態となり、各々のプロセッサの出力結果や動作が異なるという事態が発生し、制御対象の動作に不具合が生じるおそれがある。より具体的には、例えば、制御対象内に、別々のサーボモータで駆動される２本の軸がある場合に、一方のサーボモータの回転数が変わらずに、他方のサーボモータの回転数だけが上がった結果、２本の軸の回転数が異なってしまう等の不具合である。従って、このようなプログラムの切替タイミングのずれにより生じる不都合を未然に防止するために、プログラムを同期して更新することが必要となる。
【０００８】
また、プログラムの同期更新と併せ、周期的に繰り返されるアプリケーションプログラムの起動について同期を図ることも必要である。精緻な制御が要求される制御対象の場合には、周期的に繰り返されるアプリケーションプログラムの起動について同期が図られていなければ、やはり不都合が生じるおそれがあるからである。例えば、カラー印刷機に設けられた送り用のサーボモータの制御等では、僅かなズレで印刷物の品質が落ちてしまうため、高精度な同期制御が要求される。
【０００９】
本発明の目的は、プログラムの更新の同期化および起動の同期化を図ることができるプログラマブルコントローラシステムおよびそのプログラム更新方法を提供するところにある。
【課題を解決するための手段】
【００１０】
本発明は、基本コントローラおよび少なくとも１つの拡張コントローラを備え、これらの複数のコントローラの各々で用意された実行管理テーブルに従って各々のアプリケーションプログラムを実行する構成とされたプログラマブルコントローラシステムであって、基本コントローラおよび拡張コントローラで共有される共有メモリ領域に設けられた同期フリーランカウンタと、共有メモリ領域に設けられてアプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を記憶するプログラム切替カウンタ値記憶手段とを備え、基本コントローラは、拡張コントローラへ同期割込み信号を送信する処理を実行する同期割込み送信処理手段と、同期フリーランカウンタに、同期割込み信号の１回の送信につき、１カウント若しくは一定数のカウントを加算または減算する処理を実行するカウント更新処理手段とを備え、拡張コントローラは、基本コントローラからの同期割込み信号を受信する処理を実行する同期割込み受信処理手段を備え、基本コントローラおよび拡張コントローラの各々は、ローダから送信されてくる変更後の機械語オブジェクトを、各々のコントローラのプロセッサ用の主メモリに格納して配置するとともに、変更後の機械語オブジェクトの格納先アドレスを現在使用中の実行管理テーブルとは別の実行管理テーブルに記録する処理を実行する機械語オブジェクト配置処理手段と、同期フリーランカウンタの現在値とプログラム切替カウンタ値記憶手段に記憶された同期フリーランカウンタ値とが一致したか否かを判断する処理を繰り返し実行するプログラム切替タイミング判断処理手段と、このプログラム切替タイミング判断処理手段により一致したと判断した場合に、各々のコントローラ用の実行管理テーブルを別の実行管理テーブルへ切り替える処理を実行する実行管理テーブル切替処理手段と、同期割込み信号の送受信のタイミングで、各々のコントローラ用の実行管理テーブルに従って実行される各々のアプリケーションプログラムの起動要求処理を実行するアプリケーション起動要求処理手段とを備えたことを特徴とするものである。
【００１１】
ここで、「カウント更新処理手段」における「同期割込み信号の１回の送信につき、１カウント若しくは一定数のカウントを加算または減算する処理」とは、同期割込み信号の送信を繰り返すと、同期フリーランカウンタが、０，１，２，３，４，…と１カウントずつ増加してもよく、あるいは、例えば、０，２，４，６，８，…等のように毎回カウントが同数ずつ増加してもよく、さらには、…，８，７，６，５，４，…と１カウントずつ減少してもよく、あるいは、例えば、…，１６，１４，１２，１０，８，…等のように毎回カウントが同数ずつ減少してもよい趣旨である。但し、設計の容易化、構成の簡易化等の観点からは、１カウントずつ増加していくことが好ましい。
【００１２】
このような本発明のプログラマブルコントローラシステムにおいては、基本コントローラのカウント更新処理手段により、同期フリーランカウンタの値を更新していき、基本コントローラおよび拡張コントローラの各々のプログラム切替タイミング判断処理手段により、同期フリーランカウンタの現在値と、プログラム切替カウンタ値記憶手段に記憶された同期フリーランカウンタ値とが一致したと判断した場合に、各々の実行管理テーブル切替処理手段により、各々のコントローラ用の実行管理テーブルを、変更後の機械語オブジェクトの格納先アドレスが記録された別の実行管理テーブルへ切り替える。このため、切替後には、各々のコントローラで、別の実行管理テーブルに従って、変更後の機械語オブジェクトを含んで構成される更新されたアプリケーションプログラムが実行されることになり、プログラムの同期更新が実現される。
【００１３】
また、基本コントローラの同期割込み送信処理手段および拡張コントローラの同期割込み受信処理手段により、同期割込み信号の送受信を行い、基本コントローラおよび拡張コントローラの各々のアプリケーション起動要求処理手段により、同期割込み信号の送受信のタイミングで、各々のアプリケーションプログラムの起動要求処理を実行するので、各々のアプリケーションプログラムの周期的に繰り返される起動を毎回同期させることが可能となる。
【００１４】
そして、このように周期的に繰り返されるアプリケーションプログラムの起動の同期化を図ることが可能となることで、同期割込み信号の送受信のタイミングで、変更後の機械語オブジェクトを含んで構成される各々のアプリケーションプログラムを同期させて起動することが可能となることから、プログラムの同期更新および同期起動の双方を実現することができるようになり、これらにより前記目的が達成される。
【００１５】
なお、前述した特許文献１に記載されたマルチプロセッサシステムの技術は、プログラムの同期更新を行うものではなく、また、同期フリーランカウンタによるタイミング制御を行うものでもないので、本発明とは異なる技術である。
【００１６】
また、前述したプログラマブルコントローラシステムにおいて、複数のコントローラのプロセッサとは別のプロセッサを有する管理部、または基本コントローラは、ローダからのプログラム切替指示を受け付けた場合に、同期フリーランカウンタの現在値に、予め定められたカウント数を加算または減算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値をプログラム切替カウンタ値記憶手段に記憶させる処理を実行するプログラム切替カウンタ値算出・設定処理手段を備えた構成とすることが望ましい。
【００１７】
ここで、「予め定められたカウント数を加算または減算する」とは、同期フリーランカウンタが、０，１，２，３，４，…と１カウントずつ増加していくか、あるいは、例えば、０，２，４，６，８，…等のように同数カウントずつ増加していく場合には、「予め定められたカウント数」を「加算」し、一方、…，８，７，６，５，４，…と１カウントずつ減少していくか、あるいは、例えば、…，１６，１４，１２，１０，８，…等のように同数カウントずつ減少していく場合には、「予め定められたカウント数」を「減算」するという意味である。
【００１８】
このように同期フリーランカウンタの現在値に予め定められたカウント数を加算または減算するプログラム切替カウンタ値算出・設定処理手段を備えた構成とした場合には、ローダからのプログラム切替指示を受け付けたときに、そのときの同期フリーランカウンタの値を基準として、相対的にアプリケーションプログラムの切替タイミングを定めることができるので、適切でかつ早期の切替タイミングを設定することが可能となる。
【００１９】
さらに、本発明は、基本コントローラおよび少なくとも１つの拡張コントローラを備え、これらの複数のコントローラの各々で用意された実行管理テーブルに従って各々のアプリケーションプログラムを実行する構成とされたプログラマブルコントローラシステムのプログラム更新方法であって、基本コントローラおよび拡張コントローラで共有される共有メモリ領域に、同期フリーランカウンタと、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を記憶するプログラム切替カウンタ値記憶手段とを設けておき、基本コントローラの同期割込み送信処理手段が、拡張コントローラへ同期割込み信号を送信する処理を実行し、基本コントローラのカウント更新処理手段が、同期フリーランカウンタに、同期割込み信号の１回の送信につき、１カウント若しくは一定数のカウントを加算または減算する処理を実行し、拡張コントローラの同期割込み受信処理手段が、基本コントローラからの同期割込み信号を受信する処理を実行し、基本コントローラおよび拡張コントローラの各々の機械語オブジェクト配置処理手段が、ローダから送信されてくる変更後の機械語オブジェクトを、各々のコントローラのプロセッサ用の主メモリに格納して配置するとともに、変更後の機械語オブジェクトの格納先アドレスを現在使用中の実行管理テーブルとは別の実行管理テーブルに記録する処理を実行し、基本コントローラおよび拡張コントローラの各々のプログラム切替タイミング判断処理手段が、同期フリーランカウンタの現在値とプログラム切替カウンタ値記憶手段に記憶された同期フリーランカウンタ値とが一致したか否かを判断する処理を繰り返し実行し、基本コントローラおよび拡張コントローラの各々の実行管理テーブル切替処理手段が、プログラム切替タイミング判断処理手段により一致したと判断した場合に、各々のコントローラ用の実行管理テーブルを別の実行管理テーブルへ切り替える処理を実行し、基本コントローラおよび拡張コントローラの各々のアプリケーション起動要求処理手段が、同期割込み信号の送受信のタイミングで、各々のコントローラ用の実行管理テーブルに従って実行される各々のアプリケーションプログラムの起動要求処理を実行することを特徴とするものである。
【００２０】
このような本発明のプログラマブルコントローラシステムのプログラム更新方法においては、前述した本発明のプログラマブルコントローラシステムで得られる作用・効果がそのまま得られ、これにより前記目的が達成される。
【発明の効果】
【００２１】
以上に述べたように本発明によれば、基本コントローラと拡張コントローラとの間での同期割込み信号および同期フリーランカウンタによるタイミング制御により、プログラムの更新の同期化、および周期的に繰り返されるアプリケーションプログラムの起動の同期化を図ることができるので、制御対象の動作の不具合を未然に防止するとともに、高精度な同期制御を実現することができるという効果がある。
【図面の簡単な説明】
【００２２】
【図１】本発明の一実施形態のプログラマブルコントローラシステムの全体構成図。
【図２】前記実施形態のシステム処理手段の詳細構成図。
【図３】前記実施形態のソースコードの管理状況および実行プログラムの格納状況の一例を示す説明図。
【図４】前記実施形態のシステム処理のうちの同期割込みを行う処理Ａの流れを示すフローチャートの図。
【図５】前記実施形態のシステム処理のうちのアプリケーション運転状態への移行を行う処理Ｂの流れを示すフローチャートの図。
【図６】前記実施形態のシステム処理のうちのプログラム切替を行う処理Ｃの流れを示すフローチャートの図。
【図７】前記実施形態のシステム処理の全体的な流れを示すタイムチャートの図。
【図８】前記実施形態のプログラム配置の一例を示す図。
【図９】前記実施形態の変更後の機械語オブジェクトの送信後の状態の一例を示す図。
【図１０】前記実施形態の変更後の機械語オブジェクトの送信後に行う補完処理の説明図。
【図１１】前記実施形態の実行管理テーブルの切替処理の説明図。
【発明を実施するための形態】
【００２３】
以下に本発明の一実施形態について図面を参照して説明する。図１には、本実施形態のプログラマブルコントローラシステム１０の全体構成が示されている。図２には、プログラマブルコントローラシステム１０のシステム処理手段２４，３４，４４の詳細構成が示され、図３には、ソースコードの管理状況および実行プログラムの格納状況の一例が示されている。また、図４には、システム処理のうちの同期割込みを行う処理Ａの流れがフローチャートで示され、図５には、システム処理のうちのアプリケーション運転状態への移行を行う処理Ｂの流れがフローチャートで示され、図６には、システム処理のうちのプログラム切替を行う処理Ｃの流れがフローチャートで示されている。さらに、図７には、システム処理の全体的な流れがタイムチャートで示されている。また、図８には、主メモリ２３，３３へのプログラム配置の一例が示され、図９には、変更後の機械語オブジェクトＰ２’の送信後の状態の一例が示され、図１０には、変更後の機械語オブジェクトＰ２’の送信後に行う補完処理の説明図が示され、図１１には、実行管理テーブルＴ１，Ｔ２の切替処理の説明図が示されている。
【００２４】
図１において、プログラマブルコントローラシステム１０は、基本コントローラ２０と、拡張コントローラ３０と、管理部４０とを備えて構成されている。本実施形態では、これらの基本コントローラ２０、拡張コントローラ３０、および管理部４０は、それぞれ別々のプリント基板上に形成され、これらの３つの基板が１つの筐体（不図示）に収納される構成となっているが、これに限定されるものではなく、例えば、基本コントローラ２０、拡張コントローラ３０、および管理部４０が、それぞれ別の筐体に収納されていてもよい。
【００２５】
基本コントローラ２０は、バスＬＳＩ２１と、マイクロプロセッサ２２と、主メモリ２３と、共有メモリ領域２５と、フラッシュメモリ２６と、データメモリ２７とを備えている。そして、マイクロプロセッサ２２およびその動作手順を規定するシステムプログラムγ、並びに作業領域である主メモリ２３等により、システム処理手段２４が構成されている。
【００２６】
拡張コントローラ３０も同様な構成であり、バスＬＳＩ３１と、マイクロプロセッサ３２と、主メモリ３３と、共有メモリ領域３５と、フラッシュメモリ３６と、データメモリ３７とを備えている。そして、マイクロプロセッサ３２およびその動作手順を規定するシステムプログラムδ、並びに作業領域である主メモリ３３等により、システム処理手段３４が構成されている。
【００２７】
管理部４０は、基本コントローラ２０や拡張コントローラ３０とは異なった構成であり、バスＬＳＩ４１と、マイクロプロセッサ４２と、主メモリ４３と、共有メモリ領域４５と、フラッシュメモリ４６と、ＵＳＢ接続部４７Ａと、イーサネット接続部４７Ｂ（イーサネットは登録商標）と、シリアル接続部４７Ｃと、スイッチ操作信号入力部４８とを備えている。そして、マイクロプロセッサ４２およびその動作手順を規定するシステムプログラムε、並びに作業領域である主メモリ４３等により、システム処理手段４４が構成されている。
【００２８】
基本コントローラ２０、拡張コントローラ３０、および管理部４０のバスＬＳＩ２１，３１，４１は、内部バス１１に接続され、これらのバスＬＳＩ２１，３１，４１による共有化のための内部バス１１を介した通信機能により、基本コントローラ２０、拡張コントローラ３０、および管理部４０の共有メモリ領域２５，３５，４５に記憶された各種のデータは共有化され、各共有メモリ領域２５，３５，４５のそれぞれに同じデータが保持されるようになっている。
【００２９】
マイクロプロセッサ２２，３２，４２は、主メモリ２３，３３，４３に記憶されたアプリケーションプログラムα，βやシステムプログラムγ，δ，εを読み込んで実行する中央演算処理装置である。なお、管理部４０のマイクロプロセッサ４２では、アプリケーションプログラムの実行処理は行わない。
【００３０】
主メモリ２３，３３，４３は、本実施形態では、一例としてシンクロナスＤＲＡＭ（ＳＤＲＡＭ）とされているが、これに限定されるものではない。
【００３１】
共有メモリ領域２５，３５，４５は、本実施形態では、一例としてＳＲＡＭとされているが、これに限定されるものではない。これらの共有メモリ領域２５，３５，４５には、同期フリーランカウンタ２５Ａ，３５Ａ，４５Ａと、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を記憶するアプリ運転状態開始カウンタ値記憶手段２５Ｂ，３５Ｂ，４５Ｂと、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を記憶するプログラム切替カウンタ値記憶手段２５Ｃ，３５Ｃ，４５Ｃと、基本コントローラ２０に対してアプリケーション運転開始要求が行われたか否かを示すフラグを記憶する基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段２５Ｄ，３５Ｄ，４５Ｄと、拡張コントローラ３０に対してアプリケーション運転開始要求が行われたか否かを示すフラグを記憶する拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段２５Ｅ，３５Ｅ，４５Ｅと、基本コントローラ２０用のアプリケーションαについての運転状態および停止状態を含むステータスを記憶する基本コントローラ２０用のステータス記憶手段２５Ｆ，３５Ｆ，４５Ｆと、拡張コントローラ３０用のアプリケーションβについての運転状態および停止状態を含むステータスを記憶する拡張コントローラ３０用のステータス記憶手段２５Ｇ，３５Ｇ，４５Ｇとが設けられている。
【００３２】
なお、共有メモリ領域２５，３５，４５には、その他に、基本コントローラ２０に対してアプリケーション停止要求が行われたか否かを示すフラグを記憶する基本コントローラ２０用のアプリ停止要求フラグ記憶手段（不図示）や、拡張コントローラ３０に対してアプリケーション停止要求が行われたか否かを示すフラグを記憶する拡張コントローラ３０用のアプリ停止要求フラグ記憶手段（不図示）等が設けられているが、本発明の処理に直接関係しないため、説明を省略する。
【００３３】
フラッシュメモリ２６，３６、４６は、ローダ５０でユーザにより作成されてコンパイルされたアプリケーションプログラムα，βや、システムプログラムγ，δ，εを格納するものである。
【００３４】
データメモリ２７，３７は、例えばＳＲＡＭ等であり、アプリケーションプログラムα，βの実行時に使用される各種変数等を記憶するユーザデータ領域２７Ａ，３７Ａを有している。なお、管理部４０では、アプリケーションプログラムを実行することはないので、データメモリ２７，３７に相当するメモリは設置されていない。
【００３５】
管理部４０のＵＳＢ接続部４７Ａ、イーサネット接続部４７Ｂ（イーサネットは登録商標）、およびシリアル接続部４７Ｃは、外部端末との通信のために設けられ、ローダ５０を接続することができる。なお、外部端末との通信のための接続部は、これらの種類に限定されるものではなく、有線、無線の別も問わない。また、管理部４０のスイッチ操作信号入力部４８は、スイッチ操作による外部からの起動要求等の信号を入力するものである。
【００３６】
ローダ５０は、プログラマブルコントローラシステム１０の管理部４０に接続され、ユーザによるアプリケーションプログラムの開発を支援し、作成されたアプリケーションプログラム（機械語オブジェクト）を通信によりプログラマブルコントローラシステム１０の管理部４０へ送信する開発支援装置であり、ユーザによるアプリケーションのソースコードの編集（作成、変更等）を支援する処理を実行するソース編集処理手段５１と、このソース編集処理手段５１による編集支援で作成されたアプリケーションのソースコードを記憶するソースコード記憶手段５２と、このソースコード記憶手段５２に記憶されたソースコードをコンパイルして機械語オブジェクトに変換する処理を実行するコンパイラ５３と、このコンパイラ５３による変換処理で得られた機械語オブジェクトを記憶する機械語オブジェクト記憶手段５４と、ソースコード名とその変換後の機械語オブジェクト名との対応関係を定めるソースコード管理表を記憶するソースコード管理表記憶手段５５と、機械語オブジェクト記憶手段５４に記憶された機械語オブジェクトをプログラマブルコントローラシステム１０の管理部４０へ送信する処理を実行する機械語オブジェクト送信処理手段５６とを備えて構成されている。このローダ５０は、例えば、ノート型等の汎用のコンピュータにより構成されていてもよく、あるいは専用のハンディローダ等であってもよい。
【００３７】
図２において、基本コントローラ２０のシステム処理手段２４は、システムイニシャル処理手段２４Ａと、アプリケーション起動周期待機処理手段２４Ｂと、カウント更新処理手段２４Ｃと、同期割込み送信処理手段２４Ｄと、アプリケーション起動要求処理手段２４Ｅと、外部要求待機処理手段２４Ｆと、設定用カウンタ値算出・設定処理手段２４Ｇと、アプリ運転開始要求フラグ設定処理手段２４Ｈと、アプリ起動準備処理手段２４Ｊと、アプリ運転状態開始タイミング判断処理手段２４Ｋと、アプリ運転状態移行処理手段２４Ｌと、機械語オブジェクト配置処理手段２４Ｍと、実行管理テーブル補完処理手段２４Ｎと、プログラム切替タイミング判断処理手段２４Ｐと、実行管理テーブル切替処理手段２４Ｑとを含んで構成されている。
【００３８】
また、拡張コントローラ３０のシステム処理手段３４は、システムイニシャル処理手段３４Ａと、同期割込み受信処理手段３４Ｂと、アプリケーション起動要求処理手段３４Ｃと、アプリ運転開始要求フラグ監視処理手段３４Ｄと、アプリ起動準備処理手段３４Ｅと、アプリ運転状態開始タイミング判断処理手段３４Ｆと、アプリ運転状態移行処理手段３４Ｇと、機械語オブジェクト配置処理手段３４Ｈと、実行管理テーブル補完処理手段３４Ｊと、プログラム切替タイミング判断処理手段３４Ｋと、実行管理テーブル切替処理手段３４Ｌとを含んで構成されている。
【００３９】
さらに、管理部４０のシステム処理手段４４は、プログラム切替カウンタ値算出・設定処理手段４４Ａを含んで構成されている。
【００４０】
このうち、基本コントローラ２０の各処理手段２４Ｂ，２４Ｃ，２４Ｄ，２４Ｆおよび拡張コントローラ３０の各処理手段３４Ｂ，３４Ｃは、図４の処理Ａを実行する手段である。また、基本コントローラ２０の各処理手段２４Ｆ，２４Ｇ，２４Ｈ，２４Ｊ，２４Ｋ，２４Ｌおよび拡張コントローラ３０の各処理手段３４Ｄ，３４Ｅ，３４Ｆ，３４Ｇは、図５の処理Ｂを実行する手段である。さらに、基本コントローラ２０の各処理手段２４Ｍ，２４Ｎ，２４Ｐ，２４Ｑ、拡張コントローラ３０の各処理手段３４Ｈ，３４Ｊ，３４Ｋ，３４Ｌ、および管理部４０のプログラム切替カウンタ値算出・設定処理手段４４Ａは、図６の処理Ｃを実行する手段である。なお、後述するように、プログラム切替カウンタ値算出・設定処理手段は、基本コントローラ２０に設けてもよい。
【００４１】
システムイニシャル処理手段２４Ａ，３４Ａは、リセット状態解除で立ち上がり、ハンドシェイク（通信用パラメータの取り決め等の通信規律の確立処理）により、基本コントローラ２０と拡張コントローラ３０との間のイニシャル完了待ち合わせを行うものである。また、基本コントローラ２０のシステムイニシャル処理手段２４Ａは、同期フリーランカウンタ２５Ａを起動する処理を行い、これにより同期フリーランカウンタ２５Ａは、本実施形態では、ゼロからのカウントを開始する。
【００４２】
（処理Ａを実行する手段）
【００４３】
基本コントローラ２０のアプリケーション起動周期待機処理手段２４Ｂは、タイマ時間計測により、所定の時間間隔（例えば１ミリ秒の間隔等）のアプリケーション起動周期が到来したか否かを判断する処理を繰り返し実行するものである。
【００４４】
基本コントローラ２０のカウント更新処理手段２４Ｃは、アプリケーション起動周期が到来したときに、同期割込み信号の送信直前に、同期フリーランカウンタ２５Ａ（図１参照）に、１カウントを加算する処理を実行するものである。従って、本実施形態では、同期フリーランカウンタ２５Ａの値は、同期割込み信号の１回の送信につき、１カウント増加することになる。
【００４５】
基本コントローラ２０の同期割込み送信処理手段２４Ｄは、アプリケーション起動周期が到来したときに、拡張コントローラ３０へ同期割込み信号を送信する処理を実行するものである。従って、同期割込み信号は、アプリケーション起動周期の到来タイミングに合わせて送信されることになる。
【００４６】
拡張コントローラ３０の同期割込み受信処理手段３４Ｂは、基本コントローラ２０からの同期割込み信号を受信する処理を実行するものである。
【００４７】
アプリケーション起動要求処理手段２４Ｅ，３４Ｃは、同期割込み信号の送受信の直後に、各々のステータス記憶手段２５Ｆ，３５Ｇ（図１参照）に記憶されたステータスを取得し、取得したステータスがアプリケーション運転状態（ＲＵＮ）である場合に、各々のアプリケーションプログラムα，βの起動要求処理を実行するものである。従って、アプリケーションプログラムの起動要求処理は、アプリケーション起動周期の到来タイミングに合わせて行われることになる。このアプリケーションプログラムの起動要求処理が行われるときには、アプリケーションプログラムα，βは、既に主メモリ２３，３３上に配置されており、主メモリ２３，３３に記憶されている各コントローラ２０，３０のプログラム実行管理表ポインタにより指示された実行管理テーブル（図３、図８〜図１１参照）に従って、複数の機械語オブジェクトを組み合わせてなるアプリケーションプログラムα，βの実行が開始される。つまり、マイクロプロセッサ２２，３２は、アプリケーションプログラムα，βを実行する場合、実行管理テーブルから、起動するプログラム（アプリケーションプログラムα，βを構成する機械語オブジェクト）が格納されている領域の先頭アドレス（格納先アドレス）を取得し、その取得したアドレスからプログラムを実行していくようになっている。なお、実行管理テーブルに記録されている格納先アドレスは、上から順に取得していく。
【００４８】
（処理Ｂを実行する手段）
【００４９】
基本コントローラ２０の外部要求待機処理手段２４Ｆは、管理部４０のスイッチ操作信号入力部４８（図１参照）に、スイッチ操作による外部からの起動要求信号の入力があったときに、この起動要求信号を管理部４０から受信する処理を実行するものである。
【００５０】
基本コントローラ２０の設定用カウンタ値算出・設定処理手段２４Ｇは、外部からの起動要求信号を受信した場合に、同期フリーランカウンタ２５Ａ（図１参照）の現在値に、予め定められたアプリ運転状態開始タイミング設定用のカウント数Ｃ１を加算することにより、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値を、アプリ運転状態開始カウンタ値記憶手段２５Ｂ（図１参照）に記憶させる処理を実行するものである。
【００５１】
具体的には、同期フリーランカウンタ２５Ａの現在値をＬとすると、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値Ｎは、Ｎ＝Ｌ＋Ｃ１で算出される（図７参照）。
【００５２】
例えば、アプリ運転状態開始タイミング設定用のカウント数Ｃ１は、基本コントローラ２０および拡張コントローラ３０のメモリ処理化処理（データメモリ２７，３７のユーザデータ領域２７Ａ，３７Ａに記憶された各種変数の初期化処理）を含む各々のコントローラ２０，３０のアプリケーション起動準備処理に要する時間（例えば、数百ミリ秒）のうち最長のものの所要時間を考慮し、例えば１０００カウント（仮に１カウントを１ミリ秒とすれば、１秒に相当する。）等と定められている。そして、このカウント数Ｃ１は、上記のように見込みの数値であるが、設定用カウンタ値算出・設定処理手段２４Ｇ（システム処理手段２４）を構成するシステムプログラムγ内に記述しておいてもよく、あるいはメモリ（例えばフラッシュメモリ２６等）に記憶させておいてもよい。
【００５３】
基本コントローラ２０のアプリ運転開始要求フラグ設定処理手段２４Ｈは、外部からの起動要求信号を受信した場合に、基本コントローラ２０に設けられた基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段２５Ｄ（図１参照）に記憶されたフラグ、および基本コントローラ２０に設けられた拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段２５Ｅ（図１参照）に記憶されたフラグを立てる処理（運転開始要求があったことを示す状態に変更する処理）を実行するものである。なお、このアプリ運転開始要求フラグ設定処理手段２４Ｈにより、基本コントローラ２０に設けられた拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段２５Ｅ（図１参照）に記憶されたフラグが立てられると、この状態が内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０に設けられた拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段３５Ｅ（図１参照）に記憶されたフラグに反映される。
【００５４】
拡張コントローラ３０のアプリ運転開始要求フラグ監視処理手段３４Ｄは、拡張コントローラ３０に設けられた拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段３５Ｅ（図１参照）に記憶されたフラグの状態を監視し、このフラグが立った状態に変更されたか否かを判断する処理を繰り返し実行するものである。
【００５５】
アプリ起動準備処理手段２４Ｊ，３４Ｅは、基本コントローラ２０および拡張コントローラ３０のメモリ初期化処理（データメモリ２７，３７のユーザデータ領域２７Ａ，３７Ａに記憶された各種変数の初期化処理）を含む各々のコントローラ２０，３０のアプリケーション起動準備処理を実行するものである。
【００５６】
アプリ運転状態開始タイミング判断処理手段２４Ｋ，３４Ｆは、同期フリーランカウンタ２５Ａ，３５Ａ（図１参照）の現在値と、アプリ運転状態開始カウンタ値記憶手段２５Ｂ，３５Ｂ（図１参照）に記憶された同期フリーランカウンタ値とが一致したか否かを判断することにより、アプリケーション運転状態の開始タイミングが到来したか否かを判断する処理を繰り返し実行するものである。
【００５７】
アプリ運転状態移行処理手段２４Ｌ，３４Ｇは、アプリ運転状態開始タイミング判断処理手段２４Ｋ，３４Ｆにより双方の値が一致した（つまり、アプリケーション運転状態の開始タイミングが到来した）と判断した場合に、各々のコントローラ２０，３０用のアプリ運転開始要求フラグ記憶手段２５Ｄ，３５Ｅ（図１参照）に記憶されたフラグを降ろす処理（運転開始要求が無いことを示す状態に変更する処理）を実行するとともに、各々のステータス記憶手段２５Ｆ，３５Ｇ（図１参照）に記憶されたステータスを、アプリケーション停止状態（ＳＴＯＰ）からアプリケーション運転状態（ＲＵＮ）へ移行させる処理を実行するものである。
【００５８】
（処理Ｃを実行する手段）
【００５９】
基本コントローラ２０の機械語オブジェクト配置処理手段２４Ｍは、ローダ５０から送信されてくる変更後の機械語オブジェクトを、この変更後の機械語オブジェクトに対応する番号とともに受信し、受信した変更後の機械語オブジェクトのうち自コントローラ２０用の変更後の機械語オブジェクトについては、主メモリ２３に格納して配置する（つまり、自己の主メモリ２３に残しておく）とともに、その配置した変更後の機械語オブジェクトの格納先アドレスを、主メモリ２３に記憶されている現在使用中の実行管理テーブルＴ１とは別の実行管理テーブルＴ２（図３、図８〜図１１参照）に記録し、拡張コントローラ３０用の変更後の機械語オブジェクトについては、拡張コントローラ３０のマイクロプロセッサ３２に送信する処理を実行するものである。また、機械語オブジェクト配置処理手段２４Ｍは、自コントローラ２０用の変更後の機械語オブジェクトを、主メモリ２３に展開することと併せ、自己のフラッシュメモリ２６に記憶させる処理も行う。
【００６０】
この際、機械語オブジェクト配置処理手段２４Ｍは、受信した番号を、実行管理テーブルのインデックスとして利用し、実行管理テーブル上における当該番号の示す位置に、当該番号に対応する機械語オブジェクトの格納先アドレスを記録する。例えば、図３に示す変更前のプログラムの格納状況を参照して説明すると、番号１に対応する機械語オブジェクトＰ１の格納先アドレスは、実行管理テーブルＴ１上の先頭の位置に記録し、番号２に対応する機械語オブジェクトＰ２の格納先アドレスは、実行管理テーブルＴ１上の２番目の位置に記録する。この格納先アドレス記録処理は、変更後のプログラムの格納時についても同様であり、実行管理テーブルＴ１が別の実行管理テーブルＴ２に変わるだけである。また、後述する拡張コントローラ３０の機械語オブジェクト配置処理手段３４Ｈの場合も同様である。
【００６１】
なお、機械語オブジェクト配置処理手段２４Ｍは、受信した変更後の機械語オブジェクトが、拡張コントローラ３０用の変更後の機械語オブジェクトであるか否かの判断を行わずに、ローダ５０から受信した変更後の機械語オブジェクトの全てを、拡張コントローラ３０のマイクロプロセッサ３２に転送するようにしてもよい。
【００６２】
拡張コントローラ３０の機械語オブジェクト配置処理手段３４Ｈは、ローダ５０から基本コントローラ２０のマイクロプロセッサ２２を介して送信されてくる変更後の機械語オブジェクトを、対応する番号とともに受信し、受信した変更後の機械語オブジェクトのうち自コントローラ３０用の変更後の機械語オブジェクトのみ（なお、基本コントローラ２０から拡張コントローラ３０用の変更後の機械語オブジェクトのみが送信されてくる場合には、受信した変更後の機械語オブジェクトの全てとなる。）を、自己の主メモリ３３に格納して配置するとともに、その配置した変更後の機械語オブジェクトの格納先アドレスを、主メモリ３３に記憶されている現在使用中の実行管理テーブルＴ１とは別の実行管理テーブルＴ２（図３、図８〜図１１参照）に記録する処理を実行するものである。また、機械語オブジェクト配置処理手段３４Ｈは、自コントローラ３０用の変更後の機械語オブジェクトを、主メモリ３３に展開することと併せ、自己のフラッシュメモリ３６に記憶させる処理も行う。
【００６３】
実行管理テーブル補完処理手段２４Ｎ，３４Ｊは、ローダ５０から送信されてくる変更後の機械語オブジェクトの送信完了通知の信号を受信し、現在使用中の実行管理テーブルＴ１とは別の実行管理テーブルＴ２（図３、図８〜図１１参照）を補完する処理を実行するものである。この補完処理は、現在使用中の実行管理テーブルＴ１に記録された機械語オブジェクトの格納先アドレスのうち、変更する必要のない機械語オブジェクトの格納先アドレスを、そのまま利用して別の実行管理テーブルＴ２に記録する処理である。
【００６４】
プログラム切替タイミング判断処理手段２４Ｐ，３４Ｋは、同期フリーランカウンタ２５Ａ，３５Ａ（図１参照）の現在値と、プログラム切替カウンタ値記憶手段２５Ｃ，３５Ｃ（図１参照）に記憶された同期フリーランカウンタ値とが一致したか否かを判断することにより、アプリケーションプログラムの切替タイミングが到来したか否かを判断する処理を繰り返し実行するものである。
【００６５】
実行管理テーブル切替処理手段２４Ｑ，３４Ｌは、プログラム切替タイミング判断処理手段２４Ｐ，３４Ｋにより双方が一致した（つまり、アプリケーションプログラムの切替タイミングが到来した）と判断した場合に、主メモリ２３，３３に記憶されている各々のコントローラ２０，３０用の現在実行中の実行管理テーブルＴ１を、別の実行管理テーブルＴ２へ切り替える処理、すなわち主メモリ２３，３３に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルＴ１のアドレスから別の実行管理テーブルＴ２のアドレスへと切り替える処理（図１１参照）を実行するものである。
【００６６】
管理部４０のプログラム切替カウンタ値算出・設定処理手段４４Ａは、ローダ５０から送信されてくるプログラムの切替指示の信号を受信し、同期フリーランカウンタ４５Ａの現在値に、予め定められたカウント数Ｃ２を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値を、プログラム切替カウンタ値記憶手段４５Ｃ（図１参照）に記憶させる処理を実行するものである。
【００６７】
具体的には、同期フリーランカウンタ４５Ａの現在値をＭとすると、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値Ｋは、Ｋ＝Ｍ＋Ｃ２で算出される（図７参照）。
【００６８】
例えば、プログラム切替タイミング設定用のカウント数Ｃ２は、数カウント（２カウント等）と定められている。このカウント数Ｃ２は、見込みの数値であるが、プログラム切替カウンタ値算出・設定処理手段４４Ａ（システム処理手段４４）を構成するシステムプログラムε内に記述しておいてもよく、あるいはメモリ（例えばフラッシュメモリ４６等）に記憶させておいてもよい。
【００６９】
（その他のシステム処理）
【００７０】
管理部４０のシステム処理手段４４は、プログラム切替カウンタ値算出・設定処理手段４４Ａによる処理の他に、スイッチ操作信号入力部４８（図１参照）に、スイッチ操作による外部からの起動要求信号の入力があったときに、この起動要求信号を基本コントローラ２０へ送信する処理等を実行するものである。
【００７１】
このような本実施形態においては、以下のようにしてプログラマブルコントローラシステム１０におけるシステム処理が実行され、アプリケーションが起動される。
【００７２】
（処理Ａの流れ）
【００７３】
図４において、基本コントローラ２０および拡張コントローラ３０において、システム処理のうちの処理Ａを開始する（ステップＳ１，Ｓ２）。先ず、基本コントローラ２０において、アプリケーション起動周期待機処理手段２４Ｂにより、タイマ時間計測を行って所定の時間間隔（例えば１ミリ秒の間隔等）のアプリケーション起動周期が到来したか否かを繰り返し判断する（ステップＳ３）。
【００７４】
ステップＳ３でアプリケーション起動周期が到来したと判断された場合には、カウント更新処理手段２４Ｃにより、同期フリーランカウンタ２５Ａに、１カウントを加算する（ステップＳ４）。なお、同期フリーランカウンタ２５Ａの値を変更した状態は、内部バス１１を介して、共有メモリ機能により、他の同期フリーランカウンタ３５Ａ，４５Ａにも反映される。
【００７５】
続いて、同期割込み送信処理手段２４Ｄにより、拡張コントローラ３０へ同期割込み信号を送信する（ステップＳ５）。この同期割込み信号は、基本コントローラ２０のバスＬＳＩ２１、内部バス１１、および拡張コントローラ３０のバスＬＳＩ３１を介して拡張コントローラ３０のマイクロプロセッサ３２に伝達される。そして、拡張コントローラ３０において、同期割込み受信処理手段３４Ｂにより、基本コントローラ２０からの同期割込み信号を受信する（ステップＳ６）。
【００７６】
それから、同期割込み信号の送受信の後に、基本コントローラ２０においては、アプリケーション起動要求処理手段２４Ｅにより、基本コントローラ２０用のステータス記憶手段２５Ｆに記憶されたステータスを取得し、取得したステータスがアプリケーション運転状態（ＲＵＮ）であるか否かを判断し（ステップＳ７）、アプリケーション運転状態（ＲＵＮ）である場合には、基本コントローラ２０のアプリケーションαの起動要求を行い（ステップＳ８）、処理Ａを終了する（ステップＳ９）。一方、取得したステータスがアプリケーション停止状態（ＳＴＯＰ）である場合には、アプリケーションαの起動要求は行わずに、処理Ａを終了する（ステップＳ９）。
【００７７】
また、拡張コントローラ３０においても同様にして、アプリケーション起動要求処理手段３４Ｃにより、拡張コントローラ３０用のステータス記憶手段３５Ｇに記憶されたステータスを取得し、取得したステータスがアプリケーション運転状態（ＲＵＮ）であるか否かを判断し（ステップＳ１０）、アプリケーション運転状態（ＲＵＮ）である場合には、拡張コントローラ３０のアプリケーションβの起動要求を行い（ステップＳ１１）、処理Ａを終了する（ステップＳ１２）。一方、取得したステータスがアプリケーション停止状態（ＳＴＯＰ）である場合には、アプリケーションβの起動要求は行わずに、処理Ａを終了する（ステップＳ１２）。
【００７８】
なお、基本コントローラ２０および拡張コントローラ３０において、アプリケーションプログラムα，βの起動要求処理が行われると、図８〜図１１に示すように、各々のコントローラ２０，３０のマイクロプロセッサ２２，３２により、主メモリ２３，３３に記憶されている各コントローラ２０，３０用のプログラム実行管理表ポインタを取得し、その取得時点のプログラム実行管理表ポインタにより指示されている主メモリ２３，３３上の実行管理テーブル（例えば、最初は、実行管理テーブルＴ１であり、切替後は、実行管理テーブルＴ２となる。）を取得し、取得した実行管理テーブルの１番目に記録されている機械語オブジェクトの先頭アドレスを取得し、取得したアドレスから、既に主メモリ２３，３３上に配置されているアプリケーションプログラムα，βを構成するプログラム（機械語オブジェクト）を実行していく。これらのアプリケーションプログラムα，βは、いずれも、図７中の縦の点線で示された一定周期（例えば１ミリ秒間隔等）内、すなわちアプリケーション起動周期内で実行が完了するように設定されている。
【００７９】
（処理Ｂの流れ）
【００８０】
図５において、基本コントローラ２０および拡張コントローラ３０において、システム処理のうちの処理Ｂを開始する（ステップＳ２１，Ｓ２２）。先ず、基本コントローラ２０において、外部要求待機処理手段２４Ｆにより、外部からの起動要求を待ち、管理部４０のスイッチ操作信号入力部４８（図１参照）に、スイッチ操作による外部からの起動要求信号の入力があったときに、この起動要求信号を管理部４０から受信する（ステップＳ２３）。
【００８１】
続いて、設定用カウンタ値算出・設定処理手段２４Ｇにより、同期フリーランカウンタ２５Ａの現在値（図７の例では、Ｌ）に、予め定められたアプリ運転状態開始タイミング設定用のカウント数Ｃ１（例えば、Ｃ１＝１０００カウント等）を加算することにより、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値（図７の例では、Ｎ）を、Ｎ＝Ｌ＋Ｃ１として算出し、算出した同期フリーランカウンタ値（図７の例では、Ｎ）を、アプリ運転状態開始カウンタ値記憶手段２５Ｂに記憶させる（ステップＳ２４）。なお、アプリ運転状態開始カウンタ値記憶手段２５Ｂに記憶された同期フリーランカウンタ値（図７の例では、Ｎ）は、内部バス１１を介して、共有メモリ機能により、他のアプリ運転状態開始カウンタ値記憶手段３５Ｂ，４５Ｂにも反映される。
【００８２】
それから、アプリ運転開始要求フラグ設定処理手段２４Ｈにより、基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段２５Ｄに記憶されたフラグ、および拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段２５Ｅに記憶されたフラグを立てる処理（運転開始要求があったことを示す状態に変更する処理）を実行する（ステップＳ２５）。なお、基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段２５Ｄに記憶されたフラグが立てられると、この状態が内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０や管理部４０に設けられた基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段３５Ｄ，４５Ｄに記憶されたフラグに反映される。同様に、拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段２５Ｅに記憶されたフラグが立てられると、この状態が内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０や管理部４０に設けられた拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段３５Ｅ，４５Ｅに記憶されたフラグに反映される。
【００８３】
そして、拡張コントローラ３０において、アプリ運転開始要求フラグ監視処理手段３４Ｄにより、拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段３５Ｅに記憶されたフラグの状態を監視し、このフラグが立った状態に変更されたか否かを判断する処理を繰り返し実行し（ステップＳ２６）、フラグが立った場合には、次のステップに進む。
【００８４】
その後、基本コントローラ２０および拡張コントローラ３０において、アプリ起動準備処理手段２４Ｊ，３４Ｅにより、各コントローラ２０，３０のメモリ初期化処理（データメモリ２７，３７のユーザデータ領域２７Ａ，３７Ａに記憶されたアプリケーションα，β用の各種変数の初期化処理）を含む各コントローラ２０，３０のアプリケーション起動準備処理を実行する（ステップＳ２７，Ｓ２８）。
【００８５】
次に、基本コントローラ２０においては、アプリ運転状態開始タイミング判断処理手段２４Ｋにより、同期フリーランカウンタ２５Ａの現在値と、アプリ運転状態開始カウンタ値記憶手段２５Ｂに記憶された同期フリーランカウンタ値（図７の例では、Ｎ）とが一致したか否かを判断することにより、アプリケーション運転状態の開始タイミングが到来したか否かを判断する処理を繰り返し実行する（ステップＳ２９）。
【００８６】
ステップＳ２９で双方の値が一致した（つまり、アプリケーション運転状態の開始タイミングが到来した）と判断された場合には、アプリ運転状態移行処理手段２４Ｌにより、基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段２５Ｄに記憶されたフラグを降ろす処理（運転開始要求が無いことを示す状態に変更する処理）を実行する（ステップＳ３０）。なお、基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段２５Ｄに記憶されたフラグが降ろされると、この状態が内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０や管理部４０に設けられた基本コントローラ２０用のアプリ運転開始要求フラグ記憶手段３５Ｄ，４５Ｄに記憶されたフラグに反映される。
【００８７】
続いて、アプリ運転状態移行処理手段２４Ｌにより、基本コントローラ２０用のステータス記憶手段２５Ｆに記憶されたステータスを、アプリケーション停止状態（ＳＴＯＰ）からアプリケーション運転状態（ＲＵＮ）へ移行させる処理を実行し（ステップＳ３１）、処理Ｂを終了する（ステップＳ３２）。なお、基本コントローラ２０用のステータス記憶手段２５Ｆに記憶されたステータスを変更すると、この変更後の状態が内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０や管理部４０に設けられた基本コントローラ２０用のステータス記憶手段３５Ｆ，４５Ｆに記憶されたステータスに反映される。
【００８８】
また、拡張コントローラ３０においては、アプリ運転状態開始タイミング判断処理手段３４Ｆにより、同期フリーランカウンタ３５Ａの現在値と、アプリ運転状態開始カウンタ値記憶手段３５Ｂに記憶された同期フリーランカウンタ値（図７の例では、Ｎ）とが一致したか否かを判断することにより、アプリケーション運転状態の開始タイミングが到来したか否かを判断する処理を繰り返し実行する（ステップＳ３３）。
【００８９】
ステップＳ３３で双方の値が一致した（つまり、アプリケーション運転状態の開始タイミングが到来した）と判断された場合には、アプリ運転状態移行処理手段３４Ｇにより、拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段３５Ｅに記憶されたフラグを降ろす処理（運転開始要求が無いことを示す状態に変更する処理）を実行する（ステップＳ３４）。なお、拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段３５Ｅに記憶されたフラグが降ろされると、この状態が内部バス１１を介して、共有メモリ機能により、基本コントローラ２０や管理部４０に設けられた拡張コントローラ３０用のアプリ運転開始要求フラグ記憶手段２５Ｅ，４５Ｅに記憶されたフラグに反映される。
【００９０】
続いて、アプリ運転状態移行処理手段３４Ｇにより、拡張コントローラ３０用のステータス記憶手段３５Ｇに記憶されたステータスを、アプリケーション停止状態（ＳＴＯＰ）からアプリケーション運転状態（ＲＵＮ）へ移行させる処理を実行し（ステップＳ３５）、処理Ｂを終了する（ステップＳ３６）。なお、拡張コントローラ３０用のステータス記憶手段３５Ｇに記憶されたステータスを変更すると、この変更後の状態が内部バス１１を介して、共有メモリ機能により、基本コントローラ２０や管理部４０に設けられた拡張コントローラ３０用のステータス記憶手段２５Ｇ，４５Ｇに記憶されたステータスに反映される。
【００９１】
（処理Ｃの流れ）
【００９２】
図６において、ローダ５０でのプログラムの開発支援処理を開始するとともに（ステップＳ４１）、管理部４０、基本コントローラ２０、および拡張コントローラ３０において、システム処理のうちの処理Ｃを開始する（ステップＳ４２，Ｓ４３，Ｓ４４）。
【００９３】
先ず、ユーザは、ローダ５０のソース編集処理手段５１によるインターフェース機能により、変更対象のプログラムのソースコードの記述を変更する作業を行い、変更後のソースコードをソースコード記憶手段５２に記憶させる（ステップＳ４５）。
【００９４】
続いて、ローダ５０のコンパイラ５３により、ソースコード記憶手段５２に記憶された変更後のソースコードをコンパイルすることにより、ターゲット上（各コントローラ２０，３０のマイクロプロセッサ２２，３２上）で動作する機械語オブジェクトに変換し、変換処理で得られた変更後の機械語オブジェクトを機械語オブジェクト記憶手段５４に記憶させる（ステップＳ４６）。また、図３に示すように、コンパイラ５３により、ソースコード名と、その変換後の機械語オブジェクト名と、これらに付された番号との対応関係を定めるソースコード管理表を作成し、作成したソースコード管理表をソースコード管理表記憶手段５５に記憶させる（ステップＳ４６）。
【００９５】
それから、ローダ５０の機械語オブジェクト送信処理手段５６により、ソースコード管理表記憶手段５５に記憶された機械語オブジェクト名と番号との対応関係を用いて、機械語オブジェクト記憶手段５４からこの機械語オブジェクト名を付された変更後の機械語オブジェクトを取得し、取得した変更後の機械語オブジェクトを、対応する番号とともに、管理部４０のＵＳＢ接続部４７Ａ、イーサネット接続部４７Ｂ（イーサネットは登録商標）、またはシリアル接続部４７Ｃのいずれかを用いた通信により、管理部４０を介して（但し、図６では、管理部４０の中継処理の図示は省略されている。）、基本コントローラ２０へ送信する（ステップＳ４７）。なお、複数の変更後の機械語オブジェクトがある場合には、全ての変更後の機械語オブジェクトを、管理部４０を介して基本コントローラ２０へ送信する。また、後述するように、管理部４０の機能は、基本コントローラ２０の１つの機能として実装されていてもよいので、この場合には、変更後の機械語オブジェクトを、対応する番号とともに、基本コントローラ２０に直接に送信してもよい。
【００９６】
例えば、図８に示すように、プログラム更新前においては、基本コントローラ２０のマイクロプロセッサ２２用の主メモリ２３には、機械語オブジェクトＰ１，Ｐ２が格納され、拡張コントローラ３０のマイクロプロセッサ３２用の主メモリ３３には、機械語オブジェクトＰ２，Ｐ３が格納されているとする。そして、ユーザが、ローダ５０で、機械語オブジェクトＰ２に対応するソースコードＵ２（図３参照）を変更し、その変更後のソースコードをコンパイルして機械語オブジェクトＰ２’が得られた場合には、この変更後の機械語オブジェクトＰ２’が、番号２とともに、管理部４０を介して基本コントローラ２０へ送信される。
【００９７】
基本コントローラ２０では、機械語オブジェクト配置処理手段２４Ｍにより、ローダ５０から送信されてくる変更後の機械語オブジェクトを、対応する番号とともに受信する（ステップＳ４８）。そして、機械語オブジェクト配置処理手段２４Ｍにより、受信した変更後の機械語オブジェクトが、いずれのコントローラで実行される変更後の機械語オブジェクトであるかを判断し、受信した変更後の機械語オブジェクトのうち自コントローラ２０用の変更後の機械語オブジェクトについては、主メモリ２３に格納して配置するとともに、拡張コントローラ３０用の変更後の機械語オブジェクトについては、拡張コントローラ３０のマイクロプロセッサ３２に送信する（ステップＳ４９）。なお、拡張コントローラ３０用の変更後の機械語オブジェクトであるか否かの判断を行うことなく、ローダ５０から受信した変更後の機械語オブジェクトの全てを、拡張コントローラ３０へ転送してもよい。
【００９８】
続いて、主メモリ２３に配置した変更後の機械語オブジェクトを格納した領域の先頭アドレス（格納先アドレス）を、主メモリ２３に記憶されている現在使用中の実行管理テーブルＴ１とは別の実行管理テーブルＴ２に記録する（ステップＳ５０）。
【００９９】
例えば、図９に示すように、変更後の機械語オブジェクトＰ２’を、番号２とともに受信した場合には、受信した変更後の機械語オブジェクトＰ２’を主メモリ２３に格納して配置するとともに、番号２であるから、実行管理テーブルＴ２の２番目の位置に、変更後の機械語オブジェクトＰ２’の格納先アドレスを記録する。
【０１００】
なお、機械語オブジェクト配置処理手段２４Ｍにより、受信した変更後の機械語オブジェクトが、いずれのコントローラ用の変更後の機械語オブジェクトであるかの判断処理を行う際には、自コントローラ２０用の変更後の機械語オブジェクトであるか否かを判断するだけであれば、現在使用中の実行管理テーブルＴ１を用いて、受信した番号の示す実行管理テーブルＴ１上の位置に、機械語オブジェクトの格納先アドレスが記録されているか否かにより判断することができる。また、受信した番号から、別途にメモリ（例えばフラッシュメモリ２６等）に記憶されたデータ（番号とコントローラとの対応関係を示すデータ）を用いて判断してもよく、あるいは、ローダ５０から機械語オブジェクトおよび番号とともに送信されてくるターゲット識別情報（いずれのコントローラで実行される機械語オブジェクトであるかを識別するための情報）を用いて判断してもよい。
【０１０１】
その後、拡張コントローラ３０では、機械語オブジェクト配置処理手段３４Ｈにより、ローダ５０から基本コントローラ２０のマイクロプロセッサ２２を介して送信されてくる変更後の機械語オブジェクトを、対応する番号とともに受信し（ステップＳ５１）、受信した変更後の機械語オブジェクトのうち自コントローラ３０用の変更後の機械語オブジェクトのみ（なお、基本コントローラ２０から拡張コントローラ３０用の変更後の機械語オブジェクトのみが送信されてくる場合には、受信した変更後の機械語オブジェクトの全てとなる。）を、自己の主メモリ３３に格納して配置する（ステップＳ５２）。
【０１０２】
なお、基本コントローラ２０から、拡張コントローラ３０用の変更後の機械語オブジェクト以外の変更後の機械語オブジェクトも含めて送信されてきた場合には、現在使用中の実行管理テーブルＴ１を用いて、受信した番号の示す実行管理テーブルＴ１上の位置に、機械語オブジェクトの格納先アドレスが記録されているか否かにより、自コントローラ３０用の変更後の機械語オブジェクトであるか否かを判断することができる。
【０１０３】
続いて、機械語オブジェクト配置処理手段３４Ｈにより、主メモリ３３に配置した変更後の機械語オブジェクトの格納先アドレスを、主メモリ３３に記憶されている現在使用中の実行管理テーブルＴ１とは別の実行管理テーブルＴ２に記録する（ステップＳ５３）。
【０１０４】
例えば、図９に示すように、変更後の機械語オブジェクトＰ２’を、番号２とともに受信した場合には、受信した変更後の機械語オブジェクトＰ２’を主メモリ３３に格納して配置するとともに、番号２であるから、実行管理テーブルＴ２の２番目の位置に、変更後の機械語オブジェクトＰ２’の格納先アドレスを記録する。
【０１０５】
そして、各コントローラ２０，３０で主メモリ２３，３３への変更後の機械語オブジェクトの格納が完了した後（複数の変更後の機械語オブジェクトがある場合には、全ての変更後の機械語オブジェクトの格納が完了した後）に、ローダ５０では、機械語オブジェクト送信処理手段５６により、機械語オブジェクトの送信完了通知の信号を、管理部４０を介して（但し、図６では、管理部４０の中継処理の図示は省略されている。）、各コントローラ２０，３０のマイクロプロセッサ２２，３２へ送信する（ステップＳ５４）。
【０１０６】
それから、基本コントローラ２０では、実行管理テーブル補完処理手段２４Ｎにより、ローダ５０から送信されてくる変更後の機械語オブジェクトの送信完了通知の信号を受信し（ステップＳ５５）、別の実行管理テーブルＴ２の補完処理、すなわち現在使用中の実行管理テーブルＴ１に記録された機械語オブジェクトの格納先アドレスのうち、変更する必要のない機械語オブジェクトの格納先アドレスを、そのまま利用して別の実行管理テーブルＴ２に記録する処理を実行する（ステップＳ５６）。
【０１０７】
また、拡張コントローラ３０でも、実行管理テーブル補完処理手段３４Ｊにより、ローダ５０から送信されてくる変更後の機械語オブジェクトの送信完了通知の信号を受信し（ステップＳ５７）、別の実行管理テーブルＴ２の補完処理、すなわち現在使用中の実行管理テーブルＴ１に記録された機械語オブジェクトの格納先アドレスのうち、変更する必要のない機械語オブジェクトの格納先アドレスを、そのまま利用して別の実行管理テーブルＴ２に記録する処理を実行する（ステップＳ５８）。
【０１０８】
例えば、図１０に示すように、基本コントローラ２０では、主メモリ２３に記憶されている別の実行管理テーブルＴ２の補完処理として、機械語オブジェクトＰ１は変更されていないので、そのまま利用し、現在使用中の実行管理テーブルＴ１の１番目の位置に記録されている機械語オブジェクトＰ１の格納先アドレスを、別の実行管理テーブルＴ２の１番目の位置に記録する。また、図１０に示すように、拡張コントローラ３０では、主メモリ３３に記憶されている別の実行管理テーブルＴ２の補完処理として、機械語オブジェクトＰ３は変更されていないので、そのまま利用し、現在使用中の実行管理テーブルＴ１の３番目の位置に記録されている機械語オブジェクトＰ３の格納先アドレスを、別の実行管理テーブルＴ２の３番目の位置に記録する。
【０１０９】
次に、ローダ５０から、管理部４０に対してプログラムの切替指示の信号を送信し（ステップＳ５９）、ローダ５０でのプログラム変更に関する処理を終了する（ステップＳ６０）。管理部４０では、プログラム切替カウンタ値算出・設定処理手段４４Ａにより、ローダ５０から送信されてくるプログラムの切替指示の信号を受信し（ステップＳ６１）、同期フリーランカウンタ４５Ａの現在値（図７の例では、Ｍ）に、予め定められたカウント数Ｃ２（例えば、Ｃ２＝２カウント等）を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値（図７の例では、Ｋ）を、Ｋ＝Ｍ＋Ｃ２として算出し、算出した同期フリーランカウンタ値（図７の例では、Ｋ）を、プログラム切替カウンタ値記憶手段４５Ｃ（図１参照）に記憶させ（ステップＳ６２）、管理部４０での処理Ｃを終了する（ステップＳ６３）。
【０１１０】
その後、基本コントローラ２０では、プログラム切替タイミング判断処理手段２４Ｐにより、同期フリーランカウンタ２５Ａ（図１参照）の現在値と、プログラム切替カウンタ値記憶手段２５Ｃ（図１参照）に記憶された同期フリーランカウンタ値（図７の例では、Ｋ）とが一致したか否かを判断することにより、アプリケーションプログラムの切替タイミングが到来したか否かを判断する処理を繰り返し実行する（ステップＳ６４）。
【０１１１】
そして、ステップＳ６４で、プログラム切替タイミング判断処理手段２４Ｐにより双方が一致した（つまり、アプリケーションプログラムの切替タイミングが到来した）と判断した場合には、実行管理テーブル切替処理手段２４Ｑにより、主メモリ２３に記憶されている基本コントローラ２０用の現在実行中の実行管理テーブルＴ１を、別の実行管理テーブルＴ２へ切り替える処理、すなわち、図１１に示すように、主メモリ２３に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルＴ１のアドレスから別の実行管理テーブルＴ２のアドレスへと切り替える処理を実行し（ステップＳ６５）、基本コントローラ２０での処理Ｃを終了する（ステップＳ６６）。
【０１１２】
また、拡張コントローラ３０では、プログラム切替タイミング判断処理手段３４Ｋにより、同期フリーランカウンタ３５Ａ（図１参照）の現在値と、プログラム切替カウンタ値記憶手段３５Ｃ（図１参照）に記憶された同期フリーランカウンタ値（図７の例では、Ｋ）とが一致したか否かを判断することにより、アプリケーションプログラムの切替タイミングが到来したか否かを判断する処理を繰り返し実行する（ステップＳ６７）。
【０１１３】
そして、ステップＳ６７で、プログラム切替タイミング判断処理手段３４Ｋにより双方が一致した（つまり、アプリケーションプログラムの切替タイミングが到来した）と判断した場合には、実行管理テーブル切替処理手段３４Ｌにより、主メモリ３３に記憶されている拡張コントローラ３０用の現在実行中の実行管理テーブルＴ１を、別の実行管理テーブルＴ２へ切り替える処理、すなわち、図１１に示すように、主メモリ３３に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルＴ１のアドレスから別の実行管理テーブルＴ２のアドレスへと切り替える処理を実行し（ステップＳ６８）、拡張コントローラ３０での処理Ｃを終了する（ステップＳ６９）。
【０１１４】
（システム処理の全体の流れ）
【０１１５】
図７において、先ず、図示は省略されているが、リセット状態解除により、基本コントローラ２０および拡張コントローラ３０において、システムイニシャル処理手段２４Ａ，３４Ａによる処理が開始される。この際、基本コントローラ２０のシステムイニシャル処理手段２４Ａにより、同期フリーランカウンタ２５Ａが起動され、ゼロからのカウントが開始される。なお、同期フリーランカウンタ２５Ａの状態は、内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０や管理部４０に設けられた同期フリーランカウンタ３５Ａ，４５Ａに反映される。
【０１１６】
また、基本コントローラ２０のシステムイニシャル処理手段２４Ａにより、基本コントローラ２０用のステータス記憶手段２５Ｆに記憶されたステータスが、アプリケーション停止状態（ＳＴＯＰ）に設定され、この状態が内部バス１１を介して、共有メモリ機能により、拡張コントローラ３０や管理部４０に設けられた基本コントローラ２０用のステータス記憶手段３５Ｆ，４５Ｆに記憶されたステータスに反映される。同様に、拡張コントローラ３０のシステムイニシャル処理手段３４Ａにより、拡張コントローラ３０用のステータス記憶手段３５Ｇに記憶されたステータスが、アプリケーション停止状態（ＳＴＯＰ）に設定され、この状態が内部バス１１を介して、共有メモリ機能により、基本コントローラ２０や管理部４０に設けられた拡張コントローラ３０用のステータス記憶手段２５Ｇ，４５Ｇに記憶されたステータスに反映される。なお、ステータスは、最初にイニシャル状態としておき、ハンドシェイクしてイニシャル処理を完了してから、アプリケーション停止状態（ＳＴＯＰ）としてもよい。
【０１１７】
続いて、基本コントローラ２０のアプリケーション起動周期待機処理手段２４Ｂによるアプリケーション起動周期の到来監視が開始され、以降、図７中の点線で示された縦線のように、一定周期（例えば１ミリ秒間隔等）で、すなわちアプリケーション起動周期のタイミングで、処理Ａ（図４参照）の同期割込みが繰り返し実行されるとともに、同期フリーランカウンタ２５Ａのカウントアップが進んでいく。図７では、アプリケーション起動周期の到来（図４のステップＳ３）が点線の縦線で示され、同期フリーランカウンタ２５Ａのカウントアップ（図４のステップＳ４）で点線の直後からカウンタ値が１カウント増加し、さらにその直後の同期割込み信号の送受信（図４のステップＳ５，Ｓ６）が下方に向かう太い矢印で示されている。
【０１１８】
その後、システムイニシャル処理手段２４Ａ，３４Ａにより、図示は省略されているが、ハンドシェイク（通信用パラメータの取り決め等の通信規律の確立処理）を行うことにより、基本コントローラ２０と拡張コントローラ３０との間のイニシャル完了待ち合わせを行う。
【０１１９】
そして、イニシャル処理の完了後には、基本コントローラ２０および拡張コントローラ３０の双方とも、イニシャル状態（不図示）からアプリケーション停止状態となり、基本コントローラ２０の外部要求待機処理手段２４Ｆによる外部からの起動要求待ち（起動のスイッチ操作待ち）を行う処理Ｂ（図５参照）が開始される。
【０１２０】
この際、処理Ｂ（図５参照）に対し、処理Ａ（図４参照）は、一定周期での割込みとなるので、図７に示すように、処理Ａと処理Ｂとが交互に実行されるタイムチャートとなる。但し、処理Ａは、割込みの処理であるため、図７のタイムチャートにおいて、図４の処理Ａの流れは何回も繰り返されるが、図５の処理Ｂの流れは１回である。なお、図７中において、点線で示されたアプリケーション起動周期の時間間隔（例えば１ミリ秒等）を示す長さと、処理Ａの実行時間を示す長さと、処理Ｂの実行時間を示す長さとは、実際の時間の比率を示すものではなく、各処理の時間的関係をイメージし易くするための説明の便宜上の記載である。
【０１２１】
図７に示すように、同期フリーランカウンタ２５Ａの値がＬになった時点で、外部からの起動要求（図５のステップＳ２３）があったとすると、この時点で、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値Ｎが、見込みで予め定められたカウント数Ｃ１を用いて、Ｎ＝Ｌ＋Ｃ１により算出され、算出された同期フリーランカウンタ値Ｎの設定が行われる（図５のステップＳ２４）。
【０１２２】
それから、基本コントローラ２０では、アプリケーションαの起動準備処理が行われ（図５のステップＳ２７）、拡張コントローラ３０では、アプリケーションβの起動準備処理が行われる（図５のステップＳ２８）。なお、図７の例では、アプリケーションαの起動準備処理がカウント値（Ｎ−１）まで続き、アプリケーションβの起動準備処理がカウント値（Ｎ−２）まで続くように記載されているが、これは、各コントローラ２０，３０によって起動準備処理に要する時間が異なることを示すための記載であり、実際のカウント値ではない。実際には、例えばＣ１＝１０００カウント等の大きさの数値を見込んでＮを設定するので、Ｎよりも、もっと手前のカウント値でそれぞれの起動準備処理は終了する。
【０１２３】
その後、アプリケーション起動周期の到来タイミングで、処理Ａの同期フリーランカウンタ２５Ａのカウンタアップ（図４のステップＳ４）を行って、同期フリーランカウンタ２５Ａの値がＮになったとする。そして、処理Ａの同期割込み信号の送受信（図４のステップＳ５，Ｓ６）の後に、ステータスの確認（図４のステップＳ７，Ｓ１０）を行っても、このときには、ステータスは、未だアプリケーション停止状態（ＳＴＯＰ）であるから、アプリケーション起動要求（図４のステップＳ８，Ｓ１１）は行われない。
【０１２４】
この直後に、処理Ａの割込みを終了し、処理Ｂに戻ると、同期フリーランカウンタ２５Ａ，３５Ａの値はＮになっているので、アプリケーション運転状態の開始タイミングが到来したと判断され（図５のステップＳ２９，Ｓ３３）、基本コントローラ２０および拡張コントローラ３０において、基本コントローラ２０用のステータスおよび拡張コントローラ３０用のステータスが、それぞれアプリケーション停止状態（ＳＴＯＰ）からアプリケーション運転状態（ＲＵＮ）へ移行される（図５のステップＳ３１，Ｓ３５）。
【０１２５】
続いて、同期フリーランカウンタ２５Ａ，３５Ａの値が（Ｎ＋１）になった時点で、処理Ａの同期割込み信号の送受信（図４のステップＳ５，Ｓ６）の後に、ステータスの確認（図４のステップＳ７，Ｓ１０）を行うと、この時点では、ステータスは、既にアプリケーション運転状態（ＲＵＮ）へ移行されているので、基本コントローラ２０および拡張コントローラ３０において、アプリケーションα，βが起動される（図４のステップＳ８，Ｓ１１）。以降、同期フリーランカウンタ２５Ａ，３５Ａの値が（Ｎ＋２），（Ｎ＋３），…になった時点でも同様であり、ステータスは、アプリケーション運転状態（ＲＵＮ）となっているので、アプリケーションα，βが起動される（図４のステップＳ８，Ｓ１１）。従って、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値がＮであれば、その次のカウンタ値（Ｎ＋１）の時点から、アプリケーション運転状態（アプリケーションα，βの一定周期での起動が繰り返される期間）が続くことになる。
【０１２６】
また、上述したように、同期フリーランカウンタ２５Ａ，３５Ａの値が（Ｎ＋１）になった時点から、アプリケーションα，βの一定周期での起動が繰り返されるが、アプリケーションα，βは、一定周期内で実行が終了するように作成されているので、各周期におけるアプリケーションα，βの実行の終了後に、運転中のプログラムの更新を受け付ける処理Ｃ（図６参照）が待機状態となる。
【０１２７】
従って、処理Ｃ（図６参照）に対し、処理Ａ（図４参照）は、一定周期での割込みとなり、また、その割込みのタイミングで繰り返し起動されるアプリケーションα，βの実行は、各周期内で終了するので、図７に示すように、処理Ａと、アプリケーションによる処理ＡＰＬと、処理Ｃとが入れ替わりながら実行されるタイムチャートとなる。但し、図７のタイムチャートにおいて、図４の処理Ａの流れや、アプリケーションによる処理ＡＰＬは、何回も繰り返されるが、図６の処理Ｃの流れは１回である。なお、図７中において、点線で示されたアプリケーション起動周期の時間間隔（例えば１ミリ秒等）を示す長さと、処理Ａの実行時間を示す長さと、アプリケーションによる処理ＡＰＬの実行時間を示す長さと、処理Ｃの実行時間を示す長さとは、実際の時間の比率を示すものではなく、各処理の時間的関係をイメージし易くするための説明の便宜上の記載である。
【０１２８】
図７に示すように、同期フリーランカウンタ４５Ａの値がＭになる時点までに、変更後の機械語オブジェクトの送信および主メモリ２３，３３への格納が行われ、同期フリーランカウンタ４５Ａの値がＭになった時点で、ローダ５０からのプログラムの切替指示（図６のステップＳ５９，Ｓ６１）があったとすると、この時点で、プログラムの切替タイミングを示す同期フリーランカウンタ値Ｋが、見込みで予め定められたカウント数Ｃ２を用いて、Ｋ＝Ｍ＋Ｃ２により算出され、算出された同期フリーランカウンタ値Ｋの設定が行われる（図６のステップＳ６２）。
【０１２９】
その後、アプリケーション起動周期の到来タイミングで、処理Ａの同期フリーランカウンタ２５Ａのカウンタアップ（図４のステップＳ４）を行って、同期フリーランカウンタ２５Ａの値がＫになったとする。このとき、処理Ａ（図４参照）の割込みのタイミングで同期して起動されたアプリケーションα，βの実行後に、処理Ｃ（図６参照）に戻ると、同期フリーランカウンタ２５Ａ，３５Ａの値はＫになっているので、プログラムの切替タイミングが到来したと判断され（図６のステップＳ６４，Ｓ６７）、基本コントローラ２０および拡張コントローラ３０において、主メモリ２３，３３に記憶されている各コントローラ２０，３０用の現在実行中の実行管理テーブルＴ１を、別の実行管理テーブルＴ２へ切り替える処理、すなわち、図１１に示すように、主メモリ２３，３３に記憶されているプログラム実行管理表ポインタを、現在実行中の実行管理テーブルＴ１のアドレスから別の実行管理テーブルＴ２のアドレスへと切り替える処理が行われる。
【０１３０】
続いて、同期フリーランカウンタ２５Ａ，３５Ａの値が（Ｋ＋１）になった時点で、処理Ａのアプリケーションα，βの起動要求（図４のステップＳ８，Ｓ１１）が行われると、この時点では、各コントローラ２０，３０用のプログラム実行管理表ポインタが既に切り替えられているので、切替後のプログラム実行管理表ポインタが指している実行管理テーブルＴ２に従って、主メモリ２３，３３に格納されたプログラムが実行される。すなわち、この時点では、実行管理テーブルが既にＴ１からＴ２へ切り替えられているので、切替後の実行管理テーブルＴ２に従って、主メモリ２３，３３に格納されたプログラムが実行される。そして、切替後の実行管理テーブルＴ２には、変更後の機械語プログラムの格納先アドレスが含まれているので、変更後の機械語プログラムを含むアプリケーションプログラムα，βが実行されることになる。従って、プログラムの切替タイミングを示す同期フリーランカウンタ値がＫであれば、その次のカウンタ値（Ｋ＋１）の時点から、切替後のプログラムによる運転状態が続くことになる。
【０１３１】
このような本実施形態によれば、次のような効果がある。すなわち、基本コントローラ２０のカウント更新処理手段２４Ｃにより、同期フリーランカウンタ２５Ａの値を更新していき、基本コントローラ２０および拡張コントローラ３０の各々のプログラム切替タイミング判断処理手段２４Ｐ，３４Ｋにより、同期フリーランカウンタ２５Ａ，３５Ａの現在値と、プログラム切替カウンタ値記憶手段２５Ｃ，３５Ｃに記憶された同期フリーランカウンタ値とが一致したと判断した場合に、各々の実行管理テーブル切替処理手段２４Ｑ，３４Ｌにより、各々のコントローラ２０，３０用の実行管理テーブルＴ１を、変更後の機械語オブジェクトの格納先アドレスが記録された別の実行管理テーブルＴ２へ切り替えるので、切替後には、各々のコントローラ２０，３０で、切替後の実行管理テーブルＴ２に従って、変更後の機械語オブジェクトを含んで構成される更新されたアプリケーションプログラムα，βを実行することができる。このため、プログラムの同期更新を実現することができる。
【０１３２】
また、基本コントローラ２０の同期割込み送信処理手段２４Ｄおよび拡張コントローラ３０の同期割込み受信処理手段３４Ｂにより、同期割込み信号の送受信を行い、基本コントローラ２０および拡張コントローラ３０の各々のアプリケーション起動要求処理手段２４Ｅ，３４Ｃにより、同期割込み信号の送受信のタイミングで、各々のアプリケーションα，βの起動要求処理を実行するので（図４参照）、各々のアプリケーションα，βの周期的に繰り返される起動を毎回同期させることができる。
【０１３３】
そして、このように周期的に繰り返されるアプリケーションプログラムα，βの起動の同期化を図ることができるので、同期割込み信号の送受信のタイミングで、変更後の機械語オブジェクトを含んで構成される各々のアプリケーションプログラムα，βを同期させて起動することができるため、プログラムの同期更新および同期起動の双方を実現することができる。
【０１３４】
また、以上のように、基本コントローラ２０と拡張コントローラ３０との間での同期割込み信号および同期フリーランカウンタ２５Ａ，３５Ａによるタイミング制御により、プログラムの更新の同期化、および周期的に繰り返されるアプリケーションプログラムの起動の同期化を図ることができるので、制御対象の動作の不具合を未然に防止するとともに、高精度な同期制御を実現することができる。
【０１３５】
さらに、プログラム切替カウンタ値算出・設定処理手段４４Ａは、同期フリーランカウンタ４５Ａの現在値に、予め定められたカウント数Ｃ２を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、設定する構成とされているので、ローダ５０からのプログラム切替指示を受け付けたときに、そのときの同期フリーランカウンタ４５Ａの値を基準として、相対的にアプリケーションプログラムの切替タイミングを定めることができるため、適切でかつ早期の切替タイミングを設定することができる。
【０１３６】
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲内での変形等は本発明に含まれるものである。
【０１３７】
例えば、前記実施形態では、拡張コントローラ３０は１つであるものとして説明を行ったが、拡張コントローラ３０は複数でもよい。
【０１３８】
また、前記実施形態では、管理部４０に、プログラム切替カウンタ値算出・設定処理手段４４Ａが設けられていたが、基本コントローラ２０に、プログラム切替カウンタ値算出・設定処理手段を設けてもよい。この場合、プログラム切替カウンタ値算出・設定処理手段は、ローダ５０からのプログラム切替指示の信号を受信し、このときの同期フリーランカウンタ２５Ａの現在値に、予め定められたカウント数Ｃ２を加算することにより、アプリケーションプログラムの切替タイミングを示す同期フリーランカウンタ値を算出し、算出した同期フリーランカウンタ値をプログラム切替カウンタ値記憶手段２５Ｃに記憶させる構成とすればよい。
【０１３９】
そして、上記のプログラム切替カウンタ値算出・設定処理手段４４Ａの機能だけではなく、より一般的には、管理部４０の機能（システム処理手段４４により実現される機能全般）は、基本コントローラ２０の１つの機能として実装されていてもよい。従って、図６に示されている管理部４０で実行されるステップＳ４２〜Ｓ６３の処理は、基本コントローラ２０で実行してもよい。
【０１４０】
さらに、前記実施形態では、変更後の機械語オブジェクトは、ローダ５０から管理部４０を介して（但し、図６では、管理部４０の中継処理の図示は省略されている。）基本コントローラ２０へ送信された後に、基本コントローラ２０から拡張コントローラ３０へ送信されるようになっていたが、ローダ５０から、管理部４０を介して、基本コントローラ２０および拡張コントローラ３０へ直接に送信するようにしてもよい。つまり、基本コントローラ２０から拡張コントローラ３０への送信を行わないようにしてもよい。この場合、拡張コントローラ３０へ直接に送信される変更後の機械語オブジェクトの中には、自コントローラ３０用の変更後の機械語オブジェクトではないものが含まれることになるので、拡張コントローラ３０の機械語オブジェクト配置処理手段３４Ｈにより、受信した変更後の機械語オブジェクトが、自コントローラ３０用の変更後の機械語オブジェクトであるか否かの判断を行えばよい。なお、管理部４０で単なる中継処理を行うのではなく、管理部４０のシステム処理手段４４により、ローダ５０から受信した変更後の機械語オブジェクトが、いずれのコントローラで実行される変更後の機械語オブジェクトであるかを判断し、受信した変更後の機械語オブジェクトのうち基本コントローラ２０用の変更後の機械語オブジェクトについては、基本コントローラ２０のマイクロプロセッサ２２に送信し、拡張コントローラ３０用の変更後の機械語オブジェクトについては、拡張コントローラ３０のマイクロプロセッサ３２に送信するようにしてもよい。
【０１４１】
また、前記実施形態では、設定用カウンタ値算出・設定処理手段２４Ｇにより、外部からの起動要求を受け付けたときの同期フリーランカウンタ２５Ａの値を基準として、相対的にアプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、設定する構成とされていたが（図５のステップＳ２４）、これに限定されるものではなく、例えば、基本コントローラ２０および拡張コントローラ３０の双方（３つ以上のコントローラがある場合には、それらの全部）についてのアプリケーション起動準備処理が終了するのをフラグやステータス等を用いて確認してから（つまり、起動準備処理の終了を判断できるようなフラグやステータスを設けておく。）、確認後にアプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、設定する構成としてもよい。例えば、全部のアプリケーション起動準備処理が終了するのを確認した時点の同期フリーランカウンタ２５Ａの値に、予め定められたカウント数Ｃ３（例えば、Ｃ３＝２カウント等）を加算することにより、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値を算出し、設定してもよい。しかし、アプリケーション運転状態の開始タイミングの判断処理の容易化という観点からは、前記実施形態のような構成とすることが好ましい。
【０１４２】
さらに、前記実施形態では、３つの共有メモリ領域２５，３５，４５でデータを共有する構成とされていたが（図１、図２参照）、それぞれのマイクロプロセッサとバスで接続された１つの共有メモリ領域を設置してもよい。
【０１４３】
また、実用上、同期フリーランカウンタ２５Ａの値のオーバーフローが問題になることはないが、万一、オーバーフローした場合（外部からの起動要求が著しく遅れた場合等）を考慮し、アプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値の算出処理を、次のようにしてもよい。すなわち、同期フリーランカウンタ２５Ａの最大値をＭＡＸとし（０〜ＭＡＸの値をとるので、カウント総数は（ＭＡＸ＋１）となる。）、算出するアプリケーション運転状態の開始タイミングを示す同期フリーランカウンタ値をＮとし、この算出処理の時点での同期フリーランカウンタ２５Ａの現在値をＬとし、予め定められたカウント数をＣ１（このＣ１の値は、前記実施形態と同じでよい。）とすると、Ｎ＝Ｌ＋Ｃ１がＭＡＸを超える場合には、Ｎ＝Ｌ＋Ｃ１−（ＭＡＸ＋１）とする処理を行ってもよい。つまり、カウント値がＭＡＸとなった後に、０に戻ることを考慮し、カウント総数の（ＭＡＸ＋１）を減じている。なお、同期フリーランカウンタ２５Ａが１からカウントされるものとすれば（つまり、カウント値がＭＡＸとなった後に、１に戻るとすれば）、１〜ＭＡＸの値をとるので、カウント総数はＭＡＸとなり、Ｎ＝Ｌ＋Ｃ１−ＭＡＸでよい。要するに、カウント値がＬの時点（外部からの起動要求があった時点）から、カウント数Ｃ１の時間分だけ経過した時点を定めることができればよい。
【産業上の利用可能性】
【０１４４】
以上のように、本発明のプログラマブルコントローラシステムおよびそのプログラム更新方法は、実行中のアプリケーションプログラムを更新する場合に用いるのに適している。
【符号の説明】
【０１４５】
１０  プログラマブルコントローラシステム
２０  基本コントローラ
２４Ｃ  カウント更新処理手段
２４Ｄ  同期割込み送信処理手段
２４Ｅ，３４Ｃ  アプリケーション起動要求処理手段
２４Ｍ，３４Ｈ  機械語オブジェクト配置処理手段
２４Ｐ，３４Ｋ  プログラム切替タイミング判断処理手段
２４Ｑ，３４Ｌ  実行管理テーブル切替処理手段
２５，３５，４５  共有メモリ領域
２５Ａ，３５Ａ，４５Ａ  同期フリーランカウンタ
２５Ｃ，３５Ｃ，４５Ｃ  プログラム切替カウンタ値記憶手段
３０  拡張コントローラ
３４Ｂ  同期割込み受信処理手段
４０  管理部
４４Ａ  プログラム切替カウンタ値算出・設定処理手段
α，β  アプリケーションプログラム
Ｐ１，Ｐ２，Ｐ３  機械語オブジェクト
Ｐ２’  変更後の機械語オブジェクト
Ｔ１，Ｔ２  実行管理テーブル
【図１】
0005549455.tif 000002
【図２】
0005549455.tif 000003
【図３】
0005549455.tif 000004
【図４】
0005549455.tif 000005
【図５】
0005549455.tif 000006
【図６】
0005549455.tif 000007
【図７】
0005549455.tif 000008
【図８】
0005549455.tif 000009
【図９】
0005549455.tif 000010
【図１０】
0005549455.tif 000011
【図１１】
0005549455.tif 000012