【課題を解決するための手段】
【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】
以下、本発明を、図面を参照しながらより詳細に説明する。図面では、同様の部分に同一の参照符号が付されている。図示の実施形態は、非常に概略的であり、すなわち、距離と横方向および縦方向の寸法とは縮尺通りではなく、別段の記載がない限り相互に導出可能な幾何学的関係を有さない。