(57)【特許請求の範囲】
【請求項１】
ブロック図の１つまたは複数のブロックからソースコードを生成するための方法であって、
コンピュータシステムによって、前記ブロック図を生成し、前記ブロック図は、２つのブロックの間に少なくとも１つの信号接続部を有する動的システムのモデルを含み、前記ブロック図は、前記動的システムをシミュレートするために実行することができ、１つまたは複数のブロックが位置する少なくとも１つの領域は、前記ブロック図内に定義されており、前記ブロック図は、第１のブロックおよび第２のブロックを含み、前記第１のブロックは、第１のブロック変数を有し、前記第２のブロックは、第２のブロック変数を有し、前記ブロック図のそれぞれのブロック変数は、１つの識別子を有し、
前記コンピュータシステムによって、前記第１および第２のブロック変数の前記識別子が、一致しているかまたは異なるか、および、前記第１および第２のブロックが同じ領域内に位置しているか否かを決定し、前記第１および第２のブロック変数の前記識別子が一致しているかまたは異なるかを決定することは、前記第１のブロック変数の前記識別子と前記第２のブロック変数の前記識別子とを比較することに基づき、
前記第１および第２のブロック変数の前記識別子が一致しているかまたは異なるか、および、前記第１および第２のブロックが同じ領域内に位置しているか否かの決定に基づいて、前記コンピュータシステムによって、前記第１および第２のブロック変数を単一の変数としてまたは２つの別個の変数としてソースコードにおいて実装し、前記第１および第２のブロック変数の前記識別子が一致していて、かつ、前記第１および第２のブロックが同じ領域内に位置している場合には、前記第１および第２のブロック変数は、単一の変数としてソースコードにおいて実装され、前記第１および第２のブロック変数の前記識別子が異なっており、かつ／または、前記第１および第２のブロックが同じ領域内に位置していない場合には、前記第１および第２のブロック変数は、２つの別個の変数としてソースコードにおいて実装される、
方法。
【請求項２】
前記ブロック図は、階層的に定義されており、
上位のレベルのブロックは、下位のレベルの複数のブロックを含むことができ、この際、下位のレベルの複数のブロックは、上位のレベルの１つのブロックに割り当てられており、
前記ブロック図は、１つまたは複数の定義ブロックを含み、
１つの定義ブロックに基づいて１つの領域が定義され、この際、前記定義ブロックを含む、その次に上位のレベルにあるブロックと、前記ブロックに割り当てられた全てのブロックと、が前記領域内に位置するように定義される、
請求項１記載の方法。
【請求項３】
前記ブロック図は、上位のレベルの１つの共通のブロックに含まれている少なくとも２つの定義ブロックを含み、
第１の定義ブロックは、第１のレベルに配置されており、第２の定義ブロックは、前記第１のレベルよりも下位の第２のレベルに配置されており、
前記第１のブロックは、第１の領域を定義し、
前記第２のブロックは、第２の領域を定義し、この際、前記第２の定義ブロックを含む、前記第２のレベルの次に上位のレベルにあるブロックと、前記ブロックに割り当てられた全てのブロックと、が前記第２の領域内に位置するように定義する、
請求項２記載の方法。
【請求項４】
前記少なくとも２つの定義ブロックは、少なくとも２種類の定義ブロックを含み、
１種類の、特徴付けられた定義ブロックが定義されており、
前記第１の定義ブロックが特徴付けられた定義ブロックである場合には、前記第１の領域と前記第２の領域とが１つの共通の領域に併合され、
そうでない場合には、前記第１の領域と前記第２の領域とが別個の領域として処理される、
請求項３記載の方法。
【請求項５】
ブロック変数の識別子は、少なくとも１つの生成規則の評価に基づいて決定され、
前記生成規則は、前記ブロック変数の前記識別子を、
前記ブロック変数を有するブロックが含まれている上位のレベルのブロックに基づいて決定し、かつ／または、
前記ブロック変数を有するブロックが位置している領域に基づいて決定する、
請求項２記載の方法。
【請求項６】
前記第１および第２のブロックが同じ領域内に位置しているか否かを決定することは、前記第１のブロック変数の前記識別子と前記第２のブロック変数の前記識別子との比較に基づく、
請求項５記載の方法。
【請求項７】
所定の機能を提供する事前定義されたブロックを、ライブラリから前記ブロック図に挿入することができ、
前記ブロック図は、同じ機能を有するブロックの複数のインスタンスを含み、
それぞれのインスタンスに対して１つの独立した領域が定義されるか、または
前記複数のインスタンスに対して１つの共通の関数が定義され、かつ、それぞれのインスタンスに対して前記ブロック変数を有する１つのデータ構造が定義され、
実行されるべきブロックに応じて、対応するデータ構造が前記共通の関数に移行される、
請求項１記載の方法。
【請求項８】
前記第１および第２のブロック変数の各々は、許可フラグを有し、
前記第１および第２のブロック変数を単一の変数としてまたは２つの別個の変数としてソースコードにおいて実装することは、前記第１および第２のブロック変数の前記許可フラグにさらに基づき、
２つのブロック変数に前記許可フラグがセットされている場合にのみ、前記第１および第２のブロック変数が単一の変数として実装される、
請求項１記載の方法。
【請求項９】
それぞれのブロック変数は、少なくとも１つのチェックフラグを有し、
２つのブロック変数に前記チェックフラグがセットされていて、かつ、各チェックフラグに割り当てられた少なくとも１つのチェック条件も満足されている場合にのみ、前記第１および第２のブロック変数が単一の変数として実装され、
前記少なくとも１つのチェック条件は、以下のチェック条件のうちの１つまたは複数、すなわち、
・ブロック内のブロック変数が、変更されることなく読み取られるだけであるか否か、
・前記２つのブロック変数が、重複していないそれぞれ異なる時間でのみ読み取りまたは書き込みされるように、前記ブロック変数のそれぞれ異なるインスタンスの寿命がばらばらであるか否か、
・定義データ収集部において前記ブロック変数に同一の変数定義が割り当てられているか否か、
・前記ブロック変数が、同一方向に指定された有向接続部に配置されているか否か、
を含む、
請求項８記載の方法。
【請求項１０】
前記第１および第２のブロック変数を単一の変数としてまたは２つの別個の変数としてソースコードにおいて実装することは、以下の条件のうちの１つまたは複数、すなわち、
・前記ブロック変数に同一のデータ型が割り当てられていること、
・前記ブロック変数に互換性のある測定単位が割り当てられていること、
・ブロック変数の名前が、同じ生成規則を使用して決定されること、
のうちの１つまたは複数が満足することにさらに基づく、
請求項８記載の方法。
【請求項１１】
少なくとも１つのブロック変数は、各ブロック間の有向接続部に基づいて自動的に生成され、
前記第１のブロックは、前記第２のブロックに接続されており、かつ、前記第２のブロックは、第３のブロックに接続されており、
前記第１のブロックの第１のブロック変数は、前記第１のブロックを起点とした接続のために生成され、前記第２のブロックの第２のブロック変数は、前記第２のブロックを起点とした接続のために生成され、
前記第１のブロックと前記第２のブロックとは、同じ領域内に位置し、
前記第１および第２のブロック変数は、単一の変数としてソースコードにおいて実装される、
請求項１記載の方法。
【請求項１２】
前記ブロック図は、領域を定義する１つまたは複数の定義ブロックを含み、
ある１つの定義ブロックが形成する領域内に位置していないブロックは、追加の領域に割り当てられ、これにより、前記ブロック図のそれぞれのブロックが１つの領域内に位置し、かつ／または、
分離領域が定義され、この際、前記分離領域内に位置するブロックのブロック変数は、常に、別個の変数としてソースコードにおいて実装されている、
請求項１記載の方法。
【請求項１３】
前記生成されたソースコードをコンパイルして、実行可能コードを生成し、
前記実行可能コードを制御装置に伝送し、前記制御装置をコンフィギュレーションする、
請求項１記載の方法。
【請求項１４】
非一時的なコンピュータ可読記憶媒体であって、
前記コンピュータ可読記憶媒体上には、プロセッサ実行可能命令が、ブロック図の１つまたは複数のブロックからソースコードを生成するために格納され、前記プロセッサ実行可能命令は、プロセッサによって実行された場合に、
前記ブロック図を生成し、前記ブロック図は、２つのブロックの間に少なくとも１つの信号接続部を有する動的システムのモデルを含み、前記ブロック図は、前記動的システムをシミュレートするために実行することができ、１つまたは複数のブロックが位置する少なくとも１つの領域が、前記ブロック図内に定義されており、前記ブロック図は、第１のブロックおよび第２のブロックを含み、前記第１のブロックは、第１のブロック変数を有し、前記第２のブロックは、第２のブロック変数を有し、前記ブロック図のそれぞれのブロック変数は、１つの識別子を有し、
前記第１および第２のブロック変数の前記識別子が、一致しているかまたは異なるか、および、前記第１および第２のブロックが同じ領域内に位置しているか否かを決定し、前記第１および第２のブロック変数の前記識別子が一致しているかまたは異なるかを決定することは、前記第１のブロック変数の前記識別子と前記第２のブロック変数の前記識別子とを比較することに基づき、
前記第１および第２のブロック変数の前記識別子が一致していて、かつ、前記第１および第２のブロックが同じ領域内に位置している場合には、前記第１および第２のブロック変数を、単一の変数としてソースコードにおいて実装し、
前記第１および第２のブロック変数の前記識別子が異なっており、かつ／または、前記第１および第２のブロックが同じ領域内に位置していない場合には、前記第１および第２のブロック変数を、２つの別個の変数としてソースコードにおいて実装する、
非一時的なコンピュータ可読記憶媒体。
【請求項１５】
ブロック図の１つまたは複数のブロックからソースコードを生成するためのコンピュータシステムであって、
前記コンピュータシステムは、ヒューマンマシンインターフェースと、不揮発性メモリと、プロセッサと、を含み、
前記プロセッサは、前記不揮発性メモリに格納されているプロセッサ実行可能命令を実行し、
前記ブロック図を生成し、前記ブロック図は、２つのブロックの間に少なくとも１つの信号接続部を有する動的システムのモデルを含み、前記ブロック図は、前記動的システムをシミュレートするために実行することができ、１つまたは複数のブロックが位置する少なくとも１つの領域が、前記ブロック図内に定義されており、前記ブロック図は、第１のブロックおよび第２のブロックを含み、前記第１のブロックは、第１のブロック変数を有し、前記第２のブロックは、第２のブロック変数を有し、前記ブロック図のそれぞれのブロック変数は、１つの識別子を有し、
前記第１および第２のブロック変数の前記識別子が、一致しているかまたは異なるか、および、前記第１および第２のブロックが同じ領域内に位置しているか否かを決定し、前記第１および第２のブロック変数の前記識別子が一致しているかまたは異なるかを決定することは、前記第１のブロック変数の前記識別子と前記第２のブロック変数の前記識別子とを比較することに基づき、
前記第１および第２のブロック変数の前記識別子が一致していて、かつ、前記第１および第２のブロックが同じ領域内に位置している場合には、前記第１および第２のブロック変数を、単一の変数としてソースコードにおいて実装し、
前記第１および第２のブロック変数の前記識別子が異なっており、かつ／または、前記第１および第２のブロックが同じ領域内に位置していない場合には、前記第１および第２のブロック変数を、２つの別個の変数としてソースコードにおいて実装する、
ように構成されている、
コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、とりわけ制御装置をプログラミングするために、ブロック図から実行可能コードを生成することに関する。
【背景技術】
【０００２】
制御装置は、プロセスの物理量を検出するため、かつ／または接続されたアクチュエータによってプロセスに影響を与えるために、多数の用途で使用され、例えば、制動手順のアンチロック制御部であり得る。プロセスの動的な挙動を決定する時定数は、多くの場合、１ｍｓ以下のサイクル時間を必要とするので、制御装置のリアルタイム性能が必要である。コスト上の理由から制御装置は、メモリが少なくてコンピューティング能力が限られているマイクロコントローラを有することが多く、したがって、実行可能コードのサイズおよび効率が非常に重要である。
【０００３】
制御装置の設計を高速化するために、MATLAB/Simulinkのようなコンピューティング環境のモデルに基づいて制御戦略を開発することが多い。したがって、プロセスおよび／またはコントローラ、または一般的に制御装置の挙動を、まず始めにシミュレートして、所期のプロパティの存在をチェックすることができる。具体的には、モデルは、計算のようなオペレーションを実行するブロックを含むブロック図であり得る。ブロックは、例えば複数の入力信号から１つの出力信号を計算することができる。通常、ブロック図は、周期的に実行され、全てのブロックは、メモリ内に永続的に保存され、それぞれのブロックは、時間ステップごとに１回実行される。とりわけ、ブロックは、最後のステップからの入力信号に対して１つまたは複数のオペレーションを適用して、目下のステップの出力信号を生成することができる。モデルから、コード生成器を使用して、制御装置をプログラミングするためのソースコードを直接的に生成することができる。例えば、ハワイ州コハラコーストでの１９９９年のコンピュータ支援制御システム設計に関する国際シンポジウムの議事録である、H. Hanselmann et al.著による“Production Quality Code Generation from Simulink Block Diagrams”から、ソースコードを生産品質で生成するためのコード生成器が知られている。
【０００４】
モデルがブロック図の形式で記述され、データの交換または信号の伝送のために各ブロックが有向接続部または信号接続部を介してリンクされている場合には、コード生成の一般的な手順は、ブロックのそれぞれの出力ごとにソースコードにおける変数を生成することである。基本的に、本当に必要な数よりも多くのブロック変数が生じるので、最適化のための余地が存在する。１つの可能な最適化は、複数の異なるブロックのブロック変数を、ソースコードにおける１つの共通の変数にマッピングすることである。しかしながら、「マージ」とも呼ばれるこのブロック変数の併合には、リスクがないわけではない。なぜなら、複数のブロックにおける変数の再利用は、とりわけソースコードにおけるデータフローの変化によって望ましくない副作用をもたらす可能性があるからである。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
前述の背景に対して本発明の課題は、従来技術をさらに発展させることであり、とりわけ、望ましくない副作用を回避しながらよりコンパクトなソースコードの生成を支援することである。
【課題を解決するための手段】
【０００６】
上記の課題は、請求項１記載のソースコードを生成するための方法と、請求項１４記載のコンピュータプログラム製品と、請求項１５記載のコンピュータシステムと、によって解決される。有利な発展形態は、従属請求項の対象である。
【０００７】
すなわち、ブロック図の１つまたは複数のブロックからソースコードを生成するための方法であって、ブロック図は、２つのブロックの間に少なくとも１つの信号接続部を有する動的システムのモデルを含み、ブロック図を、動的システムをシミュレートするために実行することができる、方法が提供される。ブロック図内に、少なくとも１つの領域が定義されており、領域内に、１つまたは複数のブロックが位置しており、ブロック図は、第１のブロックおよび第２のブロックを含み、第１のブロックは、第１のブロック変数を有し、第２のブロックは、第２のブロック変数を有し、ブロック図のそれぞれのブロック変数は、１つの識別子を有し、第１のブロック変数の識別子が、第２のブロック変数の識別子と比較され、第１のブロックと第２のブロックとが同じ領域内に位置しているか否かがチェックされ、識別子同士が一致していて、かつブロック同士が１つの領域内に位置している場合には、第１のブロック変数および第２のブロック変数が、ソースコードにおいて単一の変数として実装され、識別子同士がそれぞれ異なっており、かつ／またはブロック同士が同じ領域内に位置していない場合には、第１のブロック変数および第２のブロック変数が、ソースコードにおいて２つの別個の変数として実装される。
【０００８】
信号接続部を介してデータまたは信号を送信することができ、この場合、第１のブロックは、１つの値を出力し、または定義に応じて複数の関連する値を出力し、第２のブロックは、これらの値を受信し、第２のブロックの１つまたは複数の関連する出力値を決定する際に、これらの値を考慮する。例えばバスの場合に該当するように、信号は、スカラー変数、および／または配列のような構造化されたデータ型を含むことができる。
【０００９】
ブロック変数を、ブロック内で明示的に定義することができるか、または例えば、信号接続部に基づいて自動的に生成することができる。ブロック変数の識別子または名前を、固定的に規定することができるか、または規定された回避挙動を伴って、または規定された回避挙動を伴わずに、生成規則または生成ルールに基づいて定義することができる。とりわけ、複数のブロック変数が１つのブロックの１つの出力信号にされる場合には、識別子は、信号の発信元であるブロック内のポートの名前を含むことができる。したがって、識別子は、常に固定的なままであり得るか、または複数の一致する識別子が競合している場合には、少なくとも１つの識別子が所定のルールに従って変更される。好適には、固定的な一致する識別子を有する２つの変数は、好ましくは１つまたは複数の許可条件が満足されている場合に併合される。
【００１０】
領域の定義に基づいて、ブロック変数を併合してもよいか否か、およびどの環境においてブロック変数を併合してもよいかを制御することができる。したがって、ブロック図の意味的に相関していない領域における変数の併合を、排除することができる。このことによって、データフローの不規則な変化による見つけにくい副作用が回避される。
【００１１】
好ましくは、ブロック図は、階層的に定義されており、上位のレベルのブロックは、下位のレベルの複数のブロックを含むことができ、この際、下位のレベルの複数のブロックは、上位のレベルの１つのブロックに割り当てられている。すなわち、好適には、下位のレベルのそれぞれのブロックは、上位のレベルのブロックに所属する。ブロックを、下位のレベルにおける対応するブロックによって定義することができるか、または下位構造を有さないシンプルなブロックとすることもできる。ブロック図の階層構造によって見やすさが改善される。
【００１２】
特に好ましくは、ブロック図は、１つまたは複数の定義ブロックを含み、１つの定義ブロックに基づいて１つの領域が定義され、この際、当該定義ブロックを含む、その次に上位のレベルにあるブロックと、当該ブロックに割り当てられた全てのブロックと、が当該領域内に位置するように定義される。その次に上位のレベルにある上記の包括的なブロックを、とりわけサブシステムとして構成することができる。好ましくは、ある１つの定義ブロックが形成する領域内に位置していないブロックは、追加の領域に割り当てられ、これにより、ブロック図のそれぞれのブロックが１つの領域内に位置している。これに代えて、ある１つの定義ブロックによって定義された領域内に位置しているブロックのみを併合してよいとすることもできる。
【００１３】
定義ブロックを、領域を定義するためだけの専用として規定することができる。しかしながら定義ブロックのプロパティを、同時に、所定の意味のあるブロックに割り当てることも可能である。とりわけ、これは、関数ブロックであり得る。すなわち、この関数ブロックは、周囲のサブシステムをソースコードにおいて関数として実装すべきであることを示し、好ましくは、関数のさらなるプロパティを定義する。１つの関数は、ソーステキスト内で１つのユニットを形成するので、例えば見やすくする観点から、変数の併合をこのユニットに制限することが好適である。ブロック図が、ＡＵＴＯＳＡＲソフトウェアコンポーネントをモデル化するために使用される場合には、とりわけ、ソフトウェアコンポーネントの独立したサブユニットとしてランナブルを定義するためのランナブルブロックに、定義ブロックのプロパティを割り当てることもできる。
【００１４】
非常に特に好ましくは、ブロック図は、上位のレベルの１つの共通のブロックに含まれている少なくとも２つの定義ブロックを含み、第１の定義ブロックは、第１のレベルに配置されており、第２の定義ブロックは、第１のレベルよりも下位の第２のレベルに配置されており、第１のブロックは、第１の領域を定義し、第２のブロックは、第２の領域を定義し、この際、第２の定義ブロックを含む、第２のレベルの次に上位のレベルにあるブロックと、当該ブロックに割り当てられた全てのブロックと、が当該第２の領域内に位置するように定義する。基本的に、第２のレベルを、第１のレベルの下の複数の階層段階で配置することができる。これにより、どの領域において変数を併合してよいのかを、所期のように制御することが可能となる。
【００１５】
とりわけ、少なくとも２種類の定義ブロックを存在させることができ、１種類の、特徴付けられた定義ブロックが定義されており、第１の定義ブロックが、特徴付けられた定義ブロックである場合には、第１の領域と第２の領域とが１つの共通の領域に併合され、そうでない場合には、第１の領域と第２の領域とが別個の領域として処理される。例えば、関数ブロックまたはランナブルブロックを、特徴付けられた定義ブロックとして定義することができる。関数またはランナブルの明確に画定された統一的な領域が断片化されることを阻止することにより、ブロック図の最適化が得られたままとなる。
【００１６】
ブロック変数の識別子が、少なくとも１つの生成規則の評価に基づいて決定され、生成規則が、ブロック変数の識別子を、当該ブロック変数を有するブロックが含まれている上位のレベルのブロックに基づいて決定し、かつ／または当該ブロック変数を有するブロックが位置している領域に基づいて決定すると有利である。この場合、２つのブロックが同じ領域内に位置しているか否かのチェックが、ブロック変数の識別子の比較に基づいて実施されると有利である。好ましくは、識別子を、少なくとも部分的に$(Scope)_$Bのような名前マクロの形式で指定することができる。生成規則または名前マクロは、コードを生成する時点に評価され、$(Scope)は、領域の名前、とりわけ包括的なサブシステムの名前によって置き換えられ、$Bは、ブロックの名前によって置き換えられる。基本的に、さらなる名前マクロまたはワイルドカードを定義して、１つまたは複数の識別子の名前に埋め込むことができる。名前衝突の発生時における自動的な解決を可能にするために、名前マクロにそれぞれ１つの回避規則を割り当てることもできる。これに代えて、ブロックまたは領域に回避規則を割り当ててもよい。識別子は、好適には、固定的な名前コンポーネントを有することもできる。
【００１７】
２つのブロック変数が、名前マクロに基づいての同一の名前を有する場合、または名前衝突が発生した場合には、種々の回避規則を適用することができる。例えば、名前マクロの評価によって取得した名前を、カウントコンポーネントの分だけ補足することができる（「VarName_a」，「VarName_b」，「Varname_aa」，「Varname_ab」など）。これにより、偶発的な名前同一性が発生しないことが保証される。これに代えてまたはこれに加えて、名前マクロに基づいて場合によって差し当たりローカル情報のみを含んでいる領域の名前を、コンテキスト情報の分だけ拡張することもでき、例えば、例えば、包括的なサブシステムのような、１つまたは複数の階層的に上位のブロックのファイル名または名前を、領域の名前よりも前に配置することもできる。さらに、これに代えてまたはこれに加えて、ユーザが、可能な名前コンポーネントを指定することができ、この名前コンポーネントは、名前衝突の発生時に、名前マクロにおいて定義された名前コンポーネントに加えて、またはこれに代えて使用される。回避規則は、追加の境界条件をチェックすることができ、とりわけ、所定の最大長さを超える場合には短縮規則を含むこともできる。例えば、複数の相互包括的な領域を連続的に含む、階層的に構成された名前の場合には、これらの領域のうちの１つまたは複数の所属する名前コンポーネントを、対応する領域の識別子のただ１つの頭文字のみが名前内に保持されるように短縮することができる。このことは、言語標準が変数名の最大長さを指定している場合、または変数名が所定の箇所までしか評価されない場合には、とりわけ有利である。
【００１８】
所定の機能を提供する事前定義されたブロックを、ライブラリからブロック図に挿入することができ、ブロック図内に、同じ機能を有する複数のブロックを設けることができると有利である。好適には、ブロック図内に、１つのブロックの複数のインスタンスが存在する場合には、それぞれのインスタンスに対して１つの独立した領域が定義されるか、または複数のインスタンスに対して１つの共通の関数が定義され、かつそれぞれのインスタンスに対してブロック変数を有する１つのデータ構造が定義され、それぞれの実行されるべきブロックに応じて、対応するデータ構造が関数に移行される。ブロック図において複数回使用されるブロックまたはサブシステムは、ライブラリまたは参照ファイルに由来することができる。複数回使用する場合に、ライブラリブロックまたは参照モデルの完全なコンテンツがコピーされるのではなく、ブロックの、インスタンス間にわたる関数が、インスタンス固有のデータ構造と組み合わされると有利である。このことにより、生成されたソースコードを非常にコンパクトに保つことができる。とりわけ、ポインタを介して参照される構造でデータを格納することが好適である。このことにより、指示を任意の頻度で使用することが可能となり、この場合にはデータを、複数回、メモリ内に設けるだけでよい。したがって、制御装置の、基本的に制限されているメインメモリにもさほど負荷がかからなくなる。複数のインスタンスの場合、一意で十分に短い名前を保証するために、カウンタのような回避規則を使用することが特に有利である。
【００１９】
好ましくは、それぞれのブロック変数は、許可フラグを有し、許可フラグをセットすること、またはセットしないことが可能であり、２つのブロック変数に許可フラグがセットされている場合にのみ、両方のブロック変数が１つの共通変数で実装される。例えば、定義データ収集部への参照によって、とりわけ、複数の異なる変数にとって共通する１つまたは複数のプロパティを定義する変数クラスまたは変数種類の割り当てによって、許可フラグを、１つまたは複数の変数に対して間接的にセットすることができる。許可フラグのセットにより、ユーザによる最適化に直接的に影響を与えることが可能となる。許可フラグは、無条件に有効となる場合もあるし、または追加条件の満足に関連してのみ最適化を許可する場合もある。基本的に、ブロック変数またはブロックには、無条件の追加フラグと、１つまたは複数のチェックフラグと、を割り当てることもできる。
【００２０】
特に好ましくは、それぞれのブロック変数は、少なくとも１つのチェックフラグを有し、チェックフラグをセットすること、またはセットしないことが可能であり、２つのブロック変数にチェックフラグがセットされていて、さらに、チェックフラグに割り当てられた少なくとも１つのチェック条件が満足されている場合にのみ、両方のブロック変数が１つの共通変数で実装される。したがって、目下のモデルでの最適化によって有意義な結果が生成されることを、自動的に保証することができる。
【００２１】
好適には、以下のチェック条件のうちの１つまたは複数がチェックされる：
・ブロック内のブロック変数が、変更されることなく読み取られるだけであるか否か。
・２つのブロック変数が、重複していないそれぞれ異なる時間でのみ読み取りまたは書き込みされるように、ブロック変数のそれぞれ異なるインスタンスの寿命がばらばらであるか否か。
・定義データ収集部においてブロック変数同士に同一の変数定義が割り当てられているか否か。なお、変数定義は、とりわけ、基本データ型の指定、最小値の指定、および／または最大値の指定、および／またはスケーリングを含むことができる。
・ブロック変数同士が、同一方向に指定された有向接続部に配置されているか否か。なお、２つのブロックの間の有向接続部は、好適には信号の交換を示す。すなわち、信号は、１つのスカラーデータ型を有することができるか、または例えばバスのように、複数のスカラーデータ型から構成することができる。信号は、出力ブロックから１つまたは複数の宛先ブロックに伝送される。２つのブロック変数は、とりわけ、一方のブロック変数が出力ブロックにおいて定義されており、他方のブロック変数が宛先ブロックにおいて定義されている場合に、条件を満足する。
【００２２】
この場合、チェックフラグに１つのチェック条件を割り当てることができるか、または
チェックフラグに複数のチェック条件を割り当てることができ、変数の併合は、チェックフラグに割り当てられた全ての条件が満足された場合にのみ、実施される。２つ以上のチェックフラグが存在することもでき、その場合には、それぞれ個々のチェックフラグに１つまたは複数のチェック条件が割り当てられている。
【００２３】
特に好ましくは、１つのブロック変数に１つまたは複数のパラメータを割り当てることができ、以下の追加条件のうちの１つまたは複数、すなわち、
・ブロック変数同士に同一のデータ型が割り当てられていること、
・ブロック変数同士に互換性のある測定単位が割り当てられていること、
・ブロック変数の名前が、生成規則を使用して決定され、同じ生成規則を使用して名前が決定されたブロック変数同士だけが併合されること、
のうちの１つまたは複数が満足された場合にのみ、２つのブロック変数が１つの共通の変数で実装される。
【００２４】
好ましくは、少なくとも１つのブロック変数が、各ブロック間の有向接続部に基づいて自動的に生成され、第１のブロックが第２のブロックに接続されており、かつ第２のブロックが第３のブロックに接続されている場合には、第１のブロックのブロック変数が、第１のブロックを起点とした接続のために生成され、第２のブロックのブロック変数が、第２のブロックを起点とした接続のために生成され、２つのブロック変数は、第１のブロックと第２のブロックとが同じ領域内に位置している場合に、ソースコードにおいて１つの共通の変数として実装される。
【００２５】
分離領域が定義されていると有利であり、この際、当該分離領域内に位置するブロックのブロック変数は、常に、ソースコードにおいて別個の変数として実装されている。とりわけ、最も外側の領域を分離領域として事前定義することができ、その場合、下位の階層レベルの定義ブロックが、ブロック変数を併合してもよい個々の領域を定義する。
【００２６】
本発明はさらに、制御装置をコンフィギュレーションするための方法であって、制御装置は、少なくとも１つのコンピューティングユニットを含み、物理的なプロセスのデータを検出するため、かつ／または物理的なプロセスに影響を与えるために、好ましくは少なくとも１つのセンサおよび／または少なくとも１つのアクチュエータを有し、
本方法は、
ａ．ブロック図を読み取るステップと、
ｂ．特許請求の範囲に記載の方法によってソースコードを生成するステップと、
ｃ．コンピューティングユニットのためのソースコードをコンパイルして、実行可能コードを生成するステップと、
ｄ．実行可能コードを制御装置に伝送するステップと、
ｅ．実行可能コードを制御装置の不揮発性メモリ内に格納し、かつ／または制御装置のコンピューティングユニットによって実行可能コードを実行するステップと、
を含む方法に関する。
【００２７】
本発明は、さらに、コンピュータ可読記憶媒体を有する、コンピュータプログラム製品であって、コンピュータ可読記憶媒体上には、プロセッサによって実行された場合に、特許請求の範囲に記載の方法を実行するようにプロセッサを構成させる命令が埋め込まれている、コンピュータプログラム製品に関する。
【００２８】
本発明はさらに、コンピュータシステムであって、コンピュータシステムは、ヒューマンマシンインターフェースと、不揮発性メモリと、プロセッサと、を含み、プロセッサは、本発明による方法を実行するように構成されている、コンピュータシステムに関する。
【００２９】
以下、本発明を、図面を参照しながらより詳細に説明する。図面では、同様の部分に同一の参照符号が付されている。図示の実施形態は、非常に概略的であり、すなわち、距離と横方向および縦方向の寸法とは縮尺通りではなく、別段の記載がない限り相互に導出可能な幾何学的関係を有さない。
【図面の簡単な説明】
【００３０】
【図１】コンピュータシステムの好ましい実施形態を示す図である。
【図２】好ましくはコンピュータシステム上に設けられるソフトウェアコンポーネントの概略図である。
【図３】ソースコードの生成の一般的な図解である。
【図４】ブロック図に基づいて生成されたソースコードのチェックの概略図である。
【図５】複数の階層レベルを有する例示的なブロック図の概略図である。
【図６】本発明による方法の好ましい実施形態の概略フローチャートである。
【図７】ブロック図の詳細な実施例を示す図である。
【発明を実施するための形態】
【００３１】
図１は、コンピュータシステムＰＣの好ましい実施形態を示す。コンピュータシステムＰＣは、とりわけマルチコアプロセッサとして実現され得るプロセッサＣＰＵと、メインメモリＲＡＭと、バスコントローラＢＣと、を有する。好ましくは、コンピュータシステムＰＣは、ユーザによって直接的に手動で操作されるように構成されており、グラフィックスカードＧＰＵを介してモニタＤＩＳが接続されており、周辺機器インターフェースＨＭＩを介してキーボードＫＥＹおよびマウスＭＯＵが接続されている。基本的に、コンピュータシステムＰＣのヒューマンマシンインターフェースを、タッチインターフェースとして構成することもできる。コンピュータシステムは、とりわけハードディスクおよび／またはソリッドステートディスクとして構成され得る不揮発性データメモリＨＤＤと、インターフェースＮＥＴ、とりわけネットワークインターフェースと、をさらに含む。インターフェースＮＥＴを介して制御装置ＥＳを接続することができる。基本的に、コンピュータシステムＰＣに１つまたは複数の任意のインターフェース、とりわけ有線接続されたインターフェースを設けることができ、それぞれ制御装置ＥＳに接続するために使用可能にすることができる。好適には、イーサネット標準に準拠したネットワークインターフェースを使用することができ、すなわち、インターフェースＮＥＴを、とりわけＷＬＡＮインターフェースとして、またはＢｌｕｅｔｏｏｔｈのような標準に準拠するなどして、ワイヤレスで構成することもできる。
【００３２】
制御装置ＥＳを、大量生産制御装置として、またはターゲットプラットフォームのための評価ボードとして構成することができる。好適には、制御装置ＥＳは、コンピュータシステムＰＣに接続するためのインターフェースＮＥＴと、コンピュータシステムのプロセッサとは異なるアーキテクチャを有するマイクロコントローラＭＣＲと、メインメモリＲＡＭと、不揮発性メモリＮＶＭと、を含む。
【００３３】
図２には、好ましくはコンピュータシステムＰＣ上にインストールされるソフトウェアコンポーネントの図解が示されている。これらのソフトウェアコンポーネントは、例えば不揮発性メモリＨＤＤにアクセスするため、またはネットワークインターフェースＮＥＴを介して外部のコンピュータへの接続を確立するために、オペレーションシステムＯＳのメカニズムを使用する。
【００３４】
テクニカルコンピューティング環境ＴＣＥは、モデルの作成と、モデルからのソースコードの生成と、を可能にする。モデリング環境ＭＯＤにおいて、好ましくはグラフィカルユーザインターフェースを介して動的システムのモデルを作成することができる。このモデルは、とりわけ、複数のブロックを含み、動的システムの時間的挙動および／または内部状態を記述するブロック図であり得る。複数のブロックのうちの少なくともいくつかは、信号を介して接続されており、すなわち、スカラー型または複合型であり得るデータを交換するための有向接続部を介して接続されている。ブロックは、アトミックであり、すなわち、事前定義された機能を１つのステップで提供することができる。ブロック図が階層的である場合には、下位のレベルの複数のブロックが、上位のレベルの１つのブロックの構造を記述することができる。その場合には、好適には、アトミックブロックが、下位のレベルの複数のブロックを含むこともできる。合成されたブロックを、とりわけサブシステムとすることができ、すなわち、サブシステムは、別個の関数で実装すること、および／またはサブシステムの実行を専用の信号を介してトリガすることなどのような、追加のプロパティを有することができる。サブシステムには、サブシステムのプロパティをさらに指定するために特別なブロックを配置することができる。コンピューティング環境ＴＣＥは、１つまたは複数のライブラリＢＩＢを含み、このライブラリＢＩＢから、モデルを構築するためのブロックまたはモジュールを選択することができる。スクリプト環境ＭＡＴにおいて、計算を実行するため、またはモデルを修正するために、指示を対話形式で、またはバッチファイルを介して入力することができる。コンピューティング環境ＴＣＥは、シミュレーション環境ＳＩＭをさらに含み、このシミュレーション環境ＳＩＭは、システムの時間的挙動を検査するために、ブロック図を解釈または実行するように構成されている。これらの計算は、好ましくは、コンピュータシステムのマイクロプロセッサＣＰＵの１つまたは複数のコア上で、高精度の浮動小数点数を使用して実施される。
【００３５】
作成されたモデルから、コード生成器ＰＣＧを使用して、好ましくはＣのようなプログラミング言語でソースコードを生成することができる。定義データ収集部ＤＤＴにおいて、好適にはモデルに関する追加情報、とりわけブロック変数に関する追加情報が保存される。好適には、固定小数点命令を使用したモデルの計算を支援するために、ブロック変数に数値範囲および／またはスケーリングが割り当てられる。ソースコードの所期のプロパティ、例えばＭＩＳＲＡのような標準への準拠を、定義データ収集部ＤＤＴにおいて設定または格納することができる。好適には、それぞれのブロック変数が１つの所定の変数種類に対応付けられ、変数の併合のような、例えば最適化の許容度などの、１つまたは複数の所期のプロパティが設定される。コード生成器ＰＣＧは、好ましくは定義データ収集部ＤＤＴの設定を評価し、ソースコードの生成時にこの評価を考慮する。定義データ収集部ＤＤＴは、ツリー構造を有することができ、または定義データ収集部ＤＤＴを、単純なファイルとしてコンピュータシステムのメモリ内に格納することができ、これに代えて、定義データを専用のデータベースシステムに格納することもできる。定義データ収集部は、プログラムインターフェースおよび／またはインポート／エクスポート関数を有することができる。
【００３６】
コンピュータシステムＰＣは、コンパイラＣＯＭおよびリンカＬＩＮを有し、これらは、好適には、制御装置ＥＳ上および／またはコンピュータシステムＰＣ上で実行可能なバイナリデータを生成するために構成されている。基本的に、それぞれ異なるプロセッサアーキテクチャを有する複数の制御装置または評価ボードＥＳを支援するために、複数のコンパイラを設けることができ、とりわけ、複数の異なるターゲットプラットフォームのためのクロスコンパイラを設けることができる。
【００３７】
図３は、コード生成器を使用したソースコードの生成の一般的な図解を示す。本方法を、コンピュータシステムＰＣの好ましい実施形態のプロセッサによって完全に実行することができる。しかしながら、オペレーティングコンピュータと、ネットワークを介して接続された１つまたは複数のサーバと、を有するクライアントサーバ環境において実行され、計算集中型のステップがサーバ上で実行されるように、本方法を企図することもできる。
【００３８】
第１のステップＳ１、すなわち変換ステップにおいて、ブロック図ＢＬＤの１つまたは複数のブロックから選択されたモデルが、好ましくは１つまたは複数の階層グラフを含む中間表現ＩＲに変換される。この中間表現ＩＲは、とりわけデータフローグラフ、制御フローグラフ、またはツリー構造であり得る。中間表現の生成時には、ブロック図ＢＬＤに加えて、好適には定義データ収集部ＤＤＴからの追加情報も考慮されるか、または中間表現に組み込まれる。このことは、定義データ収集部ＤＤＴにおける情報に基づいて要素が生成されるという状況を含むこともでき、または例えば変数のデータ型のような、要素のプロパティまたはコード生成に関連した設定が、定義データ収集部ＤＤＴから抽出されるという状況を含むこともできる。
【００３９】
第２のステップＳ２、すなわち最適化ステップにおいて、必要な変数の数、および／またはスタック占有率のようなメモリ消費量、および／またはオペレーションまたはプロセッサ命令の数、および／またはソースコードの実行時間を削減するために、階層グラフが最適化される。この最適化は、複数の中間ステップを含むことができ、これらの中間ステップにおいて、モデル／ブロック図とソースコード／プログラムテキストとの間のさらなる中間表現が生成される。とりわけ、それぞれの中間ステップでは、当初の階層グラフのセットを、変更された階層グラフの別のセットに変換することができ、この際、１つまたは複数の最適化ルールが適用される。最適化中には、「定数畳み込み」または「デッドコード」削除のような種々の戦略を適用することができる。個々の最適化を、とりわけこの最適化がブロック図表現上で比較的簡単に実行可能である場合には、既に変換ステップＳ１の枠内で適用することも可能である。本発明の枠内では、基本的に、ステップＳ１で生成された複数の変数をステップＳ２において併合することが可能であるとともに、既に第１の中間表現がさらに１つの変数のみを含むように、ステップＳ１においてブロック図の複数の変数を併合することが可能である。
【００４０】
第３のステップＳ３、すなわち翻訳ステップにおいて、実行された全ての中間ステップから結果的に生じた、最適化された中間表現ＩＲまたは最適化された階層グラフが、とりわけＣコードのようなテキストプログラミング言語のソースコードＰＣＯに翻訳される。このステップにおいても、さらなる最適化を実施することができ、とりわけ、生成された指示が、基本的に言語に含まれている指示のサブセットを表現するように、および／または生成された制御構造が、基本的に言語に含まれている制御構造のサブセットを表現するように、さらなる最適化を実施することができる。このことによって、明確に定義されたルールを満足することが可能となる。これに代えてまたはこれに加えて、例えばプログラム行とブロック図ＢＬＤのブロックとの間の参照のような追加情報を生成し、ソースコードＰＣＯの可読性を改善するため、かつ／またはデバッグを容易にするために、とりわけコメントの形態でソースコードに組み込むことができる。
【００４１】
コード生成中またはコード生成後に、目下のブロック図に関する情報、またはコード生成の結果（例えば警告など）を、定義データ収集部に保存することができる。この情報を、例えば、生成されたソースコードのコンパイルに影響を与えるために使用することができるか、または例えばＡＳＡＰ２形式のキャリブレーション情報、もしくはＡＵＴＯＳＡＲ標準に準拠した中間層を生成するための情報のような、他のツールに関するメタ情報を提供するために使用することができる。これに代わる本発明の実施形態では、ブロック図から、ハードウェア記述言語でのコードを生成することができるか、またはプログラミング可能なハードウェアモジュールのコンフィギュレーションを生成することができる。
【００４２】
図４は、ブロック図に基づいて生成されたソースコードのチェックの概略図を示す。
【００４３】
図示の例では、３つのブロックから構成されたブロック図ＢＬＤまたはサブシステムが概略的に示されており、このブロック図ＢＬＤまたはサブシステムは、入力信号を受信するための入力ポートと、出力信号を送信するための出力ポートと、を有する。ブロック図は、好適には、制御プログラムの所定または所期の挙動を記述することができる。ブロック図が、図示されていないシミュレーション環境において実行されると、この挙動が、連続する時間ステップで計算され、とりわけ、この場合には、ブロック図ＢＬＤを直接的に解釈することができる。仕様から、または企図された用途から、とりわけ制御プログラムのための入力信号としてスティミュラスＳＴＩＭを含む、いくつかのテストケースが前もって決定されており、スティミュラスには、対応する出力信号ＲＥＳＰが割り当てられている。
【００４４】
スティミュラスＳＴＩＭは、図示の例では、入力信号の所定の時間的挙動を示す線図として図示されている。コンピュータシステムのシミュレーション環境において制御プログラムまたはブロック図ＢＬＤが実行されると、スティミュラスＳＴＩＭの現在値が、複数の時間ステップでブロック図ＢＬＤの入力ポートに印加され、制御プログラムの内部状態および／または出力信号を決定するために、ブロックに対応するオペレーションが計算される。ブロック図の実行中に出力信号を記録することによって、モデルインザループシミュレーションにおいて目標応答ＲＥＳＰ１を決定することができる。例えば、変数が常にＤｏｕｂｌｅのデータ型を有し、これによって浮動小数点計算が実施されることにより、全ての算術オペレーションが高精度で計算されるので、一方では、モデルの正しい挙動を検証することが可能となり、他方では、保存された出力信号または目標応答ＲＥＳＰ１を参照データとして使用するために、シミュレーション結果が十分に正確なものとなる。
【００４５】
すなわち、モデルの正確性が確認された後、コード生成器ＰＣＧは、ブロック図の、制御プログラムに対応するブロックから、ソースコードを生成する。次いで、生成されたソースコードは、コンパイラＣＯＭを使用してオブジェクトコードＯＢＪにコンパイルされ、なお、このオブジェクトコードＯＢＪは、好適にはターゲットシステムのプロセッサのための命令を含む。好ましくは、オブジェクトコードは、リンカによって、ターゲットシステムのオペレーションシステムにおいて実行可能なファイルに併合される。組み込みシステムＥＳのマイクロコントローラのような低性能のハードウェア上でもリアルタイム実行を可能にするために、コード生成中に、モデルオペレーションを固定小数点表現に変換すること、すなわち対応するスケーリングも含んでいる固定小数点表現に変換することに関する設定を適用することができるか、またはコンピューティングコストを削減するための一般的な変換を適用することができる。
【００４６】
制御プログラムまたは生成されたソースコードの最適化されたバージョンが、ブロック図に対応する挙動を有することを保証するために、好適には、ターゲットシステムがコンピュータシステムＰＣに対応しているソフトウェアインザループシミュレーションが実施されるか、またはターゲットシステムが組み込みシステムであるプロセッサインザループシミュレーションが実施される。この場合、所定の実行期間中に、オブジェクトコードＯＢＪを有する実行可能なファイルにスティミュラスＳＴＩＭが供給され、実際応答ＲＥＳＰ２を取得するために、生成されたソースコードの、計算から結果的に生じた出力信号が記録される。
【００４７】
ユーザによる視覚的な比較を可能にするために、モデルインザループシミュレーションの目標応答ＲＥＳＰ１を、生成されたコードの実際応答ＲＥＳＰ２と同時にコンピュータシステム上に表示することができる。これに代えてまたはこれに加えて、目標応答ＲＥＳＰ１と実際応答ＲＥＳＰ２との比較を、比較プログラムＣＭＰにおいて計算することもできる。これによって、例えば、逸脱度を特定することが可能となり、かつ／または１つまたは複数のテスト条件をチェックすること、例えば、実際応答と目標応答との間の点ごとの差を計算して、閾値または最大許容偏差と比較することが可能となる。
【００４８】
図５には、複数の階層レベルを有する例示的なブロック図の概略図が示されており、この概略図では、階層レベルのブロックが長方形の囲み線で表されている。
【００４９】
図示のブロック図は、第１（最上位）の階層レベルＥ１において複数のブロックＢｉ，ｉ＝１．．５を含み、これらのブロックは、信号を介して相互に接続されており、この場合、接続の方向が、信号の流れを示している。さらに、定義ブロックＤ１が示されており、この定義ブロックＤ１は、ブロックＢｉ，ｉ＝１．．５が第１の領域内に位置するように、第１の領域を定義する。ブロックＢ１，Ｂ２，Ｂ３，およびＢ５は、アトミックまたはシンプルであり得るか、または図示されていないサブ構造を有することができる。ブロックＢ４は、１つの合成されたブロックであり、この１つの合成されたブロックの機能は、第２（下位）の階層レベルＥ２にある複数のブロックによって定義されている。
【００５０】
第２の階層レベルＥ２の図示された部分は、複数のブロックＢ２ｊ，ｊ＝１．．４と、１つの定義ブロックＤ２と、を含むとともに、上位または最上位の階層レベルと信号を交換するための２つのポート、すなわち入力ポートＰ２１および出力ポートＰ２２を含む。ブロックＢ２１，Ｂ２２，およびＢ２４は、アトミックまたはシンプルであり得るか、または図示されていないサブ構造を有することができる。ブロックＢ２３は、１つの合成されたブロックであり、この１つの合成されたブロックの機能は、第３（最下位）の階層レベルにある複数のブロックによって定義されている。
【００５１】
第３の階層レベルＥ３の図示された部分は、複数のブロックＢ３ｋ，ｋ＝１．．４と、１つの定義ブロックＤ３と、を含むとともに、上位または第２の階層レベルと信号を交換するための２つのポート、すなわち入力ポートＰ３１および出力ポートＰ３２を含む。ブロックＢ３１，Ｂ３２，Ｂ３３，およびＢ３４は、アトミックまたはシンプルであり得るか、または図示されていないサブ構造を有することができる。基本的に、ブロック図は、任意の数の階層レベルを有することができるが、見やすくするために、ここではさらなる階層レベルは図示されていない。
【００５２】
基本的に、種々のブロックを定義ブロックとして使用することができる。他のモデル部分によって呼び出し可能であって、かつ１つの連続した機能またはコードユニットを含んでいる合成されたブロックは、好適には、独立した領域を形成すべきである。これは、好ましくは関数であり、とりわけブロック図の最上位のレベルにおける関数であり得る。ブロック図が、ＡＵＴＯＳＡＲ標準に準拠した制御装置コードをモデル化するために使用される場合には、好適には、ランナブルが、独立した領域を形成することができる。この場合、この領域を含むブロック、または好ましくは、この領域内に配置されたブロックを、定義ブロックとして使用することができる。領域を定義するための専用のブロックを使用することができ、すなわち、例えばスコープブロックを事前定義することもできる。これに代わる本発明の好ましい実施形態によれば、関数またはランナブルのプロパティを指定するブロックが、同時に定義ブロックとして定義される。
【００５３】
好ましくは、定義された領域は、階層的に下位にある全てのブロックを含む。すなわち、定義ブロックＤ１が第１の領域を定義する場合には、好適には、ブロックＢｉ，ｉ＝１．．５に加えてブロックＢ２ｊ，ｊ＝１．．４およびＢ３ｋ，ｋ＝１．．４も、この第１の領域内に位置している。ポートブロックに関して、好ましくはこれらのポートブロックも、包含領域の一部とすることができる。
【００５４】
さらに、特徴付けられた定義ブロック、例えばランナブルに対応する定義ブロックと、通常の定義ブロックと、を区別することもできる。例えばＤ２が、特徴付けられた定義ブロックである場合には、Ｄ１によって定義される第１の領域は、ブロックＢｉ，ｉ＝２．．５のみを含み、これに対して、Ｄ２によって定義される第２の領域は、ブロックＢ２ｊ，ｊ＝１．．４と、ブロックＢ３ｋ，ｋ＝１．．４と、を含むこととなろう。ただ１種類の特徴付けられた定義ブロックだけが存在するようにすることができる。好適には、通常の定義ブロックは、上位のレベルに特徴付けられた定義ブロックが存在しない場合にのみ、領域を定義する。
【００５５】
さらに、通常の定義ブロックは、通常の定義ブロックによって定義されている上位の領域から、新しい領域を「切り取る」ことができる。Ｄ１，Ｄ２，およびＤ３が通常の定義ブロックである場合には、Ｄ１によって定義される第１の領域は、ブロックＢ１，Ｂ２，Ｂ３，Ｂ５を含み、その一方で、ブロックＢ４は、定義ブロックＤ２によって定義される第２の領域を形成する。その場合、この第２の領域は、ブロックＢ２１，Ｂ２２，およびＢ２４を含み、その一方で、ブロックＢ２３は、定義ブロックＤ３によって定義される第３の領域を形成する。その場合、ブロックＢ３ｋ，ｋ＝１．．４は、第３の領域内に位置している。
【００５６】
以下では、図５に示される図を参照しながら、生成規則のいくつかの実施例を端的に説明する。この場合、独自の関数を定義することなく、Ｄ１を、特徴付けられた定義ブロック、とりわけランナブルとし、Ｄ２を、一般の定義ブロック、とりわけサブ関数を定義する一般の定義ブロックとし、Ｄ３を、一般の定義ブロック、とりわけライブラリブロックとする。簡単にするために本明細書では、定義ブロックによって形成される領域を、この定義ブロックと同一の名前で呼ぶこととする。
【００５７】
Ｂ２，Ｂ３，Ｂ２１，Ｂ２４，Ｂ３１，およびＢ３３のブロック変数に、それぞれ生成規則または名前マクロ「$(Scope)_X」が割り当てられている場合には、コード生成時に、ブロックＢ２，Ｂ３に対して識別子「D1_X」を有する変数が生成され、ブロックＢ２１，Ｂ２４に対して識別子「D2_X」を有する変数が生成され、ブロックＢ３１，Ｂ３３に対して識別子「D3_X」を有する変数が生成される。すなわち、存在しうる追加条件が満足されていると仮定した場合には、例えばブロックＢ２の変数を、ブロックＢ３の変数と併合することが可能である。
【００５８】
生成規則は、特徴付けられた領域または特徴付けられた定義ブロックと、一般の領域または一般の定義ブロックと、を区別することもできる。ブロックＢ１，Ｂ２２，およびＢ３２のブロック変数に、それぞれ生成規則または名前マクロ「$(Scope:ParentFunction)_Y」が割り当てられている場合であって、すなわち、周囲の関数が考慮される場合には、コード生成時に、ブロックＢ１から生成された変数は、識別子「D1_Y」を取得し、ブロックＢ２２およびＢ３２から生成された変数は、それぞれ識別子「D2_Y」を取得する。ブロックＢ５およびＢ３４またはそれらのブロック変数に、それぞれ生成規則「$(Scope:Runnable)_Z」が割り当てられている場合であって、すなわち、周囲のランナブルが考慮される場合には、コード生成時に、Ｂ５およびＢ３４の両方に対して識別子「D1_Z」を有する変数が生成される。すなわち、存在しうる追加条件が満足されている場合には、例えば、Ｂ５およびＢ３４の変数を併合することができる。
【００５９】
変数の併合時に、識別子自体が比較されるだけでなくそれぞれの生成規則も考慮される場合には、特に有利である。この任意選択の追加条件に従って、生成規則「D1_X」（つまり固定値）に基づいて第１の変数の識別子が生成され、生成規則「$(Scope:Runnable)_X」に基づいて第２の変数の識別子が生成されたことが確認された場合には、変数を併合するのではなく、警告またはエラーメッセージを生成することが好適である。これにより、誤った参照に起因する誤ったプログラムの危険性が低減される。
【００６０】
すなわち、対応するブロックを含む領域への参照が、生成規則に既に含まれていることにより、誤ったプログラムに対するセキュリティの改善が達成される。生成規則が、対応するブロックを含む領域への参照のみを有することが許されている場合には、非常に特に有利である。これにより、生成されたプログラムの信頼性がさらに向上する。
【００６１】
図６には、本発明による方法の好ましい実施形態の概略的なフローチャートが示されており、ここでは、第１のブロック変数および第２のブロック変数に関する手順のみが示されている。本発明の特に有利な実施形態によれば、まず始めに、ブロック図内に存在するブロック変数のリストが作成され、全てのブロック変数が連続的にチェックされる。好ましくは、ブロック変数の全ての可能なペアがチェックされる。
【００６２】
併合の可能性をチェックするために、２つのブロック変数が選択され、すなわち、ステップ１０１において、第１のブロック変数が選択され、ステップ１０２において、第２のブロック変数が選択される。
【００６３】
ステップ１０３において、第１のブロック変数と第２のブロック変数とが、同じ識別子を有しているか否かがチェックされる。このことは、生成規則の評価を含むことができる。ブロック変数同士がそれぞれ異なる識別子を有する場合には、ステップ１０９に移行する。
【００６４】
ブロック変数に同じ名前が付けられている場合には、ステップ１０４において、両方の変数に許可フラグがセットされているか否かがチェックされる。ブロック変数のうちの一方にのみフラグがセットされている場合には、好適には、許可フラグを有さないブロック変数のためにソースコードにおける別個の変数が作成され、このブロック変数の代わりに、比較のための新しいブロック変数が選択される。一方のブロック変数または両方のブロック変数に対して許可フラグが存在しない場合には、ステップ１０８に移行する。
【００６５】
続いて、ステップ１０５において、ブロック変数同士が同じ領域に配置されているか否か、ひいては十分なローカル参照が存在するか否かがチェックされる。このことが該当しない場合には、ステップ１０８に移行する。
【００６６】
ステップ１０６において、各ブロック変数が追加条件を満足しているか否かがチェックされる。例えば、第１のブロック変数および第２のブロック変数は、定義データ収集部において、とりわけスケーリングのような１つまたは複数の一致するプロパティを有することが必要となる場合がある。追加条件が満足されていない場合には、ステップ１０８に移行する。
【００６７】
これまでにチェックされた全ての条件が満足されている場合には、ステップ１０７において、第１のブロック変数および第２のブロック変数は、ソースコードにおける１つの変数に併合され、すなわち１つの変数が生成される。
【００６８】
両方のブロック変数が同じ識別子を有しているが、その他の条件のうちの少なくとも１つが満足されていない場合には、ステップ１０８において、回避が可能であるか否かがチェックされ、すなわち、ブロック変数のうちの一方に対して、プログラムコードにおいて別の異なる名前が付された変数を生成することができるか否かがチェックされる。生成規則において、可能な名前変更または回避ルールも定義されていると有利である。具体的な事例において回避が不可能である場合には、ステップ１１０において、ユーザにエラーメッセージが出力される。任意選択的に、まず始めにモデルに対する所要の適合を実施するために、コード生成を中断することがさらに可能である。
【００６９】
回避が可能な場合、またはチェックされた条件１０４，１０５，および１０６のうちの少なくとも１つが満足されなかった場合には、ステップ１０９において、２つの別個の変数の生成が実施される。
【００７０】
（ステップ１０８において）１つの変数、または（ステップ１０９において）２つの変数が、ソースコードにおいて生成された後、本方法は、好適には、チェックされるべきさらなるブロック変数を用いて実施される。
【００７１】
基本的に、チェックする条件の順序を変更することが可能であり、例えば、ブロック変数の識別子が領域に関する情報も含んでいる場合には、複数の条件を１つのステップでチェックすることも可能である。本発明の他の実施形態では、まず始めに、所定の領域内の全てのブロック変数を有するリストを作成することもでき、次いで、このリストに含まれる変数に対してのみ、その他の条件がチェックされる。さらに、最適化を複数のステップで実施することができ、すなわち、まず始めにソーステキストにおいて多数の変数を作成した後、対応するブロック変数の比較に基づいて、これらの変数を併合することができる。
【００７２】
これに代わる本発明の実施形態では、複数の異なる許可フラグまたはチェックフラグを、それぞれ異なる追加条件と結びつけることもできる。例えば、読み取り専用のブロックパラメータである場合、すなわち、とりわけキャリブレーション変数を表すことができるブロックパラメータである場合に、変数の併合を許可することができる。別の例では、複数の異なるブロック変数の寿命がばらばらである場合に、併合を許可することができ、これにより、複数の異なるブロックの読み取り／書き込みプロセスの重複による副作用を排除することができる。
【００７３】
図７は、リセット手段を有するバッファの機能を提供するブロック図の詳細な実施例を示す。これは、とりわけ、対応する機能を有するブロックを、図示されていない上位のモデルに実装するために使用され、このブロック図は、１回または複数回参照される場合があり、すなわち、場合によっては１つの複雑なライブラリブロックを表す。
【００７４】
この例では、２つのブロックDetermineValueおよびStoreOverwriteが、アトミックサブシステムであり、これらのアトミックサブシステムは、下位の階層レベルにおいて実装されているが、１つのコンピューティングステップで実行される。見やすくするために、ここではそれぞれの実装がブロック自体の形態で図示されており、それぞれのブロックに接続された信号と、下位の階層レベルの対応する入力ポートまたは出力ポートと、の間の接続が、破線の矢印によって示されている。ポートは、丸み付けられた角によって示されており、信号方向に基づいて、信号を受信する入力ポートであるのか、または出力ポートであるのかを識別することが可能である。この例示的なブロック図には、領域Ｒ１を定義する定義ブロックＤＲ１が配置されており、この領域Ｒ１は、図示されている全てのブロックを含む。
【００７５】
図示のブロック図は、スカラー信号を受信する入力ポートInと、１１の幅を有するベクトル信号を受信する入力ポートResetValueと、スカラー信号またはブール信号を受信する入力ポートResetと、を有する。さらに、図示のブロック図は、スカラー信号を送信する出力ポートOutを有する。２つの接続されていないブロックMemBufおよびMemIdxは、メモリブロック（DataStoreMemory）を定義し、このメモリブロックには、特別な読み取りまたは書き込みブロックを介してアクセスすることができる。メモリブロックは、ブロック図に実装されている機能の複数の呼び出し間で自身の値を維持することができ、これによって状態を表す。メモリブロックMemBufは、ブロックReadBufによって読み取られ、ブロックWriteBufによって書き込まれる。相応にして、メモリブロックMemIdxは、ブロックReadIdxによって読み取られ、ブロックWriteIdxによって書き込まれる。
【００７６】
外部から印加されたベクトル信号ResetValueは、アトミックサブシステムDetermine ValueにおけるブロックResetBufのスイッチング入力部に供給され、このスイッチング入力部はさらに、外部から印加された信号Resetと、メモリブロックMemBufの実際値と、を受信する。メモリブロックMemBufの実際値は、ブロックReadBufを介して読み出され、ブロックRBuf(Convert)によって適切に変換される。ブロックResetBufは、印加されたスイッチング値に基づいて、メモリブロックの実際値または信号ResetValueの値のいずれかを出力信号として供給する。セレクタブロックSelectorを使用して、インデックスIdxを有するスカラー値をバス信号から抽出し、出力ポートOutを介して出力することができる。それと同時に、ベクトル信号全体が出力ポートCurBufに伝送される。
【００７７】
メモリブロックMemIdxに目下格納されている値は、ブロックReadIdxによって読み出され、ブロックRIdx1 (Convert)によって適切に変換され、入力ポートin_Idxを介してアトミックサブシステムStoreOverwriteに供給される。このアトミックサブシステムStoreOverwriteは、２つの出力ポートOverwriteおよびout_Idxを有し、これらの出力ポートOverwriteおよびout_Idxは、それぞれ同一の値を出力する。
【００７８】
出力ポートout_Idxは、合計ブロックIncrIdxの第１の入力部に接続されており、合計ブロックIncrIdxの第２の入力部には、定数ブロックConstantを介して固定値１が供給される。IncrIdxの出力信号は、ブロックNormalize_Idxの入力部と、比較ブロックRelの第１の入力部と、に供給される。比較ブロックRelの第２の入力部には、定数ブロックConstant1を介して値NDelaySizeが印加され、これによって、比較ブロックRelは、IncrIdxの出力信号がNDelaySizeよりも小さいか否かに応じて値１または０を出力する。比較ブロックRelの出力部は、ブロックNormalizeIdxのスイッチング入力部に接続されている。ブロックNormalizeIdxにはさらに、定数ブロックConstant2を介して定数値０が供給される。したがって、IncrIdxの出力信号がNDelaysizeよりも小さい場合には、NormalizeIdxの出力部にIncrIdxの出力信号が印加され、そうでない場合には、NormalizeIdxの出力値が０になる。ブロックNormalizeIdxの出力部は、メモリブロックMemIdxに書き込むためのブロックWriteIdxと、アトミックサブシステムDetermineValueの入力ポートIdxと、に接続されている。
【００７９】
出力ポートOverwriteは、割り当てブロックReplaceOverwriteのインデックス入力部に接続されている。ReplaceOverwriteの値入力部は、入力ポートInを介して、外部から印加されたスカラー値を受信する。さらに、割り当てブロックReplaceOverwriteのベクトル入力部は、アトミックサブシステムDetermineValueの出力ポートCurrBufに接続されている。ベクトル信号が印加される割り当てブロックの出力部は、メモリブロックMemBufに書き込むためのブロックWriteBufに接続されている。したがって、割り当てブロックReplaceOverwriteは、バス内のOverwriteによって指定された位置に配置されたスカラー部分信号の実際値を変更することができる。
【００８０】
図７に示されているブロック図から、リスト１のソースコードを生成することができる（ここではＣ言語で）。
【００８１】
リスト１：
【表１】
0006861844.tif 000002
【００８２】
ソースコードの生成時における基本的な手順は、図３に関連して上で説明した。ここでは、一方では、ブロックMemBuf，ReadBuf，WriteBuf，RBuf，およびResetBufのブロック変数が、１つの配列変数Buf[]に併合された。他方で、ブロックMemIdx，ReadIdx，WriteIdx，RIdx1，およびIncrIdxのブロック変数は、１つのスカラー変数Idxに併合された。
【００８３】
図７のブロック図において定義された機能を複数回使用すべき場合には、ポインタを介して参照される構造でデータを格納することが好適である。このことにより、指示を任意の頻度で使用することが可能となり（関数の再利用）、この場合にはデータを、インスタンス固有に、すなわち複数回、メモリ内に設けるだけでよい。対応するソースコードがリスト２に示されている。
【００８４】
リスト２：
【表２】
0006861844.tif 000003
【００８５】
ここでも、ブロックMemBuf，ReadBuf，WriteBuf，RBuf，およびResetBufのブロック変数が、１つの配列変数BufBWR[]に併合され、ブロックMemIdx，ReadIdx，WriteIdx，RIdx1，およびIncrIdxのブロック変数が、１つのスカラー変数IdxBWRに併合された。関数の快適な再利用を可能にするために、インスタンス固有の変数は、ポインタを介してアドレス指定可能な構造で定義されている。
【００８６】
ライブラリブロックが複数回使用される場合には、本発明による方法によって特に大幅な最適化が可能となる。
【図１】
0006861844.tif 000004
【図２】
0006861844.tif 000005
【図３】
0006861844.tif 000006
【図４】
0006861844.tif 000007
【図５】
0006861844.tif 000008
【図６】
0006861844.tif 000009
【図７】
0006861844.tif 000010