特許第6861844号(P6861844)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ディスペース デジタル シグナル プロセッシング アンド コントロール エンジニアリング ゲゼルシャフト ミット ベシュレンクテル ハフツングの特許一覧

<>
  • 特許6861844-ソースコードを生成するための方法 図000004
  • 特許6861844-ソースコードを生成するための方法 図000005
  • 特許6861844-ソースコードを生成するための方法 図000006
  • 特許6861844-ソースコードを生成するための方法 図000007
  • 特許6861844-ソースコードを生成するための方法 図000008
  • 特許6861844-ソースコードを生成するための方法 図000009
  • 特許6861844-ソースコードを生成するための方法 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6861844
(24)【登録日】2021年4月1日
(45)【発行日】2021年4月21日
(54)【発明の名称】ソースコードを生成するための方法
(51)【国際特許分類】
   G06F 8/34 20180101AFI20210412BHJP
   G05B 19/042 20060101ALI20210412BHJP
   G06F 9/455 20060101ALI20210412BHJP
【FI】
   G06F8/34
   G05B19/042
   G06F9/455
【請求項の数】15
【全頁数】24
(21)【出願番号】特願2019-556211(P2019-556211)
(86)(22)【出願日】2018年7月12日
(65)【公表番号】特表2020-529053(P2020-529053A)
(43)【公表日】2020年10月1日
(86)【国際出願番号】EP2018068986
(87)【国際公開番号】WO2019025155
(87)【国際公開日】20190207
【審査請求日】2020年12月16日
(31)【優先権主張番号】17183987.1
(32)【優先日】2017年7月31日
(33)【優先権主張国】EP
【早期審査対象出願】
(73)【特許権者】
【識別番号】506012213
【氏名又は名称】ディスペース デジタル シグナル プロセッシング アンド コントロール エンジニアリング ゲゼルシャフト ミット ベシュレンクテル ハフツング
【氏名又は名称原語表記】dspace digital signal processing and control engineering GmbH
(74)【代理人】
【識別番号】100114890
【弁理士】
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【弁理士】
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【弁理士】
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100135633
【弁理士】
【氏名又は名称】二宮 浩康
(74)【代理人】
【識別番号】100162880
【弁理士】
【氏名又は名称】上島 類
(72)【発明者】
【氏名】ミヒャエル マイア
(72)【発明者】
【氏名】ヴォルフガング トラウトマン
【審査官】 杉浦 孝光
(56)【参考文献】
【文献】 特開平06−028166(JP,A)
【文献】 特開2003−015705(JP,A)
【文献】 米国特許出願公開第2006/0136181(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00− 8/77
G06F 9/455
G05B 19/042
(57)【特許請求の範囲】
【請求項1】
ブロック図の1つまたは複数のブロックからソースコードを生成するための方法であって、
コンピュータシステムによって、前記ブロック図を生成し、前記ブロック図は、2つのブロックの間に少なくとも1つの信号接続部を有する動的システムのモデルを含み、前記ブロック図は、前記動的システムをシミュレートするために実行することができ、1つまたは複数のブロックが位置する少なくとも1つの領域は、前記ブロック図内に定義されており、前記ブロック図は、第1のブロックおよび第2のブロックを含み、前記第1のブロックは、第1のブロック変数を有し、前記第2のブロックは、第2のブロック変数を有し、前記ブロック図のそれぞれのブロック変数は、1つの識別子を有し、
前記コンピュータシステムによって、前記第1および第2のブロック変数の前記識別子が、一致しているかまたは異なるか、および、前記第1および第2のブロックが同じ領域内に位置しているか否かを決定し、前記第1および第2のブロック変数の前記識別子が一致しているかまたは異なるかを決定することは、前記第1のブロック変数の前記識別子と前記第2のブロック変数の前記識別子とを比較することに基づき、
前記第1および第2のブロック変数の前記識別子が一致しているかまたは異なるか、および、前記第1および第2のブロックが同じ領域内に位置しているか否かの決定に基づいて、前記コンピュータシステムによって、前記第1および第2のブロック変数を単一の変数としてまたは2つの別個の変数としてソースコードにおいて実装し、前記第1および第2のブロック変数の前記識別子が一致していて、かつ、前記第1および第2のブロックが同じ領域内に位置している場合には、前記第1および第2のブロック変数は、単一の変数としてソースコードにおいて実装され、前記第1および第2のブロック変数の前記識別子が異なっており、かつ/または、前記第1および第2のブロックが同じ領域内に位置していない場合には、前記第1および第2のブロック変数は、2つの別個の変数としてソースコードにおいて実装される、
方法。
【請求項2】
前記ブロック図は、階層的に定義されており、
上位のレベルのブロックは、下位のレベルの複数のブロックを含むことができ、この際、下位のレベルの複数のブロックは、上位のレベルの1つのブロックに割り当てられており、
前記ブロック図は、1つまたは複数の定義ブロックを含み、
1つの定義ブロックに基づいて1つの領域が定義され、この際、前記定義ブロックを含む、その次に上位のレベルにあるブロックと、前記ブロックに割り当てられた全てのブロックと、が前記領域内に位置するように定義される、
請求項1記載の方法。
【請求項3】
前記ブロック図は、上位のレベルの1つの共通のブロックに含まれている少なくとも2つの定義ブロックを含み、
第1の定義ブロックは、第1のレベルに配置されており、第2の定義ブロックは、前記第1のレベルよりも下位の第2のレベルに配置されており、
前記第1のブロックは、第1の領域を定義し、
前記第2のブロックは、第2の領域を定義し、この際、前記第2の定義ブロックを含む、前記第2のレベルの次に上位のレベルにあるブロックと、前記ブロックに割り当てられた全てのブロックと、が前記第2の領域内に位置するように定義する、
請求項2記載の方法。
【請求項4】
前記少なくとも2つの定義ブロックは、少なくとも2種類の定義ブロックを含み、
1種類の、特徴付けられた定義ブロックが定義されており、
前記第1の定義ブロックが特徴付けられた定義ブロックである場合には、前記第1の領域と前記第2の領域とが1つの共通の領域に併合され、
そうでない場合には、前記第1の領域と前記第2の領域とが別個の領域として処理される、
請求項3記載の方法。
【請求項5】
ブロック変数の識別子は、少なくとも1つの生成規則の評価に基づいて決定され、
前記生成規則は、前記ブロック変数の前記識別子を、
前記ブロック変数を有するブロックが含まれている上位のレベルのブロックに基づいて決定し、かつ/または、
前記ブロック変数を有するブロックが位置している領域に基づいて決定する、
請求項2記載の方法。
【請求項6】
前記第1および第2のブロックが同じ領域内に位置しているか否かを決定することは、前記第1のブロック変数の前記識別子と前記第2のブロック変数の前記識別子との比較に基づく、
請求項5記載の方法。
【請求項7】
所定の機能を提供する事前定義されたブロックを、ライブラリから前記ブロック図に挿入することができ、
前記ブロック図は、同じ機能を有するブロックの複数のインスタンスを含み、
それぞれのインスタンスに対して1つの独立した領域が定義されるか、または
前記複数のインスタンスに対して1つの共通の関数が定義され、かつ、それぞれのインスタンスに対して前記ブロック変数を有する1つのデータ構造が定義され、
実行されるべきブロックに応じて、対応するデータ構造が前記共通の関数に移行される、
請求項1記載の方法。
【請求項8】
前記第1および第2のブロック変数の各々は、許可フラグを有し、
前記第1および第2のブロック変数を単一の変数としてまたは2つの別個の変数としてソースコードにおいて実装することは、前記第1および第2のブロック変数の前記許可フラグにさらに基づき、
2つのブロック変数に前記許可フラグがセットされている場合にのみ、前記第1および第2のブロック変数が単一の変数として実装される、
請求項1記載の方法。
【請求項9】
それぞれのブロック変数は、少なくとも1つのチェックフラグを有し、
2つのブロック変数に前記チェックフラグがセットされていて、かつ、各チェックフラグに割り当てられた少なくとも1つのチェック条件も満足されている場合にのみ、前記第1および第2のブロック変数が単一の変数として実装され、
前記少なくとも1つのチェック条件は、以下のチェック条件のうちの1つまたは複数、すなわち、
・ブロック内のブロック変数が、変更されることなく読み取られるだけであるか否か、
・前記2つのブロック変数が、重複していないそれぞれ異なる時間でのみ読み取りまたは書き込みされるように、前記ブロック変数のそれぞれ異なるインスタンスの寿命がばらばらであるか否か、
・定義データ収集部において前記ブロック変数に同一の変数定義が割り当てられているか否か、
・前記ブロック変数が、同一方向に指定された有向接続部に配置されているか否か、
を含む、
請求項8記載の方法。
【請求項10】
前記第1および第2のブロック変数を単一の変数としてまたは2つの別個の変数としてソースコードにおいて実装することは、以下の条件のうちの1つまたは複数、すなわち、
・前記ブロック変数に同一のデータ型が割り当てられていること、
・前記ブロック変数に互換性のある測定単位が割り当てられていること、
・ブロック変数の名前が、同じ生成規則を使用して決定されること、
のうちの1つまたは複数が満足することにさらに基づく、
請求項8記載の方法。
【請求項11】
少なくとも1つのブロック変数は、各ブロック間の有向接続部に基づいて自動的に生成され、
前記第1のブロックは、前記第2のブロックに接続されており、かつ、前記第2のブロックは、第3のブロックに接続されており、
前記第1のブロックの第1のブロック変数は、前記第1のブロックを起点とした接続のために生成され、前記第2のブロックの第2のブロック変数は、前記第2のブロックを起点とした接続のために生成され、
前記第1のブロックと前記第2のブロックとは、同じ領域内に位置し、
前記第1および第2のブロック変数は、単一の変数としてソースコードにおいて実装される、
請求項1記載の方法。
【請求項12】
前記ブロック図は、領域を定義する1つまたは複数の定義ブロックを含み、
ある1つの定義ブロックが形成する領域内に位置していないブロックは、追加の領域に割り当てられ、これにより、前記ブロック図のそれぞれのブロックが1つの領域内に位置し、かつ/または、
分離領域が定義され、この際、前記分離領域内に位置するブロックのブロック変数は、常に、別個の変数としてソースコードにおいて実装されている、
請求項1記載の方法。
【請求項13】
前記生成されたソースコードをコンパイルして、実行可能コードを生成し、
前記実行可能コードを制御装置に伝送し、前記制御装置をコンフィギュレーションする、
請求項1記載の方法。
【請求項14】
非一時的なコンピュータ可読記憶媒体であって、
前記コンピュータ可読記憶媒体上には、プロセッサ実行可能命令が、ブロック図の1つまたは複数のブロックからソースコードを生成するために格納され、前記プロセッサ実行可能命令は、プロセッサによって実行された場合に、
前記ブロック図を生成し、前記ブロック図は、2つのブロックの間に少なくとも1つの信号接続部を有する動的システムのモデルを含み、前記ブロック図は、前記動的システムをシミュレートするために実行することができ、1つまたは複数のブロックが位置する少なくとも1つの領域が、前記ブロック図内に定義されており、前記ブロック図は、第1のブロックおよび第2のブロックを含み、前記第1のブロックは、第1のブロック変数を有し、前記第2のブロックは、第2のブロック変数を有し、前記ブロック図のそれぞれのブロック変数は、1つの識別子を有し、
前記第1および第2のブロック変数の前記識別子が、一致しているかまたは異なるか、および、前記第1および第2のブロックが同じ領域内に位置しているか否かを決定し、前記第1および第2のブロック変数の前記識別子が一致しているかまたは異なるかを決定することは、前記第1のブロック変数の前記識別子と前記第2のブロック変数の前記識別子とを比較することに基づき、
前記第1および第2のブロック変数の前記識別子が一致していて、かつ、前記第1および第2のブロックが同じ領域内に位置している場合には、前記第1および第2のブロック変数を、単一の変数としてソースコードにおいて実装し、
前記第1および第2のブロック変数の前記識別子が異なっており、かつ/または、前記第1および第2のブロックが同じ領域内に位置していない場合には、前記第1および第2のブロック変数を、2つの別個の変数としてソースコードにおいて実装する、
非一時的なコンピュータ可読記憶媒体
【請求項15】
ブロック図の1つまたは複数のブロックからソースコードを生成するためのコンピュータシステムであって、
前記コンピュータシステムは、ヒューマンマシンインターフェースと、不揮発性メモリと、プロセッサと、を含み、
前記プロセッサは、前記不揮発性メモリに格納されているプロセッサ実行可能命令を実行し、
前記ブロック図を生成し、前記ブロック図は、2つのブロックの間に少なくとも1つの信号接続部を有する動的システムのモデルを含み、前記ブロック図は、前記動的システムをシミュレートするために実行することができ、1つまたは複数のブロックが位置する少なくとも1つの領域が、前記ブロック図内に定義されており、前記ブロック図は、第1のブロックおよび第2のブロックを含み、前記第1のブロックは、第1のブロック変数を有し、前記第2のブロックは、第2のブロック変数を有し、前記ブロック図のそれぞれのブロック変数は、1つの識別子を有し、
前記第1および第2のブロック変数の前記識別子が、一致しているかまたは異なるか、および、前記第1および第2のブロックが同じ領域内に位置しているか否かを決定し、前記第1および第2のブロック変数の前記識別子が一致しているかまたは異なるかを決定することは、前記第1のブロック変数の前記識別子と前記第2のブロック変数の前記識別子とを比較することに基づき、
前記第1および第2のブロック変数の前記識別子が一致していて、かつ、前記第1および第2のブロックが同じ領域内に位置している場合には、前記第1および第2のブロック変数を、単一の変数としてソースコードにおいて実装し、
前記第1および第2のブロック変数の前記識別子が異なっており、かつ/または、前記第1および第2のブロックが同じ領域内に位置していない場合には、前記第1および第2のブロック変数を、2つの別個の変数としてソースコードにおいて実装する
うに構成されている、
コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、とりわけ制御装置をプログラミングするために、ブロック図から実行可能コードを生成することに関する。
【背景技術】
【0002】
制御装置は、プロセスの物理量を検出するため、かつ/または接続されたアクチュエータによってプロセスに影響を与えるために、多数の用途で使用され、例えば、制動手順のアンチロック制御部であり得る。プロセスの動的な挙動を決定する時定数は、多くの場合、1ms以下のサイクル時間を必要とするので、制御装置のリアルタイム性能が必要である。コスト上の理由から制御装置は、メモリが少なくてコンピューティング能力が限られているマイクロコントローラを有することが多く、したがって、実行可能コードのサイズおよび効率が非常に重要である。
【0003】
制御装置の設計を高速化するために、MATLAB/Simulinkのようなコンピューティング環境のモデルに基づいて制御戦略を開発することが多い。したがって、プロセスおよび/またはコントローラ、または一般的に制御装置の挙動を、まず始めにシミュレートして、所期のプロパティの存在をチェックすることができる。具体的には、モデルは、計算のようなオペレーションを実行するブロックを含むブロック図であり得る。ブロックは、例えば複数の入力信号から1つの出力信号を計算することができる。通常、ブロック図は、周期的に実行され、全てのブロックは、メモリ内に永続的に保存され、それぞれのブロックは、時間ステップごとに1回実行される。とりわけ、ブロックは、最後のステップからの入力信号に対して1つまたは複数のオペレーションを適用して、目下のステップの出力信号を生成することができる。モデルから、コード生成器を使用して、制御装置をプログラミングするためのソースコードを直接的に生成することができる。例えば、ハワイ州コハラコーストでの1999年のコンピュータ支援制御システム設計に関する国際シンポジウムの議事録である、H. Hanselmann et al.著による“Production Quality Code Generation from Simulink Block Diagrams”から、ソースコードを生産品質で生成するためのコード生成器が知られている。
【0004】
モデルがブロック図の形式で記述され、データの交換または信号の伝送のために各ブロックが有向接続部または信号接続部を介してリンクされている場合には、コード生成の一般的な手順は、ブロックのそれぞれの出力ごとにソースコードにおける変数を生成することである。基本的に、本当に必要な数よりも多くのブロック変数が生じるので、最適化のための余地が存在する。1つの可能な最適化は、複数の異なるブロックのブロック変数を、ソースコードにおける1つの共通の変数にマッピングすることである。しかしながら、「マージ」とも呼ばれるこのブロック変数の併合には、リスクがないわけではない。なぜなら、複数のブロックにおける変数の再利用は、とりわけソースコードにおけるデータフローの変化によって望ましくない副作用をもたらす可能性があるからである。
【発明の概要】
【発明が解決しようとする課題】
【0005】
前述の背景に対して本発明の課題は、従来技術をさらに発展させることであり、とりわけ、望ましくない副作用を回避しながらよりコンパクトなソースコードの生成を支援することである。
【課題を解決するための手段】
【0006】
上記の課題は、請求項1記載のソースコードを生成するための方法と、請求項14記載のコンピュータプログラム製品と、請求項15記載のコンピュータシステムと、によって解決される。有利な発展形態は、従属請求項の対象である。
【0007】
すなわち、ブロック図の1つまたは複数のブロックからソースコードを生成するための方法であって、ブロック図は、2つのブロックの間に少なくとも1つの信号接続部を有する動的システムのモデルを含み、ブロック図を、動的システムをシミュレートするために実行することができる、方法が提供される。ブロック図内に、少なくとも1つの領域が定義されており、領域内に、1つまたは複数のブロックが位置しており、ブロック図は、第1のブロックおよび第2のブロックを含み、第1のブロックは、第1のブロック変数を有し、第2のブロックは、第2のブロック変数を有し、ブロック図のそれぞれのブロック変数は、1つの識別子を有し、第1のブロック変数の識別子が、第2のブロック変数の識別子と比較され、第1のブロックと第2のブロックとが同じ領域内に位置しているか否かがチェックされ、識別子同士が一致していて、かつブロック同士が1つの領域内に位置している場合には、第1のブロック変数および第2のブロック変数が、ソースコードにおいて単一の変数として実装され、識別子同士がそれぞれ異なっており、かつ/またはブロック同士が同じ領域内に位置していない場合には、第1のブロック変数および第2のブロック変数が、ソースコードにおいて2つの別個の変数として実装される。
【0008】
信号接続部を介してデータまたは信号を送信することができ、この場合、第1のブロックは、1つの値を出力し、または定義に応じて複数の関連する値を出力し、第2のブロックは、これらの値を受信し、第2のブロックの1つまたは複数の関連する出力値を決定する際に、これらの値を考慮する。例えばバスの場合に該当するように、信号は、スカラー変数、および/または配列のような構造化されたデータ型を含むことができる。
【0009】
ブロック変数を、ブロック内で明示的に定義することができるか、または例えば、信号接続部に基づいて自動的に生成することができる。ブロック変数の識別子または名前を、固定的に規定することができるか、または規定された回避挙動を伴って、または規定された回避挙動を伴わずに、生成規則または生成ルールに基づいて定義することができる。とりわけ、複数のブロック変数が1つのブロックの1つの出力信号にされる場合には、識別子は、信号の発信元であるブロック内のポートの名前を含むことができる。したがって、識別子は、常に固定的なままであり得るか、または複数の一致する識別子が競合している場合には、少なくとも1つの識別子が所定のルールに従って変更される。好適には、固定的な一致する識別子を有する2つの変数は、好ましくは1つまたは複数の許可条件が満足されている場合に併合される。
【0010】
領域の定義に基づいて、ブロック変数を併合してもよいか否か、およびどの環境においてブロック変数を併合してもよいかを制御することができる。したがって、ブロック図の意味的に相関していない領域における変数の併合を、排除することができる。このことによって、データフローの不規則な変化による見つけにくい副作用が回避される。
【0011】
好ましくは、ブロック図は、階層的に定義されており、上位のレベルのブロックは、下位のレベルの複数のブロックを含むことができ、この際、下位のレベルの複数のブロックは、上位のレベルの1つのブロックに割り当てられている。すなわち、好適には、下位のレベルのそれぞれのブロックは、上位のレベルのブロックに所属する。ブロックを、下位のレベルにおける対応するブロックによって定義することができるか、または下位構造を有さないシンプルなブロックとすることもできる。ブロック図の階層構造によって見やすさが改善される。
【0012】
特に好ましくは、ブロック図は、1つまたは複数の定義ブロックを含み、1つの定義ブロックに基づいて1つの領域が定義され、この際、当該定義ブロックを含む、その次に上位のレベルにあるブロックと、当該ブロックに割り当てられた全てのブロックと、が当該領域内に位置するように定義される。その次に上位のレベルにある上記の包括的なブロックを、とりわけサブシステムとして構成することができる。好ましくは、ある1つの定義ブロックが形成する領域内に位置していないブロックは、追加の領域に割り当てられ、これにより、ブロック図のそれぞれのブロックが1つの領域内に位置している。これに代えて、ある1つの定義ブロックによって定義された領域内に位置しているブロックのみを併合してよいとすることもできる。
【0013】
定義ブロックを、領域を定義するためだけの専用として規定することができる。しかしながら定義ブロックのプロパティを、同時に、所定の意味のあるブロックに割り当てることも可能である。とりわけ、これは、関数ブロックであり得る。すなわち、この関数ブロックは、周囲のサブシステムをソースコードにおいて関数として実装すべきであることを示し、好ましくは、関数のさらなるプロパティを定義する。1つの関数は、ソーステキスト内で1つのユニットを形成するので、例えば見やすくする観点から、変数の併合をこのユニットに制限することが好適である。ブロック図が、AUTOSARソフトウェアコンポーネントをモデル化するために使用される場合には、とりわけ、ソフトウェアコンポーネントの独立したサブユニットとしてランナブルを定義するためのランナブルブロックに、定義ブロックのプロパティを割り当てることもできる。
【0014】
非常に特に好ましくは、ブロック図は、上位のレベルの1つの共通のブロックに含まれている少なくとも2つの定義ブロックを含み、第1の定義ブロックは、第1のレベルに配置されており、第2の定義ブロックは、第1のレベルよりも下位の第2のレベルに配置されており、第1のブロックは、第1の領域を定義し、第2のブロックは、第2の領域を定義し、この際、第2の定義ブロックを含む、第2のレベルの次に上位のレベルにあるブロックと、当該ブロックに割り当てられた全てのブロックと、が当該第2の領域内に位置するように定義する。基本的に、第2のレベルを、第1のレベルの下の複数の階層段階で配置することができる。これにより、どの領域において変数を併合してよいのかを、所期のように制御することが可能となる。
【0015】
とりわけ、少なくとも2種類の定義ブロックを存在させることができ、1種類の、特徴付けられた定義ブロックが定義されており、第1の定義ブロックが、特徴付けられた定義ブロックである場合には、第1の領域と第2の領域とが1つの共通の領域に併合され、そうでない場合には、第1の領域と第2の領域とが別個の領域として処理される。例えば、関数ブロックまたはランナブルブロックを、特徴付けられた定義ブロックとして定義することができる。関数またはランナブルの明確に画定された統一的な領域が断片化されることを阻止することにより、ブロック図の最適化が得られたままとなる。
【0016】
ブロック変数の識別子が、少なくとも1つの生成規則の評価に基づいて決定され、生成規則が、ブロック変数の識別子を、当該ブロック変数を有するブロックが含まれている上位のレベルのブロックに基づいて決定し、かつ/または当該ブロック変数を有するブロックが位置している領域に基づいて決定すると有利である。この場合、2つのブロックが同じ領域内に位置しているか否かのチェックが、ブロック変数の識別子の比較に基づいて実施されると有利である。好ましくは、識別子を、少なくとも部分的に$(Scope)_$Bのような名前マクロの形式で指定することができる。生成規則または名前マクロは、コードを生成する時点に評価され、$(Scope)は、領域の名前、とりわけ包括的なサブシステムの名前によって置き換えられ、$Bは、ブロックの名前によって置き換えられる。基本的に、さらなる名前マクロまたはワイルドカードを定義して、1つまたは複数の識別子の名前に埋め込むことができる。名前衝突の発生時における自動的な解決を可能にするために、名前マクロにそれぞれ1つの回避規則を割り当てることもできる。これに代えて、ブロックまたは領域に回避規則を割り当ててもよい。識別子は、好適には、固定的な名前コンポーネントを有することもできる。
【0017】
2つのブロック変数が、名前マクロに基づいての同一の名前を有する場合、または名前衝突が発生した場合には、種々の回避規則を適用することができる。例えば、名前マクロの評価によって取得した名前を、カウントコンポーネントの分だけ補足することができる(「VarName_a」,「VarName_b」,「Varname_aa」,「Varname_ab」など)。これにより、偶発的な名前同一性が発生しないことが保証される。これに代えてまたはこれに加えて、名前マクロに基づいて場合によって差し当たりローカル情報のみを含んでいる領域の名前を、コンテキスト情報の分だけ拡張することもでき、例えば、例えば、包括的なサブシステムのような、1つまたは複数の階層的に上位のブロックのファイル名または名前を、領域の名前よりも前に配置することもできる。さらに、これに代えてまたはこれに加えて、ユーザが、可能な名前コンポーネントを指定することができ、この名前コンポーネントは、名前衝突の発生時に、名前マクロにおいて定義された名前コンポーネントに加えて、またはこれに代えて使用される。回避規則は、追加の境界条件をチェックすることができ、とりわけ、所定の最大長さを超える場合には短縮規則を含むこともできる。例えば、複数の相互包括的な領域を連続的に含む、階層的に構成された名前の場合には、これらの領域のうちの1つまたは複数の所属する名前コンポーネントを、対応する領域の識別子のただ1つの頭文字のみが名前内に保持されるように短縮することができる。このことは、言語標準が変数名の最大長さを指定している場合、または変数名が所定の箇所までしか評価されない場合には、とりわけ有利である。
【0018】
所定の機能を提供する事前定義されたブロックを、ライブラリからブロック図に挿入することができ、ブロック図内に、同じ機能を有する複数のブロックを設けることができると有利である。好適には、ブロック図内に、1つのブロックの複数のインスタンスが存在する場合には、それぞれのインスタンスに対して1つの独立した領域が定義されるか、または複数のインスタンスに対して1つの共通の関数が定義され、かつそれぞれのインスタンスに対してブロック変数を有する1つのデータ構造が定義され、それぞれの実行されるべきブロックに応じて、対応するデータ構造が関数に移行される。ブロック図において複数回使用されるブロックまたはサブシステムは、ライブラリまたは参照ファイルに由来することができる。複数回使用する場合に、ライブラリブロックまたは参照モデルの完全なコンテンツがコピーされるのではなく、ブロックの、インスタンス間にわたる関数が、インスタンス固有のデータ構造と組み合わされると有利である。このことにより、生成されたソースコードを非常にコンパクトに保つことができる。とりわけ、ポインタを介して参照される構造でデータを格納することが好適である。このことにより、指示を任意の頻度で使用することが可能となり、この場合にはデータを、複数回、メモリ内に設けるだけでよい。したがって、制御装置の、基本的に制限されているメインメモリにもさほど負荷がかからなくなる。複数のインスタンスの場合、一意で十分に短い名前を保証するために、カウンタのような回避規則を使用することが特に有利である。
【0019】
好ましくは、それぞれのブロック変数は、許可フラグを有し、許可フラグをセットすること、またはセットしないことが可能であり、2つのブロック変数に許可フラグがセットされている場合にのみ、両方のブロック変数が1つの共通変数で実装される。例えば、定義データ収集部への参照によって、とりわけ、複数の異なる変数にとって共通する1つまたは複数のプロパティを定義する変数クラスまたは変数種類の割り当てによって、許可フラグを、1つまたは複数の変数に対して間接的にセットすることができる。許可フラグのセットにより、ユーザによる最適化に直接的に影響を与えることが可能となる。許可フラグは、無条件に有効となる場合もあるし、または追加条件の満足に関連してのみ最適化を許可する場合もある。基本的に、ブロック変数またはブロックには、無条件の追加フラグと、1つまたは複数のチェックフラグと、を割り当てることもできる。
【0020】
特に好ましくは、それぞれのブロック変数は、少なくとも1つのチェックフラグを有し、チェックフラグをセットすること、またはセットしないことが可能であり、2つのブロック変数にチェックフラグがセットされていて、さらに、チェックフラグに割り当てられた少なくとも1つのチェック条件が満足されている場合にのみ、両方のブロック変数が1つの共通変数で実装される。したがって、目下のモデルでの最適化によって有意義な結果が生成されることを、自動的に保証することができる。
【0021】
好適には、以下のチェック条件のうちの1つまたは複数がチェックされる:
・ブロック内のブロック変数が、変更されることなく読み取られるだけであるか否か。
・2つのブロック変数が、重複していないそれぞれ異なる時間でのみ読み取りまたは書き込みされるように、ブロック変数のそれぞれ異なるインスタンスの寿命がばらばらであるか否か。
・定義データ収集部においてブロック変数同士に同一の変数定義が割り当てられているか否か。なお、変数定義は、とりわけ、基本データ型の指定、最小値の指定、および/または最大値の指定、および/またはスケーリングを含むことができる。
・ブロック変数同士が、同一方向に指定された有向接続部に配置されているか否か。なお、2つのブロックの間の有向接続部は、好適には信号の交換を示す。すなわち、信号は、1つのスカラーデータ型を有することができるか、または例えばバスのように、複数のスカラーデータ型から構成することができる。信号は、出力ブロックから1つまたは複数の宛先ブロックに伝送される。2つのブロック変数は、とりわけ、一方のブロック変数が出力ブロックにおいて定義されており、他方のブロック変数が宛先ブロックにおいて定義されている場合に、条件を満足する。
【0022】
この場合、チェックフラグに1つのチェック条件を割り当てることができるか、または
チェックフラグに複数のチェック条件を割り当てることができ、変数の併合は、チェックフラグに割り当てられた全ての条件が満足された場合にのみ、実施される。2つ以上のチェックフラグが存在することもでき、その場合には、それぞれ個々のチェックフラグに1つまたは複数のチェック条件が割り当てられている。
【0023】
特に好ましくは、1つのブロック変数に1つまたは複数のパラメータを割り当てることができ、以下の追加条件のうちの1つまたは複数、すなわち、
・ブロック変数同士に同一のデータ型が割り当てられていること、
・ブロック変数同士に互換性のある測定単位が割り当てられていること、
・ブロック変数の名前が、生成規則を使用して決定され、同じ生成規則を使用して名前が決定されたブロック変数同士だけが併合されること、
のうちの1つまたは複数が満足された場合にのみ、2つのブロック変数が1つの共通の変数で実装される。
【0024】
好ましくは、少なくとも1つのブロック変数が、各ブロック間の有向接続部に基づいて自動的に生成され、第1のブロックが第2のブロックに接続されており、かつ第2のブロックが第3のブロックに接続されている場合には、第1のブロックのブロック変数が、第1のブロックを起点とした接続のために生成され、第2のブロックのブロック変数が、第2のブロックを起点とした接続のために生成され、2つのブロック変数は、第1のブロックと第2のブロックとが同じ領域内に位置している場合に、ソースコードにおいて1つの共通の変数として実装される。
【0025】
分離領域が定義されていると有利であり、この際、当該分離領域内に位置するブロックのブロック変数は、常に、ソースコードにおいて別個の変数として実装されている。とりわけ、最も外側の領域を分離領域として事前定義することができ、その場合、下位の階層レベルの定義ブロックが、ブロック変数を併合してもよい個々の領域を定義する。
【0026】
本発明はさらに、制御装置をコンフィギュレーションするための方法であって、制御装置は、少なくとも1つのコンピューティングユニットを含み、物理的なプロセスのデータを検出するため、かつ/または物理的なプロセスに影響を与えるために、好ましくは少なくとも1つのセンサおよび/または少なくとも1つのアクチュエータを有し、
本方法は、
a.ブロック図を読み取るステップと、
b.特許請求の範囲に記載の方法によってソースコードを生成するステップと、
c.コンピューティングユニットのためのソースコードをコンパイルして、実行可能コードを生成するステップと、
d.実行可能コードを制御装置に伝送するステップと、
e.実行可能コードを制御装置の不揮発性メモリ内に格納し、かつ/または制御装置のコンピューティングユニットによって実行可能コードを実行するステップと、
を含む方法に関する。
【0027】
本発明は、さらに、コンピュータ可読記憶媒体を有する、コンピュータプログラム製品であって、コンピュータ可読記憶媒体上には、プロセッサによって実行された場合に、特許請求の範囲に記載の方法を実行するようにプロセッサを構成させる命令が埋め込まれている、コンピュータプログラム製品に関する。
【0028】
本発明はさらに、コンピュータシステムであって、コンピュータシステムは、ヒューマンマシンインターフェースと、不揮発性メモリと、プロセッサと、を含み、プロセッサは、本発明による方法を実行するように構成されている、コンピュータシステムに関する。
【0029】
以下、本発明を、図面を参照しながらより詳細に説明する。図面では、同様の部分に同一の参照符号が付されている。図示の実施形態は、非常に概略的であり、すなわち、距離と横方向および縦方向の寸法とは縮尺通りではなく、別段の記載がない限り相互に導出可能な幾何学的関係を有さない。
【図面の簡単な説明】
【0030】
図1】コンピュータシステムの好ましい実施形態を示す図である。
図2】好ましくはコンピュータシステム上に設けられるソフトウェアコンポーネントの概略図である。
図3】ソースコードの生成の一般的な図解である。
図4】ブロック図に基づいて生成されたソースコードのチェックの概略図である。
図5】複数の階層レベルを有する例示的なブロック図の概略図である。
図6】本発明による方法の好ましい実施形態の概略フローチャートである。
図7】ブロック図の詳細な実施例を示す図である。
【発明を実施するための形態】
【0031】
図1は、コンピュータシステムPCの好ましい実施形態を示す。コンピュータシステムPCは、とりわけマルチコアプロセッサとして実現され得るプロセッサCPUと、メインメモリRAMと、バスコントローラBCと、を有する。好ましくは、コンピュータシステムPCは、ユーザによって直接的に手動で操作されるように構成されており、グラフィックスカードGPUを介してモニタDISが接続されており、周辺機器インターフェースHMIを介してキーボードKEYおよびマウスMOUが接続されている。基本的に、コンピュータシステムPCのヒューマンマシンインターフェースを、タッチインターフェースとして構成することもできる。コンピュータシステムは、とりわけハードディスクおよび/またはソリッドステートディスクとして構成され得る不揮発性データメモリHDDと、インターフェースNET、とりわけネットワークインターフェースと、をさらに含む。インターフェースNETを介して制御装置ESを接続することができる。基本的に、コンピュータシステムPCに1つまたは複数の任意のインターフェース、とりわけ有線接続されたインターフェースを設けることができ、それぞれ制御装置ESに接続するために使用可能にすることができる。好適には、イーサネット標準に準拠したネットワークインターフェースを使用することができ、すなわち、インターフェースNETを、とりわけWLANインターフェースとして、またはBluetoothのような標準に準拠するなどして、ワイヤレスで構成することもできる。
【0032】
制御装置ESを、大量生産制御装置として、またはターゲットプラットフォームのための評価ボードとして構成することができる。好適には、制御装置ESは、コンピュータシステムPCに接続するためのインターフェースNETと、コンピュータシステムのプロセッサとは異なるアーキテクチャを有するマイクロコントローラMCRと、メインメモリRAMと、不揮発性メモリNVMと、を含む。
【0033】
図2には、好ましくはコンピュータシステムPC上にインストールされるソフトウェアコンポーネントの図解が示されている。これらのソフトウェアコンポーネントは、例えば不揮発性メモリHDDにアクセスするため、またはネットワークインターフェースNETを介して外部のコンピュータへの接続を確立するために、オペレーションシステムOSのメカニズムを使用する。
【0034】
テクニカルコンピューティング環境TCEは、モデルの作成と、モデルからのソースコードの生成と、を可能にする。モデリング環境MODにおいて、好ましくはグラフィカルユーザインターフェースを介して動的システムのモデルを作成することができる。このモデルは、とりわけ、複数のブロックを含み、動的システムの時間的挙動および/または内部状態を記述するブロック図であり得る。複数のブロックのうちの少なくともいくつかは、信号を介して接続されており、すなわち、スカラー型または複合型であり得るデータを交換するための有向接続部を介して接続されている。ブロックは、アトミックであり、すなわち、事前定義された機能を1つのステップで提供することができる。ブロック図が階層的である場合には、下位のレベルの複数のブロックが、上位のレベルの1つのブロックの構造を記述することができる。その場合には、好適には、アトミックブロックが、下位のレベルの複数のブロックを含むこともできる。合成されたブロックを、とりわけサブシステムとすることができ、すなわち、サブシステムは、別個の関数で実装すること、および/またはサブシステムの実行を専用の信号を介してトリガすることなどのような、追加のプロパティを有することができる。サブシステムには、サブシステムのプロパティをさらに指定するために特別なブロックを配置することができる。コンピューティング環境TCEは、1つまたは複数のライブラリBIBを含み、このライブラリBIBから、モデルを構築するためのブロックまたはモジュールを選択することができる。スクリプト環境MATにおいて、計算を実行するため、またはモデルを修正するために、指示を対話形式で、またはバッチファイルを介して入力することができる。コンピューティング環境TCEは、シミュレーション環境SIMをさらに含み、このシミュレーション環境SIMは、システムの時間的挙動を検査するために、ブロック図を解釈または実行するように構成されている。これらの計算は、好ましくは、コンピュータシステムのマイクロプロセッサCPUの1つまたは複数のコア上で、高精度の浮動小数点数を使用して実施される。
【0035】
作成されたモデルから、コード生成器PCGを使用して、好ましくはCのようなプログラミング言語でソースコードを生成することができる。定義データ収集部DDTにおいて、好適にはモデルに関する追加情報、とりわけブロック変数に関する追加情報が保存される。好適には、固定小数点命令を使用したモデルの計算を支援するために、ブロック変数に数値範囲および/またはスケーリングが割り当てられる。ソースコードの所期のプロパティ、例えばMISRAのような標準への準拠を、定義データ収集部DDTにおいて設定または格納することができる。好適には、それぞれのブロック変数が1つの所定の変数種類に対応付けられ、変数の併合のような、例えば最適化の許容度などの、1つまたは複数の所期のプロパティが設定される。コード生成器PCGは、好ましくは定義データ収集部DDTの設定を評価し、ソースコードの生成時にこの評価を考慮する。定義データ収集部DDTは、ツリー構造を有することができ、または定義データ収集部DDTを、単純なファイルとしてコンピュータシステムのメモリ内に格納することができ、これに代えて、定義データを専用のデータベースシステムに格納することもできる。定義データ収集部は、プログラムインターフェースおよび/またはインポート/エクスポート関数を有することができる。
【0036】
コンピュータシステムPCは、コンパイラCOMおよびリンカLINを有し、これらは、好適には、制御装置ES上および/またはコンピュータシステムPC上で実行可能なバイナリデータを生成するために構成されている。基本的に、それぞれ異なるプロセッサアーキテクチャを有する複数の制御装置または評価ボードESを支援するために、複数のコンパイラを設けることができ、とりわけ、複数の異なるターゲットプラットフォームのためのクロスコンパイラを設けることができる。
【0037】
図3は、コード生成器を使用したソースコードの生成の一般的な図解を示す。本方法を、コンピュータシステムPCの好ましい実施形態のプロセッサによって完全に実行することができる。しかしながら、オペレーティングコンピュータと、ネットワークを介して接続された1つまたは複数のサーバと、を有するクライアントサーバ環境において実行され、計算集中型のステップがサーバ上で実行されるように、本方法を企図することもできる。
【0038】
第1のステップS1、すなわち変換ステップにおいて、ブロック図BLDの1つまたは複数のブロックから選択されたモデルが、好ましくは1つまたは複数の階層グラフを含む中間表現IRに変換される。この中間表現IRは、とりわけデータフローグラフ、制御フローグラフ、またはツリー構造であり得る。中間表現の生成時には、ブロック図BLDに加えて、好適には定義データ収集部DDTからの追加情報も考慮されるか、または中間表現に組み込まれる。このことは、定義データ収集部DDTにおける情報に基づいて要素が生成されるという状況を含むこともでき、または例えば変数のデータ型のような、要素のプロパティまたはコード生成に関連した設定が、定義データ収集部DDTから抽出されるという状況を含むこともできる。
【0039】
第2のステップS2、すなわち最適化ステップにおいて、必要な変数の数、および/またはスタック占有率のようなメモリ消費量、および/またはオペレーションまたはプロセッサ命令の数、および/またはソースコードの実行時間を削減するために、階層グラフが最適化される。この最適化は、複数の中間ステップを含むことができ、これらの中間ステップにおいて、モデル/ブロック図とソースコード/プログラムテキストとの間のさらなる中間表現が生成される。とりわけ、それぞれの中間ステップでは、当初の階層グラフのセットを、変更された階層グラフの別のセットに変換することができ、この際、1つまたは複数の最適化ルールが適用される。最適化中には、「定数畳み込み」または「デッドコード」削除のような種々の戦略を適用することができる。個々の最適化を、とりわけこの最適化がブロック図表現上で比較的簡単に実行可能である場合には、既に変換ステップS1の枠内で適用することも可能である。本発明の枠内では、基本的に、ステップS1で生成された複数の変数をステップS2において併合することが可能であるとともに、既に第1の中間表現がさらに1つの変数のみを含むように、ステップS1においてブロック図の複数の変数を併合することが可能である。
【0040】
第3のステップS3、すなわち翻訳ステップにおいて、実行された全ての中間ステップから結果的に生じた、最適化された中間表現IRまたは最適化された階層グラフが、とりわけCコードのようなテキストプログラミング言語のソースコードPCOに翻訳される。このステップにおいても、さらなる最適化を実施することができ、とりわけ、生成された指示が、基本的に言語に含まれている指示のサブセットを表現するように、および/または生成された制御構造が、基本的に言語に含まれている制御構造のサブセットを表現するように、さらなる最適化を実施することができる。このことによって、明確に定義されたルールを満足することが可能となる。これに代えてまたはこれに加えて、例えばプログラム行とブロック図BLDのブロックとの間の参照のような追加情報を生成し、ソースコードPCOの可読性を改善するため、かつ/またはデバッグを容易にするために、とりわけコメントの形態でソースコードに組み込むことができる。
【0041】
コード生成中またはコード生成後に、目下のブロック図に関する情報、またはコード生成の結果(例えば警告など)を、定義データ収集部に保存することができる。この情報を、例えば、生成されたソースコードのコンパイルに影響を与えるために使用することができるか、または例えばASAP2形式のキャリブレーション情報、もしくはAUTOSAR標準に準拠した中間層を生成するための情報のような、他のツールに関するメタ情報を提供するために使用することができる。これに代わる本発明の実施形態では、ブロック図から、ハードウェア記述言語でのコードを生成することができるか、またはプログラミング可能なハードウェアモジュールのコンフィギュレーションを生成することができる。
【0042】
図4は、ブロック図に基づいて生成されたソースコードのチェックの概略図を示す。
【0043】
図示の例では、3つのブロックから構成されたブロック図BLDまたはサブシステムが概略的に示されており、このブロック図BLDまたはサブシステムは、入力信号を受信するための入力ポートと、出力信号を送信するための出力ポートと、を有する。ブロック図は、好適には、制御プログラムの所定または所期の挙動を記述することができる。ブロック図が、図示されていないシミュレーション環境において実行されると、この挙動が、連続する時間ステップで計算され、とりわけ、この場合には、ブロック図BLDを直接的に解釈することができる。仕様から、または企図された用途から、とりわけ制御プログラムのための入力信号としてスティミュラスSTIMを含む、いくつかのテストケースが前もって決定されており、スティミュラスには、対応する出力信号RESPが割り当てられている。
【0044】
スティミュラスSTIMは、図示の例では、入力信号の所定の時間的挙動を示す線図として図示されている。コンピュータシステムのシミュレーション環境において制御プログラムまたはブロック図BLDが実行されると、スティミュラスSTIMの現在値が、複数の時間ステップでブロック図BLDの入力ポートに印加され、制御プログラムの内部状態および/または出力信号を決定するために、ブロックに対応するオペレーションが計算される。ブロック図の実行中に出力信号を記録することによって、モデルインザループシミュレーションにおいて目標応答RESP1を決定することができる。例えば、変数が常にDoubleのデータ型を有し、これによって浮動小数点計算が実施されることにより、全ての算術オペレーションが高精度で計算されるので、一方では、モデルの正しい挙動を検証することが可能となり、他方では、保存された出力信号または目標応答RESP1を参照データとして使用するために、シミュレーション結果が十分に正確なものとなる。
【0045】
すなわち、モデルの正確性が確認された後、コード生成器PCGは、ブロック図の、制御プログラムに対応するブロックから、ソースコードを生成する。次いで、生成されたソースコードは、コンパイラCOMを使用してオブジェクトコードOBJにコンパイルされ、なお、このオブジェクトコードOBJは、好適にはターゲットシステムのプロセッサのための命令を含む。好ましくは、オブジェクトコードは、リンカによって、ターゲットシステムのオペレーションシステムにおいて実行可能なファイルに併合される。組み込みシステムESのマイクロコントローラのような低性能のハードウェア上でもリアルタイム実行を可能にするために、コード生成中に、モデルオペレーションを固定小数点表現に変換すること、すなわち対応するスケーリングも含んでいる固定小数点表現に変換することに関する設定を適用することができるか、またはコンピューティングコストを削減するための一般的な変換を適用することができる。
【0046】
制御プログラムまたは生成されたソースコードの最適化されたバージョンが、ブロック図に対応する挙動を有することを保証するために、好適には、ターゲットシステムがコンピュータシステムPCに対応しているソフトウェアインザループシミュレーションが実施されるか、またはターゲットシステムが組み込みシステムであるプロセッサインザループシミュレーションが実施される。この場合、所定の実行期間中に、オブジェクトコードOBJを有する実行可能なファイルにスティミュラスSTIMが供給され、実際応答RESP2を取得するために、生成されたソースコードの、計算から結果的に生じた出力信号が記録される。
【0047】
ユーザによる視覚的な比較を可能にするために、モデルインザループシミュレーションの目標応答RESP1を、生成されたコードの実際応答RESP2と同時にコンピュータシステム上に表示することができる。これに代えてまたはこれに加えて、目標応答RESP1と実際応答RESP2との比較を、比較プログラムCMPにおいて計算することもできる。これによって、例えば、逸脱度を特定することが可能となり、かつ/または1つまたは複数のテスト条件をチェックすること、例えば、実際応答と目標応答との間の点ごとの差を計算して、閾値または最大許容偏差と比較することが可能となる。
【0048】
図5には、複数の階層レベルを有する例示的なブロック図の概略図が示されており、この概略図では、階層レベルのブロックが長方形の囲み線で表されている。
【0049】
図示のブロック図は、第1(最上位)の階層レベルE1において複数のブロックBi,i=1..5を含み、これらのブロックは、信号を介して相互に接続されており、この場合、接続の方向が、信号の流れを示している。さらに、定義ブロックD1が示されており、この定義ブロックD1は、ブロックBi,i=1..5が第1の領域内に位置するように、第1の領域を定義する。ブロックB1,B2,B3,およびB5は、アトミックまたはシンプルであり得るか、または図示されていないサブ構造を有することができる。ブロックB4は、1つの合成されたブロックであり、この1つの合成されたブロックの機能は、第2(下位)の階層レベルE2にある複数のブロックによって定義されている。
【0050】
第2の階層レベルE2の図示された部分は、複数のブロックB2j,j=1..4と、1つの定義ブロックD2と、を含むとともに、上位または最上位の階層レベルと信号を交換するための2つのポート、すなわち入力ポートP21および出力ポートP22を含む。ブロックB21,B22,およびB24は、アトミックまたはシンプルであり得るか、または図示されていないサブ構造を有することができる。ブロックB23は、1つの合成されたブロックであり、この1つの合成されたブロックの機能は、第3(最下位)の階層レベルにある複数のブロックによって定義されている。
【0051】
第3の階層レベルE3の図示された部分は、複数のブロックB3k,k=1..4と、1つの定義ブロックD3と、を含むとともに、上位または第2の階層レベルと信号を交換するための2つのポート、すなわち入力ポートP31および出力ポートP32を含む。ブロックB31,B32,B33,およびB34は、アトミックまたはシンプルであり得るか、または図示されていないサブ構造を有することができる。基本的に、ブロック図は、任意の数の階層レベルを有することができるが、見やすくするために、ここではさらなる階層レベルは図示されていない。
【0052】
基本的に、種々のブロックを定義ブロックとして使用することができる。他のモデル部分によって呼び出し可能であって、かつ1つの連続した機能またはコードユニットを含んでいる合成されたブロックは、好適には、独立した領域を形成すべきである。これは、好ましくは関数であり、とりわけブロック図の最上位のレベルにおける関数であり得る。ブロック図が、AUTOSAR標準に準拠した制御装置コードをモデル化するために使用される場合には、好適には、ランナブルが、独立した領域を形成することができる。この場合、この領域を含むブロック、または好ましくは、この領域内に配置されたブロックを、定義ブロックとして使用することができる。領域を定義するための専用のブロックを使用することができ、すなわち、例えばスコープブロックを事前定義することもできる。これに代わる本発明の好ましい実施形態によれば、関数またはランナブルのプロパティを指定するブロックが、同時に定義ブロックとして定義される。
【0053】
好ましくは、定義された領域は、階層的に下位にある全てのブロックを含む。すなわち、定義ブロックD1が第1の領域を定義する場合には、好適には、ブロックBi,i=1..5に加えてブロックB2j,j=1..4およびB3k,k=1..4も、この第1の領域内に位置している。ポートブロックに関して、好ましくはこれらのポートブロックも、包含領域の一部とすることができる。
【0054】
さらに、特徴付けられた定義ブロック、例えばランナブルに対応する定義ブロックと、通常の定義ブロックと、を区別することもできる。例えばD2が、特徴付けられた定義ブロックである場合には、D1によって定義される第1の領域は、ブロックBi,i=2..5のみを含み、これに対して、D2によって定義される第2の領域は、ブロックB2j,j=1..4と、ブロックB3k,k=1..4と、を含むこととなろう。ただ1種類の特徴付けられた定義ブロックだけが存在するようにすることができる。好適には、通常の定義ブロックは、上位のレベルに特徴付けられた定義ブロックが存在しない場合にのみ、領域を定義する。
【0055】
さらに、通常の定義ブロックは、通常の定義ブロックによって定義されている上位の領域から、新しい領域を「切り取る」ことができる。D1,D2,およびD3が通常の定義ブロックである場合には、D1によって定義される第1の領域は、ブロックB1,B2,B3,B5を含み、その一方で、ブロックB4は、定義ブロックD2によって定義される第2の領域を形成する。その場合、この第2の領域は、ブロックB21,B22,およびB24を含み、その一方で、ブロックB23は、定義ブロックD3によって定義される第3の領域を形成する。その場合、ブロックB3k,k=1..4は、第3の領域内に位置している。
【0056】
以下では、図5に示される図を参照しながら、生成規則のいくつかの実施例を端的に説明する。この場合、独自の関数を定義することなく、D1を、特徴付けられた定義ブロック、とりわけランナブルとし、D2を、一般の定義ブロック、とりわけサブ関数を定義する一般の定義ブロックとし、D3を、一般の定義ブロック、とりわけライブラリブロックとする。簡単にするために本明細書では、定義ブロックによって形成される領域を、この定義ブロックと同一の名前で呼ぶこととする。
【0057】
B2,B3,B21,B24,B31,およびB33のブロック変数に、それぞれ生成規則または名前マクロ「$(Scope)_X」が割り当てられている場合には、コード生成時に、ブロックB2,B3に対して識別子「D1_X」を有する変数が生成され、ブロックB21,B24に対して識別子「D2_X」を有する変数が生成され、ブロックB31,B33に対して識別子「D3_X」を有する変数が生成される。すなわち、存在しうる追加条件が満足されていると仮定した場合には、例えばブロックB2の変数を、ブロックB3の変数と併合することが可能である。
【0058】
生成規則は、特徴付けられた領域または特徴付けられた定義ブロックと、一般の領域または一般の定義ブロックと、を区別することもできる。ブロックB1,B22,およびB32のブロック変数に、それぞれ生成規則または名前マクロ「$(Scope:ParentFunction)_Y」が割り当てられている場合であって、すなわち、周囲の関数が考慮される場合には、コード生成時に、ブロックB1から生成された変数は、識別子「D1_Y」を取得し、ブロックB22およびB32から生成された変数は、それぞれ識別子「D2_Y」を取得する。ブロックB5およびB34またはそれらのブロック変数に、それぞれ生成規則「$(Scope:Runnable)_Z」が割り当てられている場合であって、すなわち、周囲のランナブルが考慮される場合には、コード生成時に、B5およびB34の両方に対して識別子「D1_Z」を有する変数が生成される。すなわち、存在しうる追加条件が満足されている場合には、例えば、B5およびB34の変数を併合することができる。
【0059】
変数の併合時に、識別子自体が比較されるだけでなくそれぞれの生成規則も考慮される場合には、特に有利である。この任意選択の追加条件に従って、生成規則「D1_X」(つまり固定値)に基づいて第1の変数の識別子が生成され、生成規則「$(Scope:Runnable)_X」に基づいて第2の変数の識別子が生成されたことが確認された場合には、変数を併合するのではなく、警告またはエラーメッセージを生成することが好適である。これにより、誤った参照に起因する誤ったプログラムの危険性が低減される。
【0060】
すなわち、対応するブロックを含む領域への参照が、生成規則に既に含まれていることにより、誤ったプログラムに対するセキュリティの改善が達成される。生成規則が、対応するブロックを含む領域への参照のみを有することが許されている場合には、非常に特に有利である。これにより、生成されたプログラムの信頼性がさらに向上する。
【0061】
図6には、本発明による方法の好ましい実施形態の概略的なフローチャートが示されており、ここでは、第1のブロック変数および第2のブロック変数に関する手順のみが示されている。本発明の特に有利な実施形態によれば、まず始めに、ブロック図内に存在するブロック変数のリストが作成され、全てのブロック変数が連続的にチェックされる。好ましくは、ブロック変数の全ての可能なペアがチェックされる。
【0062】
併合の可能性をチェックするために、2つのブロック変数が選択され、すなわち、ステップ101において、第1のブロック変数が選択され、ステップ102において、第2のブロック変数が選択される。
【0063】
ステップ103において、第1のブロック変数と第2のブロック変数とが、同じ識別子を有しているか否かがチェックされる。このことは、生成規則の評価を含むことができる。ブロック変数同士がそれぞれ異なる識別子を有する場合には、ステップ109に移行する。
【0064】
ブロック変数に同じ名前が付けられている場合には、ステップ104において、両方の変数に許可フラグがセットされているか否かがチェックされる。ブロック変数のうちの一方にのみフラグがセットされている場合には、好適には、許可フラグを有さないブロック変数のためにソースコードにおける別個の変数が作成され、このブロック変数の代わりに、比較のための新しいブロック変数が選択される。一方のブロック変数または両方のブロック変数に対して許可フラグが存在しない場合には、ステップ108に移行する。
【0065】
続いて、ステップ105において、ブロック変数同士が同じ領域に配置されているか否か、ひいては十分なローカル参照が存在するか否かがチェックされる。このことが該当しない場合には、ステップ108に移行する。
【0066】
ステップ106において、各ブロック変数が追加条件を満足しているか否かがチェックされる。例えば、第1のブロック変数および第2のブロック変数は、定義データ収集部において、とりわけスケーリングのような1つまたは複数の一致するプロパティを有することが必要となる場合がある。追加条件が満足されていない場合には、ステップ108に移行する。
【0067】
これまでにチェックされた全ての条件が満足されている場合には、ステップ107において、第1のブロック変数および第2のブロック変数は、ソースコードにおける1つの変数に併合され、すなわち1つの変数が生成される。
【0068】
両方のブロック変数が同じ識別子を有しているが、その他の条件のうちの少なくとも1つが満足されていない場合には、ステップ108において、回避が可能であるか否かがチェックされ、すなわち、ブロック変数のうちの一方に対して、プログラムコードにおいて別の異なる名前が付された変数を生成することができるか否かがチェックされる。生成規則において、可能な名前変更または回避ルールも定義されていると有利である。具体的な事例において回避が不可能である場合には、ステップ110において、ユーザにエラーメッセージが出力される。任意選択的に、まず始めにモデルに対する所要の適合を実施するために、コード生成を中断することがさらに可能である。
【0069】
回避が可能な場合、またはチェックされた条件104,105,および106のうちの少なくとも1つが満足されなかった場合には、ステップ109において、2つの別個の変数の生成が実施される。
【0070】
(ステップ108において)1つの変数、または(ステップ109において)2つの変数が、ソースコードにおいて生成された後、本方法は、好適には、チェックされるべきさらなるブロック変数を用いて実施される。
【0071】
基本的に、チェックする条件の順序を変更することが可能であり、例えば、ブロック変数の識別子が領域に関する情報も含んでいる場合には、複数の条件を1つのステップでチェックすることも可能である。本発明の他の実施形態では、まず始めに、所定の領域内の全てのブロック変数を有するリストを作成することもでき、次いで、このリストに含まれる変数に対してのみ、その他の条件がチェックされる。さらに、最適化を複数のステップで実施することができ、すなわち、まず始めにソーステキストにおいて多数の変数を作成した後、対応するブロック変数の比較に基づいて、これらの変数を併合することができる。
【0072】
これに代わる本発明の実施形態では、複数の異なる許可フラグまたはチェックフラグを、それぞれ異なる追加条件と結びつけることもできる。例えば、読み取り専用のブロックパラメータである場合、すなわち、とりわけキャリブレーション変数を表すことができるブロックパラメータである場合に、変数の併合を許可することができる。別の例では、複数の異なるブロック変数の寿命がばらばらである場合に、併合を許可することができ、これにより、複数の異なるブロックの読み取り/書き込みプロセスの重複による副作用を排除することができる。
【0073】
図7は、リセット手段を有するバッファの機能を提供するブロック図の詳細な実施例を示す。これは、とりわけ、対応する機能を有するブロックを、図示されていない上位のモデルに実装するために使用され、このブロック図は、1回または複数回参照される場合があり、すなわち、場合によっては1つの複雑なライブラリブロックを表す。
【0074】
この例では、2つのブロックDetermineValueおよびStoreOverwriteが、アトミックサブシステムであり、これらのアトミックサブシステムは、下位の階層レベルにおいて実装されているが、1つのコンピューティングステップで実行される。見やすくするために、ここではそれぞれの実装がブロック自体の形態で図示されており、それぞれのブロックに接続された信号と、下位の階層レベルの対応する入力ポートまたは出力ポートと、の間の接続が、破線の矢印によって示されている。ポートは、丸み付けられた角によって示されており、信号方向に基づいて、信号を受信する入力ポートであるのか、または出力ポートであるのかを識別することが可能である。この例示的なブロック図には、領域R1を定義する定義ブロックDR1が配置されており、この領域R1は、図示されている全てのブロックを含む。
【0075】
図示のブロック図は、スカラー信号を受信する入力ポートInと、11の幅を有するベクトル信号を受信する入力ポートResetValueと、スカラー信号またはブール信号を受信する入力ポートResetと、を有する。さらに、図示のブロック図は、スカラー信号を送信する出力ポートOutを有する。2つの接続されていないブロックMemBufおよびMemIdxは、メモリブロック(DataStoreMemory)を定義し、このメモリブロックには、特別な読み取りまたは書き込みブロックを介してアクセスすることができる。メモリブロックは、ブロック図に実装されている機能の複数の呼び出し間で自身の値を維持することができ、これによって状態を表す。メモリブロックMemBufは、ブロックReadBufによって読み取られ、ブロックWriteBufによって書き込まれる。相応にして、メモリブロックMemIdxは、ブロックReadIdxによって読み取られ、ブロックWriteIdxによって書き込まれる。
【0076】
外部から印加されたベクトル信号ResetValueは、アトミックサブシステムDetermine ValueにおけるブロックResetBufのスイッチング入力部に供給され、このスイッチング入力部はさらに、外部から印加された信号Resetと、メモリブロックMemBufの実際値と、を受信する。メモリブロックMemBufの実際値は、ブロックReadBufを介して読み出され、ブロックRBuf(Convert)によって適切に変換される。ブロックResetBufは、印加されたスイッチング値に基づいて、メモリブロックの実際値または信号ResetValueの値のいずれかを出力信号として供給する。セレクタブロックSelectorを使用して、インデックスIdxを有するスカラー値をバス信号から抽出し、出力ポートOutを介して出力することができる。それと同時に、ベクトル信号全体が出力ポートCurBufに伝送される。
【0077】
メモリブロックMemIdxに目下格納されている値は、ブロックReadIdxによって読み出され、ブロックRIdx1 (Convert)によって適切に変換され、入力ポートin_Idxを介してアトミックサブシステムStoreOverwriteに供給される。このアトミックサブシステムStoreOverwriteは、2つの出力ポートOverwriteおよびout_Idxを有し、これらの出力ポートOverwriteおよびout_Idxは、それぞれ同一の値を出力する。
【0078】
出力ポートout_Idxは、合計ブロックIncrIdxの第1の入力部に接続されており、合計ブロックIncrIdxの第2の入力部には、定数ブロックConstantを介して固定値1が供給される。IncrIdxの出力信号は、ブロックNormalize_Idxの入力部と、比較ブロックRelの第1の入力部と、に供給される。比較ブロックRelの第2の入力部には、定数ブロックConstant1を介して値NDelaySizeが印加され、これによって、比較ブロックRelは、IncrIdxの出力信号がNDelaySizeよりも小さいか否かに応じて値1または0を出力する。比較ブロックRelの出力部は、ブロックNormalizeIdxのスイッチング入力部に接続されている。ブロックNormalizeIdxにはさらに、定数ブロックConstant2を介して定数値0が供給される。したがって、IncrIdxの出力信号がNDelaysizeよりも小さい場合には、NormalizeIdxの出力部にIncrIdxの出力信号が印加され、そうでない場合には、NormalizeIdxの出力値が0になる。ブロックNormalizeIdxの出力部は、メモリブロックMemIdxに書き込むためのブロックWriteIdxと、アトミックサブシステムDetermineValueの入力ポートIdxと、に接続されている。
【0079】
出力ポートOverwriteは、割り当てブロックReplaceOverwriteのインデックス入力部に接続されている。ReplaceOverwriteの値入力部は、入力ポートInを介して、外部から印加されたスカラー値を受信する。さらに、割り当てブロックReplaceOverwriteのベクトル入力部は、アトミックサブシステムDetermineValueの出力ポートCurrBufに接続されている。ベクトル信号が印加される割り当てブロックの出力部は、メモリブロックMemBufに書き込むためのブロックWriteBufに接続されている。したがって、割り当てブロックReplaceOverwriteは、バス内のOverwriteによって指定された位置に配置されたスカラー部分信号の実際値を変更することができる。
【0080】
図7に示されているブロック図から、リスト1のソースコードを生成することができる(ここではC言語で)。
【0081】
リスト1:
【表1】
【0082】
ソースコードの生成時における基本的な手順は、図3に関連して上で説明した。ここでは、一方では、ブロックMemBuf,ReadBuf,WriteBuf,RBuf,およびResetBufのブロック変数が、1つの配列変数Buf[]に併合された。他方で、ブロックMemIdx,ReadIdx,WriteIdx,RIdx1,およびIncrIdxのブロック変数は、1つのスカラー変数Idxに併合された。
【0083】
図7のブロック図において定義された機能を複数回使用すべき場合には、ポインタを介して参照される構造でデータを格納することが好適である。このことにより、指示を任意の頻度で使用することが可能となり(関数の再利用)、この場合にはデータを、インスタンス固有に、すなわち複数回、メモリ内に設けるだけでよい。対応するソースコードがリスト2に示されている。
【0084】
リスト2:
【表2】
【0085】
ここでも、ブロックMemBuf,ReadBuf,WriteBuf,RBuf,およびResetBufのブロック変数が、1つの配列変数BufBWR[]に併合され、ブロックMemIdx,ReadIdx,WriteIdx,RIdx1,およびIncrIdxのブロック変数が、1つのスカラー変数IdxBWRに併合された。関数の快適な再利用を可能にするために、インスタンス固有の変数は、ポインタを介してアドレス指定可能な構造で定義されている。
【0086】
ライブラリブロックが複数回使用される場合には、本発明による方法によって特に大幅な最適化が可能となる。
図1
図2
図3
図4
図5
図6
図7