この発明を実施するための形態について添付の図面を参照しながら説明する。各図において、同一又は相当する部分には同一の符号を付して、重複する説明は適宜に簡略化又は省略する。なお、本発明は以下の実施の形態に限定されることなく、本発明の趣旨を逸脱しない範囲で種々変形することが可能である。また、以下において各部の名称等で先頭に「第1の」又は「第2の」を含むものは、便宜上、各図中では末尾に「1」又は「2」の数字を付して表す。
実施の形態1.
図1から図11は、この発明の実施の形態1に係るもので、図1は情報処理装置を備えたエレベータ装置の構成を示す図、図2は情報処理装置の構成を示すブロック図、図3及び図4は情報処理装置の起動処理を示すフロー図、図5は情報処理装置が備える第1の不揮発性メモリに記憶される起動確認フラグについて説明する図、図6は情報処理装置が備える第2の不揮発性メモリに記憶される起動確認フラグについて説明する図、図7から図10は情報処理装置のプログラム更新処理を示すフロー図、図11は情報処理装置のメインプログラム異常動作時の処理を示すフロー図である。
この実施の形態1においては、この発明に係る情報処理装置10を、エレベータ装置に適用した例について説明する。なお、この発明に係る情報処理装置10は、ここで説明するようなエレベータ装置に限られず、プロセッサにより実行するメインプログラムを更新する必要があるような情報処理装置に広く適用可能である。
図1に示すように、この実施の形態1においては、情報処理装置10が適用されたエレベータ装置は、エレベータの乗りかご500を備えている。乗りかご500は、エレベータの昇降路(図示せず)の内部に昇降自在に設置されている。昇降路は、例えば、エレベータ装置が設置される建物の内部に設けられる。
乗りかご500は例えば直方体状の箱型を呈する。乗りかご500の例えば正面には、図示しないかご出入口が形成されている。かご出入口は、エレベータの利用者が乗りかご500に出入りするための開口である。乗りかご500には、かご出入口を開閉するためのかごドア501が設けられている。
乗りかご500の内部には、かご内カメラ114が設置されている。かご内カメラ114は、乗りかご500の内部の様子を画像として撮影する。かご内カメラ114は、撮影した画像をアナログ画像信号で出力する。かご内カメラ114から出力されたアナログ画像信号は、情報処理装置10へと入力される。
なお、かご内カメラ114により撮影される画像は、静止画であっても動画であってもよい。ここでは、具体的に例えば、かご内カメラ114から出力されるアナログ画像信号は、NTSC(National Television System Committee)方式の信号であるとする。
乗りかご500の内部には、モニタ106が設置されている。モニタ106は、乗りかご500の内部にいる利用者に対して各種の情報を表示するためのものである。
情報処理装置10は、監視盤30(MOP:MOnitor Panel)と通信可能に接続されている。監視盤30は、エレベータの図示しない制御装置と接続されている。監視盤30は、エレベータの制御装置から当該エレベータに関する各種の情報を取得することができる。この当該エレベータに関する情報とは、具体的に例えば、エレベータの乗りかご500の走行状態、走行方向及び現在位置等に関する情報である。
監視盤30により取得された当該エレベータに関する情報は、情報処理装置10へと送られる。情報処理装置10は、当該エレベータに関する情報に基づいて、モニタ106に表示する画像データを生成する。そして、情報処理装置10は、生成した画像データをデジタル画像信号でモニタ106へと出力する。モニタ106は、情報処理装置10からのデジタル画像信号の入力を受けて画像を表示する。
なお、モニタ106により表示される画像は、静止画であっても動画であってもよい。ここでは、具体的に例えば、MPEG(Moving Picture Experts Group)形式で圧縮された圧縮映像データを伸張したものをモニタ106に表示するものとする。
次に、図2も参照しながら、情報処理装置10の構成について、さらに説明する。情報処理装置10は、第1のプロセッサ101及び第2のプロセッサ111を備えている。第1のプロセッサ101及び第2のプロセッサ111は、与えられた命令(命令の集合であるプログラムを含む)を実行して情報の演算又は加工を行う中央処理装置(CPU:Central Processing Unit)である。
第1のプロセッサ101は、情報処理装置10からモニタ106に出力するデジタル画像信号を処理する。具体的にここでは、第1のプロセッサ101は、モニタ106に表示するMPEG形式で圧縮された画像データを伸張し、伸張したデータをデジタル画像信号でモニタ106へと出力する。
第2のプロセッサ111は、かご内カメラ114から情報処理装置10に入力されたアナログ画像信号を処理する。具体的にここでは、第2のプロセッサ111は、まず、かご内カメラ114から入力されたNTSC方式のアナログ画像信号をデジタル信号に変換する。そして、デジタル信号に変換したデータに対してJPEG(Joint Photographic Experts Group)形式での圧縮処理を行う。
第1のプロセッサ101と第2のプロセッサ111とは、シリアル通信線121により双方向に通信可能に接続されている。第1のプロセッサ101と第2のプロセッサ111とは、このシリアル通信線121を認介して、例えば各種のコマンド、各種の信号、プログラム及びJPEG形式で圧縮したデータ等の送受信を行う。
情報処理装置10は、第1の不揮発性メモリ102及び第2の不揮発性メモリ112を備えている。第1の不揮発性メモリ102及び第2の不揮発性メモリ112は、データ又はプログラムを不揮発的に格納する読み出し専用メモリ(Read Only Memory:ROM)である。なお、第1の不揮発性メモリ102及び第2の不揮発性メモリ112は、予め定められた特別なコマンドによりデータを書き換えることができるROM(いわゆるFlash ROM)である。
また、情報処理装置10は、第1の揮発性メモリ103及び第2の揮発性メモリ113を備えている。第1の揮発性メモリ103及び第2の揮発性メモリ113は、データ又はプログラムを揮発的すなわち一時的に格納するための読み書き可能なランダムアクセスメモリ(Random Access Memory:RAM)である。
第1の不揮発性メモリ102及び第1の揮発性メモリ103は、第1のプロセッサ101から直接にアクセス可能な主記憶装置である。また、第2の不揮発性メモリ112及び第2の揮発性メモリ113は、第2のプロセッサ111から直接にアクセス可能な主記憶装置である。
第1の不揮発性メモリ102は、第1のメインプログラムを記憶している。第1のプロセッサ101は、第1の不揮発性メモリ102に記憶された第1のメインプログラムを読み出して実行する。この際、第1のプロセッサ101は、まず、第1の不揮発性メモリ102から読み出したプログラムを、第1の揮発性メモリ103に実行可能な形式に展開して格納する。そして、第1のプロセッサ101は、この第1の揮発性メモリ103に格納されたプログラムを読み出しながら実行する。第1のプロセッサ101が第1のメインプログラムを実行することで、前述した第1のプロセッサ101によるデジタル画像信号処理が実現される。
第2の不揮発性メモリ112は、第2のメインプログラムを記憶している。第2のプロセッサ111は、第2の不揮発性メモリ112に記憶された第2のメインプログラムを読み出して実行する。この際、第2のプロセッサ111は、まず、第2の不揮発性メモリ112から読み出したプログラムを、第2の揮発性メモリ113に実行可能な形式に展開して格納する。そして、第2のプロセッサ111は、この第2の揮発性メモリ113に格納されたプログラムを読み出しながら実行する。第2のプロセッサ111が第2のメインプログラムを実行することで、前述した第2のプロセッサ111によるアナログ画像信号処理が実現される。
ここで、第1の不揮発性メモリ102及び第2の不揮発性メモリ112は、それぞれが複数の記憶面を有している。ここでは、第1の不揮発性メモリ102及び第2の不揮発性メモリ112は、それぞれがA面及びB面の2つの記憶面を有している。A面及びB面の2つの記憶面に対しては、互いに独立して書き込み及び読み出しを行うことができる。
第1の不揮発性メモリ102のA面及びB面のそれぞれには、第1のメインプログラムが記憶されている。第1の不揮発性メモリ102のA面に記憶されている第1のメインプログラムを第1のメインプログラムAと呼ぶ。第1の不揮発性メモリ102のB面に記憶されている第1のメインプログラムを第1のメインプログラムBと呼ぶ。
第1の不揮発性メモリ102は、第1の不揮発性メモリ102のA面及びB面に記憶された第1のメインプログラムのうちのいずれを実行するかを指定する第1の起動指定フラグも記憶している。この際、第1の起動指定フラグを、第1の不揮発性メモリ102のA面及びB面の両方に全く同じ内容で記憶しておくようにしてもよい。又は、第1の起動指定フラグを、第1の不揮発性メモリ102のA面及びB面のうちの予め定めた一方に記憶しておくようにしてもよい。
同様に、第2の不揮発性メモリ112のA面及びB面のそれぞれには、第2のメインプログラムが記憶されている。第2の不揮発性メモリ112のA面に記憶されている第2のメインプログラムを第2のメインプログラムAと呼ぶ。第2の不揮発性メモリ112のB面に記憶されている第2のメインプログラムを第2のメインプログラムBと呼ぶ。
第2の不揮発性メモリ112は、第2の不揮発性メモリ112のA面及びB面に記憶された第2のメインプログラムのうちのいずれを実行するかを指定する第2の起動指定フラグも記憶している。この際、第2の起動指定フラグを、第2の不揮発性メモリ112のA面及びB面の両方に全く同じ内容で記憶しておくようにしてもよい。又は、第2の起動指定フラグを、第2の不揮発性メモリ112のA面及びB面のうちの予め定めた一方に記憶しておくようにしてもよい。
情報処理装置10は、第1の起動制御部135を備えている。第1の起動制御部135は、第1のプロセッサ101の起動時の動作を制御する。第1のプロセッサ101の起動時とは、具体的に例えば、情報処理装置10の電源投入時、又は、第1のプロセッサ101のリセット時等である。第1の起動制御部135は、第1のプロセッサ101の起動時に、第1のプロセッサ101の動作モードを設定する。動作モードについては後述する。
また、第1の起動制御部135は、第1のプロセッサ101の起動時に、第1の不揮発性メモリ102に記憶されている第1の起動指定フラグを参照する。そして、第1の起動制御部135は、第1の不揮発性メモリ102のA面及びB面に記憶された第1のメインプログラムA及び第1のメインプログラムBのうち、第1の起動指定フラグにより指定された方を第1のプロセッサ101が読み出して実行するように制御する。したがって、第1のプロセッサ101は、第1の不揮発性メモリ102のA面及びB面に記憶された第1のメインプログラムのうち、第1の起動指定フラグにより指定された方を読み出して実行する。
ここでは、第1の起動制御部135は、第1のプロセッサ101に内蔵されているとする。なお、第1の起動制御部135を専用の回路で実現してもよいし、第1の不揮発性メモリ102に記憶されているプログラムを第1のプロセッサ101で実行することで、第1の起動制御部135の機能を実現するようにしてもよい。
または、第1の起動制御部135を、第1のプロセッサ101の外部に設けるようにしてもよい。第1の起動制御部135を第1のプロセッサ101の外部に設ける場合、第1の起動制御部135を第2のプロセッサ111に内蔵するようにしてもよい。そして、第1の起動制御部135を第2のプロセッサ111に内蔵する場合は、第2の不揮発性メモリ112に記憶されているプログラムを第2のプロセッサ111で実行することで、第1の起動制御部135の機能を実現するようにしてもよい。
情報処理装置10は、第2の起動制御部145を備えている。第2の起動制御部145は、第2のプロセッサ111の起動時の動作を制御する。第2のプロセッサ111の起動時とは、具体的に例えば、情報処理装置10の電源投入時、又は、第2のプロセッサ111のリセット時等である。第2の起動制御部145は、第2のプロセッサ111の起動時に、第2のプロセッサ111の動作モードを設定する。
また、第2の起動制御部145は、第2のプロセッサ111の起動時に、第2の不揮発性メモリ112に記憶されている第2の起動指定フラグを参照する。そして、第2の起動制御部145は、第2の不揮発性メモリ112のA面及びB面に記憶された第2のメインプログラムA及び第2のメインプログラムBのうち、第2の起動指定フラグにより指定された方を第2のプロセッサ111が読み出して実行するように制御する。したがって、第2のプロセッサ111は、第2の不揮発性メモリ112のA面及びB面に記憶された第2のメインプログラムのうち、第2の起動指定フラグにより指定された方を読み出して実行する。
ここでは、第2の起動制御部145は、第2のプロセッサ111に内蔵されているとする。なお、第2の起動制御部145を専用の回路で実現してもよいし、第2の不揮発性メモリ112に記憶されているプログラムを第2のプロセッサ111で実行することで、第2の起動制御部145の機能を実現するようにしてもよい。
または、第2の起動制御部145を、第2のプロセッサ111の外部に設けるようにしてもよい。第2の起動制御部145を第2のプロセッサ111の外部に設ける場合、第2の起動制御部145を第1のプロセッサ101に内蔵するようにしてもよい。そして、第2の起動制御部145を第1のプロセッサ101に内蔵する場合は、第1の不揮発性メモリ102に記憶されているプログラムを第1のプロセッサ101で実行することで、第2の起動制御部145の機能を実現するようにしてもよい。
情報処理装置10は、第1のプログラム更新部131を備えている。ここでは、第1のプログラム更新部131は、第1のプロセッサ101に内蔵されているとする。なお、第1のプログラム更新部131を専用の回路で実現してもよいし、第1の不揮発性メモリ102に記憶されているプログラムを第1のプロセッサ101で実行することで、第1のプログラム更新部131の機能を実現するようにしてもよい。
または、第1のプログラム更新部131を、第1のプロセッサ101の外部に設けるようにしてもよい。第1のプログラム更新部131を第1のプロセッサ101の外部に設ける場合、第1のプログラム更新部131を第2のプロセッサ111に内蔵するようにしてもよい。そして、第1のプログラム更新部131を第2のプロセッサ111に内蔵する場合は、第2の不揮発性メモリ112に記憶されているプログラムを第2のプロセッサ111で実行することで、第1のプログラム更新部131の機能を実現するようにしてもよい。
第1のプログラム更新部131は、第1の不揮発性メモリ102に記憶された第1のメインプログラムの更新を行う。第1のメインプログラムを更新するための第1の更新用メインプログラムは、ここでは、情報処理装置10の外部から取得する。
情報処理装置10は、通信ネットワーク12を介して、サーバー15及びPC16(Personal Computer)と通信可能に接続されている。情報処理装置10は、ネットワークコントローラ104を備えている。ネットワークコントローラ104は、情報処理装置10が通信ネットワーク12を介して外部と通信するために必要な処理を行う。
そして、例えば、サーバー15又はPC16に予め第1の更新用メインプログラムを保存しておく。第1のプロセッサ101は、通信ネットワーク12をインターフェースとして、サーバー15又はPC16に保存されている第1の更新用メインプログラムを取得して、第1の揮発性メモリ103に記憶する。
また、別の例としては、USBメモリ109を利用して第1の更新用メインプログラムを取得するようにしてもよい。USBとは、Universal Serial Busのことである。この場合には、情報処理装置10は、USBコントローラ108を備えている。USBコントローラ108は、情報処理装置10がUSBを介して外部と通信するために必要な処理を行う。
この例の場合では、USBメモリ109に予め第1の更新用メインプログラムを保存しておく。次に、USBメモリ109を図1に示すUSBコネクタ110に接続する。そして、第1のプロセッサ101は、USBをインターフェースとして、USBメモリ109に保存されている第1の更新用メインプログラムを取得して、第1の揮発性メモリ103に記憶する。
第1のプログラム更新部131は、第1の揮発性メモリ103に一旦記憶した第1の更新用メインプログラムで、第1の不揮発性メモリ102に記憶された第1のメインプログラムを上書きすることで、第1の不揮発性メモリ102に記憶された第1のメインプログラムを更新する。このメインプログラムの更新時に、第1のプログラム更新部131は、第1の不揮発性メモリ102に記憶されている第1の起動指定フラグを参照する。そして、第1のプログラム更新部131は、第1の不揮発性メモリ102のA面及びB面に記憶された第1のメインプログラムA及び第1のメインプログラムBのうち、第1の起動指定フラグにより指定されていない方を更新する。
第1のプログラム更新部131は、第1の不揮発性メモリ102に記憶された第1のメインプログラムを上書き更新した後、第1のプロセッサ101をリセットする。
情報処理装置10は、第2のプログラム更新部141を備えている。ここでは、第2のプログラム更新部141は、第2のプロセッサ111に内蔵されているとする。なお、第2のプログラム更新部141を専用の回路で実現してもよいし、第2の不揮発性メモリ112に記憶されているプログラムを第2のプロセッサ111で実行することで、第2のプログラム更新部141の機能を実現するようにしてもよい。
または、第2のプログラム更新部141を、第2のプロセッサ111の外部に設けるようにしてもよい。第2のプログラム更新部141を第2のプロセッサ111の外部に設ける場合、第2のプログラム更新部141を第1のプロセッサ101に内蔵するようにしてもよい。そして、第2のプログラム更新部141を第1のプロセッサ101に内蔵する場合は、第1の不揮発性メモリ102に記憶されているプログラムを第2のプロセッサ111で実行することで、第2のプログラム更新部141の機能を実現するようにしてもよい。
第2のプログラム更新部141は、第2の不揮発性メモリ112に記憶された第2のメインプログラムの更新を行う。第2のメインプログラムを更新するための第2の更新用メインプログラムは、ここでは、情報処理装置10の外部から取得する。
この情報処理装置10の外部から第2の更新用メインプログラムを取得する方法は、第1の更新用メインプログラムと同様に通信ネットワーク12又はUSB等を介して外部の記憶媒体(サーバー15、PC16又はUSBメモリ109)からの複製による。ただし、ここでは例えば、第2のプロセッサ111が直接的に通信ネットワーク12又はUSBを通じて外部と通信するのではなく、第1のプロセッサ101を介して複製を行う。
すなわち、例えば、サーバー15、PC16又はUSBメモリ109に予め第2の更新用メインプログラムを保存しておく。そして、まず、第1のプロセッサ101が、通信ネットワーク12をインターフェースとして、サーバー15又はPC16に保存されている第2の更新用メインプログラムを取得して、第1の揮発性メモリ103に記憶する。もしくは、第1のプロセッサ101が、USBをインターフェースとして、USBメモリ109に保存されている第2の更新用メインプログラムを取得して、第1の揮発性メモリ103に記憶する。
次に、第1のプロセッサ101は、第1の揮発性メモリ103に一旦記憶した第2の更新用メインプログラムを、シリアル通信線121を介して第2のプロセッサ111へと送信する。第2のプロセッサ111は、シリアル通信線121を介して受信した第2の更新用メインプログラムを、第2の揮発性メモリ113に記憶する。
第2のプログラム更新部141は、第2の揮発性メモリ113に一旦記憶した第2の更新用メインプログラムで、第2の不揮発性メモリ112に記憶された第2のメインプログラムを上書きすることで、第2の不揮発性メモリ112に記憶された第2のメインプログラムを更新する。このメインプログラムの更新時に、第2のプログラム更新部141は、第2の不揮発性メモリ112に記憶されている第2の起動指定フラグを参照する。そして、第2のプログラム更新部141は、第2の不揮発性メモリ112のA面及びB面に記憶された第2のメインプログラムA及び第2のメインプログラムBのうち、第2の起動指定フラグにより指定されていない方を更新する。
第2のプログラム更新部141は、第2の不揮発性メモリ112に記憶された第2のメインプログラムを上書き更新した後、第2のプロセッサ111をリセットする。
以上のようにしてメインプログラムを更新し、プロセッサをリセットした後の動作について、さらに説明する。
第1の起動制御部135は、第1のプログラム更新部131により第1の不揮発性メモリ102に記憶された第1のメインプログラムが更新された後の第1のプロセッサ101のリセット時に、第1のプロセッサの動作モードを更新確認モードにして第1のプロセッサを起動させる。この際、第1の起動制御部135は、第1の不揮発性メモリ102に記憶されている第1の起動指定フラグを、A面及びB面のうち、第1のプログラム更新部131により第1のメインプログラムが更新された方の記憶面を指定するものにセットする。
第1のプロセッサ101は、更新確認モードで起動すると、第1のメインプログラムの実行により生成されるプロセスが正常に動作しているかを監視する第1の監視プロセスを生成する。そして、第1のプロセッサ101は、第1の監視プロセスの生成が正常に行われた場合に第1の監視プロセス起動完了信号を第2のプロセッサ111へと出力する。
その後、第1のプロセッサ101は、第1の不揮発性メモリ102に記憶されている第1の起動指定フラグが指定する記憶面、すなわち、第1のメインプログラムが更新された方の記憶面に記憶されている第1のメインプログラムを読み出して実行する。
第1のメインプログラムの実行により生成されるプロセスが正常に動作しなかった場合には、第1の監視プロセスがこの異常を検知する。プロセス異常を検知した第1の監視プロセスは、プロセス異常が発生した旨を予め定められた方法により発報する。具体的に例えば、第1のプロセッサ101からプロセス異常が発生した旨の信号を、第2のプロセッサ111に送信したり情報処理装置10の外部に送信したりする。
また、情報処理装置10は第1のタイマー134及び第2のタイマー144を備えている。第2のプロセッサ111は、第1のメインプログラムの更新の後に第1のプロセッサ101をリセットしてからの経過時間を第2のタイマー144により計測している。そして、第2のプロセッサ111は、第1のプロセッサ101のリセット後に予め設定された一定時間が経過しても第1の監視プロセス起動完了信号を受信しなかった場合には、第1のメインプログラムの更新に失敗したことを検出するようになっている。
同様に、第2の起動制御部145は、第2のプログラム更新部141により第2の不揮発性メモリ112に記憶された第2のメインプログラムが更新された後の第2のプロセッサ111のリセット時に、第2のプロセッサの動作モードを更新確認モードにして第2のプロセッサを起動させる。この際、第2の起動制御部145は、第2の不揮発性メモリ112に記憶されている第2の起動指定フラグを、A面及びB面のうち、第2のプログラム更新部141により第2のメインプログラムが更新された方の記憶面を指定するものにセットする。
第2のプロセッサ111は、更新確認モードで起動すると、第2のメインプログラムの実行により生成されるプロセスが正常に動作しているかを監視する第2の監視プロセスを生成する。そして、第2のプロセッサ111は、第2の監視プロセスの生成が正常に行われた場合に第2の監視プロセス起動完了信号を第2のプロセッサ111へと出力する。
その後、第2のプロセッサ111は、第2の不揮発性メモリ112に記憶されている第2の起動指定フラグが指定する記憶面、すなわち、第2のメインプログラムが更新された方の記憶面に記憶されている第2のメインプログラムを読み出して実行する。
第2のメインプログラムの実行により生成されるプロセスが正常に動作しなかった場合には、第2の監視プロセスがこの異常を検知する。プロセス異常を検知した第2の監視プロセスは、プロセス異常が発生した旨を予め定められた方法により発報する。具体的に例えば、第2のプロセッサ111からプロセス異常が発生した旨の信号を、第2のプロセッサ111に送信したり情報処理装置10の外部に送信したりする。
また、第1のプロセッサ101は、第2のメインプログラムの更新の後に第2のプロセッサ111をリセットしてからの経過時間を第1のタイマー134により計測している。そして、第1のプロセッサ101は、第2のプロセッサ111のリセット後に予め設定された一定時間が経過しても第2の監視プロセス起動完了信号を受信しなかった場合には、第2のメインプログラムの更新に失敗したことを検出するようになっている。
以上のように構成された情報処理装置10は、第1のメインプログラムを記憶する第1のメモリである第1の不揮発性メモリ102と、第1のメモリに記憶された第1のメインプログラムを読み出して実行する第1のプロセッサ101と、第1のメモリに記憶された第1のメインプログラムを更新する第1のプログラム更新部131と、第1のプログラム更新部131により第1のメモリに記憶された第1のメインプログラムが更新された後の第1のプロセッサ101のリセット時に、更新確認モードで第1のプロセッサ101を起動させる第1の起動制御部135と、を備えている。そして、第1のプロセッサ101は、更新確認モードで起動すると、第1のメインプログラムの実行により生成されるプロセスが正常に動作しているかを監視する第1の監視プロセスを生成し、第1の監視プロセスの生成が正常に行われた場合に第1の監視プロセス起動完了信号を出力する。
また、以上のように構成された情報処理装置10におけるプログラム更新方法は、メインプログラムを記憶するメモリである第1の不揮発性メモリ102又は第2の不揮発性メモリ112と、メモリに記憶されたメインプログラムを読み出して実行するプロセッサである第1のプロセッサ101又は第2のプロセッサ111と、を備えた情報処理装置10のメモリに記憶されたメインプログラムを更新するプログラム更新方法である。そして、メモリに記憶されたメインプログラムを更新する第1の工程と、第1の工程によりメモリに記憶されたメインプログラムが更新された後のプロセッサのリセット時に、更新確認モードでプロセッサを起動させる第2の工程と、更新確認モードで起動したプロセッサが、メインプログラムの実行により生成されるプロセスが正常に動作しているかを監視する監視プロセスを生成し、監視プロセスの生成が正常に行われた場合に監視プロセス起動完了信号を出力する第3の工程と、を備えている。
このため、プログラム更新後のリセット時においては、メインプログラムの実行により生成されるプロセスが正常に動作しているかを監視する監視プロセスの生成が正常に行われたことを確認するだけであるため、更新したプログラム全体が正常に更新されているかを確認する場合と比べて、確認にかかる時間を短縮することができる。そして、監視プロセスの生成と監視結果の送信機能については正常であることを確認しているため、以降のプログラムの実行において異常が発生した場合には、監視プロセスからの異常通報により異常発生を検知し、対処することができる。
また、更新確認モードは、更新により書き換えたメインプログラムが正しく書き換えできているかを確認するためのモードである。しかし、書き換えたプログラムをそのまま通常動作させてしまうと、例えば、第1のプロセッサ101と第2のプロセッサ111との間で協調して実行される協調処理があった場合に、一方のプロセッサのプログラムだけ更新されて機能が変化したために、この協調処理が正しく動作しない可能性がある。一方、双方のプロセッサのプログラムを同時に更新してしまうと、更新に失敗した場合に何が原因なのかを解析することが困難になる。
そこで、情報処理装置10及びそのプログラム更新方法において上記の構成を備えることで、プログラムの書き換え後に更新確認モードで動作させることによって、各プロセスを監視するプロセスの生成と、その監視結果を別のプロセッサに送信する処理までは正常に動作するという最小限の機能の確認を行うことができる。
また、第1の不揮発性メモリ102及び第2の不揮発性メモリ112は、それぞれがA面及びB面の2つの記憶面を有している。そして、A面及びB面のそれぞれに第1のメインプログラム又は第2のメインプログラムを記憶している。
このような構成により、2種類のプログラムのうち、一方を使って実行しているときには、もう一方のプログラムを書き換えて新しいバージョンに更新することが可能である。そして、プログラム更新後に、システムを再起動して、第1の不揮発性メモリ102、第2の不揮発性メモリ112に記録されている新しいバージョンのプログラムを実行することでシステム更新することが可能である。また、この際、仮に新しいバージョンのプログラムに何らかの不具合があって、正常に起動できない場合であっても、今回更新していない方のプログラムを使ってシステムを再起動することにより、システムを復旧させることができる。
また、第1のプロセッサ101は、更新確認モードで第1の監視プロセスの生成が正常に行われた場合に、第1の監視プロセス起動完了信号を第2のプロセッサ111へと出力する。そして、第2のプロセッサ111は、更新確認モードで第2の監視プロセスの生成が正常に行われた場合に、第2の監視プロセス起動完了信号を第1のプロセッサ101へと出力する。このため、プログラムの更新と更新が正常に行われたかの確認のために専用のハードウェアを用意する必要がない。
さらに、以上のように構成された情報処理装置10を備えたエレベータ装置は、エレベータの乗りかご500の内部に設けられ、当該乗りかご500の内部を撮影してアナログ画像信号を情報処理装置10へと出力するかご内カメラ114と、乗りかご500の内部に設けられ、情報処理装置10からのデジタル画像信号の入力を受けて画像を表示するモニタ106と、を備えている。そして、情報処理装置10の第1のプロセッサ101により、情報処理装置10からモニタ106に出力するデジタル画像信号を処理し、情報処理装置10の第2のプロセッサ111により、かご内カメラ114から情報処理装置10に入力されたアナログ画像信号を処理する。
近年、デジタル映像技術、映像圧縮技術、映像データ蓄積技術及びデータ伝送技術等が進展し、それら技術を応用して構成するデジタル映像表示器、監視レコーダーシステム及びテレビ電話システムも急速に発展している。デジタル映像表示器及び監視レコーダーシステムは、ビル及び駅等の様々な公共施設に設置され、さまざまな情報の提供と、万が一の時に備えた監視を行う。テレビ電話システムは、例えば、エレベータ内に利用者が閉じ込められた時に、監視センターの担当者と映像を通して会話することで安心感を与えることができるとともに、エレベータ内の状況を監視センターの担当者が確認できる。特に、エレベータ内は、閉じられた空間であることから、テレビ電話システムに加えて、エレベータの利用者に情報を提供するデジタル映像表示器と、利用者の監視をおこなう監視レコーダーシステムが同時に求められることがある。
これらデジタル映像表示器や、監視レコーダー、テレビ電話システムを実現する場合、汎用プロセッサにより、デジタル映像処理及び映像圧縮処理に相当するプログラムを実行して実現する方法がある。しかし、映像の高解像度化、映像データの高圧縮化が進んでおり、これら処理を汎用プロセッサで実行することで、汎用プロセッサの温度上昇が問題となることがある。汎用プロセッサの温度上昇は、熱暴走による動作不具合となることがあるため、ファンなどの冷却装置によって温度を下げる必要がある。しかし、ファンが故障した場合には汎用プロセッサが熱暴走してしまうため、定期的なメンテナンスが必須となり、そのためのコストが増加してしまう。
そこで、前述のような情報処理装置10を備えたエレベータ装置によれば、モニタ106に出力するデジタル画像信号処理と、かご内カメラ114から入力されたアナログ画像信号処理とを、それぞれ専用のプロセッサで行うことができる。さらに、複数の専用プロセッサそれぞれのプログラム更新後の確認処理に必要な時間を短縮することが可能である。
なお、図2には通信ネットワーク12に接続された監視カメラ11を図示している。この監視カメラ11は、撮影した映像を例えばMPEG形式で圧縮した圧縮映像データとして情報処理装置10に送信する。第1のプロセッサ101は、情報処理装置10が受信した監視カメラ11からの圧縮映像データを伸張してモニタ106に表示させる。また、第1のプロセッサ101は、情報処理装置10が受信した監視カメラ11からの圧縮映像データをHDD105(ハードディスクドライブ)に保存する。そして、第1のプロセッサ101は、HDD105に保存されている圧縮映像データを読み出して伸張し、モニタ106に表示させることもできる。
次に、以上のように構成された情報処理装置10における起動処理の流れ及びプログラム更新処理の流れについて、各種のフラグ制御及び各種の信号のやり取りも含めて、さらに詳しく説明する。これまでの説明において、第1の起動指定フラグ及び第2の起動指定フラグを用いた処理について既に説明している。以降では、さらに、第1の起動確認フラグ及び第2の起動確認フラグ、並びに、第1の更新フラグ及び第2の更新フラグを用いた処理についても説明する。
第1の起動確認フラグ及び第1の更新フラグは、第1の不揮発性メモリ102に記憶されている。第2の起動確認フラグ及び第2の更新フラグは、第2の不揮発性メモリ112に記憶されている。
第1の起動確認フラグは、第1のメインプログラムが正しく起動したことが確認できているか否かを示すフラグである。ここでは、第1の起動確認フラグは、第1のメインプログラムA及び第1のメインプログラムBのそれぞれについて存在する。第2の起動確認フラグは、第2のメインプログラムが正しく起動したことが確認できているか否かを示すフラグである。第2の起動確認フラグは、第2のメインプログラムA及び第2のメインプログラムBのそれぞれについて存在する。
ここで、起動確認フラグが無効とは、メインプログラムの起動を試みたところ、起動確認の判断を行う処理が実行されていないために起動の確認ができないということである。すなわち、メインプログラムの更新が何らかの原因で失敗したと判断できる。また、不揮発性メモリの物理的な故障により、メインプログラムの一部が正しく読み出せない、又は、メインプログラムの一部が変化してしまっている等の問題が発生した場合にも、起動確認フラグは無効となることがある。
第1の更新フラグは、第1のプログラム更新部131により、第1の不揮発性メモリ102に記憶されている第1のメインプログラムが第1の更新用メインプログラムで上書きされたか否かを示すものである。第2の更新フラグは、第2のプログラム更新部141により、第2の不揮発性メモリ112に記憶されている第2のメインプログラムが第2の更新用メインプログラムで上書きされたか否かを示すものである。
また、以降の説明においては、第1のプロセッサ101と第2のプロセッサ111との間でやり取りされる信号として、図2に示す第1のリセット制御信号及び第2のリセット制御信号、第1の更新確認フラグ信号及び第2の更新確認フラグ信号、並びに、起動反転フラグ信号がある。
第1のリセット制御信号及び第2のリセット制御信号、並びに、第1の更新確認フラグ信号及び第2の更新確認フラグ信号は、シリアル通信線121を介してやり取りされる。第1のリセット制御信号は、第1のプロセッサ101から第2のプロセッサ111をリセットするための信号である。第2のリセット制御信号は、第2のプロセッサ111から第1のプロセッサ101をリセットするための信号である。
第1の更新確認フラグ信号は、第1のプロセッサ101が、第2のプロセッサ111に更新確認モードで起動するように指示するための信号である。第2の更新確認フラグ信号は、第2のプロセッサ111が、第1のプロセッサ101に更新確認モードで起動するように指示するための信号である。
起動反転フラグ信号は、オープンドレイン構成となっている。起動反転フラグ信号は、電源電圧(VDD)に、抵抗を介してプルアップされている。起動反転フラグ信号は、通常においては、第1のプロセッサ101及び第2のプロセッサ111の両方に入力された状態である。すなわち、第1のプロセッサ101及び第2のプロセッサ111は、通常時においては、電源電圧と同じ電圧(ハイレベル)を検出している。
第1のプロセッサ101において、第1の不揮発性メモリ102に保存されている第1のメインプログラムA及び第1のメインプログラムBのうち、第1の起動指定フラグで指定されたメインプログラムで起動できなかった場合に、第1のプロセッサ101は、起動反転フラグ信号をグランドレベル(ローレベル)にドライブする。
第2のプロセッサ111は、起動反転フラグ信号がローレベルになったことを検出した場合に、第1のプロセッサ101が第1の起動指定フラグで指定されたメインプログラムでは起動できないことを検知することができる。そして、この場合には、第1のプロセッサ101は第1の起動指定フラグで指定されていない方のメインプログラムにより起動される。よって、第2のプロセッサ111は、第1のプロセッサ101が第1の起動指定フラグで指定されていない方のメインプログラムで起動していることを認識することができる。
同様に、第2のプロセッサ111において、第2の不揮発性メモリ112に保存されている第2のメインプログラムA及び第2のメインプログラムBのうち、第2の起動指定フラグで指定されたメインプログラムで起動できなかった場合に、第2のプロセッサ111は、起動反転フラグ信号をグランドレベル(ローレベル)にドライブする。
第1のプロセッサ101は、起動反転フラグ信号がローレベルになったことを検出した場合に、第2のプロセッサ111が第2の起動指定フラグで指定されたメインプログラムでは起動できないことを検知することができる。そして、この場合には、第2のプロセッサ111は第2の起動指定フラグで指定されていない方のメインプログラムにより起動される。よって、第1のプロセッサ101は、第2のプロセッサ111が第2の起動指定フラグで指定されていない方のメインプログラムで起動していることを認識することができる。
以上のような各フラグ及び各信号の機能を前提とし、まず、図3及び図4を参照しながら、情報処理装置10の起動処理の流れについて説明する。ステップS200で情報処理装置10の電源が投入されると、第1のプロセッサ101及び第2のプロセッサ111は、電源が投入されてから規定時間が経過した後にハードウェアで構成されたリセット回路によりリセット解除される(ステップS201及びS301)。
まず、第1のプロセッサ101での処理の流れを説明する。第1のプロセッサ101は、第1の不揮発性メモリ102から起動プログラムを読み出して実行することで、第1の起動制御部135の機能を実現する。すなわち、第1の起動制御部135による処理というのは、起動プログラムを実行している第1のプロセッサ101による処理と同じことを意味している。
ステップS201の後はステップS202へと進む。ステップS202においては、第1の起動制御部135は、第1のプロセッサ101の初期化処理を行う。第1のプロセッサ101の初期化処理とは、具体的に例えば、第1のプロセッサ101の動作に必要なクロック設定、キャッシュ設定、第1の不揮発性メモリ102のアクセスパラメータの設定、第1の揮発性メモリ103の初期化、シリアル通信線121を介した通信に必要なコントローラの設定、及び、第1のプロセッサ101の入出力ポートの設定等を含む。
続くステップS203において、第1の起動制御部135は、第1の不揮発性メモリ102に保存されている第1の更新フラグを参照し、第1のプログラム更新部131により第1のメインプログラムが更新されたか否かを確認する。ステップS203において、第1の更新フラグが無効であって、第1のメインプログラムが更新されていない場合、ステップS204に進む。一方、第1の更新フラグが有効であって、第1のメインプログラムが更新された直後である場合、ステップS205へと進む。
ステップS204においては、第1の起動制御部135は、第1の起動指定フラグで指定された第1のメインプログラムの第1の起動確認フラグが有効であるか否かを確認する。
ここで、図5を参照しながら第1の起動確認フラグの具体的な状態について説明する。前述したように、第1の起動確認フラグは、第1のメインプログラムが正しく起動したことが確認できているか否かを示すフラグである。このため、図5(a)に示す定常状態では、第1のメインプログラムAについての起動確認フラグ及び第1のメインプログラムBについての起動確認フラグのどちらも有効である。
また、第1のプログラム更新部131により第1のメインプログラムAを更新した直後では、第1のメインプログラムAが正しく起動したことが確認できていない。このため、図5(b)に示すように、第1のメインプログラムAについての起動確認フラグは無効であり、第1のメインプログラムBについての起動確認フラグは有効である。
そして、第1のプログラム更新部131により第1のメインプログラムBを更新した直後では、第1のメインプログラムBが正しく起動したことが確認できていない。このため、図5(c)に示すように、第1のメインプログラムAについての起動確認フラグは有効であり、第1のメインプログラムBについての起動確認フラグは無効である。
なお、第1のメインプログラムAについての起動確認フラグ及び第1のメインプログラムBについての起動確認フラグのどちらもが無効となる状態は原則として発生しない。ただし、仮にそのような状態が発生した場合には、正しく起動する第1のメインプログラムがないということになるので、故障を検出する。
図3に戻って説明を続ける。ステップS204において、第1の起動指定フラグで指定されたメインプログラムの起動確認フラグが有効である場合、ステップS205に進む。一方、第1の起動指定フラグで指定されたメインプログラムの起動確認フラグが無効である場合、ステップS206に進む。
ステップS205においては、第1の起動制御部135は、起動反転フラグ信号がハイレベルか否かを確認する。起動反転フラグ信号がハイレベルであれば、第2のプロセッサ111が第2の起動指定フラグで指定される第2のメインプログラムを実行しても問題ないと判断できる。この場合には、ステップS205からステップS207へと進む。一方、起動反転フラグ信号がローレベルである場合、第2のプロセッサ111が第2の起動指定フラグで指定される第2のメインプログラムを実行することに問題があると判断できる。この場合には、ステップS205からステップS209へと進む。
ステップS206においては、第1の起動制御部135は、起動反転フラグ信号をローレベルに設定する。
ステップS207では、第1の起動制御部135は、第2のプロセッサ111から送信される第2の更新確認フラグ信号が無効か否かを確認する。第2の更新確認フラグ信号が無効の場合、ステップS208へと進む。一方、第2の更新確認フラグ信号が有効の場合、第2のプロセッサ111が、第1のプロセッサ101に更新確認モードでの起動を指示していることを表している。この場合には、ステップS209へと進む。
ステップS208においては、第1の起動制御部135は、第1の起動指定フラグにより指定された第1のメインプログラムを選択する。ステップS208の後はステップS210へと進む。
ステップS209においては、第1の起動制御部135は、第1の起動指定フラグにより指定されていない方の第1のメインプログラムを選択する。ステップS209の後はステップS210へと進む。
ステップS210においては、第1の起動制御部135は、ステップS208又はステップS209で選択されたメインプログラムが、第1のメインプログラムA及び第1のメインプログラムBのいずれであるのかの結果を、第1の揮発性メモリ103に記憶させる。ステップS210の後は図3中の「C」に至る。そして、図4中の「C」からステップS211へと進む。
ステップS211においては、第1の起動制御部135は、第2の更新確認フラグ信号が無効か否かを確認する。第2の更新確認フラグ信号が無効の場合には、ステップS212へと進む。ステップS212においては、第1の起動制御部135は、第1の更新フラグを無効に設定し、ステップS213へと進む。ステップS213においては、第1のプロセッサ101は、更新確認モードを無効にした状態で、ステップS210で第1の揮発性メモリ103に記憶された方の第1のメインプログラムの実行を開始する。
一方、ステップS211で第2の更新確認フラグ信号が有効の場合には、ステップS214へと進む。ステップS214においては、第1のプロセッサ101は、更新確認モードを有効にした状態で、ステップS210で第1の揮発性メモリ103に記憶された方の第1のメインプログラムの実行を開始する。
ステップS215においては、第1のプロセッサ101は、更新確認モードが無効の状態で第1のメインプログラムを動作させている。続くステップS216においては、第1のプロセッサ101は、起動完了通知を第2のプロセッサ111とやり取りする(290で示す点線は、このやり取りを表している)。
ステップS216で起動完了通知を送信した後は、第1のメインプログラムが正常に起動したと判断できる。このため、ステップS216の後はステップS217へと進み、第1のプロセッサ101は、ステップS210で第1の揮発性メモリ103に記憶された方の第1のメインプログラムについての第1の起動確認フラグを有効に設定する。ステップS217の後はステップS218へと進む。
ステップS218においては、第1のプロセッサ101は、第1の起動指定フラグが指定する第1のメインプログラムと、ステップS210で第1の揮発性メモリ103に記憶された方の第1のメインプログラム(選択結果)とが同じであるか否かを確認する。第1の起動指定フラグが指定する第1のメインプログラムと、ステップS210で第1の揮発性メモリ103に記憶された方の第1のメインプログラムとが同じである場合にはステップS219へと進む。
ステップS219においては、第1のプロセッサ101は、第1のメインプログラムを実行し、第1のメインプログラムに基づく通常動作を行う。第1のメインプログラムの通常動作時においては、第1のメインプログラムに搭載されている全ての機能が動作することになる。このため、第1のプロセッサ101と第2のプロセッサ111とは、継続的に相互にやり取りを行う(291で示す点線は、このやり取りを表している)。
一方、ステップS218で、第1の起動指定フラグが指定する第1のメインプログラムと、ステップS210で第1の揮発性メモリ103に記憶された第1のメインプログラムとが同じでない場合にはステップS220へと進む。
ステップS220においては、第1の不揮発性メモリ102に記憶されている第1の起動指定フラグを、ステップS210で第1の揮発性メモリ103に記憶された第1のメインプログラムを指令するものへと変更する。また、第1の起動指定フラグを変更したことをログとして記録する。このログの記録は、第1の不揮発性メモリ102、HDD105並びに通信ネットワーク12を介して接続されたサーバー15及びPC16の記憶装置等に対して行う。ステップS220の後はステップS219へと進む。
一方、ステップS214の後はステップS221へと進む。ステップS221においては、第1のプロセッサ101は、更新確認モードが有効の状態で第1のメインプログラムを動作させている。そして、更新確認モードでの動作に問題がなければ、次回の再起動時に、第1のメインプログラムの全ての機能の動作確認をするために、第1のプロセッサ101は第1の起動確認フラグを無効に変更する。このステップS221の処理については、後述するプログラム更新処理の説明において詳細を記載する。
第2のプロセッサ111での処理の流れは、第1のプロセッサ101の場合と同様である。すなわち、第2のプロセッサ111について実施されるステップS301からS321は、第1のプロセッサ101について実施されるステップS201からS221のそれぞれと同様である。より正確には、ステップS201からS221について以上で説明した内容において、第1のプロセッサ101に関連する事項を第2のプロセッサ111に関連する対応事項に読み換え、第2のプロセッサ111に関連する事項を第1のプロセッサ101に関連する対応事項に読み換えると、ステップS301からS321の内容となる。このため、第2のプロセッサ111について実施されるステップS301からS321については、その詳細な説明は省略する。
なお、図6に示すのは、第2の起動確認フラグの具体的な状態である。この図6は第1の起動確認フラグについて示した図5に対応している。すなわち、図6(a)に示す定常状態では、第2のメインプログラムAについての起動確認フラグ及び第2のメインプログラムBについての起動確認フラグのどちらも有効である。また、第2のプログラム更新部141により第2のメインプログラムAを更新した直後では、図6(b)に示すように、第2のメインプログラムAについての起動確認フラグは無効であり、第2のメインプログラムBについての起動確認フラグは有効である。そして、第2のプログラム更新部141により第2のメインプログラムBを更新した直後では、図6(c)に示すように、第2のメインプログラムAについての起動確認フラグは有効であり、第2のメインプログラムBについての起動確認フラグは無効である。
次に、図7から図10を参照しながら、情報処理装置10のプログラム更新処理の流れについて説明する。図7に示すステップS219は、図4におけるテップS219と同じである。このステップS219は、第1のプロセッサ101が第1のメインプログラムを実行して通常動作をしている状態を表している。同様に、図7に示すステップS319は、図4におけるステップS319と同じである。このステップS319は、第2のプロセッサ111が第2のメインプログラムを実行して通常動作をしている状態を表している。
この状態において、ステップS251で、第1のプロセッサ101にプログラム更新イベントが入力されたとする。このプログラム更新イベントは、例えば、サーバー15又はPC16から通信ネットワーク12を介して入力してもよいし、ユーザーによるコマンド入力でもよい。
ステップS251でプログラム更新イベントが入力されると、第1のプログラム更新部131は、ステップS252で、第1の更新用メインプログラム1及び第2の更新用メインプログラム2を、例えばサーバー15から通信ネットワーク12及びネットワークコントローラ104を介して取得し、取得した第1の更新用メインプログラム1及び第2の更新用メインプログラム2を第1の揮発性メモリ103に保存する。
続くステップS253で、第1のプログラム更新部131は、第1の揮発性メモリ103に保存されている第2の更新用メインプログラムを、第2のプロセッサ111に送信する。この送信の際には、シリアル通信線121が利用される。この送信を、点線253で示す。
第2のプロセッサ111では、ステップS351で、第2の更新用メインプログラムを第1のプロセッサ101からシリアル通信線121を介して受信する。そして、第2のプロセッサ111は、受信した第2の更新用メインプログラムを第2の揮発性メモリ113に保存する。
ステップS253及びS351の処理が完了した時点で、第1のプロセッサ101に接続された第1の揮発性メモリ103には、第1の更新用メインプログラムが保存されている。また、第2のプロセッサ111に接続された第2の揮発性メモリ113には、第2の更新用プログラムが保存されている。
次に、ステップS254で、第1のプログラム更新部131は、第2のプロセッサ111に対して、更新プログラムの実行指示を行う。ここでいう、「更新プログラム」とは、第2のプログラム更新部141による第2のメインプログラムの更新を指す。この実行指示を、点線254で示す。第2のプロセッサ111は、更新プログラム実行指示を受けて、ステップS352で、更新プログラムを実行する。すなわち、第2のプログラム更新部141による第2のメインプログラムの更新を実行する。
このステップS352においては、第2のプログラム更新部141は、第2の不揮発性メモリ112に保存されている第2の起動指定フラグを参照し、第2のメインプログラムA及び第2のメインプログラムBのうち第2の起動指定フラグが指定していない方の第2のメインプログラムに、第2の揮発性メモリ113に保存されている第2の更新用メインプログラムを上書きする。そして、ステップS353へと進み、第2の更新用メインプログラムが書き込まれたことを記録するために、第2の更新フラグを有効にする。また、第2のプログラム更新部141は、更新が完了したことを第1のプロセッサ101に通知する。この通知を、点線255で示す。
第1のプロセッサ101の第1のプログラム更新部131では、ステップS254で、更新プログラム実行指示をした後、ステップS255で、更新プログラムの実行が完了したかを確認する。完了していなければステップS256へと進む。
ステップS256では、第1のプログラム更新部131は、第2のプロセッサ111の更新プログラム実行で、すなわち、第2のプログラム更新部141による第2のメインプログラム更新処理でエラーが発生したか否かを確認する。このエラーの発生は、もしあれば、第2のプロセッサ111のステップS352の処理で通知される。エラーが発生した場合、ステップS257へと進み、ログを記録した後に終了する。一方、ステップS256でエラーが発生していない場合には、ステップS255に戻って第2のプロセッサ111での更新プログラム完了を待つ。
ステップS255で更新プログラムの実行が完了した場合、ステップS258に進む。ステップS258では、第2のプロセッサ111で更新したプログラムが正しく書き込めているか更新確認モードで確認するために、第1のプログラム更新部131は、第1の更新確認フラグ信号を有効に設定する。続くステップS259で、第1のプログラム更新部131は、第1のリセット制御信号を第2のプロセッサ111へと送信し、第2のプロセッサ111をリセットする。この時のリセット処理を、点線259で示す。
ステップS259の後は、ステップS260へと進む。ステップS260では、第1のプログラム更新部131は、第1のタイマー134に予め定められた正の初期値をセットする。そして、第1のプログラム更新部131は、第1のタイマー134による初期値からの減算を開始させる。
一方、ステップS353の後、第2のプロセッサ111は、第1のプロセッサ101からの第1のリセット制御信号によってリセットが実行され、図3の「B」から処理が開始される。このリセット後の第2のプロセッサ111の処理について、図3及び図4を参照しながら説明する。
リセット後の第2のプロセッサ111では、ステップS302で初期化処理が実行された後、ステップS303で第2の更新フラグを確認する。図7のステップS353で第2の更新フラグが有効に設定されているため、ステップS305に進む。ステップS305では、起動反転フラグ信号はハイレベルのままであるから、ステップS307に進む。
ステップS307では、第1の更新確認フラグ信号を確認する。図7のステップS258で第1の更新確認フラグ信号は有効に設定されているため、ステップS309に進む。ステップS309では、第2の起動指令フラグが指定しない方の第2のメインプログラムを選択する。すなわち、図7のステップS352で第2の更新用メインプログラムで上書きされた方を選択することになる。
続くステップS310で、ステップS309での選択結果を第2の揮発性メモリ113に保存する。ステップS311へと進み、第1の更新確認フラグ信号133を確認する。ステップS307の時と同様に第1の更新確認フラグ信号は有効に設定されているため、ステップS314に進む。ステップS314では、更新確認モード有効で第2のメインプログラムを起動する。そして、ステップS321で、更新確認モードでの第2のメインプログラムの起動を完了し、ステップS309で選択された方の第2の起動確認フラグを無効に設定する。
図8に示すステップS321は、この図4のステップS321に対応している。ステップS321で更新確認モードでの第2のメインプログラムの起動を完了すると、第2のプロセッサ111から第1のプロセッサ101にシリアル通信線121を介して第2の監視プロセス起動完了信号が送信される(点線261)。
第1のプログラム更新部131は、ステップS261で、第2のプロセッサ111からの第2の監視プロセス起動完了信号を受信したか否かを確認する。第2の監視プロセス起動完了信号を受信していない場合、ステップS262へと進む。ステップS262においては、第1のプログラム更新部131は、ステップS260で開始した第1のタイマー134が0になったか否かを確認する。第1のタイマー134が0になっていなければ、ステップS261へと戻る。
一方、第1のタイマー134が0になれば、ステップS263へと進む。ステップS263においては、ステップS321での更新確認モードによる第2のメインプログラムの起動に何らかの問題があり、プログラム更新が失敗したと判断できる。そこで、第1のプログラム更新部131は、ログを記録する。
続くステップS264で、第1のプログラム更新部131は、第1の更新確認フラグ信号133を無効に設定する。そして、ステップS265へと進み、第1のプログラム更新部131は、第1のリセット制御信号を第2のプロセッサ111に送信して第2のプロセッサ111をリセットする。続くステップS266で、第1のプログラム更新部131は、第1のプロセッサ101をリセットする。これにより、第1のプロセッサ101及び第2のプロセッサ111は、それぞれが図3における「A」及び「B」から起動処理を開始する。
この時、図7のステップS353で第2の更新フラグは無効であったものが有効に変更されているが、それ以外のフラグについては、第1のプログラム更新部131が処理を実行する前と同じである。このため、図3及び図4の第2のプロセッサ111の処理を実行していくとステップS312で更新フラグが無効になるので、第1のプログラム更新部131が処理を実行する前と同じ状態に戻ることになる。
一方、ステップS261で第2の監視プロセス起動完了信号を受信した場合、ステップS267へと進む。ステップS267においては、第1のプログラム更新部131は、第1の更新確認フラグ信号133を無効に設定する。続くステップS268で、第1のプログラム更新部131による処理が完了したことを、第2のプロセッサ111に通知する。この通知を点線268で示す。そして、「G」に至り処理は図9の同じく「G」からステップS271へと進む。
第2のプロセッサ111では、ステップS321の後、ステップS354で、第1のプログラム更新部131による処理が完了した旨の通知を受信し、「H」に至る。そして、処理は図9の同じく「H」からステップS361へと進む。
ステップS271及びS361のそれぞれから先、図9及び図10に示す処理においては、今度は、第2のプロセッサ111の第2のプログラム更新部141が第1のプロセッサ101に対してプログラム更新制御を行う。
図9に示すステップS271及びS272は、それぞれ、図7のステップS352及びS353における第2のプロセッサ111による処理と同様の処理を、第1のプロセッサ101が行う。また、図9に示すステップS361からS367は、それぞれ、図7のステップS254からS260における第1のプログラム更新部131による処理と同様の処理を、第2のプログラム更新部141が行う。ただし、ステップS364の後は、「L」に至り、処理は図10の同じく「L」からステップS374へと進む点が、図7及び図8の処理とは異なっている。
また、図10に示すステップS221は、図8のステップS321における第2のプロセッサ111による処理と同様の処理を、第1のプロセッサ101が行う。図10に示すステップS368からS370、S373からS375は、それぞれ、図8のステップS261からS266における第1のプログラム更新部131による処理と同様の処理を、第2のプログラム更新部141が行う。
ただし、図10に示すフローでは、ステップS368で第1の監視プロセス起動完了信号を受信した場合、ステップS371へと進む。ステップS371では、第2のプログラム更新部141は、起動指定フラグ更新指示を、第1のプロセッサ101に対して行う。そして、ステップS372へと進み、第2のプログラム更新部141は、第2の不揮発性メモリ112に記憶されている第2の起動指定フラグを、更新した第2のメインプログラムを指定するように更新する。ステップS372の後はステップS373へと進む。
一方、ステップS371で送信された起動指定フラグ更新指示を受けた第1のプロセッサ101は、ステップS221からS273へと進む。ステップS273においては、第1のプロセッサ101は、第1の不揮発性メモリ102に記憶されている第1の起動指定フラグを、更新した第1のメインプログラムを指定するように更新する。この際の信号のやり取りを、点線371で示す。
ステップS273が終了すると、ステップS374で第2のプログラム更新部141から送信された第2のリセット制御信号を受けて、第1のプロセッサ101はリセットされる。そして、図10の「A」に至り、図3の同じく「A」からリセット後の処理を実行する。また、ステップS375でリセットされた第2のプロセッサ111においては、図10の「B」に至り、図3の同じく「B」からリセット後の処理を実行する。
このリセット後の第1のプロセッサ101及び第2のプロセッサ111での処理について、図3及び図4を参照しながら簡単に説明する。第1のプロセッサ101及び第2のプロセッサ111は、リセット解除(ステップS201、S301)の後に、初期化処理(ステップS202、S302)を行う。そして、第1の更新フラグ及び第2の更新フラグが有効であるため、ステップS203、S303から、それぞれステップS205、S305に進む。
続いて、起動反転フラグ信号はハイレベルであるため、ステップS207、S307に進む。今回は、第1の更新確認フラグ信号及び第2の更新確認フラグ信号は両方とも無効であることから、ステップS208、S308へと進み、第1のプロセッサ101及び第2のプロセッサ111のそれぞれが、起動指定フラグで指定されたメインプログラムを選択する。
ここで、それぞれの起動指定フラグは、図10におけるステップS273、S372での処理により、更新されたメインプログラムの方に変更されている。このため、ステップS208、S308で選択されるメインプログラムは、更新されたメインプログラムになる。
次に、ステップS211、S311で、それぞれの更新確認フラグ信号が無効と判定され、ステップS212、S312へと進んで、第1及び第2それぞれの更新フラグを無効とする。続くステップS213、S313では、更新確認モードを無効にして、第1及び第2それぞれのメインプログラムを起動する。そして、ステップS215、S315で、更新確認モード無効で第1及び第2それぞれのメインプログラムを動作させ、ステップS216、S316で起動完了通知をお互いに通知し合う。
続くステップS217、S317で、第1及び第2それぞれの起動確認フラグを有効に変更する。ステップS218、S318においては、第1及び第2それぞれの起動指定フラグとステップS208、S308での選択結果が同じであるので、ステップS219、S319へと進み、第1及び第2それぞれのメインプログラムの通常動作を行う。
以上の処理の流れにより、第1のプロセッサ101が実行するバージョンの異なる第1のメインプログラムA及び第1のメインプログラムBのうち、現在使用していない方の第1のメインプログラムの更新と、第2のプロセッサ111が実行するバージョンの異なる第2のメインプログラムA及び第2のメインプログラムBのうち、現在使用していない方の第2のメインプログラムの更新とを、確実に行うことができる。すなわち、更新確認モードを有効にして第1及び第2それぞれのメインプログラムを一度動作させてそれぞれが正常に動作することを確認した上で、リセット後に使用するメインプログラムを更新後のものに切り換えるように構成しているため、プログラムの更新を確実に行うことができる。
次に、以上のように構成された情報処理装置10において、メインプログラムを通常動作中に不具合が発生した場合の動作について説明する。
図4のフロー図のステップS219及びステップS319において、第1のプロセッサ101及び第2のプロセッサ111が、それぞれ第1及び第2のメインプログラムを実行して通常動作しているときには、定期的に互いの状態を確認して、プログラムの実行停止又はエラーの発生がないかを確認している(点線291で示す)。
この定期的な状態確認を行っている状態で、例えば、第2のプロセッサ111から第1のプロセッサ101への応答がなくなった場合の動作例について、図11を参照しながら説明する。
図11において、第1のプロセッサ101及び第2のプロセッサ111は、それぞれ、第1及び第2のメインプログラムの通常動作(ステップS219、S319)を行っている。このとき、第1のプロセッサ101から、第2のプロセッサ111への状態通知(292の点線で表す)を行い、第2のプロセッサ111から第1のプロセッサ101への状態通知(293の点線で表す)が停止したとする。
第1のプロセッサ101は、第1のメインプログラムを実行したことで生成されたプロセス、例えば状態監視プロセスにより、第2のプロセッサ111からの状態通知293が停止したことを検知する。第2のプロセッサ111からの状態通知293が停止したことを検知すると、第1のプロセッサ101での処理はステップS401へと進む。ステップS401においては、第1のプロセッサ101は、第1の不揮発性メモリ102に記憶されている第1の起動確認フラグを無効にする。続くステップS402で、第1のプロセッサ101は、第1のリセット制御信号を第2のプロセッサ111への送信し、第2のプロセッサ111をリセットさせる(このリセット制御を点線402で示す)。
そして、ステップS403へと進み、第1のプロセッサ101は、第1のプロセッサ101自身をリセットする。第1のプロセッサ101をリセットした後は、図11の「A」に至り、図3中の同じく「A」からステップS201へと処理が進む。一方、第1のリセット制御信号を受けた第2のプロセッサ111は、リセットされた後に図11の「B」に至り、図3中の同じく「B」からステップS301へと処理が進む。
このリセット後の第1のプロセッサ101及び第2のプロセッサ111での処理は、前述した図3及び図4のフローに従って行われる。今回は、図11のステップS401で第1の起動確認フラグが無効にされているため、図3のステップS204からS206へと進む。そして、ステップS206において、起動反転フラグ信号がローレベルに設定される。したがって、この場合には、ステップS209へと進み、第1の起動指定フラグが指定しない方の第1のメインプログラムが選択される。
一方、第2の不揮発性メモリ112に記憶されている第2の起動確認フラグは有効のままである。このため、第2のプロセッサ111については、ステップS304からステップS305に進む。ステップS305では、起動反転フラグ信号がローレベルになっているため、ステップS309へと進み、第2のプロセッサ111においても、第2の起動指定フラグが指定しない方の第2のメインプログラムが選択される。
そして、ステップS215、S315に至って、第1のプロセッサ101及び第2のプロセッサ111は、それぞれ、更新確認モードを無効にして、ステップS209、S309で選択したメインプログラム、つまり、起動指定フラグとは異なるメインプログラムを選択して起動する。
したがって、A面及びB面に記憶されているメインプログラムのうち、図11のステップS219、S319で実行されていたものとは異なる方のメインプログラムを、第1のプロセッサ101及び第2のプロセッサ111のそれぞれは選択して起動することになる。なお、第2のプロセッサ111での異常がプログラム更新後に発生したものである場合、図11のステップS219、S319で実行されていたものとは異なる方のメインプログラムとは、プログラム更新前に異常が発生することなく動作していたメインプログラムということになる。
そして、ステップS218、S318から、それぞれステップS220、S320へと進み、第1及び第2それぞれの起動指定フラグの変更を行った上でログを記録する。このようにして、最終的にステップS219、S319で通常動作するメインプログラムは、プログラム更新前に異常が発生することなく動作していたメインプログラムである。すなわち、少なくともメインプログラムの更新前の状態に復旧して、情報処理装置10を停止させることなく動作させ続けることができる。
実施の形態2.
図12から図18は、この発明の実施の形態2に係るもので、図12は情報処理装置の構成を示すブロック図、図13及び図14は情報処理装置の起動処理を示すフロー図、図15から図18は情報処理装置のプログラム更新処理を示すフロー図である。
前述した実施の形態1は、第1の不揮発性メモリ102に第1の起動指定フラグを記憶し、第2の不揮発性メモリ112に第2の起動指定フラグを記憶している。すなわち、起動指定フラグを第1のプロセッサ101側と第2のプロセッサ111側とでそれぞれ別に記憶している。これに対し、ここで説明する実施の形態2は、起動指定フラグを第1のプロセッサ101側と第2のプロセッサ111側のうちの一方のみで記憶するようにしたものである。
以下、この実施の形態2に係る情報処理装置10について、実施の形態1との相違点を中心に説明する。ここでは、起動指定フラグを第2のプロセッサ111側で記憶するようにした場合について説明する。しかし、起動指定フラグを第1のプロセッサ101側で記憶するようにしても構わない。
まず、図12を参照しながら、この実施の形態2に係る情報処理装置10の構成を示す。この図12に示すように、実施の形態2に係る情報処理装置10の構成は、図2に示した実施の形態1とほぼ同様である。しかしながら、実施の形態2に係る情報処理装置10においては第1の不揮発性メモリ102は、第1の起動指定フラグを記憶していない点が、まず実施の形態1と異なっている。
そして、第2の不揮発性メモリ112は、1つの起動指定フラグだけを記憶している。また、第1のプロセッサ101で実行する第1のメインプログムを指定するため、第2のプロセッサ111から第1のプロセッサ101へと起動指定フラグ信号が送信される。起動指定フラグ信号は、第1のプロセッサ101が、第1の不揮発性メモリ102のA面及びB面のどちらに記憶されている第1のメインプログラムを実行するかを指定するものである。
他の構成については実施の形態1と同様であって、その説明は省略する。
次に、以上のように構成された情報処理装置10の起動処理について図13及び図14を参照しながら説明する。図13及び図14の各ステップについて、実施の形態1の図3及び図4と同符号のものは、基本的に同じ内容であるため、その説明は省略する。この実施の形態2においては、図13のステップS301の後にステップS331へと進む。ステップS331においては、第2の起動制御部145は、第2の不揮発性メモリ112に記憶されている起動指令フラグを参照して起動指定フラグ信号を設定する。このとき、例えば、第1のメインプログラムAを指定する場合はハイレベル、第1のメインプログラムBを指定するときはローレベルというように予め決めておく。ステップS331の後はステップS303へと進む。
そして、図13のステップS208においては、第1の起動制御部135は、起動指定フラグ信号を参照して、起動指定フラグ信号により指定されている方の第1のメインプログラムを選択する。また、図13のステップS209においては、第1の起動制御部135は、起動指定フラグ信号を参照して、起動指定フラグ信号により指定されていない方の第1のメインプログラムを選択する。他のステップは実施の形態1と同様である。
次に、以上のように構成された情報処理装置10のプログラム更新処理について図15から図18を参照しながら説明する。図15から図18の各ステップについて、実施の形態1の図7から図10と同符号のものは、基本的に同じ内容であるため、その説明は省略する。この実施の形態2においては、図18のステップS221の後に図10のステップS273を実施することなく、第1のプロセッサ101はリセットされる。
また、図18のステップS368の後は、図10のステップS371を実施することなく、ステップS372へと進む。ステップS372においては、第2のプログラム更新部141は、第2の不揮発性メモリ112に記憶されている起動指定フラグを、更新した第1のメインプログラム及び更新した第2のメインプログラムを指定するように更新する。他のステップは実施の形態1と同様である。
前述した実施の形態1の構成においては、図6のステップS371の実行後かつステップS372の処理の前で電源断が発生すると、第1の起動指定プラグの内容が、更新された第1のメインプログラムを指定するものではなくなってしまう。このため、第1の不揮発性メモリ102に記憶されている第1の起動指定プラグの内容と第2の不揮発性メモリ112に記憶されている第2の起動指定フラグの内容とが対応しなくなる。
これに対し、以上のように構成された実施の形態2の構成によれば、実施の形態1と同様の効果を奏することができるのに加えて、起動指定フラグを1つにまとめることができるため、仮に電源断が発生したとしても、第1のプロセッサ101で実行する第1のメインプログラムの指定と第2のプロセッサ111で実行する第2のメインプログラムの指定とが対応しなくなることを防止することができる。
なお、ステップS373の更新確認フラグ信号は、電源断により初期状態に戻る。そこで、更新確認フラグ信号の初期状態を無効としておけばよい。このようにすることで、電源断後の最初の起動時には、更新前のメインプログラムを用いて動作し、起動指定フラグ更新後の電源断であれば、更新後のメインプログラムを用いて動作することになり、情報処理装置10を停止させることなく動作させ続けることができる。