(57)【特許請求の範囲】
【請求項１】
制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置であって、
前記安全装置を構成する演算装置が、
前記入力値を第１の演算方式で演算する第１演算部と、
前記第１演算部が演算した第１演算結果と、前記入力値を第２の演算方式で演算した第２演算結果とが一致するか否かを判定する第２演算部と、
前記第２演算部の判定結果に基づき、前記第１演算結果と前記第２演算結果とが一致する場合、前記第１演算結果を前記所定の指令値として出力し、前記第１演算結果と前記第２演算結果とが一致しない場合、前記第１演算結果を出力しない出力制御部と、
を備え、
前記第１演算部と前記第２演算部は、
前記演算装置内の１つの中央演算処理装置内に備わる異なるハードウェア演算ユニットそれぞれにより構成された演算部であり、
前記第１演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第２演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である場合、前記第１演算部が論理演算を行い且つ前記第２演算部が論理演算を浮動小数点演算により模擬して行うか、
前記第２演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第１演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である場合、前記第１演算部が浮動小数点演算を行い且つ第２演算部がエミュレーションにより整数演算を行う
ことを特徴とする安全装置。
【請求項２】
前記第１演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第２演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部であるか、または、前記第２演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第１演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である
ことを特徴とする請求項１に記載の安全装置。
【請求項３】
前記第１演算部は、
前記入力値と、前記第１演算結果と、前記第１演算結果に到る演算途中の演算値とを、前記第２演算部に出力し、
前記第２演算部は、
入力された前記第１演算結果及び前記第１演算結果に到る演算途中の演算値を用いて、前記第１演算部が前記第１演算を行った演算の逆演算を行い、前記逆演算した第３演算結果と前記第１演算部への前記入力値とが一致するか否かを判定し、
出力制御部は、
前記第２演算部の判定結果に基づき、前記入力値と前記第３演算結果とが一致する場合、前記第１演算結果を前記所定の指令値として出力し、一致しない場合、前記第１演算結果を出力しない
ことを特徴とする請求項１または請求項２に記載の安全装置。
【請求項４】
前記第１演算部と前記第２演算部を備える前記中央演算処理装置が並列に接続され、
前記並列に接続された各々の前記中央演算処理装置の出力制御部の複数の前記指令値について、多数決により指令値を決定する出力装置を備える
ことを特徴とする請求項１から請求項３のいずれか１項に記載の安全装置。
【請求項５】
前記出力制御部は、
前記第１演算結果と前記第２演算結果とが一致しない場合、前記第１演算部または前記第２演算部に異常があることを示す情報を、前記出力装置に出力し、
前記出力装置は、
前記出力制御部が出力する前記第１演算部または前記第２演算部に異常があることを示す情報に基づき、前記制御対象を制御する
ことを特徴とする請求項１から請求項４のいずれか１項に記載の安全装置。
【請求項６】
制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置を構成する演算装置であって当該演算装置内の１つの中央演算処理装置内に備わる第１演算部と第２演算部との異なるハードウェア演算ユニットそれぞれにより構成された演算部を有する前記演算装置の演算方法であって、
前記第１演算部が、前記入力値を第１の演算方式で演算する工程と、
前記第２演算部が、前記第１演算部が演算した第１演算結果と、前記入力値を第２の演算方式で演算した第２演算結果とが一致するか否かを判定する工程と、
出力制御部が、前記第２演算部の判定結果に基づき、前記第１演算結果と前記第２演算結果とが一致する場合、前記第１演算結果を前記所定の指令値として出力し、前記第１演算結果と前記第２演算結果とが一致しない場合、前記第１演算結果を出力しない出力制御工程と、
を有し、
前記第１演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第２演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である場合、前記第１演算部が論理演算を行い且つ前記第２演算部が論理演算を浮動小数点演算により模擬して行うか、
前記第２演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第１演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である場合、前記第１演算部が浮動小数点演算を行い且つ第２演算部がエミュレーションにより整数演算を行う
ことを特徴とする安全装置の演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、安全装置、安全装置の演算方法に関する。
【背景技術】
【０００２】
火力プラントなどにおいて、プラントの状態を監視し異常を検知してプラントを安全に停止させる安全装置として、電子式の安全装置が適用されている。プラントの安全装置には、高い信頼性が要求されるため、国際機能安全規格ＩＥＣ６１５０８などに、要求事項が規定されている。このため、プラントの利用者から、これらの安全規格を遵守するよう要求が増えてきている。
【０００３】
電子式の安全装置では、その信頼性を高めるために、安全機能のロジックを演算する電子式の安全装置の演算装置（ＣＰＵボード上でソフトウェアを動作させて実現）の多重化が一般に使われている。非特許文献１では、演算装置単体を並列に有することで多重化し、自己診断および多重化した演算装置相互で演算結果を比較することで、演算装置の故障を検知する手段を設けている。これにより、非特許文献１に記載の安全装置（制御装置）では、安全機能が働くべきときに故障のために不動作となる確率を減らすようにしている。
【０００４】
図１６は、従来技術に係る安全装置の構成図である。図１６に示すように、非特許文献２の安全装置９００は、１つのシステム内で、安全機能が働くべきときに故障のために不動作となる確率を減らすように、同一の機能を異なる技術で構成している。異なる技術とは、例えば、図１６に示すように、実行側の出力スイッチＳＷａ１を半導体スイッチ、待機側の出力スイッチＳＷａ２をメカニカルスイッチで構成している。また、非特許文献２に記載の発明も、図１６に示したように演算装置（ＣＰＵ）が並列に接続され、多重化されている。このように、非特許文献２の安全装置９００は、ハードウェアの共通部をなくして、安全機能が働くべきときに故障のために不動作となる確率を減らすようにしている。
【０００５】
一般に、多重化した各演算装置に同一ソフトウェアを搭載すると、コモンモード故障の要因となるため、高い信頼性を実現する上で妨げとなる問題点がある。コモンモード故障とは、共通のアプリケーションを有することにより、共通の故障要因を有することである。このため、特許文献１に記載の発明は、Ｎ個の多重化装置で、おのおの異なったソフトウェアを搭載して多様化を図ることでコモンモード故障を排除している。特許文献１に記載の発明は、機能を複数のソフトウェアによるモジュールで構成する場合に、各モジュールを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，２００４年４月
【非特許文献２】安藤忠明、安藤進清、「安全計装システムとＰｒｏＳａｆｅシリーズの診断機能」、横河技法  Ｖｏｌ．４３  Ｎｏ．４  ｐ．１７５−１８０、１９９９
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の従来技術では、Ｎ個の異なったアルゴリズムやソフトウェアを開発することは、容易ではなくコスト的に過大になる問題点があった。また、非特許文献２に記載の安全装置では、多様性確保に異なるハードウェアを設けることが示されているが、ＣＰＵ（演算部分）のハードウェア及びソフトウェアに対する多様性確保は示されていない。このため、非特許文献２の安全装置では、ハードウェアによるコモンモード故障を防ぐことができても、ソフトウェアによるコモンモード故障を防げない場合があるという問題点があった。
【０００９】
本発明は、上記の問題点に鑑みてなされたものであって、安価にコモンモード故障を防ぐことができる安全装置、安全装置の演算方法を提供することを目的としている。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明は、制御対象で検出された検出値を入力値として演算し、所定の指令値を出力することで制御対象の異常を検知して前記制御対象を安全な状態にする安全装置であって、前記安全装置を構成する演算装置が、前記入力値を第１の演算方式で演算する第１演算部と、前記第１演算部が演算した第１演算結果と、前記入力値を第２の演算方式で演算した第２演算結果とが一致するか否かを判定する第２演算部と、前記第２演算部の判定結果に基づき、前記第１演算結果と前記第２演算結果とが一致する場合、前記第１演算結果を前記所定の指令値として出力し、前記第１演算結果と前記第２演算結果とが一致しない場合、前記第１演算結果を出力しない出力制御部と、を備え、前記第１演算部と前記第２演算部は、前記演算装置内の１つの中央演算処理装置内に備わる異なるハードウェア演算ユニットそれぞれにより構成された演算部であり、前記第１演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第２演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である場合、前記第１演算部が論理演算を行い且つ前記第２演算部が論理演算を浮動小数点演算により模擬して行うか、前記第２演算部が論理演算を行うハードウェア演算ユニットにより構成された演算部であり且つ前記第１演算部が浮動小数点演算を行うハードウェア演算ユニットにより構成された演算部である場合、前記第１演算部が浮動小数点演算を行い且つ第２演算部がエミュレーションにより整数演算を行うことを特徴としている。
【発明の効果】
【００１１】
本発明によれば、１つの中央演算装置が、第１演算部と第２演算部を備え、入力値を第１の演算方式で演算する第１演算部と、第１演算部が演算した第１演算結果と、入力値を第２の演算方式で演算した第２演算結果とが一致するか否かを判定する第２演算部と、第２演算部の判定結果に基づき第１演算結果と第２演算結果とが一致するか否か判定し、出力を行うか否かを制御する出力制御部を備えるようにしたので、安価にコモンモード故障の可能性を低くすることができる安全装置を実現することができる。
【図面の簡単な説明】
【００１２】
【図１】第１実施形態に係る安全装置の構成図である。
【図２】同実施形態に係る演算装置の構成図である。
【図３】同実施形態に係る演算装置のデータの例を説明する図である。
【図４】同実施形態に係る第１演算部と第２演算部が行う演算を説明する図である。
【図５】演算装置が行う演算の概略の一例を説明する図である。
【図６】同実施形態に係る演算装置が行う演算の一例を説明する図である。
【図７】同実施形態に係る安全装置の処理手順のフローチャートである。
【図８】第２実施形態に係る第２実施形態に係る演算装置の構成の一例を説明する図である。
【図９】同実施形態に係る演算ブロックの入出力データの一例を説明する図である。
【図１０】同実施形態に係る逆演算ブロックの入出力データと保持されているデータの一例を説明する図である。
【図１１】同実施形態に係る演算ブロックと逆演算ブロックの構成の一例を説明する図である。
【図１２】同実施形態に係る逆演算ブロックの処理手順を説明する図である。
【図１３】同実施形態に係る逆演算ブロックの処理手順のフローチャートである。
【図１４】第３実施形態に係る入力が１個の場合のデジタル値の演算と逆演算を説明する図である。
【図１５】同実施形態に係る入力が２個の場合のデジタル値の演算と逆演算を説明する図である。
【図１６】従来技術に係る安全装置の構成図である。
【発明を実施するための形態】
【００１３】
以下、図面を用いて本発明の実施形態について詳細に説明する。なお、本発明は係る実施形態に限定されず、その技術思想の範囲内で種々の変更が可能である。
【００１４】
［第１実施形態］
図１は、本実施形態に係る安全装置の構成図である。なお、本実施形態の安全装置は、火力プラント、水力プラント、電力プラントなどのプラントに適用する例を説明するが、工場の生産ライン、ビルのメンテナンスシステム、大型空調システムなどの分散型制御による安全装置が用いられているシステムにも適用してもよい。
【００１５】
図１に示すように、本実施形態に係る安全装置１００は、入力装置２、演算装置３ａ〜演算装置３ｄ、出力装置４を備えている。また、安全装置１００は、アクチュエータ５に接続されている。
アクチュエータ５は、例えば、発電用のガスタービンの燃料供給を強制停止する弁である。また、安全装置１００には、センサ１が取り付けられている。アクチュエータ５は、安全装置１００が出力する指令値に基づき動作する。
センサ１は、熱量や流量などのアナログ値を検出する。また、センサ１は、アクチュエータ５に取り付けられている不図示の各種スイッチの論理状態などのデジタル値を検出する。センサ１は、アナログ値を検出した結果を示すアナログ値の検出値と、デジタル値を検出した結果を示すデジタル値の検出値とを、安全装置１００に出力する。
【００１６】
安全装置１００の入力装置２は、センサ１が出力するアナログ値の検出値とデジタル値の検出値とを、演算装置３ａ〜演算装置３ｄに出力する。
演算装置３ａは、入力装置２が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置４に出力する。
演算装置３ｂは、入力装置２が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置４に出力する。
演算装置３ｃは、入力装置２が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置４に出力する。
演算装置３ｄは、入力装置２が出力するアナログ値の検出値とデジタル値の検出値とを、それぞれ演算し、演算結果を出力装置４に出力する。
出力装置４は、演算装置３ａ〜演算装置３ｄが出力する演算結果に対して、後述するように多数決処理を行い、多数決結果に基づき選ばれた演算結果を指令値としてアクチュエータ５に出力する。
以下、演算装置３ａ〜演算装置３ｄを総称して「演算装置３」と称する。
【００１７】
図２は、本実施形態に係る演算装置の構成図である。図２に示すように、演算装置３は、振分部３１、第１演算部３２、第２演算部３３、自己診断部３４、出力制御部３５を備えている。また、第１演算部３２は、第１安全機能演算部１０１、第１安全機能演算検証部１０２を備えている。また、第２演算部３３は、第２安全機能演算部１１１、第２安全機能演算検証部１１２を備えている。また、第１演算部３２と第２演算部３３は、例えば、１つのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が有する論理演算装置ＡＬＵ（Arithmetic and Logic Unit）と浮動小数点演算装置ＦＰＵ（Floating Point number processing Unit）で実行される。
【００１８】
振分部３１は、入力装置２が出力するアナログ値の検出値とデジタル値の検出値を、アナログ値の検出値ｉｎａとデジタル値の検出値ｉｎｇとに振り分ける。振分部３１は、デジタル値の検出値ｉｎｇを、第１演算部３２の第１安全機能演算部１０１と、第２演算部３３の第２安全機能演算検証部１１２とに出力する。振分部３１は、アナログ値の検出値ｉｎａを、第１演算部３２の第１安全機能演算検証部１０２と、第２演算部３３の第２安全機能演算部１１１とに出力する。
【００１９】
第１演算部３２は、例えば、論理演算装置ＡＬＵ（Arithmetic and Logic Unit）で実行される。第１演算部３２は、例えばソフトウェアの切換により、第１安全機能演算部１０１と第１安全機能演算検証部１０２とを実現する。
第１安全機能演算部１０１は、振分部３１が出力するデジタル値の検出値ｉｎｇを用いて、アクチュエータ５の制御量である出力値を、論理演算により演算し、演算結果ｏｕｔ１を第２安全機能演算検証部１１２と出力制御部３５とに出力する。
第１安全機能演算検証部１０２は、振分部３１が出力するアナログ値の検出値ｉｎａを、公知の整数演算によるエミュレーションにより、アクチュエータ５の制御量である出力値を演算する。第１安全機能演算検証部１０２は、この演算結果が、第２安全機能演算部１１１による演算結果ｏｕｔ２と一致するか否かを判定する。第１安全機能演算検証部１０２は、判定の結果、第１安全機能演算検証部１０２による演算結果が、第２安全機能演算部１１１による演算結果ｏｕｔ２と一致する場合、演算結果が正常であることを示す情報を出力制御部３５に出力する。第１安全機能演算検証部１０２は、判定の結果、第１安全機能演算検証部１０２による演算結果が、第２安全機能演算部１１１による演算結果ｏｕｔ２と一致しない場合、演算結果が異常であることを示す情報を出力制御部３５に出力する。
なお、第１の演算方式とは、デジタル値の論理演算であり、第２の演算方式とは、整数演算によるエミュレーションにより演算することである。
【００２０】
なお、第１安全機能演算検証部１０２が行う整数演算によるエミュレーションは、例えば、第１演算部３２にアセンブラコードでライブラリに実装されているソフトウェアによるエミュレーションや、マイクロコードでＡＬＵに存在しない操作をエミュレーションすることで、整数の除算や浮動小数点の処理を行う。あるいは、第１演算部３２は、不図示の除算器や浮動小数点ユニットのような別のハードウェア部品や、コプロセッサなどを備えることで、整数の除算や浮動小数点の処理を行う。
【００２１】
第２演算部３３は、例えば、浮動小数点演算装置ＦＰＵ（Floating Point number processing Unit）で実行される。第２演算部３３は、例えばソフトウェアの切換により、第２安全機能演算部１１１と第２安全機能演算検証部１１２とを実現する。
第２安全機能演算部１１１は、振分部３１が出力するアナログ値の検出値ｉｎａを用いて、アクチュエータ５の制御量である出力値を、浮動小数点演算により演算し、演算結果ｏｕｔ２を第１安全機能演算検証部１０２と出力制御部３５とに出力する。
第２安全機能演算検証部１１２は、振分部３１が出力するデジタル値の検出値ｉｎｇを、後述するように論理演算をアナログ演算で模擬し、アクチュエータ５の制御量である出力値を演算する。第２安全機能演算検証部１１２は、この演算結果が、第１安全機能演算部１０１による演算結果ｏｕｔ１と一致するか否かを判定する。第２安全機能演算検証部１１２は、判定の結果、第２安全機能演算検証部１１２による演算結果が、第１安全機能演算部１０１による演算結果ｏｕｔ１と一致する場合、演算結果が正常であることを示す情報を出力制御部３５に出力する。第２安全機能演算検証部１１２は、判定の結果、第１安全機能演算検証部１１２による演算結果が、第１安全機能演算部１０１による演算結果ｏｕｔ１と一致しない場合、演算結果が異常であることを示す情報を出力制御部３５に出力する。
なお、第１の演算方式とは、アナログ値の浮動小数点演算であり、第２の演算方式とは、論理演算をアナログ演算で模擬する演算である。
【００２２】
自己診断部３４は、演算装置３の健全性を診断し、診断結果を出力制御部３５に出力する。自己診断部３４は、例えば、演算装置３に、不図示の電源供給装置から供給された電源電圧の電圧値が、所定の値の範囲であるか否かを判定する。自己診断部３４は、電圧値が所定の範囲の場合を正常と判定し、電圧値が所定の値の範囲外の場合を異常と判定し、判定結果を出力制御部３５に出力する。
出力制御部３５は、第１安全機能演算検証部１０２が出力する情報が、演算結果が正常であることを示す情報である場合、第２安全機能演算部１１１が出力するアナログ値の演算結果を出力装置４に出力する。出力制御部３５は、第２安全機能演算検証部１１２が出力する情報が、演算結果が正常であることを示す情報である場合、第１安全機能演算部１０１が出力するデジタル値の演算結果を出力装置４に出力する。
出力制御部３５は、第１安全機能演算検証部１０２が出力する情報が、演算結果が異常であることを示す情報である場合、第２安全機能演算部１１１が出力するアナログ値の演算結果を出力装置４に出力しない。出力制御部３５は、第２安全機能演算検証部１１２が出力する情報が、演算結果が異常であることを示す情報である場合、第１安全機能演算部１０１が出力するデジタル値の演算結果を出力装置４に出力しない。
【００２３】
図３は、本実施形態に係る演算装置のデータの例を説明する図である。図３において、各列は、演算装置３毎の入力値（ｉｎ）、振分部３１の出力（アナログ値の検出値（ｉｎａ）、およびデジタル値の検出値（ｉｎｇ））、第１安全機能演算部１０１の出力（ｏｕｔ１；論理演算結果１〜４）、第２安全機能演算部１１１の出力（ｏｕｔ２；アナログ演算結果１〜４）である。各行は、演算装置３ａ〜３ｄ毎のデータである。このように、演算装置３ａ〜３ｄには、同一の入力値（ｉｎ）が入力される。そして、演算装置３ａ〜３ｄの振分部３１が、入力値（ｉｎ）を振り分け、デジタル値の検出値（ｉｎｇ）を各々の第１安全機能演算部１０１に出力し、アナログ値の検出値（ｉｎａ）を各々の第２安全機能演算部１１１に出力している。そして、演算装置３ａ〜３ｄの各第１安全機能演算部１０１が、各々、論理演算結果１〜４（ｏｕｔ１）を出力している。また、演算装置３ａ〜３ｄの各第２安全機能演算部１１１が、各々、アナログ演算結果１〜４（ｏｕｔ２）を出力している。
【００２４】
図４は、本実施形態に係る第１演算部３２と第２演算部３３が行う演算を説明する図である。図４に示すように、第１演算部３２の第１安全機能演算部１０１は、デジタル値の検出値に対して論理演算を行う。この演算結果を検証するため、第２演算部３３の第２安全機能検証部１１２は、デジタル値の検出値に対して論理演算をアナログ演算で模擬した演算を行う。
また、第２演算部３３の第２安全機能演算部１１１は、アナログ値の検出値に対してアナログ演算（浮動小数点演算）を行う。この演算結果を検証するために、第１演算部３２の第１安全機能検証部１０２は、アナログ値の検出値に対して整数演算によるエミュレーションを行う。
【００２５】
図５は、演算装置が行う演算の概略の一例を説明する図である。
図５に示すように、演算装置３には、入力装置２が出力するデジタル値の検出値ＤＩＮ１１５１、およびＤＩＮ２１５２、アナログ値の検出値ＡＩＮ３１５３が入力されている。図５において、符号１６１、１６２、および１６３が演算要素である。符号１６１は、論理和の論理演算を行う演算要素であり、符号１６３は、論理積の論理演算を行う演算要素である。また、符号１６２は、入力値が所定の値を超えたときにＨレベル（真または“１”ともいう）の信号を出力する関数の演算を行う演算要素である。このように、演算装置３は、予め演算要素（加算、減算、除算、リミッタ、折れ線関数など）を関数化して記憶している。そして、図５に示すように、演算要素１６１の出力を演算要素１６３の入力に矢印１８１で接続し、演算要素１６２の出力を演算要素１６３の入力に矢印１８２で接続して、ロジックを構成している。演算装置３は、図５に示したような構成図（データフローともいう）から、論理演算を行うプログラムに変換したものを実行する。
【００２６】
図５において、例えば、デジタル値の検出値ＤＩＮ１１５１かＤＩＮ２１５２のどちらかがＨレベル（真または“１”ともいう）の場合、演算要素１６１は、Ｈレベルを演算要素１６３に出力する。そして、アナログ値のＡＩＮ３１５３が所定の値を超えた場合、演算要素１６２はＨレベルを演算要素１６３に出力する。そして、演算要素１６３は、演算要素１６１の出力と、演算要素１６２の出力との論理積を演算して、演算結果ＤＯＵＴ１１７１を算出する。
また、図５に示したのは、演算装置３が行う演算を説明するための概略である。実際の演算は、例えば、アナログ値の検出値ＡＩＮ３１５３が熱量の場合、演算要素１６３は、このアナログ値の検出値ＡＩＮ３１５３が所定の熱量を超えた場合に、熱量を下げるために、アクチュエータ５に熱量を下げる指示を示す情報（例えば、燃料供給を強制停止する弁を閉じる）を算出して、アクチュエータ５に指令値として出力する。
また、例えば、デジタル値の検出値ＤＩＮ１１５１かＤＩＮ２１５２が、アクチュエータ５が備える熱量を設定するためのスイッチの状態を示す検出値の場合、演算装置３は、上記のアナログ値の検出値ＡＩＮ３１５３が所定の熱量を超えた場合に、熱量を下げるために、アクチュエータ５に熱量を下げる指示を示す情報を算出する。そして、演算装置３は、アクチュエータ５に熱量を設定するためのスイッチの状態を指令値として出力する。
以下の説明では、演算装置３の動作の説明を簡略化するために、演算装置３に入力されたデジタル値の検出値、アナログ値の検出値を、各々、別々に演算する例を説明する。
【００２７】
図６は、本実施形態に係る演算装置が行う演算の一例を説明する図である。
図６において、各行はＡＬＵを使った論理演算の例とＦＰＵを使った浮動小数点演算による論理演算の例との対応関係であり、各列は、ＡＬＵを使った論理演算の例と、ＦＰＵを使った浮動小数点演算部による論理演算の例である。図６に示すように、論理演算で用いる値は、真と偽である。また、浮動小数点演算による論理演算で用いる値は、１．０と０．０である。
論理積Ｙ＝（Ｘ１）ＡＮＤ（Ｘ２）は、浮動小数点演算で行う場合、Ｙ＝（Ｘ１）×（Ｘ２）の演算を行う。
論理和Ｙ＝（Ｘ１）ＯＲ（Ｘ２）は、浮動小数点演算で行う場合、Ｙ＝ｆｌｏａｔ（（Ｘ１）＋（Ｘ２））！＝０．０）の演算を行う。なお、演算子「ｆｌｏａｔ」は、４バイト浮動小数点であり、演算子「！＝」は、比較演算子で異なる場合である。すなわち、Ｘ１とＸ２の和が０．０と異なる場合、Ｙ＝１．０であり、Ｘ１とＸ２の和が０の場合、Ｙ＝０．０である。
否定Ｙ＝Ｘ〜は、浮動小数点演算で行う場合、Ｙ＝１．０−Ｘの演算を行う。
排他的論理和Ｙ＝（Ｘ１）＾（Ｘ２）は、浮動小数点演算で行う場合、Ｙ＝ｆａｂｓ（Ｘ１−Ｘ２）の演算を行う。演算子「ｆａｂｓ」は、絶対値を取る演算子である。すなわち、Ｘ１とＸ２との差の絶対値を演算する。
なお、図６には、論理演算を浮動小数点演算で行う一例を示したが、他にも公知の浮動小数点演算を用いることで、否定論理積等の各種の論理演算を浮動小数点演算で実現することができる。
【００２８】
図７は、本実施形態に係る安全装置の処理手順のフローチャートである。
まず、安全装置１００の演算装置３には、入力装置２が出力するアナログ値の検出値とデジタル値の検出値とが入力される。
演算装置３の振分部３１は、入力装置２が出力するアナログ値の検出値とデジタル値の検出値を、アナログ値の検出値ｉｎａとデジタル値の検出値ｉｎｇとに分ける（ステップＳ１）。
振分部３１は、デジタル値の検出値ｉｎｇを、第１演算部３２の第１安全機能演算部１０１と、第２演算部３３の第２安全機能演算検証部１１２とに出力する。振分部３１は、アナログ値の検出値ｉｎａを、第１演算部３２の第１安全機能演算検証部１０２と、第２演算部３３の第２安全機能演算部１１１とに出力する。
【００２９】
次に、第１安全機能演算部１０１は、振分部３１が出力するデジタル値の検出値ｉｎｇを用いて、アクチュエータ５の制御量である出力値を演算し、演算結果ｏｕｔ１を第２安全機能演算検証部１１２と出力制御部３５に出力する（ステップ２）。すなわち、第１安全機能演算部１０１は、デジタル値の検出値ｉｎｇに対して論理演算を、ＡＬＵで実行する。
第２安全機能演算検証部１１２は、振分部３１が出力するデジタル値の検出値ｉｎｇを、論理演算をアナログ演算で模擬により、アクチュエータ５の制御量である出力値を演算する（ステップＳ３）。すなわち、第２安全機能演算検証部１１２は、第１安全機能演算部１０１の演算結果を検証するために、論理演算をアナログ演算で模擬し、ＦＰＵで実行する。
【００３０】
第２安全機能演算検証部１１２は、第２安全機能演算検証部１１２による演算結果が、第１安全機能演算部１０１による演算結果ｏｕｔ１と一致するか否かを判定する（ステップＳ４）。
判定の結果、第２安全機能演算検証部１１２による演算結果が第１安全機能演算部１０１演算結果ｏｕｔ１と一致する場合（ステップＳ４  Ｙｅｓ）、第２安全機能演算検証部１１２は、第１安全機能演算部１０１による演算結果が正常であることを示す情報を出力制御部３５に出力する。
出力制御部３５は、第２安全機能演算検証部１１２が出力する演算結果が正常であることを示す情報に基づき、第１安全機能演算部１０１が出力する演算結果を出力装置４に出力する（ステップＳ５）。
判定の結果、第２安全機能演算検証部１１２による演算結果が第１安全機能演算部１０１による演算結果ｏｕｔ１と一致しない場合（ステップＳ４  Ｎｏ）、第２安全機能演算検証部１１２は、演算結果が異常であることを示す情報を出力制御部３５に出力する。
出力制御部３５は、第２安全機能演算検証部１１２が出力する演算結果が異常であることを示す情報に基づき、第１安全機能演算部１０１が出力する演算結果を出力装置４に出力しない（ステップＳ６）。
【００３１】
次に、第２安全機能演算部１１１は、振分部３１が出力するアナログ値の検出値ｉｎａを用いて、アクチュエータ５の制御量である出力値を演算し、演算結果ｏｕｔ２を第１安全機能演算検証部１０２と出力制御部３５に出力する（ステップＳ７）。すなわち、第２安全機能演算部１１１は、アナログ値の検出値ｉｎａに対してアナログ演算を、ＦＰＵで実行する。
第１安全機能演算検証部１０２は、振分部３１が出力するアナログ値の検出値ｉｎａを、整数演算によるエミュレーションにより演算を行い、アクチュエータ５の制御量である出力値を演算する（ステップＳ８）。すなわち、第１安全機能演算検証部１０２は、第２安全機能演算部１１１の演算結果を検証するために、整数演算をエミュレートして、ＡＬＵで実行する。
【００３２】
第１安全機能演算検証部１０２は、第１安全機能演算検証部１０２による演算結果が、２安全機能演算部１１１による演算結果ｏｕｔ２と一致するか否かを判定する（ステップＳ９）。
判定の結果、第１安全機能演算検証部１０２による演算結果が第２安全機能演算部１１１による演算結果ｏｕｔ２と一致する場合（ステップＳ９  Ｙｅｓ）、第１安全機能演算検証部１０２は、演算結果が正常であることを示す情報を出力制御部３５に出力する。
出力制御部３５は、第１安全機能演算検証部１０２が出力する演算結果が正常であることを示す情報に基づき、第２安全機能演算部１１１が出力する演算結果を出力装置４に出力する（ステップＳ１０）。
判定の結果、第２安全機能演算部１１１による演算結果が第１安全機能演算検証部１０２による演算結果ｏｕｔ２と一致しない場合（ステップＳ９  Ｎｏ）、第１安全機能演算検証部１０２は、演算結果が異常であることを示す情報を出力制御部３５に出力する。
出力制御部３５は、第１安全機能演算検証部１０２が出力する演算結果が異常であることを示す情報に基づき、第２安全機能演算部１１１が出力する演算結果を出力装置４に出力しない（ステップＳ１１）。
【００３３】
次に、出力装置４には、演算装置３ａ〜演算装置３ｄが、ステップＳ１〜ステップＳ１１により演算した演算結果が入力される。出力装置４は、入力された演算結果に対して多数決処理を行い、多数決処理に基づき指令値をアクチュエータ５に出力する（ステップＳ１２）。
【００３４】
なお、本実施形態では、演算装置３の出力制御部３５は、第２安全機能演算検証部１１２が出力する演算結果が異常の場合、第１安全機能演算部１０１が出力する演算結果を出力装置４に出力しない例を説明した。出力制御部３５は、第２安全機能演算検証部１１２が出力する演算結果が異常の場合、演算装置３に異常があるため、出力装置４に、演算装置３に異常があることを示す情報を送るようにしてもよい。同様に、出力制御部３５は、第１安全機能演算検証部１０２が出力する演算結果が異常の場合、演算装置３に異常があるため、出力装置４に、演算装置３に異常があることを示す情報を送るようにしてもよい。
出力装置４は、演算装置３が出力する異常があることを示す情報が入力された場合、例えば、不図示の表示部に異常が発生している演算装置３の固有の番号等を表示して、安全装置１００の使用者に知らせるようにしてもよい。この場合、演算装置３内で、異なるハードウェア（ＡＬＵとＦＰＵ）と異なるソフトウェア（異なる演算方式）で２重に演算結果を確認しているため、演算装置３の異常を検出することもできる効果がある。
なお、異なる演算方式とは、例えばデジタル値に対する論理演算とアナログ値に対する浮動少数点演算であり、または、デジタル値に対する浮動小数点演算による論理演算とアナログ値に対する整数演算のエミュレーションによる演算などである。
【００３５】
次に、出力装置４が行う多数決処理について説明する。
演算装置３ａ〜演算装置３ｄから、４つの演算結果が入力された場合、出力装置４は、４つの演算結果で多数決を行い、例えば、４つのうち２つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ５に出力する。なお、安全側を制御する出力値とは、制御対象を安全な状態に制御する出力で、予め設定しておく。
演算装置３ａ〜演算装置３ｄから、３つの演算結果が入力された場合、すなわち、１つの演算結果が異常のため演算装置３により出力されなかった場合、出力装置４は、３つの演算結果で多数決を行い、例えば、３つのうち２つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ５に出力する。
演算装置３ａ〜演算装置３ｄから、２つの演算結果が入力された場合、すなわち、２つの演算結果が異常のため演算装置３により出力されなかった場合、出力装置４は、２つの演算結果のうち１つ以上が安全側を制御する出力値であれば、安全側を制御する出力値をアクチュエータ５に出力する。安全側を制御する出力値が１つ以上なかった場合、予め設定してある所定の出力順序に従って、入力された演算結果のうちの一方の演算結果を指令値としてアクチュエータ５に出力する。
演算装置３ａ〜演算装置３ｄから、１つの演算結果が入力された場合、すなわち、３つの演算結果が異常のため演算装置３により出力されなかった場合、出力装置４は、入力された演算結果を指令値としてアクチュエータ５に出力する。
演算装置３ａ〜演算装置３ｄから、１つも演算結果が入力されない場合、すなわち、４つの演算結果が異常のため演算装置により出力されなかった場合、出力装置４は、予め設定されている安全動作のための制御値を指令値としてアクチュエータ５に出力する。
【００３６】
なお、上述した多数決処理は、出力装置５が、アナログの検出値に対する演算値、デジタル値に対する検出値に対する演算値のそれぞれに行う。
また、図７に示したフローチャートにおいて、例えば、ステップＳ２とステップＳ７の演算を、第１安全機能演算部１０１と第２安全機能演算部１１１が並行して行うようにしてもよい。また、ステップＳ３、Ｓ４とステップＳ８〜Ｓ９を、第１安全機能演算検証部１０２と第２安全機能演算検証部１１２が並行して行うようにしてもよい。
また、図１の構成例では、演算装置３を多重にする例を示したが、本実施形態の安全装置１００を用いる場合、１つの演算装置３内で異なるハードウェアとソフトウェアで確認しているため、多重化せずに演算装置３は１つでもよい。
【００３７】
以上のように、本実施形態の安全装置１００は、１つのＣＰＵ（演算装置３）のＡＬＵ（第１演算部３２）とＦＰＵ（第２演算部３３）を用いて、入力値からおのおの異なるハードウェアと異なる演算方式を用いて演算している。この結果、演算の信頼性を上げる効果もあり、また、ＣＰＵ内の故障も検知することができる。また、本実施形態の安全装置１００は、第１演算部３２が、論理演算を行い、第２演算部３３が、浮動小数点演算により異なる演算方式を使って演算しているため、ソフトウェアにも多様性を持たせることができる。この結果、コモンモード故障の可能性を低くすることができる。
【００３８】
なお、本実施形態では、演算装置３が、１つのＣＰＵが備えるＡＬＵとＦＰＵを例として説明したが、デジタル信号プロセッサＤＳＰを備えるＣＰＵであれば、ＤＳＰによりＡＬＵとＦＰＵを構成するようにしてもよい。または、１つのデジタル信号プロセッサＤＳＰにより、ＡＬＵ（第１演算部３２）とＦＰＵ（第２演算部３３）を構成するようにしてもよい。
【００３９】
［第２実施形態］
図８は、本実施形態に係る演算装置の構成の一例を説明する図である。図８に示すように、演算装置３００は、第１演算部３２ａ、第２演算部３３ａを備えている。また、図８には示していないが、第１実施形態の図２と同様に、演算装置３００は、振分部３１、自己診断部３４、出力制御部３５を備えている。また、第２演算部３３ａは、入力データ部２０１、演算ブロック（１）２０２、演算部ブロック（ｊ）２０３、演算部ブロック（ｍ）２０４、出力データ部２０５を備えている。第１演算部３２ａは、逆演算用入力データ部２１１、逆演算ブロック（１）２１２、逆演算部ブロック（ｊ）２１３、逆演算部ブロック（ｍ）２１４、逆演算出力部２１５を備えている。
【００４０】
まず、演算装置３００で行う処理の概要を説明する。また、以下の説明では、入力値がアナログ値の検出値のみであるとして説明を行う。
演算装置３００の振分部３１は、入力装置２（図１）が出力するアナログ値の検出値を第２演算部３３ａに出力する。第２演算部３３ａでは、入力されたアナログ値の検出値を、順次、演算ブロック（１）２０２〜演算部ブロック（ｍ）２０４により演算する。また、第２演算部３３ａは、演算結果と演算の途中で使用した要素を、後述するように第１演算部３２ａの逆演算ブロック（１）２１２〜逆演算部ブロック（ｍ）２１４に出力する。第１演算部３２ａは、入力された演算結果と演算の途中で使用した要素を用いて、逆演算ブロック（１）２１１〜逆演算部ブロック（ｍ）２１４により逆演算を行い、演算結果を検証する。また、第１実施形態と同様に、第１演算部３２ａと第２演算部３３ａは、例えば、１つのＣＰＵ（演算装置３）が備えるＡＬＵとＦＰＵである。
【００４１】
第２演算部３３ａの入力データ部２０１は、振分部３１が出力するアナログ値の検出値を演算ブロック（１）２０２に出力する。また、入力データ部２０１は、入力されたアナログ値の検出値を記憶する。
演算部ブロック（１）２０２〜演算部ブロック（ｍ）２０４は、振分部３１が出力するアナログ値の検出値に基づいて、安全機能の出力を生成するのに必要な演算を行うために構成されている。
演算部ブロック（１）２０２は、入力データ部２０１が出力するアナログ値の検出値を用いて、所定の関数Ｆ１により演算を行う。演算部ブロック（１）２０２は、演算結果（Ｙ1ｎ）、を演算部ブロック（ｊ）２０３に出力する。さらに演算部ブロック（１）２０２は、入力されたアナログ値の検出値ｉｎ（Ｘ１ｎ）、演算結果（Ｙ１ｎ）、演算の途中で使用した要素（Ｗ１ｎ、Ｖ１ｎ）を逆演算ブロック（１）２１２に出力する。また、演算部ブロック（１）２０２は、前回の演算の途中で使用した要素（Ｗ１（ｎ−１））を記憶している。なお、添え字ｎは、今回の演算による値を表し、ｎ−１は前回の演算による値表している。
【００４２】
演算部ブロック（ｊ）２０３は、演算部ブロック（１）２０２が出力する演算結果（Ｙ１ｎ（＝Ｘｊｎ））を用いて、所定の関数Ｆ２により演算を行う。演算部ブロック（ｊ）２０３は、演算結果（Yｊｎ）、を演算部ブロック（ｍ）２０３に出力する。さらに演算部ブロック（ｊ）２０３は、演算部ブロック（１）２０２が出力する演算結果（Ｙ１ｎ（＝Ｘｊｎ））、演算結果（Ｙｊｎ）、演算の途中で使用した要素（Ｗｊｎ、Ｖｊｎ）を逆演算ブロック（ｊ）２１３に出力する。また、演算部ブロック（ｊ）２０３は、前回の演算の途中で使用した要素（Ｗｊ（ｎ−１））を記憶している。
【００４３】
演算部ブロック（ｍ）２０４は、演算部ブロック（ｊ）２０３が出力する演算結果（Ｙｊｎ（＝Ｘｍｎ））を用いて、所定の関数Ｆ３により演算を行う。演算部ブロック（ｍ）２０４は、演算結果（Yｍｎ）、を出力データ部２０５に出力する。さらに演算部ブロック（ｍ）２０４は、演算部ブロック（ｊ）２０３が出力する演算結果（Ｙｊｎ（＝Ｘｍｎ））、演算結果（Ｙｍｎ）、演算の途中で使用した要素（Ｗｍｎ、Ｖｍｎ）を逆演算ブロック（ｍ）２１４に出力する。また、演算部ブロック（ｍ）２０４は、前回の演算の途中で使用した要素（Ｗｍ（ｎ−１））を記憶している。
【００４４】
出力データ部２０５は、演算部ブロック（ｍ）２０４が出力する演算結果が入力されたことに応じて、演算部ブロック（１）２０１〜演算部ブロック（ｍ）２０４の演算が終了したと判断する。また、  出力データ部２０５は、演算が終了したことを示す情報を逆演算出力部２１５に出力する。
【００４５】
逆演算出力部２１５は、出力データ部２０５が出力する演算が終了したことを示す情報に基づき、逆演算ブロック（ｍ）２１４に逆演算を開始する情報を出力する。
逆演算部ブロック（１）２１２〜演算部ブロック（ｍ）２１４は、演算部ブロック（１）２０１〜演算部ブロック（ｍ）２０４が出力するアナログ値の検出値ｉｎ（Ｘ１ｎ）、演算結果（Ｙ１ｎ（＝Ｘｊｎ））、（Ｙｊｎ（＝Ｘｍｎ））、および（Ｙｍｎ）、演算の途中で用いた要素（Ｗ１ｎ、Ｖ１ｎ）、（Ｗｊｎ、Ｖｊｎ）および（Ｗｍｎ、Ｖｍｎ）に基づいて、逆演算を行うために構成されている。
【００４６】
逆演算部ブロック（ｍ）２１４は、逆演算出力部２１５が出力する逆演算を開始する情報に基づき、演算部ブロック（ｍ）２０４が出力する演算結果（Ｙｊｎ（＝Ｘｍｎ））、演算結果Ｙｍｎ、演算の途中で使用した要素（Ｗｍｎ、Ｖｍｎ）を用いて、所定の関数Ｆ３−１により逆演算を行う。逆演算部ブロック（ｍ）２１４は、逆演算を開始する情報を逆演算部ブロック（ｊ）２１３に出力する。
また、逆演算部ブロック（ｍ）２１４は、逆演算結果Ｘｍｎ’が、演算結果Ｘｊｎと一致するか否かを判定する（不一致チェックともいう）。判定の結果、逆演算結果Ｘｍｎ’と演算結果Ｘｊｎとが一致した場合、逆演算部ブロック（ｍ）２１４は、演算部ブロック（ｍ）２０４の演算結果が正常であると判定する。判定の結果、逆演算結果Ｘｍｎ’と演算結果Ｘｊｎとが一致しない場合、逆演算部ブロック（ｍ）２１４は、演算部ブロック（ｍ）２０４の演算結果が異常であると判定する。逆演算部ブロック（ｍ）２１４は、判定結果を、出力制御部３５に出力する。
また、逆演算部ブロック（ｍ）２１４は、逆演算の途中で使用した要素Ｗｍ（ｎ−１）’が、記憶されている前回の周期の逆演算の途中で使用した要素Ｗｍ（ｎ−１）と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Ｗｍ（ｎ−１）’と前回の周期の逆演算の途中で使用した要素Ｗｍ（ｎ−１）とが一致した場合、逆演算部ブロック（ｍ）２１４は、演算部ブロック（ｍ）２０４の演算結果が正常であると判定する。また、逆演算部ブロック（ｍ）２１４は、入力された演算の途中で使用した要素Ｗｍｎを次回の周期の逆演算で使用できるようにＷｍ（ｎ−１）’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Ｗｍ（ｎ−１）’と逆演算の途中で使用した要素Ｗｍ（ｎ−１）とが一致しない場合、逆演算部ブロック（ｍ）２１４は、演算部ブロック（ｍ）２０４の演算結果が異常であると判定する。逆演算部ブロック（ｍ）２１４は、判定結果を、出力制御部３５に出力する。
【００４７】
逆演算部ブロック（ｊ）２１３は、逆演算部ブロック（ｍ）２１４が出力する逆演算を開始する情報に基づき、演算部ブロック（ｊ）２０３が出力する演算結果Ｘ１、演算結果Ｘｊ、演算の途中で使用した要素（Ｗｊｎ、Ｖｊｎ）を用いて、所定の関数Ｆ２−１により逆演算を行う。逆演算部ブロック（ｊ）２１３は、逆演算を開始する情報を逆演算部ブロック（１）２１２に出力する。
また、逆演算部ブロック（ｊ）２１３は、逆演算結果Ｘｊｎ’が、演算結果Ｘｊｎと一致するか否かを判定する。判定の結果、逆演算結果Ｘｊｎ’と演算結果Ｘｊｎとが一致した場合、逆演算部ブロック（ｊ）２１３は、演算部ブロック（ｊ）２０３の演算結果が正常であると判定する。判定の結果、逆演算結果Ｘｊｎ’と演算結果Ｘｊｎとが一致しない場合、逆演算部ブロック（ｊ）２１３は、演算部ブロック（ｊ）２０３の演算結果が異常であると判定する。逆演算部ブロック（ｊ）２１３は、判定結果を、出力制御部３５に出力する。
また、逆演算部ブロック（ｊ）２１３は、逆演算の途中で使用した要素Ｗｊ（ｎ−１）’が、前回の周期の逆演算の途中で使用した要素Ｗｊ（ｎ−１）と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Ｗｊ（ｎ−１）’と前回の周期の逆演算の途中で使用した要素Ｗｊ（ｎ−１）とが一致した場合、逆演算部ブロック（ｊ）２１３は、演算部ブロック（ｊ）２０３の演算結果が正常であると判定する。また、逆演算部ブロック（ｊ）２１３は、入力された演算の途中で使用した要素Ｗｊｎを次回の周期の逆演算で使用できるようにＷｊ（ｎ−１）’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Ｗｊ（ｎ−１）’と前回の周期の逆演算の途中で使用した要素Ｗｊ（ｎ−１）とが一致しない場合、逆演算部ブロック（ｊ）２１３は、演算部ブロック（ｊ）２０３の演算結果が異常であると判定する。逆演算部ブロック（ｊ）２１３は、判定結果を、出力制御部３５に出力する。
【００４８】
逆演算部ブロック（１）２１２は、逆演算部ブロック（ｊ）２１３が出力する逆演算を開始する情報に基づき、演算部ブロック（１）２０１が出力するアナログ値の検出値ｉｎ、演算結果Ｘ１、演算の途中で使用した要素（Ｗ１、Ｖ１）を用いて、所定の関数Ｆ１−１により逆演算を行う。逆演算部ブロック（１）２１２は、逆演算が終了したことを示す情報を逆縁算用入力データ部２１１に出力する。
また、逆演算部ブロック（１）２１２は、逆演算結果Ｘ１ｎ’が、アナログ値の検出値ｉｎと一致するか否かを判定する。判定の結果、逆演算結果Ｘ１ｎ’とアナログ値の検出値ｉｎとが一致した場合、逆演算部ブロック（１）２１３は、演算部ブロック（１）２０２の演算結果が正常であると判定する。判定の結果、逆演算結果Ｘ１ｎ’とアナログ値の検出値ｉｎとが一致しない場合、逆演算部ブロック（１）２１２は、演算部ブロック（１）２０２の演算結果が異常であると判定する。逆演算部ブロック（１）２１２は、判定結果を、出力制御部３５に出力する。
また、逆演算部ブロック（１）２１２は、逆演算の途中で使用した要素Ｗ１（ｎ−１）’が、前回の周期の逆演算の途中で使用した要素Ｗ１（ｎ−１）と一致するか否かを判定する。判定の結果、逆演算の途中で使用した要素Ｗ１（ｎ−１）’と前回の周期の逆演算の途中で使用した要素Ｗ１（ｎ−１）とが一致した場合、逆演算部ブロック（１）２１２は、演算部ブロック（１）２０２の演算結果が正常であると判定する。また、逆演算部ブロック（１）２１２は、入力された演算の途中で使用した要素Ｗ１ｎを次回の周期の逆演算で使用できるようにＷ１（ｎ−１）’に上書きして保存する。
判定の結果、逆演算の途中で使用した要素Ｗ１ｎ’と前回の周期の逆演算の途中で使用した要素Ｗ１（ｎ−１）とが一致しない場合、逆演算部ブロック（１）２１２は、演算部ブロック（１）２０２の演算結果が異常であると判定する。逆演算部ブロック（１）２１２は、判定結果を、出力制御部３５に出力する。
【００４９】
逆演算用入力データ部２１１は、演算部ブロック（１）２１２が出力する逆演算が終了したことを示す情報を、出力制御部３５に出力する。
出力制御部３５は、逆演算用入力データ部２１１が出力する逆演算が終了したことを示す情報、逆演算部ブロック（１）２１２〜逆演算部ブロック（ｍ）２１４が出力する判定結果に基づき、演算部ブロック（１）２０２〜演算部ブロック（ｍ）２０４の演算が正常である場合、演算部ブロック（ｍ）２０４の演算結果を指令値として出力装置４に出力する。
【００５０】
なお、演算部ブロック（１）２０２〜演算部ブロック（ｍ）２０４で用いる所定の関数Ｆ１〜Ｆ３、逆演算部ブロック（１）２１２〜逆演算部ブロック（ｍ）２１４で用いる所定の関数Ｆ１−１〜Ｆ３−１は、予め入力値に基づいて、安全装置１００の設計者が予め設定しておく。
【００５１】
なお、本実施形態では、演算部ブロック（１）２０２〜演算部ブロック（ｍ）２０４の全ての演算が終了した後、逆演算部ブロック（１）２１２〜逆演算部ブロック（ｍ）２１４が逆演算を行う例を説明した。例えば、各演算部ブロック（１）２０２の演算が終了した後、逆演算部ブロック（１）２１２が逆演算を行うようにしてもよい。
【００５２】
図９は、本実施形態に係る演算ブロックと逆演算ブロックの入出力データの一例を説明する図である。図１０は、本実施形態に係る逆演算ブロックの入出力データと保持されているデータの一例を説明する図である。
図９に示すように、演算ブロック（１）２０２〜演算ブロック（ｍ）２０４は、それぞれＸｎが入力され、それぞれＹｎ、Ｗｎ、およびＶｎを出力する。
図１０に示すように、逆演算ブロック（１）２１２〜逆演算ブロック（ｍ）２１４は、それぞれＹｎ、Ｗｎ、Ｖｎ、およびＸｎが入力され、Ｘｎ’を出力する。また、逆演算ブロック（１）２１２〜逆演算ブロック（ｍ）２１４は、それぞれ前回の周期のＷ（ｎ−１）を保持している。
【００５３】
次に、演算ブロック（１）２０２〜演算ブロック（ｍ）２０４、逆演算ブロック（１）２０２〜逆演算ブロック（ｍ）２０４が行う処理について、図１１〜図１３を用いて説明する。図１１は、本実施形態に係る演算ブロックと逆演算ブロックの構成の一例を説明する図である。図１２は、本実施形態に係る逆演算ブロックの処理手順を説明する図である。図１３は、本実施形態に係る逆演算ブロックの処理手順のフローチャートである。
【００５４】
図１１（ａ）と図１１（ｂ）は、図８における演算ブロックの破線で囲んだ２２０の演算ブロック（ｊ）２０３と逆演算ブロック（ｊ）２１３の構成の一例である。
図１１（ａ）に示すように、演算ブロック（ｊ）２０３は、Ｘｊｎ、Ｗｊ（ｎ−１）を入力値として用い、Ｙｊｎ、ＷｊｎおよびＶｊｎを出力値として用いて演算を行う。図１１（ｂ）に示すように、逆演算ブロック（ｊ）２１３は、Ｙｊｎ、ＷｊｎおよびＶｊｎを入力値として用い、Ｘｊｎ’、Ｗｊ（ｎ−１）’を出力値として用いて逆演算を行う。
図１１（ａ）と図１１（ｂ）において、添え字ｎは、今回の周期のデータ、添え字ｎ−１は、前回の周期のデータである。また、Ｘｊｎは、入力列、Ｙｊｎは、出力列である。さらに、Ｗｊｎは、中間データ列(出力を計算するまでの途中の主要な演算値)、Ｖｊｎは、Ｘｊｎと Ｗｊ（ｎ−１）を一意的に求めるために必要な中間データである。Ｘｊｎ’は、Ｘｊｎの逆演算値、Ｗｊ（ｎ−１）’は、Ｗｊ（ｎ−１）の逆演算値であり、Ｗｊ（ｎ−１）は、逆縁算用に前回の周期のＷｊｎをコピーしたデータ列である。
図１１（ａ）に示すように、演算ブロック（ｊ）２０３は、入力値のＸｊｎとＷｊ（ｎ−１）を所定の関数Ｆ２を用いて、Ｙｊｎ、Ｗｊｎ、Ｖｊｎを演算する。
図１１（ｂ）に示すように、逆演算ブロック（ｊ）２１３は、入力値のＹｊｎとＷｊｎおよびＶｊｎを所定の関数Ｆ２−１を用いて、Ｘｊｎ’Ｗｊ（ｎ−１）’を演算する。
【００５５】
次に、逆演算ブロック（ｊ）２１２が行う逆演算の手順を詳細に説明する。
まず、逆演算ブロック（ｊ）２１２は、演算ブロック（ｊ）２０２の演算結果Ｙｊｎを入力値としてコピーする（ステップＳ１０１、図１２のＣ１、Ｃ２）。
次に、逆演算ブロック（ｊ）２１２は、演算ブロック（ｊ）２０２の演算の途中で使用した要素ＷｊｎとＶｊｎを、入力値としてコピーする（ステップＳ１０２、図１２のＣ３）。
次に、逆演算ブロック（ｊ）２１２は、演算ブロック（ｊ）２０２への入力値であるＸｊｎを、出力値としてコピーする（ステップＳ１０３、図１２のＣ４）。
次に、逆演算ブロック（ｊ）２１２は、Ｘｊｎ’とＷｊ（ｎ−１）’を、コピーした入力値Ｙｊｎ、Ｗｊｎ、およびＶｊｎを用いて、所定の関数Ｆ２−１により逆演算する（ステップＳ１０４、図１３のＣ５）。
【００５６】
次に、逆演算ブロック（ｊ）２１２は、逆演算により求めたＸｊｎ’と、コピーしたＸｊｎとが一致するか否かを判定する（ステップＳ１０５）。
判定の結果、逆演算により求めたＸｊｎ’と、コピーしたＸｊｎとが一致する場合（ステップＳ１０５  Ｙｅｓ）、ステップＳ１０７に進む。判定の結果、逆演算により求めたＸｊｎ’と、コピーしたＸｊｎとが一致しない場合（ステップＳ１０５  Ｎｏ）、ステップＳ１０６に進む。
【００５７】
次に、逆演算ブロック（ｊ）２１２は、逆演算の途中で使用した要素Ｗｊ（ｎ−１）’と、コピーしたＷｊ（ｎ−１）とが一致するか否かを判定する（ステップＳ１０７、図１２のＣ６）。
判定の結果、逆演算により求めたＷｊ（ｎ−１）’と、コピーしたＷｊ（ｎ−１）とが一致する場合（ステップＳ１０７  Ｙｅｓ）、ステップＳ１０８に進む。判定の結果、逆演算により求めたＷｊｎ’と、コピーしたＷｊ（ｎ−１）とが一致しない場合（ステップＳ１０７  Ｎｏ）、ステップＳ１０６に進む。
【００５８】
逆演算ブロック（ｊ）２１２は、演算結果、または演算の途中で使用した要素が一致しなかったため、異常と判定し、判定結果を出力の制御装部３５に出力する（ステップＳ１０６）。
【００５９】
逆演算ブロック（ｊ）２１２は、演算結果と、演算の途中で使用した要素とが一致したため、正常と判定し、判定結果を出力の制御装部３５に出力する。また、逆演算ブロック（ｊ）２１２は、コピーしたＷｊｎを次回の周期の逆演算チェックで使用できるようにＷｊ（ｎ−１）’に上書きして保存する（ステップＳ１０８、図１２のＣ７）。
【００６０】
以上のように、本実施形態では、第２演算部３３が算出した演算結果に対し、第１演算部３２が第２演算部３３で算出された演算結果と演算途中で使用された要素を用いて逆演算を行う。そして、第１演算部３２は、逆演算した演算結果が、第２演算部３３（ＦＰＵ）が算出した演算結果の入力値と一致するか判定する。さらに、第１演算部３２（ＡＬＵ）は、逆演算の途中で使用した要素が前回の周期で使用した要素と一致するかも判定する。この結果、異なるハードウェアかつ異なるソフトウェアにより、演算結果が正しいかをチェックすることができるので、安価にコモンモード故障の可能性を低くすることができる。
【００６１】
なお、本実施形態では、演算ブロック（１）２０２〜演算ブロック（ｍ）２０４、逆演算ブロック（１）２１２〜逆演算ブロック（ｍ）２１４のように、３個ずつ用いる例を説明したが、演算ブロックおよび逆演算ブロックの数はこれに限らず、検出される検出値や指令値に基づいて決めるようにしてもよい。
また、本実施形態の構成に実施形態１の構成を加えるようにしてもよい。この場合、第２演算部３３が算出した演算結果に対し、第１演算部３２が逆演算と、順方向の演算を行うこととで、さらに信頼性を上げることができる。
また、本実施形態では、図８のように１つの演算装置３についてのみ用いる例を説明したが、図１と同様に、演算装置３を多重化してもよい。
【００６２】
［第３実施形態］
第２実施形態では、アナログ値の検出値が演算装置３に入力された場合、第２演算部３３ａが演算した演算結果に対して、第１演算部３２ａが逆演算して判定する例を説明した。本実施形態では、デジタル値の検出値が演算装置３に入力された場合、第１演算部３３ａが演算した演算結果に対して、第２演算部３３ａが逆演算して判定する例を説明する。なお、第２演算部３３ａは、第１実施形態で説明したように、デジタル値を浮動小数点演算により論理演算することで行う。
【００６３】
図１４は、本実施形態に係る入力が１個の場合のデジタル値の演算と逆演算を説明する図である。図１４（ａ）は、順方向の演算を説明する図であり、図１４（ｂ）は、逆演算を説明する図である。
図１４（ａ）に示すように、入力が１個、出力が１個の場合、入力Ｘｎに対して所定の関数Ｆにより出力Ｙｎが演算できる。このため、図１４（ｂ）に示すように、出力Ｙｎに、関数Ｆ−１を行うことで、Ｘｎ’が逆演算でき、逆演算したＸｎ’とＸｎとを比較することで、演算が正常か否かを判定できる。このような演算として、例えば、ＮＯＴ論理（否定）がある。
【００６４】
図１５は、本実施形態に係る入力が２個の場合のデジタル値の演算と逆演算を説明する図である。図１５（ａ）は、順方向の演算を説明する図であり、図１５（ｂ）は、逆演算を説明する図である。
図１５（ａ）に示すように、入力が２個、出力が１個の場合、入力Ｘ１とＸ２に対して所定の関数Ｆにより出力Ｙｎが演算できる。このため、出力Ｙｎのみでは、入力Ｘ１、Ｘ２を一意に求めることができないため、例えば、図１５（ｂ）に示すように、入力Ｘ２と、出力Ｙｎを入力とし、所定の関数Ｆ−１により、Ｘ１’を演算し、演算したＸ１’と入力のＸ１とを比較することで演算が正常か否かを判定できる。このような演算として、例えば、ＡＮＤ論理（論理積）、ＯＲ論理（論理和）などがある。
【００６５】
以上のように、本実施形態では、第１演算部３２（ＡＬＵ）が算出した演算結果に対し、第２演算部３３（ＦＰＵ）が第１演算部３２で算出された演算結果と演算途中で使用された要素を用いて逆演算を行う。そして、第２演算部３３（ＦＰＵ）は、逆演算した演算結果が、第１演算部３２（ＡＬＵ）が算出した演算結果の入力値と一致するか判定する。さらに、第２演算部３３（ＦＰＵ）は、逆演算の途中で使用した要素が前回の周期で使用した要素と一致するかも判定する。この結果、異なるハードウェアかつ異なるソフトウェアにより、演算結果が正しいかをチェックすることができるので、安価にコモンモード故障の可能性を低くすることができる。
【００６６】
また、本実施形態の構成に実施形態１の構成を加えるようにしてもよい。この場合、第１演算部３２が算出した演算結果に対し、第２演算部３３が逆演算と、順方向の演算を行うこととで、さらに信頼性を上げることができる。
また、本実施形態の構成に実施形態２の構成を加えるようにしてもよい。この場合、アナログ値の検出値に対してもデジタル値の検出値に対しても、異なるハードウェア、ソフトウェアで逆演算して比較しているため、コモンモード故障の可能性を低くすることができる。
また、本実施形態では、図８のように１つの演算装置３についてのみ用いる例を説明したが、図１と同様に、演算装置３を多重化してもよい。
【００６７】
なお、本実施形態では、１つの演算装置３にＡＬＵとＦＰＵを備え、第１演算部３２の演算がＡＬＵで実行され、第２演算部３３の演算がＦＰＵで実行される例を説明したが、例えばＲＩＳＣ（Reduced Instruction Set Computer）プロセッサの場合、スーパースケーラによりＦＰＵをＡＬＵと並列に動作させることができるため、本実施形態を実現することができる。また、１つのＣＰＵ内に複数の演算部を備える、例えばデュアル・コア・プロセッサを演算装置３に用いても、本実施形態と同様の効果を得ることができる。
【符号の説明】
【００６８】
１００・・・安全装置
２・・・入力装置
３、３ａ〜３ｄ、３００・・・演算装置
４・・・出力装置
３１・・・振分部
３２、３２ａ・・・第１演算部
３３、３３ａ・・・第２演算部
３４・・・自己診断部
３５・・・出力制御部
１０１・・・第１安全機能演算部
１０２・・・第１安全機能演算検証部
１１１・・・第２安全機能演算部
１１２・・・第２安全機能演算検証部
２０１・・・入力データ部
２０２〜２０４・・・演算ブロック（１）〜演算部ブロック（ｍ）
２１２〜２１４・・・逆演算ブロック（１）〜逆演算部ブロック（ｍ）
２０５・・・出力データ部
２１１・・・逆演算用入力データ部
２１５・・・逆演算出力部
【図１】
0005683294.tif 000002
【図２】
0005683294.tif 000003
【図３】
0005683294.tif 000004
【図４】
0005683294.tif 000005
【図５】
0005683294.tif 000006
【図６】
0005683294.tif 000007
【図７】
0005683294.tif 000008
【図８】
0005683294.tif 000009
【図９】
0005683294.tif 000010
【図１０】
0005683294.tif 000011
【図１１】
0005683294.tif 000012
【図１２】
0005683294.tif 000013
【図１３】
0005683294.tif 000014
【図１４】
0005683294.tif 000015
【図１５】
0005683294.tif 000016
【図１６】
0005683294.tif 000017