JP6874706B2 - アプリケーションプログラムを生成する方法、装置、プログラム - Google Patents

アプリケーションプログラムを生成する方法、装置、プログラム Download PDF

Info

Publication number
JP6874706B2
JP6874706B2 JP2018020210A JP2018020210A JP6874706B2 JP 6874706 B2 JP6874706 B2 JP 6874706B2 JP 2018020210 A JP2018020210 A JP 2018020210A JP 2018020210 A JP2018020210 A JP 2018020210A JP 6874706 B2 JP6874706 B2 JP 6874706B2
Authority
JP
Japan
Prior art keywords
execution
application program
program
instruction
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018020210A
Other languages
English (en)
Other versions
JP2019139365A (ja
Inventor
拓也 廣田
拓也 廣田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Omron Corp
Original Assignee
Omron Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Omron Corp filed Critical Omron Corp
Priority to JP2018020210A priority Critical patent/JP6874706B2/ja
Priority to US16/190,172 priority patent/US10983772B2/en
Priority to EP18206222.4A priority patent/EP3525095A1/en
Priority to CN201811355467.2A priority patent/CN110119119A/zh
Publication of JP2019139365A publication Critical patent/JP2019139365A/ja
Application granted granted Critical
Publication of JP6874706B2 publication Critical patent/JP6874706B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • G05B19/056Programming the PLC

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Automation & Control Theory (AREA)
  • Programmable Controllers (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する方法、装置、プログラムに関する。
様々な生産現場において、PLC(プログラマブルコントローラ)などの制御装置を用いたFA(Factory Automation)技術が広く普及している。近年の情報通信技術(ICT:Information and Communication Technology)の発展に伴って、このようなFA分野における制御装置においても、従来のシーケンスプログラムだけではなく、各種のアプリケーションプログラムが実行されるようになっている。
このような制御装置におけるプログラム実行は、例えば、周期実行されるタスクの単位でリソースなどの割当てが管理される。例えば、国際公開第2015/136973号(特許文献1)は、少なくとも2種類のタスクを周期実行する制御装置を開示する。この特許文献1に開示される制御装置は、いずれかのタスクに含まれるプログラムに対する修正によって、タスクの実行時間が変動した場合であっても、装置を安定化して動作させる技術を開示する。
国際公開第2015/136973号
上述のように、一定のタスク周期毎に周期実行されるタスクにおいて、プログラム実行が予め設定されたタスク周期内で完了しないような場合も存在し得る。通常、このような事態を生じ得ると応答性などの制御性能を低下させることになるので、制御装置の設計者(プログラマ)は、各タスク周期での処理が予め設定されたタスク周期内に収まるように、プログラムを作成する必要がある。この場合、1回のプログラム実行が、複数のタスク周期にまたがることもある。
一方で、例えば、オープンソースソフトウエアなどの既存のソースコードを利用して各種アプリケーションプログラムを作成するような場面も想定される。このような場合、各タスク周期での処理が予め設定されたタスク周期内で実行完了できるように、ソースコードを修正する必要があるが、このようなソースコードの修正自体が手間であり、また、デバックや事後的な変更などに手間を要するという課題がある。
本発明は、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを予め定められたタスク周期内に収まるように実行させるための環境を提供することを目的とする。
本開示の一例に従えば、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する方法が提供される。方法は、アプリケーションプログラムのソースコードの入力を受付けるステップと、アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令を付加することで、アプリケーションプログラムの実行モジュールを生成するステップとを含む。
この開示によれば、予め定められたタスク周期内に実行が完了しないアプリケーションプログラムを周期実行されるタスクとして登録した場合であっても、各タスク周期内では、予め設定された時間だけ実行させた後に中断させつつ、複数のタスク周期に亘って1回実行するような実行形態を提供できる。アプリケーションプログラムのソースを手作業で変更する必要がなく、このような複数のタスク周期に亘る実行を実現できるため、任意のアプリケーションプログラムを制御装置上で実行させることができ、制御装置をより高機能化させることができる。
上述の開示において、第1の命令は、アプリケーションプログラムの実行開始から予め設定された時間が経過すると、当該時点の実行状態を保存する命令と、保存した実行状態を復元する命令とを含む。
この開示によれば、アプリケーションプログラムの実行状態にかかわらず、予め設定された時間が経過した時点での実行状態を保存し、その後のタスク周期において、その保存した実行状態を復元できるので、任意のアプリケーションプログラムについて、複数のタスク周期に亘る実行を実現できる。
上述の開示において、第1の命令は、アプリケーションプログラムの実行開始から予め設定された時間が経過すると割込イベントを発生するように割込タイマを設定するための命令をさらに含む。
この開示によれば、予め設定された時間に応じた割込タイマを用いることで、アプリケーションプログラムに対して割当てられた時間を正確に順守することができる。
上述の開示において、第1の命令は、アプリケーションプログラムのソースコードに予め設定された中断ポイント毎に予め設定された時間が経過しているか否かを判断する命令をさらに含む。
この開示によれば、割込タイマなどを利用できないプログラム実行環境であっても、アプリケーションプログラムに対して割当てられた時間を正確に順守することができる。
上述の開示において、方法は、アプリケーションプログラムのソースコードに対して中断ポイントを挿入するステップをさらに含む。
この開示によれば、アプリケーションプログラムのソースコードに対して、要求される時間管理精度などに応じて、中断ポイントを任意の位置に挿入することができるので、アプリケーションプログラムに対する要求などに柔軟に対応できる。
上述の開示において、実行モジュールを生成するステップは、第1の命令を付加することで生成される第1の実行コードと、第1の命令が付加されていないアプリケーションプログラムのソースコードから生成された第2の実行コードとを含む、実行モジュールを生成する。
この開示によれば、実行モジュールをプログラム部品として利用する際に、複数のタスク周期に亘った実行、および、通常の実行のいずれをも柔軟に選択できる。
上述の開示において、実行モジュールを生成するステップは、実行モジュールに含まれている実行コードの状態を示す情報を含むプログラム定義情報を実行モジュールに関連付けて生成するステップを含む。
この開示によれば、実行モジュールをプログラム部品として利用する際に、プログラム定義情報を参照することで、利用対象の実行モジュールに含まれる実行コードなどを確実に知ることができ、ユーザに対する利便性などを高めることができる。
上述の開示において、実行モジュールを生成するステップは、アプリケーションプログラムのソースコードに、当該アプリケーションプログラムの実行、中断、再開に係る制御パラメータの設定を受付けるための第2の命令をさらに付加するステップを含む。
この開示によれば、実行モジュールをプログラム部品として利用する際に、制御パラメータを適切に設定することで、利用先のアプリケーションなどに応じた処理を容易に実現できる。
上述の開示において、制御パラメータは、アプリケーションプログラムの実行を中断した箇所から再開する、および、アプリケーションプログラムを最初から実行する、のいずれかを選択するための情報を含む。
この開示によれば、複数のタスク周期に亘るアプリケーションプログラムの実行の有効化および無効化を容易に選択できる。
上述の開示において、方法は、実行モジュールを参照するユーザプログラムの作成過程において、アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させる機能が有効化されているか否かに応じて、制御パラメータの設定の受付けを有効化するか否かを変化させるステップをさらに含む。
この開示によれば、実行モジュールをプログラム部品として利用する場合に、機能を有効化または無効化するのかに応じて、ユーザにより分かりやすいユーザインターフェイスを提供できる。
本開示の別の一例に従えば、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する装置が提供される。装置は、アプリケーションプログラムのソースコードの入力を受付ける手段と、アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令を付加することで、アプリケーションプログラムの実行モジュールを生成する手段とを含む。
本開示のさらに別の一例に従えば、コンピュータに、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成させるためのプログラムが提供される。プログラムはコンピュータに、アプリケーションプログラムのソースコードの入力を受付けるステップと、アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令を付加することで、アプリケーションプログラムの実行モジュールを生成するステップとを実行させる。
本発明によれば、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを予め定められたタスク周期内に収まるように実行させるための環境を提供できる。
一般的な制御装置におけるユーザプログラムの周期実行を説明するための模式図である。 ステート管理処理を加える設計変更の一例を説明するための図である。 図2に示す分割実行化されたアプリケーションプログラムの実行性能の一例を示すタイムチャートである。 本実施の形態に係る制御システムの全体構成例を示す模式図である。 本実施の形態に係る制御システムを構成する制御装置のハードウェア構成例を示すブロック図である。 本実施の形態に係る制御システムを構成するサポート装置のハードウェア構成例を示すブロック図である。 本実施の形態に係るビルド処理の概略手順を示すフローチャートである。 本実施の形態に係る分割実行を制御するための継続フラグの意義を説明するための図である。 本実施の形態に係る分割実行を制御するための分割時間の意義を説明するための図である。 本実施の形態に係るビルド処理における分割実行化インターフェイスの追加を説明するための図である。 図10に示す分割実行化に対応したビルド処理によって生成されたファンクションブロックの利用例を説明するための図である。 本実施の形態に係る分割実行に係る処理の中断/再開に係る挙動を説明するための図である。 本実施の形態に係る分割実行の処理手順の一例を示すフローチャートである。 本実施の形態に係るビルド処理における中断ポイントの挿入処理を説明するための図である。 本実施の形態に係る分割実行化における中断ポイントの任意挿入を説明するための図である。 本実施の形態に係るビルド処理によって生成された2種類の実行コードを含む実行モジュールをプログラム部品として利用する場合の手順を説明するための図である。 本実施の形態に係るビルド処理により生成される二重の実行コードを含む実行モジュールを利用する場合のユーザプログラムの作成例を説明するための図である。 本実施の形態に係るビルド処理によって生成された実行コードのみを含む実行モジュールをプログラム部品として利用する場合の手順を説明するための図である。 本実施の形態に係るビルド処理により生成される分割実行化された実行コードのみを含む実行モジュールを利用する場合のユーザプログラムの作成例を説明するための図である。
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
<A.適用例>
まず、本発明が適用される場面の一例について説明する。図1は、一般的な制御装置におけるユーザプログラムの周期実行を説明するための模式図である。以下の説明においては、制御装置の一例として、主として、PLC(プログラマブルコントローラ)を想定する。
図1(A)には、制御装置において実行されるユーザプログラム50の一例を示す。本明細書において、「ユーザプログラム」は、「システムプログラム」と区別する意味で用いられる用語である。「ユーザプログラム」は、制御対象に応じて任意に作成される命令の組合せであり、制御装置の設計者が任意に作成および修正可能である。これに対して、「システムプログラム」は、「ユーザプログラム」を実行するための実行環境や、制御装置に含まれるハードウェアの制御を実現するためのプログラムである。基本的には、「システムプログラム」は予め制御装置にインストールされている。
図1(A)に示すユーザプログラム50は、典型的には、国際電気標準会議(International Electrotechnical Commission:IEC)によって規定された国際規格IEC61131−3に従って記述された1または複数の命令からなるソースコードを包含する。ユーザプログラム50は、いずれかのタスクの一部として登録されており、当該タスクに設定される制御周期であるタスク周期毎に繰返し実行される。すなわち、あるタスク周期において、ユーザプログラム50の先頭から最終までが順次実行され、次のタスク周期においても、ユーザプログラム50の先頭から最終までが順次実行される。このようなユーザプログラム50の先頭から最終までの順次実行が予め定められたタスク周期毎に繰返されることを「周期実行」と称す。なお、タスク周期は、制御装置において周期実行できる最小の周期(以下、「制御周期」とも称す。)の整数倍として規定されてもよい。
制御装置において実行されるタスク制御プログラム(「スケジューラ」とも称される。)は、予め設定されたタスク周期毎に各タスクに含まれるプログラムを繰返し実行する。
図1(A)に示すユーザプログラム50は、シーケンス命令群52と、外部プログラムを実行するためのファンクションブロック54とを含む。ファンクションブロック54は、予め定められた実行条件が成立すると、指定されたプログラムを呼出して実行する。以下、あるタスク内で呼出されるプログラムを、便宜上「アプリケーションプログラム」とも称す。本実施の形態に係るアプリケーションプログラムは、シーケンス命令などとともに、一定のタスク周期毎に周期実行されるタスクに含まれることになる。
図1(B)には、図1(A)に示すユーザプログラム50の実行タイミングを表すタイムチャートの一例を示す。図1(B)に示す周期実行のケースAは、ユーザプログラム50に含まれるファンクションブロック54の実行条件が成立していない場合に相当する。このケースAにおいては、予め設定されたタスク周期内で、ユーザプログラム50の実行(処理時間56)が完了していることが分かる。
図1(B)に示す周期実行のケースBは、2番目のタスク周期において、ユーザプログラム50に含まれるファンクションブロック54の実行条件が成立した場合を示す。このケースBにおいては、ファンクションブロック54により呼出されるアプリケーションプログラムの実行に要する処理時間58が、ケースAの場合の処理時間56に加算されることになる。このケースBにおいては、処理時間56と処理時間58との合計がタスク周期内に収まっているので、適切に周期実行ができている。
図1(B)に示す周期実行のケースCは、ケースBと同様に、2番目のタスク周期において、ユーザプログラム50に含まれるファンクションブロック54の実行条件が成立した場合を示す。このケースCにおいては、ファンクションブロック54により呼出されるアプリケーションプログラムの実行に要する処理時間58が、タスク周期より長く、予め設定されたタスク周期内で、ユーザプログラム50の実行が完了できていない。ケースCに示すように、1回のタスク実行に要する時間が予め設定されたタスク周期に収まらない状態を「周期超過」とも称す。
1または複数のタスクが周期実行される制御装置においては、このような周期超過の発生を回避する必要がある。このような周期超過の発生を回避するために、制御装置の設計者は、設定されているタスク周期内に処理が完了するように各タスクに関連付けられるアプリケーションプログラムを作成する必要がある。
但し、アプリケーションプログラムが提供する処理が1タスク周期内で完了できない場合もあり、このような場合には、複数周期に分けて段階的に処理を進めるようにアプリケーションプログラムを作成しなければならない。以下の説明においては、1回の実行が複数のタスク周期に亘るアプリケーションプログラムを「分割実行プログラム」とも称す。このような分割実行プログラムを生成する典型的な手法として、周期毎にいずれかの命令を実行するのかを管理するステート管理処理を加えるような設計がなされる。以下、設計からプログラミングに関する手順の一例について説明する。
図2は、ステート管理処理を加える設計変更の一例を説明するための図である。図2(A)には、一般的な、バブルソートプログラムのソースコード60の一例を示す。図2(B)には、図2(A)に示すソースコードに対して、ステート管理処理を加えたソースコード62の一例を示す。紙面の都合上、図2(B)には、図2(A)のソースコード60に対応するソースコードの一部のみが示されている。
図2(A)に示すソースコード60のループ処理の命令群64は、図2(B)のソースコード62に含まれるCASE文を用いて命令群66−1,66−2,・・・のように分割される。CASE文で用いられるステート(変数state)をタスク周期毎にインクリメントすることで、CASE文を用いて分割された命令群66−1,66−2,・・・の各々がタスク周期毎に順次実行されることになる。このようなステート管理処理を用いることで、アプリケーションプログラムの処理を分割実行化する。
一方で、図2(B)に示されるソースコード62から明らかなように、ステート管理処理を加えることで、ステップ数は大きく膨れ上がり、ソースコード62のプログラマ以外には理解困難で、かつ、デバッグやメンテナンス性の劣化したソースコードとなる。
次に、図2に示すような分割実行化されたアプリケーションプログラムの実行性能の一例について説明する。
図3は、図2に示す分割実行化されたアプリケーションプログラムの実行性能の一例を示すタイムチャートである。図3において、「P」は、タスク内で呼出されるアプリケーションプログラムの実行に要する時間(一例として、1要素の処理に100μsが必要であるとする。)を示し、「E」は、タスク内で実行されるその他の処理の実行に要する時間(周期毎に80μsが必要であるとする。)を示す。
図3には、タスク周期が1msのタスクにおいて23要素の処理を行う場合の例を示す。
図3に示すタスクAは、図2(A)に示すような、分割実行化されていないソースコードを実行した場合を示す。タスクAを1回実行するには、2.38ms(=80μs+100μs×23)の時間を要するため、周期超過が生じ得る。
図3に示すタスクBは、図2(B)に示すように、1タスク周期毎に1要素を処理するように、アプリケーションプログラムの実行を分割実行化した場合を示す。タスクBによってアプリケーションプログラムを呼出して、当該アプリケーションプログラムの処理全体を1回実行するのに、23周期分の時間が必要となるとともに、アプリケーションプログラムの分割実行化(設計変更)が必要となる。
図3に示す例では、23要素の処理を行う例を示したが、アプリケーションプログラムが処理する要素の数が一定ではない場合も多い。例えば、制御装置に接続されたセンサからの計測データ、あるいは、内蔵ストレージに転送された任意のデータを対象として処理する場合、そのような処理対象のデータ自体が巨大である場合や、処理タイミングなどによって入力データの量が変動する場合がある。そのため、分割実行化されたアプリケーションプログラムにどれだけのタスク周期が必要であるかを事前に見積もることが難しく、システム全体の設計が複雑化し得る。
また、分割実行化されたアプリケーションプログラムは、設計が難しく、実装量が多く、また、用途に応じた処理時間の調整も困難であるため、制御装置の設計者は可能な限り、分割実行化という手法を採用したくはないと考える。
上述したような課題に対して、本実施の形態は、1回の処理実行に複数のタスク周期が必要なアプリケーションプログラムを、ユーザ設定された時間ずつ分割実行できるような環境を提供する。このような分割実行を実現するに対して、制御装置の設計者に対して、ステート管理処理を追加するような変更を要求することはない。
例えば、図3のタスクCには、本実施の形態に係る処理例を示す。図3に示すタスクCには、アプリケーションプログラムの実行時間が0.8msと設定されている場合を示す。言い換えれば、プログラマなどのユーザは、分割すべきアプリケーションプログラムの指定、および、分割実行に割当てる時間の設定を行うだけで、図3に示すタスクCのような実行を実現できる。
図3に示すタスクCにおいては、最初の2周期において、それぞれ0.8ms分の処理が実行され、最終の周期において0.7ms分の処理が実行されることで、アプリケーションプログラムの1回分の実行が完了する。
後述するように、基本的には、ユーザは、各タスク周期において分割実行に割当てる時間だけを任意に設定すればよく、各タスクの実行目的や要求仕様などに応じて、自由に設定できる。
なお、本明細書において、「分割実行プログラム」は、状況に応じて複数のタスク周期に亘って実行されるプログラムを包含するものであり、場合によっては、1タスク周期内で実行が完了する場合もある。本明細書の「分割実行プログラム」は、このようなプログラムも包含し得る。
同様に、本明細書において、「分割実行」は、あるプログラムが予め設定された時間ずつ実行される状態を意味するものであり、現実に、複数のタスク周期に亘って実行される必要は必ずしもない。すなわち、状況に応じて実行に要する時間が変動するプログラムについては、「分割実行」で処理した場合であっても、1タスク周期内で処理が完了することがある。「分割実行」との用語は、このような現実のプログラムの実行結果が複数のタスク周期に亘っていることを要求するものではない。
本実施の形態においては、典型例として、(1)任意のアプリケーションプログラムを上述したような分割実行できる形式(以下、「分割実行型」あるいは「分割実行型プログラム」と称することもある。)に自動的に変換する局面と、(2)何らかの方法で生成された分割実行型プログラムを配布し、その配布された分割実行型プログラムをプログラム部品として利用する局面とを想定する。
(1)の局面は、アプリケーションプログラムの分割実行化の処理に相当する。典型的には、サポート装置が、任意のソースプログラムから実行形式のコードなどに変換(以下、「ビルド」とも称す。)する際に、ユーザ設定の時間が経過すると処理の実行を中断し、次のタスク周期で再開することが可能な形式に自動的に変化する。このようなサポート装置の機能を利用することで、処理の実行/中断/再開の手続きをユーザが明示的にプログラムしなくても、自動的に分割実行型プログラムを生成できる。
このように、(1)の局面は、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する方法、装置、プログラムなどに向けられる。
(2)の局面は、上述の(1)の局面において生成された分割実行型プログラムをプログラム部品として、任意のプログラムの一部として再利用できる。再利用する場合、分割実行(すなわち、複数周期に亘る実行)の有効/無効を任意に選択できるようにしてもよい。このようなプログラム部品としての再利用できる形式でプログラムを提供する形態は、例えば、各種のライブラリやアドオンプログラムなどに応用できる。
それぞれの局面を含む、より詳細な実施の形態について説明する。
<B.制御システムの全体構成例>
まず、本実施の形態に係る制御装置100を含む制御システム1の全体構成例について説明する。
図4は、本実施の形態に係る制御システム1の全体構成例を示す模式図である。図4を参照して、制御システム1の主たる構成要素である制御装置100は、予め用意されたユーザプログラムを実行することで、任意の制御対象を制御する。より具体的には、制御装置100は、制御対象から計測値や状態値(以下、「入力データ」とも称す。)などを収集するとともに、収集された入力データに基づいて制御演算を実行し、制御演算の実行により得られる指令値や状態値(以下、「出力データ」とも称す。)を制御対象へ出力するという、一連の制御処理をサイクリックに実行する。
図4には、制御装置100がフィールドネットワーク2を介して1または複数のデバイス10と接続されている構成例を示す。1または複数のデバイス10は、制御装置100からの出力データに従って制御対象を制御し、制御対象から計測された入力データを制御装置100へ提供する。一例として、デバイス10は、リモートI/O(Input/Output)装置12と、リレー群14と、画像センサ18およびカメラ20と、サーボドライバ22およびサーボモータ24とを含む。
リモートI/O装置12は、フィールドネットワーク2を介して通信を行う通信部と、入力データの取得および出力データの出力を行うための入出力部(以下、「I/Oユニット」とも称す。)とを含む。
I/Oユニットは、フィールドネットワークに直接接続されるようにしてもよいし、制御装置100の一部に組込まれてもよい。
画像センサ18は、カメラ20によって撮像された画像データに対して、パターンマッチングなどの画像計測処理を行って、その処理結果を制御装置100へ送信する。サーボドライバ22は、制御装置100からの出力データ(例えば、位置指令など)に従って、サーボモータ24を駆動する。
フィールドネットワーク2は、データの到達時間が保証される、定周期通信を行うネットワークを採用することが好ましい。このような定周期通信を行うネットワークとしては、EtherCAT(登録商標)、EtherNet/IP(登録商標)、DeviceNet(登録商標)、CompoNet(登録商標)などが知られている。
制御装置100には、ユーザプログラムの開発やデバッグを行うためのサポート装置200が接続されることもある。サポート装置200により提供される機能の詳細については、後述する。
制御装置100は、上位ネットワーク6を介して、サーバ装置300および表示装置400と接続されている。
サーバ装置300は、制御装置100との間で必要なデータを遣り取りする。サーバ装置300は、例えば、データベース機能を有しており、制御装置100が出力するイベントログなどを時系列に収集するようにしてもよい。
表示装置400は、ユーザからの操作を受けて、制御装置100に対してユーザ操作に応じたコマンドなどを送信するとともに、制御装置100での演算結果などをグラフィカルに表示する。
<C.各装置のハードウェア構成例>
次に、本実施の形態に係る制御システム1を構成する主要な装置のハードウェア構成例について説明する。
(c1:制御装置100のハードウェア構成例)
図5は、本実施の形態に係る制御システム1を構成する制御装置100のハードウェア構成例を示すブロック図である。図5を参照して、制御装置100は、プロセッサ102と、メインメモリ104と、ストレージ106と、上位ネットワークコントローラ108と、フィールドネットワークコントローラ110と、USB(Universal Serial Bus)コントローラ112と、メモリカードインターフェイス114とを含む。これらのコンポーネントは、プロセッサバス130を介して接続されている。
プロセッサ102は、制御演算などを実行する演算処理部に相当し、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などで構成される。具体的には、プロセッサ102は、ストレージ106に格納されたプログラムを読出して、メインメモリ104に展開して実行することで、制御対象に応じた制御、および、後述するような各種処理を実現する。
メインメモリ104は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)などの揮発性記憶装置などで構成される。ストレージ106は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの不揮発性記憶装置などで構成される。
ストレージ106には、基本的な機能を実現するためのシステムプログラム140、および、ユーザプログラムを実現するための1または複数の実行モジュール98などが格納される。
上位ネットワークコントローラ108は、上位ネットワーク6を介して、表示装置400やサーバ装置500(図4参照)といった任意の情報処理装置との間でデータを遣り取りする。
フィールドネットワークコントローラ110は、フィールドネットワーク2を介して、フィールドデバイスとの間でデータを遣り取りする。フィールドネットワークコントローラ110は、フィールドネットワーク2を介した定周期通信を行うための通信マスタとして機能する。
USBコントローラ112は、USB接続を介して、サポート装置200などとの間でデータを遣り取りする。
メモリカードインターフェイス114は、着脱可能な記録媒体の一例であるメモリカード116を受付ける。メモリカードインターフェイス114は、メモリカード116に対してデータを書込み、メモリカード116から各種データ(ログやトレースデータなど)を読出すことが可能になっている。
図5には、プロセッサ102がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)またはFPGA(Field-Programmable Gate Array)など)を用いて実装してもよい。あるいは、制御装置100の主要部を、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のOS(Operating System)を並列的に実行させるとともに、各OS上で必要なアプリケーションを実行させるようにしてもよい。さらに、制御装置100に表示装置やサポート装置などの機能を統合した構成を採用してもよい。
(c2:サポート装置200のハードウェア構成例)
本実施の形態に係るサポート装置200は、一例として、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコン)を用いてプログラムを実行することで実現される。
図6は、本実施の形態に係る制御システム1を構成するサポート装置200のハードウェア構成例を示すブロック図である。図6を参照して、サポート装置200は、CPUやMPUなどのプロセッサ202と、光学ドライブ204と、主メモリ206と、ストレージ208と、USBコントローラ212と、ネットワークコントローラ214と、入力部216と、表示部218とを含む。これらのコンポーネントはバス220を介して接続される。
プロセッサ202は、ストレージ208に格納された各種プログラムを読み出して、主メモリ206に展開して実行することで、後述するような各種処理を実現する。
ストレージ208は、例えば、HDDやSSDなどで構成される。ストレージ208には、典型的には、サポート装置200において実行されるユーザプログラムの作成、作成したプログラムのデバッグ、システム構成の定義、各種パラメータの設定などを行うためのサポートプログラム230が格納される。
サポートプログラム230は、コンピュータであるサポート装置200を、アプリケーションプログラムを生成する装置として機能させる。より具体的には、サポートプログラム230は、本実施の形態に係るビルド処理を実現するためのビルド処理モジュール232、および、ソースコードの作成・編集処理などを実現するためのプログラミングツール234を含む。
サポート装置200は、光学ドライブ204を有しており、コンピュータ読取可能なプログラムを非一過的に格納する記録媒体205(例えば、DVD(Digital Versatile Disc)などの光学記録媒体)から、その中に格納されたプログラムが読取られてストレージ208などにインストールされる。
サポート装置200で実行される各種プログラムは、コンピュータ読取可能な記録媒体205を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に係るサポート装置200が提供する機能は、OSが提供するモジュールの一部を利用する形で実現される場合もある。
USBコントローラ212は、USB接続を介して制御装置100との間のデータの遣り取りを制御する。ネットワークコントローラ214は、任意ネットワークを介した他の装置との間のデータの遣り取りを制御する。
入力部216は、キーボードやマウスなどで構成され、ユーザ操作を受付ける。表示部218は、ディスプレイ、各種インジケータ、プリンタなどで構成され、プロセッサ202からの処理結果などを出力する。
図6には、プロセッサ202がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASICまたはFPGAなど)を用いて実装してもよい。
(c3:サーバ装置300のハードウェア構成例)
本実施の形態に係る制御システム1を構成するサーバ装置300は、一例として、汎用的なファイルサーバまたはデータベースサーバを用いて実現できる。このような装置のハードウェア構成については公知であるので、ここでは、その詳細な説明は行わない。
(c4:表示装置400のハードウェア構成例)
本実施の形態に係る制御システム1を構成する表示装置400は、HMI装置と称されるものであり、専用機として実装された構成を採用してもよいし、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。
汎用パソコンをベースとした産業用パソコンを用いて表示装置400を実現する場合には、上述の図6に示すようなサポート装置200と同様のハードウェア構成が採用される。但し、図6に示す構成例のうち、サポートプログラム230に代えて、HMI機能を実現するためのプログラムがインストールされる。
<D.実施の形態1:アプリケーションプログラムの分割実行化>
以下、アプリケーションプログラムを分割実行化する局面について説明する。すなわち、本実施の形態に係る変換処理によって、分割実行型プログラムを生成する方法などについて説明する。
(d1:ビルド処理)
まず、アプリケーションプログラムを分割実行化するための変換処理(ビルド処理)について説明する。本明細書において、「ビルド処理」は、ソースコードを制御装置100上で実行可能な形式のコード(以下、「実行コード」とも称す。)に変換する処理を意味するものであり、典型的には、ソースコードのパース(字句解析および構文解析)、最適化、オブジェクトコードの生成などの処理を含む。
本実施の形態においては、アプリケーションプログラムのソースコードから実行コードを生成するビルド処理において、複数周期に分けて段階的に処理を進めるような実行コードを生成することができる。
図7は、本実施の形態に係るビルド処理の概略手順を示すフローチャートである。図7に示す処理は、基本的には、サポート装置200によって提供される。より具体的には、サポート装置200において、プロセッサ202がサポートプログラム230を実行することで、入力されたアプリケーションプログラムのソースコードに対してビルド処理が実行される。
図7を参照して、通常のビルド処理においては、アプリケーションプログラムのソースコード70が入力されると、制御装置100で実行するための実行コードへ変換する通常のビルド処理72が実行される。これによって、アプリケーションプログラムに対応する実行コード74が生成される。
これに対して、分割実行化に対応したビルド処理においては、入力されたアプリケーションプログラムのソースコード70に対して、ユーザ(設計者あるいはプログラマ)が何らかの変更を加えることなく、複数周期に分けて段階的に処理を進めるような実行コードを生成するための、分割実行化に対応したビルド処理76が実行される。分割実行化に対応したビルド処理76においては、分割実行化された実行コードへ変換する処理が実行される。これによって、分割実行化されたアプリケーションプログラムの実行コード78が生成される。
実行コード78は、アプリケーションの分割実行の制御を行うための情報を遣り取りするための分割実行化インターフェイス782と、分割実行に必要な命令を含む分割実行化コード784と、アプリケーションプログラムに対応する実行コード786とを含む。
分割実行化インターフェイス782は、親アプリケーションなどとの間で、分割実行に必要な設定の受付けや、分割実行の状態の出力などを行うための環境を提供する。
分割実行化コード784は、プログラム実行の中断および再開を実現するための処理(例えば、メモリ上にあるデータの退避および復帰など)を実現するための命令群を含む。より具体的には、分割実行化コード784は、アプリケーションプログラムの実行開始から予め設定された時間(後述の「分割時間」)が経過すると、当該時点の実行状態を保存する命令と、保存した実行状態を復元する命令とを含む。分割実行化コード784によって実現される処理の詳細については後述する。
実行コード78は、基本的には、通常のビルド処理によって生成される実行コード74と同様である。
このように、本実施の形態に係るサポート装置200は、アプリケーションプログラムのソースコード70を実行コードに変換する処理(ビルド処理)において、ソースコード70に対して、分割実行化インターフェイス782および分割実行化コード784を自動的に組入れた、分割実行化に対応したアプリケーションプログラムの実行コード78を生成する。
以下の説明において、1または複数の実行コードおよび必要な情報をパッケージ化したものを「実行モジュール」とも称す。「実行モジュール」は、そのままの形態で配布または流通できる状態を意味する。上述の図7の実行コード78は、実行モジュールの一例でもある。
なお、サポート装置200は、ユーザからの明示的な設定、あるいは、予め定められた判断条件に従って、図7に示す通常のビルド処理および分割実行化に対応したビルド処理を任意に選択できるように構成されてもよい。
図7に示すように、本実施の形態に係るビルド処理は、アプリケーションプログラムのソースコード70の入力を受付ける処理と、アプリケーションプログラムのソースコード70に、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令(分割実行化コード784)を付加することで、アプリケーションプログラムの実行モジュール(実行コード78)を生成する処理とを含む。また、本実施の形態に係るビルド処理は、アプリケーションプログラムのソースコード70に、当該アプリケーションプログラムの実行、中断、再開に係る制御パラメータの設定を受付けるための第2の命令(分割実行化インターフェイス782)を付加する処理も含む。
(d2:制御パラメータおよび分割実行化インターフェイス)
次に、分割実行を制御するためのパラメータおよびそれらのパラメータを設定するための分割実行化インターフェイスの一例について説明する。
本実施の形態においては、分割実行を制御するためのパラメータとして、(1)継続フラグ、(2)分割時間、(3)完了フラグの3つを用いる。
(1)継続フラグは、対象のアプリケーションプログラムの直前に実行中断した箇所から再開して処理を継続するのか、あるいは、対象のアプリケーションプログラムを最初から処理を実行するのかを設定する。すなわち、(1)継続フラグは、アプリケーションプログラムの実行を中断した箇所から再開する、および、アプリケーションプログラムを最初から実行する、のいずれかを選択するための情報に相当する。この結果、継続フラグは、本実施の形態に係る分割実行の有効/無効を実質的に設定することになる。
図8は、本実施の形態に係る分割実行を制御するための継続フラグの意義を説明するための図である。図8(A)には、継続フラグがOFFに設定されている場合のプログラムの実行例を示し、図8(B)には、継続フラグがONに設定されている場合のプログラムの実行例を示す。
図8(A)に示すように、継続フラグがOFFに設定されている場合には、タスク内で呼出されるアプリケーションプログラム(図8において「P」の符号で示されている)が、タスク周期毎に最初から処理が開始され、タスク周期内にすべての処理を実行できれば、完了を通知する。このようなアプリケーションプログラムの最初からの実行がタスク周期毎に繰返される。
これに対して、継続フラグがONに設定されている場合には、図8(B)に示すように、あるタスク周期で実行が開始されたアプリケーションプログラムにおいて、実行が中断されると、次のタスク周期において、その中断された箇所から処理が再開される。このように、継続フラグがONに設定されることで、アプリケーションプログラムはタスク周期毎に処理の実行が中断されても、次のタスク周期において、各中断された箇所から処理が再開されることになる。このような処理の再開および中断の機能を利用することで、1回のアプリケーションプログラムの実行を複数のタスク周期に亘らせることができる。
次に、(2)分割時間は、各タスク周期においてアプリケーションプログラムの実行に割当てられる時間を設定する。すなわち、分割時間は、アプリケーションプログラムの実行開始から中断するまでの時間を意味する。
図9は、本実施の形態に係る分割実行を制御するための分割時間の意義を説明するための図である。図9(A)には、分割時間がt1に設定されている場合のプログラムの実行例を示し、図9(B)には、分割時間がt2(>t1)に設定されている場合のプログラムの実行例を示す。
図9(A)に示すように、分割時間がt1に設定されている場合には、各タスク周期において、アプリケーションプログラムは設定された分割時間t1だけ処理を実行し、その後、処理の実行を中断する。図9(B)に示すように、分割時間がt1より長いt2に設定されている場合には、各タスク周期において、アプリケーションプログラムは設定された分割時間t2だけ処理を実行し、その後、処理の実行を中断する。
このように、分割時間の長さを他のタスクなどとの関係で任意に調整することができるようになっている。
なお、実装上の仕様として、例えば、分割時間をゼロに設定した場合であっても、アプリケーションプログラムが全く実行されないというのではなく、各タスク周期において最小限の処理を実行して、処理の実行を中断するようにしてもよい。また、分割時間に「無限」が設定された場合には、アプリケーションプログラムの実行が完了するまで中断しないようにしてもよい(詳細については後述する)。但し、この場合には、周期超過が発生する可能性がある。
(3)完了フラグは、アプリケーションプログラムの実行完了を通知する。完了フラグを参照することで、対象のアプリケーションプログラムの実行が完了したか否かを判断できる。
図7に示される分割実行化されたアプリケーションプログラムの実行コード78に追加される分割実行化コード784は、上述したような制御パラメータを保持するための変数またはメモリ領域を形成するための命令を含む。
ここで、図7に示される分割実行化されたアプリケーションプログラムの実行コード78に追加される分割実行化インターフェイス782の一例について説明する。
図10は、本実施の形態に係るビルド処理における分割実行化インターフェイス782の追加を説明するための図である。図10には、ファンクションブロックの形でアプリケーションプログラムの実行が指定されている例を示す。図10に示す例では、アプリケーションプログラムの実行に際して、ユーザ定義の入力変数702および出力変数704がそれぞれ入力および出力として規定されているとする。
分割実行化に対応したビルド処理によって、アプリケーションプログラムに対応する実行コード786が生成される。このとき、分割実行に必要な命令を含む分割実行化コード784が追加される。
さらに、分割実行化インターフェイス782として、継続フラグ7820および分割時間7822が入力として追加されるとともに、完了フラグ7824が出力として追加される。すなわち、本実施の形態に係るビルド処理によって、ファンクションブロックまたはファンクションには、分割実行に必要な制御パラメータを遣り取りするためのフラグおよび変数が追加的に割当てられる。
タスクとして登録されるプログラム内でこのようなファンクションブロックを利用する場合には、継続フラグ7820、分割時間7822および完了フラグ7824は、任意の変数種別(例えば、内部変数、外部変数、システム変数など)への割当てが可能になっている。
図11は、図10に示す分割実行化に対応したビルド処理によって生成されたファンクションブロックの利用例を説明するための図である。図11に示すように、分割実行化インターフェイス782(継続フラグ7820、分割時間7822、完了フラグ7824)が追加されたファンクションブロックを利用する際には、対応するアプリケーションプログラムに与える入力データを示す変数、および、対応するアプリケーションプログラムでの処理実行の結果得られる出力結果を格納する変数が定義される。また、対応するアプリケーションプログラムの実行を指示する条件(Exec)が規定される。このアプリケーションプログラムの実行を指示する条件には、完了フラグ7824の値を含めるようにしてもよい。このような条件を定義することで、対応するアプリケーションプログラムが複数周期に亘って実行中において、同一のアプリケーションプログラムが重複して実行されることを防止できる。
(d3:処理の中断/再開)
次に、本実施の形態に係る分割実行時のアプリケーションプログラムの挙動について説明する。
図12は、本実施の形態に係る分割実行に係る処理の中断/再開に係る挙動を説明するための図である。図12を参照して、アプリケーションプログラムに対応する実行コード786は、各タスク周期において実行開始タイミングが到来すると、予め設定された分割時間だけ実行される。分割時間内にすべての処理を実行できれば、処理完了となる。但し、分割時間内にすべての処理を実行できなければ、一旦処理は中断する。この際、次に処理を再開できるように、中断した時点における実行状態84が保存される。そして、処理が再開されると、保存された実行状態84が復元される。
実行状態84としては、典型的には、プログラムの実行位置(命令位置)、スタック、変数情報、レジスタ値などの、メモリ上の状態値を含む。
中断/再開時の処理コストを最小化するため、実行状態84を保存する形態の一例として、中断時にアプリケーションプログラムが使用していたメモリエリア(プログラム実行用メモリ80)を保護するようにしてもよい。すなわち、アプリケーションプログラムが使用していたメモリエリアに対して、当該アプリケーションプログラム外からの変更を禁止するようにしてもよい。このようなメモリエリアを保護することで、アプリケーションプログラムが再度呼出されたときに、その保護したメモリエリアをそのまま再利用できる。
但し、再度呼出される(処理再開)まで当該メモリエリア(プログラム実行用メモリ80)が別用途で使用される可能性がある場合など、当該アプリケーションプログラム外からの変更を禁止できない場合(すなわち、プログラム実行用メモリ80が保持する実行状態84の内容を保護できない場合)などには、プログラム実行用メモリ80とは別に用意した、退避用メモリ82に実行状態84を一旦退避して保存する。そして、再度呼出されたとき(処理再開されたとき)に、その保存した実行状態84をプログラム実行用メモリ80へ復元するようにしてもよい。プログラム実行用メモリ80とは別の退避用メモリ82を用いることで、実行状態84を確実に復元できる。
このようなアプリケーションプログラムの実行開始から予め設定された時間(分割時間)が経過すると、当該時点の実行状態84を保存する処理と、当該保存した実行状態84を復元する処理とは、分割実行化コード784に含まれる命令によって実現される。
(d4:分割実行の処理手順)
次に、分割実行化されたアプリケーションプログラムの処理手順について説明する。図13は、本実施の形態に係る分割実行の処理手順の一例を示すフローチャートである。図13(A)は、分割実行が無効化されている場合の処理手順を示し、図13(B)は、分割実行が有効化されている場合の処理手順を示す。
まず、図13(A)を参照して、分割実行が無効化されている場合の処理手順について説明する。タスク周期の到来などにおいて、処理が開始されると、メモリが初期化され(ステップS2)、アプリケーションプログラムが実行される(ステップS4)。そして、アプリケーションプログラムに含まれるすべての命令の実行が完了すると、処理は終了する。
このような図13(A)に示す処理手順は、分割実行化されていないアプリケーションプログラムの実行時の処理手順と同様である。
次に、図13(B)を参照して、分割実行が有効化されている場合の処理手順について説明する。なお、図13(B)に含まれる処理のうち、図13(A)と同様の処理については、同一のステップ番号を付している。
タスク周期の到来などにおいて、処理が開始されると、まず、継続フラグがONであるか否かが判断される(ステップS1)。継続フラグがOFFでなければ(ステップS1においてNOの場合)、メモリが初期化される(ステップS2)。これに対して、継続フラグがONであれば(ステップS1においてYESの場合)、前回の処理実行時に保存された実行状態が復元される(ステップS3)。すなわち、継続フラグは、アプリケーションプログラムを初期化した上で実行するか否かを制御するために用いられる。
ステップS2またはステップS3の後、実行時間が初期化される(ステップS5)。実行時間は、アプリケーションプログラムの実行継続時間の実測値を意味し、実行時間の初期化は、実行継続時間を実測するためのタイマなどをリセットすることを意味する。そして、アプリケーションプログラムが実行される(ステップS4)。
そして、アプリケーションプログラムに含まれるすべての命令の実行が完了したか否かが判断される(ステップS6)。すべての命令の実行が完了していれば(ステップS6においてYES)、完了フラグがONにセットされ(ステップS7)、処理は終了する。
一方、アプリケーションプログラムに含まれるすべての命令の実行が完了していなければ(ステップS6においてNO)、アプリケーションプログラムの実行開始から設定された分割時間が経過したか否かが判断される(ステップS8)。
アプリケーションプログラムの実行開始から設定された分割時間が経過していなければ(ステップS8においてNO)、ステップS6以下の処理が繰返される。これに対して、アプリケーションプログラムの実行開始から設定された分割時間が経過していれば(ステップS8においてYES)、当該タスク周期におけるアプリケーションプログラムが実行可能な時間が経過したことを意味し、処理の実行を中断するとともに、中断した時点における実行状態が保存される(ステップS9)。そして、当該タスク周期における処理は終了する。
このように、本実施の形態に係る分割実行が有効化されている場合には、継続実行中であれば前回の中断状態から処理を再開し、そうでなければ初期状態から処理を開始する。予め設定された分割時間が経過した場合には、実行状態(プログラムの実行位置(命令位置)、スタック、変数情報、レジスタ値など)が保存される。このような実行状態を保存することで、処理の中断/再開をフレキシブルに実現できる。
(d5:処理中断の実装方式その1:タイマ割込方式)
本実施の形態に係るビルド処理においては、基本的には、アプリケーションプログラムのソースコードに対して、ユーザによる変更無しに、設定された分割時間毎に処理を中断できる。このような処理中断の実装方式の一例について説明する。
このような実装方式の第一案として、割込タイマを利用して、予め設定された分割時間が到来する毎に、割込イベントを発生させるとともに、この割込イベントに応答して、処理の実行を中断するようにしてもよい。
より具体的には、上述の図13(B)に示される処理手順において、設定された分割時間の値で割込タイマをセットする。セットされた割込タイマからの割込イベントが発生する前にすべての命令の実行が完了していれば、完了フラグをONにセットするとともに、割込タイマの設定を破棄する。一方、命令の実行が完了する前に、割込タイマからの割込イベントが発生すると、当該時点における実行状態が保存される。
このような割込タイマの設定は、分割実行化コード784に含まれる命令によって実現される。すなわち、分割実行化コード784は、アプリケーションプログラムの実行開始から予め設定された時間(分割時間)が経過すると割込イベントを発生するように割込タイマを設定するための命令を含む。
割込タイマを利用可能な環境(ハードウェア、OS、インタプリタ実行系がサポートしている場合など)であると判断された場合に、このようなタイマ割込方式が選択される。
(d6:処理中断の実装方式その2:中断ポイント挿入方式)
上述したようなタイマ割込方式を利用できない環境の場合には、予め自動挿入された中断ポイントを利用する中断ポイント挿入方式を採用してもよい。
中断ポイントは、アプリケーションプログラムに含まれる命令を順次実行するにあたって、処理開始から予め設定された分割時間が経過したか否かを判断する位置に相当する。すなわち、アプリケーションプログラムに含まれる命令が順次実行され、中断ポイントに到達するたびに分割時間が経過したか否かが判断される。このように、アプリケーションプログラムの処理中断は、挿入されたいずれかの中断ポイントとなる。
図14は、本実施の形態に係るビルド処理における中断ポイントの挿入処理を説明するための図である。図14(A)には、一般的な、バブルソートプログラムのソースコード60の一例を示し、図14(B)には、ソースコード60に対して中断ポイント68が挿入されたソースコード61の一例を示す。図14に示すソースコードにおいては、中断ポイント68を意味するキーワード(命令語)として、「CHECK_POINT」を用いている。
このような中断ポイント68をソースコードの適切な位置に挿入しておくことで、中断ポイント68毎に処理の中断要否が判断されることになる。なお、後述するような中断ポイント68をユーザが任意に挿入する場合を除いて、基本的には、中断ポイント68は自動的にソースコード内に挿入されることになる。このような中断ポイント68の挿入は、分割実行化コード784に含まれる命令によって実現される。すなわち、分割実行化コード784は、アプリケーションプログラムのソースコードに予め設定された中断ポイント68毎に予め設定された時間(分割時間)が経過しているか否かを判断する命令を含む。また、本実施の形態に係るビルド処理は、アプリケーションプログラムのソースコードに対して中断ポイント68を挿入する処理を含む。
中断ポイント挿入方式においては、ある中断ポイント68から次の中断ポイント68までは、処理を中断できないので、設定された分割時間を順守できるように、中断ポイント68を挿入する位置(粒度)を最適化する必要がある。また、中断ポイント68を挿入することによる、コード量および実行モジュールサイズの増加、処理ジッタによる性能への影響を最小化する観点からも、中断ポイント68を挿入する位置および数を最適化する必要がある。
そこで、ビルド処理においては、以下のような手順に従って、中断ポイント68の挿入位置を決定することが好ましい。
(1)命令毎の実行時間表を参照して、ソースコードに含まれる各命令の実行時間を算出する。
(2)ソースコードの先頭または直前の中断ポイントの位置から、必要な実行時間を累積加算してゆき、予め定められた時間に達する直前に中断ポイントを挿入する。
予め定められた時間としては、ビルド処理に設定される分割時間が分かる場合には、当該設定される分割時間をそのまま利用すればよい。一方、設定される分割時間がプログラム実行時まで分からない場合(例えば、ユーザが分割時間を任意に設定できる環境下など)には、分割実行化されたアプリケーションプログラムが実行される環境において設定される分割時間の最小分解能を、予め定められた時間として採用できる。
(d7:中断ポイントの任意設定)
上述の中断ポイント挿入方式においては、中断ポイントが自動的に挿入される例を説明したが、この中断ポイントを任意の位置に挿入または自動的に挿入された位置を変更するようにしてもよい。
例えば、アプリケーションプログラムにおいて実行される一連の処理のうち、特定の処理区間については中断させたくないような場合が想定される。このような場合には、ユーザが中断ポイントの位置を明示的に指定できるようにしてもよい。例えば、一連の通信処理において、複数の通信コマンドを連続的に発行する必要がある場合などでは、途中で処理が中断すると受信側が不正状態やタイムアウトになるような問題が生じ得る。このような事態を回避するために、処理を中断させたくない区間には、中断ポイントを意図的に挿入しないように設定できる。
図15は、本実施の形態に係る分割実行化における中断ポイントの任意挿入を説明するための図である。図15には、図14と同様に、一般的な、バブルソートプログラムのソースコード61の一例を示す。
図15に示すソースコード61においては、中断ポイント68は、(1)初期処理後(配列サイズの取得後)と、(2)配列全体の1操作単位(x値の更新)とに挿入されており、配列要素の個別処理(y値の更新)の区間には挿入されていない。その結果、y値の更新中には処理は中断されなくなり、あるx値についてのy値は、一度の処理ですべて更新されることになる。
中断ポイントを任意の位置に挿入する処理は、ビルド処理時に実行される。上述したタイマ割込方式が採用される場合には、割込イベントが発生した場合であっても、次の中断ポイントに到達するまでは処理を継続するようにコーディングされる。
一方、中断ポイント挿入方式が採用される場合には、入力されたソースコードに対して、中断ポイントが先に自動的に挿入されるので、ユーザは、必要に応じて、自動的に挿入された中断ポイントを任意に変更する。このような中断ポイントを挿入することで、中断ポイントが挿入された箇所においてのみ、分割時間の経過(すなわち、中断の要否)が判断される。
上述したような中断ポイントの任意設定の機能を利用することで、例えば、通信処理や予め手順が定められたような処理についても、中断による不具合の発生を回避できる。
<E.実施の形態2:分割実行型プログラムのプログラム部品としての利用>
次に、本実施の形態に係るビルド処理によって生成された分割実行型プログラムをライブラリなどのプログラム部品として利用する例について説明する。
(e1:応用例)
例えば、制御装置のメーカやソフトウェアベンダなどのプログラム部品提供者は、任意のアプリケーションプログラムを分割実行型プログラムとして有償あるいは無償で配布し、制御装置の一般ユーザやシステムインテグレータなどのプログラム部品利用者がその配布された分割実行型プログラムを組込んだ任意のユーザプログラムを作成するような形態が想定される。
プログラム部品の配布形態としては、任意の方法を採用できる。例えば、光学ディスクなどの媒体に実行コード(あるいは、実行モジュールやライブラリ)を格納した上で配布してもよいし、サーバなどに実行コードを配置した上で、任意の情報処理装置からのアクセスによってダウンロードの形で配布してもよい。
さらに、プログラム部品としての実行コードを単体で配布するのではなく、ソースコードまたはソースコードに対してビルド処理することで生成される実行コードとともに、プログラム部品としての実行コードを配布するようにしてもよい。
(e2:分割実行プログラムの判別)
本実施の形態に係るビルド処理によって生成された分割実行化されたアプリケーションプログラムには、分割実行型プログラムであることを判別するための情報を付加しておくことが好ましい。
例えば、本実施の形態に係るビルド処理によって分割実行型プログラムが生成される際に、分割実行型プログラムであることを示すプログラム定義情報を付加するようにしてもよい。すなわち、本実施の形態に係るビルド処理は、実行モジュールに含まれている実行コードの状態を示す情報を含むプログラム定義情報を実行モジュールに関連付けて生成する処理を含んでいてもよい。
プログラム定義情報を付加する形態としては、例えば、分割実行型プログラムと関連付けられるヘッダファイルに組入れてもよいし、分割実行型プログラムの実行コードに組入れてもよい。プログラム定義情報としては、分割実行型プログラムであることを示す固有の識別子であってもよい。
ユーザプログラムを開発するプログラミングツールは、指定されたアプリケーションプログラムに関連付けられた固有の識別子の有無に基づいて、プログラム編集時やビルド処理時に、分割実行型プログラムであるか否かを判別する。プログラミングツールにおいて、分割実行型プログラムであるか否かを判別できるので、後述するような分割実行型プログラムに応じたインターフェイスの提供などを実現できる。
(e3:分割実行プログラムの配布形態)
本実施の形態においては、プログラム部品の利用者が分割実行の有効/無効を任意に選択できるように、大別して、以下のいずれかの形態で分割実行プログラムを配布するようにしてもよい。
(1)二重の実行コードを配布(性能優先)
本実施の形態に係るビルド処理によって生成された分割実行対応版の実行コードと、通常のビルド処理によって生成された実行コードとの両方を含むプログラム部品を配布してもよい。プログラム部品の一形態として、実行モジュールを採用できる。この場合、それぞれの実行コードにおけるエントリポイントのアドレスが異なるため、実行モジュールを利用するユーザプログラムのビルド時において、いずれの実行モジュールを利用するのかが指定される。ユーザプログラムのプログラミングツールが指定される実行モジュールのエントリポイントへのリンクを生成する。
(2)分割実行化された実行コードのみ配布(サイズ優先)
本実施の形態に係るビルド処理によって生成された分割実行対応版の実行コードのみを含む実行モジュールを配布するようにしてもよい。このように配布された実行モジュールを、分割実行を無効化して利用する場合には、当該実行モジュールを利用するユーザプログラムのビルド時において、呼び出し時の制御パラメータを適切に設定することで、分割実行を無効化して動作させることができる。
配布されたプログラム部品が上述のいずれの形態であるかを示す識別子を、当該プログラム部品に関連付けられるプログラム定義情報に含めるようにしてもよい。
(e4:二重の実行コードを配布)
次に、二重の実行コードを配布する場合の手順の一例について説明する。
図16は、本実施の形態に係るビルド処理によって生成された2種類の実行コードを含む実行モジュールをプログラム部品として利用する場合の手順を説明するための図である。
図16を参照して、まず、プログラム部品提供者は、任意のアプリケーションプログラムのソースコード70に対して、通常のビルド処理72が実行されることで、アプリケーションプログラムに対応する実行コード74を生成する。並行して、プログラム部品提供者は、同じアプリケーションプログラムのソースコード70に対して、分割実行化に対応したビルド処理76を実行することで、分割実行化されたアプリケーションプログラムの実行コード78を生成する。
実行コード78は、アプリケーションの分割実行の制御を行うための情報を遣り取りするための分割実行化インターフェイス782と、分割実行に必要な命令を含む分割実行化コード784と、アプリケーションプログラムに対応する実行コード786とを含む。
さらに、プログラム部品提供者は、アプリケーションプログラムに対応する実行コード74および分割実行化されたアプリケーションプログラムの実行コード78を一体化した実行モジュール90を生成する。実行モジュール90には、実行モジュール90が分割実行型プログラムであることを示す情報、および、2つの実行コードが含まれていることを示す情報を含むプログラム定義情報92を付加するようにしてもよい。
この実行モジュール90および関連付けられるプログラム定義情報92がプログラム部品として、プログラム部品利用者へ提供される。
このように、二重の実行コードを配布する場合には、本実施の形態に係るビルド処理は、分割実行に必要な命令を含む分割実行化コード784を付加することで生成される実行コード78と、分割実行化コード784が付加されていないアプリケーションプログラムのソースコード70から生成された実行コード74とを含む、実行モジュール90を生成する。
一方、プログラム部品利用者は、実行モジュール90を利用する、任意のユーザプログラムのソースコード94を作成したとする。そして、プログラム部品利用者は、プログラミングツールを操作して、作成したユーザプログラムのソースコード94に対して、通常のビルド処理96を実行することで、ユーザプログラムに対応する実行モジュール98を生成する。このとき、ユーザプログラム内にて、プログラム定義情報92を参照するコードを記述するとともに、実行モジュール90に含まれるいずれの実行コードを利用するのかを指定する。このようなユーザプログラムのソースコード94における定義および指定によって、実行コード74および実行コード78のいずれを利用するのかを切替えることができる。
図17は、本実施の形態に係るビルド処理により生成される二重の実行コードを含む実行モジュールを利用する場合のユーザプログラムの作成例を説明するための図である。図17には、ユーザプログラムの作成時において、実行コードをファンクションブロック形式で指定する例を示す。
図17(A)には、分割実行が無効化されている場合のファンクションブロック79の表示例を示し、図17(B)には、分割実行が有効化されている場合のファンクションブロック79の表示例を示す。
図17(A)に示すように、実行モジュール90に対応するアプリケーションプログラムの分割実行を無効化した場合には、対応するファンクションブロック79には、分割実行に必要な入出力は表示されない。一方、図17(B)に示すように、実行モジュール90に対応するアプリケーションプログラムの分割実行を有効化した場合には、対応するファンクションブロック79には、分割実行に必要な入出力(継続フラグ7820、分割時間7822、完了フラグ7824)が表示される。
このように、二重の実行コードを含む実行モジュール90であるプログラム部品を利用する場合には、分割実行の有効または無効をユーザが任意に選択することができ、また、その選択に応じて、当該プログラム部品を利用するためのユーザインターフェイスも変化する。このような表示切替は、プログラム定義情報92(図16参照)を参照することで実現できる。
図17に示すように、本実施の形態においては、実行モジュール90を参照するユーザプログラムの作成過程において、アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させる機能が有効化されているか否かに応じて、制御パラメータの設定の受付けを有効化するか否かを変化させる処理が実行される。
本実施の形態においては、分割実行化されたアプリケーションをファンクションブロック形式(あるいは、ファンクション形式)で利用してプログラミングを行う際に、分割実行が無効化されている状態と、分割実行が有効化されている状態とを任意に選択することができる。
(e5:分割実行化された実行コードのみ配布)
次に、分割実行化された実行コードのみ配布する場合の手順の一例について説明する。
図18は、本実施の形態に係るビルド処理によって生成された実行コードのみを含む実行モジュールをプログラム部品として利用する場合の手順を説明するための図である。
図18を参照して、まず、プログラム部品提供者は、任意のアプリケーションプログラムのソースコード70に対して、分割実行化に対応したビルド処理76を実行することで、分割実行化されたアプリケーションプログラムの実行コード78を生成する。
実行コード78は、アプリケーションの分割実行の制御を行うための情報を遣り取りするための分割実行化インターフェイス782と、分割実行に必要な命令を含む分割実行化コード784と、アプリケーションプログラムに対応する実行コード786とを含む。
さらに、プログラム部品提供者は、分割実行化されたアプリケーションプログラムの実行コード78のみを含む実行モジュール91を生成する。実行モジュール91には、実行モジュール91が分割実行型プログラムであることを示す情報、および、分割実行化されたアプリケーションプログラムの実行コード78のみが含まれていることを示す情報を含むプログラム定義情報92を付加するようにしてもよい。
この実行モジュール91および関連付けられるプログラム定義情報92がプログラム部品として、プログラム部品利用者へ提供される。
一方、プログラム部品利用者は、実行モジュール91を利用する、任意のユーザプログラムのソースコード94を作成したとする。そして、プログラム部品利用者は、プログラミングツールを操作して、作成したユーザプログラムのソースコード94に対して、通常のビルド処理96を実行することで、ユーザプログラムに対応する実行モジュール98を生成する。このとき、ユーザプログラム内にて、プログラム定義情報92を参照するコードを記述するとともに、利用方式に応じて、実行モジュール91に含まれる実行コード78を利用する方法を指定する。より具体的には、分割実行を有効化するか、あるいは、無効化するかに応じて、ユーザプログラムのソースコード94の内容が適宜変更される。
図19は、本実施の形態に係るビルド処理により生成される分割実行化された実行コードのみを含む実行モジュールを利用する場合のユーザプログラムの作成例を説明するための図である。
分割実行を有効化する場合のユーザインターフェイスは、図17(B)に示すユーザインターフェイスと同様であるので、再度の説明は行わない。一方、図19には、分割実行を無効化する場合のユーザインターフェイスの一例を示す。
実行モジュール91には、分割実行化されたアプリケーションプログラムの実行コード78のみが含まれるので、そのままでは分割実行を無効化することができない。そこで、プログラミングツールまたはビルド処理にて、ユーザプログラムのソースコードが補間される。
具体的には、図19に示すように、分割実行が無効化されると、実行モジュール91を利用するファンクションブロック79は、2つのファンクションブロック79Aのように解釈される。
ファンクションブロック79Aの分割時間7822は、「無限(Inf.)」に設定される。分割時間7822が「無限」に設定されることで、分割実行が実質的に無効化される。
そして、ファンクションブロック79Aにおいては、対応するアプリケーションプログラムの実行にあたってメモリの初期化などを指示し、当該アプリケーションプログラムに含まれるすべての命令の実行を指示する。なお、ファンクションブロック79Aの完了フラグ7824の値は、いずれも利用されない(読み捨てられる)。
このようなファンクションブロック79Aを用いるとともに、それぞれに対して適切な制御パラメータを設定することで、分割実行を無効化した状態と等価な動作を実現できる。
このように、分割実行化されたアプリケーションプログラムの実行コード78のみを含む実行モジュール91自体はそのままで、呼び出し側のソースコードを自動補完することにより、分割実行を無効化した場合と同様の動作を実現できる。
<F.その他の実施の形態>
上述の説明においては、アプリケーションプログラムのソースコードに対してビルド処理することで、実行コードあるいは実行モジュールが生成される例を説明した。但し、ビルド処理(事前のコンパイル処理の一例)に限られず、例えば、プログラムコードを逐次解釈して実行するインタプリタ実行環境で実現してもよいし、あるいは、事前にソースコードを中間コードに変換しておき、この変換された中間コードを逐次解釈する準インタプリタ実行環境で実現してもよい。
<G.付記>
上述したような本実施の形態は、以下のような技術思想を含む。
[構成1]
一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する方法であって、
アプリケーションプログラムのソースコード(70)の入力を受付けるステップと、
前記アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令(784)を付加することで、前記アプリケーションプログラムの実行モジュール(78)を生成するステップとを備える、方法。
[構成2]
前記第1の命令は、
アプリケーションプログラムの実行開始から前記予め設定された時間が経過すると、当該時点の実行状態を保存する命令と、
前記保存した実行状態を復元する命令とを含む、構成1に記載の方法。
[構成3]
前記第1の命令は、アプリケーションプログラムの実行開始から前記予め設定された時間が経過すると割込イベントを発生するように割込タイマを設定するための命令をさらに含む、構成2に記載の方法。
[構成4]
前記第1の命令は、前記アプリケーションプログラムのソースコードに予め設定された中断ポイント毎に前記予め設定された時間が経過しているか否かを判断する命令をさらに含む、構成2に記載の方法。
[構成5]
前記アプリケーションプログラムのソースコードに対して前記中断ポイント(68)を挿入するステップをさらに備える、構成4に記載の方法。
[構成6]
前記実行モジュールを生成するステップは、前記第1の命令(784)を付加することで生成される第1の実行コード(78)と、前記第1の命令が付加されていない前記アプリケーションプログラムのソースコード(70)から生成された第2の実行コード(74)とを含む、前記実行モジュール(90)を生成する、構成1〜5のいずれか1項に記載の方法。
[構成7]
前記実行モジュールを生成するステップは、前記実行モジュールに含まれている実行コードの状態を示す情報を含むプログラム定義情報(92)を前記実行モジュール(90)に関連付けて生成するステップを含む、構成6に記載の方法。
[構成8]
前記実行モジュールを生成するステップは、前記アプリケーションプログラムのソースコード(70)に、当該アプリケーションプログラムの実行、中断、再開に係る制御パラメータの設定を受付けるための第2の命令(782)をさらに付加するステップを含む、構成1〜7のいずれか1項に記載の方法。
[構成9]
前記制御パラメータは、アプリケーションプログラムの実行を中断した箇所から再開する、および、アプリケーションプログラムを最初から実行する、のいずれかを選択するための情報(7820)を含む、構成8に記載の方法。
[構成10]
前記実行モジュールを参照するユーザプログラムの作成過程において、アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させる機能が有効化されているか否かに応じて、前記制御パラメータの設定の受付けを有効化するか否かを変化させるステップをさらに備える、構成8または9に記載の方法。
[構成11]
一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する装置であって、
アプリケーションプログラムのソースコードの入力を受付ける手段と、
前記アプリケーションプログラムのソースコード(70)に、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令(784)を付加することで、前記アプリケーションプログラムの実行モジュール(78)を生成する手段とを備える、装置。
[構成12]
コンピュータに、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成させるためのプログラムであって、前記プログラムは前記コンピュータに
アプリケーションプログラムのソースコード(70)の入力を受付けるステップと、
前記アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令(784)を付加することで、前記アプリケーションプログラムの実行モジュール(78)を生成するステップとを実行させる、プログラム。
<H.利点>
本実施の形態によれば、予め定められたタスク周期内に実行が完了しないアプリケーションプログラムを周期実行されるタスクとして登録した場合であっても、各タスク周期内では、予め設定された時間だけ実行させた後に中断させつつ、複数のタスク周期に亘って1回実行するような実行形態を提供できる。アプリケーションプログラムのソースを手作業で変更する必要がなく、このような複数のタスク周期に亘る実行を実現できるため、任意のアプリケーションプログラムを制御装置上で実行させることができ、制御装置をより高機能化させることができる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 制御システム、2 フィールドネットワーク、6 上位ネットワーク、10 デバイス、12 リモートI/O装置、14 リレー群、18 画像センサ、20 カメラ、22 サーボドライバ、24 サーボモータ、50 ユーザプログラム、52 シーケンス命令群、54,79,79A ファンクションブロック、56,58 処理時間、60,61,62,70,94 ソースコード、64,66 命令群、68 中断ポイント、72,76,96 ビルド処理、74,78,786 実行コード、80 プログラム実行用メモリ、82 退避用メモリ、84 実行状態、90,91,98 実行モジュール、92 プログラム定義情報、100 制御装置、102,202 プロセッサ、104 メインメモリ、106,208 ストレージ、108 上位ネットワークコントローラ、110 フィールドネットワークコントローラ、112,212 USBコントローラ、114 メモリカードインターフェイス、116 メモリカード、130 プロセッサバス、140 システムプログラム、200 サポート装置、204 光学ドライブ、205 記録媒体、206 主メモリ、214 ネットワークコントローラ、216 入力部、218 表示部、220 バス、230 サポートプログラム、232 ビルド処理モジュール、234 プログラミングツール、300,500 サーバ装置、400 表示装置、702 入力変数、704 出力変数、782 分割実行化インターフェイス、784 分割実行化コード、7820 継続フラグ、7822 分割時間、7824 完了フラグ。

Claims (11)

  1. 一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する方法であって、
    アプリケーションプログラムのソースコードの入力を受付けるステップと、
    前記アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令を付加することで、前記アプリケーションプログラムの実行モジュールを生成するステップとを備え
    前記第1の命令は、前記アプリケーションプログラムのソースコードに予め設定された中断ポイント毎に前記予め設定された時間が経過しているか否かを判断する命令を含む、方法。
  2. 前記第1の命令は、
    アプリケーションプログラムの実行開始から前記予め設定された時間が経過すると、当該時点の実行状態を保存する命令と、
    前記保存した実行状態を復元する命令とを含む、請求項1に記載の方法。
  3. 前記第1の命令は、アプリケーションプログラムの実行開始から前記予め設定された時間が経過すると割込イベントを発生するように割込タイマを設定するための命令をさらに含む、請求項2に記載の方法。
  4. 前記アプリケーションプログラムのソースコードに対して前記中断ポイントを挿入するステップをさらに備える、請求項1〜3のいずれか1項に記載の方法。
  5. 前記実行モジュールを生成するステップは、前記第1の命令を付加することで生成される第1の実行コードと、前記第1の命令が付加されていない前記アプリケーションプログラムのソースコードから生成された第2の実行コードとを含む、前記実行モジュールを生成する、請求項1〜のいずれか1項に記載の方法。
  6. 前記実行モジュールを生成するステップは、前記実行モジュールに含まれている実行コードの状態を示す情報を含むプログラム定義情報を前記実行モジュールに関連付けて生成するステップを含む、請求項に記載の方法。
  7. 前記実行モジュールを生成するステップは、前記アプリケーションプログラムのソースコードに、当該アプリケーションプログラムの実行、中断、再開に係る制御パラメータの設定を受付けるための第2の命令をさらに付加するステップを含む、請求項1〜のいずれか1項に記載の方法。
  8. 前記制御パラメータは、アプリケーションプログラムの実行を中断した箇所から再開する、および、アプリケーションプログラムを最初から実行する、のいずれかを選択するための情報を含む、請求項に記載の方法。
  9. 前記実行モジュールを参照するユーザプログラムの作成過程において、アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させる機能が有効化されているか否かに応じて、前記制御パラメータの設定の受付けを有効化するか否かを変化させるステップをさらに備える、請求項またはに記載の方法。
  10. 一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成する装置であって、
    アプリケーションプログラムのソースコードの入力を受付ける手段と、
    前記アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令を付加することで、前記アプリケーションプログラムの実行モジュールを生成する手段とを備え
    前記第1の命令は、前記アプリケーションプログラムのソースコードに予め設定された中断ポイント毎に前記予め設定された時間が経過しているか否かを判断する命令を含む、装置。
  11. コンピュータに、一定のタスク周期毎に周期実行されるタスクに含まれるアプリケーションプログラムを生成させるためのプログラムであって、前記プログラムは前記コンピュータに
    アプリケーションプログラムのソースコードの入力を受付けるステップと、
    前記アプリケーションプログラムのソースコードに、当該アプリケーションプログラムをタスク周期内において予め設定された時間だけ実行させた後に中断させ、次のタスク周期において当該アプリケーションプログラムの実行を再開するための第1の命令を付加することで、前記アプリケーションプログラムの実行モジュールを生成するステップとを実行させ
    前記第1の命令は、前記アプリケーションプログラムのソースコードに予め設定された中断ポイント毎に前記予め設定された時間が経過しているか否かを判断する命令を含む、プログラム。
JP2018020210A 2018-02-07 2018-02-07 アプリケーションプログラムを生成する方法、装置、プログラム Active JP6874706B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2018020210A JP6874706B2 (ja) 2018-02-07 2018-02-07 アプリケーションプログラムを生成する方法、装置、プログラム
US16/190,172 US10983772B2 (en) 2018-02-07 2018-11-14 Method, apparatus and program for generating application program
EP18206222.4A EP3525095A1 (en) 2018-02-07 2018-11-14 Method, apparatus and program for generating application program
CN201811355467.2A CN110119119A (zh) 2018-02-07 2018-11-14 生成应用程序的方法、装置、计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018020210A JP6874706B2 (ja) 2018-02-07 2018-02-07 アプリケーションプログラムを生成する方法、装置、プログラム

Publications (2)

Publication Number Publication Date
JP2019139365A JP2019139365A (ja) 2019-08-22
JP6874706B2 true JP6874706B2 (ja) 2021-05-19

Family

ID=64316380

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018020210A Active JP6874706B2 (ja) 2018-02-07 2018-02-07 アプリケーションプログラムを生成する方法、装置、プログラム

Country Status (4)

Country Link
US (1) US10983772B2 (ja)
EP (1) EP3525095A1 (ja)
JP (1) JP6874706B2 (ja)
CN (1) CN110119119A (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111078205B (zh) * 2019-11-22 2024-01-26 北京锐安科技有限公司 一种模块化编程方法、装置、存储介质及电子设备
JP7375632B2 (ja) * 2020-03-13 2023-11-08 オムロン株式会社 制御システムおよびサポート装置
CN112925457A (zh) * 2021-02-19 2021-06-08 深圳市云基航空科技有限责任公司 应用程序的控制方法、装置、存储介质及终端

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5592675A (en) * 1992-01-08 1997-01-07 Hitachi, Ltd. Computer controlled method and system capable of preserving information representing plural work states and recovering the work states
US5765000A (en) * 1994-12-29 1998-06-09 Siemens Energy & Automation, Inc. Dynamic user interrupt scheme in a programmable logic controller
US6480818B1 (en) * 1998-11-13 2002-11-12 Cray Inc. Debugging techniques in a multithreaded environment
JP4693326B2 (ja) * 1999-12-22 2011-06-01 ウビコム インコーポレイテッド 組込み型プロセッサにおいてゼロタイムコンテクストスイッチを用いて命令レベルをマルチスレッド化するシステムおよび方法
US6766471B2 (en) * 2000-12-28 2004-07-20 International Business Machines Corporation User-level checkpoint and restart for groups of processes
US7047519B2 (en) * 2001-09-26 2006-05-16 International Business Machines Corporation Dynamic setting of breakpoint count attributes
US20040040013A1 (en) * 2002-08-26 2004-02-26 Mohit Kalra Time-based breakpoints in debuggers
JP2004102324A (ja) * 2002-09-04 2004-04-02 Oki Electric Ind Co Ltd 割り込みプログラムモジュール、該モジュールを記録した記録媒体およびモニタのための割り込み処理が可能のコンピュータ
US7882488B2 (en) * 2003-10-20 2011-02-01 Robert Zeidman Software tool for synthesizing a real-time operating system
CN1310146C (zh) * 2004-02-09 2007-04-11 中兴通讯股份有限公司 单片机操作系统的模块化实现方法
US7484220B2 (en) * 2004-05-26 2009-01-27 Qualcomm Incorporated Method, software and apparatus for using application state history information when re-launching applications
EP1779245B1 (en) * 2004-07-20 2018-06-13 Microsoft Technology Licensing, LLC Method and system for minimizing loss in a computer application
US20060136886A1 (en) 2004-12-16 2006-06-22 Bret Patterson Process and implementation for interrupting locked threads
JP2006294010A (ja) * 2005-03-15 2006-10-26 Omron Corp プログラマブル・コントローラのユーザプログラム実行方法
US7716461B2 (en) * 2006-01-12 2010-05-11 Microsoft Corporation Capturing and restoring application state after unexpected application shutdown
JP4784827B2 (ja) * 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
CN101174144A (zh) * 2006-10-30 2008-05-07 发那科株式会社 具备继续加工功能的数值控制装置
JP4940996B2 (ja) * 2007-02-23 2012-05-30 富士通セミコンダクター株式会社 プロファイリング装置およびプロファイリングプログラム
CN101216792B (zh) * 2008-01-14 2010-06-09 中兴通讯股份有限公司 实时操作系统的任务管理方法、装置
US8291261B2 (en) * 2008-11-05 2012-10-16 Vulcan Technologies Llc Lightweight application-level runtime state save-and-restore utility
US8370493B2 (en) * 2008-12-12 2013-02-05 Amazon Technologies, Inc. Saving program execution state
US8418181B1 (en) * 2009-06-02 2013-04-09 Amazon Technologies, Inc. Managing program execution based on data storage location
CN101599663B (zh) * 2009-07-07 2012-01-25 厦门士林电机有限公司 一种智能控制器的实时控制系统
JP4807475B1 (ja) * 2011-03-15 2011-11-02 オムロン株式会社 演算ユニット、出力制御方法、およびプログラム
US9645913B2 (en) * 2011-08-03 2017-05-09 Daniel Geist Method and apparatus for debugging programs
US20140089646A1 (en) * 2012-09-27 2014-03-27 Texas Instruments Incorporated Processor with interruptable instruction execution
US9122798B2 (en) * 2013-03-07 2015-09-01 Oracle International Corporation Debugger with method restart capability
US9785536B2 (en) * 2013-11-29 2017-10-10 Nxp Usa, Inc. Code injection for conditional breakpoints
US10180674B2 (en) 2014-03-14 2019-01-15 Omron Corporation Controller and control system
JP6287709B2 (ja) * 2014-09-09 2018-03-07 三菱電機株式会社 プログラム埋め込み装置
US10521329B2 (en) * 2015-05-08 2019-12-31 Intergral GmbH Debugging system
US10452428B2 (en) 2016-03-14 2019-10-22 International Business Machines Corporation Application execution with optimized code for use profiles
US10353826B2 (en) * 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system

Also Published As

Publication number Publication date
US20190243624A1 (en) 2019-08-08
CN110119119A (zh) 2019-08-13
US10983772B2 (en) 2021-04-20
EP3525095A1 (en) 2019-08-14
JP2019139365A (ja) 2019-08-22

Similar Documents

Publication Publication Date Title
JP5099251B1 (ja) Plcのcpuユニット、plc用のシステムプログラム、plc用のシステムプログラムを格納した記録媒体、plcシステム、plcサポート装置、plcサポートプログラム、および、plcサポートプログラムを格納した記録媒体
JP6874706B2 (ja) アプリケーションプログラムを生成する方法、装置、プログラム
JP6406466B1 (ja) 制御装置、制御方法および制御プログラム
CN110663006B (zh) 对可编程逻辑控制器执行故障转移并控制物理系统的方法
JP5270330B2 (ja) マルチコアマイコンシステムのシミュレーション方法及びシミュレーション装置
WO2018186358A1 (ja) 制御装置、制御方法および制御プログラム
WO2020017264A1 (ja) シミュレーション装置、及びその方法、並びにecu装置
US7168075B1 (en) Automation device and updating method
JP2018132829A (ja) 制御装置
US20010027387A1 (en) Debugging supporting apparatus, debugging supporting method and recording medium readable by computer with its programs recorded thereon
JP2020061055A (ja) 制御システム、制御装置および制御方法
JP6362821B2 (ja) 制御装置、制御方法および命令セット
JP7085305B2 (ja) コントロールシステム及びコントロール方法
JP7327225B2 (ja) ロボット制御システムおよび制御方法
JP7151161B2 (ja) 制御システム、サポート装置、サポートプログラム
WO2022249713A1 (ja) 制御システム、システムプログラムおよびデバッグ方法
JP2017102528A (ja) プログラマブルコントローラ
JP4784355B2 (ja) プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法、プログラミング支援プログラム、プログラマブルコントローラのデバッグ制御プログラム
EP1227401B1 (en) Task management device, method and program therefor
Colnaric State of the art review paper: advances in embedded hard real-time systems design
CN118708167A (zh) 电能表扩展模组架构生成方法、装置、扩展模组及介质
JP2023151731A (ja) 制御システム、制御方法、および制御プログラム
JP2020107206A (ja) マイクロコンピュータ、デバッグ情報出力方法、およびデバッグシステム
JPS62162107A (ja) プログラマブルコントロ−ラにおけるプログラム変更方法
van der Linden et al. Towards evolvable state machines for automation systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200305

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210126

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210218

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210323

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210405

R150 Certificate of patent or registration of utility model

Ref document number: 6874706

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250