(57)【要約】【課題】ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語に変換される前の制御アプリケーションの状態でデバッグする。【解決手段】本開示に係るエンジニアリング装置１０は、制御アプリケーションから、ターゲットハードウェア２０を動作させる実行コードを生成する。エンジニアリング装置１０は、制御アプリケーションに含まれる制御ロジックを制御ロジックコードに変換するアルゴリズム変換部１０２と、制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを出力する型管理部１０３と、機能ブロックのインスタンスをメモリに割り当てるメモリ割り当てコードを出力するインスタンス管理部１０４と、制御ロジックコード、型定義コード及びメモリ割り当てコードに基づいて、実行コードを生成するビルド制御部１０６と、を備える。【選択図】図３
2020071833.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットハードウェアの制御用に第１のプログラミング言語で作成された制御アプリケーションから、該ターゲットハードウェアを動作させる実行コードを生成するエンジニアリング装置であって、
前記制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換するアルゴリズム変換部と、
前記制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、前記第２のプログラミング言語で表現して出力する型管理部と、
前記制御アプリケーションに含まれる前記機能ブロックのインスタンスを前記ターゲットハードウェア上のメモリに割り当てるメモリ割り当てコードを、前記第２のプログラミング言語で表現して出力するインスタンス管理部と、
前記ターゲットハードウェア向けのコンパイラ・リンカを用いて、前記制御ロジックコード、前記型定義コード及び前記メモリ割り当てコードに基づいて、前記実行コードを生成するビルド制御部と、を備えるエンジニアリング装置。
【請求項２】
請求項１に記載のエンジニアリング装置において、
前記ビルド制御部は、複数のコンパイラ・リンカから前記ターゲットハードウェア向けの前記コンパイラ・リンカを選択する、エンジニアリング装置。
【請求項３】
請求項１又は２に記載のエンジニアリング装置において、
前記実行コードから前記データブロック構造のメンバ情報及びサイズ情報を抽出するシンボル解析部をさらに備える、エンジニアリング装置。
【請求項４】
請求項３に記載のエンジニアリング装置において、
前記データブロック構造を格納するインスタンス・型一覧ＤＢをさらに備え、
前記シンボル解析部は、前記インスタンス・型一覧ＤＢに格納されている前記データブロック構造に、前記メンバ情報及び前記サイズ情報を付与する、エンジニアリング装置。
【請求項５】
請求項１から４のいずれか一項に記載のエンジニアリング装置において、
前記ビルド制御部は、前記実行コードを生成する際に、前記コンパイラ・リンカを用いて、前記ターゲットハードウェア向けにプリコンパイルされた通信サービスプログラム、制御サービスプログラム及びライブラリをリンクし、
前記通信サービスプログラムは、前記実行コードが前記ターゲットハードウェア上で実行される際に、前記エンジニアリング装置と情報の送受信を行い、
前記制御サービスプログラムは、前記実行コードが前記ターゲットハードウェア上で実行される際に、前記実行コードの実行をスケジューリングする、エンジニアリング装置。
【請求項６】
請求項５に記載のエンジニアリング装置において、
前記ターゲットハードウェアは、ローディング機能を有する通信サービスを実装している、エンジニアリング装置。
【請求項７】
ターゲットハードウェアの制御用に第１のプログラミング言語で作成された制御アプリケーションから、該ターゲットハードウェアを動作させる実行コードを生成するエンジニアリング装置の制御方法であって、
前記制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換するステップと、
前記制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、前記第２のプログラミング言語で表現して出力するステップと、
前記制御アプリケーションに含まれる前記機能ブロックのインスタンスを前記ターゲットハードウェア上のメモリに割り当てるメモリ割り当てコードを、前記第２のプログラミング言語で表現して出力するステップと、
前記ターゲットハードウェア向けのコンパイラ・リンカを用いて、前記制御ロジックコード、前記型定義コード及び前記メモリ割り当てコードに基づいて、前記実行コードを生成するステップと、を含むエンジニアリング装置の制御方法。
【請求項８】
ターゲットハードウェアの制御用に第１のプログラミング言語で作成された制御アプリケーションから、該ターゲットハードウェアを動作させる実行コードを生成するエンジニアリング装置を制御するプログラムであって、
前記エンジニアリング装置に、
前記制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換するステップと、
前記制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、前記第２のプログラミング言語で表現して出力するステップと、
前記制御アプリケーションに含まれる前記機能ブロックのインスタンスを前記ターゲットハードウェア上のメモリに割り当てるメモリ割り当てコードを、前記第２のプログラミング言語で表現して出力するステップと、
前記ターゲットハードウェア向けのコンパイラ・リンカを用いて、前記制御ロジックコード、前記型定義コード及び前記メモリ割り当てコードに基づいて、前記実行コードを生成するステップと、を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、エンジニアリング装置、エンジニアリング装置の制御方法及びプログラムに関する。
【背景技術】
【０００２】
従来、生産現場などにおいて、生産プロセス及び生産設備を制御するための制御システムが構築されている。近年、生産現場において様々な付加価値を生み出すため、制御システムは、データ収集・解析に基づく予兆保全、及びセンサ・アクチュエータレベルでのリアルタイム制御などのような多様な処理を行うようになってきている。
【０００３】
制御システムは、このような多様な処理を行うため、例えば、分散制御システム（ＤＣＳ：Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃｏｎｔｒｏｌ  Ｓｙｓｔｅｍ）、プログラマブルロジックコントローラ（ＰＬＣ：Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）、汎用的なＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、コンピューティング機能を持ったゲートウェイ、インテリジェントなセンサ・アクチュエータ、クラウドコンピュータ、及びフォグコンピュータなどのような様々な機器を含むようになってきている。
【０００４】
制御システムにおいて制御対象となる機器（以下「ターゲットハードウェア」とも称する）は、制御アプリケーションによって制御される。
【０００５】
制御アプリケーションは、通常、制御対象となるターゲットハードウェアに対応した開発環境においてエディタなどを用いて作成される。エディタは、制御アプリケーションを開発するためのプログラミング言語に対応しており、例えば、ラダー言語エディタ、フローチャートエディタ又はスクリプトエディタなどであり得る。
【０００６】
制御アプリケーションは、通常、コンパイラなどによって、ターゲットハードウェアのプロセッサが直接実行可能な実行コードに変換される。実行コードは、ターゲットハードウェア内のメモリに格納される。コンパイラは、開発環境が有している場合もあるし、ターゲットハードウェアが有している場合もある。ターゲットハードウェアは、メモリに格納されている実行コードをプロセッサで解釈して実行する。
【０００７】
制御アプリケーションを作成する開発環境は、制御対象となるターゲットハードウェアに特化されていて、ターゲットハードウェア毎に異なる開発環境であることが多い。このように開発環境に機器依存性があると、オペレータが多様な開発環境を使いこなす必要があるため、エンジニアリング効率が低下するおそれがあった。
【０００８】
このような開発環境の機器依存性に対処するためには、アプリケーションのユーザプログラムを機器に依存しない形式で実行できるようにし、また複数の記述言語で記述されたアプリケーションに対して同等のデバッグ機能を提供することを実現しなければならない。上記前者のユーザプログラムの機器依存性に対処する方法として、例えば、特許文献１には、機器依存のシーケンス命令プログラム（制御アプリケーション）を、汎用的な高級言語で記述されたプログラムに変換する発明が開示されている。また、特許文献２には、機器依存のシーケンス命令プログラム（制御アプリケーション）を複数のブロックに分割し、ブロック毎に汎用的な高級言語で記述されたプログラムに変換する発明が開示されている。特許文献１及び２に記載の発明では、高級言語で記述されたプログラムが開発環境においてコンパイルされて実行コードが生成される。そして、実行コードを受け取ったターゲットハードウェアが実行コードを実行する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平７−２９５６１２号公報
【特許文献２】特開２００２−９９３１２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１及び２に記載の発明では、ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語に変換される前の制御アプリケーションの状態ではデバッグすることができないという課題があった。
【００１１】
そこで、本開示は、ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語に変換される前の制御アプリケーションの状態でデバッグすることが可能なエンジニアリング装置、エンジニアリング装置の制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
幾つかの実施形態に係るエンジニアリング装置は、ターゲットハードウェアの制御用に第１のプログラミング言語で作成された制御アプリケーションから、該ターゲットハードウェアを動作させる実行コードを生成するエンジニアリング装置であって、前記制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換するアルゴリズム変換部と、前記制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、前記第２のプログラミング言語で表現して出力する型管理部と、前記制御アプリケーションに含まれる前記機能ブロックのインスタンスを前記ターゲットハードウェア上のメモリに割り当てるメモリ割り当てコードを、前記第２のプログラミング言語で表現して出力するインスタンス管理部と、前記ターゲットハードウェア向けのコンパイラ・リンカを用いて、前記制御ロジックコード、前記型定義コード及び前記メモリ割り当てコードに基づいて、前記実行コードを生成するビルド制御部と、を備える。このようなエンジニアリング装置によれば、ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語（第２のプログラミング言語）に変換される前の制御アプリケーションの状態でデバッグすることが可能である。より具体的には、エンジニアリング装置は、第１プログラミング言語で作成された制御アプリケーションから、制御ロジックとデータとを分離して管理するため、第２のプログラミング言語で表現された制御ロジックコード、型定義コード及びメモリ割り当てコードから生成された実行コードをデバッグする際、第２のプログラミング言語に変換される前の制御アプリケーションに対して、デバッグを実行することができる。
【００１３】
一実施形態に係るエンジニアリング装置において、前記ビルド制御部は、複数のコンパイラ・リンカから前記ターゲットハードウェア向けの前記コンパイラ・リンカを選択してもよい。このように、ビルド制御部が、複数のコンパイラ・リンカからターゲットハードウェア向けのコンパイラ・リンカを選択することにより、エンジニアリング装置は、様々な種類のターゲットハードウェアに対応した実行コードを生成することができる。
【００１４】
一実施形態に係るエンジニアリング装置において、エンジニアリング装置は、前記実行コードから前記データブロック構造のメンバ情報及びサイズ情報を抽出するシンボル解析部をさらに備えもよい。このように、シンボル解析部が、データブロック構造のメンバ情報及びサイズ情報を抽出することにより、データブロック内のオフセット位置を取得することができる。
【００１５】
一実施形態に係るエンジニアリング装置において、エンジニアリング装置は、前記データブロック構造を格納するインスタンス・型一覧ＤＢをさらに備え、前記シンボル解析部は、前記インスタンス・型一覧ＤＢに格納されている前記データブロック構造に、前記メンバ情報及び前記サイズ情報を付与してもよい。このように、シンボル解析部が、メンバ情報及びサイズ情報を付与することにより、データブロック内のオフセット位置の取得が可能となる。
【００１６】
一実施形態に係るエンジニアリング装置において、前記ビルド制御部は、前記実行コードを生成する際に、前記コンパイラ・リンカを用いて、前記ターゲットハードウェア向けにプリコンパイルされた通信サービスプログラム、制御サービスプログラム及びライブラリをリンクし、前記通信サービスプログラムは、前記実行コードが前記ターゲットハードウェア上で実行される際に、前記エンジニアリング装置と情報の送受信を行い、前記制御サービスプログラムは、前記実行コードが前記ターゲットハードウェア上で実行される際に、前記実行コードの実行をスケジューリングしてもよい。このように、実行コードを生成する際に、ターゲットハードウェア向けにプリコンパイルされた通信サービスプログラム、制御サービスプログラム及びライブラリをリンクすることにより、既設のターゲットハードウェアに対しても、後から送信した実行コードを実行させることができる。
【００１７】
一実施形態に係るエンジニアリング装置において、前記ターゲットハードウェアは、ローディング機能を有する通信サービスを実装していてもよい。このように、ターゲットハードウェアが、ローディング機能を有する通信サービスを実装していることにより、ターゲットハードウェアは、実行コードをダウンロードすることができる。
【００１８】
幾つかの実施形態に係るエンジニアリング装置の制御方法は、ターゲットハードウェアの制御用に第１のプログラミング言語で作成された制御アプリケーションから、該ターゲットハードウェアを動作させる実行コードを生成するエンジニアリング装置の制御方法であって、前記制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換するステップと、前記制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、前記第２のプログラミング言語で表現して出力するステップと、前記制御アプリケーションに含まれる前記機能ブロックのインスタンスを前記ターゲットハードウェア上のメモリに割り当てるメモリ割り当てコードを、前記第２のプログラミング言語で表現して出力するステップと、前記ターゲットハードウェア向けのコンパイラ・リンカを用いて、前記制御ロジックコード、前記型定義コード及び前記メモリ割り当てコードに基づいて、前記実行コードを生成するステップと、を含む。このようなエンジニアリング装置の制御方法によれば、ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語（第２のプログラミング言語）に変換される前の制御アプリケーションの状態でデバッグすることが可能である。
【００１９】
幾つかの実施形態に係るプログラムは、ターゲットハードウェアの制御用に第１のプログラミング言語で作成された制御アプリケーションから、該ターゲットハードウェアを動作させる実行コードを生成するエンジニアリング装置を制御するプログラムであって、前記エンジニアリング装置に、前記制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換するステップと、前記制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、前記第２のプログラミング言語で表現して出力するステップと、前記制御アプリケーションに含まれる前記機能ブロックのインスタンスを前記ターゲットハードウェア上のメモリに割り当てるメモリ割り当てコードを、前記第２のプログラミング言語で表現して出力するステップと、前記ターゲットハードウェア向けのコンパイラ・リンカを用いて、前記制御ロジックコード、前記型定義コード及び前記メモリ割り当てコードに基づいて、前記実行コードを生成するステップと、を実行させる。このようなプログラムによれば、ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語（第２のプログラミング言語）に変換される前の制御アプリケーションの状態でデバッグすることが可能である。
【発明の効果】
【００２０】
本開示によれば、ターゲットハードウェアで実行される実行コードをデバッグする際、高級言語に変換される前の制御アプリケーションの状態でデバッグすることが可能なエンジニアリング装置、エンジニアリング装置の制御方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００２１】
【図１】一実施形態に係るエンジニアリング装置を含む制御システムの構成例を示す図である。
【図２】一実施形態に係るエンジニアリング装置のハードウェア構成の一例を示す図である。
【図３】一実施形態に係るエンジニアリング装置の動作を説明するための図である。
【図４】図３の型管理部などの動作の一例を説明するための図である。
【図５】図３のインスタンス管理部などの動作の一例を説明するための図である。
【発明を実施するための形態】
【００２２】
以下、本発明の一実施形態について、図面を参照して説明する。
【００２３】
図１は、一実施形態に係るエンジニアリング装置１０を含む制御システム１の構成例を示す図である。制御システム１は、エンジニアリング装置１０と、ターゲットハードウェア２０Ａと、ターゲットハードウェア２０Ｂと、ターゲットハードウェア２０Ｃとを含む。図１においては、３台のターゲットハードウェア２０Ａ〜２０Ｃを示しているが、ターゲットハードウェアは１台以上の任意の台数であってよい。以後、ターゲットハードウェア２０Ａ〜２０Ｃについて特に区別する必要がない場合は、ターゲットハードウェア２０と総称して説明する。
【００２４】
エンジニアリング装置１０は、ターゲットハードウェア２０の制御用として第１のプログラミング言語で作成された制御アプリケーションから、ターゲットハードウェア２０が直接実行可能な実行コードを生成する。
【００２５】
第１のプログラミング言語は、特に限定されないが、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）ベースのプログラミング言語、テキストベースのプログラミング言語、又はスクリプトベースのプログラミング言語などであってよい。第１のプログラミング言語は、好適には、ＰＬＣ用の標準規格であるＩＥＣ  ６１１３１−３で定義されたプログラミング言語であってよい。ＩＥＣ  ６１１３１−３は、ラダー・ダイアグラム、ファンクション・ブロック・ダイアグラム、ストラクチャード・テキスト、インストラクション・リスト、及びシーケンシャル・ファンクション・チャートなどのプログラミング言語を定義している。
【００２６】
ターゲットハードウェア２０は、エンジニアリング装置１０が生成した実行コードによって制御される機器である。ターゲットハードウェア２０は、エンジニアリング装置１０からダウンロードして取得した実行コードを、タスク又はスレッド上で定期的に実行する。ターゲットハードウェア２０は、実行コードをイベントドリブンで実行してもよい。
【００２７】
ターゲットハードウェア２０は、一般的なコンピューティング機能を備える様々な機器であってよい。ターゲットハードウェア２０は、例えば、ＰＬＣ、ＤＣＳ、温調計、記録計、ＳＣＡＤＡ（Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）又は仮想ＤＣＳ／ＰＬＣなどであってよい。
【００２８】
ターゲットハードウェア２０は、図１に示すように、ローダ２１と、メモリ２２と、制御部２３とを備える。
【００２９】
ローダ２１は、エンジニアリング装置１０が生成した実行コードを、エンジニアリング装置１０からダウンロードして取得し、メモリ２２に格納する。
【００３０】
メモリ２２は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ-Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ-Ｏｎｌｙ  Ｍｅｍｏｒｙ）、及びＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の任意の記憶装置を有する。メモリ２２は、例えば主記憶装置、補助記憶装置、又はキャッシュメモリとして機能してもよい。メモリ２２は、ターゲットハードウェア２０に内蔵されるものに限定されず、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）等のデジタル入出力ポート等によって接続された外付け型の記憶装置であってもよい。
【００３１】
メモリ２２は、ローダ２１がエンジニアリング装置１０からダウンロードした実行コードを格納する。
【００３２】
制御部２３は、ターゲットハードウェア２０の各構成部を制御する。制御部２３は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサとして構成されてよい。
【００３３】
制御部２３は、メモリ２２に格納されている実行コードを解釈して、各種処理を実行する。
【００３４】
ターゲットハードウェア２０は、ローディング機能を有する通信サービスを実装していてよい。ターゲットハードウェア２０は、ローディング機能によって、エンジニアリング装置１０が生成した実行コードを、エンジニアリング装置１０からダウンロードして取得することができる。
【００３５】
図２は、一実施形態に係るエンジニアリング装置１０のハードウェア構成の一例を示す図である。
【００３６】
エンジニアリング装置１０は、メモリ１１と、表示装置１２と、入力装置１３と、通信Ｉ／Ｆ（インタフェース）１４と、制御部１５とを備える。エンジニアリング装置１０は、例えば、サーバ装置、デスクトップ型ＰＣ等の汎用コンピュータ、ファクトリーコンピュータ、ＰＬＣ等の装置、ノート型コンピュータ、又はタブレット型コンピュータなどであってよい。
【００３７】
メモリ１１は、例えば、ＨＤＤ、ＳＳＤ、ＥＥＰＲＯＭ、ＲＯＭ、及びＲＡＭ等の任意の記憶装置を有する。メモリ１１は、例えば主記憶装置、補助記憶装置、又はキャッシュメモリとして機能してもよい。メモリ１１は、エンジニアリング装置１０に内蔵されるものに限定されず、ＵＳＢ等のデジタル入出力ポート等によって接続された外付け型の記憶装置であってもよい。メモリ１１は、エンジニアリング装置１０の動作に必要な種々の情報及びプログラムを記憶する。
【００３８】
表示装置１２は、各種情報を表示する。表示装置１２は、例えば液晶ディスプレイである。表示装置１２は、ヘッドマウント型ディスプレイ、メガネ型ディスプレイ、又は腕時計型ディスプレイ等の種々の形態によって実現されてもよい。
【００３９】
入力装置１３は、エンジニアリング装置１０へのユーザからの入力を受け付ける。入力装置１３は、例えばキーボード又はマウス等である。入力装置１３は、音声情報を入力するマイク、又は画像情報を入力するカメラ等であってもよい。入力装置１３は、タッチパネルであってもよく、この場合、入力装置１３が表示装置１２の機能を兼ねていてもよい。
【００４０】
通信Ｉ／Ｆ１４は、有線通信又は無線通信を介して、図１に示したターゲットハードウェア２０と通信を行う。
【００４１】
制御部１５は、エンジニアリング装置１０の各構成部を制御する。制御部１５は、例えばＣＰＵなどのプロセッサとして構成されてよい。プロセッサにより実行されるプログラムは、例えば、制御部１５が備えるメモリに格納されていてもよいし、メモリ１１に格納されていてもよい。
【００４２】
続いて、図３に示す制御システム１を参照して、エンジニアリング装置１０の動作について説明する。図３に示す制御システム１は、図１に示した制御システム１に対応する。図３においては、エンジニアリング装置１０の内部を機能的な表現で示している。
【００４３】
エンジニアリング装置１０は、機能ブロックとして、エディタＵＩ（Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）１０１と、アルゴリズム変換部１０２と、型管理部１０３と、インスタンス管理部１０４と、ビルド制御部１０６と、シンボル解析部１１２と、デバッグＵＩ１１３とを含む。エディタＵＩ１０１、アルゴリズム変換部１０２、型管理部１０３、インスタンス管理部１０４、ビルド制御部１０６、シンボル解析部１１２、及びデバッグＵＩ１１３の機能は、図２に示した制御部１５などによって実行されてよい。
【００４４】
エンジニアリング装置１０は、図２に示したメモリ１１に格納可能なデータとして、インスタンス・型一覧ＤＢ（Ｄａｔａ  Ｂａｓｅ）１０５、通信サービスプログラム１０７、制御サービスプログラム１０８、ライブラリ１０９、及びコンパイラ・リンカ群１１０を含む。
【００４５】
エディタＵＩ１０１は、ターゲットハードウェア２０を制御するための制御アプリケーションを開発するための言語エディタである。エディタＵＩ１０１は、上述した第１のプログラミング言語で、制御アプリケーションを作成することが可能である。
【００４６】
アルゴリズム変換部１０２は、エディタＵＩ１０１によって作成された制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコード１５１に変換する。第２のプログラミング言語は、特に限定されないが、汎用的な高級言語などであってよい。第２のプログラミング言語は、例えば、Ｃ言語又はＣ＋＋言語などであってよい。
【００４７】
型管理部１０３は、エディタＵＩ１０１によって作成された制御アプリケーションに含まれる機能ブロックが持つデータを、データブロックでインスタンス・型一覧ＤＢ１０５に格納して管理する。型管理部１０３は、制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コード１５２を、第２のプログラミング言語で表現して出力する。
【００４８】
インスタンス管理部１０４は、エディタＵＩ１０１によって作成された制御アプリケーションに含まれる機能ブロックインスタンスの一覧を、インスタンス・型一覧ＤＢ１０５に格納して管理する。インスタンス管理部１０４は、第２のプログラミング言語で表現されたメモリ割り当てコード１５３を出力する。メモリ割り当てコード１５３は、制御アプリケーション含まれる機能ブロックインスタンスをターゲットハードウェア２０のメモリ２２に割り当てる際の実位置を示す。
【００４９】
ビルド制御部１０６は、第２のプログラミング言語で表現された制御ロジックコード１５１、型定義コード１５２及びメモリ割り当てコード１５３をコンパイルして、ターゲットハードウェア２０に対応する実行コード１５４（実行コード１５４Ａ〜１５４Ｃのいずれか）を生成する。
【００５０】
実行コード１５４Ａは、ターゲットハードウェア２０Ａを直接実行可能な実行コードである。実行コード１５４Ｂは、ターゲットハードウェア２０Ｂを直接実行可能な実行コードである。実行コード１５４Ｃは、ターゲットハードウェア２０Ｃを直接実行可能な実行コードである。以後、実行コード１５４Ａ〜１５４Ｃについて特に区別する必要がない場合は、実行コード１５４と総称して説明する。
【００５１】
コンパイラ・リンカ群１１０は、複数のコンパイラ・リンカ１１１Ａ〜１１１Ｃを格納している。図３に示す例では、コンパイラ・リンカ群１１０は、３つのコンパイラ・リンカ１１１Ａ〜１１１Ｃを格納しているが、コンパイラ・リンカ群１１０が格納しているコンパイラ・リンカの数は、１以上の任意の個数であってよい。以後、コンパイラ・リンカ１１１Ａ〜１１１Ｃについて特に区別する必要がない場合は、コンパイラ・リンカ１１１と総称して説明する。
【００５２】
コンパイラ・リンカ１１１は、汎用のコンパイラ・リンカであってよい。コンパイラ・リンカ１１１Ａは、ターゲットハードウェア２０Ａ向けの汎用のコンパイラ・リンカである。コンパイラ・リンカ１１１Ｂは、ターゲットハードウェア２０Ｂ向けの汎用のコンパイラ・リンカである。コンパイラ・リンカ１１１Ｃは、ターゲットハードウェア２０Ｃ向けの汎用のコンパイラ・リンカである。
【００５３】
ビルド制御部１０６は、制御ロジックコード１５１、型定義コード１５２及びメモリ割り当てコード１５３をコンパイルする際、コンパイラ・リンカ群１１０に格納されている複数のコンパイラ・リンカ１１１Ａ〜１１１Ｃから、対象とするターゲットハードウェア２０に対応するコンパイラ・リンカ１１１を選択してコンパイルを実行する。
【００５４】
ビルド制御部１０６は、例えば、ターゲットハードウェア２０Ａ用の実行コード１５４Ａを生成する場合、コンパイラ・リンカ１１１Ａを用いて、制御ロジックコード１５１、型定義コード１５２及びメモリ割り当てコード１５３をコンパイルする。
【００５５】
このように、ビルド制御部１０６が、ターゲットハードウェア２０に対応するコンパイラ・リンカ１１１を複数のコンパイラ・リンカ１１１Ａ〜１１１Ｃから選択することにより、エンジニアリング装置１０は、様々な種類のターゲットハードウェア２０に対応した実行コードを生成することができる。
【００５６】
ビルド制御部１０６は、コンパイラ・リンカ１１１を用いて、制御ロジックコード１５１、型定義コード１５２及びメモリ割り当てコード１５３をコンパイルする際、通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９をリンクする。
【００５７】
通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９は、対象とするターゲットハードウェア２０向けに予めプリコンパイルされている。なお、通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９は、ターゲットハードウェア２０のファームウェアとして、予めターゲットハードウェア２０にインストールされていてもよい。
【００５８】
通信サービスプログラム１０７は、実行コード１５４がターゲットハードウェア２０上で実行される際に、ターゲットハードウェア２０がエンジニアリング装置１０と情報の送受信を行うためのプログラムである。
【００５９】
制御サービスプログラム１０８は、実行コード１５４がターゲットハードウェア２０上で実行される際に、ターゲットハードウェア２０が実行コード１５４の実行をスケジューリングするためのプログラムである。
【００６０】
ライブラリ１０９は、予め用意された各種ライブラリである。
【００６１】
ビルド制御部１０６は、このように、選択したコンパイラ・リンカ１１１を用いて、制御ロジックコード１５１、型定義コード１５２及びメモリ割り当てコード１５３をコンパイルし、さらに、通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９をリンクすることで、実行コード１５４を生成する。ビルド制御部１０６は、エンジニアリング装置１０内の通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９をリンクする静的リンクを実行してもよいし、予めターゲットハードウェア２０にインストールされている通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９をリンクする動的リンクを実行してもよい。
【００６２】
このように、通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９をリンクして実行コード１５４を生成することで、エンジニアリング装置１０は、制御システム１内の既設のターゲットハードウェア２０に対しても、後から送信した実行コード１５４を実行させることができる。
【００６３】
また、通信サービスプログラム１０７、制御サービスプログラム１０８及びライブラリ１０９をリンクして実行コード１５４を生成することで、エンジニアリング装置１０は、ターゲットハードウェア２０をアップデートする際に、ターゲットハードウェア２０のファームウェアをアップデートすることなく、アップデートした実行コード１５４をターゲットハードウェア２０に実行させることができる。また、エンジニアリング装置１０は、既設のターゲットハードウェア２０に対して、例えばユーザカスタマイズ機能のような追加機能を後からアドインで追加することができる。
【００６４】
シンボル解析部１１２は、実行コード１５４の中から、インスタンス・型一覧ＤＢ１０５に格納されているデータブロック構造のメンバ情報及びサイズ情報を抽出する。シンボル解析部１１２は、抽出したメンバ情報及びサイズ情報を、インスタンス・型一覧ＤＢ１０５に格納されているデータブロック構造に付与する。
【００６５】
通信Ｉ／Ｆ１４は、図２に示した通信Ｉ／Ｆ１４に対応する。実行コード１５４は、通信Ｉ／Ｆ１４を介して、ターゲットハードウェア２０にダウンロードされる。ターゲットハードウェア２０にダウンロードされた実行コード１５４に含まれる通信サービスプログラム１０７は、通信Ｉ／Ｆ１４を介して、エンジニアリング装置１０と通信を行うことができる。通信サービスプログラム１０７は、例えば、エンジニアリング装置１０とデバッグ等の通信を行うことができる。
【００６６】
デバッグＵＩ１１３は、インスタンス・型一覧ＤＢ１０５を参照して、インスタンス・型一覧ＤＢ１０５で管理されているデータブロックの、ターゲットハードウェア２０内のメモリ２２におけるアドレス位置を特定する。
【００６７】
デバッグＵＩ１１３は、ターゲットハードウェア２０にダウンロードされた実行コード１５４に含まれる通信サービスプログラム１０７と通信を行うことで、特定したアドレス位置のデータをモニタリングすることができる。デバッグＵＩ１１３は、ターゲットハードウェア２０Ａ〜２０Ｃのそれぞれについて、特定したアドレス位置のデータをモニタリングすることができる。また、デバッグＵＩ１１３は、ターゲットハードウェア２０にダウンロードされた実行コード１５４に含まれる通信サービスプログラム１０７と通信を行うことで、特定したアドレス位置のデータを変更することができる。デバッグＵＩ１１３は、ターゲットハードウェア２０Ａ〜２０Ｃのそれぞれについて、特定したアドレス位置のデータを変更することができる。
【００６８】
図３においては、デバッグＵＩ１１３がエディタＵＩ１０１から独立した機能ブロックであるとして示しているが、エディタＵＩ１０１がデバッグＵＩ１１３の機能を兼ねていてもよい。
【００６９】
続いて、具体例を示しつつ、エンジニアリング装置１０の動作について、より詳細に説明する。
【００７０】
エディタＵＩ１０１によって作成される制御アプリケーションは、機能毎にファンクションブロック等の機能ブロック単位で作成される。制御アプリケーションは、機能ブロックを組み合わせて全体が構成されている。機能ブロックは、ローカル変数及び入出力変数などのデータと、制御プログラムとを含む。
【００７１】
このように組み合わされた機能ブロックが、ターゲットハードウェア２０上で実行されることで、全体の制御アプリケーションが動作する。
【００７２】
エンジニアリング装置１０は、機能ブロックに含まれる制御アルゴリズムと、制御アルゴリズムによって使用されるデータとを分離して管理する。
【００７３】
図４を参照して、エンジニアリング装置１０が制御アルゴリズムによって使用されるデータを管理する様子を説明する。
【００７４】
図４に示す例では、制御アプリケーションには機能ブロックＡ及び機能ブロックＢの２つの機能ブロックが含まれている。
【００７５】
型管理部１０３は、機能ブロックＡ及び機能ブロックＢを解析して、機能ブロックＡ及び機能ブロックＢにおいて使用されるデータを抽出する。図４に示す例においては、型管理部１０３は、機能ブロックＡから、「ｄａｔａ１」、「ｄａｔａ２」及び「ｄａｔａ３」の３つのデータを抽出する。また、型管理部１０３は、機能ブロックＢから、「ｉｎｐｕｔ１」、「ｏｕｔｐｕｔ１」、「ｄａｔａ１」及び「ｄａｔａ２」の４つのデータを抽出する。
【００７６】
型管理部１０３は、機能ブロックＡ及び機能ブロックＢからデータを抽出した段階では、各データの型のターゲット上で必要とするサイズを確定していない。これは、各データは、構造体のような複雑な型の可能性があるためである。また、各データは、ターゲットハードウェア２０のアーキテクチャに依存して、同じ型でもサイズが異なることがあるためである。
【００７７】
型管理部１０３は、抽出したデータブロック構造に対応する型定義コード１５２を、第２のプログラミング言語で表現する。型定義コード１５２は、構造的なデータ構造で表現されてもよい。構造的なデータ構造は、例えば、クラス（ｃｌａｓｓ）又は構造体（ｓｔｒｕｃｔ）などであってよい。
【００７８】
型定義コード１５２は、ターゲットハードウェア２０に対応するコンパイラ・リンカ１１１でコンパイルされ、実行コード１５４が生成される。
【００７９】
シンボル解析部１１２は、実行コード１５４から、型定義コード１５２の型のメンバのサイズ及びオフセット位置を抽出する。
【００８０】
シンボル解析部１１２は、抽出した情報を、型管理部１０３が管理してインスタンス・型一覧ＤＢ１０５に格納しているデータブロック構造に付与する。図４においては、機能ブロックＡから抽出したデータ（ｄａｔａ１、ｄａｔａ２、ｄａｔａ３）に、オフセット位置２０１が付与された様子を示している。また、機能ブロックＢから抽出したデータ（ｉｎｐｕｔ１、ｏｕｔｐｕｔ１、ｄａｔａ１、ｄａｔａ２）に、オフセット位置２０２が付与された様子を示している。
【００８１】
このように、インスタンス・型一覧ＤＢ１０５に格納されているデータブロック構造に、シンボル解析部１１２によって抽出されたオフセット位置などの情報が付与されることで、エンジニアリング装置１０は、データブロック内の各データのオフセット位置を取得することができる。
【００８２】
続いて、図５を参照して、エンジニアリング装置１０が、各機能ブロックに対応する各データブロックを、ターゲットハードウェア２０のメモリ２２上に配置していくインスタンス管理について説明する。
【００８３】
図５に示す例においては、エディタＵＩ１０１が作成した制御アプリケーションは、機能ブロックＡ〜Ｄの４つの機能ブロックを含んでいる。
【００８４】
インスタンス管理部１０４は、エディタＵＩ１０１が作成した制御アプリケーションに含まれる機能ブロックの呼び出し階層を解析して、機能ブロックインスタンスの一覧データ３０２を作成する。
【００８５】
この時点では、各機能ブロックインスタンスのサイズが未確定であるため、インスタンス管理部１０４は、ターゲットハードウェア２０のメモリ２２への機能ブロックインスタンスのマッピングは行わない。
【００８６】
インスタンス管理部１０４は、マッピングを行う代わりに、各機能ブロックインスタンスのＩＤに該当する、コンパイル後に決定される各機能ブロックインスタンスのサイズのリスト情報であるインスタンスリストをメモリ割り当てコード１５３として出力する。また、インスタンス管理部１０４は、インスタンスアドレステーブル３０３を指すポインタを含むメモリ割り当てコード１５３を出力する。
【００８７】
インスタンスアドレステーブル３０３には、ターゲットハードウェア２０のメモリ２２上における実際の機能ブロックインスタンスのアドレスを格納する必要がある。インスタンスアドレステーブル３０３に、機能ブロックインスタンスのアドレスを格納する処理は、ターゲットハードウェア２０にダウンロードされた制御サービスプログラム１０８が実行する。
【００８８】
制御サービスプログラム１０８は、ターゲットハードウェア２０において実行コード１５４が実行を開始すると、メモリ割り当てコード１５３に含まれるインスタンスリストを参照して、各機能ブロックインスタンスのサイズに対応するメモリ領域を、メモリ２２に確保する。
【００８９】
制御サービスプログラム１０８は、メモリ２２に確保した各機能ブロックインスタンスのメモリ領域のアドレスを、インスタンスアドレステーブル３０３に格納する。
【００９０】
図３に示したデバッグＵＩ１１３は、デバッグ対象のデータが所属する機能ブロックインスタンスのＩＤと、該機能ブロックインスタンスのアドレスの先頭からのオフセット位置とを、通信Ｉ／Ｆ１４を介して、ターゲットハードウェア２０にダウンロードされた通信サービスプログラム１０７に渡す。
【００９１】
通信サービスプログラム１０７は、メモリ２２を参照して、受け取ったＩＤに対応する機能ブロックインスタンス内のデータにアクセスする。
【００９２】
これにより、エンジニアリング装置１０のデバッグＵＩ１１３は、特定の機能ブロックインスタンスに対して、データのモニタリング、又はデータの値の変更といったデバッグ機能を実現することができる。
【００９３】
以上のような一実施形態に係るエンジニアリング装置１０によれば、ターゲットハードウェア２０で実行される実行コードをデバッグする際、高級言語（第２のプログラミング言語）に変換される前の制御アプリケーションの状態でデバッグすることができる。より具体的には、エンジニアリング装置１０では、アルゴリズム変換部１０２は、第１プログラミング言語で作成された制御アプリケーションに含まれる制御ロジックを、第２のプログラミング言語で表現された制御ロジックコードに変換し、型管理部１０３は、制御アプリケーションに含まれる機能ブロックが持つデータのデータブロック構造に対応する型定義コードを、第２のプログラミング言語で表現して出力し、インスタンス管理部１０４は、制御アプリケーションに含まれる機能ブロックのインスタンスをターゲットハードウェア２０上のメモリに割り当てるメモリ割り当てコードを、第２のプログラミング言語で表現して出力する。そして、ビルド制御部１０６は、ターゲットハードウェア２０向けのコンパイラ・リンカ１１１を用いて、制御ロジックコード、型定義コード及びメモリ割り当てコードに基づいて、実行コードを生成する。このように、エンジニアリング装置１０は、第１プログラミング言語で作成された制御アプリケーションから、制御ロジックとデータとを分離して管理するため、第２のプログラミング言語で表現された制御ロジックコード、型定義コード及びメモリ割り当てコードから生成された実行コードをデバッグする際、第２のプログラミング言語に変換される前の制御アプリケーションに対して、デバッグを実行することができる。
【００９４】
本開示は、その精神又はその本質的な特徴から離れることなく、上述した実施形態以外の他の所定の形態で実現できることは当業者にとって明白である。従って、先の記述は例示的であり、これに限定されない。開示の範囲は、先の記述によってではなく、付加した請求項によって定義される。あらゆる変更のうちその均等の範囲内にあるいくつかの変更は、その中に包含される。
【００９５】
例えば、上述した各構成部の配置及び個数等は、上記の説明及び図面における図示の内容に限定されない。各構成部の配置及び個数等は、その機能を実現できるのであれば、任意に構成されてもよい。
【００９６】
また、本開示において、装置を中心に説明してきたが、本開示は装置の各構成部が実行するステップを含む方法、装置が備えるプロセッサにより実行される方法、プログラム、又はプログラムを記録した記憶媒体としても実現し得るものであり、本開示の範囲にはこれらも包含されるものと理解されたい。
【符号の説明】
【００９７】
１  制御システム
１０  エンジニアリング装置
１１  メモリ
１２  表示装置
１３  入力装置
１４  通信Ｉ／Ｆ
１５  制御部
２０  ターゲットハードウェア
２１  ローダ
２２  メモリ
２３  制御部
１０１  エディタＵＩ
１０２  アルゴリズム変換部
１０３  型管理部
１０４  インスタンス管理部
１０５  インスタンス・型一覧ＤＢ
１０６  ビルド制御部
１０７  通信サービスプログラム
１０８  制御サービスプログラム
１０９  ライブラリ
１１０  コンパイラ・リンカ群
１１１  コンパイラ・リンカ
１１２  シンボル解析部
１１３  デバッグＵＩ
１５１  制御ロジックコード
１５２  型定義コード
１５３  メモリ割り当てコード
１５４  実行コード
【図１】
2020071833.tif 000003
【図２】
2020071833.tif 000004
【図３】
2020071833.tif 000005
【図４】
2020071833.tif 000006
【図５】
2020071833.tif 000007