(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-20
(45)【発行日】2022-06-28
(54)【発明の名称】保安装置
(51)【国際特許分類】
G06F 11/14 20060101AFI20220621BHJP
B61L 19/06 20060101ALI20220621BHJP
【FI】
G06F11/14 687
B61L19/06
(21)【出願番号】P 2018137054
(22)【出願日】2018-07-20
【審査請求日】2021-06-04
(73)【特許権者】
【識別番号】000004651
【氏名又は名称】日本信号株式会社
(74)【代理人】
【識別番号】110000752
【氏名又は名称】特許業務法人朝日特許事務所
(72)【発明者】
【氏名】森 昌也
(72)【発明者】
【氏名】佐藤 純
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開平11-192949(JP,A)
【文献】特開平10-283215(JP,A)
【文献】特開平06-342369(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/14
B61L 19/06
(57)【特許請求の範囲】
【請求項1】
異なる論理で同じ処理の実行を指示する複数の呼出元プログラムのうちの一つの呼出元プログラム呼び出しに応じて、異なる論理で同じ処理の実行を指示する複数の呼出先プログラムの各々の処理結果を記憶し、前記複数の呼出元プログラムのうち前記一つの呼出元プログラム以外の呼出元プログラムの呼び出しに応じて、前記記憶した処理結果を返すコンピュータを備える保安装置。
【請求項2】
前記複数の呼出元プログラムの処理結果を照合する
請求項1に記載の保安装置。
【請求項3】
前記複数の呼出先プログラムの処理結果を照合する
請求項1又は2に記載の保安装置。
【請求項4】
前記複数の呼出先プログラムの処理結果が一致した場合に限り、一致した処理結果を有効にする請求項3に記載の保安装置。
【請求項5】
前記一つの呼出元プログラムの呼び出しに応じて前記複数の呼出先プログラムの処理結果を返すインタフェースと、当該処理結果を記憶し、前記複数の呼出元プログラムのうち前記一つの呼出元プログラム以外の呼出元プログラムの呼び出しに応じて当該処理結果を返すインタフェースと
を備える請求項1乃至4のいずれか1項に記載の保安装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、鉄道信号保安装置など安全を担保するための保安装置に関する。
【背景技術】
【0002】
鉄道信号保安装置などの保安装置には高い安全性と信頼性とが求められるため、安全性および信頼線を向上させるための種々の仕組みが提案されている。例えば、特許文献1には、入出力ポートを指定するアドレスデコーダの故障を検出するための制御出力回路が開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載の技術は、保安装置のハードウェアにおける偶発的故障等の検出に有効である。しかしながら、保安装置に搭載されるソフトウェアにおけるコーディングミスや設計不良等の系統的故障を検出するためには別途、対策が必要である。ソフトウェアについての系統的故障を検出する方法として、ソフトウェア・ダイバシティ(以下、ダイバシティ化)と呼ばれる方法がある。ソフトウェア・ダイバシティとは、同じ機能を別論理の複数プログラムで組み、各プログラムの処理結果を照合することでソフトウェアの系統的故障を検出する方法をいう。
【0005】
ソフトウェア開発は、一般に上位のプログラム(以下、「アプリケーション」或いは「AP」と略記)と、APから呼び出される下位のプログラム(例えば、I/Oドライバ(以下、DR)など)とで、別々に行われる場合が多い。以下、上位側のプログラムを呼出元プログラム、下位側のプログラムを呼出先プログラム、と記す。ダイバシティ化を行う場合もAPとDRとで個々に実施されることになる。ダイバシティ化したアプリケーションをAP1、AP2とし、ダイバシティ化したI/OドライバをDR1、DR2とすると、アプリケーションの処理はAP1→AP2→アプリケーション処理結果照合の流れとなり、I/Oドライバの処理はDR1→DR2→ドライバ処理結果照合の流れになる。
【0006】
上記仕組みにおいてアプリケーションの実行過程でI/Oドライバを呼び出すとすると、AP1からの呼び出しの際にDR1→DR2→ドライバ処理結果照合が行われ、AP2からの呼び出しの際にもDR1→DR2→ドライバ処理結果照合の処理が行われる。つまり、DR1→DR2→ドライバ処理結果照合が重複して2回実行されることになり、必要以上にCPU負荷が上昇するといった問題がある。
【0007】
また、上記仕組みにおいてI/Oドライバが出力ドライバである場合、ドライバ処理結果照合によりDR1の処理結果とDR2の処理結果が一致した場合に出力を行うようにしても、出力が2回行われるといった不合理が発生する。
【0008】
上記重複実行に起因する不具合を回避するために、AP1についてはDR1を呼出し、AP2についてはDR2の呼び出しとドライバ処理結果照合とを行うようにする方法が考えられる。しかしこの方法では、DR1とDR2の動作タイミングが大きくずれる。DR1とDR2の動作タイミングがずれると、I/Oドライバが入力ドライバである場合、DR1の実行の際に読み取った入力値とDR2の実行の際に読み取った入力値とが一致しない可能性があり、AP1およびAP2にコーディングミス等がないにも拘らず、AP1の処理結果とAP2の処理結果とが不一致となって系統的故障が誤検出される可能性がある、という問題がある。
【0009】
上記の事情に鑑み、本発明は、呼出先プログラムの重複実行を回避しつつ、呼出元および呼出先のプログラムをダイバシティ化して安全性を向上させることを可能にする手段を提供することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決するために、本発明は、異なる論理で同じ処理の実行を指示する複数の呼出元プログラムのうちの一つの呼出元プログラム呼び出しに応じて、異なる論理で同じ処理の実行を指示する複数の呼出先プログラムの各々の処理結果を記憶し、前記複数の呼出元プログラムのうち前記一つの呼出元プログラム以外の呼出元プログラムの呼び出しに応じて、前記記憶した処理結果を返すコンピュータを備える保安装置を。第1の態様として提供する。
【0011】
第1の態様の保安装置によれば、上記一つの呼出元プログラムからの呼び出しに応じて複数の呼出先プログラムの各々の処理結果が記憶され、上記複数の呼出元プログラムのうち上記一つの呼出元プログラム以外の呼出元プログラムからの呼び出しの際には、複数の呼出先プログラムの各々は実行されず、上記記憶された処理結果が呼出元プログラムへ返される。第1の態様の保安装置では、上記複数の呼出元プログラムのうち上記一つの呼出元プログラム以外の呼出元プログラムからの呼び出しの際には、複数の呼出先プログラムの各々が実行されることはないので、上記各課題を解決することができる。
【0012】
上記第1の態様の保安装置において、前記複数の呼出元プログラムの処理結果を照合する、という構成が第2の態様として採用されてもよい。
【0013】
第2の態様の保安装置によれば、上記複数の呼出元プログラムの処理結果の照合により、呼出元プログラム及び呼出先プログラムの少なくとも一方に含まれる系統的故障が検知される。
【0014】
上記第1の態様の保安装置において、前記複数の呼出先プログラムの処理結果を照合する、という構成が第3の態様として採用されてもよい。
【0015】
第3の態様の保安装置によれば、上記複数の呼出先プログラムの処理結果の照合により、呼出先プログラムに含まれる系統的故障が検知される。
【0016】
上記第3の態様の保安装置において、前記複数の呼出先プログラムの処理結果が一致した場合に限り、一致した処理結果を有効にする、という構成が第4の態様として採用されてもよい。
【0017】
上記第4の態様の保安装置によれば、複数の呼出先プログラムの処理結果が一致した場合に限り、有効とされた処理結果を用いた呼出元プログラムの処理が行われる。従って、一致しない呼出先プログラムの処理結果を用いて無駄な呼出元プログラムの処理が行われる不都合が回避される。
【0018】
上記第1乃至第4のいずれか1の態様の保安装置において、前記一つの呼出元プログラムの呼び出しに応じて前記複数の呼出先プログラムの処理結果を返すインタフェースと、当該処理結果を記憶し、前記複数の呼出元プログラムのうち前記一つの呼出元プログラム以外の呼出元プログラムの呼び出しに応じて当該処理結果を返すインタフェースとを備える、という構成が第5の態様として採用されてもよい。
【0019】
第5の態様の保安装置によれば、前記一つの呼出元プログラムに呼び出されるインタフェースと、前記複数の呼出元プログラムのうち前記一つの呼出元プログラム以外の呼出元プログラムに呼び出されるインタフェースの仕様を一致させることで、複数の呼出元プログラムの各々に含まれる呼出先プログラムを呼び出すためのコードを共通化できる。
【図面の簡単な説明】
【0020】
【
図1】第1実施形態にかかる保安装置の構成例を示す図。
【
図2】第1実施形態にかかる保安装置の演算部が実行する処理の流れを示すフローチャート。
【
図3】第1実施形態にかかる保安装置の演算部が実行する処理の流れを示すフローチャート。
【
図4】第1実施形態にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【
図5A】従来のソフトウェア・ダイバシティにおける問題点を説明するための図。
【
図6】第2実施形態にかかる保安装置の演算部が実行する処理の流れを示すフローチャート。
【
図7】第2実施形態にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【
図8】変形例にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【
図9】変形例にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【
図10】変形例にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【
図11】変形例にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【
図12】変形例にかかる保安装置におけるソフトウェア・ダイバシティを説明するための図。
【発明を実施するための形態】
【0021】
(第1実施形態)
本発明の第1実施形態について説明する。
図1は、本発明の第1実施形態にかかる保安装置10Aの構成例を示す図である。保安装置10Aは鉄道信号保安装置であり、保安装置10Aと連携動作する他の保安装置とともに鉄道信号保安システムを構成する。
図1には、保安装置10Aと連携する装置10Bも図示されている。装置10Bは鉄道信号保安装置であってもよいし、鉄道信号保安装置ではない装置であってもよい。
図1に示すように、保安装置10Aと装置10Bは、両装置間のデータの授受を仲介する信号線121を介して互いに接続されている。
図1に示すように保安装置10Aは、演算部110、I/Oインタフェース120、記憶部130、およびこれら構成要素間のデータ授受を仲介するバス140を含んでいる。
【0022】
演算部110は例えばシングルコアCPU(Central Processing Unit)などの演算回路である。演算部110は、記憶部130(より正確には、後述する不揮発性記憶部134)に記憶されているプログラムを実行し、保安装置10Aの制御中枢として機能する。I/Oインタフェース120は、各種外部機器との間でデータ授受を行う装置である。I/Oインタフェース120の具体例としては、NIC(Network Interface Card)やシリアル通信回路、パラレル通信回路が挙げられる。I/Oインタフェース120には、信号線121を介して装置10Bが接続される。
【0023】
記憶部130は揮発性記憶部132と不揮発性記憶部134とを含む。揮発性記憶部132は例えばRAM(Random Access Memory)である。揮発性記憶部132は各種プログラムを実行する際のワークエリアとして演算部110によって利用される。不揮発性記憶部134は例えばハードディスクである。不揮発性記憶部134には、各種ソフトウェアが予め格納されている。不揮発性記憶部134に格納されているソフトウェアの具体例としては、OS(Operating System)を実現するためのカーネルソフトウェア、保安装置10Aに特有の機能を実現するためのアプリケーション、アプリケーションからの呼び出しに応じてI/Oインタフェース120を制御し装置10Bに対してデータ出力を行うI/Oドライバが挙げられる。
【0024】
本実施形態の保安装置10Aでは、アプリケーションとI/Oドライバの各々の系統的故障のリスクを軽減するために、アプリケーションとI/Oドライバの各々がダイバシティ化されている。すなわち、アプリケーションプロラムについては、保安装置10Aに特有の機能を実現するための処理について、異なる論理での実行を演算部110に指示するAP1とAP2とが不揮発性記憶部134に予め格納されている。また、I/Oドライバについては、装置10Bへ出力するデータを呼出元のアプリケーションから与えられるデータに基づいて生成する処理について、異なる論理での実行を演算部110に指示するDR1とDR2とが不揮発性記憶部134に予め記憶されている。
【0025】
また、本実施形態の保安装置10Aでは、アプリケーションとI/Oドライバの各々を個別にダイバシティ化することに起因する不具合の発生を回避するために、DIF1およびDIF2の2種類のインタフェースプログラムが不揮発性記憶部134に予め記憶されている。さらに、本実施形態の保安装置10Aでは、AP1の処理結果とAP2の処理結果を照合するためのプログラムであるAP照合PRと、DR1の処理結果とDR2の処理結果を照合するためのプログラムであるDR照合PRが不揮発性記憶部134に予め記憶されている。以下、本実施形態の特徴を顕著に示すインタフェースプログラムであるDIF1およびDIF2を中心に説明する。
【0026】
DIF1およびDIF2は何れもアプリケーションから呼び出されるプログラムである。本実施形態では、AP1はDIF1を呼び出すように作成されており、AP2はDIF2を呼び出すように作成されている。
図2はDIF1にしたがって演算部110が実行する処理の流れを示すフローチャートである。
図2に示すにようにDIF1にしたがって作動している演算部110は、まず、AP1から与えられるデータを引数としてDR1を呼出し(ステップSA100)、DR1による処理結果(呼出元プログラムから与えられるデータに基づいて生成した出力データ)を取得する。なお、DR1による処理結果のDIF1への返却は、関数戻り値による返却であってもよいし、予め定められた外部テーブルへの書き込みによる返却であってよい。
【0027】
ステップSA100に後続するステップSA110では、演算部110は、ステップSA100にてDR1の呼び出しに用いたデータと同じデータを引数としてDR2を呼び出し、DR2による処理結果を取得する。DR2による処理結果のDIF1への返却についても、関数戻り値による返却であってもよいし、予め定められた外部テーブルへの書き込みによる返却であってよい。なお、ステップSA100の処理とステップSA110の処理をシーケンシャルに実行するのは、演算部110がシングルコアCPUだからである。演算部110がマルチコアCPUであれば、ステップSA100の処理とステップSA110の処理を並列に実行してもよい。
【0028】
ステップSA110に後続するステップSA120では、演算部110はDR照合PRに従い、ステップSA100にて取得した処理結果(すなわち、DR1による処理結果)と、ステップSA110にて取得した処理結果(すなわち、DR2に処理結果)とを照合し、その照合結果を示すDR照合結果コードと、DR1およびDR2の各々による処理結果とを揮発性記憶部132内の所定のアドレスから始まる記憶領域(以下、DR処理結果テーブル)に書き込む。以降、DIF1にしたがって作動している演算部110は、DR照合結果コードと上記各処理結果とを上記DR処理結果テーブルを用いて呼出元プログラムであるAP1へ返却する。また、DR1による処理結果とDR2に処理結果とが一致している場合には、演算部110は、何れか一方の処理結果をI/Oインタフェース120を介して装置10Bへ出力する。
【0029】
DIF1の呼出元プログラム(すなわち、AP1)については、DIF1から返却されたDR照合結果コードを参照することで、DR1による処理結果とDR2による処理結果の一致/不一致を把握し、後続の処理を切り替えるようにしてもよい。例えば、DR1による処理結果とDR2による処理結果とが一致している場合には、DIF1から返却された処理結果を有効とし、当該処理結果を用いて当該アプリケーションの演算を行う一方、不一致の場合にはI/Oドライバについての系統的故障が発生したと見做して、アプリケーション演算を停止することが考えられる。
【0030】
図3はDIF2にしたがって演算部110が実行する処理の流れを示すフローチャートである。
図3に示すにようにDIF2にしたがって作動している演算部110は、上記所定のアドレスから始まる記憶領域(DR処理結果テーブル)から格納内容(すなわち、DR1およびDR2の各々の処理結果とDR照合結果コード)を読み出し(ステップSB100)、読み出したデータを呼出元プログラム(すなわち、AP2)へ返却し(ステップSB110)、DIF2の処理を終了する。DIF2の呼出元プログラムであるAP2も、DIF2から返却されたDR照合結果コードを参照することで、DR1による処理結果とDR2による処理結果の一致/不一致を把握し、後続の処理を切り替えることができる。
【0031】
保安装置10Aの運用過程では、
図4に示すように、AP1の実行、AP2の実行、といった順にダイバシティ化されたアプリケーションがシーケンシャルに実行され、さらにその後、AP照合PRに従いAP1の処理結果とAP2の処理結果の照合が実行される。前述したようにAP1、AP2およびAP照合PRを実行する演算部110はシングルコアCPUだからである。
図4におけるAP照合PRに従う照合の結果が不一致であれば、演算部110は、アプリケーションについての系統的故障が発生したと見做し、エラーメッセージ出力等の異常通知処理を行って動作を停止することが考えられる。
【0032】
前述したように、AP1はDIF1を呼び出すように作成されており、AP2はDIF2を呼び出すように作成されている。このため、AP1の実行過程ではDIF1の呼び出しが行われ、DR1、DR2、DR照合PR(
図2におけるステップSA120の処理)がシーケンシャルに実行される。これに対して、AP2の実行過程ではDIF2の呼び出しが行われ、DR1、DR2及びDR照合PRが実行されることはない。従来のダイバシティ化であれば、
図5Aに示すように、AP2の実行の際にもDR1、DR2及びDR照合PRが実行され、必要以上に演算部110の負荷(CPU負荷)が上昇するといった問題があった。これに対して、本実施形態の保安装置10Aによれば、
図5Bに示すように、DR1、DR2及びDR照合PRが重複して実行されることはなく、必要以上に演算部110の負荷が上昇することはない。また、本実施形態の保安装置10Aによれば、装置10Bへの出力が重複して行われるといった不具合の発生も回避される。
【0033】
(第2実施形態)
次いで本発明の第2実施形態について説明する。本発明の第2実施形態にかかる保安装置10Aの構成例は、
図1に示した第1実施形態にかかる保安装置10Aの構成例と同じである。ただし、第2実施形態においては、DR1およびDR2が、呼出元プログラムからの呼び出しに応じて、I/Oインタフェース120を介して外部の装置からデータを受け取り、受け取ったデータを用いた処理を行い、処理結果を呼出元プログラムに返却する入力ドライバである点が、第1実施形態と異なっている。そのため、第2実施形態においては、DR1およびDR2の呼び出しに用いられるDIF1に従う演算部110の処理が、第1実施形態と異なっている。従って、以下に第2実施形態におけるDIF1に従った演算部110の処理を中心に説明する。
【0034】
図6は、第2実施形態においてDIF1に従い演算部110が実行する処理の流れを示すフローチャートである。
図6に示すように、DIF1に従って作動している演算部110は、まず、呼出元プログラムであるAP1に従いDR1を呼び出す(ステップSC100)。続いて、演算部110は、呼び出したDR1に従い、I/Oインタフェース120を介して装置10Bから入力されたデータの値(入力値A)を取得する(ステップSC110)。演算部110は、DIF1に従い、取得した入力値Aを記憶する(ステップSC120)。
【0035】
続いて、演算部110は、DR1に従い、取得した入力値Aを用いた処理を行い(ステップSC130)、処理結果をDR処理結果テーブルに書き込む(ステップSC140)とともに、その処理結果を呼出元プログラム(すなわち、AP1)へ返却する。
【0036】
続いて、演算部110は、DIF1に従い、DR2を呼び出す(ステップSC150)。また、演算部110は、DIF1に従い、ステップSC120において記憶しておいた入力値Aを読み出す(ステップSC160)。続いて、演算部110は、DR2に従い、入力値Aを用いた処理を行い(ステップSC170)、処理結果をDR処理結果テーブルに書き込む(ステップSC180)とともに、その処理結果を呼出元プログラム(すなわち、AP1)へ返却する。続いて、演算部110は、DIF1に従い、DR処理結果テーブルに記憶されているDR1の処理結果とDR2の処理結果を照合する(ステップSC190)。DR1の処理結果とDR2の処理結果とが不一致の場合は、演算部110はI/Oドライバについての系統的故障が発生したと見做して、アプリケーション演算を停止することが考えられる。
【0037】
図7は、第2実施形態にかかる保安装置10Aにおけるソフトウェア・ダイバシティを説明するための図である。第2実施形態においては、第1実施形態と同様に、AP1の実行、AP2の実行、AP照合PRに従うAP1の処理結果とAP2の処理結果の照合、という手順でダイバシティ化されたアプリケーションが実行される。AP照合PRに従う照合の結果が不一致であれば、演算部110は、アプリケーションについての系統的故障が発生したと見做し、エラーメッセージ出力等の異常通知処理を行って動作を停止することが考えられる。
【0038】
また、第2実施形態においては、第1実施形態と異なり、DR1に従う演算部110は外部の装置から入力値Aを取得する。演算部110は、取得した入力値AをDR1に従う処理において用いるとともに、DIF1に従い記憶する。その後、演算部110は、DR2に従う処理において、先に記憶しておいた入力値Aを読み出して用いる。なお、演算部110が、DR照合PRに従い、DR1の処理結果とDR2の処理結果の照合を行い、その照合結果を示すDR照合結果コードをDR処理結果テーブルに書き込む点は第1実施形態と同様である。
【0039】
従来のダイバシティ化であれば、DR1とDR2の実行のタイミングがずれると、DR1の実行の際に取得した入力値とDR2の実行の際に取得した入力値が一致せず、AP1およびAP2にコーディングミス等がないにも拘らず、AP1の処理結果とAP2の処理結果とが不一致となって系統的故障が誤検出される可能性があった。本実施形態では、
図7に示すように、DR1の呼び出しの際に取得され、DR1の処理に用いられた入力値AがDR2の処理に用いられるので、DR1とDR2の実行のタイミングがずれても、上記のような誤検知が発生することはない。
【0040】
このように本実施形態によっても、アプリケーションから呼び出される呼出先プログラムであるI/Oドライバの重複実行を回避しつつ、呼出元および呼出先のプログラムをダイバシティ化して安全性を向上させることが可能になる。
【0041】
(変形例)
以上本発明の第1および第2実施形態について説明したが、これら実施形態には様々な変形が行われてよい。以下にそれらの変形の例を示す。なお、以下に示す変形例の2以上が適宜、組み合わされてもよい。
【0042】
(1)上述した第1実施形態では、アプリケーションが呼出元プログラムであり、I/Oドライバが呼出先プログラムであった。しかし、
図8に示すように、呼出元プログラムであるアプリケーション(
図8におけるAP1およびAP2)から呼び出される呼出先プログラムは、OSのサービスコール(
図8におけるSC1およびSC2)であっても良い。なお、
図8におけるSCIF1は上記の第1実施形態におけるDIF1に対応するインタフェースプログラムであり、
図8におけるSCIF2は上記の第1実施形態におけるDIF2に対応するインタフェースプログラムである。第2実施形態についても同様であり、呼出先プログラムはサービスコールであってもよい。また、呼出元プログラムはアプリケーションには限定されず、I/Oドライバ或いはサービスコールであってもよい。例えば、呼出元プログラムがI/Oドライバである場合、当該I/Oドライバからインタフェースプログラムを介して呼び出される他のI/Oドライバまたはサービスコールが呼出先プログラムとなる。
【0043】
(2)上述した第1実施形態および第2実施形態では、ダイバシティ化された呼出元プログラムの個数とダイバシティ化された呼出先プログラムの個数とが同じ(何れも2個)であったが、ダイバシティ化された呼出元プログラムの個数とダイバシティ化された呼出先プログラムの個数が同じである必要はない。また、上述した第1実施形態および第2実施形態では、呼出元プログラムが2つであったが3つ以上であってもよく、同様に、呼出先プログラムが3つ以上であってもよい。呼出先プログラムが3つ以上の場合、ダイバシティ化された呼出先プログラムの処理結果が一致しない場合であっても、所定数以上(例えば過半数)の処理結果が一致する場合には、当該一致する当該処理結果を用いて呼出元プログラムの処理を継続するようにしてもよい。同様に、呼出元プログラムが3つ以上の場合、ダイバシティ化された呼出先プログラムの処理結果が一致しない場合であっても、所定数以上(例えば過半数)の処理結果が一致する場合には、当該一致する処理結果を有効として呼出元プログラムの処理を継続してもよい。
【0044】
(3)上述した第1実施形態および第2実施形態では、呼出先プログラムの処理結果の照合結果(DR照合結果コード)を呼出元プログラムへ返却したが、照合結果の返却は必須ではない。例えば、複数の呼出先プログラムの処理結果が全て一致している場合には、当該処理結果を示すデータを一つだけ呼出元プログラムへ返却する一方、不一致の場合には各呼出先プログラムの処理結果を全て呼出元プログラムへ返却する構成が採用されてもよい。もしくは、複数の呼出先プログラムの処理結果が全て一致している場合には、当該処理結果を示すデータを一つだけ呼出元プログラムへ返却する一方、不一致の場合には呼出先プログラムの処理結果を1つも呼出元プログラムへ返却しない構成が採用されてもよい。いずれの構成が採用されても、呼出元プログラム側では、ダイバシティ化された呼出先プログラムの処理結果の一致/不一致を返却される処理結果の個数に基づいて特定し、一致の場合に限り処理結果を有効とし、例えば処理結果を用いた処理を継続することができる。
【0045】
(4)上述した第1実施形態および第2実施形態において演算部110が実行するものとしたDIF1およびDIF2は必須ではない。すなわち、AP1が
図2に示す処理を演算部110に指示し、AP2が
図3に示す処理を演算部110に指示する構成を採用し、DIF1とDIF2を不要としてもよい。また、上述した第1実施形態および第2実施形態において演算部110が実行するものとしたAP照合PRおよびDR照合PRの少なくとも一方を、演算部110が実行しない構成が採用されてもよい。
【0046】
図9は、演算部110がDIF1、DIF2、AP照合PR、DR照合PRのいずれも実行しない変形例にかかる保安装置10Aにおけるソフトウェア・ダイバシティを説明するための図である。この変形例において、保安装置10Aは保安システム200の一部として構成される。保安システム200は、保安装置10Aと、保安装置10Aから出力されるデータの照合を行う照合装置20を備える。
【0047】
演算部110はAP1に従い、DR1とDR2の呼び出しを行い、それらの処理結果をDR処理結果テーブルに書き込む。また、演算部110はAP2に従い、DR1とDR2の呼出しに代えて、DR処理結果テーブルからDR1の処理結果とDR2の処理結果を読み出す。また、演算部110は、AP1に従いDR1の処理結果を用いて行った処理の結果と、AP1に従いDR2の処理結果を用いて行った処理の結果を照合装置20に出力する。また、演算部110は、AP2に従いDR1の処理結果を用いて行った処理の結果と、AP2に従いDR2の処理結果を用いて行った処理の結果を照合装置20に出力する。
【0048】
照合装置20は、保安装置10Aの演算部110から入力されたAP1の処理結果とAP2の処理結果の照合を行う。照合装置20は、照合の結果が不一致であれば、保安装置10Aのアプリケーション又はI/Oドライバについての系統的故障が発生したと見做し、例えば、エラーメッセージ出力等の異常通知処理を行って保安装置10Aの動作を停止させる。
【0049】
図10は、演算部110がDIF1、DIF2、DR照合PRは実行しないが、AP照合PRは実行する変形例にかかる保安装置10Aにおけるソフトウェア・ダイバシティを説明するための図である。
図10に示す変形例においては、演算部110がAP照合PRに従い、AP1の処理結果とAP2の処理結果を照合する点が、
図9に示した変形例と異なっている。この変形例においては、保安装置10Aにおいて、アプリケーションとI/Oドライバの少なくとも一方に含まれる系統的故障の検知が行われる。
【0050】
図11は、演算部110がDIF1、DIF2、AP照合PRは実行しないが、DR照合PRは実行する変形例にかかる保安装置10Aにおけるソフトウェア・ダイバシティを説明するための図である。
図11に示す変形例においては、演算部110がDR照合PRに従い、DR1の処理結果とDR2の処理結果を照合する点が、
図9に示した変形例と異なっている。この変形例においては、保安装置10AにおいてI/Oドライバに含まれる系統的故障の検知が行われ、照合装置20において保安装置10Aのアプリケーションに含まれる系統的故障の検知が行われる。
【0051】
図12は、演算部110がAP照合PR、DR照合PRは実行しないが、DIF1、DIF2は実行する変形例にかかる保安装置10Aにおけるソフトウェア・ダイバシティを説明するための図である。
図12に示す変形例においては、演算部110がAP1に従いDIF1を呼び出し、DIF1に従いDR1およびDR2を呼び出す点と、演算部110がAP2に従いDIF2を呼び出し、DIF2に従いDR処理結果テーブルからDR1の処理結果とDR2の処理結果を読み出す点が、
図9に示した変形例と異なっている。
【0052】
この変形例においては、AP1がDIF1を呼び出すことによりDR1の処理結果とDR2の処理結果を取得し、AP2がDIF2(DIF1と仕様が共通)を呼び出すことによりDR1の処理結果とDR2の処理結果を取得するため、AP1とAP2が呼出先プログラムを呼び出すためのコードに変更を加える必要がない。
【0053】
なお、
図12の変形例においては、
図9の変形例と同様に、照合装置20において、保安装置10AのアプリケーションとI/Oドライバの少なくとも一方に含まれる系統的故障の検知が行われる。
【0054】
(5)上述した実施形態では、鉄道信号保安装置への本発明の適用例を説明したが、本発明の適用対象は鉄道信号保安装置に限定される訳ではなく、戸閉保安装置であってもよい。また、本発明の適用対象は鉄道用の保安装置には限定されず、エレベータ或いはエスカレータ用の保安装置であってもよい。要は、高い安全性と信頼性を要求される保安装置であって、安全性および信頼性の担保のために搭載ソフトウェアのダイバシティ化が行われる保安装置であれば、本発明を適用可能である。
【符号の説明】
【0055】
10A・10B…保安装置、110…演算部、120…I/Oインタフェース、130…記憶部、132…揮発性記憶部、134…不揮発性記憶部、140…バス、20…照合装置、200…保安システム。