JP5515374B2 - プログラマブルコントローラ、プログラム実行監視方法及びプログラム - Google Patents

プログラマブルコントローラ、プログラム実行監視方法及びプログラム Download PDF

Info

Publication number
JP5515374B2
JP5515374B2 JP2009090549A JP2009090549A JP5515374B2 JP 5515374 B2 JP5515374 B2 JP 5515374B2 JP 2009090549 A JP2009090549 A JP 2009090549A JP 2009090549 A JP2009090549 A JP 2009090549A JP 5515374 B2 JP5515374 B2 JP 5515374B2
Authority
JP
Japan
Prior art keywords
execution
verification code
program
verification
programmable controller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009090549A
Other languages
English (en)
Other versions
JP2010244213A (ja
Inventor
元治 鈴木
正康 熊谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2009090549A priority Critical patent/JP5515374B2/ja
Publication of JP2010244213A publication Critical patent/JP2010244213A/ja
Application granted granted Critical
Publication of JP5515374B2 publication Critical patent/JP5515374B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Hardware Redundancy (AREA)
  • Debugging And Monitoring (AREA)
  • Programmable Controllers (AREA)
  • Testing And Monitoring For Control Systems (AREA)

Description

本発明は、プログラマブルコントローラに関し、更に詳しくはプログラマブルコントローラのプログラム実行を監視する技術に関する。
プログラマブルコントローラにおいては、プログラムが想定どおりの順序で実行されたか、そして正しく演算結果を算出したかを調べ、正常にプログラムが実行されているかを診断することが行われている。
特にCPUの多重化等の冗長化構成を持つプログラマブルコントローラにおいては、想定どおりの順序で実行されたか、そして演算結果が正しいかを診断をする技術が必要となる。
プログラム実行の診断としては、最も単純な技術としては、ウォッチドッグタイマーによって実行時間を監視する方法が一般に知られている。例えば、特許文献1には、ウォッチドッグタイマーによりCPUに割り込みをかけることによって、暴走を監視するプログラマブルコントローラが開示されている。
また特許文献2には、ウォッチドックタイマーを用いない監視を行うものとして、状態遷移時間を基準となる時間と比較することによって監視を行うプログラマブルコントローラが開示されている。
また特許文献3には、ウォッチドックタイマーを用いない監視方法として、プログラムにチェックプログラムを記載し、このチェックプログラムによってRAM内の値をインクリメントして書き込んでゆき、またRAMに書き込まれた数値が正常であるかをチェックすることによって暴走を検出する方法が開示されている。
またその他の診断技術としては、プログラム内の実行通過ポイントをトレースメモリに記憶してゆき、このトレースメモリの内容を照合することによって診断を行う方法が知られている。
特開平6−250864号公報 特開平5−313711号公報 特開平6−324914号公報
しかしながら上記した各監視方法には、以下の問題点がある。
特許文献1等のウォッチドッグタイマーによるプログラム実行監視方法では、プログラムスタートを示す命令の実行からプログラムエンドを示す命令の実行までが、規定の時間内に終了できたかを確認できる。しかし、プログラマブルコントローラが多重化構成を有していた場合、途中経過を調べて複数の実行チャネルにおいて等しく同じプログラム実行をできたかを検証することはできない。
また特許文献2の方法では、あらかじめ基準となる実行時間等の設定を行う必要があり、また状態遷移時間や基準時間を記憶するために用いるメモリ資源を必要とする。
更に特許文献3の方法では、実行プログラムがシーケンシャルなものである場合はチェックが可能である。しかし実行プログラムが単純なシーケンスプログラムである場合の適用に制限され、実行プログラムが分岐やループを含みダイナミックに実行先が変化する場合には向かない。
そしてこれら特許文献1乃至3の方法はすべて単一の実行チャネルを備える構成の場合の監視、診断を行う技術である。
また実行プログラムの実行通過ポイントをトレースメモリに蓄積し、そのデータを照合することによって実行監視を行う方法は、途中経過の照合が可能となるが、トレースメモリの全内容を他の実行チャネルに転送してから各実行チャネル内で比較照合されるため、処理時間がかかる。また、実行プログラムのサイズが大きくなるほど、その分トレースメモリの容量や、処理時間もそれだけ長くかかる。例えば、1ポイントあたり2バイトであるとき、1000ポイント格納可能なトレースメモリは約2キロバイトの容量を必要とする。
また冗長化を持たせたプログラマブルコントローラの複数の実行チャネルを全く同じハードウエア、同じ動作クロック、同じソフトウエアで構成し、実行チャネル間を完全に同期して動作させて、各実行チャネルからのハードウエア信号をモニタして相違発生時を以って異常とする方法もある。しかし機能安全に関する国際標準規格であるIEC61508に規定されている機能安全向け電子機器においては、同一のハードウエアによる系統的障害の影響を極力避けるための方策として、構成要素にハードウエア的あるいはソフトウエア処理方式的に違いを持たせる多様性(ダイバシティ)を持たせることが推奨されている。そのため、この構成を同じにして同期を取る方法では当規格を満たすことができない。
上記を鑑み本発明では、少ないメモリ量で、短い時間内に、また実行チャネルが異なるハードウエアやソフトウエアで構成されていても、プログラム実行の途中経過の検証が可能なプログラマブルコントローラを提供することを課題とする。
本発明のプログラマブルコントローラは、実行プログラムを並列に実行する複数の実行チャネルを備えるプログラマブルコントローラにおいて、前記複数の実行チャネルは、前記実行プログラムを実行する実行制御部と、当該実行チャネルにおいて前記実行プログラムが正常に実行されたかを検証するための検証コードを格納する検証コード格納部と、前記実行プログラムの実行が完了すると、前記複数の実行チャネルの前記検証コード格納部内の検証コードを照合する照合部と、前実行制御部から呼び出され、前記検証コードを生成する検証コード生成部とを備える。そして、前記実行制御部は、前記検証コード生成部を呼び出す際、実行中の前記実行プログラム内において一意な値を取る第1のパラメータを、当該検証コード生成部に引き渡す。前記検証コード生成部は、前記第1のパラメータを用いて前記検証コードを生成する。前記照合部は、前記検証コードを照合することで実行順序の検証を行うことを特徴とする。
本発明のプログラム実行監視方法は、実行プログラムを並列に実行する複数の実行チャネルを備えるプログラマブルコントローラにおけるプログラム実行監視方法において、前記実行プログラムを実行する実行制御部から、当該実行プログラムが正常に実行されたかを検証するための検証コードを生成する検証コード生成を呼び出し、その際に該実行プログラム内において一意な値を取る第1のパラメータを、当該検証コード生成部に引き渡し、前記検証コード生成部は、前記第1のパラメータを用いて前記検証コードを生成し、当該検証コードを前記実行チャネル毎に備える検証コード格納領域に格納し、
前記複数の実行チャネルそれぞれの前記検証コード格納領域内の検証コードを照合することによって実行順序の検証を行う、ことを特徴とする。
本発明によるプログラムは、実行プログラムを並列に実行する複数の実行チャネルを備えるプログラマブルコントローラにおいて実行されるプログラムであって、前記実行プログラムを実行する実行制御部から呼び出され、当該実行制御部から引き渡された該実行制御部が実行中の実行プログラム内において一意な値を取る第1のパラメータを用いて、検証コードを生成し、該検証コードを前記実行チャネル毎に設けられた検証コード格納領域内に格納し、前記複数の実行チャネルそれぞれの前記検証コード格納領域内の検証コードを照合することによって実行順序の検証を行うことを前記プログラマブルコントローラに実行させることを特徴とする。
本発明によれば、実行プログラムの実行に伴って検証コードを算出していくため、実行プログラムポイント、実行順序が実行チャネル間で、もし異なっていた場合には、異なる検証コードとなり照合によって異常の検出を行うことが出来る。
また検証コード生成ルーチンへのパラメータに、実行プログラムの演算結果を用いていた場合には実行順序のほかに演算結果の同一性もチェックすることが出来る。
さらに検証コードはサブルーチン内で算出されるので、実行チャネルのハードウエア、ソフトウエア処理方式には依存性がない。
また、検証コードに必要なメモリサイズも小さく、照合に要する時間も短い。
本実施形態におけるプログラマブルコントローラシステムの全体構成を示す図である。 ラダー図の例を示す図である。 従来のプログラマブルコントローラで実行される実行プログラムの例を示す図である。 本実施形態の実行プログラム生成部によって生成される実行プログラムの第1の例を示す図である。 本実施形態の実行プログラム生成部によって生成される実行プログラムの第2の例を示す図である。 本実施形態の実行制御部が実行プログラムを実行した際の動作処理を示すフローチャートである。 検証コード生成ルーチンの第1の動作例を示す図である。 検証コード生成ルーチンの第2の動作例を示す図である。
本実施形態のプログラマブルコントローラでは、プログラム生成装置においてユーザがプログラマブルコントローラ用の言語で作成したプログラム(例えば、ラダー図)をコントローラが実行する実行プログラムに変換する際に、各実行チャネルで正常に実行プログラムを実行したかを検証するのに用いる検証コードを生成するルーチンをコールするコードを挿入する。
そしてこの実行プログラムを実行するコントローラの各実行チャネルでは、それぞれに対応したプログラムを実行すると自己のメモリに検証コードが記録される。そして各実行チャネルは、実行プログラムによる動作を完了すると記録された検証コードを互いに比較し、両者が一致したときのみ処理を継続し、両者が一致しないときは機能安全エラー処理を行う。
これにより、プログラマブルコントローラの機能安全のエラーチェックを検証コードの比較を行うという簡単な処理で実現でき、また必要とするメモリも検証コードの格納用に数byteだけである。
次に本実施形態のプログラマブルコントローラシステムの詳細について説明する。
図1は本実施形態におけるプログラマブルコントローラシステムの全体構成を示す図である。
図1のプログラマブルコントローラシステム1は、コントローラ10に転送ケーブル30を介してプログラム生成装置20が接続された構成となっている。
コントローラ10は、実行プログラムを実行する2つの実行チャネル16−1、16−2を備えた演算部11、各実行チャネル16−1、16−2の起動/停止を操作者が指示するための起動/停止スイッチ12、プログラマブルコントローラシステム1に接続されている外部機器からの外部入力を受け付ける入力部13、プログラム生成装置20から起動/停止コマンドを受信し、受信コマンドに基づいて実行チャネル16−1及び16−2に対して起動/停止を通知する起動/停止コマンド受信部14、及び実行プログラムの実行結果等を外部に出力する出力部15を有している。
このうち各実行チャネル16−1、16−2は、ハードウエア的に独立したものであり、マイコン、メモリ、ロジックICなどのハードウエアおよびファームウエアによって実現される。
各実行チャネル16−1、16−2は、実行プログラムを実行する実行制御部17−1、17−2及び実行プログラムを記憶するメモリ18−1、18−2を備えている。また各メモリ18(18−1、18−2)には、実行プログラムを格納する実行プログラム格納領域19(19−1、19−2)、後述する検証コード生成ルーチンや照合をソフトウエア的に実現するためのファームウエアを格納する検証コード生成ルーチン格納領域21(21−1、21−2)、及び検証コードを格納する検証コード格納領域22(22−1、22−2)を有している。また検証コード生成ルーチン格納領域21内のファームウエアを実行制御部17が実行することにより各実行チャネル16−1、16−2によって生成された2つの検証コードを比較する照合部23(23−1、23−2)が実現される。
またプログラム生成装置20は、ユーザがプログラム入力を行うためのものであり、例えば図2に示すラダー図24を使ってプログラム入力が可能である。以降、ラダー図24を使った例で説明するが、ユーザがプログラム入力を行う言語を限定するものではなく、電気標準国際会議(IEC)のIEC61131−3で規格が示されている他の言語(SFC、FBD、ST、IL)を用いても構わない。
プログラム生成装置20は、入力されたユーザプログラムからコントローラ10が解釈実行できる実行プログラム26をコントローラ10側が備える実行チャネル16の数(図1の場合は2つ)だけ生成する。即ち、図1の場合、実行プログラム26−1、26−2が生成される。
なお図1では各実行チャネル16−1、16−2がそれぞれ検証コード生成ルーチン格納領域21−1、21−2を備える構成となっているが、各実行チャネル16−1、16−2が1つの検証コード生成ルーチン格納領域21を共用する構成としても良い。
プログラム生成装置20は、転送ケーブル30によってコントローラ10と接続され、転送ケーブル30を経由して、実行プログラム26はコントローラ10内の各実行チャネル16のメモリ18へ転送される。
プログラム生成装置20は、ユーザが作成したラダー図24からコントローラ10の各実行チャネル16−1、16−2が実行する実行プログラム26−1、26−2を生成する実行プログラム生成部25、及びコントローラ10の各実行チャネル16−1、16−2に対して起動/停止を指示する起動/停止コマンド生成部27を有している。
実行プログラム生成部25−1は、ラダー図24から各実行チャネル16−1、16−2に対応した実行プログラム26−1及び26−2を生成する。この実行プログラム26−1及び26−2は、多様性(ダイバシティ)を持たせるため機能的には同じものであるが異なったコードのプログラムとなっている。また実行プログラム生成部25がラダー図24から実行プログラム26−1及び26−2を生成する際には、実行プログラム26−1、26−2に検証コードを生成する検証コード生成ルーチンを呼び出す命令を挿入する。この検証コード生成ルーチンを呼び出す命令は、どちらの実行チャネル16−1、16−2でも実行される位置に挿入されるが、その挿入方法としては様々な方法が考えられ、例えばラダー図24内のリレー等の機能毎に挿入する。
図2にラダー図24の例を示す。
実行プログラム生成部25は、図2のようなラダー図24を実行プログラム26−1、26−2に変換する際には、接点・コイル等の要素に対応するポイント31−1〜31−6毎に検証コード生成ルーチンを呼び出す命令を挿入する。なお、ポイント31−1〜31−6は全てに検証コード生成ルーチンを呼び出す命令を挿入する必要は無く、プログラムの全体量やステップ数を鑑み、一定間隔ごとに挿入しても構わない。またポイント31の挿入は、予め定義したルールに従って機械的に行っても良いし、経験則や実行プログラムの処理時間に基いてユーザが挿入しても構わない。
図3は、図2のラダー図24から生成された従来のプログラマブルコントローラで実行される実行プログラムの例を示す図、図4は図2のラダー図24から本実施形態の実行プログラム生成部25によって生成される実行プログラム26の例を示す図である。
図3と図4を比較すると、図4の実行プログラムでは、3カ所に検証コード生成ルーチンを呼び出す(コールする)命令41−1〜41−3が挿入されている。
図4の検証コード生成ルーチンを呼び出す命令41中の“CRCGEN”は、呼び出しを行う検証コード生成ルーチンの名前を示し、続く“X’0000”〜“X’0002”は、検証コード生成ルーチンを呼び出した実行プログラム内での一意な値で、“X’”は、例えば、16進数であることを示す。ここで値を4桁とすると、0000〜FFFFの範囲となる。
この図4の例では、検証コード生成ルーチンにパラメータとして、実行プログラム内において唯一の値をそれぞれ与えることにより、検証コード生成ルーチンでこの一意な値を用いて検証コードを生成する。これにより照合部23−1、23−2が実行チャネル16−1、16−2それぞれの検証コードを照合することによって実行プログラムの実行順序が検証可能となる。
また図4の実行プログラム26では、検証コードの生成ルーチンは含んでおらず、コントローラ10内の検証コード生成ルーチン格納領域21内の検証コード生成ルーチンを呼び出す構成なので、検証コードの生成のためには、実行プログラム26は数バイト〜数十バイト要するだけで実現できる。よって実行プログラム26の要所要所に検証コード生成ルーチンを呼び出す命令41を入れることが出来るので、実行プログラム中に複雑な分岐や条件式があっても、実行プログラム26の実行順序を検証することが出来る。又そのために必要な検証コードの格納領域22も2バイト程度のメモリ資源しか占有しない。
さらには検証コードはコントローラ10内に格納されている検証コード生成ルーチンによって生成されるので、実行チャネル16のハードウエアや、ソフトウエア処理方式には依存性がない。
図5は、本実施形態の実行プログラム生成部25によって生成される実行プログラムの第2の例を示す図である。
図5の実行プログラムでは、検証コード生成ルーチンを呼び出す命令42において、呼び出しを行う検証コード生成ルーチンの名前“CRCGEN2”に続いて、位置を示す引数“X’0000”〜“X’0002”に続いて、検証コードの生成に用いる値の引数“X’0000”、“Y00”、“Y01”が与えられている。この第2パラメータである検証コードの生成に用いる値は、実行プログラムの実行によって得られる演算結果である。なお、“Y00”、“Y01”は実行プログラム内の任意の変数の値を指す。
この図5の第2の例では、パラメータとして、実行プログラムでの位置を示す情報に加えて、演算結果をも検証コード生成ルーチンに送る。そしてこれらを元に検証コード生成ルーチンで生成される検証コードを検証することにより、実行プログラム26の実行順序だけでなく演算結果の一致性も診断できる。
この図4若しくは図5に示した実行プログラム26が実行チャネル16で実行されると、検証コード生成ルーチンが呼び出されて検証コードが生成され、これがメモリ18の検証コード格納領域22に格納される。そして実行プログラム26の実行が完了すると、各実行チャネル16−1、16−2の照合部23−1、23−2は自己の実行チャネル16のメモリ18内の検証コード格納領域22の値と、もう一方の実行チャネル16のメモリ18内の検証コード格納領域22の値を照合する。そしてコントローラ10は、この照合の結果、両者が一致したときのみ処理を続行し、両者が一致しないときは機能安全エラー処理を行う。
なお検証コード生成ルーチンでは、パラメータ値を用いて検証コードを生成するが、その検証コードの生成アルゴリズムは、チェックサム(単純和)、CRC(Cyclic redundancy checksum)、ハッシュ値(Hash value)などが考えられるが特に限定されるものではなく、プログラマブルコントローラが必要とされる診断精度に応じて適宜なアルゴリズムを選択して用いればよい。
上述した、図4、図5では、実行プログラム26−1、26−2は各実行チャネル16−1、16−2の実行制御部17−1、17−2によって実行される。このとき、2つの実行チャンネル16−1、16−2は同期して動作し、入力部13から外部入力を取り込む「入力」、実行プログラム26を実行する「演算」、2つの実行チャネル16−1及び16−2間での検証コード格納領域22−1、22−2内の値が一致することを確認する「照合」、「演算」や「照合」の結果を出力部15から外部へ出力する「出力」の各フェーズを経て1つのスキャンのサイクルとし、処理を行う。そして「照合」において2つの検証コードが一致している間は、スキャンを繰り返す。
実行プログラム26が実行されると、検証コード生成ルーチンをコールする度に検証コードが生成され、メモリ18内の検証コード格納領域22の値は更新される。そして実行プログラム26の実行が完了すると、各実行チャネル16−1、16−2では、照合部23−1、23−2が2つの検証コード格納領域22−1、22−2内の値を照合し、両者が一致するのを確認する。この照合の結果、2つの検証コードが一致すればコントローラ10は、演算結果を出力し、不一致の場合にはエラーを示す出力を行って、演算結果は出力しない。
なお、照合部23−1及び照合部23−2の各々で照合を行うのは、照合処理自体も二重化することにより機能安全を満たす側面がある。これは、実行チャネル16−1と実行チャネル16−2とを、異なったハードウエア構成(ダイバシティの確保)とすることにより、実行チャネル16−1と実行チャネル16−2とがハードウエア的な問題により“同時に誤照合する可能性”を回避する点にある。
一方で、このような制約を設けない場合は、例えば、照合部23を一つで構成したり、実行チャネル16の外部に設けるように構成しても構わない。
また、照合部23は、検証コード格納領域22−1、22−2内の値の取得・照合及びその照合結果の出力制御機能を有しておればよく、ハードウエア的な構造であってもソフトウエア的に実現するためのファームウエア(プログラム)であっても構わない。例えば、照合部23は実行制御部17からアクセス可能な照合ルーチンとしてメモリ18内に格納されていても構わない。
次に各実行チャネル16−1、16−2の実行制御部17−1、17−2の処理フローについて説明する。
図6は、実行制御部17が実行プログラム26を実行した際の動作処理を示すフローチャートである。なお図6の例では検証コード生成ルーチンとして、後述する図7のCRCGENのルーチンを用いた場合を例として示している。
なお図6の処理は、2つの実行チャネル16−1及び16−2において同期して処理される。また本実施形態のプログラマブルコントローラシステム1では、起動、停止、故障など様々な事象により対応する挙動があるが、図6の処理フローは本実施形態の検証コードに関連する部分のみを記載し、他の部分は省略化している。
図6のフローにおいて、まずステップS1として実行チャネル16の初期化を行う。
この初期化処理では、コントローラ10は実行プログラム26の実行環境を整え、初期化処理が終了するとスキャンサイクルに入る。
スキャンサイクルでは、実行制御部17はまずステップS2として外部入力取り込みを行う。この外部入力取り込みでは入力部13から外部入力データを実行制御部17に取り込む。
次に、ステップS3として実行制御部17は、検証コードが格納される検証コード格納領域22内の値の初期化を行う。
初期化が終了すると、実行制御部17は、ステップS4として、実行プログラム格納領域19から実行プログラム26を読み込む。そしてステップS5としてステップS4で読み込んだ実行プログラム26の実行処理を行う。この実行プログラム26の実行処理は、実行制御部17が実行プログラム26のプログラムコードに従い、命令実行を進める。
このステップS5の実行プログラム26の実行処理中、CAL CRCGEN,X’xxxx命令等の検証コード生成ルーチンを呼び出す命令を実行すると、処理を検証コード生成ルーチン格納領域21内の検証コード生成ルーチンに処理を移す。
検証コード生成ルーチンでは、ステップS6として、パラメータ値X’xxxx等を用いて検証コードを生成し、これを検証コード格納領域22に格納後、処理をステップS5に戻す。
この検証コード生成ルーチンは、検証コード生成ルーチンを呼び出す命令が実行される度に呼び出され、検証コード格納領域22内の検証コードを更新する。
なおこの検証コード生成ルーチンの詳細については後述する。
ステップS5の実行プログラム26の実行が完了すると、実行制御部17は、ステップS7として検証コード格納領域22内の検証コードをもう一つの実行チャネル16に通知する。本例の場合には、実行チャネル16−1は実行チャネル16−2に、実行チャネル16−2は実行チャネル16−1に、自己の検証コードを通知する。
他の実行チャネル16からの検証コードを受け取ったら(ステップS8)、実行制御部17は、ステップS9として照合部23によって自チャネルの検証コードと比較照合を行う。
そしてステップS9の検証コードの照合の結果、両者が不一致の場合(ステップS10、NO)、プログラム実行順序が実行チャネル16−1と実行チャネル16−2で異なっていたことを示すので、ステップS12として異常通知等の異常処理を行って処理を終了する。コントローラ10は以降プログラム実行をしない。また実行プログラム26の実行結果は出力しない。
一方、ステップS8の検証コードの照合の結果、両者が一致する場合は(ステップS10、YES)、2つのチャネル16でプログラム実行順序が同じであったことを示し、正常であるので、ステップS11として演算結果を出力する。この出力データは、出力部15を経由して、外部へ出力される。
演算結果を出力後、実行制御部17は、ステップS13として実行プログラム26の実行継続かどうかの判断を行う。
プログラムコントローラ1は、プログラム生成装置20をユーザが操作することによって、起動/停止コマンド生成部27が起動/停止コマンドをコントローラ10に対して発行し、実行チャネル16による実行プログラム26の実行/停止を行うことが出来る。
ステップS13において、停止コマンドがプログラム生成装置20から入力されていない場合、及び起動/停止スイッチ12によって停止が指示されていない場合には、実行制御部17は、実行プログラム26の実行を継続し(ステップS13、YES)、処理をステップS2に移してスキャンループの先頭に戻り、再び入力、演算、照合、出力の動作を繰り返す。
以降、検証コード不一致が検出されるか、ユーザから停止を指示されるまで、スキャンループを繰り返す。そしてユーザから停止指示を受けると(ステップS13、NO)、実行プログラムの実行を終了する。
このようにして本実施形態のプログラマブルコントローラシステム1では、実行プログラムを実行し、また検証コードを用いて機能安全エラーを検出する。
なお上記例では、検証コード生成ルーチンとして図7のCRCGENのルーチンを用いているが、後述する図8のCRCGEN2のルーチンを用いても良い。このCRCGEN2のルーチンを用いた場合、パラメータ値として実行プログラム26での位置を示す値と実行プログラムによる演算結果も与えるので、実行プログラム26の実行順序だけでなく演算結果の一致性も診断できる。
また上記例のコントローラは、2つの実行チャネル16を備える構成を前提としているが本実施形態のプログラマブルコントローラシステム1は、3つ以上の実行チャネル16を備える場合も想定している。実行チャネル16を3つ以上備える場合には、機能安全の検証としては、全ての実行チャネル16で生成された検証コードが全て一致したときのみ正常と判断し、1つでも値が異なる場合にはエラー処理を行う。
次に検証コード算出ルーチンの詳細について説明する。
図7は、図4の実行プログラム26で呼び出されるCRCGENの検証コード生成ルーチンの動作例を示す図である。同図のルーチンは、例えば、2バイト長の1つのパラメータを与えられて呼び出される。また検証コードの生成アルゴリズムとしては、デジタルデータ通信での使用実績が多いCRC16を使用した場合を例として示している。
本実施形態においては、検証コードの生成アルゴリズムは特に限定しないが、単純和をとるチェックサムよりも、巡回冗長符号と呼ばれるCRCの方が、データ誤り検出の確実性があると一般に知られており、本例ではこのCRC16を用いて検証コードを生成している。
図7のCRCGENのルーチンが呼び出されると、まずステップS21として実行プログラム26からルーチン呼び出し命令で与えられる入力パラメータ値をCRC計算アルゴリズムの入力パラメータ1にセットする。
次にステップS22として検証コード格納領域22から現在の検証コードを読み出し、この値をCRC計算アルゴリズムの入力パラメータ2にセットする。
そしてステップS23として、CRC16計算アルゴリズムによって更新された検証コードを生成する。このCRC16計算アルゴリズムでは、入力パラメータ2に入力パラメータ1の2バイト分の値を下位バイト、上位バイトの順に反映させて新しいCRCコードを生成する。
そして最後に、ステップS24としてステップS23で生成したCRCコードを更新した検証コードとして検証コード格納領域22に格納後、処理を実行プログラム26に戻す。
2つの実行チャネル16−1、16−2が、常に実行プログラム26−1、26−2のプログラムコードに忠実に処理を進めていった場合には、常に同じ値の入力パラメータ値を伴って図7のルーチンが呼ばれるため、2つの実行チャネル16−1、16−2の検証コードの値は一致する。しかし、例えば、分岐命令での誤った分岐実行や、ジャンプ先ミス、コード生成不良等のなんらかの異常より実行プログラムの実行順序に差が生じた場合は、異なった検証コードが算出され、照合部23による実行プログラム26終了後の検証コードの照合で不一致を検出する。
したがって検証コードを照合することによって、実行プログラム26の実行順序を検証することが出来る。
図8は、図5の実行プログラム26で呼び出されるCRCGEN2の検証コード生成ルーチンの動作例を示す図である。同図のルーチンは、2バイト長の入力パラメータを2つ与えられて呼び出される。
図8のルーチンが呼び出されると、まずステップS31として実行プログラム26からルーチン呼び出し命令で与えられる第1のパラメータ値をCRC計算アルゴリズムの入力パラメータ1にセットする。
次にステップS32として検証コード格納領域22から現在の検証コードを読み出し、これをCRC計算アルゴリズムの入力パラメータ2にセットする。
そしてステップS33として、CRC16計算アルゴリズムによって更新された検証コードを生成する。このCRC16計算アルゴリズムでは、入力パラメータ2に入力パラメータ1の2バイト分の値を下位バイト、上位バイトの順に反映させて新しいCRCコードを生成する。
次にステップS34として実行プログラム26からルーチン呼び出し命令で与えられる第2のパラメータ値をCRC計算アルゴリズムの入力パラメータ1にセットする。
そして次にステップS35としてステップS33で求めたCRCコードをCRC計算アルゴリズムの入力パラメータ2にセットする。
そしてこの入力パラメータ1及び入力パラメータ2を用いて、ステップS36として、ステップS33と同様なCRC16計算アルゴリズムによってCRCコードを求める。
そして最後にステップS37としてステップS36で生成したCRCコードを検証コードとして検証コード格納領域22に格納後処理を実行プログラム26に戻す。
このように図8の検証コード生成ルーチンでは、実行プログラム26内の一意な値を示すパラメータと実行プログラムによる演算結果のパラメータを用いて検証コードを生成している。そのためこの図8の検証コード生成ルーチンを用いることにより、プログラム実行順序の差異検出のみならず、演算結果の差異検出も行うことが出来る。
なお図7、図8の検証コード生成ルーチンではCRCコードを検証コードとしていたが、本実施形態はこのようなものに限定されるものではなく、上記したチェックサムの他にも、例えば、CRCコードに比較してサイズが大きくなるが、MDやSHA等デジタルデータ通信でのメッセージ認証コード(MAC)で採用実績が多いハッシュアルゴリズムを用いることも出来る。このハッシュコードの場合、CRCコードよりもさらに誤り検出の確実性があると一般に知られており、プログラム実行監視をより厳密にしたい場合は、ハッシュアルゴリズムを採用すればよい。
なお上記例では検証コード生成ルーチンには、1乃至2のパラメータ値を引き渡していたが、検証コード生成ルーチンに3つ以上のパラメータ値を引き渡して、検証コード生成ルーチンがこれらを用いて検証コードを生成するようにしても良い。
このように、必要な厳密性に基づいて検証コードの生成アルゴリズムを選択し、コントローラの検証コード算出ルーチンを実装することで所望のプログラム実行監視精度を備えたプログラマブルコントローラを実現することができる。
また異なるハードウエアおよびソフトウエアで構成される実行チャネルであっても、プログラム実行の途中経過の検証が、少ないメモリ量で、短い時間内に行うことが出来る。
更には実行プログラムの複雑度には影響されずに適用が可能で、冗長化された実行チャネルでのプログラム実行順序、結果の同一性の検査を行うことが出来る。
1 プログラマブルコントローラシステム
10 (プログラマブル)コントローラ
11 演算部
12 起動停止スイッチ
13 入力部
14 起動コマンド受信部
15 出力部
16 実行チャネル
17 実行制御部
18 メモリ
19 実行プログラム格納領域
20 プログラム生成装置
21 検証コード生成ルーチン格納領域
22 検証コード格納領域
23 照合部
24 ラダー図
25 実行プログラム生成部
26 実行プログラム
27 起動/停止コマンド生成部
30 転送ケーブル

Claims (9)

  1. 実行プログラムを並列に実行する複数の実行チャネルを備えるプログラマブルコントローラにおいて、
    前記各実行チャネルは、
    前記実行プログラムを実行する実行制御部と、
    当該実行チャネルにおいて前記実行プログラムが正常に実行されたかを検証するための検証コードを格納する検証コード格納部と、
    前記実行プログラムの実行が完了すると、前記複数の実行チャネルの前記検証コード格納内の検証コードを照合する照合部と、
    実行制御部から呼び出され、前記検証コードを生成する検証コード生成部とを備え、
    前記実行制御部は、前記検証コード生成部を呼び出す際、実行中の前記実行プログラム内において一意な値を取る第1のパラメータを、当該検証コード生成部に引き渡し、
    前記検証コード生成部は、前記第1のパラメータを用いて前記検証コードを生成し、
    前記照合部は、前記検証コードを照合することで実行順序の検証を行うことを特徴とするプログラマブルコントローラ。
  2. 前記照合部による照合の結果、前記複数の実行チャネルの前記検証コード格納内の検証コードが全て一致したとき、前記実行プログラムは正常に実行されたと判定することを特徴とする請求項1に記載のプログラマブルコントローラ。
  3. 前記照合部は、前記複数の実行チャネルの前記検証コード格納内の検証コードが一致しないものがあるとき、エラー処理を行うことを特徴とする請求項2に記載のプログラマブルコントローラ。
  4. 前記実行制御部は、前記検証コード生成を呼び出す際、当該実行制御部が実行する前記実行プログラムによる実行結果である第2のパラメータをも当該検証コード生成に引き渡すことを特徴とする請求項1〜3の何れかに記載のプログラマブルコントローラ。
  5. 前記検証コード生成は、前記第2のパラメータを用いて前記検証コードを生成することを特徴とする請求項4に記載のプログラマブルコントローラ。
  6. 前記検証コード生成は、前記1つ以上のパラメータ値を用いて、チェックサムのアルゴリズム、CRCコードのアルゴリズム、またはハッシュコードのアルゴリズムの何れかを用いて前記検証コードを生成することを特徴とする請求項に記載のプログラマブルコントローラ。
  7. ユーザが前記プログラマブルコントローラ用の言語で作成したプログラムから、複数の前記検証コード生成を呼び出すコードを含む前記実行プログラムを生成するプログラム生成部を更に備えることを特徴とする請求項1乃至の何れか1つに記載のプログラマブルコントローラ。
  8. 実行プログラムを並列に実行する複数の実行チャネルを備えるプログラマブルコントローラにおけるプログラム実行監視方法において、
    記実行プログラムを実行する実行制御部から、当該実行プログラムが正常に実行されたかを検証するための検証コードを生成する検証コード生成を呼び出し、その際に該実行プログラム内において一意な値を取る第1のパラメータを、当該検証コード生成部に引き渡し、
    前記検証コード生成部は、前記第1のパラメータを用いて前記検証コードを生成し、当該検証コードを前記実行チャネル毎に備える検証コード格納領域に格納し、
    前記複数の実行チャネルそれぞれの前記検証コード格納領域内の検証コードを照合することによって実行順序の検証を行う
    ことを特徴とするプログラム実行監視方法。
  9. 実行プログラムを並列に実行する複数の実行チャネルを備えるプログラマブルコントローラにおいて実行されるプログラムであって、
    前記実行プログラムを実行する実行制御部から呼び出され、当該実行制御部から引き渡された該実行制御部が実行中の実行プログラム内において一意な値を取る第1のパラメータを用いて、検証コードを生成し、該検証コードを前記実行チャネル毎に設けられた検証コード格納領域内に格納し、
    前記複数の実行チャネルそれぞれの前記検証コード格納領域内の検証コードを照合することによって実行順序の検証を行う
    ことを前記プログラマブルコントローラに実行させることを特徴とするプログラム。
JP2009090549A 2009-04-02 2009-04-02 プログラマブルコントローラ、プログラム実行監視方法及びプログラム Expired - Fee Related JP5515374B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009090549A JP5515374B2 (ja) 2009-04-02 2009-04-02 プログラマブルコントローラ、プログラム実行監視方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009090549A JP5515374B2 (ja) 2009-04-02 2009-04-02 プログラマブルコントローラ、プログラム実行監視方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2010244213A JP2010244213A (ja) 2010-10-28
JP5515374B2 true JP5515374B2 (ja) 2014-06-11

Family

ID=43097185

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009090549A Expired - Fee Related JP5515374B2 (ja) 2009-04-02 2009-04-02 プログラマブルコントローラ、プログラム実行監視方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5515374B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5549665B2 (ja) 2011-12-28 2014-07-16 株式会社デンソー 車両制御装置及びソフトウェア部品
JP6340886B2 (ja) * 2014-04-10 2018-06-13 株式会社ジェイテクト プログラマブルロジックコントローラ用プログラムの作成支援装置及びプログラマブルロジックコントローラ用プログラムの作成支援方法
KR101641769B1 (ko) * 2014-06-20 2016-07-29 주식회사 큐브피아 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법
WO2021005691A1 (ja) * 2019-07-08 2021-01-14 三菱電機株式会社 制御装置、プログラム監視方法及びプログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3148771B2 (ja) * 1992-05-06 2001-03-26 オムロン株式会社 プログラマブルコントローラ
JPH06250864A (ja) * 1993-02-26 1994-09-09 Fuji Electric Co Ltd プログラマブルコントローラの誤出力防止方法
JPH06324914A (ja) * 1993-05-13 1994-11-25 Fuji Electric Co Ltd コンピュータの暴走検出方法
JP2005084896A (ja) * 2003-09-08 2005-03-31 Mitsubishi Electric Corp 車載電子制御装置
JP3897046B2 (ja) * 2005-01-28 2007-03-22 横河電機株式会社 情報処理装置および情報処理方法
JP2006338425A (ja) * 2005-06-03 2006-12-14 Hitachi Ltd 制御装置

Also Published As

Publication number Publication date
JP2010244213A (ja) 2010-10-28

Similar Documents

Publication Publication Date Title
CN107924443B (zh) 用于过程控制的控制装置的固件升级方法及其系统
JP5515374B2 (ja) プログラマブルコントローラ、プログラム実行監視方法及びプログラム
JP5348499B2 (ja) I/oユニット並びに産業用コントローラ
US20080163182A1 (en) Systems and methods for building an executable program with a low probability of failure on demand
WO2018153026A1 (zh) 一种升级pos机模块固件的方法和装置
EP1956449A2 (en) Numerical controller
JP2017167653A (ja) 評価システム、評価プログラムおよび評価方法
CN106873443A (zh) 用于对安全控制器进行编程的方法
CN107870609B (zh) 工业控制设备及其操作方法
JP5422448B2 (ja) 制御装置
US9921565B2 (en) Programming assist device for programmable logic controller program and programming assist method for the program
WO2019121516A1 (en) Seamless and safe upgrade of software intensive systems during operation
CN107193249B (zh) 程序开发辅助装置以及程序开发辅助方法
Ubayashi et al. Context-dependent product line practice for constructing reliable embedded systems
CN107924356A (zh) 零开销代码覆盖分析
JP2017167652A (ja) 評価システム、評価プログラムおよび評価方法
CN116011026B (zh) 数据库组态安全快速验证方法、系统、设备及存储介质
US8776071B2 (en) Microprocessor operation monitoring system
CN115309426A (zh) 系统升级方法、装置、计算机设备及计算机可读存储介质
CN111488558B (zh) 脚本保护方法、装置、计算机可读存储介质和计算机设备
JP4872357B2 (ja) プログラムテスト支援システム、方法及びプログラム
JP2018010331A (ja) 診断装置および診断方法
CN111966523A (zh) 一种管理电器参数的方法、系统、设备以及介质
CN109683980A (zh) 实现轨旁安全旁平台u盘配置文件可靠装载的方法
JP3731423B2 (ja) 故障診断用の基準パターンの作成方法および故障診断装置

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20110422

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120313

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131217

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140304

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140317

R150 Certificate of patent or registration of utility model

Ref document number: 5515374

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees