安全装置、安全装置の演算方法
【課題】安価にコモンモード故障の可能性を低くすることができる安全装置、安全装置の演算方法を提供することを目的としている。
【解決手段】制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して制御対象を安全な状態にする安全装置であって、入力値を第1の演算方式で演算する第1演算部32と、第1演算部が演算した第1演算結果と入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部33と、第2演算部の判定結果に基づき第1演算結果と第2演算結果とが一致する場合、第1演算結果を所定の指令値として出力し、第1演算結果と第2演算結果とが一致しない場合、第1演算結果を出力しない出力制御部35とを備え、第1演算部と前記第2演算部は、1つの中央演算処理装置が備える異なるハードウェアである。
【解決手段】制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して制御対象を安全な状態にする安全装置であって、入力値を第1の演算方式で演算する第1演算部32と、第1演算部が演算した第1演算結果と入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部33と、第2演算部の判定結果に基づき第1演算結果と第2演算結果とが一致する場合、第1演算結果を所定の指令値として出力し、第1演算結果と第2演算結果とが一致しない場合、第1演算結果を出力しない出力制御部35とを備え、第1演算部と前記第2演算部は、1つの中央演算処理装置が備える異なるハードウェアである。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、安全装置、安全装置の演算方法に関する。
【背景技術】
【0002】
火力プラントなどにおいて、プラントの状態を監視し異常を検知してプラントを安全に停止させる安全装置として、電子式の安全装置が適用されている。プラントの安全装置には、高い信頼性が要求されるため、国際機能安全規格IEC61508などに、要求事項が規定されている。このため、プラントの利用者から、これらの安全規格を遵守するよう要求が増えてきている。
【0003】
電子式の安全装置では、その信頼性を高めるために、安全機能のロジックを演算する電子式の安全装置の演算装置(CPUボード上でソフトウェアを動作させて実現)の多重化が一般に使われている。非特許文献1では、演算装置単体を並列に有することで多重化し、自己診断および多重化した演算装置相互で演算結果を比較することで、演算装置の故障を検知する手段を設けている。これにより、非特許文献1に記載の安全装置(制御装置)では、安全機能が働くべきときに故障のために不動作となる確率を減らすようにしている。
【0004】
図16は、従来技術に係る安全装置の構成図である。図16に示すように、非特許文献2の安全装置900は、1つのシステム内で、安全機能が働くべきときに故障のために不動作となる確率を減らすように、同一の機能を異なる技術で構成している。異なる技術とは、例えば、図16に示すように、実行側の出力スイッチSWa1を半導体スイッチ、待機側の出力スイッチSWa2をメカニカルスイッチで構成している。また、非特許文献2に記載の発明も、図16に示したように演算装置(CPU)が並列に接続され、多重化されている。このように、非特許文献2の安全装置900は、ハードウェアの共通部をなくして、安全機能が働くべきときに故障のために不動作となる確率を減らすようにしている。
【0005】
一般に、多重化した各演算装置に同一ソフトウェアを搭載すると、コモンモード故障の要因となるため、高い信頼性を実現する上で妨げとなる問題点がある。コモンモード故障とは、共通のアプリケーションを有することにより、共通の故障要因を有することである。このため、特許文献1に記載の発明は、N個の多重化装置で、おのおの異なったソフトウェアを搭載して多様化を図ることでコモンモード故障を排除している。特許文献1に記載の発明は、機能を複数のソフトウェアによるモジュールで構成する場合に、各モジュールを1つ以上のバージョンのソフトウェアで作成する。そして、特許文献1に記載の発明は、モジュールの組合せを変えてN通りのバージョンのソフトウェアで実現している。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平6−34269号公報
【非特許文献】
【0007】
【非特許文献1】IEC 61508-6 ed1.0,Functional safety of electrical/electronic/programmable electronic safety-related systems - Part 6: Guidelines on the application of IEC 61508-2 and IEC 61508-3,International Electrotechnical Commission,2004年4月
【非特許文献2】安藤忠明、安藤進清、「安全計装システムとProSafeシリーズの診断機能」、横河技法 Vol.43 No.4 p.175−180、1999
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、特許文献1に記載の従来技術では、N個の異なったアルゴリズムやソフトウェアを開発することは、容易ではなくコスト的に過大になる問題点があった。また、非特許文献2に記載の安全装置では、多様性確保に異なるハードウェアを設けることが示されているが、CPU(演算部分)のハードウェア及びソフトウェアに対する多様性確保は示されていない。このため、非特許文献2の安全装置では、ハードウェアによるコモンモード故障を防ぐことができても、ソフトウェアによるコモンモード故障を防げない場合があるという問題点があった。
【0009】
本発明は、上記の問題点に鑑みてなされたものであって、安価にコモンモード故障を防ぐことができる安全装置、安全装置の演算方法を提供することを目的としている。
【課題を解決するための手段】
【0010】
上記目的を達成するため、本発明は、制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置であって、前記入力値を第1の演算方式で演算する第1演算部と、前記第1演算部が演算した第1演算結果と、前記入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部と、前記第2演算部の判定結果に基づき、前記第1演算結果と前記第2演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算結果を出力しない出力制御部と、を備え、前記第1演算部と前記第2演算部は、1つの中央演算処理装置が備える異なるハードウェアであることを特徴としている。
【発明の効果】
【0011】
本発明によれば、1つの中央演算装置が、第1演算部と第2演算部を備え、入力値を第1の演算方式で演算する第1演算部と、第1演算部が演算した第1演算結果と、入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部と、第2演算部の判定結果に基づき第1演算結果と第2演算結果とが一致するか否か判定し、出力を行うか否かを制御する出力制御部を備えるようにしたので、安価にコモンモード故障の可能性を低くすることができる安全装置を実現することができる。
【図面の簡単な説明】
【0012】
【図1】第1実施形態に係る安全装置の構成図である。
【図2】同実施形態に係る演算装置の構成図である。
【図3】同実施形態に係る演算装置のデータの例を説明する図である。
【図4】同実施形態に係る第1演算部と第2演算部が行う演算を説明する図である。
【図5】演算装置が行う演算の概略の一例を説明する図である。
【図6】同実施形態に係る演算装置が行う演算の一例を説明する図である。
【図7】同実施形態に係る安全装置の処理手順のフローチャートである。
【図8】第2実施形態に係る第2実施形態に係る演算装置の構成の一例を説明する図である。
【図9】同実施形態に係る演算ブロックの入出力データの一例を説明する図である。
【図10】同実施形態に係る逆演算ブロックの入出力データと保持されているデータの一例を説明する図である。
【図11】同実施形態に係る演算ブロックと逆演算ブロックの構成の一例を説明する図である。
【図12】同実施形態に係る逆演算ブロックの処理手順を説明する図である。
【図13】同実施形態に係る逆演算ブロックの処理手順のフローチャートである。
【図14】第3実施形態に係る入力が1個の場合のデジタル値の演算と逆演算を説明する図である。
【図15】同実施形態に係る入力が2個の場合のデジタル値の演算と逆演算を説明する図である。
【図16】従来技術に係る安全装置の構成図である。
【発明を実施するための形態】
【0013】
以下、図面を用いて本発明の実施形態について詳細に説明する。なお、本発明は係る実施形態に限定されず、その技術思想の範囲内で種々の変更が可能である。
【0014】
[第1実施形態]
図1は、本実施形態に係る安全装置の構成図である。なお、本実施形態の安全装置は、火力プラント、水力プラント、電力プラントなどのプラントに適用する例を説明するが、工場の生産ライン、ビルのメンテナンスシステム、大型空調システムなどの分散型制御による安全装置が用いられているシステムにも適用してもよい。
【0015】
図1に示すように、本実施形態に係る安全装置100は、入力装置2、演算装置3a〜演算装置3d、出力装置4を備えている。また、安全装置100は、アクチュエータ5に接続されている。
アクチュエータ5は、例えば、発電用のガスタービンの燃料供給を強制停止する弁である。また、安全装置100には、センサ1が取り付けられている。アクチュエータ5は、安全装置100が出力する指令値に基づき動作する。
センサ1は、熱量や流量などのアナログ値を検出する。また、センサ1は、アクチュエータ5に取り付けられている不図示の各種スイッチの論理状態などのデジタル値を検出する。センサ1は、アナログ値を検出した結果を示すアナログ値の検出値と、デジタル値を検出した結果を示すデジタル値の検出値とを、安全装置100に出力する。
【0016】
安全装置100の入力装置2は、センサ1が出力するアナログ値の検出値とデジタル値の検出値とを、演算装置3a〜演算装置3dに出力する。
演算装置3aは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
演算装置3bは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
演算装置3cは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
演算装置3dは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
出力装置4は、演算装置3a〜演算装置3dが出力する演算結果に対して、後述するように多数決処理を行い、多数決結果に基づき選ばれた演算結果を指令値としてアクチュエータ5に出力する。
以下、演算装置3a〜演算装置3dを総称して「演算装置3」と称する。
【0017】
図2は、本実施形態に係る演算装置の構成図である。図2に示すように、演算装置3は、振分部31、第1演算部32、第2演算部33、自己診断部34、出力制御部35を備えている。また、第1演算部32は、第1安全機能演算部101、第1安全機能演算検証部102を備えている。また、第2演算部33は、第2安全機能演算部111、第2安全機能演算検証部112を備えている。また、第1演算部32と第2演算部33は、例えば、1つのCPU(Central Processing Unit)が有する論理演算装置ALU(Arithmetic and Logic Unit)と浮動小数点演算装置FPU(Floating Point number processing Unit)で実行される。
【0018】
振分部31は、入力装置2が出力するアナログ値の検出値とデジタル値の検出値を、アナログ値の検出値inaとデジタル値の検出値ingとに振り分ける。振分部31は、デジタル値の検出値ingを、第1演算部32の第1安全機能演算部101と、第2演算部33の第2安全機能演算検証部112とに出力する。振分部31は、アナログ値の検出値inaを、第1演算部32の第1安全機能演算検証部102と、第2演算部33の第2安全機能演算部111とに出力する。
【0019】
第1演算部32は、例えば、論理演算装置ALU(Arithmetic and Logic Unit)で実行される。第1演算部32は、例えばソフトウェアの切換により、第1安全機能演算部101と第1安全機能演算検証部102とを実現する。
第1安全機能演算部101は、振分部31が出力するデジタル値の検出値ingを用いて、アクチュエータ5の制御量である出力値を、論理演算により演算し、演算結果out1を第2安全機能演算検証部112と出力制御部35とに出力する。
第1安全機能演算検証部102は、振分部31が出力するアナログ値の検出値inaを、公知の整数演算によるエミュレーションにより、アクチュエータ5の制御量である出力値を演算する。第1安全機能演算検証部102は、この演算結果が、第2安全機能演算部111による演算結果out2と一致するか否かを判定する。第1安全機能演算検証部102は、判定の結果、第1安全機能演算検証部102による演算結果が、第2安全機能演算部111による演算結果out2と一致する場合、演算結果が正常であることを示す情報を出力制御部35に出力する。第1安全機能演算検証部102は、判定の結果、第1安全機能演算検証部102による演算結果が、第2安全機能演算部111による演算結果out2と一致しない場合、演算結果が異常であることを示す情報を出力制御部35に出力する。
なお、第1の演算方式とは、デジタル値の論理演算であり、第2の演算方式とは、整数演算によるエミュレーションにより演算することである。
【0020】
なお、第1安全機能演算検証部102が行う整数演算によるエミュレーションは、例えば、第1演算部32にアセンブラコードでライブラリに実装されているソフトウェアによるエミュレーションや、マイクロコードでALUに存在しない操作をエミュレーションすることで、整数の除算や浮動小数点の処理を行う。あるいは、第1演算部32は、不図示の除算器や浮動小数点ユニットのような別のハードウェア部品や、コプロセッサなどを備えることで、整数の除算や浮動小数点の処理を行う。
【0021】
第2演算部33は、例えば、浮動小数点演算装置FPU(Floating Point number processing Unit)で実行される。第2演算部33は、例えばソフトウェアの切換により、第2安全機能演算部111と第2安全機能演算検証部112とを実現する。
第2安全機能演算部111は、振分部31が出力するアナログ値の検出値inaを用いて、アクチュエータ5の制御量である出力値を、浮動小数点演算により演算し、演算結果out2を第1安全機能演算検証部102と出力制御部35とに出力する。
第2安全機能演算検証部112は、振分部31が出力するデジタル値の検出値ingを、後述するように論理演算をアナログ演算で模擬し、アクチュエータ5の制御量である出力値を演算する。第2安全機能演算検証部112は、この演算結果が、第1安全機能演算部101による演算結果out1と一致するか否かを判定する。第2安全機能演算検証部112は、判定の結果、第2安全機能演算検証部112による演算結果が、第1安全機能演算部101による演算結果out1と一致する場合、演算結果が正常であることを示す情報を出力制御部35に出力する。第2安全機能演算検証部112は、判定の結果、第1安全機能演算検証部112による演算結果が、第1安全機能演算部101による演算結果out1と一致しない場合、演算結果が異常であることを示す情報を出力制御部35に出力する。
なお、第1の演算方式とは、アナログ値の浮動小数点演算であり、第2の演算方式とは、論理演算をアナログ演算で模擬する演算である。
【0022】
自己診断部34は、演算装置3の健全性を診断し、診断結果を出力制御部35に出力する。自己診断部34は、例えば、演算装置3に、不図示の電源供給装置から供給された電源電圧の電圧値が、所定の値の範囲であるか否かを判定する。自己診断部34は、電圧値が所定の範囲の場合を正常と判定し、電圧値が所定の値の範囲外の場合を異常と判定し、判定結果を出力制御部35に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する情報が、演算結果が正常であることを示す情報である場合、第2安全機能演算部111が出力するアナログ値の演算結果を出力装置4に出力する。出力制御部35は、第2安全機能演算検証部112が出力する情報が、演算結果が正常であることを示す情報である場合、第1安全機能演算部101が出力するデジタル値の演算結果を出力装置4に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する情報が、演算結果が異常であることを示す情報である場合、第2安全機能演算部111が出力するアナログ値の演算結果を出力装置4に出力しない。出力制御部35は、第2安全機能演算検証部112が出力する情報が、演算結果が異常であることを示す情報である場合、第1安全機能演算部101が出力するデジタル値の演算結果を出力装置4に出力しない。
【0023】
図3は、本実施形態に係る演算装置のデータの例を説明する図である。図3において、各列は、演算装置3毎の入力値(in)、振分部31の出力(アナログ値の検出値(ina)、およびデジタル値の検出値(ing))、第1安全機能演算部101の出力(out1;論理演算結果1〜4)、第2安全機能演算部111の出力(out2;アナログ演算結果1〜4)である。各行は、演算装置3a〜3d毎のデータである。このように、演算装置3a〜3dには、同一の入力値(in)が入力される。そして、演算装置3a〜3dの振分部31が、入力値(in)を振り分け、デジタル値の検出値(ing)を各々の第1安全機能演算部101に出力し、アナログ値の検出値(ina)を各々の第2安全機能演算部111に出力している。そして、演算装置3a〜3dの各第1安全機能演算部101が、各々、論理演算結果1〜4(out1)を出力している。また、演算装置3a〜3dの各第2安全機能演算部111が、各々、アナログ演算結果1〜4(out2)を出力している。
【0024】
図4は、本実施形態に係る第1演算部32と第2演算部33が行う演算を説明する図である。図4に示すように、第1演算部32の第1安全機能演算部101は、デジタル値の検出値に対して論理演算を行う。この演算結果を検証するため、第2演算部33の第2安全機能検証部112は、デジタル値の検出値に対して論理演算をアナログ演算で模擬した演算を行う。
また、第2演算部33の第2安全機能演算部111は、アナログ値の検出値に対してアナログ演算(浮動小数点演算)を行う。この演算結果を検証するために、第1演算部32の第1安全機能検証部102は、アナログ値の検出値に対して整数演算によるエミュレーションを行う。
【0025】
図5は、演算装置が行う演算の概略の一例を説明する図である。
図5に示すように、演算装置3には、入力装置2が出力するデジタル値の検出値DIN1151、およびDIN2152、アナログ値の検出値AIN3153が入力されている。図5において、符号161、162、および163が演算要素である。符号161は、論理和の論理演算を行う演算要素であり、符号163は、論理積の論理演算を行う演算要素である。また、符号162は、入力値が所定の値を超えたときにHレベル(真または“1”ともいう)の信号を出力する関数の演算を行う演算要素である。このように、演算装置3は、予め演算要素(加算、減算、除算、リミッタ、折れ線関数など)を関数化して記憶している。そして、図5に示すように、演算要素161の出力を演算要素163の入力に矢印181で接続し、演算要素162の出力を演算要素163の入力に矢印182で接続して、ロジックを構成している。演算装置3は、図5に示したような構成図(データフローともいう)から、論理演算を行うプログラムに変換したものを実行する。
【0026】
図5において、例えば、デジタル値の検出値DIN1151かDIN2152のどちらかがHレベル(真または“1”ともいう)の場合、演算要素161は、Hレベルを演算要素163に出力する。そして、アナログ値のAIN3153が所定の値を超えた場合、演算要素162はHレベルを演算要素163に出力する。そして、演算要素163は、演算要素161の出力と、演算要素162の出力との論理積を演算して、演算結果DOUT1171を算出する。
また、図5に示したのは、演算装置3が行う演算を説明するための概略である。実際の演算は、例えば、アナログ値の検出値AIN3153が熱量の場合、演算要素163は、このアナログ値の検出値AIN3153が所定の熱量を超えた場合に、熱量を下げるために、アクチュエータ5に熱量を下げる指示を示す情報(例えば、燃料供給を強制停止する弁を閉じる)を算出して、アクチュエータ5に指令値として出力する。
また、例えば、デジタル値の検出値DIN1151かDIN2152が、アクチュエータ5が備える熱量を設定するためのスイッチの状態を示す検出値の場合、演算装置3は、上記のアナログ値の検出値AIN3153が所定の熱量を超えた場合に、熱量を下げるために、アクチュエータ5に熱量を下げる指示を示す情報を算出する。そして、演算装置3は、アクチュエータ5に熱量を設定するためのスイッチの状態を指令値として出力する。
以下の説明では、演算装置3の動作の説明を簡略化するために、演算装置3に入力されたデジタル値の検出値、アナログ値の検出値を、各々、別々に演算する例を説明する。
【0027】
図6は、本実施形態に係る演算装置が行う演算の一例を説明する図である。
図6において、各行はALUを使った論理演算の例とFPUを使った浮動小数点演算による論理演算の例との対応関係であり、各列は、ALUを使った論理演算の例と、FPUを使った浮動小数点演算部による論理演算の例である。図6に示すように、論理演算で用いる値は、真と偽である。また、浮動小数点演算による論理演算で用いる値は、1.0と0.0である。
論理積Y=(X1)AND(X2)は、浮動小数点演算で行う場合、Y=(X1)×(X2)の演算を行う。
論理和Y=(X1)OR(X2)は、浮動小数点演算で行う場合、Y=float((X1)+(X2))!=0.0)の演算を行う。なお、演算子「float」は、4バイト浮動小数点であり、演算子「!=」は、比較演算子で異なる場合である。すなわち、X1とX2の和が0.0と異なる場合、Y=1.0であり、X1とX2の和が0の場合、Y=0.0である。
否定Y=X〜は、浮動小数点演算で行う場合、Y=1.0−Xの演算を行う。
排他的論理和Y=(X1)^(X2)は、浮動小数点演算で行う場合、Y=fabs(X1−X2)の演算を行う。演算子「fabs」は、絶対値を取る演算子である。すなわち、X1とX2との差の絶対値を演算する。
なお、図6には、論理演算を浮動小数点演算で行う一例を示したが、他にも公知の浮動小数点演算を用いることで、否定論理積等の各種の論理演算を浮動小数点演算で実現することができる。
【0028】
図7は、本実施形態に係る安全装置の処理手順のフローチャートである。
まず、安全装置100の演算装置3には、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とが入力される。
演算装置3の振分部31は、入力装置2が出力するアナログ値の検出値とデジタル値の検出値を、アナログ値の検出値inaとデジタル値の検出値ingとに分ける(ステップS1)。
振分部31は、デジタル値の検出値ingを、第1演算部32の第1安全機能演算部101と、第2演算部33の第2安全機能演算検証部112とに出力する。振分部31は、アナログ値の検出値inaを、第1演算部32の第1安全機能演算検証部102と、第2演算部33の第2安全機能演算部111とに出力する。
【0029】
次に、第1安全機能演算部101は、振分部31が出力するデジタル値の検出値ingを用いて、アクチュエータ5の制御量である出力値を演算し、演算結果out1を第2安全機能演算検証部112と出力制御部35に出力する(ステップ2)。すなわち、第1安全機能演算部101は、デジタル値の検出値ingに対して論理演算を、ALUで実行する。
第2安全機能演算検証部112は、振分部31が出力するデジタル値の検出値ingを、論理演算をアナログ演算で模擬により、アクチュエータ5の制御量である出力値を演算する(ステップS3)。すなわち、第2安全機能演算検証部112は、第1安全機能演算部101の演算結果を検証するために、論理演算をアナログ演算で模擬し、FPUで実行する。
【0030】
第2安全機能演算検証部112は、第2安全機能演算検証部112による演算結果が、第1安全機能演算部101による演算結果out1と一致するか否かを判定する(ステップS4)。
判定の結果、第2安全機能演算検証部112による演算結果が第1安全機能演算部101演算結果out1と一致する場合(ステップS4 Yes)、第2安全機能演算検証部112は、第1安全機能演算部101による演算結果が正常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第2安全機能演算検証部112が出力する演算結果が正常であることを示す情報に基づき、第1安全機能演算部101が出力する演算結果を出力装置4に出力する(ステップS5)。
判定の結果、第2安全機能演算検証部112による演算結果が第1安全機能演算部101による演算結果out1と一致しない場合(ステップS4 No)、第2安全機能演算検証部112は、演算結果が異常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第2安全機能演算検証部112が出力する演算結果が異常であることを示す情報に基づき、第1安全機能演算部101が出力する演算結果を出力装置4に出力しない(ステップS6)。
【0031】
次に、第2安全機能演算部111は、振分部31が出力するアナログ値の検出値inaを用いて、アクチュエータ5の制御量である出力値を演算し、演算結果out2を第1安全機能演算検証部102と出力制御部35に出力する(ステップS7)。すなわち、第2安全機能演算部111は、アナログ値の検出値inaに対してアナログ演算を、FPUで実行する。
第1安全機能演算検証部102は、振分部31が出力するアナログ値の検出値inaを、整数演算によるエミュレーションにより演算を行い、アクチュエータ5の制御量である出力値を演算する(ステップS8)。すなわち、第1安全機能演算検証部102は、第2安全機能演算部111の演算結果を検証するために、整数演算をエミュレートして、ALUで実行する。
【0032】
第1安全機能演算検証部102は、第1安全機能演算検証部102による演算結果が、2安全機能演算部111による演算結果out2と一致するか否かを判定する(ステップS9)。
判定の結果、第1安全機能演算検証部102による演算結果が第2安全機能演算部111による演算結果out2と一致する場合(ステップS9 Yes)、第1安全機能演算検証部102は、演算結果が正常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する演算結果が正常であることを示す情報に基づき、第2安全機能演算部111が出力する演算結果を出力装置4に出力する(ステップS10)。
判定の結果、第2安全機能演算部111による演算結果が第1安全機能演算検証部102による演算結果out2と一致しない場合(ステップS9 No)、第1安全機能演算検証部102は、演算結果が異常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する演算結果が異常であることを示す情報に基づき、第2安全機能演算部111が出力する演算結果を出力装置4に出力しない(ステップS11)。
【0033】
次に、出力装置4には、演算装置3a〜演算装置3dが、ステップS1〜ステップS11により演算した演算結果が入力される。出力装置4は、入力された演算結果に対して多数決処理を行い、多数決処理に基づき指令値をアクチュエータ5に出力する(ステップS12)。
【0034】
なお、本実施形態では、演算装置3の出力制御部35は、第2安全機能演算検証部112が出力する演算結果が異常の場合、第1安全機能演算部101が出力する演算結果を出力装置4に出力しない例を説明した。出力制御部35は、第2安全機能演算検証部112が出力する演算結果が異常の場合、演算装置3に異常があるため、出力装置4に、演算装置3に異常があることを示す情報を送るようにしてもよい。同様に、出力制御部35は、第1安全機能演算検証部102が出力する演算結果が異常の場合、演算装置3に異常があるため、出力装置4に、演算装置3に異常があることを示す情報を送るようにしてもよい。
出力装置4は、演算装置3が出力する異常があることを示す情報が入力された場合、例えば、不図示の表示部に異常が発生している演算装置3の固有の番号等を表示して、安全装置100の使用者に知らせるようにしてもよい。この場合、演算装置3内で、異なるハードウェア(ALUとFPU)と異なるソフトウェア(異なる演算方式)で2重に演算結果を確認しているため、演算装置3の異常を検出することもできる効果がある。
なお、異なる演算方式とは、例えばデジタル値に対する論理演算とアナログ値に対する浮動少数点演算であり、または、デジタル値に対する浮動小数点演算による論理演算とアナログ値に対する整数演算のエミュレーションによる演算などである。
【0035】
次に、出力装置4が行う多数決処理について説明する。
演算装置3a〜演算装置3dから、4つの演算結果が入力された場合、出力装置4は、4つの演算結果で多数決を行い、例えば、4つのうち2つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ5に出力する。なお、安全側を制御する出力値とは、制御対象を安全な状態に制御する出力で、予め設定しておく。
演算装置3a〜演算装置3dから、3つの演算結果が入力された場合、すなわち、1つの演算結果が異常のため演算装置3により出力されなかった場合、出力装置4は、3つの演算結果で多数決を行い、例えば、3つのうち2つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ5に出力する。
演算装置3a〜演算装置3dから、2つの演算結果が入力された場合、すなわち、2つの演算結果が異常のため演算装置3により出力されなかった場合、出力装置4は、2つの演算結果のうち1つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ5に出力する。安全側を制御する出力値が1つ以上なかった場合、予め設定してある所定の出力順序に従って、入力された演算結果のうちの一方の演算結果を指令値としてアクチュエータ5に出力する。
演算装置3a〜演算装置3dから、1つの演算結果が入力された場合、すなわち、3つの演算結果が以上のため演算装置3により出力されなかった場合、出力装置4は、入力された演算結果を指令値としてアクチュエータ5に出力する。
演算装置3a〜演算装置3dから、1つも演算結果が入力されない場合、すなわち、4つの演算結果が異常のため演算装置により出力されなかった場合、出力装置4は、予め設定されている安全動作のための制御値を指令値としてアクチュエータ5に出力する。
【0036】
なお、上述した多数決処理は、出力装置5が、アナログの検出値に対する演算値、デジタル値に対する検出値に対する演算値のそれぞれに行う。
また、図7に示したフローチャートにおいて、例えば、ステップS2とステップS7の演算を、第1安全機能演算部101と第2安全機能演算部111が並行して行うようにしてもよい。また、ステップS3、S4とステップS8〜S9を、第1安全機能演算検証部102と第2安全機能演算検証部112が並行して行うようにしてもよい。
また、図1の構成例では、演算装置3を多重にする例を示したが、本実施形態の安全装置100を用いる場合、1つの演算装置3内で異なるハードウェアとソフトウェアで確認しているため、多重化せずに演算装置3は1つでもよい。
【0037】
以上のように、本実施形態の安全装置100は、1つのCPU(演算装置3)のALU(第1演算部32)とFPU(第2演算部33)を用いて、入力値からおのおの異なるハードウェアと異なる演算方式を用いて演算している。この結果、演算の信頼性を上げる効果もあり、また、CPU内の故障も検知することができる。また、本実施形態の安全装置100は、第1演算部32が、論理演算を行い、第2演算部33が、浮動小数点演算により異なる演算方式を使って演算しているため、ソフトウェアにも多様性を持たせることができる。この結果、コモンモード故障の可能性を低くすることができる。
【0038】
なお、本実施形態では、演算装置3が、1つのCPUが備えるALUとFPUを例として説明したが、デジタル信号プロセッサDSPを備えるCPUであれば、DSPによりALUとFPUを構成するようにしてもよい。または、1つのデジタル信号プロセッサDSPにより、ALU(第1演算部32)とFPU(第2演算部33)を構成するようにしてもよい。
【0039】
[第2実施形態]
図8は、本実施形態に係る演算装置の構成の一例を説明する図である。図8に示すように、演算装置300は、第1演算部32a、第2演算部33aを備えている。また、図8には示していないが、第1実施形態の図2と同様に、演算装置300は、振分部31、自己診断部34、出力制御部35を備えている。また、第2演算部33aは、入力データ部201、演算ブロック(1)202、演算部ブロック(j)203、演算部ブロック(m)204、出力データ部205を備えている。第1演算部32aは、逆演算用入力データ部211、逆演算ブロック(1)212、逆演算部ブロック(j)213、逆演算部ブロック(m)214、逆演算出力部215を備えている。
【0040】
まず、演算装置300で行う処理の概要を説明する。また、以下の説明では、入力値がアナログ値の検出値のみであるとして説明を行う。
演算装置300の振分部31は、入力装置2(図1)が出力するアナログ値の検出値を第2演算部33aに出力する。第2演算部33aでは、入力されたアナログ値の検出値を、順次、演算ブロック(1)202〜演算部ブロック(m)204により演算する。また、第2演算部33aは、演算結果と演算の途中で使用した要素を、後述するように第1演算部32aの逆演算ブロック(1)212〜逆演算部ブロック(m)214に出力する。第1演算部32aは、入力された演算結果と演算の途中で使用した要素を用いて、逆演算ブロック(1)211〜逆演算部ブロック(m)214により逆演算を行い、演算結果を検証する。また、第1実施形態と同様に、第1演算部32aと第2演算部33aは、例えば、1つのCPU(演算装置3)が備えるALUとFPUである。
【0041】
第2演算部33aの入力データ部201は、振分部31が出力するアナログ値の検出値を演算ブロック(1)202に出力する。また、入力データ部201は、入力されたアナログ値の検出値を記憶する。
演算部ブロック(1)202〜演算部ブロック(m)204は、振分部31が出力するアナログ値の検出値に基づいて、安全機能の出力を生成するのに必要な演算を行うために構成されている。
演算部ブロック(1)202は、入力データ部201が出力するアナログ値の検出値を用いて、所定の関数F1により演算を行う。演算部ブロック(1)202は、演算結果(Y1n)、を演算部ブロック(j)203に出力する。さらに演算部ブロック(1)202は、入力されたアナログ値の検出値in(X1n)、演算結果(Y1n)、演算の途中で使用した要素(W1n、V1n)を逆演算ブロック(1)212に出力する。また、演算部ブロック(1)202は、前回の演算の途中で使用した要素(W1(n−1))を記憶している。なお、添え字nは、今回の演算による値を表し、n−1は前回の演算による値表している。
【0042】
演算部ブロック(j)203は、演算部ブロック(1)202が出力する演算結果(Y1n(=Xjn))を用いて、所定の関数F2により演算を行う。演算部ブロック(j)203は、演算結果(Yjn)、を演算部ブロック(m)203に出力する。さらに演算部ブロック(j)203は、演算部ブロック(1)202が出力する演算結果(Y1n(=Xjn))、演算結果(Yjn)、演算の途中で使用した要素(Wjn、Vjn)を逆演算ブロック(j)213に出力する。また、演算部ブロック(j)203は、前回の演算の途中で使用した要素(Wj(n−1))を記憶している。
【0043】
演算部ブロック(m)204は、演算部ブロック(j)203が出力する演算結果(Yjn(=Xmn))を用いて、所定の関数F3により演算を行う。演算部ブロック(m)204は、演算結果(Ymn)、を出力データ部205に出力する。さらに演算部ブロック(m)204は、演算部ブロック(j)203が出力する演算結果(Yjn(=Xmn))、演算結果(Ymn)、演算の途中で使用した要素(Wmn、Vmn)を逆演算ブロック(m)214に出力する。また、演算部ブロック(m)204は、前回の演算の途中で使用した要素(Wm(n−1))を記憶している。
【0044】
出力データ部205は、演算部ブロック(m)204が出力する演算結果が入力されたことに応じて、演算部ブロック(1)201〜演算部ブロック(m)204の演算が終了したと判断する。また、 出力データ部205は、演算が終了したことを示す情報を逆演算出力部215に出力する。
【0045】
逆演算出力部215は、出力データ部205が出力する演算が終了したことを示す情報に基づき、逆演算ブロック(m)214に逆演算を開始する情報を出力する。
逆演算部ブロック(1)212〜演算部ブロック(m)214は、演算部ブロック(1)201〜演算部ブロック(m)204が出力するアナログ値の検出値in(X1n)、演算結果(Y1n(=Xjn))、(Yjn(=Xmn))、および(Ymn)、演算の途中で用いた要素(W1n、V1n)、(Wjn、Vjn)および(Wmn、Vmn)に基づいて、逆演算を行うために構成されている。
【0046】
逆演算部ブロック(m)214は、逆演算出力部215が出力する逆演算を開始する情報に基づき、演算部ブロック(m)204が出力する演算結果(Yjn(=Xmn))、演算結果Ymn、演算の途中で使用した要素(Wmn、Vmn)を用いて、所定の関数F3−1により逆演算を行う。逆演算部ブロック(m)214は、逆演算を開始する情報を逆演算部ブロック(j)213に出力する。
また、逆演算部ブロック(m)214は、逆演算結果Xmn’が、演算結果Xjnと一致するか否かを判定する(不一致チェックともいう)。判定の結果、逆演算結果Xmn’と演算結果Xjnとが一致した場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が正常であると判定する。判定の結果、逆演算結果Xmn’と演算結果Xjnとが一致しない場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が異常であると判定する。逆演算部ブロック(m)214は、判定結果を、出力制御部35に出力する。
また、逆演算部ブロック(m)214は、逆演算の途中で使用した要素Wm(n−1)’が、記憶されている前回の周期の逆演算の途中で使用した要素Wm(n−1)と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Wm(n−1)’と前回の周期の逆演算の途中で使用した要素Wm(n−1)とが一致した場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が正常であると判定する。また、逆演算部ブロック(m)214は、入力された演算の途中で使用した要素Wmnを次回の周期の逆演算で使用できるようにWm(n−1)’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Wm(n−1)’と逆演算の途中で使用した要素Wm(n−1)とが一致しない場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が異常であると判定する。逆演算部ブロック(m)214は、判定結果を、出力制御部35に出力する。
【0047】
逆演算部ブロック(j)213は、逆演算部ブロック(m)214が出力する逆演算を開始する情報に基づき、演算部ブロック(j)203が出力する演算結果X1、演算結果Xj、演算の途中で使用した要素(Wjn、Vjn)を用いて、所定の関数F2−1により逆演算を行う。逆演算部ブロック(j)213は、逆演算を開始する情報を逆演算部ブロック(1)212に出力する。
また、逆演算部ブロック(j)213は、逆演算結果Xjn’が、演算結果Xjnと一致するか否かを判定する。判定の結果、逆演算結果Xjn’と演算結果Xjnとが一致した場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が正常であると判定する。判定の結果、逆演算結果Xjn’と演算結果Xjnとが一致しない場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が異常であると判定する。逆演算部ブロック(j)213は、判定結果を、出力制御部35に出力する。
また、逆演算部ブロック(j)213は、逆演算の途中で使用した要素Wj(n−1)’が、前回の周期の逆演算の途中で使用した要素Wj(n−1)と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Wj(n−1)’と前回の周期の逆演算の途中で使用した要素Wj(n−1)とが一致した場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が正常であると判定する。また、逆演算部ブロック(j)213は、入力された演算の途中で使用した要素Wjnを次回の周期の逆演算で使用できるようにWj(n−1)’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Wj(n−1)’と前回の周期の逆演算の途中で使用した要素Wj(n−1)とが一致しない場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が異常であると判定する。逆演算部ブロック(j)213は、判定結果を、出力制御部35に出力する。
【0048】
逆演算部ブロック(1)212は、逆演算部ブロック(j)213が出力する逆演算を開始する情報に基づき、演算部ブロック(1)201が出力するアナログ値の検出値in、演算結果X1、演算の途中で使用した要素(W1、V1)を用いて、所定の関数F1−1により逆演算を行う。逆演算部ブロック(1)212は、逆演算が終了したことを示す情報を逆縁算用入力データ部211に出力する。
また、逆演算部ブロック(1)212は、逆演算結果X1n’が、アナログ値の検出値inと一致するか否かを判定する。判定の結果、逆演算結果X1n’とアナログ値の検出値inとが一致した場合、逆演算部ブロック(1)213は、演算部ブロック(1)202の演算結果が正常であると判定する。判定の結果、逆演算結果X1n’とアナログ値の検出値inとが一致しない場合、逆演算部ブロック(1)212は、演算部ブロック(1)202の演算結果が異常であると判定する。逆演算部ブロック(1)212は、判定結果を、出力制御部35に出力する。
また、逆演算部ブロック(1)212は、逆演算の途中で使用した要素W1(n−1)’が、前回の周期の逆演算の途中で使用した要素W1(n−1)と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素W1(n−1)’と前回の周期の逆演算の途中で使用した要素W1(n−1)とが一致した場合、逆演算部ブロック(1)212は、演算部ブロック(1)202の演算結果が正常であると判定する。また、逆演算部ブロック(1)212は、入力された演算の途中で使用した要素W1nを次回の周期の逆演算で使用できるようにW1(n−1)’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素W1n’と前回の周期の逆演算の途中で使用した要素W1(n−1)とが一致しない場合、逆演算部ブロック(1)212は、演算部ブロック(1)202の演算結果が異常であると判定する。逆演算部ブロック(1)212は、判定結果を、出力制御部35に出力する。
【0049】
逆演算用入力データ部211は、演算部ブロック(1)212が出力する逆演算が終了したことを示す情報を、出力制御部35に出力する。
出力制御部35は、逆演算用入力データ部211が出力する逆演算が終了したことを示す情報、逆演算部ブロック(1)212〜逆演算部ブロック(m)214が出力する判定結果に基づき、演算部ブロック(1)202〜演算部ブロック(m)204の演算が正常である場合、演算部ブロック(m)204の演算結果を指令値として出力装置4に出力する。
【0050】
なお、演算部ブロック(1)202〜演算部ブロック(m)204で用いる所定の関数F1〜F3、逆演算部ブロック(1)212〜逆演算部ブロック(m)214で用いる所定の関数F1−1〜F3−1は、予め入力値に基づいて、安全装置100の設計者が予め設定しておく。
【0051】
なお、本実施形態では、演算部ブロック(1)202〜演算部ブロック(m)204の全ての演算が終了した後、逆演算部ブロック(1)212〜逆演算部ブロック(m)214が逆演算を行う例を説明した。例えば、各演算部ブロック(1)202の演算が終了した後、逆演算部ブロック(1)212が逆演算を行うようにしてもよい。
【0052】
図9は、本実施形態に係る演算ブロックと逆演算ブロックの入出力データの一例を説明する図である。図10は、本実施形態に係る逆演算ブロックの入出力データと保持されているデータの一例を説明する図である。
図9に示すように、演算ブロック(1)202〜演算ブロック(m)204は、それぞれXnが入力され、それぞれYn、Wn、およびVnを出力する。
図10に示すように、逆演算ブロック(1)212〜逆演算ブロック(m)214は、それぞれYn、Wn、Vn、およびXnが入力され、Xn’を出力する。また、逆演算ブロック(1)212〜逆演算ブロック(m)214は、それぞれ前回の周期のW(n−1)を保持している。
【0053】
次に、演算ブロック(1)202〜演算ブロック(m)204、逆演算ブロック(1)202〜逆演算ブロック(m)204が行う処理について、図11〜図13を用いて説明する。図11は、本実施形態に係る演算ブロックと逆演算ブロックの構成の一例を説明する図である。図12は、本実施形態に係る逆演算ブロックの処理手順を説明する図である。図13は、本実施形態に係る逆演算ブロックの処理手順のフローチャートである。
【0054】
図11(a)と図11(b)は、図8における演算ブロックの破線で囲んだ220の演算ブロック(j)203と逆演算ブロック(j)213の構成の一例である。
図11(a)に示すように、演算ブロック(j)203は、Xjn、Wj(n−1)を入力値として用い、Yjn、WjnおよびVjnを出力値として用いて演算を行う。図11(b)に示すように、逆演算ブロック(j)213は、Yjn、WjnおよびVjnを入力値として用い、Xjn’、Wj(n−1)’を出力値として用いて逆演算を行う。
図11(a)と図11(b)において、添え字nは、今回の周期のデータ、添え字n−1は、前回の周期のデータである。また、Xjnは、入力列、Yjnは、出力列である。さらに、Wjnは、中間データ列(出力を計算するまでの途中の主要な演算値)、Vjnは、Xjnと Wj(n−1)を一意的に求めるために必要な中間データである。Xjn’は、Xjnの逆演算値、Wj(n−1)’は、Wj(n−1)の逆演算値であり、Wj(n−1)は、逆縁算用に前回の周期のWjnをコピーしたデータ列である。
図11(a)に示すように、演算ブロック(j)203は、入力値のXjnとWj(n−1)を所定の関数F2を用いて、Yjn、Wjn、Vjnを演算する。
図11(b)に示すように、逆演算ブロック(j)213は、入力値のYjnとWjnおよびVjnを所定の関数F2−1を用いて、Xjn’Wj(n−1)’を演算する。
【0055】
次に、逆演算ブロック(j)212が行う逆演算の手順を詳細に説明する。
まず、逆演算ブロック(j)212は、演算ブロック(j)202の演算結果Yjnを入力値としてコピーする(ステップS101、図12のC1、C2)。
次に、逆演算ブロック(j)212は、演算ブロック(j)202の演算の途中で使用した要素WjnとVjnを、入力値としてコピーする(ステップS102、図12のC3)。
次に、逆演算ブロック(j)212は、演算ブロック(j)202への入力値であるXjnを、出力値としてコピーする(ステップS103、図12のC4)。
次に、逆演算ブロック(j)212は、Xjn’とWj(n−1)’を、コピーした入力値Yjn、Wjn、およびVjnを用いて、所定の関数F2−1により逆演算する(ステップS104、図13のC5)。
【0056】
次に、逆演算ブロック(j)212は、逆演算により求めたXjn’と、コピーしたXjnとが一致するか否かを判定する(ステップS105)。
判定の結果、逆演算により求めたXjn’と、コピーしたXjnとが一致する場合(ステップS105 Yes)、ステップS107に進む。判定の結果、逆演算により求めたXjn’と、コピーしたXjnとが一致しない場合(ステップS105 No)、ステップS106に進む。
【0057】
次に、逆演算ブロック(j)212は、逆演算の途中で使用した要素Wj(n−1)’と、コピーしたWj(n−1)とが一致するか否かを判定する(ステップS107、図12のC6)。
判定の結果、逆演算により求めたWj(n−1)’と、コピーしたWj(n−1)とが一致する場合(ステップS107 Yes)、ステップS108に進む。判定の結果、逆演算により求めたWjn’と、コピーしたWj(n−1)とが一致しない場合(ステップS107 No)、ステップS106に進む。
【0058】
逆演算ブロック(j)212は、演算結果、または演算の途中で使用した要素が一致しなかったため、異常と判定し、判定結果を出力の制御装部35に出力する(ステップS106)。
【0059】
逆演算ブロック(j)212は、演算結果と、演算の途中で使用した要素とが一致したため、正常と判定し、判定結果を出力の制御装部35に出力する。また、逆演算ブロック(j)212は、コピーしたWjnを次回の周期の逆演算チェックで使用できるようにWj(n−1)’に上書きして保存する(ステップS108、図12のC7)。
【0060】
以上のように、本実施形態では、第2演算部33が算出した演算結果に対し、第1演算部32が第2演算部33で算出された演算結果と演算途中で使用された要素を用いて逆演算を行う。そして、第1演算部32は、逆演算した演算結果が、第2演算部33(FPU)が算出した演算結果の入力値と一致するか判定する。さらに、第1演算部32(ALU)は、逆演算の途中で使用した要素が前回の周期で使用した要素と一致するかも判定する。この結果、異なるハードウェアかつ異なるソフトウェアにより、演算結果が正しいかをチェックすることができるので、安価にコモンモード故障の可能性を低くすることができる。
【0061】
なお、本実施形態では、演算ブロック(1)202〜演算ブロック(m)204、逆演算ブロック(1)212〜逆演算ブロック(m)214のように、3個ずつ用いる例を説明したが、演算ブロックおよび逆演算ブロックの数はこれに限らず、検出される検出値や指令値に基づいて決めるようにしてもよい。
また、本実施形態の構成に実施形態1の構成を加えるようにしてもよい。この場合、第2演算部33が算出した演算結果に対し、第1演算部32が逆演算と、順方向の演算を行うこととで、さらに信頼性を上げることができる。
また、本実施形態では、図8のように1つの演算装置3についてのみ用いる例を説明したが、図1と同様に、演算装置3を多重化してもよい。
【0062】
[第3実施形態]
第2実施形態では、アナログ値の検出値が演算装置3に入力された場合、第2演算部33aが演算した演算結果に対して、第1演算部32aが逆演算して判定する例を説明した。本実施形態では、デジタル値の検出値が演算装置3に入力された場合、第1演算部33aが演算した演算結果に対して、第2演算部33aが逆演算して判定する例を説明する。なお、第2演算部33aは、第1実施形態で説明したように、デジタル値を浮動小数点演算により論理演算することで行う。
【0063】
図14は、本実施形態に係る入力が1個の場合のデジタル値の演算と逆演算を説明する図である。図14(a)は、順方向の演算を説明する図であり、図14(b)は、逆演算を説明する図である。
図14(a)に示すように、入力が1個、出力が1個の場合、入力Xnに対して所定の関数Fにより出力Ynが演算できる。このため、図14(b)に示すように、出力Ynに、関数F−1を行うことで、Xn’が逆演算でき、逆演算したXn’とXnとを比較することで、演算が正常か否かを判定できる。このような演算として、例えば、NOT論理(否定)がある。
【0064】
図15は、本実施形態に係る入力が2個の場合のデジタル値の演算と逆演算を説明する図である。図15(a)は、順方向の演算を説明する図であり、図15(b)は、逆演算を説明する図である。
図15(a)に示すように、入力が2個、出力が1個の場合、入力X1とX2に対して所定の関数Fにより出力Ynが演算できる。このため、出力Ynのみでは、入力X1、X2を一意に求めることができないため、例えば、図15(b)に示すように、入力X2と、出力Ynを入力とし、所定の関数F−1により、X1’を演算し、演算したX1’と入力のX1とを比較することで演算が正常か否かを判定できる。このような演算として、例えば、AND論理(論理積)、OR論理(論理和)などがある。
【0065】
以上のように、本実施形態では、第1演算部32(ALU)が算出した演算結果に対し、第2演算部33(FPU)が第1演算部32で算出された演算結果と演算途中で使用された要素を用いて逆演算を行う。そして、第2演算部33(FPU)は、逆演算した演算結果が、第1演算部32(ALU)が算出した演算結果の入力値と一致するか判定する。さらに、第2演算部33(FPU)は、逆演算の途中で使用した要素が前回の周期で使用した要素と一致するかも判定する。この結果、異なるハードウェアかつ異なるソフトウェアにより、演算結果が正しいかをチェックすることができるので、安価にコモンモード故障の可能性を低くすることができる。
【0066】
また、本実施形態の構成に実施形態1の構成を加えるようにしてもよい。この場合、第1演算部32が算出した演算結果に対し、第2演算部33が逆演算と、順方向の演算を行うこととで、さらに信頼性を上げることができる。
また、本実施形態の構成に実施形態2の構成を加えるようにしてもよい。この場合、アナログ値の検出値に対してもデジタル値の検出値に対しても、異なるハードウェア、ソフトウェアで逆演算して比較しているため、コモンモード故障の可能性を低くすることができる。
また、本実施形態では、図8のように1つの演算装置3についてのみ用いる例を説明したが、図1と同様に、演算装置3を多重化してもよい。
【0067】
なお、本実施形態では、1つの演算装置3にALUとFPUを備え、第1演算部32の演算がALUで実行され、第2演算部33の演算がFPUで実行される例を説明したが、例えばRISC(Reduced Instruction Set Computer)プロセッサの場合、スーパースケーラによりFPUをALUと並列に動作させることができるため、本実施形態を実現することができる。また、1つのCPU内に複数の演算部を備える、例えばデュアル・コア・プロセッサを演算装置3に用いても、本実施形態と同様の効果を得ることができる。
【符号の説明】
【0068】
100・・・安全装置
2・・・入力装置
3、3a〜3d、300・・・演算装置
4・・・出力装置
31・・・振分部
32、32a・・・第1演算部
33、33a・・・第2演算部
34・・・自己診断部
35・・・出力制御部
101・・・第1安全機能演算部
102・・・第1安全機能演算検証部
111・・・第2安全機能演算部
112・・・第2安全機能演算検証部
201・・・入力データ部
202〜204・・・演算ブロック(1)〜演算部ブロック(m)
212〜214・・・逆演算ブロック(1)〜逆演算部ブロック(m)
205・・・出力データ部
211・・・逆演算用入力データ部
215・・・逆演算出力部
【技術分野】
【0001】
本発明は、安全装置、安全装置の演算方法に関する。
【背景技術】
【0002】
火力プラントなどにおいて、プラントの状態を監視し異常を検知してプラントを安全に停止させる安全装置として、電子式の安全装置が適用されている。プラントの安全装置には、高い信頼性が要求されるため、国際機能安全規格IEC61508などに、要求事項が規定されている。このため、プラントの利用者から、これらの安全規格を遵守するよう要求が増えてきている。
【0003】
電子式の安全装置では、その信頼性を高めるために、安全機能のロジックを演算する電子式の安全装置の演算装置(CPUボード上でソフトウェアを動作させて実現)の多重化が一般に使われている。非特許文献1では、演算装置単体を並列に有することで多重化し、自己診断および多重化した演算装置相互で演算結果を比較することで、演算装置の故障を検知する手段を設けている。これにより、非特許文献1に記載の安全装置(制御装置)では、安全機能が働くべきときに故障のために不動作となる確率を減らすようにしている。
【0004】
図16は、従来技術に係る安全装置の構成図である。図16に示すように、非特許文献2の安全装置900は、1つのシステム内で、安全機能が働くべきときに故障のために不動作となる確率を減らすように、同一の機能を異なる技術で構成している。異なる技術とは、例えば、図16に示すように、実行側の出力スイッチSWa1を半導体スイッチ、待機側の出力スイッチSWa2をメカニカルスイッチで構成している。また、非特許文献2に記載の発明も、図16に示したように演算装置(CPU)が並列に接続され、多重化されている。このように、非特許文献2の安全装置900は、ハードウェアの共通部をなくして、安全機能が働くべきときに故障のために不動作となる確率を減らすようにしている。
【0005】
一般に、多重化した各演算装置に同一ソフトウェアを搭載すると、コモンモード故障の要因となるため、高い信頼性を実現する上で妨げとなる問題点がある。コモンモード故障とは、共通のアプリケーションを有することにより、共通の故障要因を有することである。このため、特許文献1に記載の発明は、N個の多重化装置で、おのおの異なったソフトウェアを搭載して多様化を図ることでコモンモード故障を排除している。特許文献1に記載の発明は、機能を複数のソフトウェアによるモジュールで構成する場合に、各モジュールを1つ以上のバージョンのソフトウェアで作成する。そして、特許文献1に記載の発明は、モジュールの組合せを変えてN通りのバージョンのソフトウェアで実現している。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平6−34269号公報
【非特許文献】
【0007】
【非特許文献1】IEC 61508-6 ed1.0,Functional safety of electrical/electronic/programmable electronic safety-related systems - Part 6: Guidelines on the application of IEC 61508-2 and IEC 61508-3,International Electrotechnical Commission,2004年4月
【非特許文献2】安藤忠明、安藤進清、「安全計装システムとProSafeシリーズの診断機能」、横河技法 Vol.43 No.4 p.175−180、1999
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、特許文献1に記載の従来技術では、N個の異なったアルゴリズムやソフトウェアを開発することは、容易ではなくコスト的に過大になる問題点があった。また、非特許文献2に記載の安全装置では、多様性確保に異なるハードウェアを設けることが示されているが、CPU(演算部分)のハードウェア及びソフトウェアに対する多様性確保は示されていない。このため、非特許文献2の安全装置では、ハードウェアによるコモンモード故障を防ぐことができても、ソフトウェアによるコモンモード故障を防げない場合があるという問題点があった。
【0009】
本発明は、上記の問題点に鑑みてなされたものであって、安価にコモンモード故障を防ぐことができる安全装置、安全装置の演算方法を提供することを目的としている。
【課題を解決するための手段】
【0010】
上記目的を達成するため、本発明は、制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置であって、前記入力値を第1の演算方式で演算する第1演算部と、前記第1演算部が演算した第1演算結果と、前記入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部と、前記第2演算部の判定結果に基づき、前記第1演算結果と前記第2演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算結果を出力しない出力制御部と、を備え、前記第1演算部と前記第2演算部は、1つの中央演算処理装置が備える異なるハードウェアであることを特徴としている。
【発明の効果】
【0011】
本発明によれば、1つの中央演算装置が、第1演算部と第2演算部を備え、入力値を第1の演算方式で演算する第1演算部と、第1演算部が演算した第1演算結果と、入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部と、第2演算部の判定結果に基づき第1演算結果と第2演算結果とが一致するか否か判定し、出力を行うか否かを制御する出力制御部を備えるようにしたので、安価にコモンモード故障の可能性を低くすることができる安全装置を実現することができる。
【図面の簡単な説明】
【0012】
【図1】第1実施形態に係る安全装置の構成図である。
【図2】同実施形態に係る演算装置の構成図である。
【図3】同実施形態に係る演算装置のデータの例を説明する図である。
【図4】同実施形態に係る第1演算部と第2演算部が行う演算を説明する図である。
【図5】演算装置が行う演算の概略の一例を説明する図である。
【図6】同実施形態に係る演算装置が行う演算の一例を説明する図である。
【図7】同実施形態に係る安全装置の処理手順のフローチャートである。
【図8】第2実施形態に係る第2実施形態に係る演算装置の構成の一例を説明する図である。
【図9】同実施形態に係る演算ブロックの入出力データの一例を説明する図である。
【図10】同実施形態に係る逆演算ブロックの入出力データと保持されているデータの一例を説明する図である。
【図11】同実施形態に係る演算ブロックと逆演算ブロックの構成の一例を説明する図である。
【図12】同実施形態に係る逆演算ブロックの処理手順を説明する図である。
【図13】同実施形態に係る逆演算ブロックの処理手順のフローチャートである。
【図14】第3実施形態に係る入力が1個の場合のデジタル値の演算と逆演算を説明する図である。
【図15】同実施形態に係る入力が2個の場合のデジタル値の演算と逆演算を説明する図である。
【図16】従来技術に係る安全装置の構成図である。
【発明を実施するための形態】
【0013】
以下、図面を用いて本発明の実施形態について詳細に説明する。なお、本発明は係る実施形態に限定されず、その技術思想の範囲内で種々の変更が可能である。
【0014】
[第1実施形態]
図1は、本実施形態に係る安全装置の構成図である。なお、本実施形態の安全装置は、火力プラント、水力プラント、電力プラントなどのプラントに適用する例を説明するが、工場の生産ライン、ビルのメンテナンスシステム、大型空調システムなどの分散型制御による安全装置が用いられているシステムにも適用してもよい。
【0015】
図1に示すように、本実施形態に係る安全装置100は、入力装置2、演算装置3a〜演算装置3d、出力装置4を備えている。また、安全装置100は、アクチュエータ5に接続されている。
アクチュエータ5は、例えば、発電用のガスタービンの燃料供給を強制停止する弁である。また、安全装置100には、センサ1が取り付けられている。アクチュエータ5は、安全装置100が出力する指令値に基づき動作する。
センサ1は、熱量や流量などのアナログ値を検出する。また、センサ1は、アクチュエータ5に取り付けられている不図示の各種スイッチの論理状態などのデジタル値を検出する。センサ1は、アナログ値を検出した結果を示すアナログ値の検出値と、デジタル値を検出した結果を示すデジタル値の検出値とを、安全装置100に出力する。
【0016】
安全装置100の入力装置2は、センサ1が出力するアナログ値の検出値とデジタル値の検出値とを、演算装置3a〜演算装置3dに出力する。
演算装置3aは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
演算装置3bは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
演算装置3cは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
演算装置3dは、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置4に出力する。
出力装置4は、演算装置3a〜演算装置3dが出力する演算結果に対して、後述するように多数決処理を行い、多数決結果に基づき選ばれた演算結果を指令値としてアクチュエータ5に出力する。
以下、演算装置3a〜演算装置3dを総称して「演算装置3」と称する。
【0017】
図2は、本実施形態に係る演算装置の構成図である。図2に示すように、演算装置3は、振分部31、第1演算部32、第2演算部33、自己診断部34、出力制御部35を備えている。また、第1演算部32は、第1安全機能演算部101、第1安全機能演算検証部102を備えている。また、第2演算部33は、第2安全機能演算部111、第2安全機能演算検証部112を備えている。また、第1演算部32と第2演算部33は、例えば、1つのCPU(Central Processing Unit)が有する論理演算装置ALU(Arithmetic and Logic Unit)と浮動小数点演算装置FPU(Floating Point number processing Unit)で実行される。
【0018】
振分部31は、入力装置2が出力するアナログ値の検出値とデジタル値の検出値を、アナログ値の検出値inaとデジタル値の検出値ingとに振り分ける。振分部31は、デジタル値の検出値ingを、第1演算部32の第1安全機能演算部101と、第2演算部33の第2安全機能演算検証部112とに出力する。振分部31は、アナログ値の検出値inaを、第1演算部32の第1安全機能演算検証部102と、第2演算部33の第2安全機能演算部111とに出力する。
【0019】
第1演算部32は、例えば、論理演算装置ALU(Arithmetic and Logic Unit)で実行される。第1演算部32は、例えばソフトウェアの切換により、第1安全機能演算部101と第1安全機能演算検証部102とを実現する。
第1安全機能演算部101は、振分部31が出力するデジタル値の検出値ingを用いて、アクチュエータ5の制御量である出力値を、論理演算により演算し、演算結果out1を第2安全機能演算検証部112と出力制御部35とに出力する。
第1安全機能演算検証部102は、振分部31が出力するアナログ値の検出値inaを、公知の整数演算によるエミュレーションにより、アクチュエータ5の制御量である出力値を演算する。第1安全機能演算検証部102は、この演算結果が、第2安全機能演算部111による演算結果out2と一致するか否かを判定する。第1安全機能演算検証部102は、判定の結果、第1安全機能演算検証部102による演算結果が、第2安全機能演算部111による演算結果out2と一致する場合、演算結果が正常であることを示す情報を出力制御部35に出力する。第1安全機能演算検証部102は、判定の結果、第1安全機能演算検証部102による演算結果が、第2安全機能演算部111による演算結果out2と一致しない場合、演算結果が異常であることを示す情報を出力制御部35に出力する。
なお、第1の演算方式とは、デジタル値の論理演算であり、第2の演算方式とは、整数演算によるエミュレーションにより演算することである。
【0020】
なお、第1安全機能演算検証部102が行う整数演算によるエミュレーションは、例えば、第1演算部32にアセンブラコードでライブラリに実装されているソフトウェアによるエミュレーションや、マイクロコードでALUに存在しない操作をエミュレーションすることで、整数の除算や浮動小数点の処理を行う。あるいは、第1演算部32は、不図示の除算器や浮動小数点ユニットのような別のハードウェア部品や、コプロセッサなどを備えることで、整数の除算や浮動小数点の処理を行う。
【0021】
第2演算部33は、例えば、浮動小数点演算装置FPU(Floating Point number processing Unit)で実行される。第2演算部33は、例えばソフトウェアの切換により、第2安全機能演算部111と第2安全機能演算検証部112とを実現する。
第2安全機能演算部111は、振分部31が出力するアナログ値の検出値inaを用いて、アクチュエータ5の制御量である出力値を、浮動小数点演算により演算し、演算結果out2を第1安全機能演算検証部102と出力制御部35とに出力する。
第2安全機能演算検証部112は、振分部31が出力するデジタル値の検出値ingを、後述するように論理演算をアナログ演算で模擬し、アクチュエータ5の制御量である出力値を演算する。第2安全機能演算検証部112は、この演算結果が、第1安全機能演算部101による演算結果out1と一致するか否かを判定する。第2安全機能演算検証部112は、判定の結果、第2安全機能演算検証部112による演算結果が、第1安全機能演算部101による演算結果out1と一致する場合、演算結果が正常であることを示す情報を出力制御部35に出力する。第2安全機能演算検証部112は、判定の結果、第1安全機能演算検証部112による演算結果が、第1安全機能演算部101による演算結果out1と一致しない場合、演算結果が異常であることを示す情報を出力制御部35に出力する。
なお、第1の演算方式とは、アナログ値の浮動小数点演算であり、第2の演算方式とは、論理演算をアナログ演算で模擬する演算である。
【0022】
自己診断部34は、演算装置3の健全性を診断し、診断結果を出力制御部35に出力する。自己診断部34は、例えば、演算装置3に、不図示の電源供給装置から供給された電源電圧の電圧値が、所定の値の範囲であるか否かを判定する。自己診断部34は、電圧値が所定の範囲の場合を正常と判定し、電圧値が所定の値の範囲外の場合を異常と判定し、判定結果を出力制御部35に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する情報が、演算結果が正常であることを示す情報である場合、第2安全機能演算部111が出力するアナログ値の演算結果を出力装置4に出力する。出力制御部35は、第2安全機能演算検証部112が出力する情報が、演算結果が正常であることを示す情報である場合、第1安全機能演算部101が出力するデジタル値の演算結果を出力装置4に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する情報が、演算結果が異常であることを示す情報である場合、第2安全機能演算部111が出力するアナログ値の演算結果を出力装置4に出力しない。出力制御部35は、第2安全機能演算検証部112が出力する情報が、演算結果が異常であることを示す情報である場合、第1安全機能演算部101が出力するデジタル値の演算結果を出力装置4に出力しない。
【0023】
図3は、本実施形態に係る演算装置のデータの例を説明する図である。図3において、各列は、演算装置3毎の入力値(in)、振分部31の出力(アナログ値の検出値(ina)、およびデジタル値の検出値(ing))、第1安全機能演算部101の出力(out1;論理演算結果1〜4)、第2安全機能演算部111の出力(out2;アナログ演算結果1〜4)である。各行は、演算装置3a〜3d毎のデータである。このように、演算装置3a〜3dには、同一の入力値(in)が入力される。そして、演算装置3a〜3dの振分部31が、入力値(in)を振り分け、デジタル値の検出値(ing)を各々の第1安全機能演算部101に出力し、アナログ値の検出値(ina)を各々の第2安全機能演算部111に出力している。そして、演算装置3a〜3dの各第1安全機能演算部101が、各々、論理演算結果1〜4(out1)を出力している。また、演算装置3a〜3dの各第2安全機能演算部111が、各々、アナログ演算結果1〜4(out2)を出力している。
【0024】
図4は、本実施形態に係る第1演算部32と第2演算部33が行う演算を説明する図である。図4に示すように、第1演算部32の第1安全機能演算部101は、デジタル値の検出値に対して論理演算を行う。この演算結果を検証するため、第2演算部33の第2安全機能検証部112は、デジタル値の検出値に対して論理演算をアナログ演算で模擬した演算を行う。
また、第2演算部33の第2安全機能演算部111は、アナログ値の検出値に対してアナログ演算(浮動小数点演算)を行う。この演算結果を検証するために、第1演算部32の第1安全機能検証部102は、アナログ値の検出値に対して整数演算によるエミュレーションを行う。
【0025】
図5は、演算装置が行う演算の概略の一例を説明する図である。
図5に示すように、演算装置3には、入力装置2が出力するデジタル値の検出値DIN1151、およびDIN2152、アナログ値の検出値AIN3153が入力されている。図5において、符号161、162、および163が演算要素である。符号161は、論理和の論理演算を行う演算要素であり、符号163は、論理積の論理演算を行う演算要素である。また、符号162は、入力値が所定の値を超えたときにHレベル(真または“1”ともいう)の信号を出力する関数の演算を行う演算要素である。このように、演算装置3は、予め演算要素(加算、減算、除算、リミッタ、折れ線関数など)を関数化して記憶している。そして、図5に示すように、演算要素161の出力を演算要素163の入力に矢印181で接続し、演算要素162の出力を演算要素163の入力に矢印182で接続して、ロジックを構成している。演算装置3は、図5に示したような構成図(データフローともいう)から、論理演算を行うプログラムに変換したものを実行する。
【0026】
図5において、例えば、デジタル値の検出値DIN1151かDIN2152のどちらかがHレベル(真または“1”ともいう)の場合、演算要素161は、Hレベルを演算要素163に出力する。そして、アナログ値のAIN3153が所定の値を超えた場合、演算要素162はHレベルを演算要素163に出力する。そして、演算要素163は、演算要素161の出力と、演算要素162の出力との論理積を演算して、演算結果DOUT1171を算出する。
また、図5に示したのは、演算装置3が行う演算を説明するための概略である。実際の演算は、例えば、アナログ値の検出値AIN3153が熱量の場合、演算要素163は、このアナログ値の検出値AIN3153が所定の熱量を超えた場合に、熱量を下げるために、アクチュエータ5に熱量を下げる指示を示す情報(例えば、燃料供給を強制停止する弁を閉じる)を算出して、アクチュエータ5に指令値として出力する。
また、例えば、デジタル値の検出値DIN1151かDIN2152が、アクチュエータ5が備える熱量を設定するためのスイッチの状態を示す検出値の場合、演算装置3は、上記のアナログ値の検出値AIN3153が所定の熱量を超えた場合に、熱量を下げるために、アクチュエータ5に熱量を下げる指示を示す情報を算出する。そして、演算装置3は、アクチュエータ5に熱量を設定するためのスイッチの状態を指令値として出力する。
以下の説明では、演算装置3の動作の説明を簡略化するために、演算装置3に入力されたデジタル値の検出値、アナログ値の検出値を、各々、別々に演算する例を説明する。
【0027】
図6は、本実施形態に係る演算装置が行う演算の一例を説明する図である。
図6において、各行はALUを使った論理演算の例とFPUを使った浮動小数点演算による論理演算の例との対応関係であり、各列は、ALUを使った論理演算の例と、FPUを使った浮動小数点演算部による論理演算の例である。図6に示すように、論理演算で用いる値は、真と偽である。また、浮動小数点演算による論理演算で用いる値は、1.0と0.0である。
論理積Y=(X1)AND(X2)は、浮動小数点演算で行う場合、Y=(X1)×(X2)の演算を行う。
論理和Y=(X1)OR(X2)は、浮動小数点演算で行う場合、Y=float((X1)+(X2))!=0.0)の演算を行う。なお、演算子「float」は、4バイト浮動小数点であり、演算子「!=」は、比較演算子で異なる場合である。すなわち、X1とX2の和が0.0と異なる場合、Y=1.0であり、X1とX2の和が0の場合、Y=0.0である。
否定Y=X〜は、浮動小数点演算で行う場合、Y=1.0−Xの演算を行う。
排他的論理和Y=(X1)^(X2)は、浮動小数点演算で行う場合、Y=fabs(X1−X2)の演算を行う。演算子「fabs」は、絶対値を取る演算子である。すなわち、X1とX2との差の絶対値を演算する。
なお、図6には、論理演算を浮動小数点演算で行う一例を示したが、他にも公知の浮動小数点演算を用いることで、否定論理積等の各種の論理演算を浮動小数点演算で実現することができる。
【0028】
図7は、本実施形態に係る安全装置の処理手順のフローチャートである。
まず、安全装置100の演算装置3には、入力装置2が出力するアナログ値の検出値とデジタル値の検出値とが入力される。
演算装置3の振分部31は、入力装置2が出力するアナログ値の検出値とデジタル値の検出値を、アナログ値の検出値inaとデジタル値の検出値ingとに分ける(ステップS1)。
振分部31は、デジタル値の検出値ingを、第1演算部32の第1安全機能演算部101と、第2演算部33の第2安全機能演算検証部112とに出力する。振分部31は、アナログ値の検出値inaを、第1演算部32の第1安全機能演算検証部102と、第2演算部33の第2安全機能演算部111とに出力する。
【0029】
次に、第1安全機能演算部101は、振分部31が出力するデジタル値の検出値ingを用いて、アクチュエータ5の制御量である出力値を演算し、演算結果out1を第2安全機能演算検証部112と出力制御部35に出力する(ステップ2)。すなわち、第1安全機能演算部101は、デジタル値の検出値ingに対して論理演算を、ALUで実行する。
第2安全機能演算検証部112は、振分部31が出力するデジタル値の検出値ingを、論理演算をアナログ演算で模擬により、アクチュエータ5の制御量である出力値を演算する(ステップS3)。すなわち、第2安全機能演算検証部112は、第1安全機能演算部101の演算結果を検証するために、論理演算をアナログ演算で模擬し、FPUで実行する。
【0030】
第2安全機能演算検証部112は、第2安全機能演算検証部112による演算結果が、第1安全機能演算部101による演算結果out1と一致するか否かを判定する(ステップS4)。
判定の結果、第2安全機能演算検証部112による演算結果が第1安全機能演算部101演算結果out1と一致する場合(ステップS4 Yes)、第2安全機能演算検証部112は、第1安全機能演算部101による演算結果が正常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第2安全機能演算検証部112が出力する演算結果が正常であることを示す情報に基づき、第1安全機能演算部101が出力する演算結果を出力装置4に出力する(ステップS5)。
判定の結果、第2安全機能演算検証部112による演算結果が第1安全機能演算部101による演算結果out1と一致しない場合(ステップS4 No)、第2安全機能演算検証部112は、演算結果が異常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第2安全機能演算検証部112が出力する演算結果が異常であることを示す情報に基づき、第1安全機能演算部101が出力する演算結果を出力装置4に出力しない(ステップS6)。
【0031】
次に、第2安全機能演算部111は、振分部31が出力するアナログ値の検出値inaを用いて、アクチュエータ5の制御量である出力値を演算し、演算結果out2を第1安全機能演算検証部102と出力制御部35に出力する(ステップS7)。すなわち、第2安全機能演算部111は、アナログ値の検出値inaに対してアナログ演算を、FPUで実行する。
第1安全機能演算検証部102は、振分部31が出力するアナログ値の検出値inaを、整数演算によるエミュレーションにより演算を行い、アクチュエータ5の制御量である出力値を演算する(ステップS8)。すなわち、第1安全機能演算検証部102は、第2安全機能演算部111の演算結果を検証するために、整数演算をエミュレートして、ALUで実行する。
【0032】
第1安全機能演算検証部102は、第1安全機能演算検証部102による演算結果が、2安全機能演算部111による演算結果out2と一致するか否かを判定する(ステップS9)。
判定の結果、第1安全機能演算検証部102による演算結果が第2安全機能演算部111による演算結果out2と一致する場合(ステップS9 Yes)、第1安全機能演算検証部102は、演算結果が正常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する演算結果が正常であることを示す情報に基づき、第2安全機能演算部111が出力する演算結果を出力装置4に出力する(ステップS10)。
判定の結果、第2安全機能演算部111による演算結果が第1安全機能演算検証部102による演算結果out2と一致しない場合(ステップS9 No)、第1安全機能演算検証部102は、演算結果が異常であることを示す情報を出力制御部35に出力する。
出力制御部35は、第1安全機能演算検証部102が出力する演算結果が異常であることを示す情報に基づき、第2安全機能演算部111が出力する演算結果を出力装置4に出力しない(ステップS11)。
【0033】
次に、出力装置4には、演算装置3a〜演算装置3dが、ステップS1〜ステップS11により演算した演算結果が入力される。出力装置4は、入力された演算結果に対して多数決処理を行い、多数決処理に基づき指令値をアクチュエータ5に出力する(ステップS12)。
【0034】
なお、本実施形態では、演算装置3の出力制御部35は、第2安全機能演算検証部112が出力する演算結果が異常の場合、第1安全機能演算部101が出力する演算結果を出力装置4に出力しない例を説明した。出力制御部35は、第2安全機能演算検証部112が出力する演算結果が異常の場合、演算装置3に異常があるため、出力装置4に、演算装置3に異常があることを示す情報を送るようにしてもよい。同様に、出力制御部35は、第1安全機能演算検証部102が出力する演算結果が異常の場合、演算装置3に異常があるため、出力装置4に、演算装置3に異常があることを示す情報を送るようにしてもよい。
出力装置4は、演算装置3が出力する異常があることを示す情報が入力された場合、例えば、不図示の表示部に異常が発生している演算装置3の固有の番号等を表示して、安全装置100の使用者に知らせるようにしてもよい。この場合、演算装置3内で、異なるハードウェア(ALUとFPU)と異なるソフトウェア(異なる演算方式)で2重に演算結果を確認しているため、演算装置3の異常を検出することもできる効果がある。
なお、異なる演算方式とは、例えばデジタル値に対する論理演算とアナログ値に対する浮動少数点演算であり、または、デジタル値に対する浮動小数点演算による論理演算とアナログ値に対する整数演算のエミュレーションによる演算などである。
【0035】
次に、出力装置4が行う多数決処理について説明する。
演算装置3a〜演算装置3dから、4つの演算結果が入力された場合、出力装置4は、4つの演算結果で多数決を行い、例えば、4つのうち2つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ5に出力する。なお、安全側を制御する出力値とは、制御対象を安全な状態に制御する出力で、予め設定しておく。
演算装置3a〜演算装置3dから、3つの演算結果が入力された場合、すなわち、1つの演算結果が異常のため演算装置3により出力されなかった場合、出力装置4は、3つの演算結果で多数決を行い、例えば、3つのうち2つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ5に出力する。
演算装置3a〜演算装置3dから、2つの演算結果が入力された場合、すなわち、2つの演算結果が異常のため演算装置3により出力されなかった場合、出力装置4は、2つの演算結果のうち1つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ5に出力する。安全側を制御する出力値が1つ以上なかった場合、予め設定してある所定の出力順序に従って、入力された演算結果のうちの一方の演算結果を指令値としてアクチュエータ5に出力する。
演算装置3a〜演算装置3dから、1つの演算結果が入力された場合、すなわち、3つの演算結果が以上のため演算装置3により出力されなかった場合、出力装置4は、入力された演算結果を指令値としてアクチュエータ5に出力する。
演算装置3a〜演算装置3dから、1つも演算結果が入力されない場合、すなわち、4つの演算結果が異常のため演算装置により出力されなかった場合、出力装置4は、予め設定されている安全動作のための制御値を指令値としてアクチュエータ5に出力する。
【0036】
なお、上述した多数決処理は、出力装置5が、アナログの検出値に対する演算値、デジタル値に対する検出値に対する演算値のそれぞれに行う。
また、図7に示したフローチャートにおいて、例えば、ステップS2とステップS7の演算を、第1安全機能演算部101と第2安全機能演算部111が並行して行うようにしてもよい。また、ステップS3、S4とステップS8〜S9を、第1安全機能演算検証部102と第2安全機能演算検証部112が並行して行うようにしてもよい。
また、図1の構成例では、演算装置3を多重にする例を示したが、本実施形態の安全装置100を用いる場合、1つの演算装置3内で異なるハードウェアとソフトウェアで確認しているため、多重化せずに演算装置3は1つでもよい。
【0037】
以上のように、本実施形態の安全装置100は、1つのCPU(演算装置3)のALU(第1演算部32)とFPU(第2演算部33)を用いて、入力値からおのおの異なるハードウェアと異なる演算方式を用いて演算している。この結果、演算の信頼性を上げる効果もあり、また、CPU内の故障も検知することができる。また、本実施形態の安全装置100は、第1演算部32が、論理演算を行い、第2演算部33が、浮動小数点演算により異なる演算方式を使って演算しているため、ソフトウェアにも多様性を持たせることができる。この結果、コモンモード故障の可能性を低くすることができる。
【0038】
なお、本実施形態では、演算装置3が、1つのCPUが備えるALUとFPUを例として説明したが、デジタル信号プロセッサDSPを備えるCPUであれば、DSPによりALUとFPUを構成するようにしてもよい。または、1つのデジタル信号プロセッサDSPにより、ALU(第1演算部32)とFPU(第2演算部33)を構成するようにしてもよい。
【0039】
[第2実施形態]
図8は、本実施形態に係る演算装置の構成の一例を説明する図である。図8に示すように、演算装置300は、第1演算部32a、第2演算部33aを備えている。また、図8には示していないが、第1実施形態の図2と同様に、演算装置300は、振分部31、自己診断部34、出力制御部35を備えている。また、第2演算部33aは、入力データ部201、演算ブロック(1)202、演算部ブロック(j)203、演算部ブロック(m)204、出力データ部205を備えている。第1演算部32aは、逆演算用入力データ部211、逆演算ブロック(1)212、逆演算部ブロック(j)213、逆演算部ブロック(m)214、逆演算出力部215を備えている。
【0040】
まず、演算装置300で行う処理の概要を説明する。また、以下の説明では、入力値がアナログ値の検出値のみであるとして説明を行う。
演算装置300の振分部31は、入力装置2(図1)が出力するアナログ値の検出値を第2演算部33aに出力する。第2演算部33aでは、入力されたアナログ値の検出値を、順次、演算ブロック(1)202〜演算部ブロック(m)204により演算する。また、第2演算部33aは、演算結果と演算の途中で使用した要素を、後述するように第1演算部32aの逆演算ブロック(1)212〜逆演算部ブロック(m)214に出力する。第1演算部32aは、入力された演算結果と演算の途中で使用した要素を用いて、逆演算ブロック(1)211〜逆演算部ブロック(m)214により逆演算を行い、演算結果を検証する。また、第1実施形態と同様に、第1演算部32aと第2演算部33aは、例えば、1つのCPU(演算装置3)が備えるALUとFPUである。
【0041】
第2演算部33aの入力データ部201は、振分部31が出力するアナログ値の検出値を演算ブロック(1)202に出力する。また、入力データ部201は、入力されたアナログ値の検出値を記憶する。
演算部ブロック(1)202〜演算部ブロック(m)204は、振分部31が出力するアナログ値の検出値に基づいて、安全機能の出力を生成するのに必要な演算を行うために構成されている。
演算部ブロック(1)202は、入力データ部201が出力するアナログ値の検出値を用いて、所定の関数F1により演算を行う。演算部ブロック(1)202は、演算結果(Y1n)、を演算部ブロック(j)203に出力する。さらに演算部ブロック(1)202は、入力されたアナログ値の検出値in(X1n)、演算結果(Y1n)、演算の途中で使用した要素(W1n、V1n)を逆演算ブロック(1)212に出力する。また、演算部ブロック(1)202は、前回の演算の途中で使用した要素(W1(n−1))を記憶している。なお、添え字nは、今回の演算による値を表し、n−1は前回の演算による値表している。
【0042】
演算部ブロック(j)203は、演算部ブロック(1)202が出力する演算結果(Y1n(=Xjn))を用いて、所定の関数F2により演算を行う。演算部ブロック(j)203は、演算結果(Yjn)、を演算部ブロック(m)203に出力する。さらに演算部ブロック(j)203は、演算部ブロック(1)202が出力する演算結果(Y1n(=Xjn))、演算結果(Yjn)、演算の途中で使用した要素(Wjn、Vjn)を逆演算ブロック(j)213に出力する。また、演算部ブロック(j)203は、前回の演算の途中で使用した要素(Wj(n−1))を記憶している。
【0043】
演算部ブロック(m)204は、演算部ブロック(j)203が出力する演算結果(Yjn(=Xmn))を用いて、所定の関数F3により演算を行う。演算部ブロック(m)204は、演算結果(Ymn)、を出力データ部205に出力する。さらに演算部ブロック(m)204は、演算部ブロック(j)203が出力する演算結果(Yjn(=Xmn))、演算結果(Ymn)、演算の途中で使用した要素(Wmn、Vmn)を逆演算ブロック(m)214に出力する。また、演算部ブロック(m)204は、前回の演算の途中で使用した要素(Wm(n−1))を記憶している。
【0044】
出力データ部205は、演算部ブロック(m)204が出力する演算結果が入力されたことに応じて、演算部ブロック(1)201〜演算部ブロック(m)204の演算が終了したと判断する。また、 出力データ部205は、演算が終了したことを示す情報を逆演算出力部215に出力する。
【0045】
逆演算出力部215は、出力データ部205が出力する演算が終了したことを示す情報に基づき、逆演算ブロック(m)214に逆演算を開始する情報を出力する。
逆演算部ブロック(1)212〜演算部ブロック(m)214は、演算部ブロック(1)201〜演算部ブロック(m)204が出力するアナログ値の検出値in(X1n)、演算結果(Y1n(=Xjn))、(Yjn(=Xmn))、および(Ymn)、演算の途中で用いた要素(W1n、V1n)、(Wjn、Vjn)および(Wmn、Vmn)に基づいて、逆演算を行うために構成されている。
【0046】
逆演算部ブロック(m)214は、逆演算出力部215が出力する逆演算を開始する情報に基づき、演算部ブロック(m)204が出力する演算結果(Yjn(=Xmn))、演算結果Ymn、演算の途中で使用した要素(Wmn、Vmn)を用いて、所定の関数F3−1により逆演算を行う。逆演算部ブロック(m)214は、逆演算を開始する情報を逆演算部ブロック(j)213に出力する。
また、逆演算部ブロック(m)214は、逆演算結果Xmn’が、演算結果Xjnと一致するか否かを判定する(不一致チェックともいう)。判定の結果、逆演算結果Xmn’と演算結果Xjnとが一致した場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が正常であると判定する。判定の結果、逆演算結果Xmn’と演算結果Xjnとが一致しない場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が異常であると判定する。逆演算部ブロック(m)214は、判定結果を、出力制御部35に出力する。
また、逆演算部ブロック(m)214は、逆演算の途中で使用した要素Wm(n−1)’が、記憶されている前回の周期の逆演算の途中で使用した要素Wm(n−1)と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Wm(n−1)’と前回の周期の逆演算の途中で使用した要素Wm(n−1)とが一致した場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が正常であると判定する。また、逆演算部ブロック(m)214は、入力された演算の途中で使用した要素Wmnを次回の周期の逆演算で使用できるようにWm(n−1)’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Wm(n−1)’と逆演算の途中で使用した要素Wm(n−1)とが一致しない場合、逆演算部ブロック(m)214は、演算部ブロック(m)204の演算結果が異常であると判定する。逆演算部ブロック(m)214は、判定結果を、出力制御部35に出力する。
【0047】
逆演算部ブロック(j)213は、逆演算部ブロック(m)214が出力する逆演算を開始する情報に基づき、演算部ブロック(j)203が出力する演算結果X1、演算結果Xj、演算の途中で使用した要素(Wjn、Vjn)を用いて、所定の関数F2−1により逆演算を行う。逆演算部ブロック(j)213は、逆演算を開始する情報を逆演算部ブロック(1)212に出力する。
また、逆演算部ブロック(j)213は、逆演算結果Xjn’が、演算結果Xjnと一致するか否かを判定する。判定の結果、逆演算結果Xjn’と演算結果Xjnとが一致した場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が正常であると判定する。判定の結果、逆演算結果Xjn’と演算結果Xjnとが一致しない場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が異常であると判定する。逆演算部ブロック(j)213は、判定結果を、出力制御部35に出力する。
また、逆演算部ブロック(j)213は、逆演算の途中で使用した要素Wj(n−1)’が、前回の周期の逆演算の途中で使用した要素Wj(n−1)と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Wj(n−1)’と前回の周期の逆演算の途中で使用した要素Wj(n−1)とが一致した場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が正常であると判定する。また、逆演算部ブロック(j)213は、入力された演算の途中で使用した要素Wjnを次回の周期の逆演算で使用できるようにWj(n−1)’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Wj(n−1)’と前回の周期の逆演算の途中で使用した要素Wj(n−1)とが一致しない場合、逆演算部ブロック(j)213は、演算部ブロック(j)203の演算結果が異常であると判定する。逆演算部ブロック(j)213は、判定結果を、出力制御部35に出力する。
【0048】
逆演算部ブロック(1)212は、逆演算部ブロック(j)213が出力する逆演算を開始する情報に基づき、演算部ブロック(1)201が出力するアナログ値の検出値in、演算結果X1、演算の途中で使用した要素(W1、V1)を用いて、所定の関数F1−1により逆演算を行う。逆演算部ブロック(1)212は、逆演算が終了したことを示す情報を逆縁算用入力データ部211に出力する。
また、逆演算部ブロック(1)212は、逆演算結果X1n’が、アナログ値の検出値inと一致するか否かを判定する。判定の結果、逆演算結果X1n’とアナログ値の検出値inとが一致した場合、逆演算部ブロック(1)213は、演算部ブロック(1)202の演算結果が正常であると判定する。判定の結果、逆演算結果X1n’とアナログ値の検出値inとが一致しない場合、逆演算部ブロック(1)212は、演算部ブロック(1)202の演算結果が異常であると判定する。逆演算部ブロック(1)212は、判定結果を、出力制御部35に出力する。
また、逆演算部ブロック(1)212は、逆演算の途中で使用した要素W1(n−1)’が、前回の周期の逆演算の途中で使用した要素W1(n−1)と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素W1(n−1)’と前回の周期の逆演算の途中で使用した要素W1(n−1)とが一致した場合、逆演算部ブロック(1)212は、演算部ブロック(1)202の演算結果が正常であると判定する。また、逆演算部ブロック(1)212は、入力された演算の途中で使用した要素W1nを次回の周期の逆演算で使用できるようにW1(n−1)’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素W1n’と前回の周期の逆演算の途中で使用した要素W1(n−1)とが一致しない場合、逆演算部ブロック(1)212は、演算部ブロック(1)202の演算結果が異常であると判定する。逆演算部ブロック(1)212は、判定結果を、出力制御部35に出力する。
【0049】
逆演算用入力データ部211は、演算部ブロック(1)212が出力する逆演算が終了したことを示す情報を、出力制御部35に出力する。
出力制御部35は、逆演算用入力データ部211が出力する逆演算が終了したことを示す情報、逆演算部ブロック(1)212〜逆演算部ブロック(m)214が出力する判定結果に基づき、演算部ブロック(1)202〜演算部ブロック(m)204の演算が正常である場合、演算部ブロック(m)204の演算結果を指令値として出力装置4に出力する。
【0050】
なお、演算部ブロック(1)202〜演算部ブロック(m)204で用いる所定の関数F1〜F3、逆演算部ブロック(1)212〜逆演算部ブロック(m)214で用いる所定の関数F1−1〜F3−1は、予め入力値に基づいて、安全装置100の設計者が予め設定しておく。
【0051】
なお、本実施形態では、演算部ブロック(1)202〜演算部ブロック(m)204の全ての演算が終了した後、逆演算部ブロック(1)212〜逆演算部ブロック(m)214が逆演算を行う例を説明した。例えば、各演算部ブロック(1)202の演算が終了した後、逆演算部ブロック(1)212が逆演算を行うようにしてもよい。
【0052】
図9は、本実施形態に係る演算ブロックと逆演算ブロックの入出力データの一例を説明する図である。図10は、本実施形態に係る逆演算ブロックの入出力データと保持されているデータの一例を説明する図である。
図9に示すように、演算ブロック(1)202〜演算ブロック(m)204は、それぞれXnが入力され、それぞれYn、Wn、およびVnを出力する。
図10に示すように、逆演算ブロック(1)212〜逆演算ブロック(m)214は、それぞれYn、Wn、Vn、およびXnが入力され、Xn’を出力する。また、逆演算ブロック(1)212〜逆演算ブロック(m)214は、それぞれ前回の周期のW(n−1)を保持している。
【0053】
次に、演算ブロック(1)202〜演算ブロック(m)204、逆演算ブロック(1)202〜逆演算ブロック(m)204が行う処理について、図11〜図13を用いて説明する。図11は、本実施形態に係る演算ブロックと逆演算ブロックの構成の一例を説明する図である。図12は、本実施形態に係る逆演算ブロックの処理手順を説明する図である。図13は、本実施形態に係る逆演算ブロックの処理手順のフローチャートである。
【0054】
図11(a)と図11(b)は、図8における演算ブロックの破線で囲んだ220の演算ブロック(j)203と逆演算ブロック(j)213の構成の一例である。
図11(a)に示すように、演算ブロック(j)203は、Xjn、Wj(n−1)を入力値として用い、Yjn、WjnおよびVjnを出力値として用いて演算を行う。図11(b)に示すように、逆演算ブロック(j)213は、Yjn、WjnおよびVjnを入力値として用い、Xjn’、Wj(n−1)’を出力値として用いて逆演算を行う。
図11(a)と図11(b)において、添え字nは、今回の周期のデータ、添え字n−1は、前回の周期のデータである。また、Xjnは、入力列、Yjnは、出力列である。さらに、Wjnは、中間データ列(出力を計算するまでの途中の主要な演算値)、Vjnは、Xjnと Wj(n−1)を一意的に求めるために必要な中間データである。Xjn’は、Xjnの逆演算値、Wj(n−1)’は、Wj(n−1)の逆演算値であり、Wj(n−1)は、逆縁算用に前回の周期のWjnをコピーしたデータ列である。
図11(a)に示すように、演算ブロック(j)203は、入力値のXjnとWj(n−1)を所定の関数F2を用いて、Yjn、Wjn、Vjnを演算する。
図11(b)に示すように、逆演算ブロック(j)213は、入力値のYjnとWjnおよびVjnを所定の関数F2−1を用いて、Xjn’Wj(n−1)’を演算する。
【0055】
次に、逆演算ブロック(j)212が行う逆演算の手順を詳細に説明する。
まず、逆演算ブロック(j)212は、演算ブロック(j)202の演算結果Yjnを入力値としてコピーする(ステップS101、図12のC1、C2)。
次に、逆演算ブロック(j)212は、演算ブロック(j)202の演算の途中で使用した要素WjnとVjnを、入力値としてコピーする(ステップS102、図12のC3)。
次に、逆演算ブロック(j)212は、演算ブロック(j)202への入力値であるXjnを、出力値としてコピーする(ステップS103、図12のC4)。
次に、逆演算ブロック(j)212は、Xjn’とWj(n−1)’を、コピーした入力値Yjn、Wjn、およびVjnを用いて、所定の関数F2−1により逆演算する(ステップS104、図13のC5)。
【0056】
次に、逆演算ブロック(j)212は、逆演算により求めたXjn’と、コピーしたXjnとが一致するか否かを判定する(ステップS105)。
判定の結果、逆演算により求めたXjn’と、コピーしたXjnとが一致する場合(ステップS105 Yes)、ステップS107に進む。判定の結果、逆演算により求めたXjn’と、コピーしたXjnとが一致しない場合(ステップS105 No)、ステップS106に進む。
【0057】
次に、逆演算ブロック(j)212は、逆演算の途中で使用した要素Wj(n−1)’と、コピーしたWj(n−1)とが一致するか否かを判定する(ステップS107、図12のC6)。
判定の結果、逆演算により求めたWj(n−1)’と、コピーしたWj(n−1)とが一致する場合(ステップS107 Yes)、ステップS108に進む。判定の結果、逆演算により求めたWjn’と、コピーしたWj(n−1)とが一致しない場合(ステップS107 No)、ステップS106に進む。
【0058】
逆演算ブロック(j)212は、演算結果、または演算の途中で使用した要素が一致しなかったため、異常と判定し、判定結果を出力の制御装部35に出力する(ステップS106)。
【0059】
逆演算ブロック(j)212は、演算結果と、演算の途中で使用した要素とが一致したため、正常と判定し、判定結果を出力の制御装部35に出力する。また、逆演算ブロック(j)212は、コピーしたWjnを次回の周期の逆演算チェックで使用できるようにWj(n−1)’に上書きして保存する(ステップS108、図12のC7)。
【0060】
以上のように、本実施形態では、第2演算部33が算出した演算結果に対し、第1演算部32が第2演算部33で算出された演算結果と演算途中で使用された要素を用いて逆演算を行う。そして、第1演算部32は、逆演算した演算結果が、第2演算部33(FPU)が算出した演算結果の入力値と一致するか判定する。さらに、第1演算部32(ALU)は、逆演算の途中で使用した要素が前回の周期で使用した要素と一致するかも判定する。この結果、異なるハードウェアかつ異なるソフトウェアにより、演算結果が正しいかをチェックすることができるので、安価にコモンモード故障の可能性を低くすることができる。
【0061】
なお、本実施形態では、演算ブロック(1)202〜演算ブロック(m)204、逆演算ブロック(1)212〜逆演算ブロック(m)214のように、3個ずつ用いる例を説明したが、演算ブロックおよび逆演算ブロックの数はこれに限らず、検出される検出値や指令値に基づいて決めるようにしてもよい。
また、本実施形態の構成に実施形態1の構成を加えるようにしてもよい。この場合、第2演算部33が算出した演算結果に対し、第1演算部32が逆演算と、順方向の演算を行うこととで、さらに信頼性を上げることができる。
また、本実施形態では、図8のように1つの演算装置3についてのみ用いる例を説明したが、図1と同様に、演算装置3を多重化してもよい。
【0062】
[第3実施形態]
第2実施形態では、アナログ値の検出値が演算装置3に入力された場合、第2演算部33aが演算した演算結果に対して、第1演算部32aが逆演算して判定する例を説明した。本実施形態では、デジタル値の検出値が演算装置3に入力された場合、第1演算部33aが演算した演算結果に対して、第2演算部33aが逆演算して判定する例を説明する。なお、第2演算部33aは、第1実施形態で説明したように、デジタル値を浮動小数点演算により論理演算することで行う。
【0063】
図14は、本実施形態に係る入力が1個の場合のデジタル値の演算と逆演算を説明する図である。図14(a)は、順方向の演算を説明する図であり、図14(b)は、逆演算を説明する図である。
図14(a)に示すように、入力が1個、出力が1個の場合、入力Xnに対して所定の関数Fにより出力Ynが演算できる。このため、図14(b)に示すように、出力Ynに、関数F−1を行うことで、Xn’が逆演算でき、逆演算したXn’とXnとを比較することで、演算が正常か否かを判定できる。このような演算として、例えば、NOT論理(否定)がある。
【0064】
図15は、本実施形態に係る入力が2個の場合のデジタル値の演算と逆演算を説明する図である。図15(a)は、順方向の演算を説明する図であり、図15(b)は、逆演算を説明する図である。
図15(a)に示すように、入力が2個、出力が1個の場合、入力X1とX2に対して所定の関数Fにより出力Ynが演算できる。このため、出力Ynのみでは、入力X1、X2を一意に求めることができないため、例えば、図15(b)に示すように、入力X2と、出力Ynを入力とし、所定の関数F−1により、X1’を演算し、演算したX1’と入力のX1とを比較することで演算が正常か否かを判定できる。このような演算として、例えば、AND論理(論理積)、OR論理(論理和)などがある。
【0065】
以上のように、本実施形態では、第1演算部32(ALU)が算出した演算結果に対し、第2演算部33(FPU)が第1演算部32で算出された演算結果と演算途中で使用された要素を用いて逆演算を行う。そして、第2演算部33(FPU)は、逆演算した演算結果が、第1演算部32(ALU)が算出した演算結果の入力値と一致するか判定する。さらに、第2演算部33(FPU)は、逆演算の途中で使用した要素が前回の周期で使用した要素と一致するかも判定する。この結果、異なるハードウェアかつ異なるソフトウェアにより、演算結果が正しいかをチェックすることができるので、安価にコモンモード故障の可能性を低くすることができる。
【0066】
また、本実施形態の構成に実施形態1の構成を加えるようにしてもよい。この場合、第1演算部32が算出した演算結果に対し、第2演算部33が逆演算と、順方向の演算を行うこととで、さらに信頼性を上げることができる。
また、本実施形態の構成に実施形態2の構成を加えるようにしてもよい。この場合、アナログ値の検出値に対してもデジタル値の検出値に対しても、異なるハードウェア、ソフトウェアで逆演算して比較しているため、コモンモード故障の可能性を低くすることができる。
また、本実施形態では、図8のように1つの演算装置3についてのみ用いる例を説明したが、図1と同様に、演算装置3を多重化してもよい。
【0067】
なお、本実施形態では、1つの演算装置3にALUとFPUを備え、第1演算部32の演算がALUで実行され、第2演算部33の演算がFPUで実行される例を説明したが、例えばRISC(Reduced Instruction Set Computer)プロセッサの場合、スーパースケーラによりFPUをALUと並列に動作させることができるため、本実施形態を実現することができる。また、1つのCPU内に複数の演算部を備える、例えばデュアル・コア・プロセッサを演算装置3に用いても、本実施形態と同様の効果を得ることができる。
【符号の説明】
【0068】
100・・・安全装置
2・・・入力装置
3、3a〜3d、300・・・演算装置
4・・・出力装置
31・・・振分部
32、32a・・・第1演算部
33、33a・・・第2演算部
34・・・自己診断部
35・・・出力制御部
101・・・第1安全機能演算部
102・・・第1安全機能演算検証部
111・・・第2安全機能演算部
112・・・第2安全機能演算検証部
201・・・入力データ部
202〜204・・・演算ブロック(1)〜演算部ブロック(m)
212〜214・・・逆演算ブロック(1)〜逆演算部ブロック(m)
205・・・出力データ部
211・・・逆演算用入力データ部
215・・・逆演算出力部
【特許請求の範囲】
【請求項1】
制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置であって、
前記入力値を第1の演算方式で演算する第1演算部と、
前記第1演算部が演算した第1演算結果と、前記入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部と、
前記第2演算部の判定結果に基づき、前記第1演算結果と前記第2演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算結果を出力しない出力制御部と、
を備え、
前記第1演算部と前記第2演算部は、
1つの中央演算処理装置が備える異なるハードウェアである
ことを特徴とする安全装置。
【請求項2】
前記第1演算部が論理演算を行う演算装置であり且つ前記第2演算部が浮動小数点演算を行う演算装置であるか、または、前記第2演算部が論理演算を行う演算装置であり且つ前記第1演算部が浮動小数点演算を行う演算装置である
ことを特徴とする請求項1に記載の安全装置。
【請求項3】
前記第1演算部が論理演算を行う演算装置であり且つ前記第2演算部が浮動小数点演算を行う演算装置である場合、前記第1演算部が論理演算を行い且つ前記第2演算部が論理演算を浮動小数点演算により模擬して行うか、
前記第2演算部が論理演算を行う演算装置であり且つ前記第1演算部が浮動小数点演算を行う演算装置である場合、前記第1演算部が浮動小数点演算を行い且つ第2演算部がエミュレーションにより整数演算を行う
ことを特徴とする請求項1または請求項2に記載の安全装置。
【請求項4】
前記第1演算部は、
前記入力値と、前記第1演算結果と、前記第1演算結果に到る演算途中の演算値とを、前記第2演算部に出力し、
前記第2演算部は、
入力された前記第1演算結果及び前記第1演算結果に到る演算途中の演算値を用いて、前記第1演算部が前記第1演算を行った演算の逆演算を行い、前記逆演算した第3演算結果と前記第1演算部への前記入力値とが一致するか否かを判定し、
出力制御部は、
前記第2演算部の判定結果に基づき、前記入力値と前記第3演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、一致しない場合、前記第1演算結果を出力しない
ことを特徴とする請求項1から請求項3のいずれか1項に記載の安全装置。
【請求項5】
前記第1演算部と前記第2演算部を備える前記中央演算処理装置が並列に接続され、
前記並列に接続された各々の前記中央演算処理装置の出力制御部の複数の前記指令値について、多数決により指令値を決定する出力装置を備える
ことを特徴とする請求項1または請求項4のいずれか1項に記載の安全装置。
【請求項6】
前記出力制御部は、
前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算装置または前記第2演算装置に異常があることを示す情報を、前記出力装置に出力し、
前記出力装置は、
前記出力制御部が出力する前記第1演算装置または前記第2演算装置に異常があることを示す情報に基づき、前記制御対象を制御する
ことを特徴とする請求項1から請求項5のいずれか1項に記載の安全装置。
【請求項7】
制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする演算方法であって、
第1演算部が、前記入力値を第1の演算方式で演算する工程と、
第2演算部が、前記第1演算工程が演算した第1演算結果と、前記入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算工程と、
出力制御部が、前記第2演算部の判定結果に基づき、前記第1演算結果と前記第2演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算結果を出力しない出力制御工程と、
を備える安全装置の演算方法。
【請求項1】
制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置であって、
前記入力値を第1の演算方式で演算する第1演算部と、
前記第1演算部が演算した第1演算結果と、前記入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算部と、
前記第2演算部の判定結果に基づき、前記第1演算結果と前記第2演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算結果を出力しない出力制御部と、
を備え、
前記第1演算部と前記第2演算部は、
1つの中央演算処理装置が備える異なるハードウェアである
ことを特徴とする安全装置。
【請求項2】
前記第1演算部が論理演算を行う演算装置であり且つ前記第2演算部が浮動小数点演算を行う演算装置であるか、または、前記第2演算部が論理演算を行う演算装置であり且つ前記第1演算部が浮動小数点演算を行う演算装置である
ことを特徴とする請求項1に記載の安全装置。
【請求項3】
前記第1演算部が論理演算を行う演算装置であり且つ前記第2演算部が浮動小数点演算を行う演算装置である場合、前記第1演算部が論理演算を行い且つ前記第2演算部が論理演算を浮動小数点演算により模擬して行うか、
前記第2演算部が論理演算を行う演算装置であり且つ前記第1演算部が浮動小数点演算を行う演算装置である場合、前記第1演算部が浮動小数点演算を行い且つ第2演算部がエミュレーションにより整数演算を行う
ことを特徴とする請求項1または請求項2に記載の安全装置。
【請求項4】
前記第1演算部は、
前記入力値と、前記第1演算結果と、前記第1演算結果に到る演算途中の演算値とを、前記第2演算部に出力し、
前記第2演算部は、
入力された前記第1演算結果及び前記第1演算結果に到る演算途中の演算値を用いて、前記第1演算部が前記第1演算を行った演算の逆演算を行い、前記逆演算した第3演算結果と前記第1演算部への前記入力値とが一致するか否かを判定し、
出力制御部は、
前記第2演算部の判定結果に基づき、前記入力値と前記第3演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、一致しない場合、前記第1演算結果を出力しない
ことを特徴とする請求項1から請求項3のいずれか1項に記載の安全装置。
【請求項5】
前記第1演算部と前記第2演算部を備える前記中央演算処理装置が並列に接続され、
前記並列に接続された各々の前記中央演算処理装置の出力制御部の複数の前記指令値について、多数決により指令値を決定する出力装置を備える
ことを特徴とする請求項1または請求項4のいずれか1項に記載の安全装置。
【請求項6】
前記出力制御部は、
前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算装置または前記第2演算装置に異常があることを示す情報を、前記出力装置に出力し、
前記出力装置は、
前記出力制御部が出力する前記第1演算装置または前記第2演算装置に異常があることを示す情報に基づき、前記制御対象を制御する
ことを特徴とする請求項1から請求項5のいずれか1項に記載の安全装置。
【請求項7】
制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする演算方法であって、
第1演算部が、前記入力値を第1の演算方式で演算する工程と、
第2演算部が、前記第1演算工程が演算した第1演算結果と、前記入力値を第2の演算方式で演算した第2演算結果とが一致するか否かを判定する第2演算工程と、
出力制御部が、前記第2演算部の判定結果に基づき、前記第1演算結果と前記第2演算結果とが一致する場合、前記第1演算結果を前記所定の指令値として出力し、前記第1演算結果と前記第2演算結果とが一致しない場合、前記第1演算結果を出力しない出力制御工程と、
を備える安全装置の演算方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2012−159956(P2012−159956A)
【公開日】平成24年8月23日(2012.8.23)
【国際特許分類】
【出願番号】特願2011−18220(P2011−18220)
【出願日】平成23年1月31日(2011.1.31)
【出願人】(000006208)三菱重工業株式会社 (10,378)
【Fターム(参考)】
【公開日】平成24年8月23日(2012.8.23)
【国際特許分類】
【出願日】平成23年1月31日(2011.1.31)
【出願人】(000006208)三菱重工業株式会社 (10,378)
【Fターム(参考)】
[ Back to top ]