(57)【要約】【課題】コンパイルの所要時間を短縮する。【解決手段】ＨＭＩプログラムは、複数の構成要素を含み、プログラム作成装置のコンパイラ部（２１２）は、複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出する対象検出部と、各構成要素に、当該構成要素の変更内容と、当該変更の影響が及ぶ依存関係を有した他の構成要素とを関連付けた関連付け情報を格納するための記憶部と、を含む。対象検出部は、１つ以上の構成要素の変更がなされたとき、複数の構成要素のうちから当該変更内容に関連付けられた１つ以上の構成要素を、コンパイルされるべき対象として検出する。【選択図】図４
2018151936.tif 000002
【特許請求の範囲】
【請求項１】
ＦＡ（ファクトリオートメーション）のためのＨＭＩ（ヒューマンマシンインタフェース）プログラムを作成するプログラム作成装置であって、
前記プログラムは、複数の構成要素を含み、
前記プログラムをコンパイルするコンパイラ部を、備え、
前記コンパイラ部は、
前記複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出する対象検出部と、
各構成要素に、当該構成要素の変更内容と、当該変更の影響が及ぶ依存関係を有した他の構成要素とを関連付けた関連付け情報を格納するための記憶部と、を含み、
前記対象検出部は、
１つ以上の構成要素の変更がなされたとき、前記複数の構成要素のうちから当該変更内容に関連付けられた１つ以上の構成要素を、コンパイルされるべき対象として検出する、プログラム作成装置。
【請求項２】
前記対象検出部は、
前記対象として検出された複数の構成要素のうち、相互の間で前記依存関係を有しない構成要素の組を、並列にコンパイルされるべき対象として検出する、請求項１に記載のプログラム作成装置。
【請求項３】
前記コンパイルが実施される場合に、前記関連付け情報から、前記対象として検出された複数の構成要素の相互の前記依存関係を抽出する依存関係処理部を、さらに備える、請求項２に記載のプログラム作成装置。
【請求項４】
前記対象検出部は、抽出された前記依存関係に基づき、前記並列にコンパイルされるべき対象となる構成要素を検出する、請求項３に記載のプログラム作成装置。
【請求項５】
前記コンパイラ部は、抽出された前記依存関係に基づき、前記対象として検出された複数の構成要素のそれぞれについて、コンパイルする順序を決定する、請求項３または４に記載のプログラム作成装置。
【請求項６】
前記対象検出部は、
コンパイルがなされた前記プログラムの複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出する、請求項１から５のいずれか１項に記載のプログラム作成装置。
【請求項７】
前記プログラムの複数の構成要素は、他のプログラムと共有される構成要素を含み、
前記共有される構成要素の変更がなされたとき、当該変更の内容の通知を前記他のプログラムに出力する、請求項１から６のいずれか１項に記載のプログラム作成装置。
【請求項８】
前記プログラムの各構成要素について、変更される頻度に応じてコンパイルする時期を変更する、請求項１から７のいずれか１項に記載のプログラム作成装置。
【請求項９】
ＦＡ（ファクトリオートメーション）のためのＨＭＩ（ヒューマンマシンインタフェース）プログラムを作成する方法をコンピュータに実行させるためのプログラムであって、
前記ＨＭＩプログラムは、複数の構成要素を含み、
前記方法は、
前記複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出するステップと、
各構成要素に、当該構成要素の変更内容と、当該変更の影響が及ぶ依存関係を有した他の構成要素とを関連付けた関連付け情報を検索するステップと、を含み、
前記検出するステップでは、
１つ以上の構成要素の変更がなされたとき、前記複数の構成要素のうちから当該変更内容に関連付けられた１つ以上の構成要素を、コンパイルされるべき対象として検出する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はプログラム作成装置およびプログラムに関し、特に、ＦＡ（Factory  Automationの略）に適用されるＨＭＩ（Human  Machine  Interface)のためのアプリケーションプログラムの開発を支援するプログラム作成装置およびプログラムに関する。
【背景技術】
【０００２】
ＦＡの分野に適用されるプログラマブルターミナルは、タッチパネル式の入力装置である。プログラマブルターミナルは、ＨＭＩに関して、ユーザ（この明細書においては、プログラマブルターミナルのプログラムを設計または実装する人を指す）が、ユーザの目的（仕様）に合うように画面を作成して表示し、データ入力を可能ならしめる機器である。
【０００３】
ＦＡを実現するアプリケーションプログラム（以下、ＦＡアプリケーションともいう）の開発に関して、特許文献１（特開２００９−１５７５３３号公報）の技術が開示される。特許文献１では、制御手順プログラムが再度コンパイルされると、変数へのアドレス割り当てが変わったか否かが判定されて、自動的に新たなアドレス割り当てに対応した画面データが生成される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１５７５３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＦＡアプリケーションに関しては、たとえばIEC61131-3標準規格の普及とともに、変数を利用したプログラミングが普及してきている。変数を使用したプログラムを高速に実行するために、変数の解決を実行時に行うのではなく、あらかじめプログラムをコンパイルする時に実施する方法が採用されている。しかしながら、ＦＡアプリケーション、とりわけＨＭＩアプリケーションは大規模プログラムになりやすいために、アプリケーション全体のコンパイルに数分程度以上の時間がかかる場合がある。
【０００６】
また、ＦＡアプリケーションの開発では、アプリケーションを作成してコンパイルし、コンパイル後のアプリケーションをターゲットデバイスに転送する。そして、ターゲットデバイス上でアプリケーションを実行させてデバイスの動作を確認し、確認された不具合に基づきアプリケーションを修正する。そして、修正後のアプリケーションをコンパイルするという一連の作業を試行錯誤的に繰り返す。
【０００７】
したがって、ＦＡアプリケーションの効率的な開発のために、コンパイルの所要時間を短くすることが望まれている。しかし、上記の特許文献１は、コンパイルの所要時間を短縮する方法は示さない。
【０００８】
それゆえに本開示の目的は、ＨＭＩプログラムについてコンパイルの所要時間を短縮するプログラム作成装置およびプログラムを提供することである。
【課題を解決するための手段】
【０００９】
この発明のある局面に従うと、ＦＡ（ファクトリオートメーション）のためのＨＭＩ（ヒューマンマシンインタフェース）プログラムを作成するプログラム作成装置が提供される。
【００１０】
ＨＭＩプログラムは、複数の構成要素を含み、プログラム作成装置は、プログラムをコンパイルするコンパイラ部を、備える。
【００１１】
コンパイラ部は、複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出する対象検出部と、各構成要素に、当該構成要素の変更内容と、当該変更の影響が及ぶ依存関係を有した他の構成要素とを関連付けた関連付け情報を格納するための記憶部と、を含み、対象検出部は、１つ以上の構成要素の変更がなされたとき、複数の構成要素のうちから当該変更内容に関連付けられた１つ以上の構成要素を、コンパイルされるべき対象として検出する。
【００１２】
好ましくは、対象検出部は、対象として検出された複数の構成要素のうち、相互の間で依存関係を有しない構成要素の組を、並列にコンパイルされるべき対象として検出する。
【００１３】
好ましくは、コンパイルが実施される場合に、関連付け情報から、対象として検出された複数の構成要素の相互の依存関係を抽出する依存関係処理部を、さらに備える。
【００１４】
好ましくは、対象検出部は、抽出された依存関係に基づき、並列にコンパイルされるべき対象となる構成要素を検出する。
【００１５】
好ましくは、コンパイラ部は、抽出された依存関係に基づき、対象として検出された複数の構成要素のそれぞれについて、コンパイルする順序を決定する。
【００１６】
好ましくは、対象検出部は、コンパイルがなされたプログラムの複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出する。
【００１７】
好ましくは、プログラムの複数の構成要素は、他のプログラムと共有される構成要素を含み、共有される構成要素の変更がなされたとき、当該変更の内容の通知を他のプログラムに出力する。
【００１８】
好ましくは、プログラムの各構成要素について、変更される頻度に応じてコンパイルする時期を変更する。
【００１９】
この発明の他の局面に従うと、ＦＡ（ファクトリオートメーション）のためのＨＭＩ（ヒューマンマシンインタフェース）プログラムを作成する方法をコンピュータに実行させるためのプログラムが提供される。ＨＭＩプログラムは、複数の構成要素を含む。方法は、複数の構成要素のうちから、コンパイルされるべき対象となる１つ以上の構成要素を検出するステップと、各構成要素に、当該構成要素の変更内容と、当該変更の影響が及ぶ依存関係を有した他の構成要素とを関連付けた関連付け情報を検索するステップと、を含み、検出するステップでは、１つ以上の構成要素の変更がなされたとき、複数の構成要素のうちから当該変更内容に関連付けられた１つ以上の構成要素を、コンパイルされるべき対象として検出する。
【図面の簡単な説明】
【００２０】
【図１】実施の形態１にかかるプログラマブルシステムの構成を概略的に示す図である。
【図２】実施の形態１にかかるＰＣ１００の構成を概略的に示す図である。
【図３】実施の形態１にかかるプログラマブルターミナル４の構成を概略的に示す図である。
【図４】実施の形態１にかかるＨＭＩプログラムの開発環境を概略的に示す図である。
【図５】実施の形態１にかかるＨＭＩプログラムのコンパイル処理の概要を説明するための図である。
【図６】実施の形態１にかかる依存関係を決定するためのテーブルＴＢの構成を概略的に示す図である。
【図７】実施の形態１にかかる依存関係を例示する図である。
【図８】実施の形態１にかかる依存関係グラフＳＧの一例を模式的に示す図である。
【図９】再コンパイル対象検出処理のフローチャートである。
【図１０】依存関係グラフＳＧにおいて変更がなされた構成要素を特定した示した状態を示す図である。
【図１１】並列コンパイル対象検出処理のフローチャートである。
【図１２】部分グラフＳＧ１の一例を示す図である。
【図１３】部分グラフＳＧ１を単純化したグラフＳＧ２を示す図である。
【図１４】実施の形態１にかかる高速コンパイルの処理フローチャートである。
【図１５】高速コンパイルにおける依存関係に基づいたコンパイルの所要時間を説明する図である。
【図１６】実施の形態１にかかる並列コンパイルによるコンパイル所要時間の短縮化を説明する図である。
【発明を実施するための形態】
【００２１】
以下に、図面を参照しつつ、各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
【００２２】
［用語の説明］
各実施の形態で用いる用語について説明する。
【００２３】
「ＨＭＩプログラム」は、アプリケーションプログラムであり、たとえばＨＭＩの定義情報を含む。「ＨＭＩプログラム」は、プログラマブルターミナルを動作させるために必要な画面上のＧＵＩ（Graphical User Interface)等のオブジェクトの配置またはプログラムコード、各種の設定データなどを含む。
【００２４】
「定義情報」は、変数定義、プロジェクト全体定義、ページ定義、アラーム定義、データログ定義およびデータグループ定義などを含む。
【００２５】
「変数定義」は、ＨＭＩプログラム中で使用される変数の定義の集合である。変数の定義は、たとえば各変数について変数名と型（タイプ）を含む。なお、定義される変数には、ＰＬＣ（プログラマブルロジックコントローラ）種別、通信先を特定する情報（ＩＰアドレスや、対応させるＰＬＣの変数もしくはメモリアドレスなど）などが含まれても良い。
【００２６】
「プロジェクト全体定義」は、たとえばＨＭＩプログラムの全体で共有される関数の定義（プログラムコード）、常時一定時間おきに実行されるべきプログラムコードの設定、ある条件が成立したときに実行されるべきプログラムコードの設定が含まれる。
【００２７】
「ページ定義」は、ＨＭＩプログラムに含まれる各ページに対応して、当該ページにより表示される画面のＵＩ（User Interface)構成要素（たとえばボタンやランプなど）の形状、場所、色などの外観に関する定義、当該ページの画面が表示中に、ある条件が成立したときに実行されるプログラムコードの設定、当該ページのＵＩ構成要素が操作されるなどした場合に実行するプログラムコードの設定、当該ページからのみ使用される関数の定義（命令コードまたはプログラムコード）のデータを含む。
【００２８】
「アラーム定義」は、ある条件が成立した場合に、警告画面を表示するためのデータを定義する。たとえば、条件式、条件式が成立したときに画面に表示または履歴に記録される文字列、条件式が成立したときに表示される特定のページ、警告レベルなどを含む。
【００２９】
「データログ定義」は、一定時間おき、または条件が成立するたびに、特定の変数の値を記録し、ファイルなどに保存する機能に関する定義を示す。この定義は、たとえば、ログ対象の変数、ログの時間間隔、ログの条件式などを含む。
【００３０】
「データグループ定義」は、グラフを表示する場合に、グラフのデータ系列を構成するデータグループ（「非配列変数の集合」または「配列変数」）の定義を含む。
【００３１】
「構成要素」は、ＨＭＩプログラムを構成するための要素を示す。実施の形態では、ＨＭＩプログラムの「構成要素」は予め定められた粒度に従い、たとえば、ページ定義においては個々のページがそれぞれ「構成要素」となり、アラーム定義では全アラーム定義がまとめて１つの「構成要素」となり、変数定義では、個々の変数が「構成要素」となる。
【００３２】
「コンパイル単位」は、独立してコンパイル可能な単位を示す。実施の形態では、変数定義、プロジェクト全体定義、ページ定義、アラーム定義、データログ定義およびデータグループ定義は、それぞれ「コンパイル単位」に相当する。
【００３３】
「依存関係」とは、異なる「構成要素」の間が相互に影響しあう関係を言う。具体的には、一方の定義情報の「構成要素」に変更があった場合に、当該変更の影響が他方の定義情報の「構成要素」に及ぶ（これを、伝搬ともいう）関係をいう。
【００３４】
「伝搬元，伝搬先」とは、ある依存関係に注目した場合において、一方の構成要素（Ａ）の変更が他方の構成要素（Ｂ）に影響を及ぼす場合の、それぞれ、Ａ，Ｂをいう。
【００３５】
「伝搬形態」とは、伝搬元の「構成要素」に変更があった場合に、仮に伝搬先の「構成要素」に変更がなくとも、コンパイルに関して必要な操作を示す。この‘必要な操作’としては、たとえば、再コンパイル、変数使用状況の再調査などを含む。
【００３６】
「再コンパイル」とは、コンパイル後のＨＭＩプログラムの全部または一部を再度、コンパイルすることを示す。
【００３７】
[実施の形態１]
（概要）
実施の形態１では、ＦＡ（ファクトリオートメーション）のためのＨＭＩ（ヒューマンマシンインタフェース）プログラムを処理するプログラム作成装置は、コンパイル後のプログラムの１つ以上の構成要素が変更された場合に、当該１つ以上の構成要素の変更内容と複数の構成要素の依存関係とに基づき、次のコンパイルの対象となる構成要素を検出する。
【００３８】
このように、プログラム作成装置は、ＨＭＩプログラムを再コンパイルする場合には、当該ＨＭＩプログラムの複数の構成要素のうち、再コンパイルの対象となるべき１つ以上の構成要素を検出する。したがって、再コンパイルは、ＨＭＩプログラムの全ての構成要素を対象に実施する必要はないので、コンパイルの所要時間を短縮することができる。
【００３９】
（システム構成）
図１は、実施の形態１にかかるプログラマブルシステムの構成を概略的に示す図である。図１を参照して、プログラマブルシステムは、ＦＡに適用される複数のＰＬＣ（Programmable  Logic  Controller）1，ＰＬＣ２，ＰＬＣ３、プログラマブルターミナル４およびＰＣ（Personal  Computer）１００を備える。ＰＬＣ１〜３のそれぞれは同様の構成を有する。ＰＬＣは、典型的には、プログラムを実行する主体であるＣＰＵ（Central  Processing  Unit）を有したＣＰＵユニット１０、ＣＰＵユニット１０などへ電力を供給する電源ユニット１２、フィールド機器と信号をやり取りするＩＯ（Input  Output）ユニット１４とを含む。ＩＯユニット１４は、ＣＰＵユニット１０とシステムバス１１を介して接続されている。ＩＯユニット１４は、ＣＰＵユニット１０とシステムバス１１を介して接続される。典型的には、ＩＯユニット１４は、フィールド機器である検出センサ１５からの信号を取得し、またはＣＰＵユニット１０でのプログラムの実行結果に応じてフィールド機器であるリレー１６を駆動する。なお、フィールド機器は、検出センサ１５およびリレー１６に限定されない。
【００４０】
プログラマブルターミナル４は、ＨＭＩのためのＧＵＩ（Graphical  User  Interface）としての役割りを果たす。プログラマブルターミナル４は、ＰＬＣ１〜３のＣＰＵユニット１０と通信する処理、各ＰＬＣに関する情報をタッチスクリーン４１８のディスプレイに表示する表示処理、操作キー４１６を介して入力されたオペレータの指示をＰＬＣ１〜３に伝送する入力処理などの各種の処理を実行する。また、プログラマブルターミナル４は、通信処理、表示処理および入力処理などを実施するためのＧＵＩ画面を含む各種の画面をディスプレイに表示する。
【００４１】
ＧＵＩ画面を表示するための画面データは、プログラマブルターミナル４がＨＭＩプログラムを実行することにより生成されて、生成された画面データによりディスプレイを駆動することにより、タッチスクリーン４１８に画面が表示される。
【００４２】
ＰＣ１００は、ＨＭＩプログラムを作成するプログラム作成装置の一実施例である。ＨＭＩプログラムの処理には、ＨＭＩプログラムの作成（エディット）、コンパイルなどが含まれる。ＰＣ１００は、有線または無線の通信路１１１を介してプログラマブルターミナル４に接続される。ＰＣ１００は、ユーザがＨＭＩプログラムを作成する環境を提供する。ＰＣ１００で作成されたプログラムは、プログラマブルターミナル４に送信される。通信路１１１は、たとえばＬＡＮ（Local  Area  Network）を含む。
【００４３】
（ＰＣ機器１００の構成）
図２は、実施の形態１にかかるＰＣ１００の構成を概略的に示す図である。図２を参照して、ＰＣ１００は、ＣＰＵ１１０、記憶部としてのメモリ１１２およびハードディスク１１４、計時し計時データをＣＰＵ１１０に出力するタイマ１１３、入力インタフェース１１８、表示コントローラ１２０、通信インタフェース１２４、データリーダ／ライタ１２６を含む。これらの各部は、バス１２８を介して互いにデータ通信が可能なように接続されている。
【００４４】
ＣＰＵ１１０は、ハードディスク１１４に格納されたプログラム（コード）を実行することで、各種の演算を実施する。メモリ１１２は、典型的には、ＤＲＡＭ（Dynamic  Random  Access  Memory）などの揮発性の記憶装置である。メモリ１１２は、ハードディスク１１４から読出されたプログラムおよびデータに加えて、データリーダ／ライタ１２６から受信されたデータおよびワークデータなどが格納される。
【００４５】
入力インタフェース１１８は、ＣＰＵ１１０とキーボード１０４、マウス（図示せず）、タッチパネル（図示せず）などの入力装置との間のデータ伝送を仲介する。すなわち、入力インタフェース１１８は、ユーザが入力装置を操作することで与えられる操作命令を受付ける。
【００４６】
表示コントローラ１２０は、表示装置の典型例であるディスプレイ１０２と接続され、ＣＰＵ１１０における処理の結果などを表示する。表示コントローラ１２０は、ＣＰＵ１１０からの表示データに従いディスプレイ１０２を駆動する。これにより、ディスプレイ１０２には、表示データに従う画像が表示される。
【００４７】
通信インタフェース１２４は、ＬＡＮを介してプログラマブルターミナル４との間のデータ伝送を仲介する。データリーダ／ライタ１２６は、ＣＰＵ１１０と外部の記憶媒体であるメモリカード１０６との間のデータ伝送を仲介する。
【００４８】
なお、メモリカード１０６は、ＰＣ１００で実行されるプログラムなどが格納された状態で流通し、データリーダ／ライタ１２６は、このメモリカード１０６からプログラムを読出す。なお、メモリカード１０６は、ＣＦ（Compact  Flash）、ＳＤ（Secure  Digital）などの汎用的な半導体記憶デバイスや、フレキシブルディスク（Flexible  Disk）などの磁気記憶媒体や、ＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）などの光学記憶媒体などからなる。
【００４９】
また、ＰＣ１００には、必要に応じてプリンタなどの他の出力装置が接続されてもよい。
【００５０】
（プログラマブルターミナル４の構成）
図３は、実施の形態１にかかるプログラマブルターミナル４の構成を概略的に示す図である。図３を参照して、プログラマブルターミナル４は、各種の演算を行なうＣＰＵ４１１、ＲＯＭ（Read  Only  Memory）４１２、ＲＡＭ（Random  Access  Memory）４１３、各種のプログラムおよびデータを不揮発的に格納するためのフラッシュＲＯＭ４１４、時計４１５、オペレータの操作を受付けるための操作キー４１６、データリーダ/ライタ４１７、タッチスクリーン４１８および通信インタフェース４１９を備える。なお、これらの各部は、内部バスを介して互いに接続される。
【００５１】
タッチスクリーン４１８は、表示部として機能するディスプレイ４８１およびオペレータの入力を受付けるためのタッチパネル４８２を含む。タッチパネル４８２は、ディスプレイ４８１を覆うように設置される。通信インタフェース４１９は、ＰＣ１００およびＰＬＣ１〜３の各種の機器と通信する。
【００５２】
データリーダ／ライタ４１７は、ＣＰＵ４１１と外部の記憶媒体であるメモリカード４２０との間のデータ伝送を仲介する。メモリカード４２０は、プログラマブルターミナル４で実行されるプログラムなどが格納された状態で流通し得る。データリーダ／ライタ１２６は、メモリカード４２０からプログラムを読出す。なお、メモリカード４２０は、ＣＦ（Compact  Flash）、ＳＤ（Secure  Digital）などの汎用的な半導体記憶デバイス、またはフレキシブルディスク（Flexible  Disk）などの磁気記憶媒体、またはＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）などの光学記憶媒体などからなる。
【００５３】
また、プログラマブルターミナル４には、必要に応じてプリンタなどの他の出力装置が接続されてもよい。
【００５４】
（ＨＭＩプログラムの開発環境）
図４は、実施の形態１にかかるＨＭＩプログラムの開発環境を概略的に示す図である。図４では、ＰＣ１００における開発環境に関連付けて、プログラマブルターミナル４におけるＨＭＩプログラムの実行環境が示されている。
【００５５】
図４を参照して、ＰＣ１００は、ＯＳ（オペレーティングシステム）およびＨＭＩプログラムを開発するためのＨＭＩプログラム開発部２００を備える。ＨＭＩプログラム開発部２００は、ＨＭＩプログラム作成部２１０、プログラム編集部２１１、コンパイラ部２１２、および転送部２１６を含む。コンパイラ部２１２は、コンパイル対象となる定義情報を検出するためのコンパイル対象検出部２１３および定義情報の間の依存関係を検出して処理する依存関係処理部２１４を含む。
【００５６】
ＨＭＩプログラム作成部２１０は、キーボード１０４を介して受付けるユーザの操作内容に従いＨＭＩプログラム開発部２００内の各部を制御する。プログラム編集部２１１は、キーボード１０４を介して受付けるユーザ操作内容に従い、ＨＭＩプログラムＰＲを編集（エディット）し、編集後のＨＭＩプログラムＰＲを予め定められたＨＭＩプログラム記述言語のソースコードＳＣに変換する。プログラム編集部２１１は、編集後のＨＭＩプログラムＰＲおよびソースコードＳＣを、記憶部２２４に格納する。記憶部２２４は、メモリ１１２またはハードディスク１１４などを含む。
【００５７】
コンパイラ部２１２は、上記のＨＭＩプログラム記述言語用のコンパイラであって、ソースコードＳＣをコンパイルする。コンパイルにより、実行可能ＨＭＩプログラムＥＰが生成されて、記憶部２２４に格納される。実行可能ＨＭＩプログラムＥＰは、ＰＣ１００またはプログラマブルターミナル４等の各プロセッサで実行することが可能な実行可能コードに相当する。
【００５８】
ＨＭＩプログラムは、後述するように複数の構成要素を含む。
転送部２１６は、キーボード１０４を介して受付けるユーザの操作内容に従い、記憶部２２４から実行可能ＨＭＩプログラムＥＰを読出し、読出された実行可能ＨＭＩプログラムＥＰをプログラマブルターミナル４に送信する。
【００５９】
コンパイル対象検出部２１３は、ソースコードＳＣから、コンパイルの対象となる１つ以上の構成要素を検出（抽出）する。また、コンパイル対象検出部２１３は、コンパイルの対象となる複数の構成要素のうち、並列にコンパイルすることが可能な２つ以上の構成要素の組を検出する並列対象検出部２１５を含む。
【００６０】
実施の形態１では、コンパイルにより得られた実行可能ＨＭＩプログラムＥＰの実行可能コードは、実行可能コードを走査することにより上記の依存関係を含むプログラムの論理的構造を抽出することが容易なコードである。
【００６１】
コンパイラ部２１２は、ソースコードＳＣをコンパイルして、コンパイル結果である実行可能ＨＭＩプログラムＥＰを出力する。出力された実行可能ＨＭＩプログラムＥＰは、記憶部２２４に格納される。具体的には、コンパイラ部２１２は、コンパイル対象検出部２１３による１つ以上の構成要素が検出されたとき、ソースコードＳＣの複数の構成要素のうち、当該１つ以上の構成要素をコンパイルする。また、コンパイラ部２１２は、並列対象検出部２１５により並列にコンパイル可能な２つ以上の構成要素からなる組が検出されたときは、検出された組の２つ以上の構成要素を、並列にコンパイルする。
【００６２】
依存関係処理部２１４は、実行可能ＨＭＩプログラムＥＰから構成要素の間の依存関係を取得する。具体的には、実行可能ＨＭＩプログラムＥＰを解析して、構成要素どうしの依存関係を抽出し、抽出の結果に基づき、依存関係グラフＳＧを生成し、生成された依存関係グラフＳＧを記憶部２２４に格納する。
【００６３】
転送部２１６は、ハードディスク１１４の実行可能ＨＭＩプログラムＥＰを読出し、読出された実行可能ＨＭＩプログラムＥＰをプログラマブルターミナル４に転送（送信）する。
【００６４】
ＨＭＩプログラム開発部２００の各部および転送部２１６は、プログラム、またはプログラムと回路の組合せにより実現される。このプログラムは、ハードディスク１１４からメモリ１１２にロードされて、ＯＳを介してＣＰＵ１１０により実行される。また、ＰＣ１００は、実行可能ＨＭＩプログラムＥＰを作成するためのＵＩ（User Interface）ライブラリ、リソース、関数などのデータを有した図示しないライブラリを備える。
【００６５】
プログラマブルターミナル４は、ＰＣ１００から実行可能ＨＭＩプログラムＥＰを受ける。プログラマブルターミナル４は、実行可能ＨＭＩプログラムＥＰを実行するためのソフトウェア部品からなるランタイム２３０、タッチスクリーン４１８との間でデータを入出力する入出力Ｉ／Ｆ（Interfaceの略）２３１および通信インタフェース４１９を介して各ＰＬＣと通信するフィールドＩ／Ｆ２３２を備える。
【００６６】
プログラマブルターミナル４は、ＰＣ１００から転送された実行可能ＨＭＩプログラムＥＰをフラッシュＲＯＭ４１４などに格納する。プログラマブルターミナル４のユーザがＨＭＩプログラムの実行を指示すると、プログラマブルターミナル４のＯＳ（図示せず）の制御のもとで、フラッシュＲＯＭ４１４から実行可能ＨＭＩプログラムＥＰが読出されて、ランタイム２３０は、読出された実行可能ＨＭＩプログラムＥＰを実行する。
【００６７】
ランタイム２３０は、入出力Ｉ／Ｆ２３１を介してタッチスクリーン４１８からの入力データ、または、通信インタフェース４１９を介してＰＬＣから入力するデータを用いて実行可能ＨＭＩプログラムＥＰを実行する。また、実行可能ＨＭＩプログラムＥＰの実行結果（出力）を、入出力Ｉ／Ｆ２３１を介してタッチスクリーン４１８に表示させ、また、通信インタフェース４１９を介してＰＬＣに出力する。
【００６８】
ユーザは、実行可能ＨＭＩプログラムＥＰの実行結果に基づくタッチスクリーン４１８の表示内容またはＰＬＣの動作を確認する。
【００６９】
なお、図４では、ＨＭＩプログラムを実行する環境として、プログラマブルターミナル４を利用したが、実行環境はプログラマブルターミナル４に限定されない。たとえば、ＰＣ１００が、プログラマブルターミナル４と同様のＨＭＩプログラムの実行環境を備える場合には、実行可能ＨＭＩプログラムＥＰをＰＣ１００において実行することができる。
【００７０】
（ＨＭＩプログラムのコンパイル処理の概要）
図５は、実施の形態１にかかるＨＭＩプログラムのコンパイル処理の概要を説明するための図である。ここでは、ユーザはコンパイル後のソースコードＳＣを、プログラム編集部２１１を介して編集（変更）ときに、編集後のソースコードＳＣＮをコンパイルする（再コンパイルともいう）場合を説明する。
【００７１】
図５では、プログラム編集部２１１は、ユーザの操作内容に従い、記憶部２２４のソースコードＳＣを編集（変更）し、編集後のソースコードＳＣＮを取得し、記憶部２２４に格納する。具体的には、プログラム編集部２１１は、編集のためのユーザの操作内容を受付けて、編集内容を記憶部２２４に格納する。編集内容は、変更されたプログラム構成要素が列挙されたソースコード変更情報ＳＶを含む。依存関係グラフＳＧは、ＨＭＩプログラムの複数の構成要素の依存関係を示す情報であって、コンパイルが実施される毎に、依存関係処理部２１４により生成されて、記憶部２２４に格納される。依存関係グラフＳＧの詳細は後述する。
【００７２】
ＨＭＩプログラムのコンパイルの開始が指示されると、コンパイル対象検出部２１３はコンパイル対象となる構成要素を、ソースコードＳＣＮから検出（抽出）する（ステップＳ３）。また、並列対象検出部２１５は、コンパイル対象検出部２１３により検出された構成要素のうち、並列にコンパイルすることが可能な２つ以上の構成要素を検出（抽出）する（ステップＳ５）。
【００７３】
コンパイル対象検出部２１３は、検出の結果に基づき、ソースコードＳＣＮから再コンパイル対象の構成要素に該当したソースコードＳＣ１を出力し、記憶部に格納する。また、並列対象検出部２１５は、検出の結果に基づき、並列にコンパイル可能な構成要素の組を示す並列コンパイル情報ＳＣ２を出力する。
【００７４】
コンパイラ部２１２は、ソースコードＳＣＮの全ての構成要素ではなく、そのうちの再コンパイル対象の構成要素のソースコードＳＣ１をコンパイルすることにより、ソースコードＳＣＮの全体をコンパイルするよりも高速なコンパイルを実現する（ステップＳ７）。ステップＳ７では、並列コンパイル情報ＳＣ２が出力されている場合には、コンパイラ部２１２は、並列コンパイル情報ＳＣ２が示す構成要素の組については、並列にコンパイルを実施する。
【００７５】
コンパイラ部２１２は、コンパイルの結果であるコンパイル成果物を出力する。コンパイル成果物は、実行可能ＨＭＩプログラムＥＰを含み、記憶部に格納される。
【００７６】
依存関係処理部２１４は、コンパイル成果物から構成要素の間の依存関係を検出（抽出）し（ステップＳ９）、検出された依存関係を示すように元の依存関係グラフＳＧを更新（変更）する（ステップＳ１１）。更新後の依存関係グラフＳＧは記憶部２２４に格納されて、次回のコンパイル（再コンパイル）において参照される。
【００７７】
（依存関係を決定するためのテーブルＴＢ）
図６は、実施の形態１にかかる依存関係を決定するためのテーブルＴＢの構成を概略的に示す図である。テーブルＴＢは、ＰＣ１００の記憶部２２４に予め格納される。実施の形態１では、依存関係処理部２１４は、テーブルＴＢの情報に基づき、依存関係を決定する。テーブルＴＢは、各構成要素に対応して、当該構成要素の変更の内容と、当該変更の影響が及ぶ他の構成要素を関連付けた関連付け情報に相当する。
【００７８】
図６を参照して、テーブルＴＢは、ＨＭＩプログラムの各構成要素（定義情報に対応する）に対応付けて、当該構成要素の種類ＴＢ１、当該構成要素に対して実施され得る変更の種類ＴＢ２、依存関係の伝搬先ＴＢ３および依存関係の伝搬形態ＴＢ４を有する。
【００７９】
テーブルＴＢでは、構成要素の種類ＴＢ１を変数定義、関数の定義およびページの定義の３種類を例示したが、他の種類の構成要素についても同様にデータを登録しておくことができる。
【００８０】
図６に示されるように、変更の種類ＴＢ２は、対応の構成要素の種類ＴＢ１に応じて異なる。たとえば、構成要素の種類ＴＢ１が個々の変数定義である場合は、変更の種類ＴＢ２は名称変更、型変更、削除および追加を含む。
【００８１】
依存関係の伝搬先ＴＢ３は、対応の変更の種類ＴＢ２のそれぞれに関連づけて、当該変更の影響が伝搬する（変更の影響が及ぶ）構成要素を示す。また、依存関係の伝搬形態ＴＢ４は、対応の伝搬先ＴＢ３のそれぞれに関連付けて、コンパイルに関して必要とされる何らかの操作（再コンパイル、変数使用状況の再調査）を示す。
【００８２】
実施の形態１では、テーブルＴＢの内容は固定であってもよく、または可変であってもよい。たとえば、ＨＭＩプログラムにユーザが作成した構造体変数が含まれる場合には、プログラム作成装置は、当該構造体変数について、変更の種類ＴＢ２（たとえば、メンバーの変更など）、伝搬先ＴＢ３および伝搬形態ＴＢ４を登録することができる。
【００８３】
（依存関係の表記）
図７は、実施の形態１にかかる依存関係を例示する図である。各構成要素の間の依存関係は、たとえば有向グラフで示される。ここで、構成要素は当該有向グラフのノードとなり、依存関係は当該有向グラフの辺となる。辺には、依存関係の発生条件および伝搬先に要求される操作の情報が付加される。発生条件および操作は、それぞれ、図６の変更の種類ＴＢ２および伝搬形態ＴＢ４に対応する。
【００８４】
有向グラフの辺を辿ることにより、ノード間の依存関係（発生条件と操作）、各依存関係の伝搬元のノードおよび伝搬先のノードを検出（抽出）することができる。また、どの依存関係の伝搬先にもなっていないノード、および、あるノードに着目して、その全ての依存関係を伝搬先から伝搬元の方向へ再帰的に辿った場合に通過する全てのノードが、前回のコンパイル完了以降に変更されていない構成要素であるようなノードが検出される。このように検出されたノードに対応する構成要素からのみ成るコンパイル単位は、並列にコンパイルが可能なコンパイル単位に相当する。
【００８５】
図７に示す依存関係の有向グラフは、再利用可能（読出し可能）なように、記憶部に格納される。
【００８６】
（依存関係検出処理）
図８は、実施の形態１にかかる依存関係グラフＳＧの一例を模式的に示す図である。依存関係処理部２１４は、実行可能ＨＭＩプログラムＥＰを解析し、解析結果に基づき、構成要素（変数、関数、ページなど）とそれらの呼び出し関係を抽出し、抽出された各構成要素に基づきテーブルＴＢを検索する。検索により、依存関係処理部２１４は、各構成要素について、その種類に一致した構成要素の種類ＴＢ１に対応した変更の種類ＴＢ２、伝搬先ＴＢ３および伝搬形態ＴＢ４を、テーブルＴＢから抽出し、抽出された情報に基づき、上記の有向グラフである依存関係グラフＳＧを生成する（図８参照）。生成された依存関係グラフＳＧを示すリスト構造のデータは、記憶部に格納される。
【００８７】
図８を参照すると、依存関係グラフＳＧは、たとえば変数定義の変数ｖａｒ１および変数ｖａｒ２を伝搬元とした場合に、伝搬先は関数（Ｆｕｎｃｔｉｏ0）またはページ（Page0，Page1など）であり、且つ依存関係に伝搬条件および伝搬形態（たとえば、伝搬条件：型変更ｏｒ削除，伝搬形態：再コンパイル）が関連付けされる。
【００８８】
変形例として、依存関係処理部２１４は、再コンパイルされた構成要素についてのみ、依存関係を上述と同様に解析し、解析の結果に基づき、元の依存関係グラフＳＧを変更するとしてもよい。この場合は、ＨＭＩプログラム全体を再度解析する場合よりも、依存関係グラフＳＧの変更処理を速やかに実施することが可能となる。
【００８９】
（構成要素の細分化）
実施の形態１では、ＨＭＩプログラムの「構成要素」の粒度に関して、プログラム構成要素は、コンパイル単位を小さくできる見込みがなくなるまで分割される。粒度に従う分割によれば、たとえば、ページ定義においては個々のページがそれぞれ「構成要素」であり、アラーム定義は全アラーム定義が１つの「構成要素」であり、変数定義は個々の変数が「構成要素」である。なお、実施の形態１では、「構成要素」の粒度は、予め決定しておくが、ユーザが作成したＨＭＩプログラム等の構成に最適となるよう、動的に決定するとしてもよい。
【００９０】
（再コンパイル対象検出処理）
実施の形態１において、コンパイル対象検出部２１３は、ソースコードＳＣＮを、依存関係グラフＳＧおよびソースコード変更情報ＳＶに従い走査し、走査の結果に基づき、再コンパイルが必要とされる構成要素を検出（抽出）する。図９は再コンパイル対象検出処理のフローチャートである。図１０は、依存関係グラフＳＧにおいて変更がなされた構成要素を特定した示した状態を示す図である。
【００９１】
まず、コンパイル対象検出部２１３は、伝搬元の構成要素のうち、ソースコード変更情報ＳＶが示す変更がなされた構成要素を抽出し、抽出された構成要素に対応するノードから始めて、ノードに対応する構成要素になされた変更が依存関係の発生条件に該当する限り再帰的に、依存関係の伝搬元から伝搬先の方向へ、依存関係グラフＳＧを走査する（ステップＳ３３）。
【００９２】
コンパイル対象検出部２１３は、上記の依存関係グラフＳＧを辿ることによって到達したノードに対応する構成要素の全てを、再コンパイルの対象に決定し、コンパイル対象情報として記憶部２２４に格納する（ステップＳ３５）。
【００９３】
また、コンパイル対象検出部２１３は、再コンパイルの要否とともに、必要な他の処理の要否を判定してもよい（ステップＳ３７）。
【００９４】
ステップＳ３７の判定処理は、たとえば、ソースコード変更情報ＳＶが示す変更後の構成要素が、前回のコンパイル結果をそのまま利用できる構成要素であるか、再コンパイルが必要な構成要素であるか、再コンパイルまでは必要ないが、その他の処理が必要な構成要素であるか等の判定を含む。
【００９５】
コンパイル対象検出部２１３により取得される再コンパイル対象情報を説明する。ここでは、図７に示すように、ソースコード変更情報ＳＶは、変更がなされた構成要素として、プロジェクト全体定義の関数Function0および変数定義の変数ｖａｒ２，ｖａｒ３を含む。関数Function0の変更の種類は「シグネチャの変更」を示し、変数ｖａｒ２，ｖａｒ３の変更の種類はそれぞれ「型の変更」を示す。
【００９６】
まず、コンパイル対象検出部２１３は、依存関係グラフＳＧにおいて、変更がなされた関数Function0に対応するノードから始めて、「シグネチャの変更」が関連付けられた辺を、依存関係の伝搬元から伝搬先の方向へ再帰的に終端まで辿る。これにより、ページ定義のPage2を、再コンパイルの対象と検出する。同様に、変数ｖａｒ２に対応するノードから始めて、「型変更」が関連付けられた辺を、依存関係の伝搬元から伝搬先の方向へ再帰的に終端まで辿る。これにより、ページ定義のPage0、Pgae１、Page2およびPage3を、再コンパイルの対象と検出する。同様に、変数ｖａｒ３に対応するノードから始めて、「型変更」が関連付けられた辺を、依存関係の伝搬元から伝搬先の方向へ再帰的に終端まで辿る。これにより、アラーム定義を再コンパイルの対象と検出する。
【００９７】
したがって、図７の依存関係グラフＳＧおよびソースコード変更情報ＳＶに基づく再コンパイル対象情報は、再コンパイル対象として、変更された変数ｖａｒ２とｖａｒ３および伝搬先の関数Function0、ページPage0、Pgae１、Page2およびPage3、ならびにアラーム定義を示す。
【００９８】
なお、実施の形態においては、これら構成要素を含むコンパイル単位（変数定義、プロジェクト全体定義、ページ定義およびアラーム定義）を再コンパイル対象とする。これにより、データログ定義およびデータグループ定義をコンパイル対象から外すことができて、全体をコンパイルする場合よりもコンパイル所要時間を短くすることができる。
【００９９】
（並列コンパイル対象検出処理）
実施の形態１では、並列対象検出部２１５は、コンパイル対象検出部２１３から出力された再コンパイル対象情報に基づき、再コンパイル対象の構成要素のうち並列にコンパイルすることが可能な構成要素を検出する。
【０１００】
図１１は、並列コンパイル対象検出処理のフローチャートである。図１２は、部分グラフＳＧ１の一例を示す図である。図１３は、部分グラフＳＧ１を単純化したグラフＳＧ２を示す図である。並列対象検出部２１５は、依存関係グラフＳＧから、再コンパイル対象情報に基づき、再コンパイルの対象となった構成要素と、当該構成要素相互間の依存関係だけで構成される部分グラフＳＧ１（図１２参照）を抽出する（ステップＳ５３）。
【０１０１】
並列対象検出部２１５は、図９の部分グラフＳＧ１を、構成要素間の依存関係を示すような単純化されたグラフＳＧ２（図１３参照）に変換する（ステップＳ５５）。
【０１０２】
図１３のグラフＳＧ２に示される依存関係は、変数定義とアラーム定義，ページ定義との間の依存関係と、プロジェクト全体定義とページ定義との間で依存関係を示す。
【０１０３】
一般に、ＨＭＩプログラムの変数定義とプロジェクト全体定義の間には、通常は依存関係が存在し、並列にコンパイルすることが不可能である。ただし、図１３の依存関係は、変数定義に変更があったが、その変数はプロジェクト全体定義では使用されていなかったため、結果として、今回は並列にコンパイル可能であることを示している。
【０１０４】
並列対象検出部２１５は、単純化された依存関係グラフであるグラフＳＧ２のリスト構造のデータを、記憶部２２４に格納する。
【０１０５】
（高速コンパイル）
図１４は、実施の形態１にかかる高速コンパイルの処理フローチャートである。図１５は、高速コンパイルにおける依存関係に基づいたコンパイルの所要時間を説明する図である。図１４と図１５を参照して、コンパイラ部２１２がグラフＳＧ２に基づき、ソースコードＳＣＮをコンパイルする処理を説明する。
【０１０６】
まず、コンパイラ部２１２は、上記の図１３のグラフＳＧ２に基づき、お互いに依存関係を有しない定義情報であり、且つ依存関係の伝搬先となっていない定義情報のコードを、ソースコードＳＣＮからコンパイル単位として抽出する。すなわち、グラフＳＧ２のノードのうち、流入する辺がないノードに該当する定義情報のソースコードをコンパイル単位として抽出する。図１３のグラフＳＧ２によれば、プロジェクト全体定義と変数定義のソースコードが並列にコンパイル可能なコンパイル単位として抽出される。
【０１０７】
コンパイラ部２１２は、抽出されたプロジェクト全体定義と変数定義の各コンパイル単位のコンパイルを、並列に開始する（ステップＳ７３）。
【０１０８】
コンパイラ部２１２は、各コンパイル単位のコンパイルが終了したことを判断すると、グラフＳＧ２において伝搬先となっている定義情報のコンパイル単位宛の‘コンパイル完了通知’を出力する（ステップＳ７５）。
【０１０９】
図１５によれば、変数定義とプロジェクト全体定義のコンパイル単位が並列にコンパイル開始される。コンパイルが終了した方は‘コンパイル完了通知’を、リストの次位のノードに該当のコンパイル単位宛に出力する。図１５では、先に変数定義のコンパイル単位のコンパイルが終了し、その後に、プロジェクト全体定義のコンパイル単位のコンパイルが終了する。グラフＳＧ２のリストによれば、変数定義のコンパイル単位からは、アラーム定義とページ定義の各コンパイル単位宛に‘コンパイル完了通知’が出力されて、プロジェクト全体定義のコンパイル単位からは、アラーム定義のコンパイル単位宛に‘コンパイル完了通知’が出力される。
【０１１０】
コンパイラ部２１２は、グラフＳＧ２の依存関係に基づき、変数定義とプロジェクト全体定義の両方から‘コンパイル完了通知’が出力されたとき（より特定的には、図１５では変数定義から‘コンパイル完了通知’が出力されたとき）、アラーム定義のコンパイル単位のコンパイルを開始する。また、変数定義から‘コンパイル完了通知’が出力されたときページ定義のコンパイル単位のコンパイルを開始する(ステップＳ７７）。
【０１１１】
上記に述べたように、コンパイラ部２１２は、グラフＳＧ２の依存関係に基づき、当該グラフＳＧ２で示された複数の構成要素のそれぞれについて、コンパイルするべき順序を決定して、決定した順序に従いコンパイルを実施することができる。
【０１１２】
図１２のグラフＳＧ２に基づく、並列コンパイルを含むコンパイルによれば、再コンパイル対象として検出された全ての構成要素の再コンパイルを、時間Ｔ１で済ませることができる。
【０１１３】
（コンパイル所要時間の短縮化）
図１６は、実施の形態１にかかる並列コンパイルによるコンパイル所要時間の短縮化を説明する図である。図１６（Ａ）は、再コンパイル対象として検出された構成要素のソースコード（コンパイル単位）を、グラフＳＧ２の依存関係を参照せずに、コンパイルする場合に要する時間Ｔ２を示し、図１６（Ｂ）は、再コンパイル対象として検出された構成要素のコンパイル単位を、グラフＳＧ２の依存関係に基づき並列コンパイルを含んでコンパイルする場合の要する時間Ｔ１を示す。
【０１１４】
図１６（Ａ）では、再コンパイル対象として検出された構成要素の各コンパイル単位が予め定められた順序に従い、シーケンシャルにコンパイルされているために、コンパイルが完了するのに時間Ｔ２を要する。これに対して、図１６（Ｂ）では、２つ以上のコンパイル単位が並列に（同時に）コンパイルされることで、同じ再コンパイル対象として検出された構成要素をコンパイルする場合であっても、時間Ｔ２よりも短い時間Ｔ１（時間Ｔ１＜時間Ｔ２）でコンパイルを完了させることができる。
【０１１５】
依存関係を検出する処理の変形例を説明する。変形例では、上記に述べた依存関係処理部２１４は、再コンパイルされた部分についてのみ、依存関係を検出し、依存関係グラフＳＧを作成（元の依存関係グラフＳＧを更新）する。この方法によれば、ＨＭＩプログラムの全体を分析して依存関係グラフを作成するケースよりも、高速に、依存関係を検出しして依存関係グラフＳＧを作成することが可能となる。
【０１１６】
また、依存関係処理部２１４は、依存関係を比較的容易に検出可能な実行可能ＨＭＩプログラムＥＰの実行可能コードから、当該依存関係を検出したが、検出先はＨＭＩプログラムのソースコードであってもよく、または、コンパイルの過程で取得される中間言語のソースコードであってもよい。コンパイルの過程で取得される中間言語のソースコードから依存関係を検出する場合には、字句解析、構文解析および意味解析などが必要とされるが、実行可能コードでは、これら解析処理を必要とせず、その分、依存関係の検出を容易かつ高速に実施することができる。
【０１１７】
また、ＨＭＩプログラムの構成要素について変更される頻度に応じてコンパイルする時期を変更してもよい。たとえば、予め定められた時間内で変更された回数（変更頻度）が閾値以下の構成要素はプログラム編集時などにバックグランドで実施するが、頻度が閾値を超える構成要素は、編集完了後のコンパイル時に実施することにより、ＨＭＩプログラムの全体のコンパイル時間を削減することができる。
【０１１８】
また、上記の実施の形態１では、コンパイルを含むＨＭＩプログラムの作成環境をＰＣ１００に備えるようにしたが、ＰＣ１００に限定されずプログラマブルターミナル４に当該環境を備えるようにしてもよい。ＰＣ１００は、タブレット型の端末であってもよい。
【０１１９】
[実施の形態２]
実施の形態２は、実施の形態１の変形例を示す。実施の形態２では、ＨＭＩプログラムは、他のアプリケーションプログラムの変数，関数等の情報を共有する。たとえば、他のアプリケーションプログラムは、プログラマブルターミナル４（他のプログラム作成装置に相当）が実行するプログラムを含み得る。この場合には、テーブルＴＢにおいて、上記の共有される構成要素について、種類ＴＢ１、変更の種類ＴＢ２、依存関係の伝搬先ＴＢ３および伝搬形態ＴＢ４を有する。
【０１２０】
ＰＣ１００において、ＨＭＩプログラムと他のアプリケーションプログラムを開発する場合に、他のプリケーションプログラムの変数，関数等の定義が変更された場合は、依存関係に基づく変更通知がＰＣ１００に対して出力される。ＰＣ１００のコンパイラ部２１２は当該変更の通知を受けると、テーブルＴＢを通知内容（構成要素の種類と変更内容）に基づき検索し、変更の影響が及ぶ関係である依存関係を有した他の構成要素を検出する。検出された構成要素をコンパイルする対象として特定し、特定された構成要素を例えば、バックグランドでコンパイルする。
【０１２１】
同様に、プログラマブルターミナル４でも、ＰＣ１００から共有された構成要素の変更の通知を受けると、バックグランドでコンパイルを実施する。なお、ＰＣ１００のＨＭＩプログラムの構成要素を共有するプログラムを有する外部の装置は、プログラマブルターミナル４に限定されない。
【０１２２】
ＰＣ１００上において、他のアプリケーションプログラムと連携するＨＭＩプログラムを作成（編集，コンパイル）またはデバッグする場合に、上記の通り既にバックグランドでコンパイルされたＨＭＩプログラムを用いることができる。
【０１２３】
これにより、連携先のプログラム作成装置の他のアプリケーションプログラムに変更があったとしても、ＨＭＩプログラムのコンパイル所要時間が長くなることはない。また、ＨＭＩプログラムをコンパイルしながらデバッグする場合のデバック効率が向上する。
【０１２４】
[実施の形態３]
実施の形態３では、上述のＨＭＩプログラムをコンパイルし作成する方法を、ＰＣ１００のＣＰＵ１１０またはプログラマブルターミナル４のＣＰＵ４１１に実行させるためのプログラムが提供される。
【０１２５】
このようなプログラムは、ＰＣ１００またはプログラマブルターミナル４に付属するフレキシブルディスク、ＣＤ−ＲＯＭ（Compact  Disk-Read  Only  Memory）、ＲＯＭ、ＲＡＭおよびメモリカード１０６，４２０などのコンピュータ読み取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、ハードディスク１１４などの記録媒体にて記録させて、プログラムを提供することもできる。また、図示しないネットワークから通信インタフェース１２４，４１９を介したダウンロードによって、プログラムを提供することもできる。
【０１２６】
なお、プログラムは、ＰＣ１００またはプログラマブルターミナル４のＯＳ（オペレーティングシステム）の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずＯＳと協働して処理が実行される。このようなモジュールを含まないプログラムも、実施の形態３のプログラムに含まれ得る。
【０１２７】
また、実施の形態３にかかるプログラムは他のプログラムの一部に組込まれて提供されるものであってもよい。その場合にも、プログラム自体には上記他のプログラムに含まれるモジュールが含まれず、他のプログラムと協働して処理が実行される。このような他のプログラムに組込まれたプログラムも、実施の形態３にかかるプログラムに含まれ得る。
【０１２８】
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
【０１２９】
[実施の形態の利点]
実施の形態の背景として、プログラムをコンパイルして実行可能コードを生成する方法は、「インタプリタ型」に比べると、コンパイル時間を要することから一般的に実行可能となるまで時間を要する。具体的には、コンパイルにより実行可能コードを生成する場合、「コンパイル→プログラムの修正→プログラムの実行」のサイクルが繰返される。
【０１３０】
これに対して、実施の形態によれば、ＨＭＩプログラムの再コンパイル時に、コンパイルの対象を変更があった構成要素に限定していること、並列にコンパイル可能な構成要素は並列にコンパイルすること、および予め指定された粒度に従う「構成要素」のコンパイル単位でコンパイルが実施されることで、上記のサイクルにおけるコンパイルの所要時間が短縮される（図１６参照）。これにより、ＨＭＩプログラムの開発効率が改善され得る。
【０１３１】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１３２】
４  プログラマブルターミナル、１００  ＰＣ，２００  プログラム開発部、２１０  プログラム作成部、２１１  プログラム編集部、２１２  コンパイラ部、２１３  コンパイル対象検出部、２１４  依存関係処理部、２１５  並列対象検出部、２１６  転送部、２２４  記憶部、２３０  ランタイム、ＥＰ  実行可能ＨＭＩプログラム、ＰＲ  ＨＭＩプログラム、ＳＣ  ソースコード、ＳＣ２  並列コンパイル情報、ＳＧ  依存関係グラフ、ＳＧ１  部分グラフ、ＳＧ２  単純化されたグラフ、ＳＶ  ソースコード変更情報、Ｔ１，Ｔ２  時間、ＴＢ  テーブル。
【図１】
2018151936.tif 000003
【図２】
2018151936.tif 000004
【図３】
2018151936.tif 000005
【図４】
2018151936.tif 000006
【図５】
2018151936.tif 000007
【図６】
2018151936.tif 000008
【図７】
2018151936.tif 000009
【図８】
2018151936.tif 000010
【図９】
2018151936.tif 000011
【図１０】
2018151936.tif 000012
【図１１】
2018151936.tif 000013
【図１２】
2018151936.tif 000014
【図１３】
2018151936.tif 000015
【図１４】
2018151936.tif 000016
【図１５】
2018151936.tif 000017
【図１６】
2018151936.tif 000018