(57)【要約】【課題】チェックサム値の実行を制御することにより、高い信頼性の異常検出装置を提供する。【解決手段】制御プログラムを格納する第１の格納手段１と、制御プログラムのチェックサムデータを格納する第２の格納手段２と、制御プログラムのチェックサムを計算する演算手段１０とを備え、制御機器の制御プログラムの異常を検出する異常検出装置において、チェックサムデータの書き込み動作に関する情報を格納する第３の格納手段３を備え、第３の格納手段３の値に基づいて演算手段１０を実行することを特徴とする。【選択図】図１
2004094851.tif 000002
【特許請求の範囲】
【請求項１】
制御プログラムを格納する第１の格納手段と、前記制御プログラムのチェックサムデータを格納する第２の格納手段と、前記制御プログラムのチェックサムを計算する演算手段とを備え、制御機器の制御プログラムの異常を検出する異常検出装置において、
チェックサムデータの書き込み動作に関する情報を格納する第３の格納手段を備え、
前記第３の格納手段の値に基づいて前記演算手段を実行することを特徴とする異常検出装置。
【請求項２】
前記演算手段によりチェックサムが計算され、前記第２の格納手段にチェックサムが格納された場合、前記第３の格納手段に格納された書き込み動作に関する情報を同時に変更することを特徴とする請求項１記載の異常検出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、モーションコントローラまたはＰＬＣなどのマイクロコンピュータを有するマイコンシステムにおいて、異常検出を行う装置に関する。
【０００２】
【従来の技術】
【特許文献１】
特開平８−２８９０６０号公報
【０００３】
従来の技術ではコントローラがたとえば電源立ち上がり時にＲＯＭ領域のチェックサム値を単純に計算し、結果が異常であればエラーを報告するのが一般であった。また、従来の技術として、特開平８−２８９０６０に開示された装置がある。以下に図５を元に説明する。ＲＯＭ１Ａに格納されている制御プログラムのチェックサムを最下位の優先順位のタスクで計算し、あらかじめ計算しておいたチェックサムデータと比較し、等しくなければ表示部５に”ＲＯＭ　ＥＲＲＯＲ”を表示してシステムの異常をオペレータに知らせると共に、システムの全ての動作を停止する。
【０００４】
【発明が解決しようとする課題】
ところが従来の方式では、ソフトウェア開発においてたとえばインサーキットエミュレータを使用する時には、サム値計算を行なう処理を無効にするためにソースを改変する必要があった。
また、その後に製品を出荷する際にはこの改変部分をもとに戻さねばならなかった。これらの作業には手間もかかり、人手で修正を行うために、修正ミスなどが発生し、実際にＲＯＭ領域のチェックができているかどうかを再度確認する必要があった。
本発明の目的は、チェックサム値の実行を制御することにより、高い信頼性の異常検出装置を提供することである。
【０００５】
【課題を解決するための手段】
請求項１記載の異常検出装置は、制御プログラムを格納する第１の格納手段と、前記制御プログラムのチェックサムデータを格納する第２の格納手段と、前記制御プログラムのチェックサムを計算する演算手段とを備え、制御機器の制御プログラムの異常を検出する異常検出装置において、チェックサムデータの書き込み動作に関する情報を格納する第３の格納手段を備え、前記第３の格納手段の値に基づいて前記演算手段を実行することを特徴とするものである。
請求項２記載の異常検出装置は、前記演算手段によりチェックサムが計算され、前記第２の格納手段にチェックサムが格納された場合、前記第３の格納手段に格納された書き込み動作に関する情報を同時に変更することを特徴とするものである。
【０００６】
【発明の実施の形態】
実施例について図を使用して説明する。図１に、本発明の構成図を示す。ＣＰＵ１２は、制御プログラムが格納されている第１の格納手段１から制御プログラムを読み出し、その読み出された命令に基づいて制御を実行する。通常、電源投入時に、ＣＰＵ１２は、チェックサムを計算する演算手段１０を実行する。演算手段１０で計算されたチェックサムは、ＣＰＵ１２を介して、ＲＡＭ１１に格納される。次に、ＲＡＭ１１に格納されたチェックサムの値と、予め第２の格納手段に格納されているチェックサムの値を比較し、制御プログラムが破壊されているかどうかを判定する。
第２の格納手段２に格納されるべきチェックサムは、最終的なＲＯＭを作成する時には、格納されていなければならない。しかし、開発中のソフトウェアの検証を行う場合には、チェックサムを計算し、格納しておく必要はない。このため、ＲＯＭ作成前には、第３の格納手段３の書き込み情報を０にしておく。すなわち、ソフトウェアのビルド直後（コンパイル、リンクおよびロケート完了時）には、第３の格納手段の値は、０となるようにソフトウェアを作成しておく。
【０００７】
図２は、プログラムの初期化時におけるサム計算関数のコール部分のＣ記述例である。ｓｕｍ＿ｓｗｉｔｃｈ　は、第３の格納手段３の領域にロケートされており、関数ｃｈｅｃｋ＿ｒｏｍ＿ｓｕｍ（）は、ＲＯＭのサムを計算して検証するプログラムである。さて、第３の格納手段３の値は０であるので、この場合は、チェックサム演算手段１０を含むｃｈｅｃｋ＿ｒｏｍ＿ｓｕｍ（）　は実行されない。これは、インサーキットエミュレータ等を使用し、かつソフトウェアの修正が頻繁であるソフトウェア開発環境では好都合である。
動作実行時には、チェックサム演算手段１０を含むｃｈｅｃｋ＿ｒｏｍ＿ｓｕｍ（）は必ず実行されなければならない。ｃｈｅｃｋ＿ｒｏｍ＿ｓｕｍ（）については、図２の構成からなる。すなわち、第１の格納手段１に格納するチェックサムを計算する関数ｍａｋｅ＿ｒｏｍ＿ｓｕｍ（）にて、チェックサム値を計算する。計算結果は、ＣＰＵ１２を介して、ＲＡＭ１１（ｔｅｍｐ＿ｒｏｍ＿ｓｕｍ）に格納される。その後、第３の格納手段３（ｒｏｍ＿ｓｕｍ）の値と比較され、等しくない場合には異常（第１の格納手段１に格納されている制御プログラムが破壊されている）と判断する。
【０００８】
次に、ＲＯＭ製品化について説明する。チェックサムの計算前を図３、最終結果のＲＯＭイメージを図４に示す。
ＲＯＭ製品化時には、チェックサムを作成する関数ｗｒｉｔｅ＿ｒｏｍ＿ｓｕｍ（）を呼び出す。この関数は、第１の格納手段の先頭アドレスから最終アドレスまでのチェックサムを計算する。この場合、先頭アドレスおよび最終アドレスは、実際、コードをロケートした時にＲＯＭに書き込む先頭アドレスから最終アドレスである。関数ｗｒｉｔｅ＿ｒｏｍ＿ｓｕｍ（）は、チェックサムを計算し、第２の格納手段２に格納した後（図の例では１２３４３５という値）、第３の格納手段３に値１を設定して、関数のプロセスを終了する。
【０００９】
【発明の効果】
本発明により、ソース自身を修正することなく、ソフトウェア開発と製品の両方の要求項目を満たすことができる。
【図面の簡単な説明】
【図１】本発明の概要図
【図２】プログラム記述例
【図３】チェックサム設定前のＲＯＭ領域の図
【図４】チェックサム設定後のＲＯＭ領域の図
【図５】従来技術の図
【符号の説明】
１：第１の格納手段
２：第２の格納手段
３：第３の格納手段
１１：ＲＡＭ
１２：ＣＰＵ
【図１】
2004094851.tif 000003
【図２】
2004094851.tif 000004
【図３】
2004094851.tif 000005
【図４】
2004094851.tif 000006
【図５】
2004094851.tif 000007