(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-05
(45)【発行日】2023-01-16
(54)【発明の名称】プログラマブルロジックコントローラプログラムを分析する方法、コンピュータプログラム及び装置
(51)【国際特許分類】
G06F 11/36 20060101AFI20230106BHJP
G05B 19/05 20060101ALI20230106BHJP
【FI】
G06F11/36 164
G05B19/05 A
(21)【出願番号】P 2021566780
(86)(22)【出願日】2020-02-07
(86)【国際出願番号】 JP2020005931
(87)【国際公開番号】W WO2020195313
(87)【国際公開日】2020-10-01
【審査請求日】2021-07-26
(32)【優先日】2019-03-28
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】503163527
【氏名又は名称】ミツビシ・エレクトリック・アールアンドディー・センター・ヨーロッパ・ビーヴィ
【氏名又は名称原語表記】MITSUBISHI ELECTRIC R&D CENTRE EUROPE B.V.
【住所又は居所原語表記】Capronilaan 46, 1119 NS Schiphol Rijk, The Netherlands
(74)【代理人】
【識別番号】100110423
【氏名又は名称】曾我 道治
(74)【代理人】
【識別番号】100111648
【氏名又は名称】梶並 順
(74)【代理人】
【識別番号】100122437
【氏名又は名称】大宅 一宏
(74)【代理人】
【識別番号】100147566
【氏名又は名称】上田 俊一
(74)【代理人】
【識別番号】100161171
【氏名又は名称】吉田 潤一郎
(72)【発明者】
【氏名】クージノー、ドゥニ
【審査官】小林 秀和
(56)【参考文献】
【文献】特開2018-133034(JP,A)
【文献】国際公開第2017/138156(WO,A1)
【文献】米国特許出願公開第2011/0283147(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G05B 19/05
(57)【特許請求の範囲】
【請求項1】
プロセッサによって実行されるプログラマブルロジックコントローラプログラム分析方法であって、
ラダープログラムであるプログラマブルロジックコントローラ(PLC)プログラムのタイプの元のプログラム(PROG)を、ラダープリミティブの事前定義されたモデル化を用いて、論理フレームワークのモデル(MOD)に翻訳するステップ(TRANS)と、
少なくとも前記モデル(MOD)と、事前定義された言語形式化とから、前記元のプログラムの内部変数に関する一組のプロパティ(Prop)を決定するステップと、
自動化ソルバー(SMT)により、ユーザ仕様(IntProp)に結合された前記一組のプロパティ(Prop)の充足可能性を検証し、前記一組のプロパティ(Prop)からのプロパティ(Prop)の対偶が充足可能である場合、前記プロパティ(Prop)の対偶が充足可能であるモデル入力及び内部メモリ値を表す一組の反例(PROOF NOK)を提供し、又は、前記一組のプロパティ(Prop)が常に充足される場合、その確認(PROOF OK)を提供するステップと、
反例(PROOF NOK)を前記モデルのエラー初期構成(IniConf)に翻訳するステップであって、前記エラー初期構成(IniConf)は入力及び内部メモリの初期値を含むステップと、
前記モデルのエラー初期構成(IniConf)を用いて、前記モデルの実行(EXE)のモデルシミュレーションを行い、実行の開始から前記プロパティの違反まで前記モデルシミュレーションのエラー中間構成(AST-IntConf)を記録するステップであって、前記エラー中間構成は内部メモリの中間値を含むステップと、
前記モデルのエラー初期構成(IniConf)及び前記モデルシミュレーションのエラー中間構成(AST-IntConf)を、前記元のプログラム(PROG)のエラー初期構成及び中間構成(Lad-IniConf、Lad-IntConf)に翻訳するステップと、
前記エラー初期構成及び中間構成(Lad-IniConf、Lad-IntConf)を表示するステップと
を含む
プログラマブルロジックコントローラプログラム分析方法。
【請求項2】
前記元のプログラム(PROG)を前記モデル(MOD)に翻訳する前記ステップ(TRANS)は、抽象構文木(AST)としての前記元のプログラム(PROG)の表現の第1の中間ステップ(AST-TRANS)と、前記抽象構文木(AST)からの前記モデル(MOD)の生成の第2の中間ステップ(MOD-TRANS)とを含む
請求項1に記載のプログラマブルロジックコントローラプログラム分析方法。
【請求項3】
モデル実行をシミュレートする前記ステップは、
前記エラー初期構成(IniConf)を、前記抽象構文木(AST)に対応するエラー初期構成(AST-IniConf)に翻訳する第1の中間ステップ(AST-TRANSB)と、
前記対応する初期構成(AST-IniConf)を用いて前記抽象構文木(AST)を計算し、前記抽象構文木(AST)に対応する内部メモリの中間値(AST-IntConf)を回収する第2の中間ステップ(AST-SyEx)と、
を含む
請求項2に記載のプログラマブルロジックコントローラプログラム分析方法。
【請求項4】
前記モデル(MOD)は、一階述語論理フレームワークで表される
請求項1から請求項3までのいずれか1項に記載のプログラマブルロジックコントローラプログラム分析方法。
【請求項5】
前記元のプログラム(PROG)を前記モデル(MOD)に翻訳する前記ステップ(TRANS)は、静的単一代入変換(SSAT)の中間ステップを含む
請求項1から請求項4までのいずれか1項に記載のプログラマブルロジックコントローラプログラム分析方法。
【請求項6】
前記一組のプロパティ(Prop)を決定する前記ステップの間に、前記一組のプロパティ(Prop)は、ダイクストラの最弱事前条件計算法を用いて、前記一組のプロパティ(Prop)に対する事前条件(PreCond)を決定するように計算され、前記一組のプロパティ(Prop)の検証は、その事前条件(PreCond)に基づいて実施される
請求項1から請求項5までのいずれか1項に記載のプログラマブルロジックコントローラプログラム分析方法。
【請求項7】
ユーザ仕様と結合された前記一組のプロパティの充足可能性は、充足可能性モジュロソルバー(SMT)を用いて検証される
請求項1から請求項6までのいずれか1項に記載のプログラマブルロジックコントローラプログラム分析方法。
【請求項8】
プロセッサによって実行されると、請求項1から請求項7までのいずれか1項に記載の方法を実行する命令を含むコンピュータプログラム。
【請求項9】
請求項1から請求項7までのいずれか1項に記載のプログラマブルロジックコントローラプログラム分析方法を実行する装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、IEC61131-3標準規格に記載されている言語で書かれたプログラムを分析する方法及び装置に関する。こうしたプログラムは、特に、工業システムの制御を実行するプログラマブルロジックコントローラ(PLC)のために意図されている。
【0002】
本発明は、より詳細には、ラダー(Ladder)プログラムにおけるエラーを分析、検出及び補正する方法及び装置に関する。
【背景技術】
【0003】
プログラマブルロジックコントローラ(PLC)は、組立ライン又はロボットデバイス等、製造プロセスのオートメーションコントローラとして使用される、工業用デジタルコンピュータである。
【0004】
PLCには、入力及び内部メモリの値から出力を計算するソフトウェアが設けられ、したがって、PLCは、配線によるリレー、タイマ及びシーケンサに取って代わった。ラダーロジックとしても知られるラダー言語は、PLCソフトウェアを開発するために用いられるプログラミング言語である。この言語は、リレーロジックハードウェアの回路の図を用いて、グラフィカルな図によりPLCプログラムを表す。標準規格IEC61131-3は、PLCをプログラミングするいくつかの他の言語もあるがとりわけラダー言語について記載している。
【0005】
ソフトウェア開発プロセスの一部は、デバッグに割り当てられる。デバッグは、プログラムが安全に且つ所与の仕様に従って挙動することを検査することである。工場におけるバグは、人的及び物的被害、並びにプラント操業中止時間に関して、極めてコストがかかる可能性があるため、デバッグは、製造環境での実装の前に実施する必要がある。
【0006】
通常の方法は、シミュレーション法であり、それは、初期構成によって定義されるいくつかのテストを設定し、上記テストにおいてプログラムを実行して、これらの構成下でその挙動を検査することである。プログラムは、通常、工場のソフトウェアシミュレーションで実行される。
【発明の概要】
【発明が解決しようとする課題】
【0007】
こうした方法の主な欠点は、こうした方法が、網羅的ではなく且つ時間がかかり、したがって、コストがかかるということである。この非網羅性により、選択されたテストが製造環境においてプログラムのあり得る全ての実行を1回でカバーすることを保証することが極めて困難になる。唯一の保証は、プログラムが、テストされた構成に対してバグがないということであるため、テスト段階の後にプログラムにバグが残る可能性がある。
【0008】
モデル検査法は、時間及び資源を節約するために、テストするためにプログラム自体ではなくプログラムのモデルを連続的に実行することである。しかしながら、特に工業応用に対して、実行パス関連の複雑性は指数関数的であることが多い。テスト効率は、CPU時間によって制限され、したがって、この方法は依然として網羅的ではない。
【0009】
さらに、テストを生成及び実行するために、少なくともいくつかの構成は手動で定義する必要があるため、上記テストは、部分的に又は完全に手動で開発及び実行される。テスト生成及び実行の一部を自動化することができるが、こうした方法の別の欠点は、テストの出力値を依然としてプログラマーが分析しなければならず、バグに関する唯一の入手可能な情報は、バグをもたらす入力及び内部メモリの初期構成であるということである。したがって、エラーの基本的な理由と、考慮される初期構成によりプログラムのいずれかの時点でそのエラーをもたらす理由とを理解することが困難であることが多い。
【課題を解決するための手段】
【0010】
本発明の1つの態様によれば、プログラマブルロジックコントローラプログラム分析方法であって、
ラダープログラムであるプログラマブルロジックコントローラプログラムのタイプの元のプログラムを、ラダープリミティブの事前定義されたモデル化を用いて、論理フレームワークのモデルに翻訳するステップと、
少なくとも上記モデルと、事前定義された言語形式化とから、上記元のプログラムの内部変数に関する一組のプロパティを決定するステップと、
自動化ソルバーにより、ユーザ仕様に結合された上記一組のプロパティの充足可能性を検証し、上記一組のプロパティからのプロパティの対偶が充足可能である場合、上記プロパティの対偶が充足可能であるモデル入力及び内部メモリ値を表す一組の反例を提供し、又は、上記一組のプロパティが常に充足される場合、その確認を提供するステップと、
反例を、上記モデルのエラー初期構成に翻訳するステップであって、上記エラー初期構成は入力及び内部メモリの初期値を含む、ステップと、
上記モデルのエラー初期構成(IniConf)を用いて、モデルの実行(EXE)のモデルシミュレーションを行い、実行の開始から上記プロパティ違反まで上記モデルシミュレーションのエラー中間構成を記録するステップであって、上記エラー中間構成は内部メモリの中間値を含む、ステップと、
上記モデルのエラー初期構成及び上記モデルシミュレーションのエラー中間構成を、上記元のプログラムのエラー初期構成及び中間構成に翻訳するステップと、
上記エラー初期構成及び中間構成を表示するステップと、
を含む、プログラマブルロジックコントローラプログラム分析方法が開示される。
【0011】
これらの特質の下で、プログラムに対する1つの又はいくつかのプロパティが違反されたとき、バグが発生する。プロパティは、プログラムの入力、出力及びローカルメモリの値に関連する。本発明により、シミュレーション環境又は実環境におけるプログラムの実行の前にこうした違反を検出することができる。本方法は、プログラムの実行中にエラーをもたらす入力及びローカルメモリの初期値を見つけることである。デバッグは自動化されるとともに加速される。本方法は、記載した方法でエラーシナリオが見つからない場合に実行構成がプログラムプロパティを違反しないことを保証するため、網羅的である。実際に、従来技術では、テストの実行中にプロパティ違反が検出されない場合であっても、全てのあり得る実行に対してそのプロパティが持続する保証はない。
【0012】
得られる初期構成及び中間構成により、エラーシナリオに関する、プログラムの実行中にこうしたエラーが発生する場所、方法及び理由を示す有用な情報もまた、プログラムコードとともに提供される。プロパティ違反は正確に説明される。プロパティ違反をもたらす初期構成が計算され、メモリ割当等の実行情報が、初期構成からプロパティが違反されるプログラムの箇所まで、記録及び回収される。本方法は、一階述語論理においてプログラマーによって表される命令エラー又は機能仕様違反のいずれかを、インターロックプロパティ(interlocking property)として検出する。プログラムは、実行中、プロパティ違反をもたらす初期値及び中間値並びにバグを修正する方法等、メモリ値に対する追加の情報とともに、表示することができる。したがって、本方法は、実行すべきテストを決定し、それらの実行を監視し、それらの結果を分析するために、人の介入が不要であるため、自動デバッグを可能にする。
【0013】
本方法はまた、工業サイズの複雑なプログラムに対して制限がある自動化シミュレーションの場合のように、シミュレートすべき複数のテスト構成下でプログラムを連続的に実行する代わりに、プロパティ検証に依存するため、より高速なデバッグも可能にする。したがって、中央処理装置上での実行時間が削減される。
【0014】
これらの特質により、ファクトリーオートメーション業界においてラダープログラム展開時間を安全に削減する、効率的な、網羅的な且つ高速なツールが提供される。
【0015】
モデルは、好ましくは、数学的に証明可能である一階述語論理フレームワークで表され、したがって、計算問題を表現するのに有用である。さらに、一階述語論理は、ラダーモデルから導出されるプロパティと対応する機能仕様を表すように適合され、上位の論理フレームワークと比較して、一階述語論理プロパティの生成は自動化がより容易である。
【0016】
一実施の形態によれば、元のプログラムをモデルに翻訳するステップは、抽象構文木(Abstract Syntax Tree)としての上記元のプログラムの表現の第1の中間ステップと、上記抽象構文木からのモデルの生成の第2の中間ステップとを含む。
【0017】
こうした中間ステップの実装は、抽象構文木を、それが含有する全ての要素に対するプロパティ及びアノテーション等の情報により強化することができるため、有利である。上記抽象構文木は、好ましくは、OCAML等の関数型言語で記述される。抽象構文木はまた、ラダープログラムにおける各要素の位置を記憶することもでき、それは、モデルのシミュレートされた実行中にエラー中間構成を回収するのに有用である。
【0018】
このために、モデル実行をシミュレートするステップは、好ましくは、
上記エラー初期構成を、抽象構文木に対応するエラー初期構成に翻訳する第1の中間ステップと、
上記対応する初期構成を用いて抽象構文木を計算し、抽象構文木に対応する内部メモリの中間値を回収する第2の中間ステップと、
を含む。
【0019】
抽象構文木表現は、命令を接続する論理ゲートにおける値等、ラダープログラムの単純な実行によって得ることができない中間値を生成することができるため、有利である。
【0020】
一実施の形態によれば、元のプログラムをモデルに翻訳するステップは、静的単一代入変換の中間ステップを含む。静的単一代入変換は、好ましくは、抽象構文木表現に対して適用され、実行中に内部メモリ値を追跡するのに有利である。
【0021】
一実施の形態によれば、一組のプロパティを決定するステップの間に、上記一組のプロパティは、ダイクストラの最弱事前条件計算法を用いて、上記一組のプロパティに対する事前条件を決定するように計算され、上記一組のプロパティの検証は、その事前条件に基づいて実施される。事前条件は、プロパティに固有である基礎をなす前提である。事前条件が満たされることは、プロパティが検証され、その実行中にエラーが発生しないことを意味する。
【0022】
一実施の形態によれば、ユーザ仕様と結合された上記一組の述語の充足可能性は、充足可能性モジュロソルバー(Satisfiability Modulo Solver)を用いて検証され、これは、一階述語論理において論理式として表された決定問題である、背景理論付き充足可能性問題を解くように構成された、自動化ソルバーである。
【0023】
本発明の別の態様によれば、少なくとも1つのプロセッサによって実行されると、上述したような方法を実行する命令を含むコンピュータプログラムが開示される。
【0024】
好ましい実施の形態では、上記コンピュータプログラムは、演繹的プログラム検証プラットフォームにおいて実行される。
【0025】
本発明は、本発明による、上記に定義したような方法のステップをコンピュータに実行させる、コンピュータプログラムを記憶する、非一時的コンピュータ可読媒体を更に目的とする。
【0026】
本発明の別の態様によれば、上述したようなプログラマブルロジックコントローラプログラム分析方法を実行する装置が開示される。こうした装置は、一実施の形態では、
上述したコンピュータプログラム命令、及び場合により一時的な計算データ等の他のデータも記憶するメモリMEMと、
メモリMEMの内容を読み出すとともに、本発明による方法のステップを実行するプロセッサPROCと、
場合により、プロセッサPROCによって処理されるべき/処理されたデータを(ネットワーク又は他の任意のリンクを通して)受信/送信する入出力インタフェースINTと、
を備える(
図6の例に示すような)処理回路PCを備えることができる。
本発明の他の特徴及び利点は、非限定的な例として与えるその実施の形態のうちの1つの以下の詳細な説明から、且つ添付図面を参照して明らかとなる。
【図面の簡単な説明】
【0027】
【
図1】開示する方法に関与する例示的な一組のステップを示す図である。
【
図3a】開示する方法に関与する中間ステップの実行結果を示す図である。
【
図3b】開示する方法に関与する中間ステップの実行結果を示す図である。
【
図4】開示する方法に関与する中間ステップの別の実行結果を示す図である。
【
図5】開示する方法の実行の結果としてエラーシナリオを示す図である。
【
図6】プログラマブルロジックコントローラプログラム分析方法を実行する処理回路PCの一例を示す図である。
【発明を実施するための形態】
【0028】
図において、同じ参照符号は同一の又は同様の要素を示す。
【0029】
図1は、参照番号10によって示す、ラダープログラム演繹的検証に関与する例示的な一組のステップを示す。
【0030】
本方法の第1のステップ(TRANS)は、PLCプログラム(PROG)をモデル(MOD)に翻訳するものである、翻訳ステップである。
【0031】
上記PLCプログラムPROGは、以降PLCと称するプログラマブルロジックコントローラで実行可能である。PLCは、産業機械及びプロセスを制御するために、順序、計時、計数、算術、データ操作及び通信等の命令を記憶及び実行することができる。フィールドデバイスへのインタフェース回路は、入力接続及び出力接続の形態で提供される。
【0032】
ラダー図は、PLCプログラムのシーケンス制御ロジックをグラフィカル図で表す。ラダー言語は、ラダー図の一例を表す
図2に示すようにリレー論理電気回路図を模倣するグラフィカル言語である。ラダーロジックは、実際には、ルールベース言語である。「ラング」とも称されるルールは、一組のデータにおける条件によってアクティベートされるとインスタンス化される。一組は、上記アクティベーションに従って選択され、それらのルールに属するステートメントが実行される。リレー等の電気機械デバイスで実装される場合、プログラムを構成する様々なルールは、ソフトウェアの一部として連続ループにおいて逐次実行される。1秒につき多数回ループを実行することにより、同時且つ即時の実行の効果を達成することができる。ラングは、プログラマブルコントローラの適切な動作を達成するために所与の順序で実行される。より詳細には、ラダープログラムは、連続的に、例えば100ミリ秒毎に実行される1つのループを含むことができる。
【0033】
ラング入力は、「接点」とも称される論理チェッカである。いわゆる「接点」は、一体化された又は外部の入力モジュールを介する、押しボタン及びリミットスイッチ等の物理的デバイスからプログラマブルコントローラへの物理的又はハード入力を指すことができる。接点はまた、プログラムの別の場所で生成される可能性がある内部記憶ビットのステータスも表すことができる。
【0034】
ラング出力は、「コイル」によって表されるアクチュエータである。「コイル」は、プログラマブルコントローラに接続された何らかのデバイスを動作させる物理的出力を表すことができ、又は、プログラムの別の場所で使用される内部記憶ビットを表すことができる。各接点又はコイルは、プログラマブルコントローラのメモリにおける単一ビットのステータスに対応する。これらの命令は、メモリにおける特定のビットアドレスのオン/オフステータスを検査し、内部出力及び外部出力の状態を制御する能力を提供する。電気機械リレーとは異なり、ラダープログラムは、単一ビットのステータスを任意の回数参照することができ、無限に多数の接点を有するリレーと等価である。
【0035】
ラダー図では、ラングは、接続された命令のネットワークとして構成される。命令の間の接続は、上記命令の間の論理関係を表す。例えば、ラダーロジックにおいてORロジックは2つの接点の並列接続で実装され、ANDロジックはラダーロジックで接点の直列接続として実装される。
【0036】
第1のステップで動作する翻訳(TRANS)は、翻訳アルゴリズムを実施することによって実行される。翻訳アルゴリズムは、ラダープリミティブの事前定義されたモデル化を用いて、ラダープログラム(PROG)を、論理フレームワークで表されるモデル(MOD)に翻訳する。ラダープリミティブは、接点によって表される論理チェッカ、コイルによって表されるアクチュエータ、機能ブロック、及びより一般的には任意の基本又は拡張ラダー言語命令等、ラダー論理回路を構成する論理命令要素からなる。
【0037】
モデル(MOD)は、好ましくは、一階述語論理の論理フレームワークで表される。一階述語論理は、命題論理の拡張であり、領域と称される世界の部分的な視野において命題が真であるか又は偽であるかを考慮する。一階述語論理は、アルファベット、一階述語言語、一組の公理及び一組の推論規則からなる。一階述語論理は数学的に証明可能であり得るため、計算問題を表現するのに有用である。一階述語論理は、構文論及び意味論から構成されている。一階述語論理の構文論は、概念を表すために用いられる形式言語であり、一階述語論理の意味論は、任意の一階述語論理式の値を決定する論理式である。
【0038】
ラダープログラムのシーケンス構造を考慮すると、翻訳は、ループ自体に含まれる命令に対してのみ動作する。したがって、プログラムがループの連続的な実行を含まないため、時相論理でのプログラムモデルの表現は不要である。翻訳の第1のステップ中、代数的データ型を用いて、プログラムの入力、内部メモリ及び出力がモデル化される一方、多相型を用いて、モデルプリミティブの数が因数分解される。
【0039】
命令のモデル化は、述語を表現するように一階述語論理式として命令を表すことである。述語は、基本的に、非二値変数の二値関数である。実行時における入力及びローカルメモリの認可された値は、こうした述語から得ることができる。命令モデル化は、実行時の入力及びローカルメモリの認可された値、すなわち、命令が実行されるときにエラーを発生させない値を表す、一階述語論理式として表現されるプロパティに関連付けることができる。これらの論理式は、命令及び論理式が参照するエラー理由のような更なる情報にリンクさせることができる。
【0040】
ラダーモデルは、上記述語を含む数学的記述を用いて生成される。言い換えれば、ラダープログラムの目的は、選択された数理論理学における一組の述語を用いて表される。こうした数学的記述の検証により、プログラムの計算手法が正確であることが確実になる。こうした数学的記述の検証により、計算手法が、計算することが期待されることを実行する理由が明らかとなる。こうした検証は、証明とも称され、数学的記述に関連するプログラムの実行の安全性及び健全性を確実にする。プログラム実行中に、ランタイムエラー(メモリへの不正アクセス若しくはオーバーフロー、0によって除算しようとする試みのような不正操作、又は、ループの連続的な実行を含む他のタイプのプログラムの場合は、無限ループのような終了問題等)がないことが証明された場合に、実行の安全性が確実になる。プログラム健全性は、機能正確性とも称され、プログラムが行うように想定されることを行うことを検証することである。
【0041】
形式論理では、論理システムは、システムにおいて証明することができる全ての論理式が、システムの意味論に関して論理的に妥当である場合にのみ、健全性を有する。言い換えれば、システムは、その定理の全てがトートロジーであるとき、健全である。演繹的システムの健全性は、その演繹的システムにおいて証明可能である任意の文(sentence)が、意味論的理論の、その理論が基づく言語に対する全ての解釈又は構造において真でもあるという特性である。
【0042】
好ましい実施形態では、第1のステップは第1の中間ステップ(AST-TRANS)を含み、そこでは、ラダープログラムは最初に、AST表現又は構文木としても知られ、以降、頭字語ASTと称する抽象構文木として表現される。次いで、第2の中間ステップ(MOD-TRANS)において、ラダープログラムのAST表現からラダーモデルが生成される。
【0043】
抽象構文木は、プログラミング言語で書かれるソースコードの抽象構文構造の木表現である。木の各ノードは、本実施形態ではラダープログラムである、ソースコードで発生する構成体を示す。
【0044】
ASTは、それが含有する全ての要素に対するプロパティ及びアノテーション等の情報により編集及び強化することができる。こうした編集及びアノテーションは、ラダープログラムのソースコードでは、ソースコードを変更することを意味するため、不可能である。
【0045】
ラダープログラムと比較すると、そのASTは、実際の構文に現れる全ての詳細は含まず、波括弧、セミコロン又は丸括弧等、構造的且つ内容に関連する詳細のみを含む。if条件then表現のような構文構成体は、3つの分岐とともに単一のノードを用いて示すことができる。
【0046】
ASTは、通常、コンパイラによる連続的な分析段階に起因して、プログラムに関する追加の情報を含む。ラダープログラムをASTで表現することは、本方法の続くステップにおいて有用である、ラダープログラムにおける各要素の位置を記憶することを可能にするため、有利である。この中間ステップはまた、ASTの完全なトラバーサルにより概してプログラムの正確性の検証が可能であるため、興味深い。
【0047】
本実施形態では、上記AST表現は、好ましくは、OCAML等の関数型言語で記述される。
【0048】
好ましい実施形態では、翻訳アルゴリズムは第3の中間ステップを含み、そこでは、静的単一代入変換(SSAT)を用いて、プログラムの実行中に内部メモリ値が追跡される。ラダー言語等の命令型プログラミング言語では、代入により、変数は、それらの寿命及びスコープの間の異なる時点で異なる値を保持することができる。静的単一代入変換は、各実行段階において代入される値を追跡するために有利である。命令型言語で書かれたプログラムに対して演繹的検証を実施するために、関数型モデルへの変換が必要であり、それは、静的単一代入変換により、モデルに対して、より詳細にはAST表現に対して実施される。静的単一代入変換は、モデル要素をラダープログラム要素に連結するために、モデル要素に、コード位置のような情報を追加するのを可能にする、連結ステップとして見ることができる。したがって、元のラダープログラム(PROG)まで遡ることを、容易に実施することができる。
図3bは、こうした静的単一代入変換の一例を提供し、そこでは、モデル実行の異なるステップにおける整数D1の値は、(d1_1,d1_2,d1_3)の値として記憶される。この変換に相当するものが、
図3aのラダー図に表現されている。
【0049】
本方法の第2のステップ(PredT)は、ラダープログラムモデル(MOD)からプロパティ(Prop)を生成することである。第2のステップは、モデル(MOD)を事前定義された言語形式化(LForm)と結合して、上記モデル(MOD)に関連するプロパティ(Prop)を得る。次いで、上記プロパティに対する条件(Cond)が得られる。
【0050】
こうしたプロパティは、モデル実行において実施される動作を表し、各実行段階において検証されるように予期される。それらは、各再帰呼出し時にループ不変条件を検証することに類似している。上記プロパティに対する条件は、2つのカテゴリ、すなわち、事前条件及び事後条件に分類することができる。
【0051】
事前条件(PreCond)は、プロパティ(Prop)に固有であるとともに、その実行の前に検証されるべきであり、そうでなければエラーが発生する可能性がある、基礎をなす前提を示す。より詳細には、ルーチンが呼び出されると、上記ルーチンプロパティに対応する事前条件は、上記ルーチンプロパティが検証されるように満たされると想定される。
【0052】
例えば、階乗関数プログラムは、変数に対して実施される再帰的計算法を表すループを含む。こうしたループの事前条件は、階乗が計算される変数が、ループの開始時は正の整数でなければならないということである。
【0053】
事後条件は、事前条件が検証されてルーチンが呼び出されたときに予測される結果を表す。したがって、ルーチンプロパティの事前条件は、プロパティ計算時にルーチンの最後に予測された結果から演繹することができる。ループの場合、事前条件及び事後条件は、特に、ループの連続的な実行を含むプログラムにおいて、密に関連するか又は更には類似し、ループ不変条件を形成する。ループの実行段階において事後条件が満たされる場合、次の段階の事前条件も同様に満たされることが確実になる。
【0054】
そのために、この第2のステップ(PredT)は、ダイクストラの最弱事前条件(weakest precondition)計算法を用いて、上記プロパティを計算するとともに、モデルプロパティ(Prop)に関連する事前条件(PreCond)を決定する。
図4は、第2のステップにおいて事前条件を得るために生成及び計算されたプロパティの一例を示す。
図4のプロパティは、以下のように読むことができる。すなわち、「Xに記憶された値が「オン」/「真」である場合、D1に記憶された値は、0よりも大きく且つ9999よりも小さい」である。
【0055】
一階述語論理プロパティに対するダイクストラの最弱事前条件計算法の実行により、こうした計算が健全でありながら、計算されたプロパティのサイズを最小限にすることが確実になる。事前条件は、各プロパティの定義領域を提供する。このステップにより、事前条件を満たすことが、ルーチンプロパティが持続することと、その実行中にエラーが発生しないこととを意味するため、証明の健全性が確保される。したがって、プロパティが充足される場合、又は言い換えれば、上記プロパティの対偶が充足可能でない場合、対応するラダープログラムを実行するときにエラーは発生する可能性がない。
【0056】
有利な実施形態では、ユーザ仕様(FUNC)から、他のプロパティが表される。ユーザ仕様は、機能仕様とも称され、プログラムの予測された挙動、すなわち、プログラムが、プログラムユーザによって必要とされるものを満たすように実行するべき機能とともに、入力及び出力の要求されたプロパティを記述する。例えば、工業背景において、ロボットアームは、センサが所与の範囲内の信号を受信しているときにのみ動作するように要求される場合がある。書かれているプログラムは、上記仕様に従うように想定されているが、ユーザ仕様から導出される計算プロパティは、書かれたプログラムが命令エラーを含む可能性があるため、追加の安全措置である。
【0057】
これらのプロパティは、インターロックプロパティ(IntProp)であり、一階述語論理において機能仕様を表すことによって得られる。上記インターロックプロパティは、満たすべき追加の事後条件としてモデルのプロパティを用いて計算される。したがって、事前条件(PreCond)は、これらのインターロックプロパティから同様に、ダイクストラの最弱事前条件計算法を用いて導出することができる。
【0058】
第1のステップ及び第2のステップにおいて、上位の論理フレームワークも用いることができるが、一階述語論理は、概して、ラダーモデルから導出されるプロパティ(Prop)と対応する機能仕様(IntProp)とを表すのに適している。上位の論理フレームワークは、最終的応用に関する不必要な複雑性を導入する可能性がある。さらに、一階述語論理プロパティの生成は、上位の論理フレームワークと比較して自動化がより容易である。
【0059】
機能仕様から導出されるプロパティの計算により、モデルのプロパティが充足されるとき、実行時に、機能仕様の違反から導出されるエラーが発生しないことが確実になる。
【0060】
第2のステップは、述語変換としても知られ、好ましくは、入力としてラダーモデルを受け取るとともに様々なプログラムの形式的証明を生成する適切なツールを含む、演繹的プログラム検証プラットフォーム(PLAT)において計算される。第1のステップもまた、好ましくは、演繹的プログラム検証プラットフォーム(PLAT)において計算される。命令モデル化は、外部モデル化ツールを通して実施することができ、外部モデル化ツールは、上記演繹的プログラム検証プラットフォームにおいてダウンロードされるとともに、ラダー言語の事前定義されたテンプレート及びモデルを含む、ライブラリとすることができる。有利な実施形態では、上記プラットフォーム(PLAT)は、WHY3のタイプであり、ラダーモデル(MOD)は、WHYMLのタイプのプログラミング言語で表現される。
【0061】
本方法の第3のステップ(SMT)は、第2のステップにおいて生成されたプロパティを形式的に証明するか、又は、これらのプロパティに対する反例を見つけるために、自動化ソルバーを用いる。上記生成されたプロパティは、それらが常に充足される場合、又は、その対偶が充足可能でない場合、形式的に証明される。上記プロパティ(Prop)又はその対偶の充足可能性は、それらの先行定義された事前条件(PreCond)に従って評価される。
【0062】
好ましい実施形態では、第3のステップは、背景理論付き充足可能性(SMT)問題に対して自動定理証明器によって実施され、この自動定理証明器を用いて、多数の組込み論理的理論及びそれらの組合せにおいて一階述語論理式の妥当性(又は、二元的に、充足可能性)を証明することができる。こうしたソルバーは、論理式として一階述語論理において表される決定問題である、背景理論付き充足可能性問題を解くように構成されている。SMT問題は、命題変数が別の数学的理論の論理式に置き換えられるSAT問題である。より具体的には、SMT問題は、追加の解釈を含む一階述語論理における論理式である一組のSMTインスタンスとして表される。
【0063】
第2のステップにおいて先行して用いられた演繹的プログラム検証プラットフォームは、概して、自動ソルバーを同様に含む。したがって、上記自動ソルバーを用いて、第3のステップを同様に計算することができる。用いることができるソルバーの一例は、好ましくは、CVC4である。別の例は、Z3及びAlt-Ergoとすることができる。ソルバーは、証明を実行するとともに反例を提供するように、プラットフォームと適切に相互作用するように構成されなければならない。上記相互作用は、証明又は反例が必要とされるモデル要素の指示を含む。上記プラットフォーム(PLAT)がWHY3である好ましい実施形態では、証明又は反例が必要とされるモデル要素は、
図3bにおいて「model-trace」というラベルで見ることができるように、WHYML言語において特定の関数によってラベル付けすることができる。
【0064】
解は、背景理論に関して発見的に実施され、SMTインスタンスが充足可能であるか否かを判断することである。第2のステップから得られるプロパティは、少なくとも整数線形算術の理論、好ましくは、レコード、線形実数算術及び文字列の理論に関して解かれる。有利な実施形態では、自動定理証明器は、多相型の一階述語論理に基づき、好ましくは、有理数及び整数の線形算術、配列、タプル、レコード、帰納的データ型、ビットベクトル、文字列、及び未解釈関数シンボルに関する等式(equality over uninterpreted function symbols)等、組込み基礎理論を含む。より好ましい実施形態では、こうした自動定理証明器は、量化記号及びモデル生成能力のためのサポートを更に含む。
【0065】
第2のステップで得られたプロパティ(Prop、IntProp)が、SMTソルバーを使用することによってその計算時に充足された場合、SMTソルバーにより、プロパティが充足されているという証明を表す応答(PROOF OK)が生成される。次いで、プログラム(PROG)の命令が、生成時にエラーをもたらす可能性がないこと、及び/又はユーザによって表された機能仕様(FUNC)が、ラダープログラム(PROG)の全てのあり得る実行に対して持続することが確実になる。したがって、プログラム(PROG)の健全性が論証される。
【0066】
そうでなく、プロパティ(Prop、IntProp)の対偶が充足可能である場合、ソルバーによってプロパティに対する反例が提供される。SMTソルバーにより、上記反例を表す応答(PROOF NOK)が生成され、それは、上記プロパティが充足されていない場合をもたらすモデル構成に対応する。特に、反例の内容は、形式的証明が事前条件(PreCond)に基づいて評価されるため、少なくとも初期構成を指す。
【0067】
本方法の第4のステップは、得られたプロパティ反例(PROOF NOK)をモデル構成に、より詳細には初期モデル構成に翻訳する(TRANSB)。上記モデル構成は、モデル入力及び内部メモリ値を含む。この翻訳は、上記事前定義された言語形式化(LForm)に基づいて実施され、第2のステップにおけるモデル(MOD)からのプロパティ生成プロセスの逆のプロセスとして動作する。
【0068】
得られたプロパティ反例は、初期モデル構成(IniConf)及び中間モデル構成(IntConf)の両方に対応するデータを含み、その理由は、モデル及び演繹的検証プロセスが関数型であるためである。上記初期モデル構成(IniConf)は、ラダーモデル(MOD)の実行の開始時に、上記プロパティが充足されない場合をもたらすモデル入力及び内部メモリの初期値を含む。上記中間モデル構成は、ラダーモデル(MOD)の実行の開始と、上記プロパティが充足されないモデル位置との間の内部メモリの中間値を含む。
【0069】
しかしながら、上記反例は、実行中に生成される中間値の全ては含まない。例えば、ラダープログラムの実行中に、ラダープログラム変数Xに対して4つの値を代入することができる。したがって、4つの値は、変数Xを表す4つの中間変数(X1、X2、X3、X4)に代入される。得られた反例は、場合によっては、中間変数(X1、X2、X3、X4)の全てに対応する値を返さない可能性がある。
【0070】
後に詳述するように、この場合を克服する好ましい方法は、得られた反例から初期構成を選択することと、反例から選択された上記初期構成(IniConf)によりモデルを実行することによって中間変数(X1、X2、X3、X4)の値を再計算することとである。
【0071】
第5のステップは、第4のステップにおいて得られたモデルの初期構成から内部メモリの中間値を計算するために、ラダープログラムの実行(EXE)をシミュレートすることである。
【0072】
好ましい実施形態では、第5のステップは、第4のステップで得られたモデル初期構成(IniConf)を、好ましくはOCAML言語で表されるAST表現の対応する初期構成(AST-IniConf)に翻訳することである、第1の中間ステップ(AST-TRANSB)を含む。こうした翻訳は、第1のステップで動作したようなAST表現のモデルへの翻訳から導出することができる。
【0073】
第5のステップは、AST表現内部メモリ(AST-IntConf)の中間値を回収及び記録するために、上記対応する初期構成(AST-IniConf)を用いて、シンボリック実行エンジン(Symbolic Execution Engine)によってAST表現を計算することである。AST表現実行は、ラダープログラム実行のシミュレーションとして動作する、第2の中間ステップ(AST-SyEx)を含む。中間値の収集は、エラー又は仕様違反が発生する実行の箇所まで実施される。第5のステップは、上記演繹的プログラム検証プラットフォームにおいて同様に実施することができる。
【0074】
結果として、AST表現は、ラダープログラムの実行によって得ることができない中間値の生成を可能にするため、有利である。中間値を得ることができない1つの理由は、ラダーモデルでは、命令を接続する論理ゲートが変数として表現されないということである。したがって、こうしたコード位置において発生するエラーは、返される反例において明確とはならない。第1のステップにおける翻訳時、これらのコード位置における値は失われ、第3のステップ時に提供される反例値から回収されない。しかしながら、これらのコード位置における値は、エラーをもたらしたものの適切な解釈のために必須である。第5のステップは、静的単一代入が適用されたAST表現の実行により、これらのコード位置における値の回収も可能にする。
【0075】
この第5のステップは、モデルエラーシナリオを提供し、これを通して、エラー又は仕様違反をもたらす値が収集される。モデルエラーシナリオは、AST表現構成(AST-IniConf、AST-IntConf)に基づく。
【0076】
第6のステップは、モデルエラーシナリオをラダープログラムに戻すように翻訳する。AST表現構成(AST-IniConf、AST-IntConf)は、ラダープログラムの対応する構成に戻るように翻訳される。
図5はエラーシナリオを示し、エラーシナリオは、二値に対する色と、上記エラーシナリオの整数値に対するラベルとを含む。ラダープログラムは、
図5に示すように、グラフィカルに表示され、プログラムにおけるエラー位置、上記エラーの前の、例えば、色強調表示によって示される実行パスと、プログラム実行の開始からエラー又は仕様違反までの入力及び内部メモリの値に関する情報により、拡充されている。エラーシナリオは、第1のステップにおいてモデルに追加されたエラー位置及び理由情報とともに、見つけられたエラーとそれを修正する方法とに関する非常に充実した情報を与える。