(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023066414
(43)【公開日】2023-05-15
(54)【発明の名称】プログラムコードを生成する方法、制御装置を設定する方法およびコンピュータシステム
(51)【国際特許分類】
G06F 8/34 20180101AFI20230508BHJP
G06F 8/60 20180101ALI20230508BHJP
【FI】
G06F8/34
G06F8/60
【審査請求】未請求
【請求項の数】17
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022172372
(22)【出願日】2022-10-27
(31)【優先権主張番号】10 2021 128 101.6
(32)【優先日】2021-10-28
(33)【優先権主張国・地域又は機関】DE
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.MATLAB
2.SIMULINK
(71)【出願人】
【識別番号】506012213
【氏名又は名称】ディスペース ゲー・エム・ベー・ハー
【氏名又は名称原語表記】dSPACE GmbH
【住所又は居所原語表記】Rathenaustr.26,D-33102 Paderborn, Germany
(74)【代理人】
【識別番号】100114890
【弁理士】
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【弁理士】
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【弁理士】
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100134315
【弁理士】
【氏名又は名称】永島 秀郎
(74)【代理人】
【識別番号】100162880
【弁理士】
【氏名又は名称】上島 類
(72)【発明者】
【氏名】ミヒャエル マイア
(72)【発明者】
【氏名】ラース ヴァルバウム
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AB01
5B376BC11
5B376BC31
5B376BC45
(57)【要約】 (修正有)
【課題】プログラムコードを新たに生成することなく、様々な通信方式のより良好なサポートを可能にする方法、コンピュータプログラム、コンピュータ可読データ担体及びコンピュータシステムを提供する。
【解決手段】方法は、プログラムコードのあらかじめ設定されるセクション10において使用される、変数を表す第1のプレースホルダP1を生成するステップS1と、第1のプレースホルダP1を使用するセクションであって、プログラムコードのあらかじめ設定されるセクションのはじまりの前に配置される第2のプレースホルダP2を生成するステップS2と、第1のプレースホルダP1を使用するセクションであって、プログラムコードのあらかじめ設定されるセクションの終わりの後に配置される第3のプレースホルダP3を生成するステップS3と、を有する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
制御システムを制御するために実行可能な制御プログラムのプログラムコード(1)を生成するコンピュータにより実装される方法であって、
前記制御プログラムの機能は、少なくとも部分的にグラフィックモデル(2)に記述されており、テキストベースのプログラミング言語のプログラムコード(1)に前記グラフィックモデル(2)を変換する方法において、前記方法は、次のステップ、すなわち、
前記プログラムコード(1)のあらかじめ設定されるセクション(10)に使用される、変数を表す第1のプレースホルダ(P1)を生成するステップ(S1)と、
前記第1のプレースホルダ(P1)を使用する前記セクション(10)であって、前記プログラムコード(1)のあらかじめ設定される前記セクション(10)のはじまりの前に配置される第2のプレースホルダ(P2)を生成するステップ(S2)と、
前記第1のプレースホルダ(P1)を使用する前記セクション(10)であって、前記プログラムコード(1)のあらかじめ設定される前記セクション(10)の終わりの後に配置される第3のプレースホルダ(P3)を生成するステップ(S3)と、
を有するコンピュータにより実装される方法。
【請求項2】
特に周囲のグラフィックモデル(2)のサブシステム(12)に属するプログラムコード(1)において、前記第1のプレースホルダ(P1)、前記第2のプレースホルダ(P2)および前記第3のプレースホルダ(P3)を生成する、
請求項1記載のコンピュータにより実装される方法。
【請求項3】
前記方法は、前記第1のプレースホルダ(P1)によって表される前記変数を定義するために、前記プログラムコード(1)のあらかじめ設定される前記セクション(10)の使用領域(14)のはじまりに配置される第4のプレースホルダ(P4)を生成するステップ(S4)をさらに含む、
請求項1または2記載のコンピュータにより実装される方法。
【請求項4】
前記プログラムコード(1)のあらかじめ設定される前記セクション(10)において、変数を表す前記第1のプレースホルダを(P1)を使用して計算を実行する、
請求項1から3までのいずれか1項記載のコンピュータにより実装される方法。
【請求項5】
前記第1のプレースホルダ(P1)を使用する前記セクション(10)であって、前記プログラムコード(1)のあらかじめ設定される前記セクション(10)のはじまりの直前に、特に、前記第1のプレースホルダ(P1)の使用領域(14)のはじまりに前記第2のプレースホルダ(P2)を配置する、
請求項1から4までのいずれか1項記載のコンピュータにより実装される方法。
【請求項6】
前記第1のプレースホルダ(P1)を使用する前記セクション(10)であって、前記プログラムコード(1)のあらかじめ設定される前記セクション(10)の終わりの直後に、特に、前記第1のプレースホルダ(P1)の使用領域(14)の終わりに前記第3のプレースホルダ(P3)を配置する、
請求項1から5までのいずれか1項記載のコンピュータにより実装される方法。
【請求項7】
前記プログラムコード(1)におけるプリプロセッサマクロとして、少なくとも1つのプレースホルダ(P1,P2,P3,P4)、特に、前記第1のプレースホルダ(P1)、前記第2のプレースホルダ(P2)、前記第3のプレースホルダ(P3)および/または前記第4のプレースホルダ(P4)を生成する、
請求項1から6までのいずれか1項記載のコンピュータにより実装される方法。
【請求項8】
前記プレースホルダを前記サブシステム(12)において使用し、前記グラフィックモデル(2)において定義する、
請求項1から7までのいずれか1項記載のコンピュータにより実装される方法。
【請求項9】
特にインクリメンタルプログラムコード生成の際に、少なくとも1つのプレースホルダ(P1,P2,P3,P4)を定義することにより、すでに生成されたプログラムコード(1)において、少なくとも1つのローカル変数を作成する、
請求項1から8までのいずれか1項記載のコンピュータにより実装される方法。
【請求項10】
前記第1のプレースホルダ(P1)によって表される前記変数には、関数呼び出し(16)を介してアクセスし、ここで前記第2のプレースホルダ(P2)、前記第3のプレースホルダ(P3)および/または前記第4のプレースホルダ(P4)は、空に定義可能である、
請求項1から9までのいずれか1項記載のコンピュータにより実装される方法。
【請求項11】
特にAUTOSAR RTE-APIにおける関数呼び出し(16)を介して、特に前記外部変数の読み取りおよび書き込みを行い、ここで前記第2のプレースホルダ(P2)および前記第3のプレースホルダ(P3)により、前記プログラムコード(1)においてそれぞれ1つの関数呼び出し(16)を生成する位置を定義する、
請求項1から10までのいずれか1項記載のコンピュータにより実装される方法。
【請求項12】
相異なるスレッドが同じリソースに同時にアクセスするのを阻止するマルチスレッディングモデルにおいて、ロックが提供されるように前記プレースホルダ(P1,P2,P3,P4)を定義する、
請求項1から11までのいずれか1項記載のコンピュータにより実装される方法。
【請求項13】
特に、エラーのない最後の値をパーシステント変数に記憶することにより、アクセス関数のエラーハンドリングが提供されるように前記プレースホルダを定義する、
請求項1から12までのいずれか1項記載のコンピュータにより実装される方法。
【請求項14】
制御装置(18)を設定する方法であって、
前記制御装置(18)は、少なくとも1つの計算ユニット(20)を含み、好適には、物理的プロセスのデータを検出しかつ/または前記データに作用するために少なくとも1つのセンサ(22)および/または少なくとも1つのアクチュエータ(24)を有し、前記方法は、次のステップ、すなわち、
ブロック図を読み込むステップ(S1’)と、
請求項1から13までのいずれか1項記載の方法によってプログラムコード(1)を生成するステップ(S2’)と、
前記計算ユニット(20)用に前記プログラムコード(1)をコンパイルして、実行可能なプログラムコード(1’)を生成するステップ(S3’)と、
前記実行可能な前記プログラムコード(1’)を前記制御装置(18)に伝送するステップ(S4’)と、
前記制御装置(18)の不揮発性メモリに、前記実行可能なプログラムコード(1’)を格納しかつおよび/または前記制御装置(18)の前記計算ユニット(20)により、実行可能な前記プログラムコード(1’)を実行するステップ(S5’)と、
を有する方法。
【請求項15】
コンピュータプログラムがコンピュータ上で実行される場合に、請求項1から13および14のいずれか1項記載の方法の少なくとも1つを実施するためにプログラムコード(1)を有するコンピュータプログラム。
【請求項16】
コンピュータプログラムがコンピュータ上で実行される場合に、請求項1から13および14のいずれか1項記載の方法の少なくとも1つを実施するために、コンピュータプログラムのプログラムコード(1)を有するコンピュータ可読データ担体。
【請求項17】
マンマシンインタフェース(101)と、不揮発性メモリ(102)と、プロセッサ(103)と、を含むコンピュータシステム(100)であって、
前記プロセッサ(103)は、請求項1から13および14のいずれか1項記載の方法の少なくとも1つを実施するように構成されている、
コンピュータシステム(100)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、制御システムを制御するために実行可能な制御プログラムのプログラムコードを生成するコンピュータにより実装される方法に関する。
【0002】
本発明はさらに、制御装置を設定する方法に関する。本発明はさらに、コンピュータプログラム、コンピュータ可読データ担体およびコンピュータシステムに関する。
【背景技術】
【0003】
制御装置は、プロセスの物理量を検出するため、かつ/または接続されているアクチュエータを用いてプロセスに作用するために、多くの応用に使用される。これは例えば、制動過程のアンチロック制御であってよい。
【0004】
プロセスの動的な挙動を決定する時定数により、1ms以下の周期時間が必要とされることが多く、これにより、制御装置のリアルタイム機能が不可欠である。
【0005】
制御装置の設計を加速するために、MATLAB/Simulinkのような、計算環境におけるモデルに基づいて、制御戦略が開発されることが多い。これにより、プロセスおよび/または制御器、もしくは一般に制御装置の挙動をまずシミュレートして所望の特性があることを検査することができる。
【0006】
モデルは特に、計算などの操作を実行する複数のブロックを含むブロック図であってよく、ブロックにより、例えば、複数の入力信号から1つの出力信号を計算することができる。通例、ブロック図は周期的に実行され、全てのブロックは、メモリに永続に保存され、それぞれのブロックは、時間ステップごとに1回実行される。
【0007】
特に、ブロックは、それぞれの時間ステップにおいて、目下のステップの出力信号を生成するために、先行ブロックからの入力信号に1つまたは複数の操作を適用することができる。ブロック図には、ほぼ時間的に連続する挙動を記述するために周期的に実行される部分モデルの他に、離散的な挙動を記述する部分モデルも含まれていてよく、この部分モデルでは、多くの状態および遷移条件が定義されている。
【0008】
これらのモデルから、プログラムコードジェネレータを用いて、制御装置をプログラミングするためのプログラムコードを直接に生成することができる。例えば、H. Hanselmann等による文献"Production Quality Code Generation from Simulink Block Diagrams", Proceedings of the 1999 International Symposium on Computer Aided Control System Design, Kohala Coast, Hawaiiからは、製品品質においてプログラムコードを生成するためのプログラムコードジェネレータが公知である。
【0009】
ここでは、ブロックもしくはブロック変数の付加的なアノテーションにより、生成されるプログラムコードを適合させることができる。特に、元々高い精度の浮動小数点変数による計算のために作成されるモデルにスケーリングを用意することができ、これにより、制御装置は、精度をわずかに損ないながらも計算コストを大きく低減するために固定小数点数で計算することができる。
【0010】
AUTOSAR開発パートナーシップにより、数年来、制御装置ソフトウェアを開発するためのソフトウェアフレームワークが定義されている。
【0011】
本来の制御ストラテジまたは所望の挙動を実装する前には、ソフトウェアのアーキテクチャが決定される。例えば、このソフトウェアアーキテクチャは、2016年11月30日のAUTOSAR Classic Platform Standard Version 4.3.0に対応することが可能である。このアーキテクチャには、ソフトウェアコンポーネント、ランナブルのようなサブコンポーネント、およびソフトウェアコンポーネントのインタフェースが含まれている。
【0012】
種々異なるソフトウェアコンポーネント間のメッセージングは、定義されたアーキテクチャに基づいて具体的な制御装置に適合されて生成されるランタイム環境の仮想機能バスを介して行われる。
【0013】
比較的大きな開発プロジェクトでは、種々異なる企業に勤務している可能性もある複数の人間により、開発の異なる領域が実現されることが多い。したがって、複数の機能開発者により、モデルの個々の部分が作成されて改善されることがある。一度作成された部分モデルは、さまざまなプロジェクトにも使用可能であり、機能において適合されることが可能である。
【0014】
この際には、インクリメンタルプログラムコード生成が行われると有利であり、すなわち、個々のサブシステムについて別々にプログラムコードが生成され、次いで、モデル全体に対してプログラムコードにまとめられる。したがって、このモデルは複数の部分モデルに分割され、これにより、局所的に変更が行われる際には、対応する部分モデルについてのコードだけを新たに生成すればよいという利点が得られる。
【0015】
インクリメンタルプログラムコード生成とは、プログラムコードジェネレータについてのそれぞれの部分モデルが最後のプログラムコード生成後に変更されたか否かを検査することと理解される。このために、例えば、プログラムコードジェネレータのブロックについてのチェックサムおよび/またはそれぞれの変更時にカウントアップされるモデルバージョンカウンタを定義データ収集部に格納することができる。
【0016】
択一的または付加的には、最後に生成されたコードについてのチェックサム、および/またはこのコード生成ユニットについてのそれぞれのコード生成時にカウントアップされるコードバージョンカウンタを定義データ収集部に格納することができる。特に、プログラムコードジェネレータのブロックについて新たに計算されたチェックサムと、モデルについての格納されているチェックサムと、が異なる場合には、最後のプログラムコード生成以降にモデルに変更が行われているため、引き続いて、新たなプログラムコード生成を行わなければならない。そうでない場合、すなわち、現在のプログラムコードが最新である場合には、これを使用することができる。
【0017】
したがって、プログラムコードジェネレータにより、例えば、MathWorks、Simulinkおよび/またはStateflowのようなグラフィックモデルから直接、例えばCコードのようなテキストベースのプログラミング言語のプログラムコードを生成する。これにより、ライブラリサブシステムまたは参照モデル用に一度生成されたプログラムコードをさまざまなプロジェクトに使用することができ、その際にこのプロジェクトに対してプログラムコードを新たに生成およびテストする必要はない。
【0018】
独国特許出願公開第102020124080号明細書には、ブロック図の1つまたは複数のブロックからソースコードを生成する方法が開示されており、ブロック図は、階層的であり、インクリメンタルコード生成用に構成されている少なくとも1つの第1のサブシステムを含み、第1のサブシステムは、第2のサブシステムに含まれ、ブロック図は、第1のオブジェクトを含む定義データベースを参照し、この方法は、モデルエディタにおいて、第1のサブシステムを含むブロック図をオープンするステップと、第1のサブシステムについてのソースコードを生成するステップであって、第1のサブシステムについての情報を求めることが含まれるステップと、第1のサブシステムについての情報を第1のオブジェクトに格納するステップと、ブロック図についてのソースコードを生成するステップであって、コード生成の少なくとも1つのパラメータを変更するために第1のオブジェクトを読み出すステップと、を有する。
【0019】
定義データ収集部もしくは定義データベースには、例えば、変数には読み取りのみでアクセスされることについての情報を格納することができる。これにより、外部サブシステムにおけるコード生成を最適化することができ、その際に、内部部分モデルに新たなコード生成が必要になり得ることはない。外部サブシステムと内部サブシステムとの間のデータ交換は、例えば、入力ポートおよび出力ポートを用いて行うことができる。内部部分モデルが機能をモデリングする場合、ここでは呼び出し側は、グラフィックモデルにおいて、外部(サブ)システムであり、呼び出される側、すなわち内部部分モデルは、例えば、ポートを介してデータを受信し、別のポートを介してデータを送出する。ここでは、内部サブシステムにおいて、プレースホルダを定義し、このプレースホルダに対して、呼び出しシステムのコード生成の際にグローバル変数を作成するように構成することができる。これにより、通信においてある程度のフレキシビリティが可能になるが、このフレキシビリティは、例えば、AUTOSARにおいて一般的な全ての通信方式をサポートするのには適していない。
【発明の概要】
【発明が解決しようとする課題】
【0020】
このような背景から、本発明の課題は、従来技術を発展させ、特に、プログラムコードを新たに生成することなく、さまざまな通信方式のより良好なサポートを可能にすることである。
【課題を解決するための手段】
【0021】
この課題は、本発明により、請求項1の特徴的構成を有する、制御システムを制御するために実行可能な制御プログラムのプログラムコードを生成するコンピュータにより実装される方法によって解決される。
【0022】
上記の課題はさらに、請求項14の特徴的構成を有する、制御装置を設定する方法と、請求項15の特徴的構成を有するコンピュータプログラムと、請求項16の特徴的構成を有するコンピュータ可読データ担体と、請求項17の特徴的構成を有するコンピュータシステムと、によって解決される。
【0023】
本発明は、制御システムを制御するために実行可能な制御プログラムのプログラムコードを生成するコンピュータにより実装される方法に関し、制御プログラムの機能は、少なくとも部分的に、グラフィックモデルにおいて記述されており、このグラフィックモデルは、テキストベースのプログラミング言語のプログラムコードに変換される。
【0024】
本方法には、プログラムコードのあらかじめ設定されるセクションにおいて使用される、変数を表す第1のプレースホルダを生成するステップが含まれている。
【0025】
さらに、本方法には、第1のプレースホルダを使用するセクションであって、プログラムコードのあらかじめ設定されるセクションのはじまりの前に配置される第2のプレースホルダを生成するステップが含まれている。
【0026】
本方法にはさらに、第1のプレースホルダを使用するセクションであって、プログラムコードのあらかじめ設定されるセクションの終わりの後に配置される第3のプレースホルダを生成するステップが含まれている。
【0027】
本発明はさらに、制御装置を設定する方法に関し、この制御装置は、少なくとも1つの計算ユニットを含み、好適には、物理的プロセスのデータを収集しかつ/またはこれに作用するために少なくとも1つのセンサおよび/または少なくとも1つのアクチュエータを有する。
【0028】
本方法には、ブロック図を読み込むステップと、本発明による方法によってプログラムコードを生成するステップと、が含まれている。
【0029】
本方法にはさらに、計算ユニット用のプログラムコードをコンパイルして、実行可能なプログラムコードを生成するステップ、実行可能なプログラムコードを制御装置に伝送するステップ、制御装置の不揮発性メモリに実行可能なプログラムコードを格納しかつ/または制御装置の計算ユニットにより、実行可能なプログラムコードを実行するステップが含まれている。
【0030】
本発明はさらに、コンピュータプログラムがコンピュータ上で実行される場合に、本発明による方法の少なくとも1つを実施するために、プログラムコードを有するコンピュータプログラムに関する。
【0031】
本発明はさらに、コンピュータプログラムがコンピュータ上で実行される場合に、本発明による方法の少なくとも1つを実施するために、コンピュータプログラムのプログラムコードを有するコンピュータ可読データ担体に関する。
【0032】
本発明はさらに、マンマシンインタフェースと、不揮発性メモリと、本発明による方法を実施するように構成されているプロセッサと、を含むコンピュータシステムに関する。
【0033】
本発明の着想は、第1、第2および第3のプレースホルダを設けることにより、それぞれの機能のインクリメンタルコード生成の際にすでに、よりフレキシブルなコードが生成されることである。したがって、プレースホルダを使用することにより、それぞれの応用のためにすでに生成されているプログラムコードを対応して適合させることができる。
【0034】
必要なフレキシビリティを得るために、従来使用される個々のプレースホルダの代わりに、上述の3つのプレースホルダを使用する。
【0035】
従来使用される個々のプレースホルダは、プログラムコードにおいて、変数的に、すなわち、グローバル変数のように使用され、これにより、プログラムコードにおいて変数のように挙動するものによってのみ置き換えられることができる。
【0036】
本発明によるプレースホルダは、インクリメンタルプログラムコード生成の際にプログラムコードに生成されるが、プレースホルダの定義は、後の時点ではじめて生成される。その後、この後の時点に周囲のシステムが生成されると、必要に応じて、プレースホルダの定義が生成されることが可能である。
【0037】
このアプローチの利点は、プレースホルダを設けることによって、プレースホルダによって表される変数の読み取りおよび書き込みの位置が、マーキング可能もしくは定義可能であることにある。
【0038】
この際に、第2のプレースホルダは、プログラムコードにおいて第1のプレースホルダを最初に使用する前にセットされ、第3のプレースホルダは、プログラムコードにおいて第1のプレースホルダを最後に使用した後にセットされる。
【0039】
したがって、プレースホルダを挿入することにより、プレースホルダによって表されるデータオブジェクトのさまざまなフェーズを区別することができ、これにより、このフェーズに適したプログラムコードをそれぞれ使用することができる。プログラムの順次の流れでは、まず、データオブジェクトの読み取りを表す第2のプレースホルダが、次に、データオブジェクトを表す第1のプレースホルダが、また引き続いて、データオブジェクトの書き込みを表す第3のプレースホルダが実行される。
【0040】
第1のプレースホルダをこのように変数的に使用することによって不可能であるのは、プログラムコードにおいて変数的に使用できないアクセス関数に対してこれを定義することである。
【0041】
第2および第3のプレースホルダはプログラムコードにおいて変数的に使用されないため、このようなアクセス関数に対してこれらを定義することが可能である。したがって、第1のプレースホルダに対して相対的に位置決めすることにより、プログラムコードにおいて、第1のプレースホルダを使用する前または使用した後に、これらのアクセス関数を配置することができる。
【0042】
択一的には、プレースホルダの少なくとも1つを、例えば、空と定義することができ、すなわちこれは、この場合になし、もしくは空白によって置き換えられる。これにより、フェーズの1つが必要でない場合に、コードをコンパクトに保つことができる。
【0043】
データオブジェクトを表す第2のプレースホルダの読み取りと、データオブジェクトを表す第3のプレースホルダの書き込みと、を区別することは、例えば、AUTOSARの下ではIRV(Interrunnable-Variable)にアクセスするために有用である。AUTOSARにおけるIRVは、ソフトウェアコンポーネントにおけるランナブルエンティティ間の通信を指定するためのモデリング要素である。
【0044】
IRVは、暗黙的または明示的であってよい。暗黙的とは、ランナブルエンティティが、IRVのローカルコピーで動作することを意味する。ローカルコピーは、ランナブルエンティティの実行開始時にランタイム環境によって作成される。ランナブルエンティティが終了すると、変更が書き戻される。これによって、ランナブルエンティティの実行中のIRVへの競合的なアクセスが回避される。明示的とは、ランナブルエンティティが、IRVに直接にアクセスできることを意味する。別のランナブルエンティティに対し、変更は、対応するIRVへのアクセスに伴って直ちに明らかになる。
【0045】
ポートを介するAUTOSAR通信においても、データオブジェクトを表す第2のプレースホルダの読み取りと、データオブジェクトを表す第3のプレースホルダの書き込みと、を区別することが役に立つ。
【0046】
暗黙的なAUTOSAR通信は、変数的に利用可能であるが、読み取りアクセスと書き込みアクセスとを区別しなければならない。したがって、これが一般に使用される場合には、これを第1のプレースホルダに使用することはできない。
【0047】
明示的なAUTOSAR通信は、変数的に利用可能でなく、読み取りアクセスと書き込みアクセスとを区別しなければならない。
【0048】
これらの両方は、ローカルバッファによって第2のプレースホルダが、読み取りアクセスに、かつ/または第3のプレースホルダが、書き込みアクセスに解決され、第1のプレースホルダが、ローカルバッファへの直接のアクセスに解決されることにより、解消することができる。
【0049】
本発明の別の実施形態は、別の下位請求項および図を参照する以下の説明の対象である。
【0050】
本発明の好ましい発展形態によると、特に周囲のグラフィックモデルのサブシステムに属するプログラムコードにおいて、第1のプレースホルダ、第2のプレースホルダおよび第3のプレースホルダを生成するように構成されている。これにより、有利には、グラフィックモデルに属するプログラムコードのあらかじめ設定される位置に、第1のプレースホルダによって表される変数を生成することができる。
【0051】
本発明の好ましい別の発展形態によると、本方法には、第1のプレースホルダによって表される変数を定義するためにプログラムコードのあらかじめ設定されるセクションの使用領域のはじまりに配置される第4のプレースホルダを生成するステップが含まれるように構成されている。したがって、セットアッププレースホルダである第4のプレースホルダを設けることにより、有利には、データオブジェクトもしくは変数の値をバッファリングする補助変数を使用することができる。
【0052】
本発明の好ましい別の発展形態によると、プログラムコードのあらかじめ設定されるセクションにおいて、変数を表す第1のプレースホルダを使用して計算を実行するように構成されている。それゆえに、変数によって第1のプレースホルダを置き換えることにより、コードにおいて実行される計算および/または操作を相応に変化させることができる。
【0053】
本発明の好ましい別の発展形態によると、第1のプレースホルダを使用するセクションであって、プログラムコードのあらかじめ設定されるセクションのはじまりの直前に、特に、第1のプレースホルダの使用領域のはじまりに第2のプレースホルダを配置するように構成されている。これにより、第1のプレースホルダによって表される変数の実際値を、有利にはその使用の直前に特定することができる。
【0054】
第2のプレースホルダにより、例えば、ローカル変数を定義することができ、次いで第1のプレースホルダを介してこのローカル変数にアクセスする。択一的には、第1のプレースホルダを介してグローバル変数にアクセスしかつローカル変数を定義しないことも可能である。
【0055】
本発明の着想は、生成されるプログラムコードにおいて、外部データオブジェクトへのアクセスを多かれ少なかれ任意に適合させることができ、その際に、対応してプレースホルダを置き換えることにより、生成されたプログラムコードを新たに生成する必要がないことにある。
【0056】
本発明の好ましい別の発展形態によると、第1のプレースホルダを使用するセクションであって、プログラムコードのあらかじめ定められるセクションの終わりの直後に、特に、第1のプレースホルダの使用領域の終わりに第3のプレースホルダを配置するように構成されている。これにより、書き込みアクセスによって第3のプレースホルダを置き換えることにより、第1のプレースホルダの使用領域の直後に、新たに計算された値を書き込むことができる。計算と書き戻しとの間の遅延によって起こり得る副作用が回避される。
【0057】
本発明の好ましい別の発展形態によると、プログラムコードにおけるプリプロセッサマクロとして、少なくとも1つのプレースホルダ、特に、第1のプレースホルダ、第2のプレースホルダ、第3のプレースホルダおよび/または第4のプレースホルダを生成するように構成されている。
【0058】
本発明の好ましい別の発展形態によると、プレースホルダをサブシステムにおいて使用し、グラフィックモデルにおいて定義するように構成されている。したがって、このグラフィックモデルにより、インクリメンタルコード生成の枠内で使用される変数の定義と、対応するサブシステムにおけるそれらの実装もしくは使用と、が可能になる。
【0059】
対応する変数は、例えばデータ辞書において定義可能である。インクリメンタルコード生成ユニットのインタフェースにプレースホルダを使用する際には、コード生成の外部システムにおいて、TargetLinkにより、グラフィックモデル内に存在するリンクに基づき、定義が自動的に生成される。この際、内部システムでは、対応するプレースホルダの使用が生成される。これに対し、外部システムでは、内部で使用されるプレースホルダの定義が生成される。
【0060】
複数の階層レベルを有するモデルでは、プレースホルダの複数のグループを使用することもでき、この際には、好適には内部サブシステムのプレースホルダと、外部サブシステムの対応するプレースホルダと、が同一視される。好適には最初に、全てのサブシステムを含むモデルにおいて、使用されるプレースホルダについての対応する定義が生成される。
【0061】
本発明の好ましい別の発展形態によると、特にインクリメンタルプログラムコード生成の際に、少なくとも1つのプレースホルダを定義することにより、すでに生成されたプログラムコードにおいて、少なくとも1つのローカル変数を作成するように構成されている。
【0062】
本発明の好ましい別の発展形態によると、関数呼び出しを介して、第1のプレースホルダによって表される変数にアクセスし、ここで第2のプレースホルダ、第3のプレースホルダおよび/または第4のプレースホルダは空に定義可能であるように構成されている。第1のプレースホルダによって表される変数は、有利にはグラフィックモデルの一部ではないデータベースもしくはデータ辞書に格納されている。
【0063】
本発明の好ましい別の発展形態によると、特にAUTOSAR RTE-APIもしくはランタイム環境APIにおける関数呼び出しを介して、特に外部変数の読み取りおよび書き込みを行い、ここでプレースホルダにより、プログラムコードにおいてこれらを生成する位置を定義するように構成されている。これにより、コードにおける所望の位置に正確に、対応する変数を生成することができる。
【0064】
本発明の好ましい別の発展形態によると、相異なるスレッドが同じリソースに同時にアクセスするのを阻止するマルチスレッディングモデルにおいて、ロックが提供されるようにプレースホルダを定義するように構成されている。これにより、ユーザは、適切なマクロ定義によって、ロッキング機構を容易に実装することができる。
【0065】
本発明の好ましい別の発展形態によると、特に、エラーのない最後の値をパーシステント変数に記憶することにより、アクセス関数のエラーハンドリングが提供されるようにプレースホルダを定義するように構成されている。
【0066】
このようにして有利には、エラーのない既知の最後の値を、(対応するセットアップマクロにおいて定義可能な)固有のパーシステント変数に記憶することができ、これによってこれをエラーの場合に使用することができるか、または択一的なアクセス関数を呼び出すことができる。
【0067】
制御システムを制御するために実行可能な制御プログラムのプログラムコードを生成する方法の、本明細書に記載された特徴的構成は、本発明によるコンピュータシステムにも同様に適用可能であり、またこの逆に適用可能である。
【0068】
本発明およびその利点をよりよく理解するために、付属の図面に関連して以下の説明を参照されたい。
【0069】
以下では、図面の概略図に示されている例示的な実施形態に基づいて本発明を詳しく説明する。
【図面の簡単な説明】
【0070】
【
図1】本発明の好ましい実施形態にしたがい、制御システムを制御するために実行可能な制御プログラムのプログラムコードを生成する方法のフローチャートを示す図である。
【
図2】制御装置上で実行可能な制御プログラムの2つのランナブルエンティティR1およびR2の実行の時間経過を示す図である。
【
図3】本発明の好ましい実施形態にしたがい、制御装置を設定する方法を示す図である。
【
図4】本発明の好ましい実施形態によるコンピュータシステムの概略図である。
【
図5】プログラムコードを生成することができる例示的なブロック図を示す図である。
【発明を実施するための形態】
【0071】
特に断らない限り、同じ参照符号は、図面の同じ要素を示す。
【0072】
図1に示した方法には、制御システムを制御するために実行可能な制御プログラムのプログラムコード1を生成するステップが含まれている。
【0073】
制御プログラムの機能は、少なくとも部分的にグラフィックモデル2に記述されている。このグラフィックモデル2は、テキストベースのプログラミング言語のプログラムコード1に変換される。
【0074】
本方法には、プログラムコード1のあらかじめ設定されるセクション10において使用される、変数を表す第1のプレースホルダP1を生成するステップS1がさらに含まれている。
【0075】
さらに、本方法には、第1のプレースホルダP1を使用するセクション10であって、プログラムコード1のあらかじめ設定されるセクション10のはじまりの前に配置される第2のプレースホルダP2を生成するステップS2が含まれている。
【0076】
さらに、本方法には、第1のプレースホルダP1を使用するセクション10であって、プログラムコード1のあらかじめ設定されるセクション10の終わりの後に配置される第3のプレースホルダP3を生成するステップS3が含まれている。
【0077】
特に周囲のグラフィックモデル2のサブシステム12に属するプログラムコード1において、第1のプレースホルダP1、第2のプレースホルダP2および第3のプレースホルダP3を生成する。
【0078】
さらに、コンピュータにより実装される方法には、第1のプレースホルダP1によって表される変数を定義するために、プログラムコード1のあらかじめ設定されるセクション10の使用領域14のはじまりに配置される第4のプレースホルダP4を生成するステップS4が含まれている。
【0079】
プログラムコード1のあらかじめ設定されるセクション10において、変数を表す第1のプレースホルダP1を使用して計算を実行する。
【0080】
第2のプレースホルダP2は、第1のプレースホルダP1を使用するセクション10であって、プログラムコード1のあらかじめ設定されるセクション10のはじまりの直前に、特に、第1のプレースホルダP1の使用領域14のはじまりに配置される。
【0081】
第1のプレースホルダP1を使用するセクション10であって、プログラムコード1のあらかじめ設定されるセクション10の終わりの直後に、特に、第1のプレースホルダP1の使用領域14の終わりに第3のプレースホルダP3を配置する。
【0082】
ここではプログラムコード1におけるプリプロセッサマクロとして、少なくとも1つのプレースホルダ、特に第1のプレースホルダP1、第2のプレースホルダP2、第3のプレースホルダP3および/または第4のプレースホルダP4を生成する。
【0083】
プレースホルダをサブシステム12において使用し、グラフィックモデル2において定義する。
【0084】
特にインクリメンタルプログラムコード生成の際に、少なくとも1つのプレースホルダP1,P2,P3,P4を定義することにより、すでに生成されたプログラムコード1において、少なくとも1つのローカル変数を作成する。
【0085】
第1のプレースホルダP1によって表される変数には、関数呼び出し16を介してアクセスする。さらに、必要に応じて、第2のプレースホルダP2、第3のプレースホルダP3および/または第4のプレースホルダP4は空に定義可能である。
【0086】
慣用の変数的なプレースホルダの枠囲内では、固定の読み取り-実行-書き込み-シーケンスが設けられている。このことは、例えば、複数のサブシステム、もしくは
図2に示されているランナブルエンティティR1およびR2のようなこれらサブシステムによって含まれるプログラムコードの同時実行の場合には問題となる可能性がある。プレースホルダ値へのアクセスは、例えば、ランタイム環境APIにおける関数呼び出しにより、対応するプログラムコードセクションのはじめに行われる。
【0087】
従来の方式では、すでにインクリメンタルに生成されたプログラムコードがただ1つの(変数的な)プレースホルダを有する場合、このプログラムコードにおいて後からRTE-API関数を呼び出すことはできない。したがって、外部システムの新たに生成されるプログラムコードにおいてのみ、内部システムの呼び出し前に関数を生成することができる。
【0088】
図2には、制御装置上で実行可能な制御プログラムの2つのランナブルエンティティR1およびR2の実行の時間経過が示されている。
【0089】
本発明による方法にしたがってランナブルエンティティR1についてのコードを生成することにより、読み取り過程と計算過程との間のより良好な時間的な同時発生を達成することができる。
【0090】
t軸には、この実施形態の時間経過が示されており、R1およびR2が並列に実行されることがわかる。ここで、参照符号9は、インクリメンタルに生成される、R1の領域を示しており、また参照符号11は、プレースホルダにアクセスされるかもしくは計算が行われる部分領域を示している。従来技術によると、読み取りアクセスおよび書き込みアクセスは、インクリメンタルに生成される領域外で行われ、ここでは時点11aおよび11bに図示されている。
【0091】
ここではそれぞれ、特にAUTOSAR RTE-APIにおける関数呼び出し16を介し、特に外部変数の読み取りおよび書き込みを行う。
【0092】
この図にはさらに、並列に実行されるランナブルエンティティR2が、時点t1に同じ変数にどのようにアクセスして新しい値を書き込むのかが示されている。ランナブルエンティティR1は、R2の書き込みアクセスが行われた後、変数によって計算を実行するため、この計算は、新たな値で補正的に行わなければならない。しかしながら読み取りアクセスは、時点11aで行われているため、計算は実際にはまだ旧い値によって実行される。
【0093】
さらに、ランナブルエンティティR2は、最新の値を読み取るために、時点t2に改めて変数にアクセスする。この段階では、正しくはR1における計算によって変更された値があるはずであるが、この値は、時点11bにようやく書き戻される。全体として、読み取りアクセスおよび書き込みアクセスの配置により、R1もR2も共に、変数について旧くかつ場合によっては誤りのある値を処理してしまうことになる。
【0094】
本発明によるコード生成により、部分領域11のコードにおいて複数のアクセスが生成されるため、これらのアクセスは、この図では垂直方向の破線11a’および11b’によって示されているように計算により近くなる。したがって、本発明によると、インクリメンタルコード生成の場合であっても、計算11において、時点t1にR2によって書き込まれた値が使用され、時点t2にR2によってすでに、11において計算された値が読み取られることが可能である。
【0095】
好ましい別の実施形態によると、AUTOSARソフトウェアコンポーネントもしくはそこに含まれるランナブルエンティティのモデルリングには、TargetLinkを使用するように構成されている。ランナブルエンティティは、AUTOSARソフトウェアコンポーネントを独立して実行可能な最小の部分モジュールである。ランナブルエンティティが、多数のサブシステムのような部分モジュール、特にライブラリブロックを有する場合、発生したエラーの対応付けもしくはデバッグが困難になることがある。
【0096】
直接的な、もしくは明示的にモデリングされるAUTOSAR通信の代わりに、プレースホルダを使用することが有効である。この場合、個々の部分モジュールに対し、テスト用に適合されたランナブルエンティティを含む、適合されたモデルを作成することができる。
【0097】
プレースホルダを使用することにより、部分モジュールそれ自体用のコードを1回だけ生成すればよい。これにより、通例、コード生成が繰り返される際に必要になる複数回のテストを回避することができる。
【0098】
同等のテストモデリングは基本的に、明示的なAUTOSAR通信のような同等のアクセス関数を使用する、非AUTOSARモデルにも使用可能である。プレースホルダの利点は、明示的なアクセス関数にも従来の/変数的なアクセスにも使用できることにある。
【0099】
好ましい別の実施形態によると、較正量および測定量は、関数のコードとは別に格納されるように構成されている。したがって、コード生成の時点に特定のコンポーネントについて、これらの変数がどこに関連付けられるべきであるかがまだ正確には既知でないという事態が起こり得る。さらに場合によってはこれらのコンポーネントは、別のプロジェクトで再使用されるべきである。
【0100】
AUTOSARの下での定数の使用には通例、RTE-API関数呼び出しが必要である。というのは、較正量および測定量は、RTEもしくはランタイム環境に格納されるべきだからである。別のケースでは、特別なハードウェア機能の呼び出しが必要とされることがある。定数へのアクセスのためのプレースホルダがモデリングされることにより、関数のコードを変更することなく、アクセスの詳細を後から適合させることができる。
【0101】
さらに、例えば、較正可能な機能を備えたPID制御器を提供する対応するサブシステムは、新たなコード生成を必要とすることなく、容易に再使用可能である。
【0102】
好ましい別の実施形態によると、相異なるスレッドが同じリソースに同時にアクセスするのを阻止するマルチスレッディングモデルにおいて、ロックが提供されるようにプレースホルダP1,P2,P3,P4を定義するように構成されている。
【0103】
1つのモデルもしくは1つのプログラムが複数のスレッドを含む場合、これには、同じリソース、特に共有メモリ、すなわち、例えばグローバル変数への異なるスレッドの同時アクセスを阻止するロッキング機構が必要になる。
【0104】
コードにおける対応するプレースホルダ位置では、例えば、ビットを1にセットするか、またはあらかじめ設定されるカウント変数をインクリメントすることができる。それぞれのタスクは、これが可能になると直ちに動作し続け、したがって対応するロックを待機する。この場合、イネーブルのためには、対応するビットもしくはカウント変数が続いて元のようにリセットされる。
【0105】
したがって、ユーザは、適切なマクロ定義によって、ロッキング機構を容易に実装することができる。ここでは、第2のプレースホルダP2がロックのために使用され、第3のプレースホルダP3がイネーブルのために使用される。
【0106】
好ましい別の実施形態によると、さらに、特に、エラーのない最後の値をパーシステント変数に記憶することにより、アクセス関数のエラーハンドリングが提供されるようにプレースホルダを定義するように構成されている。
【0107】
例えば、RTE-API関数のようないくつかのアクセス関数は、エラーの場合に、読み取ったデータが正しくないこと、もしくはデータを正しく書き込めなかったことをシグナリングすることができる。この際には、このエラーの場合の対応する処理をマクロ定義に追加することができる。このようにして、例えば、エラーのない既知の最後の値を、固有のパーシステント変数であって、対応するセットアップマクロもしくはプレースホルダにおいて定義することができるパーシステント変数に記憶することができ、これによってこれをエラーの場合に使用することができるか、または択一的なアクセス関数を呼び出すことができる。
【0108】
図3には、本発明の好ましい実施形態にしたがって、制御装置を設定する方法が示されており、制御装置18は、少なくとも1つの計算ユニット20を含み、好適には、物理的プロセスのデータを検出しかつ/またはこれに作用するために少なくとも1つのセンサ22および/または少なくとも1つのアクチュエータ24を有する。
【0109】
本方法には、ブロック図を読み込むステップS1’と、本発明による方法によってプログラムコード1を生成するステップS2’と、が含まれている。
【0110】
本方法にはさらに、計算ユニット20用にプログラムコード1をコンパイルして、実行可能なプログラムコード1’を生成するステップS3’と、制御装置18に実行可能なプログラムコード1’を伝送するステップS4’と、が含まれている。
【0111】
本方法にはさらに、制御装置18の不揮発性メモリに、実行可能なプログラムコード1’を格納し、かつおよび/または制御装置18の計算ユニット20により、実行可能なプログラムコード1’を実行するステップS5’が含まれている。
【0112】
図4には、本発明の好ましい実施形態によるコンピュータシステム100の概略図が示されている。
【0113】
コンピュータシステム100には、マンマシンインタフェース101と、不揮発性メモリ102と、プロセッサ103と、が含まれている。プロセッサ103は、本発明による方法の少なくとも1つを実施するように構成されている。
【0114】
図5には、プログラムコードを生成することができるブロック図の実施例が示されている。
【0115】
このブロック図には、スカラー入力信号を受信する入力ポート「In1」と、スカラー出力信号を出力する出力ポート「Out1」と、が示されている。入力ポート「In1」は第1の計算ブロック「乗算」に接続されており、この第1の計算ブロック「乗算」により、得られた信号と、定数ブロック「定数」から得られた値3.14159と、が乗算される。第1の計算ブロック「乗算」は第2の計算ブロック「加算」に接続されており、この第2の計算ブロック「加算」により、得られた信号と、定数ブロック「定数1」から得られた値2.71828と、が加算される。第2の計算ブロック「加算」は、第3の計算ブロック「乗算1」に接続されており、この第3の計算ブロック「乗算1」により、得られた信号と、入力ポート「In1」において受信した入力信号と、が乗算され、結果が出力ポートに転送される。
【0116】
本発明による方法の好ましい実施形態によると、入力信号用のプレースホルダの第1集合を生成し、出力信号用のプレースホルダの第2集合を生成する。入力信号用に好適には、第1のプレースホルダ「RDI_In」、第2のプレースホルダ「RDI_In_Start」、第3のプレースホルダ「RDI_In_Stop」、および第4のプレースホルダ「RDI_In_Setup」を生成する。出力信号用に好ましくは、第1のプレースホルダ「RDI_Out」、第2のプレースホルダ「RDI_Out_Start」、第3のプレースホルダ「RDI_Out_Stop」および第4のプレースホルダ「RDI_Out_Setup」を生成する。
【0117】
ブロック図をライブラリ関数「LibraryFunction」として組み込むことができるようにするために、好適には、次のプログラムコードを生成する。すなわち、
#include "tl_rdi_LibraryFunction.h"
void Sincr1_LibraryFunction(void)
{
RDI_In_Setup
RDI_Out_Setup
RDI_In_Start
RDI_Out_Start
/* Outport: LibraryFunction/Out1
# combined # Product: LibraryFunction/Product1
# combined # Sum: LibraryFunction/Sum
# combined # Product: LibraryFunction/Product */
RDI_Out = RDI_In * ((RDI_In * 3.14159)+ 2.71828);
RDI_In_Stop
RDI_Out_Stop
}
【0118】
ライブラリ関数の望ましい使用に応じて、異なるプログラムコードフラグメントによってプレースホルダを置き換えることができる。例えば、変数を介して入力値を取得して、同様に変数を介して出力しようとする場合、第2、第3および第4のプレースホルダをそれぞれ空に定義することができる。結果として得られるプログラムコードは、付加的なプレースホルダが設けられていない場合と同様にコンパクトである。
【0119】
択一的な実施形態において、第1のアクセス関数「RDI_InImpl」を介して入力値を受信し、第2のアクセス関数「RDI_OutImpl」を介して出力値を出力しようとする場合、プレースホルダは、特にプリプロセッサマクロとして、以下のように定義されてよい。すなわち、
#define RDI_In RDI_InImpl
#define RDI_In_Setup float64 RDI_InImpl;
#define RDI_In_Start Rte_Read_ReceiverPort_DE(&RDI_InImpl);
#define RDI_In_Stop
#define RDI_Out RDI_OutImpl
#define RDI_Out_Setup float64 RDI_OutImpl;
#define RDI_Out_Start
#define RDI_Out_Stop Rte_Write_SenderPort_DE(RDI_OutImpl);
【0120】
この場合、すでに生成されたコードは、マクロを置き換えた後、コンパイラには次のように見える。すなわち、
void Sincr1_LibraryFunction(void)
{
float64 RDI_InImpl;
float64 RDI_OutImpl;
Rte_Read_ReceiverPort_DE(&RDI_InImpl);
/* Outport: LibraryFunction/Out1
# combined # Product: LibraryFunction/Product1
# combined # Sum: LibraryFunction/Sum
# combined # Product: LibraryFunction/Product */
RDI_OutImpl = RDI_InImpl * ((RDI_InImpl * 3.14159) + 2.71828);
Rte_Write_SenderPort_DE(RDI_OutImpl);
}
【0121】
プログラムコードでは望み通りにライブラリ関数内のRte-API関数は、ローカル変数によって呼び出される。付加的なマクロをうまく配置することにより、一度生成されたコードは十分にフレキシブルであり、これにより、インクリメンタル部分の新たなコード生成を必要とすることなく、グローバル変数を介する通信にも、ローカルバッファによるアクセス関数を介する通信にも使用することができる。
【0122】
したがって、プログラムコードを生成する本発明による方法によると、インクリメンタルコード生成が行われる場合であっても、種々異なる通信方式をサポートするために、生成されるプログラムコードを適合させることができる。
【外国語明細書】