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