(57)【要約】      （修正有）【課題】電子化されたタイムシーケンス図の作成を支援するとともに作成されたタイムシーケンス図から信号制御用の制御プログラムを自動生成する。【解決手段】シーケンス図作成支援部３ａが描画部品２ａを利用者に提供することによってシーケンス図の作成を支援し、コード生成部３ｄがシーケンス図作成支援部３ａから受け取ったシーケンス図情報２ｃに含まれる描画部品の属性および配置情報とシーケンス図情報２ｃとは別に用意された外部定義情報２ｄとを合成することによってソースコードを生成するよう構成する。【選択図】図２
2007206798.tif 000002
【特許請求の範囲】
【請求項１】
被制御装置を制御するための制御プログラムを生成する制御プログラム生成プログラムであって、
前記被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、前記被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させる入力手順と、
前記入力手順で受け付けたタイムシーケンス図に配置された前記ロジック記号の属性および配置情報に基づいて前記制御プログラムを生成する制御プログラム生成手順と
をコンピュータに実行させることを特徴とする制御プログラム生成プログラム。
【請求項２】
前記制御プログラム生成手順は、
前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、前記ロジック記号が配置された信号の前記タイムシーケンス図における描画順序に応じて前記信号同士の関係を反映した前記制御プログラムを生成することを特徴とする請求項１に記載の制御プログラム生成プログラム。
【請求項３】
前記制御プログラム生成手順は、
前記タイムシーケンス図に配置された前記ロジック記号に信号同士の関係を前記制御プログラムへ展開する展開順序をあらわす展開順序情報が含まれている場合に、前記ロジック記号が配置された信号の前記タイムシーケンス図における描画順序よりも前記展開順序情報を優先して信号同士の関係を反映した前記制御プログラムを生成することを特徴とする請求項２に記載の制御プログラム生成プログラム。
【請求項４】
前記入力手順は、
前記タイムシーケンス図を所定数の部分図に分割する境界の入力を許容し、
前記制御プログラム生成手順は、
前記境界によって分割された部分図ごとに前記制御プログラムを生成することを特徴とする請求項１、２または３に記載の制御プログラム生成プログラム。
【請求項５】
前記入力手順は、
複数の前記タイムシーケンス図の入力および各タイムシーケンス図間の関係情報の入力を許容し、
前記制御プログラム生成手順は、
各タイムシーケンス図を前記関係情報に基づいて結合したうえで前記制御プログラムを生成することを特徴とする請求項１〜４のいずれか一つに記載の制御プログラム生成プログラム。
【請求項６】
前記制御プログラム生成手順は、
前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、前記関係を有する各信号のうち特定の信号が変化してから他の信号が変化するまでの遅れ時間がある場合には、当該遅れ時間を反映した前記制御プログラムを生成することを特徴とする請求項１〜５のいずれか一つに記載の制御プログラム生成プログラム。
【請求項７】
前記入力手順は、
前記ロジック記号としてプログラムロジックの直接入力をおこなうことが可能なロジック記号を有し、当該ロジック記号は前記タイムシーケンス図に表示される際に、利用者によって直接入力されたプログラムロジックをロジック記号の一部として表示させることを特徴とする請求項１〜６のいずれか一つに記載の制御プログラム生成プログラム。
【請求項８】
前記制御プログラム生成手順は、
前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、各信号の変化をあらわした信号制御用ロジックと前記信号制御用ロジックを所定のタイミングで呼び出す時間制御用ロジックとを分離して生成することを特徴とする請求項１〜７のいずれか一つに記載の制御プログラム生成プログラム。
【請求項９】
前記ロジック記号の属性を定義した定義データを記憶部に登録する定義データ登録手順をさらにコンピュータに実行させ、
前記制御プログラム生成手順は、
前記タイムシーケンス図に含まれる前記ロジック記号の前記配置情報と前記定義データ登録手順によって登録された前記定義データとを関連付けたうえで前記制御プログラムを生成することを特徴とする請求項１〜８のいずれか一つに記載の制御プログラム生成プログラム。
【請求項１０】
前記入力手順が受け付けた一または複数の前記タイムシーケンス図から共通の信号制御パターンを抽出するパターン抽出手順をさらにコンピュータに実行させ、
前記制御プログラム生成手順は、
前記パターン抽出手順が抽出した前記信号制御パターンを共通ロジックへ変換したうえで前記共通ロジックを用いた前記制御プログラムを生成することを特徴とする請求項１〜９のいずれか一つに記載の制御プログラム生成プログラム。
【請求項１１】
前記パターン抽出手順は、
前記信号の作用関係をあらわした前記ロジック記号の組合せを前記共通の信号制御パターンとして抽出することを特徴とする請求項１０に記載の制御プログラム生成プログラム。
【請求項１２】
前記入力手順は、
利用者によって配置された前記ロジック記号の位置関係からタイムシーケンス図に未入力部分があると判定した場合に、前記ロジック記号の位置関係に基づいて前記タイムシーケンス図の入力補完をおこなうことを特徴とする請求項１〜１１のいずれか一つ制御プログラム生成プログラム。
【請求項１３】
前記制御プログラム生成手順は、
前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、当該制御プログラムを構成するロジックおよびデータ格納領域確保のルールをあらわすプログラミングルールを用いて前記制御プログラムを生成することを特徴とする請求項１〜１２のいずれか一つに記載の制御プログラム生成プログラム。
【請求項１４】
被制御装置を制御するための制御プログラムを生成する制御プログラム生成装置であって、
前記被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、前記被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させる入力手段と、
前記入力手段で受け付けたタイムシーケンス図に配置された前記ロジック記号の属性および配置情報に基づいて前記制御プログラムを生成する制御プログラム生成手段と
を備えたことを特徴とする制御プログラム生成装置。
【請求項１５】
被制御装置を制御するための制御プログラムを生成する制御プログラム生成方法であって、
前記被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、前記被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させる入力工程と、
前記入力工程で受け付けたタイムシーケンス図に配置された前記ロジック記号の属性および配置情報に基づいて前記制御プログラムを生成する制御プログラム生成工程と
を含んだことを特徴とする制御プログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、被制御装置を制御するための制御プログラムを生成する制御プログラム生成プログラム、制御プログラム生成方法および制御プログラム生成装置に関し、特に、制御プログラム生成の基礎となる電子化されたタイムシーケンス図の効率的な作成を支援することができるとともに、電子化されたタイムシーケンス図に対応する制御プログラムを自動生成することができる制御プログラム生成プログラム、制御プログラム生成方法および制御プログラム生成装置に関する。
【背景技術】
【０００２】
近年、車両（たとえば、自動車）に搭載されるエンジンやオートマチックトランスミッションなどの車両搭載装置の高性能化に伴って、これらの車両搭載装置の動作を制御するＥＣＵ（Electronic  Control  Unit）などの車載コンピュータ上で動作する制御プログラムも複雑化している。
【０００３】
かかる制御プログラムの開発工程においては、エンジン回転数や燃料噴射量、ギアの段数といった信号値の時間変化の仕様を定めたタイムシーケンス図が広く用いられている。そして、プログラム開発者はかかるタイムシーケンス図から信号値や信号変化のトリガー、信号変化の作用関係などを読み取ったうえで、タイムシーケンス図に示された条件を満たす制御プログラムを作成することが一般的である。
【０００４】
しかし、タイムシーケンス図などの図に基づいて制御プログラムを作成する作業は煩雑であるのでプログラム開発効率が悪いうえプログラム開発者のミスを誘発しやすい。このため、タイムシーケンス図などの図をグラフィカルユーザインタフェースを備えたコンピュータ上で生成し、電子化されたタイムシーケンス図を編集することによって制御プログラムを生成する手法が提案されている。
【０００５】
たとえば、特許文献１には、プラント制御用の制御プログラムを検査する検査用プログラムの生成方法に関し、タイムシーケンス図の任意の時点における信号値、信号値変化のタイミング、判定条件を利用者に入力させることによって検査用プログラムを生成する技術が開示されている。
【０００６】
【特許文献１】特開２０００−２７６２２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１の技術には、タイムシーケンス図から制御プログラムを生成する作業が煩雑でありプログラム開発者の作業効率が良くないという問題があった。具体的には、タイムシーケンス図上で可能な操作は任意の時点を指定する操作のみであり、制御プログラムの具体的な内容は別ウィンドウとして表示される設定画面上で設定しなければならなかった。このため、プログラム開発者はタイムシーケンス図の表示画面と設定画面とを見比べながらの作業をおこなう必要があった。
【０００８】
ところで、電子化されたタイムシーケンス図に基づいて制御プログラムを生成する場合には、タイムシーケンス図のあいまいさを排除しつつタイムシーケンス図の内容を正確にあらわした制御プログラムを生成する必要があるが、かかる制御プログラムの自動生成手法は確立されていないのが現状である。
【０００９】
これらのことから、制御プログラム生成の基礎となる電子化されたタイムシーケンス図の効率的な作成を支援するとともに、電子化されたタイムシーケンス図に対応する制御プログラムを自動生成する制御プログラム生成手法をいかにして実現するかが大きな課題となっている。
【００１０】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、制御プログラム生成の基礎となる電子化されたタイムシーケンス図の効率的な作成を支援することができるとともに、電子化されたタイムシーケンス図に対応する制御プログラムを自動生成することができる制御プログラム生成プログラム、制御プログラム生成方法および制御プログラム生成装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、被制御装置を制御するための制御プログラムを生成する制御プログラム生成プログラムであって、前記被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、前記被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させる入力手順と、前記入力手順で受け付けたタイムシーケンス図に配置された前記ロジック記号の属性および配置情報に基づいて前記制御プログラムを生成する制御プログラム生成手順とをコンピュータに実行させることを特徴とする。
【００１２】
また、請求項２に係る発明は、上記の発明において、前記制御プログラム生成手順は、前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、前記ロジック記号が配置された信号の前記タイムシーケンス図における描画順序に応じて前記信号同士の関係を反映した前記制御プログラムを生成することを特徴とする。
【００１３】
また、請求項３に係る発明は、上記の発明において、前記制御プログラム生成手順は、前記タイムシーケンス図に配置された前記ロジック記号に信号同士の関係を前記制御プログラムへ展開する展開順序をあらわす展開順序情報が含まれている場合に、前記ロジック記号が配置された信号の前記タイムシーケンス図における描画順序よりも前記展開順序情報を優先して信号同士の関係を反映した前記制御プログラムを生成することを特徴とする。
【００１４】
また、請求項４に係る発明は、上記の発明において、前記入力手順は、前記タイムシーケンス図を所定数の部分図に分割する境界の入力を許容し、前記制御プログラム生成手順は、前記境界によって分割された部分図ごとに前記制御プログラムを生成することを特徴とする。
【００１５】
また、請求項５に係る発明は、上記の発明において、前記入力手順は、複数の前記タイムシーケンス図の入力および各タイムシーケンス図間の関係情報の入力を許容し、前記制御プログラム生成手順は、各タイムシーケンス図を前記関係情報に基づいて結合したうえで前記制御プログラムを生成することを特徴とする。
【００１６】
また、請求項６に係る発明は、上記の発明において、前記制御プログラム生成手順は、前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、前記関係を有する各信号のうち特定の信号が変化してから他の信号が変化するまでの遅れ時間がある場合には、当該遅れ時間を反映した前記制御プログラムを生成することを特徴とする。
【００１７】
また、請求項７に係る発明は、上記の発明において、前記入力手順は、前記ロジック記号としてプログラムロジックの直接入力をおこなうことが可能なロジック記号を有し、当該ロジック記号は前記タイムシーケンス図に表示される際に、利用者によって直接入力されたプログラムロジックをロジック記号の一部として表示させることを特徴とする。
【００１８】
また、請求項８に係る発明は、上記の発明において、前記制御プログラム生成手順は、前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、各信号の変化をあらわした信号制御用ロジックと前記信号制御用ロジックを所定のタイミングで呼び出す時間制御用ロジックとを分離して生成することを特徴とする。
【００１９】
また、請求項９に係る発明は、上記の発明において、前記ロジック記号の属性を定義した定義データを記憶部に登録する定義データ登録手順をさらにコンピュータに実行させ、前記制御プログラム生成手順は、前記タイムシーケンス図に含まれる前記ロジック記号の前記配置情報と前記定義データ登録手順によって登録された前記定義データとを関連付けたうえで前記制御プログラムを生成することを特徴とする。
【００２０】
また、請求項１０に係る発明は、上記の発明において、前記入力手順が受け付けた一または複数の前記タイムシーケンス図から共通の信号制御パターンを抽出するパターン抽出手順をさらにコンピュータに実行させ、前記制御プログラム生成手順は、前記パターン抽出手順が抽出した前記信号制御パターンを共通ロジックへ変換したうえで前記共通ロジックを用いた前記制御プログラムを生成することを特徴とする。
【００２１】
また、請求項１１に係る発明は、上記の発明において、前記パターン抽出手順は、前記信号の作用関係をあらわした前記ロジック記号の組合せを前記共通の信号制御パターンとして抽出することを特徴とする。
【００２２】
また、請求項１２に係る発明は、上記の発明において、前記入力手順は、利用者によって配置された前記ロジック記号の位置関係からタイムシーケンス図に未入力部分があると判定した場合に、前記ロジック記号の位置関係に基づいて前記タイムシーケンス図の入力補完をおこなうことを特徴とする。
【００２３】
また、請求項１３に係る発明は、上記の発明において、前記制御プログラム生成手順は、前記タイムシーケンス図に配置された前記ロジック記号で定義された信号同士の関係を前記制御プログラムへ展開していく際に、当該制御プログラムを構成するロジックおよびデータ格納領域確保のルールをあらわすプログラミングルールを用いて前記制御プログラムを生成することを特徴とする。
【００２４】
また、請求項１４に係る発明は、被制御装置を制御するための制御プログラムを生成する制御プログラム生成装置であって、前記被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、前記被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させる入力手段と、前記入力手段で受け付けたタイムシーケンス図に配置された前記ロジック記号の属性および配置情報に基づいて前記制御プログラムを生成する制御プログラム生成手段とを備えたことを特徴とする。
【００２５】
また、請求項１５に係る発明は、被制御装置を制御するための制御プログラムを生成する制御プログラム生成方法であって、前記被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、前記被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させる入力工程と、前記入力工程で受け付けたタイムシーケンス図に配置された前記ロジック記号の属性および配置情報に基づいて前記制御プログラムを生成する制御プログラム生成工程とを含んだことを特徴とする。
【発明の効果】
【００２６】
請求項１、１４または１５に係る発明によれば、被制御装置の制御に用いられる複数の信号の時間変化をあらわすタイムシーケンス図を利用者に作成させる際に、被制御装置の制御に用いられる信号同士の関係を前記タイムシーケンス図にロジック記号を配置させることによって利用者に入力させ、受け付けたタイムシーケンス図に配置されたロジック記号の属性および配置情報に基づいて制御プログラムを生成するよう構成したので、利用者に直感的なシーケンス図作成作業をおこなわせることによって、制御プログラム生成の基礎となる電子化されたタイムシーケンス図の効率的な作成を支援することができるとともに、電子化されたタイムシーケンス図に対応する制御プログラムを自動生成することができるという効果を奏する。
【００２７】
また、請求項２に係る発明によれば、タイムシーケンス図に配置されたロジック記号で定義された信号同士の関係を制御プログラムへ展開していく際に、ロジック記号が配置された信号の前記タイムシーケンス図における描画順序に応じて信号同士の関係を反映した制御プログラムを生成するよう構成したので、利用者に展開順序を指定させることなくタイムシーケンス図のあいまいさを排除して生成ロジックを一意に定めることが可能となり生成ロジックの品質を向上させることができるという効果を奏する。
【００２８】
また、請求項３に係る発明によれば、タイムシーケンス図に配置されたロジック記号に信号同士の関係を制御プログラムへ展開する展開順序をあらわす展開順序情報が含まれている場合に、ロジック記号が配置された信号の前記タイムシーケンス図における描画順序よりも展開順序情報を優先して信号同士の関係を反映した制御プログラムを生成するよう構成したので、利用者に展開順序を直接指定させることでタイムシーケンス図のあいまいさを排除して生成ロジックを一意に定めることが可能となり生成ロジックの品質を向上させることができるという効果を奏する。
【００２９】
また、請求項４に係る発明によれば、タイムシーケンス図を所定数の部分図に分割する境界の入力を許容し、境界によって分割された部分図ごとに制御プログラムを生成するよう構成したので、制御プログラムのモジュール化を容易におこなうことができるとともに、タイムシーケンス図や制御プログラムの流用を促進することができるという効果を奏する。
【００３０】
また、請求項５に係る発明によれば、複数のタイムシーケンス図の入力および各タイムシーケンス図間の関係情報の入力を許容し、各タイムシーケンス図を関係情報に基づいて結合したうえで制御プログラムを生成するよう構成したので、分散開発したタイムシーケンス図を容易に統合することができるとともに、各タイムシーケンス図を視認性を保持した大きさにすることができるという効果を奏する。
【００３１】
また、請求項６に係る発明によれば、タイムシーケンス図に配置されたロジック記号で定義された信号同士の関係を制御プログラムへ展開していく際に、関係を有する各信号のうち特定の信号が変化してから他の信号が変化するまでの遅れ時間がある場合には、この遅れ時間を反映した制御プログラムを生成するよう構成したので、特定の信号の変化タイミングと、この信号と関係を有する信号の変化タイミングにずれがある場合であっても制御プログラムを容易に生成することができるという効果を奏する。
【００３２】
また、請求項７に係る発明によれば、ロジック記号としてプログラムロジックの直接入力をおこなうことが可能なロジック記号を有し、このロジック記号はタイムシーケンス図に表示される際に、利用者によって直接入力されたプログラムロジックをロジック記号の一部として表示させるよう構成したので、利用者はタイムシーケンス図を見るのみでタイムシーケンス図にあらわされているロジックを理解することができるという効果を奏する。
【００３３】
また、請求項８に係る発明によれば、タイムシーケンス図に配置されたロジック記号で定義された信号同士の関係を制御プログラムへ展開していく際に、各信号の変化をあらわした信号制御用ロジックと信号制御用ロジックを所定のタイミングで呼び出す時間制御用ロジックとを分離して生成するよう構成したので、信号制御用ロジックの共通モジュール化を容易におこなうことができるとともに、生成するロジックの呼び出し関係を明確にすることによって生成ロジックの品質を向上させることができるという効果を奏する。
【００３４】
また、請求項９に係る発明によれば、ロジック記号の属性を定義した定義データを記憶部に登録し、タイムシーケンス図に含まれるロジック記号の配置情報と登録された定義データとを関連付けたうえで制御プログラムを生成するよう構成したので、タイムシーケンス図の作成作業を効率化することができるとともに、生成する制御プログラムを複数のプログラミング言語へ対応させたり、同一のタイムシーケンス図から異なる制御プログラムを生成したりというように、制御プログラムの生成を柔軟におこなうことができるという効果を奏する。
【００３５】
また、請求項１０に係る発明によれば、受け付けた一または複数のタイムシーケンス図から共通の信号制御パターンを抽出し、抽出した信号制御パターンを共通ロジックへ変換したうえで共通ロジックを用いた制御プログラムを生成するよう構成したので、生成された制御プログラムのモジュール化を自動的におこなうことによって生成する制御プログラムの品質を向上させることができるという効果を奏する。
【００３６】
また、請求項１１に係る発明によれば、信号の作用関係をあらわしたロジック記号の組合せを共通の信号制御パターンとして抽出するよう構成したので、シーケンス図において複数箇所に登場する共通のパターンを抽出して利用を促すことによってシーケンス図の作成作業を効率化することができるとともに、生成する制御プログラムの品質を向上させることができるという効果を奏する。
【００３７】
また、請求項１２に係る発明によれば、利用者によって配置されたロジック記号の位置関係からタイムシーケンス図に未入力部分があると判定した場合に、ロジック記号の位置関係に基づいてタイムシーケンス図の入力補完をおこなうよう構成したので、シーケンス図の作成手順を簡素化することができるという効果を奏する。
【００３８】
また、請求項１３に係る発明によれば、タイムシーケンス図に配置されたロジック記号で定義された信号同士の関係を制御プログラムへ展開していく際に、制御プログラムを構成するロジックおよびデータ格納領域確保のルールをあらわすプログラミングルールを用いて制御プログラムを生成するよう構成したので、生成するロジックの信頼性を高めることができるとともに、生成した制御プログラムが使用するメモリ領域を効率的に削減することができるという効果を奏する。
【発明を実施するための最良の形態】
【００３９】
以下に添付図面を参照して、この発明に係る制御プログラム生成手法の好適な実施例を詳細に説明する。なお、以下の実施例においては、パーソナルコンピュータ（ＰＣ）やワークステーション（ＷＳ）などの汎用的なコンピュータに専用プログラムをインストールすることによって制御プログラム生成装置を構成した場合について説明する。また、以下の実施例においては、上記したタイムシーケンス図を単に「シーケンス図」と記載することとする。
【００４０】
まず、本発明に係る制御プログラム生成手法の概要および特徴について図１を用いて説明する。図１は、本発明に係る制御プログラム生成手法の概要および特徴を示す図である。なお、同図に示す「制御プログラム生成ツール」が本発明に係る制御プログラム生成手法を適用した制御プログラム生成プログラムであり、パーソナルコンピュータ（ＰＣ）などのコンピュータにインストールすることによって機能を発揮する。
【００４１】
図１に示すように、制御プログラム生成ツールは、ディスプレイ装置などの表示デバイスにシーケンス図入力画面を表示するとともに、描画部品の一覧をあらわすパレットなどを表示することによって利用者に対して「描画部品」の提供をおこなう（図１の（１）参照）。ここで、「描画部品」とは、各種信号の時間経過をあらわす直線や曲線といった線、各信号間の依存関係や判定条件といった記号のことを指す。
【００４２】
利用者は制御プログラム生成ツールから提供された描画部品を適宜選択するとともに、シーケンス図入力画面上に配置したり属性値の入力をおこなったりすることによってシーケンス図を作成する（図１の（２）参照）。なお、図１のシーケンス図入力画面に示したシーケンス図は横軸に時間を縦軸に各信号に関する信号値を信号ごとに並べたものである。また、このシーケンス図では、「ＯＮ」および「ＯＦＦ」の２値をとる信号を例示しているが、２値をとる信号に限定するものではない。
【００４３】
制御プログラム生成ツールは、このようにして作成されたシーケンス図を読み取り（図１の（３）参照）、シーケンス図に配置された各描画部品の配置情報や属性値を取得する（図１の（４）参照）。そして、かかるシーケンス図とは別に用意された「外部定義情報」と図１の（４）で取得した情報とを合成することによって制御プログラム（たとえば、ソースコード）を生成する。なお、図１の（５）で用いる外部定義情報の詳細については図１２を用いて後述することとする。
【００４４】
図１に示したソースコードは、プログラミング言語の一つであるＣ言語によるソースコードである。また、このソースコードは図１に示したシーケンス図に対応したものである。具体的には、シーケンス図のＴ［ｎ］時間において、信号Ａの信号値がＯＦＦからＯＮへ変化したことを条件として信号Ｂの信号値をＯＦＦにする旨の制御内容が記述されている。
【００４５】
このように、本発明に係る制御プログラム生成手法では、各信号値の時間変化をあらわすシーケンス図を作成するための描画部品を利用者に提供するとともに、作成されたシーケンス図に配置された描画部品の配置情報や属性値とソースコード生成のための付加的条件をあらわす外部定義情報とを合成することとした。したがって、制御プログラム生成の基礎となる電子化されたタイムシーケンス図の効率的な作成を支援するとともに、電子化されたタイムシーケンス図に対応する制御プログラムを自動生成することができる。
【００４６】
なお、図１では、制御プログラムとしてソースコードそのものを生成する場合について示したが、これに限らず、ソースコード生成のための中間生成物（たとえば、ソースコード生成ルールを示すメタ情報）を生成することとし、この中間生成物を外部のソースコード生成プログラムに渡すことによって制御プログラムを生成することとしてもよい。また、図１では、Ｃ言語によるソースコードが生成される場合について示したが、生成されるソースコードのプログラミング言語を複数用意し、利用者に選択させることとしてもよい。
【００４７】
以下では、本発明に係る制御プログラム生成手法を適用した専用プログラムを、パーソナルコンピュータ（ＰＣ）やワークステーション（ＷＳ）などの汎用的なコンピュータにインストールすることによって制御プログラム生成装置を構成した場合について説明する。また、以下では、この制御プログラム生成装置が、車両制御プログラム、特に、エンジンやトランスミッションの制御プログラムを生成する場合について示している。
【００４８】
なお、かかる制御プログラム生成装置が生成する制御プログラムは、入力信号に基づいて出力信号を決定する場合に用いられるほか、入力信号を用いることなく出力信号を決定する場合、あるいは、制御プログラムが搭載された装置の内部状態を入力信号に基づいて決定する場合などにも用いることができる。
【実施例】
【００４９】
図２は、本実施例に係る制御プログラム生成装置１の構成を示すブロック図である。同図に示すように、制御プログラム生成装置１は、記憶部２と、制御部３と、入出力部４とを備えている。なお、制御部３が図１に示した制御プログラム生成ツールに対応する処理部（プログラム）である。
【００５０】
図２に示すように、記憶部２は、描画部品２ａと、共通パターン情報２ｂと、シーケンス図情報２ｃと、外部定義情報２ｄと、共通コード情報２ｅとを記憶しており、制御部３は、シーケンス図作成支援部３ａと、パターン抽出部３ｂと、描画部品登録部３ｃと、コード生成部３ｄと、共通コード抽出部３ｅと、外部定義情報操作部３ｆとをさらに備えている。
【００５１】
記憶部２は、磁気ディスク装置やディスクアレイ装置といった記憶デバイスで構成される記憶部であり、描画部品２ａと、共通パターン情報２ｂと、シーケンス図情報２ｃと、外部定義情報２ｄと、共通コード情報２ｅとを記憶している。
【００５２】
描画部品２ａは、シーケンス図の作成に用いられる、各種信号の時間経過をあらわす直線や曲線といった線、各信号間の依存関係や判定条件といった記号であり、あらかじめ作成して登録されるほか、利用者があらたな描画部品２ａを作成することもできる。
【００５３】
また、描画部品２ａには、他の描画部品２ａとの関連情報、コード生成部３ｄが描画部品２ａを制御プログラムへと展開する順序といった属性を設定することができる。なお、かかる展開順序を指定しない場合には、コード生成部３ｄは、描画部品２ａが配置された信号のタイムシーケンス図における描画順序、シーケンス図の上から下、左から右といった方向で各描画部品２ａを読み取っていくことになる。
【００５４】
たとえば、Ａ、Ｂ、Ｃという信号がタイムシーケンス図に上から下にＢ、Ａ、Ｃの順番で描画されている場合にはＢの信号に配置された描画部品２ａを優先して読み取り、タイムシーケンス図が右にいくほど遅い時刻をあらわす場合にはＢの信号のなかでもより左のほうには位置された描画部品を優先して読み取る。
【００５５】
ここで、この描画部品２ａの例について図３〜図６を用いて説明しておく。図３および図４は、それぞれ、描画部品２ａの例その１およびその２を示す図であり、図５および図６は、描画部品２ａのシーケンス図への配置例その１およびその２を示す図である。
【００５６】
図３の１０３ａに示したのは、各信号の信号値を指定するために用いられる描画部品２ａである。この１０３ａは、信号の更新値を指定するために用いられるほか、判定条件の数値を指定するためにも用いられる。そして、１０３ａの矩形内には、たとえば、「０」、「＝０」、「Ａ＋１」といった値を入力することができ、入力値は１０３ａ上に表示されるほか属性値として保持されることになる。
【００５７】
図３の１０３ｂおよび１０３ｃに示したのは、閾値判定をおこなうためのマーク（記号）であり、１０３ｂが「〜以上」、１０３ｃが「〜以下」を示す。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、１０３ｂは「＞＝」へ、１０３ｃは「＜＝」へ、それぞれ変換されることになる。また、１０３ｂおよび１０３ｃに示した黒丸は矩形内に指定された値を含むことをあらわしており、黒丸に隣接する矢印の左右位置は配置状態に応じて適宜変更することができる。
【００５８】
図３の１０３ｄおよび１０３ｅに示したのは、閾値判定をおこなうためのマーク（記号）であり、１０３ｄが「〜より大きい」、１０３ｅが「〜より小さい」を示す。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、１０３ｄは「＞」へ、１０３ｅは「＜」へ、それぞれ変換されることになる。また、１０３ｄおよび１０３ｅに示した白丸は矩形内に指定された値を含まないことをあらわしており、白丸に隣接する矢印の左右位置は配置状態に応じて適宜変更することができる。
【００５９】
図３の１０３ｆおよび１０３ｇに示したのは、一致判定をおこなうためのマーク（記号）であり、１０３ｆが２値信号（フラグ）以外の信号用、１０３ｇが２値信号（フラグ）用として用いられる。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、「＝＝」へ変換されることになる。また、１０３ｆの矩形内に指定された値は「＝＝」の右辺値として用いられる。
【００６０】
図３の１０３ｈおよび１０３ｉに示したのは、不一致判定をおこなうためのマーク（記号）であり、１０３ｈが２値信号（フラグ）以外の信号用、１０３ｉが２値信号（フラグ）用として用いられる。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、「！＝」へ変換されることになる。また、１０３ｈの矩形内に指定された値は「！＝」の右辺値として用いられる。
【００６１】
図３の１０３ｊおよび１０３ｋに示したのは、論理演算をおこなうためのマーク（記号）であり、１０３ｊがＡＮＤ条件を、１０３ｋがＯＲ条件を示している。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、１０３ｊは「＆＆」へ、１０３ｋは「｜｜」へ、それぞれ変換されることになる。
【００６２】
図４の１０４ａおよび１０４ｂに示したのは、代入演算をおこなうためのマーク（記号）であり、１０４ａが２値信号（フラグ）以外の信号用、１０４ｂが２値信号（フラグ）用として用いられる。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、「＝」へ変換されることになる。また、１０４ａの矩形内に指定された値は「＝」の右辺値として用いられる。
【００６３】
図４の１０４ｃ、１０４ｄおよび１０４ｅに示したのは、イベントの発生タイミングをあらわすマーク（記号）であり、１０４ｃが外部イベント用、１０４ｄおよび１０４ｅがタイマに関するイベント用として用いられる。なお、１０４ｄの矩形内に指定する閾値はタイマのタイムアウト値であり、１０４ｅを用いるとこの閾値を複数個（同図では閾値＃１および＃２）指定することができる。
【００６４】
図４の１０４ｆに示したのは、関数を直接指定するためのマーク（記号）であり、矩形内に関数名などを直接指定することになる。なお、この記号を後述するコード生成部３ｄがＣ言語に変換する場合には、１０４ｆの矩形内に指定された関数名がそのままソースコード中に展開されることになる。
【００６５】
図４の１０４ｇに示したのは、繰り返しなどのループ処理をあらわすマーク（記号）であり、ループ開始条件、ループ即時終了（ｂｒｅａｋ）条件およびループ終了条件をそれぞれ指定することができる。なお、この記号を後述するコード生成部３ｄがＣ言語に変換する場合には、１０４ｇは「ｗｈｉｌｅ（）」や「ｄｏ｛｝ｗｈｉｌｅ（）」へ変換されることになる。
【００６６】
図４の１０４ｈおよび１０４ｉに示したのは、コメントをあらわすマーク（記号）であり、他の記号の属性値として「コメント表示／非表示」などの指定をすることで、シーケンス図中に表示したり表示しなかったりという選択をおこなうことができる。なお、これらの記号を後述するコード生成部３ｄがＣ言語に変換する場合には、コメントの内容がソースコードの各命令文の右側などに「／＊〜＊／」のように展開されることになる。
【００６７】
図４の１０４ｊに示したのは、シーケンス図の理解補助のために用いられる補助線をあらわすマーク（記号）である。なお、この記号は後述するコード生成部３ｄから無視されソースコードに反映されることはない。このように、ソースコードに反映されないマーク（記号）を用意することで、シーケンス図を効率良く描画することができるほか、シーケンス図の可読性を高めることができる。
【００６８】
次に、図３および図４を用いて説明した各描画部品２ａの配置例について図５および図６を用いて説明する。なお、図５および図６では、各例の番号をあらわす「Ｎｏ」と、描画部品２ａの組合せおよび配置例をあらわす「組合せ例」と、コード生成部３ｄが生成するソースコード例をあらわす「ロジック生成イメージ」とを示している。
【００６９】
図５のＮｏ１では、図３および図４に示した描画部品２ａのうち１０３ａ、１０３ｇ、１０３ｋおよび１０４ａを使用し、２値信号（フラグ）であるＡおよびＢの状態に応じて信号Ｃの信号値を変化させる場合について示している。具体的には、フラグＡあるいはフラグＢのいずれかがＯＮである場合に、変数Ｃの値からＤを差し引いた値をあらたな変数Ｃの値とする旨を指定している。
【００７０】
なお、図５のＮｏ１に示した処理パターン、すなわち、信号値に関する複数条件のいずれかが成立している時に特定の信号値を更新するパターンをコード生成部３ｄが検出した場合には、たとえば、同図に示したように、フラグＡまたはフラグＢが満たした条件に基づいて変数Ｃを更新する旨のコードを生成する。
【００７１】
図５のＮｏ２では、図３および図４に示した描画部品２ａのうち１０３ｇ、１０４ｂおよび１０４ｄを使用し、外部イベントの発生時にフラグＣがＯＦＦであれば、フラグＣをＯＮにするとともにカウンタＤを０に初期化したうえでカウントを開始する旨を指定している。
【００７２】
なお、図５のＮｏ２に示した処理パターン、すなわち、外部イベントが発生した際に信号値が所定の条件を満たしていればこの信号値の更新とカウンタスタートとをおこなうパターンをコード生成部３ｄが検出した場合には、たとえば、同図に示したように、イベントＡの発生を示す条件コードと、イベントＡ発生時のフラグＣおよびカウンタＤを更新する旨のコードとを生成する。
【００７３】
図５のＮｏ３では、図３および図４に示した描画部品２ａのうち１０３ａ、１０３ｇ、１０４ｂおよび１０４ｄを使用し、カウンタＢのカウント終了時にフラグＡがＯＮであれば、変数Ｃの値にＤを足し合わせた値をあらたな変数Ｃの値とする旨を指定している。
【００７４】
なお、図５のＮｏ３に示した処理パターン、すなわち、カウント終了、かつ、信号値について所定の条件が成立している時に特定の信号値を更新するパターンをコード生成部３ｄが検出した場合には、たとえば、同図に示したように、カウンタＢおよびフラグＡが満たした条件に基づいて変数Ｃを更新する旨のコードを生成する。
【００７５】
図５のＮｏ４では、図３および図４に示した描画部品２ａのうち１０３ｅ、１０３ｊ、１０３ｋおよび１０４ａを使用し、複数の条件に基づいて特定の信号値を次々と補正していく例を示している。具体的には、フラグＡ〜フラグＥおよび変数Ｆに設定した条件の組合せによって変数Ｈの値を変更（補正）していく旨を指定している。
【００７６】
なお、図５のＮｏ４に示した処理パターン、すなわち、複数の条件によって同一変数の値を補正するパターンをコード生成部３ｄが検出した場合には、たとえば、同図に示したように、フラグＡ〜フラグＥおよび変数Ｆが満たした条件に基づいて変数Ｈを補正していく旨のコードを生成する。
【００７７】
図６のＮｏ５では、図３および図４に示した描画部品２ａのうち１０３ｇ、１０３ｊ、１０４ａおよび１０４ｂを使用し、特定の信号値の変化に基づいて複数の信号値を更新する例を示している。具体的には、フラグＡがＯＦＦからＯＮに変化したことをトリガーとして変数Ｂの値をＣ、変数Ｄの値をＥ、フラグＦをＯＦＦにそれぞれ更新する旨を指定している。
【００７８】
なお、図５のＮｏ５に示した処理パターン、すなわち、特定の信号状態が変化した場合に同時に複数の信号値を更新するパターンをコード生成部３ｄが検出した場合には、たとえば、フラグＡが満たした条件に基づいて変数Ｂ、変数ＤおよびフラグＦを更新する旨のコードを生成する。
【００７９】
図６のＮｏ６では、図３および図４に示した描画部品２ａのうち１０３ｄ、１０３ｇおよび１０４ａを使用し、特定の信号値を増加させ所定の上限値に達した場合にこの上限値を維持する例を示している。具体的には、所定のタイミングでフラグＡおよびフラグＢのいずれもがＯＮであれば、フラグＢをＯＦＦにするとともに変数Ｃの値をＤずつ増加させ、変数Ｃの値がＥに達したならば変数Ｃの値をＥとする旨を指定している。
【００８０】
なお、図５のＮｏ６に示した処理パターン、すなわち、特定の信号値を増加させるとともに上限値でガードするパターンをコード生成部３ｄが検出した場合には、たとえば、変数ＣをＤずつ増加させるとともに変数ＣがＥに達すると増加をストップする旨のコードを生成する。
【００８１】
図６のＮｏ７では、図３および図４に示した描画部品２ａのうち１０３ａおよび１０３ｆを使用し、配列であらわした各信号値を同一条件成立時に同時更新する例を示している。具体的には、各信号値がＢと一致したならば信号値をＣへ更新する旨を指定している。
【００８２】
なお、図５のＮｏ７に示した処理パターン、すなわち、配列としてあらわされた各信号が同一条件の成立よって同時更新されるパターンをコード生成部３ｄが検出した場合には、たとえば、配列Ａ［ｎ］の更新をループ処理する旨のコードを生成する。
【００８３】
図６のＮｏ８では、図３および図４に示した描画部品２ａのうち１０３ｂおよび１０４ａを使用し、各信号値の更新処理をループ処理する例を示している。具体的には、変数Ａの値がＢより大きい間は、変数Ｃに変数Ｄの値からＥを差し引いた値を代入するとともに、変数Ａの値を１ずつ差し引きつつ変数Ｄに変数Ｃの値を代入する。そして、変数Ｃの値がＦ以上となったことを条件としてループ処理を終了する旨を指定している。
【００８４】
なお、図５のＮｏ８に示した処理パターン、すなわち、無条件の更新処理と条件判定を伴う更新処理とをループ処理するパターンをコード生成部３ｄが検出した場合には、たとえば、変数Ｃの更新については条件を付与せず、変数Ａおよび変数Ｂの更新には条件を付与したうえでループ処理をおこなう旨のコードを生成する。
【００８５】
このように、種々の描画部品２ａを用意することで、シーケンス図を効率的に作成することが可能となるとともに、様々な種類のシーケンス図の作成を許容しつつ、ソースコード生成に必要な規則性を担保することができる。さらに、あらかじめ描画部品２ａを用意するだけではなく、あらかじめ用意した描画部品２ａを組み合わせたあらたな描画部品２ａを追加することも可能である。また、描画部品２ａを組み合わせることによってあらたな描画部品を作成することを「マクロ化」と呼ぶこととする。なお、このマクロ化の例については図２９を用いて後述する。
【００８６】
図２の説明に戻り、記憶部２に記憶される情報の説明をつづける。共通パターン情報２ｂは、パターン抽出部３ｂがシーケンス図から抽出した共通パターンをあらわす情報であり、この共通パターンを描画部品２ａと同様に利用者に提供することでシーケンス図の作成効率を向上させることができる。なお、かかる「パターン抽出」の例については図３０を用いて後述する。
【００８７】
シーケンス図情報２ｃは、シーケンス図作成支援部３ａによって作成されたシーケンス図に関する情報である。具体的には、このシーケンス図情報２ｃはシーケンス図内に配置された各描画部品２ａの配置位置や指定された属性値を含んだ情報である。なお、後述するコード生成部３ｄはこのシーケンス図情報２ｃに基づいてソースコードなどのコードを生成することになる。
【００８８】
外部定義情報２ｄは、シーケンス図を補足するための付加的情報であり、後述するコード生成部３ｄは、上記したシーケンス図情報２ｃとこの外部定義情報２ｄとを合成することによってソースコードなどのコードを生成する。
【００８９】
たとえば、同一のシーケンス図を作成した場合であっても、異なる外部定義情報２ｄをそれぞれ用意することとすれば、異なる判定条件を備えたソースコードをそれぞれ生成することが可能となる。また、この外部定義情報２ｄを用いることで、複数のプログラミング言語に対応したコードの生成が容易となる。さらに、外部定義情報２ｄに描画部品２ａを補足する情報を含めることで、シーケンス図作成時の入力操作を軽減することも可能となる。なお、シーケンス図情報２ｃと外部定義情報２ｄとの合成例については図３１を用いて後述する。
【００９０】
また、本実施例においては、外部定義情報２ｄを設ける例について示すが、この外部定義情報２ｄを設けることなくシーケンス図内にコード生成に必要となるすべての情報を含めるように構成することとしてもよい。
【００９１】
共通コード情報２ｅは、後述するコード生成部３ｄが生成したコードのなかから抽出した共通コード（たとえば、共通関数など）に関する情報である。この共通コード情報２ｅを用いることで、コードのモジュール化をおこなうことができるとともに、共通コード情報２ｅに含まれる共通コードを変更する必要が生じた場合に、この共通コードを修正するのみで共通コードを使用しているすべてのコードを一括して修正することが可能となる。
【００９２】
制御部３は、図１に示した制御プログラム生成ツールに相当する処理部であり、シーケンス図作成支援部３ａと、パターン抽出部３ｂと、描画部品登録部３ｃと、コード生成部３ｄと、共通コード抽出部３ｅと、外部定義情報操作部３ｆとを備えている。
【００９３】
シーケンス図作成支援部３ａは、記憶部２の描画部品２ａおよび共通パターン情報２ｂを選択するためのパレットを含んだシーケンス図入力画面を入出力部４を介してディスプレイ４ｂなどに表示するとともに、利用者による描画部品２ａの配置操作や入力操作を入出力部４を介してキーボードやマウスなどの入出力手段４ａから受け付けることによってシーケンス図の作成を支援し、完成したシーケンス図に関する情報をシーケンス図情報２ｃとして記憶部２に登録する処理をおこなう処理部である。また、シーケンス図作成支援部３ａは、作成途中のシーケンス図や、作成済みのシーケンス図を入出力部４の可搬型媒体読取装置などから受け付けてこれらのシーケンス図の編集処理を支援する処理部でもある。
【００９４】
パターン抽出部３ｂは、シーケンス図作成支援部３ａによって作成中のシーケンス図を利用者の指示や所定間隔のタイマなどをトリガーとして検索し、パターンマッチングの技法などを用いることによってシーケンス図中において共通的に使用されているパターンを抽出した結果得られた情報を共通パターン情報２ｂとして記憶部２に登録する処理をおこなう処理部である。また、描画部品登録部３ｃは、複数の描画部品２ａの組合せからなるあらたな描画部品２ａを記憶部２に登録する処理をおこなう処理部である。
【００９５】
コード生成部３ｄは、シーケンス作成支援部３ａによって登録されたシーケンス図情報２ｃと、後述する外部定義情報操作部３ｆによって登録された外部定義情報２ｄとを記憶部２から読み出し、これらの情報（２ｃおよび２ｄ）を合成することによってソースコードなどのコードを生成する処理をおこなう処理部である。また、このコード生成部３ｄは、後述する共通コード抽出部３ｅによって登録された共通コード情報２ｅを記憶部２から読み出し、この共通コード情報２ｅに含まれる共通関数などを反映したコードを生成する処理部でもある。なお、このコード生成部３ｄがおこなう処理の詳細については、図１１１〜図２８を用いて後述することとする。
【００９６】
また、このコード生成部３ｄが、描画部品２ａによってあらわされた信号同士の関係をコードへと展開していく際には、たとえば、シーケンス図の上から下、左から下といった方向で各描画部品２ａを読み取っていくことになる。なお、描画部品２ａに展開順序を示す属性が設定されていればこの展開順序を優先して各描画部品２ａを読み取るものとする。
【００９７】
共通コード抽出部３ｅは、コード生成部３ｄが生成したコードの中からパターンマッチングの技法などを用いることによって共通コード（たとえば、共通関数）を抽出し、抽出した共通コードに関する情報を共通コード情報２ｅとして記憶部２に登録する処理をおこなう処理部である。
【００９８】
外部定義情報操作部３ｆは、入出力部４を介して受け取った指示に基づいて上記した外部定義情報２ｄの登録、変更、更新および削除といった処理をおこなう処理部である。このように、外部定義情報２ｄの操作をおこなうことにより、コード生成の効率を向上させることができるとともに、特に、複数の利用者が分担して作業を進める場合などに均質なコードの生成をおこなうことができる。
【００９９】
入出力部４は、ディスプレイ装置などの出力デバイス、キーボードやマウス、可搬型媒体読取装置といった入力デバイス、ＬＡＮ（Local  Area  Network）ボードなどの通信デバイスであり、シーケンス図作成支援部３ａによるシーケンス図入力画面を表示したり、シーケンス図の入力を受け付けたり、コード生成部３ｄが生成したコードをネットワーク上の他のパーソナルコンピュータ（PC）に出力したり、外部定義情報に対する編集操作を受け付けたりといった処理をおこなう。
【０１００】
次に、図２に示したシーケンス図作成支援部３ａによって作成されるシーケンス図の例およびコード生成部３ｄによって作成されるソースコードの例について図７〜図９を用いて説明する。図７はシーケンス図の一例を示す図であり、図８および図９は図７に示したシーケンス図から生成される制御プログラム例その１およびその２をそれぞれ示す図である。
【０１０１】
図７には、カウンタ＿１、フラグ＿１、フラグ＿２といった各信号の作用関係や時間変化などが、図３および図４で例示した描画部品２ａを用いて記述されている。また、図７においては、ｅｖｅｎｔ＿１およびｅｖｅｎｔ＿２の２つの外部イベントに基づいて各信号値を変化させていく場合について示している。
【０１０２】
なお、図７に示した（１）〜（２０）は、図８および図９に示したソースコードの（１）〜（２０）にそれぞれ対応している。また、図７のｅｖｅｎｔ＿１に関連する部分に対応するソースコードを図８に、同じくｅｖｅｎｔ＿２に関連する部分に対応するソースコードを図９にそれぞれ示している。
【０１０３】
図７のシーケンス図では、横軸に時間（左から右へ時間が流れるものとする）を、縦軸に各信号をそれぞれ示している。そして、縦軸の各信号は、信号の名称（たとえば、「カウンタ＿１」、信号に対応する変数名（たとえば、ｃｎｔ＿１）、上限値（たとえば、最大値をあらわす「４１９４（ｍｓ）」）、下限値（たとえば、最小値をあらわす「０（ｍｓ）」）の情報を含んでいる。なお、かかる上限値および下限値は、フラグに関しては「ＯＮ」および「ＯＦＦ」を指定することができる。
【０１０４】
次に、図７のシーケンス図に基づいて生成される制御プログラムについて説明する。図８に示すように、図７のｅｖｅｎｔ＿１に対応する関数としてｉｎｉｔ＿ｐｒｏｃおよびｃｙｃｌｅ＿ｐｒｏｃの２つが生成されている。このｉｎｉｔ＿ｐｒｏｃはｅｖｅｎｔ＿１発生時におこなう初期化処理を記述したものであり、ｃｙｃｌｅ＿ｐｒｏｃはｉｎｉｔ＿ｐｒｏｃ実行後において所定間隔ごとに繰り返し実行される周回処理を記述したものである。
【０１０５】
また、図９に示すように、図７のｅｖｅｎｔ＿２に対応する関数としてｉｎｉｔ＿ｐｒｏｃおよびｃｙｃｌｅ＿ｐｒｏｃの２つが生成されている。なお、これらの関数の実行タイミングについては図８と同様であるので説明を省略する。
【０１０６】
次に、図２に示した制御プログラム生成装置１においておこなわれる制御プログラム生成手順の概要について図１０を用いて説明する。図１０は、制御プログラム生成手順の概要を示すフローチャートである。同図に示すように、シーケンス図作成支援部３ａは、描画部品２ａや共通パターン情報２ｂを利用可能な入力用画面を入出力部４のディスプレイ装置に表示し（ステップＳ１０１）、入出力部４のキーボードやマウスといった入力装置を介して利用者によるシーケンス図入力を受け付ける（ステップＳ１０２）。
【０１０７】
そして、シーケンス図の作成が完了し、入出力部４のキーボードやマウスといった入力装置を介して利用者による指示を受け付けるとシーケンス図作成支援部３ａはシーケンス図情報２ｃを記憶部２に登録する。つづいて、コード生成部３ｄは記憶部２からシーケンス図情報２ｃを読み出し、このシーケンス図情報２ｃに含まれる描画部品の位置情報や属性情報などを取得する（ステップＳ１０３）。
【０１０８】
そして、シーケンス図作成支援部３ａはステップＳ１０３で取得した情報と、記憶部２から読み出した外部定義情報２ｄとを合成し（ステップＳ１０４）、ソースコードを生成する（ステップＳ１０５）。つづいて、シーケンス図作成支援部３ａは、入出力部４のＬＡＮボードなどを介して作成したソースコードを出力して（ステップＳ１０６）処理を終了する。
【０１０９】
以降では、図２に示したコード生成部３ｄにおけるコード生成処理の内容についてさらに詳細に説明する。図１１は、判定部分をロジック記号（図３および図４参照）によって指定した場合の例を示す図である。なお、図１１では、意味の異なるロジック記号を使い分けることによって異なるソースコードが生成される様子を示している。
【０１１０】
図１１の１１ａは、判定部分に矢印記号を配置した例であり、１１ａ−１が矢印記号を配置したシーケンス図を１１ａ−２が１１ａ−１に基づいて生成されるソースコードをそれぞれあらわしている。１１ａ−１に示すように、時間「４」において、信号ＡがＯＮからＯＦＦとなっておりＯＮからＯＦＦ向きに矢印記号が配置されている。そして、同じく時間「４」において信号ＢがＯＮからＯＦＦへと変化している。この場合、「信号Ａの前回値Ａ’がＯＮであり、かつ、信号Ａの最新値ＡがＯＦＦであること」を条件として信号Ｂの値をＯＦＦとする旨のソースコードが生成されている。
【０１１１】
また、図１１の１１ｂは、判定部分に黒丸記号を配置した例であり、１１ｂ−１が黒丸記号を配置したシーケンス図を１１ｂ−２が１１ｂ−１に基づいて生成されるソースコードをそれぞれあらわしている。１１ｂ−１に示すように、信号Ａは常にＯＦＦであるが時間「４」に判定部分をあらわす黒丸記号が配置されている。そして、同じく時間「４」において信号ＢがＯＮからＯＦＦへと変化している。この場合、「信号Ａの最新値がＯＦＦであること」を条件として信号Ｂの値をＯＦＦとする旨のソースコード、言い換えれば、前回値Ａ’を参照しない条件コードが生成されている。
【０１１２】
このように、矢印記号を使用した場合には信号値の立ち上がりエッジや立ち下がりエッジに対応した条件コードを生成し、一方、黒丸記号を使用した場合には信号値のレベルのみに対応した条件コードを生成する。すなわち、信号値の時間変化のみからは特定しにくい判定条件を、それぞれ意味の異なる記号を配置することで特定することができる。なお、図１１においては、判定部分に配置する記号として矢印記号および黒丸記号を例示したが、他のロジック記号（図３および図４参照）を配置することとしてもよい。
【０１１３】
次に、判定記号を含んだシーケンス図からソースコードを生成する手順について図１２を用いて説明する。図１２は、判定記号を含んだシーケンス図からソースコードを生成する手順を示すフローチャートである。なお、同図においては、時間軸の時間が増加する向きにシーケンス図の内容を順次読み出していく場合について示している。
【０１１４】
まず、時間軸を１増分し（ステップＳ２０１）、該当する時間軸における信号値の読み出しをおこなう（ステップＳ２０２）。つづいて、該当する時間軸に判定記号があるか否かを判定し（ステップＳ２０３）、判定記号がみつかった場合には（ステップＳ２０３，Ｙｅｓ）、みつかった記号が黒丸記号であるか否かを判定する（ステップＳ２０４）。なお、ステップＳ２０３において判定記号がみつからなかった場合には（ステップＳ２０３，Ｎｏ）、ステップＳ２０１以降の処理を繰り返す。
【０１１５】
そして、ステップＳ２０４において、判定記号が黒丸記号である場合には（ステップＳ２０４，Ｙｅｓ）、参照信号の現在値のみに基づいた参照信号側コード（図１１の１１ｂ−２におけるｉｆ文のカッコ内コード）を生成する（ステップＳ２０５）。一方、判定記号が黒丸ではない場合（ステップＳ２０４，Ｎｏ）には、参照信号の現在値および直前値に基づいた参照信号側コード（図１１の１１ａ−２におけるｉｆ文のカッコ内コード）を生成する（ステップＳ２０６）。
【０１１６】
ステップＳ２０５またはステップＳ２０６につづいて、コード生成部３ｄは制御信号側コード（図１１の１１ａ−２あるいは１１ｂ−２における変数Ｂに関する処理コード）を生成する（ステップＳ２０７）。そして、全データが終了したか否かを判定し（ステップＳ２０８）、全データが終了した場合には（ステップＳ２０８，Ｙｅｓ）、処理を終了する。一方、全データが終了していない場合には（ステップＳ２０８，Ｎｏ）、ステップＳ２０１以降の処理を繰り返す。
【０１１７】
なお、図１２においては、判定部分に配置する記号として矢印記号および黒丸記号を例示したが、他のロジック記号（図３および図４参照）が配置される場合には、記号種別の判定処理（ステップＳ２０４）をロジック記号の種別に応じて追加すればよい。
【０１１８】
ところで、図１１においては判定部分をロジック記号によって指定した場合について示したが、他の手法によって判定部分を指定することも可能である。そこで、以下では、判定部分の指定バリエーションについて図１３および図１４を用いて説明することとする。
【０１１９】
図１３は、エディタ側に判定部分を設定した場合の例を示す図である。ここで、エディタとは、図１に示したシーケンス図入力画面のことを指す。なお、図１３の１３ａに示したシーケンス図およびソースコードは図１１の１１ａと同一であり、同じく１３ｂは図１１の１１ｂと同一である。
【０１２０】
図１３の１３ａ−１および１３ｂ−１に示したように、エディタの時間軸の所定区間をマウスでクリックするなどして指定すると、指定された区間（図１３の場合は「４」）が判定部分であることがエディタによって認識される。そして、エディタからの情報を受けたシーケンス図作成支援部３ａはシーケンス図の内容とともに、指定された区間をあらわす情報をシーケンス図情報２ｃとして記憶部２に登録する。
【０１２１】
図１４は、判定部分を信号線の属性変更によって指定した場合の例を示す図である。なお、図１４の１４ａに示したシーケンス図およびソースコードは図１１の１１ａと同一であり、同じく１４ｂは図１１の１１ｂと同一である。
【０１２２】
図１４の１４ａ−１および１４ｂ−１に示したように、信号値をあらわす信号線の太さや色といった属性値を変更すると、属性値が異なる部分が判定部分であるとみなされる。このように、信号線の属性値変更によって判定部分を指定可能とすることによって、簡単な操作で判定部を指定できるのでシーケンス図作成効率を向上させることができる。
【０１２３】
ところで、図１１〜図１４では、参照信号（図１１〜図１４の信号Ａ）の値に基づいた判定について説明したが、制御信号（図１１〜図１４の信号Ｂ）の値に基づいた判定をおこなうことも可能である。そこで、以下では、制御信号側に設定した判定部分の例について図１５および図１６を用いて説明することとする。
【０１２４】
図１５は、制御信号側に設定した判定部分の例を示す図である。なお、図１５の１５ａでは制御信号の前回値を見る場合ついて、同じく１５ｂでは制御信号の前回値をみない場合についてそれぞれ示している。
【０１２５】
図１５の１５ａ−１に示したように、時間「４」において、信号ＢがＯＮからＯＦＦとなっておりＯＮからＯＦＦ向きに矢印記号が配置されている。この場合、「信号Ｂの前回値Ｂ’がＯＮであること」を条件として信号Ｂの値をＯＦＦとする旨のソースコードが生成される。一方、１５ｂ−１に示したように、矢印記号を配置しない場合には、信号Ｂの前回値Ｂ’とは関係なく信号Ｂの値をＯＦＦとする旨のソースコードが生成される。
【０１２６】
次に、制御信号に係るコード生成処理手順について図１６を用いて説明する。図１６は、制御信号に係るコード生成処理手順を示すフローチャートである。なお、図１６に示すフローチャートは、図１２に示したステップＳ２０７を詳細化したものである。
【０１２７】
図１６に示すように、コード生成部３ｄは制御信号（たとえば、図１５の信号Ｂ）に矢印記号が付されているか否かを判定し（ステップＳ３０１）、矢印記号が付されている場合には（ステップＳ３０１，Ｙｅｓ）、前回値を参照して制御信号側コードを生成して（ステップＳ３０２）処理を終了する。一方、矢印記号が付されていない場合には（ステップＳ３０１，Ｎｏ）、前回値を参照することなく制御信号側コードを生成して（ステップＳ３０３）処理を終了する。
【０１２８】
次に、制御信号の変化にディレイがある場合について図１７を用いて説明する。図１７は、制御信号の変化にディレイがある場合の例を示す図である。なお、「ディレイ」とは参照信号の変化から所定時間が経過した後に制御信号を変化させることを指す。また、図１７の１７ａにはディレイが指定されたシーケンス図を、同じく１７ｂにはディレイ部分を、同じく１７ｃにはディレイを表現したソースコード例その１を、同じく１７ｄにはディレイを表現したソースコード例その２をそれぞれ示している。
【０１２９】
図１７の１７ｂに示したように、シーケンス図上では参照信号である信号Ａが時間「４」で変化してから２単位時間が経過した時間「６」において、制御信号である信号Ｂを変化させる旨の指定がなされている。
【０１３０】
このようなディレイを表現するソースコードは種々存在するが、本実施例では特に２種類のソースコードについて例示している。たとえば、１７ｃに示すように、信号Ａに基づいた判定コードにつづいて指定時間だけウェイトするｄｅｌａｙ（）関数についてのコードを生成する（たとえば、この関数の引数にディレイ時間「２」を指定する）。そして、ｄｅｌａｙ（）関数につづいて信号ＢをＯＦＦにする旨のコードを生成する。
【０１３１】
また、１７ｄに示すように、信号Ａに基づいた判定コードとは別に、単位時間（ここでは、単位時間を１ｍｓとする）ごとに実行されるｔｉｍｅｒｐｒｏｃ＿１ｍｓ（）関数を生成し、このｔｉｍｅｒｐｒｏｃ＿１ｍｓ（）関数中で、カウンタをカウントダウンする関数（ｃｏｕｎｔ＿ｄｏｗｎ（））をコールすることとし、カウンタが０となった場合に信号ＢをＯＦＦからＯＮへと変化にする旨のコードを生成する。
【０１３２】
次に、ディレイを含んだコード生成処理手順について図１８を用いて説明する。図１８は、ディレイを含んだコード生成処理手順を示すフローチャートである。同図に示すように、コード生成部３ｄは参照信号側の判定時刻を取得するとともに（ステップＳ４０１）、制御信号側の変化時刻を取得する（ステップＳ４０２）。
【０１３３】
そして、判定時刻と変化時刻に差がある場合、すなわち、ディレイがある場合には（ステップＳ４０３，Ｙｅｓ）、ディレイ処理の埋め込みをおこなったうえで（ステップＳ４０４）処理を終了する。一方、ディレイがない場合には（ステップＳ４０３，Ｎｏ）、ディレイ処理の埋め込みをおこなうことなく処理を終了する。
【０１３４】
次に、シーケンス図における判定部分にロジックを直接指定する場合について図１９を用いて説明する。図１９は、判定部分にロジックを指定した場合の例を示す図である。なお、図１９の１９ａではロジックを直接入力する場合におけるシーケンス図およびこのシーケンス図に基づいて生成されるソースコードを、同じく１９ｂおよび１９ｃでは直接入力されたロジックを、１９ｄでは１９ｂに対応して生成されるソースコードを、１９ｅでは１９ｃに対応して生成されるソースコードをそれぞれ示している。
【０１３５】
このように、シーケンス図における判定部分にロジックを直接入力することを許容することで、制御プログラム開発者の嗜好やレベルに柔軟に対応することが可能となり制御プログラム生成作業の効率化を図ることができる。また、直接入力したロジックをシーケンス図上に表示することで制御プログラム開発者はタイムシーケンス図を見るのみでタイムシーケンス図にあらわされているロジックを理解することができる。
【０１３６】
次に、複数の外部定義情報２ｄの使い分けについて図２０および図２１を用いて説明する。図２０は、複数の外部定義情報２ｄを用意した場合の例を示す図である。なお、同図の２０ａには外部定義情報とリンクさせた記号（α〜ε）を配置したシーケンス図を、同じく２０ｂには外部定義情報＃１を、同じく２０ｃには２０ｂとは内容の異なる外部定義情報である外部定義情報＃２をそれぞれ示している。また、δおよびεを付した折れ矢印は、時間δごとに信号値がεずつ減少する旨を指定するための記号である。
【０１３７】
このように、一つのシーケンス図を作図し、作図したシーケンス図をそれぞれ内容の異なる外部定義情報と合成することによって、異なるソースコードを生成することができる。言い換えると、特定の変化パターンを有する部分図を作成すれば、この部分図を他のシーケンス図に適用することができる。したがって、シーケンス図の再利用や流用を容易におこなうことが可能となる。
【０１３８】
次に、図２０で示した複数の外部定義情報を切り替える処理について図２１を用いて説明する。図２１は、外部定義情報２ｄの切替処理の処理手順を示すフローチャートである。同図に示すように、利用者がシーケンス図作成支援部３ａおよび外部定義情報操作部３ｆを介することによってシーケンス図および外部定義情報２ｄを作成すると（ステップＳ５０１）、コード生成部３ｄはシーケンス図からロジックファイルを生成する（ステップＳ５０２）。
【０１３９】
また、コード生成部３ｄは外部定義情報２ｄからラベル定義ファイルを生成し（ステップＳ５０３）、外部定義情報２ｄが複数個登録されているか否かを判定する（ステップＳ５０４）。そして、外部定義情報２ｄが複数個登録されている場合には（ステップＳ５０４，Ｙｅｓ）、利用者に対して使い分けの指定を要求し（ステップＳ５０５）、受け付けた指定内容に基づいた使い分けロジックをロジックファイルに追加して（ステップＳ５０６）処理を終了する。
【０１４０】
一方、ステップＳ５０４において外部定義情報が単数であるか、あるいは、存在しないと判定された場合には（ステップＳ５０４，Ｎｏ）、ロジックファイルにラベル定義ファイルを反映して（ステップＳ５０７）処理を終了する。
【０１４１】
ところで、図２０および図２１では複数の外部定義情報２ｄの使い分けについて説明したが、見かけが異なるシーケンス図の差異を外部定義情報２ｄで吸収することによって共通コードを抽出するといった用途にもこの外部定義情報２ｄを用いることが可能である。そこで、以下では、シーケンス図の差異を外部定義情報２ｄで吸収する場合について図２２および図２３を用いて説明することとする。
【０１４２】
図２２は、シーケンス図の差異を外部定義情報２ｄで吸収する例を示す図である。同図の２２ａおよび２２ｂに示すように、各シーケンス図にあらわされた信号値変化の様子は異なっており、信号についても一方が信号Ａであって他方が信号Ｂである点で異なっている。しかしながら、このように一見異なるシーケンス図であっても、その差異点を外部定義情報２ｄで吸収することとすれば共通コードを抽出することができる。
【０１４３】
たとえば、外部定義情報＃１ではシーケンス図に含まれる信号線を信号Ａについての信号線であると定義している。一方、外部定義情報＃２では信号Ｂについての信号線であると定義している。また、外部定義情報＃１では折れ矢印に付されたεの値を０．６と定義しているが、外部定義情報＃２ではεの値を−０．２と定義している。このように、外部定義情報を用いることによってシーケンス図の差異点を吸収できる場合には、各シーケンス図に対応するロジックを共通化することができる。
【０１４４】
次に、シーケンス図の差異を外部定義情報２ｄで吸収する際の処理手順について図２３を用いて説明する。図２３は、シーケンス図の差異を外部定義情報２ｄで吸収する際の処理手順を示すフローチャートである。
【０１４５】
コード生成部３ｄは、シーケンス図からロジックファイル生成し（ステップＳ６０１）、共通ロジックがあるか否かを判定する（ステップＳ６０２）。そして、共通ロジックがある場合には（ステップＳ６０２，Ｙｅｓ）、共通ロジックを抽出したうえで（ステップＳ６０３）、シーケンス図間の差分をそれぞれのシーケンス図に対応した外部定義情報２ｄへ出力して（ステップＳ６０４）処理を終了する。なお、共通ロジックがない場合には（ステップＳ６０２，Ｎｏ）、ステップＳ６０３以降の処理をおこなうことなく処理を終了する。
【０１４６】
次に、シーケンス図作成支援部３ａがおこなう利用者入力の補完機能について図２４を用いて説明する。図２４は、利用者入力の補完機能の例を示す図である。ここで、補完機能とは、利用者による入力処理を受け付けた場合に、受け付けた入力処理から類推される信号線や他の記号の入力を自動的におこなう機能のことを指す。
【０１４７】
たとえば、図２４の２４ａに示すように、利用者が時間「４」において信号Ａが変化する旨をあらわす信号線をＯＮからＯＦＦの向きに入力（破線の矢印の方向）し、また、時間「６」において信号線をＯＦＦからＯＮの向きに入力（破線の矢印の方向）したとする。この場合、他の時間帯においては信号線の値が変わらないものと類推できるのでかかる補完機能は２４ｂに示す横線を自動的に描画することで信号線を完成させる。
【０１４８】
なお、補完機能が自動描画した部分（補完部分）は、利用者が入力した部分と区別して内部的に保管することとしたので、利用者の意図を忠実に反映したソースコードを生成することができる。たとえば、補完部分をソースコード生成から除外すると指定した場合には（図２４の２４ｃ参照）、時間「４」で信号ＡがＯＦＦとなり、時間「６」で信号ＡがＯＮとなる旨のソースコードが生成される。一方、補完部分をソースコード生成から除外しないと指定した場合には、時間「０〜４」では信号Ａが常にＯＮであり、時間「４〜６」では常にＯＦＦであり、時間「６」以降は常にＯＮである旨のソースコードが生成される。
【０１４９】
次に、コード生成部３ｄがプログラミングルール情報に基づいたソースコードを生成する場合について図２５および図２６を用いて説明する。図２５は、プログラミングルール情報の適用例を示す図である。なお、かかるプログラミングルール情報は、外部定義情報２ｄや共通コード情報２ｅに含めることとしてもよいし、外部定義情報２ｄや共通コード情報２ｅとは別の情報として記憶部２に登録しておくこととしてもよい。
【０１５０】
図２５の２５ａはコード生成部３ｄがプログラミングルールを適用することなく生成したソースコードの例であり、同じく２５ｃは２５ｂに示したプログラミングルール（ルール＃１）を適用して生成したソースコードの例である。
【０１５１】
図２５の２５ｂに示したように、ルール＃１には、優先度の高い外部モジュールから参照される外部変数は、いったんローカル変数にコピーしたうえで演算処理をおこない、演算結果を外部変数に設定する旨が指定されている。なお、図２５の２５ｂでは説明のためにルール＃１を文章で示したが、同様の内容をあらわす記号や英数字などの組合せでルール＃１を記述することとしてもよい。
【０１５２】
また、図２５の２５ａに示したように、ルール＃１を適用する前のソースコードでは、外部変数ａをインクリメントしたうえで、ａの値が所定の上限値（Ａ＿ＭＡＸ）を超えないよう上限制限をする旨が記述されている。しかし、変数ａは外部変数であるので、ｆｕｎｃ１（）の「ａ＋＝１；」のコードが実行された直後に、他の関数などがａの値を参照すると、ａの値が「Ａ＿ＭＡＸ＋１」となってしまう（すなわち、上限制限する前のａの値を参照してしまう）事態が発生する。
【０１５３】
一方、ルール＃１適用後のソースコードでは、外部変数ａの値をローカル変数ａ＿ｌｏｃａｌに代入したうえでａ＿ｌｏｃａｌに対して２５ａと同様の演算処理をおこない、演算結果を外部変数ａに代入することとしている。したがって、上限制限する前のａの値を外部のモジュールが参照することを防止することができる。
【０１５４】
なお、図２５に示した例はプログラミングルールの一例にすぎない。他の例としては、たとえば、同時に使用されることがない変数については同一のメモリ領域を指す変数を使用する旨をプログラミングルールとして登録することとすれば、制御プログラムが使用するメモリ領域を効率的に削減することができる。
【０１５５】
次に、プログラミングルール情報適用処理の処理手順について図２６を用いて説明する。図２６は、プログラミングルール情報適用処理の処理手順を示すフローチャートである。同図に示すように、コード生成部３ｄはいったん生成したロジックを読み込み（ステップＳ７０１）、モジュール間の参照／被参照関係を検査することによってモジュールごとの優先度を検出する（ステップＳ７０２）。
【０１５６】
つづいて、プログラミングルール情報からルールを読み込み（ステップＳ７０３）、優先度が低いモジュールであるか否かを判定する（ステップＳ７０４）。そして、優先度が低いモジュールである場合には（ステップＳ７０４，Ｙｅｓ）、ステップＳ７０３で読み込んだルールをステップＳ７０１で読み込んだロジックに適用し（ステップＳ７０５）、ロジック修正を実行して（ステップＳ７０６）処理を終了する。一方、優先度が高いモジュールである場合には（ステップＳ７０４，Ｎｏ）、ステップＳ７０５以降の処理をおこなうことなく処理を終了する。
【０１５７】
次に、共通コード抽出部３ｅがおこなう共通モジュールの抽出処理について図２７および図２８を用いて説明する。図２７および図２８は、それぞれ、共通モジュール抽出例１および２を示す図である。なお、図２７では、所定の作用関係がある複数の信号についての信号値制御処理を共通モジュールとして抽出することによって利用者のシーケンス図入力作業負担を軽減する例について、図２８では、シーケンス図の所定部分の信号値制御処理を共通モジュールとして抽出することによって生成コードの可読性を高める例についてそれぞれ示している。
【０１５８】
まず、図２７について説明する。図２７の２７ａに示すように、参照信号である信号Ａが０である場合には制御信号である信号Ｂおよび信号ＣがともにＯＦＦであり、信号Ａが１である場合には信号ＢがＯＮで信号ＣがＯＦＦであり、信号Ａが２である場合には信号Ｂおよび信号ＣがともにＯＮであるものとする。このように、参照信号の変化に伴って変化する制御信号が特定されている場合に、各シーケンス図において信号Ｂおよび信号Ｃについての記載をおこなうことは上長である。
【０１５９】
そこで、２７ａに示した各信号間の関係を共通モジュールＡ（図２７の２７ｂ参照）として抽出する。そして、図２７の２７ｃに示したように、利用者が信号Ａの作図作業をおこなった場合に、信号Ｂおよび信号Ｃの変更指示を含んだ共通モジュールＡとリンクすることとする。このようにすることで、利用者の入力操作を効果的に軽減することができる。
【０１６０】
次に、図２８について説明する。図２８の２８ａに示したシーケンス図と、図２８の２８ｂに示したシーケンス図では、信号ＣがＯＦＦからＯＮに変位する点が共通している。そこで、信号ＣをＯＦＦからＯＮへと変位させる変位処理や、この変位処理に付随する代入処理などを共通モジュール（図２８の「ｃ＿ｏｎ（）」）として抽出する。そして、図２８の２８ａおよび２８ｂに対応するコードを生成する際には、この共通モジュールを埋め込んだロジックを生成する（図２８の２８ｄおよび２８ｅ参照）。
【０１６１】
次に、上記した「マクロ化」の例について図２９を用いて説明する。図２９は、描画部品マクロ化の例を示す図である。なお、図２９では、各例の番号をあらわす「Ｎｏ」と、マクロ化前の描画部品２ａの組合せをあらわす「マクロ化前」と、マクロ化後のあらたな描画部品２ａをあらわす「マクロ化後」とを示している。
【０１６２】
図２９のＮｏ１では、図３および図４に示した描画部品２ａのうち１０３ｇ、１０３ｊおよび１０４ｂを組み合わせた部分を、二重丸と矢印とからなるあらたな描画部品２ａとして定義した例を示している。このように、複数の描画部品２ａの組合せを１つの描画部品２ａと置き換えることで、シーケンス図作成に伴う描画操作を省略することができるのでシーケンス図の作成を効率良くおこなうことが可能となる。
【０１６３】
なお、図２９のＮｏ２およびＮｏ３に示した例においても、Ｎｏ１に示した例と同様に、描画操作を省略することができる。特に、シーケンス図において何度も用いられるパターンをあらたな描画部品２ａとして登録することでシーケンス図作成効率を向上させることができるとともに、複数の利用者が分担して作業を進める場合などに均質なシーケンス図を作成することが可能となる。
【０１６４】
次に、上記した「パターン抽出」の例について図３０を用いて説明する。図３０は、シーケンス図におけるパターン抽出の例を示す図である。共通パターン情報２ｂは、信号値と対応する変数名をそのまま含むよう抽出することもできるし、変数名を含まない形の情報として抽出することもできる。
【０１６５】
図３０に示した１３０ａは抽出元となるシーケンス図であり、１３０ａに示した点線の矩形部分が抽出対象となる部分である。なお、この抽出対象部分は、利用者に指定させることとしてもよいし、パターン抽出部３ｂがパターンマッチングなどの技法を用いて自動抽出することとしてもよい。
【０１６６】
また、図３０に示した１３０ｂは信号値と対応する変数名をそのまま含むよう抽出した場合の例であり、同じく１３０ｃは信号値と対応する変数名を含まない形の情報として抽出した場合の例である。
【０１６７】
次に、図２に示したシーケンス図情報２ｃと外部定義情報２ｄとの合成例について図３１を用いて説明する。図３１は、シーケンス図情報２ｃと外部定義情報２ｄとの合成例を示す図である。なお、同図における１３１ａがシーケンス図情報２ｃに対応するシーケンス図であり、１３１ｂおよび１３１ｃがそれぞれ内容の異なる外部定義情報２ｄであり、１３１ｄおよび１３１ｅが１３１ｂおよび１３１ｃにそれぞれ対応して生成されるソースコードである。
【０１６８】
図３１の１３１ａのように、信号Ａ、信号Ｂおよび信号Ｃがタイミングαにおいて変化している旨が記述されている場合に、各信号の作用関係をあらわすマーク（記号）が省略されていると、どの信号の変化に基づいてどの信号を変化させるのかが一意に定まらない。
【０１６９】
そこで、外部定義情報Ａ１３１ｂに、信号属性として信号Ａが作用元となる参照信号、信号Ｂおよび信号Ｃが作用先となる制御信号、さらに、信号Ｃが信号Ｂの変化に依存する旨の情報を含めることとする。この外部定義情報Ａ１３１ｂとシーケンス図１３１ａとを合成すると、信号ＡがＯＦＦからＯＮへと変化した場合に、信号ＣをＯＮとするとともに信号ＣがＯＦＦからＯＮへと変化したことをトリガーとして信号ＢをＯＮとする旨のソースコードＡ１３１ｄが生成される。
【０１７０】
一方、外部定義情報Ｂ１３１ｃに、信号属性として信号Ａが作用元となる参照信号、信号Ｂおよび信号Ｃが作用先となる制御信号、さらに、信号Ｂと信号Ｃとが対等な信号である旨の情報を含めることとする。この外部定義情報１３１ｃとシーケンス図１３１ａとを合成すると、信号ＡがＯＦＦからＯＮへと変化した場合に、信号Ｂおよび信号ＣをＯＮとする旨のソースコードＢ１３１ｅが生成される。
【０１７１】
このように、シーケンス図が同一の場合であっても、外部定義情報２ｄを変更することで異なるソースコードを生成することが可能となる。また、外部定義情報２ｄに各種言語に特有のルールを含めることとすれば、同一のシーケンス図から異なるプログラミング言語によるソースコードを生成することができる。また、図３１に示したように、外部定義情報２ｄに描画部品２ａに対応する情報を含ませることとすれば、シーケンス図の描画操作を簡略化できるのでシーケンス図作成作業の効率化を図ることができる。
【０１７２】
次に、図２に示したシーケンス図作成支援部３ａがおこなうシーケンス図の分割処理について図３２を用いて説明する。図３２は、シーケンス図の分割例を示す図である。同図に示すように、シーケンス図入力画面に表示されているシーケンス図１３２ａを分割したい場合には、描画部品２ａとしてシーケンス図の境界をあらわす線（図３２の１３２ｂ参照）や、矩形などの閉じた図形（図３２の１３２ｃ）を用意しておくこととする。そして、境界線によってシーケンス図１３２ａを分割すると、同図の矢印Ａに示すように、分割されたシーケンス図１およびシーケンス図２が生成される。また、境界矩形によってシーケンス１３２ｂを指定すると、同図の矢印Ｂに示すように指定された範囲のシーケンス図３が生成される。
【０１７３】
このように、シーケンス図作成支援部３ａがシーケンス図の分割処理をおこなうと、このシーケンス図作成支援部３ａによって記憶部２に登録されるシーケンス図情報２ｃを適宜分割することが可能となる。したがって、コード生成部３ｄによって生成されるソースコードの生成単位を最適化したり、ソースコードの再利用性を向上させたりすることが可能となる。
【０１７４】
次に、図２に示したシーケンス図作成支援部３ａがおこなうシーケンス図の結合処理について図３３を用いて説明する。図３３は、シーケンス図の結合例を示す図である。同図に示すように、シーケンス図が複数個ある場合に、複数個のシーケンス図および各シーケンス図の関係をあらわす関係情報（図３３の１３３ａ参照）を受け取ると、シーケンス図作成支援部３ａはかかる関係情報の記述内容に基づいて各シーケンス図を結合する。
【０１７５】
たとえば、かかる関係情報にシーケンス図１の右側にシーケンス図２が位置し、シーケンス図１の下側にシーケンス図３が位置し、さらに、シーケンス図３の右側にシーケンス図４が位置する旨が記述されていた場合には、図３３の矢印Ａに示すシーケンス図（図３３の１３３ｂ参照）が生成される。また、関係情報にシーケンス図１〜シーケンス図４が左から右への順序で並べられる旨が記述されていた場合には、図３３の矢印Ｂに示すシーケンス図（図３３の１３３ｃ参照）が生成される。
【０１７６】
このように、シーケンス図作成支援部３ａがシーケンス図の結合処理をおこなうと、このシーケンス図作成支援部３ａによって記憶部２に登録されるシーケンス図情報２ｃを適宜結合することが可能となる。したがって、巨大なシーケンス図や、複数の利用者が分担して作成したシーケンス図を一つにまとめたうえで、ソースコードの生成をおこなうことができる。
【０１７７】
次に、図２に示した制御プログラム生成装置１のネットワーク構成例について図３４を用いて説明する。図３４は、制御プログラム生成装置１のネットワーク構成例を示す図である。なお、同図におけるネットワーク構成例は、複数の利用者（プログラム開発者）によって分散開発をおこなう場合を示したものである。また、同図に示す「制御プログラム生成プログラム」は図２の制御部３に対応し、「記憶部」は図２の記憶部２に対応している。
【０１７８】
図３４に示すように、「制御プログラム生成プログラム」を複数台のパーソナルコンピュータ（ＰＣ）にインストールするとともに、描画部品２ａや外部定義情報２ｄといった各種情報を記憶する「記憶部」をＬＡＮなどで接続された所定のＰＣ上に構成することとすれば、多数のプログラム開発者が共通の情報を用いたうえでシーケンス図の作成作業およびソースコードの作成作業をおこなうことができる。また、「記憶部」上の各種情報を更新する際に、排他処理をおこなうこととすれば、複数のプログラム開発者が矛盾した情報を登録するなどの不都合を回避することができる。
【０１７９】
上述してきたように、本実施例では、シーケンス図作成支援部が描画部品を利用者に提供することによってシーケンス図の作成を支援し、コード生成部がシーケンス図作成支援部から受け取ったシーケンス図情報に含まれる描画部品の属性および配置情報とシーケンス図情報とは別に用意された外部定義情報とを合成することによってソースコードを生成するよう構成したので、制御プログラム生成の基礎となる電子化されたタイムシーケンス図の効率的な作成を支援することができるとともに、電子化されたタイムシーケンス図に対応する制御プログラムを自動生成することができる。
【０１８０】
なお、上記した実施例においては、シーケンス図作成支援部が生成したシーケンス図情報に基づいてコード生成部がソースコードを生成する場合について説明した。しかしながら、これに限らず、コード生成部がかかるシーケンス図情報に基づき、制御仕様をあらわしたドキュメントや、ソースコードの動作検査をおこなう検査プログラムを生成することとしてもよい。このようにすることで、制御プログラム生成に伴う生成物を一括管理することが可能となり、シーケンス図が変更された場合であっても変更点の反映を生成物全体に及ぼすことができる。
【産業上の利用可能性】
【０１８１】
以上のように、本発明に係る制御プログラム生成プログラム、制御プログラム生成方法および制御プログラム生成装置は、各種信号値を制御する制御プログラムの自動生成に有用であり、特に、車載コンピュータ上で動作する制御プログラムの自動生成に適している。
【図面の簡単な説明】
【０１８２】
【図１】本発明に係る制御プログラム生成手法の概要および特徴を示す図である。
【図２】本実施例に係る制御プログラム生成装置の構成を示すブロック図である。
【図３】描画部品の例その１を示す図である。
【図４】描画部品の例その２を示す図である。
【図５】描画部品のシーケンス図への配置例その１を示す図である。
【図６】描画部品のシーケンス図への配置例その２を示す図である。
【図７】シーケンス図の一例を示す図である。
【図８】図７に示したシーケンス図から生成される制御プログラム例その１を示す図である。
【図９】図７に示したシーケンス図から生成される制御プログラム例その２を示す図である。
【図１０】制御プログラム生成手順の概要を示すフローチャートである。
【図１１】判定部分をロジック記号によって指定した場合の例を示す図である。
【図１２】判定記号を含んだシーケンス図からソースコードを生成する手順を示すフローチャートである。
【図１３】エディタ側に判定部分を設定した場合の例を示す図である。
【図１４】判定部分を信号線の属性変更によって指定した場合の例を示す図である。
【図１５】制御信号側に設定した判定部分の例を示す図である。
【図１６】制御信号に係るコード生成処理手順を示すフローチャートである。
【図１７】制御信号の変化にディレイがある場合の例を示す図である。
【図１８】ディレイを含んだコード生成処理手順を示すフローチャートである。
【図１９】判定部分にロジックを指定した場合の例を示す図である。
【図２０】複数の外部定義情報を用意した場合の例を示す図である。
【図２１】外部定義情報の切替処理の処理手順を示すフローチャートである。
【図２２】シーケンス図の差異を外部定義情報で吸収する例を示す図である。
【図２３】シーケンス図の差異を外部定義情報で吸収する際の処理手順を示すフローチャートである。
【図２４】利用者入力の補完機能の例を示す図である。
【図２５】プログラミングルール情報の適用例を示す図である。
【図２６】プログラミングルール情報適用処理の処理手順を示すフローチャートである。
【図２７】共通モジュール抽出例その１を示す図である。
【図２８】共通モジュール抽出例その２を示す図である。
【図２９】描画部品マクロ化の例を示す図である。
【図３０】シーケンス図におけるパターン抽出の例を示す図である。
【図３１】シーケンス図情報と外部定義情報との合成例を示す図である。
【図３２】シーケンス図の分割例を示す図である。
【図３３】シーケンス図の結合例を示す図である。
【図３４】制御プログラム生成装置のネットワーク構成例を示す図である。
【０１８３】
１  制御プログラム生成装置
２  記憶部
２ａ  描画部品
２ｂ  共通パターン情報
２ｃ  シーケンス図情報
２ｄ  外部定義情報
２ｅ  共通コード情報
３  制御部
３ａ  シーケンス図作成支援部
３ｂ  パターン抽出部
３ｃ  描画部品登録部
３ｄ  コード生成部
３ｅ  共通コード抽出部
３ｆ  外部定義情報操作部
４  入出力部
４ａ  入力手段
４ｂ  ディスプレイ
【図１】
2007206798.tif 000003
【図２】
2007206798.tif 000004
【図３】
2007206798.tif 000005
【図４】
2007206798.tif 000006
【図５】
2007206798.tif 000007
【図６】
2007206798.tif 000008
【図７】
2007206798.tif 000009
【図８】
2007206798.tif 000010
【図９】
2007206798.tif 000011
【図１０】
2007206798.tif 000012
【図１１】
2007206798.tif 000013
【図１２】
2007206798.tif 000014
【図１３】
2007206798.tif 000015
【図１４】
2007206798.tif 000016
【図１５】
2007206798.tif 000017
【図１６】
2007206798.tif 000018
【図１７】
2007206798.tif 000019
【図１８】
2007206798.tif 000020
【図１９】
2007206798.tif 000021
【図２０】
2007206798.tif 000022
【図２１】
2007206798.tif 000023
【図２２】
2007206798.tif 000024
【図２３】
2007206798.tif 000025
【図２４】
2007206798.tif 000026
【図２５】
2007206798.tif 000027
【図２６】
2007206798.tif 000028
【図２７】
2007206798.tif 000029
【図２８】
2007206798.tif 000030
【図２９】
2007206798.tif 000031
【図３０】
2007206798.tif 000032
【図３１】
2007206798.tif 000033
【図３２】
2007206798.tif 000034
【図３３】
2007206798.tif 000035
【図３４】
2007206798.tif 000036