WO2020071435A1 - 開発支援プログラム、開発支援装置、および開発支援方法 - Google Patents
開発支援プログラム、開発支援装置、および開発支援方法Info
- Publication number
- WO2020071435A1 WO2020071435A1 PCT/JP2019/038954 JP2019038954W WO2020071435A1 WO 2020071435 A1 WO2020071435 A1 WO 2020071435A1 JP 2019038954 W JP2019038954 W JP 2019038954W WO 2020071435 A1 WO2020071435 A1 WO 2020071435A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- execution
- module
- function module
- data type
- type
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/05—Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
- G05B19/056—Programming the PLC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/042—Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
- G05B19/0426—Programming the control sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Programmable Controllers (AREA)
Abstract
周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込むことができる環境を提供する。開発支援プログラム(50)は、コンピュータに、非周期実行型の第1機能モジュール(55A)を呼び出す周期実行型の第2機能モジュール(55B)を生成するステップ(S14,S16)を実行させる。当該ステップ(S14,S16)は、第1機能モジュール(55A)の引数のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数を第2機能モジュール(55B)に設定するステップ(S14)と、第1機能モジュール(55A)の戻り値のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数を第2機能モジュール(55B)に設定するステップ(S16)とを含む。
Description
本開示は、コントローラの制御プログラムの作成を支援するための技術に関する。
様々な製造現場において、PLC(Programmable Logic Controller)などのコントローラが導入されている。コントローラは、一種のコンピュータであり、製造装置や製造設備などに応じて設計された制御プログラムが実行される。このような制御プログラムは、コントローラとは別に用意されたサポート装置を用いて作成される。
たとえば、特開2016-224557号公報(特許文献1)は、グラフィカルプログラミング言語により記述されるプログラムと高級プログラミング言語により記述されるプログラムを作成するユーザの負担を軽減するための技術を開示している。
コントローラの制御プログラムは、周期実行型のプログラミング言語で記述される。周期実行型とは、制御プログラムの先頭行から最終行までが予め定められた周期ごとに繰り返し実行される実行形態をいう。すなわち、周期実行型の制御プログラムにおいては、プログラムの実行周期が保障されている。
このような周期実行型の制御プログラムから、非周期実行型のプログラミング言語で記述される機能モジュールを呼び出したいという要望がある。非周期実行型とは、プログラムの各行が逐次的に実行される実行形態をいう。非周期実行型の機能モジュールにおいては、実行を開始してから終了するまでの時間が保障されない。
設計者は、周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込む場合、周期実行型のプログラミング言語に関する知識だけでなく、非周期実行型のプログラミング言語に関する知識が必要となる。そのため、非周期実行型のプログラミング言語に関する知識を有さない設計者は、周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込むことができない。
本開示は上述のような問題点を解決するためになされたものであって、ある局面における目的は、周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込むことが可能な開発支援プログラムを提供することである。他の局面における目的は、周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込むことが可能な開発支援装置を提供することである。他の局面における目的は、周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込むことが可能な開発支援方法を提供することである。
本開示の一例では、コントローラ用の制御プログラムの開発を支援するための開発支援プログラムは、コンピュータに、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係を取得するステップと、上記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュールの引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報を取得するステップと、上記非周期実行型の機能モジュールを呼び出すための機能モジュールであって、上記制御プログラムで利用可能な周期実行型の機能モジュールを生成するステップとを実行させる。上記生成するステップは、上記対応関係および上記定義情報に基づいて、上記引数のデータ型に対応する、上記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり上記引数の値を反映するための入力変数を上記周期実行型の機能モジュールの入力インターフェイスとして設定するステップと、上記対応関係および上記定義情報に基づいて、上記戻り値のデータ型に対応する、上記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり上記戻り値を反映するための出力変数を上記周期実行型の機能モジュールの出力インターフェイスとして設定するステップとを含む。
この開示によれば、開発支援プログラムは、非周期実行型の機能モジュールの定義情報からラッパーモジュールとしての周期実行型の機能モジュールを生成することができる。ラッパーモジュールである機能モジュールが自動で生成されることで、非周期実行型のプログラミング言語に関する知識がない設計者であっても、ラッパーモジュールである機能モジュールを介して非周期実行型の機能モジュールを利用することができる。また、ラッパーモジュールである機能モジュールが自動で生成されることで、設計者は、コントローラの制御プログラムから非周期実行型の機能モジュールを呼び出すためのプログラミングを行う必要がない。その結果、設計工数が削減される。
本開示の一例では、上記生成するステップで生成される上記周期実行型の機能モジュールは、上記非周期実行型の機能モジュールを呼び出してから上記非周期実行型の機能モジュールの実行が完了するまでの間、上記制御プログラムの実行を中断するように動作する。
この開示によれば、ラッパーモジュールとしての機能モジュールは、制御プログラムの実行周期に同期させて、非周期実行型の機能モジュールを呼び出すことができる。
本開示の一例では、上記生成するステップで生成される上記周期実行型の機能モジュールは、上記非周期実行型の機能モジュールの実行完了を待たずに上記制御プログラムを継続して実行するように動作する。
この開示によれば、ラッパーモジュールとしての機能モジュールは、制御プログラムの実行と並列して、非周期実行型の機能モジュールを呼び出すことができる。
本開示の一例では、上記生成するステップは、上記非周期実行型の機能モジュールの実行完了を反映するための出力変数を上記周期実行型の機能モジュールの出力に設定するステップをさらに含む。
この開示によれば、周期実行型の機能モジュールの実行結果が、ラッパーモジュールとしての機能モジュールの出力変数に反映される。
本開示の一例では、上記入力変数の名前は、上記引数の名前と同じである。
この開示によれば、設計者は、ラッパー対象の機能モジュールの引数名と、ラッパーモジュールとしての機能モジュールの入力変数との対応関係を把握しやすくなる。
この開示によれば、設計者は、ラッパー対象の機能モジュールの引数名と、ラッパーモジュールとしての機能モジュールの入力変数との対応関係を把握しやすくなる。
本開示の一例では、上記周期実行型の機能モジュールのモジュール名は、上記非周期実行型の機能モジュールのモジュール名と同じである。
この開示によれば、設計者は、ラッパー対象の機能モジュールのモジュール名と、ラッパーモジュールとしての機能モジュールのモジュール名との対応関係を把握しやすくなる。
本開示の他の例では、コントローラ用の制御プログラムの開発を支援するための開発支援装置は、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係を格納する記憶装置を備える。上記記憶装置は、上記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュールの引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報をさらに格納する。開発支援装置は、上記非周期実行型の機能モジュールを呼び出すための機能モジュールであって、上記制御プログラムで利用可能な周期実行型の機能モジュールを生成するための制御装置をさらに備える。上記制御装置は、上記対応関係および上記定義情報に基づいて、上記引数のデータ型に対応する、上記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり上記引数の値を反映するための入力変数を上記周期実行型の機能モジュールの入力インターフェイスとして設定し、上記対応関係および上記定義情報に基づいて、上記戻り値のデータ型に対応する、上記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり上記戻り値を反映するための出力変数を上記周期実行型の機能モジュールの出力インターフェイスとして設定する。
この開示によれば、開発支援装置は、非周期実行型の機能モジュールの定義情報からラッパーモジュールとしての周期実行型の機能モジュールを生成することができる。ラッパーモジュールである機能モジュールが自動で生成されることで、非周期実行型のプログラミング言語に関する知識がない設計者であっても、ラッパーモジュールである機能モジュールを介して非周期実行型の機能モジュールを利用することができる。また、ラッパーモジュールである機能モジュールが自動で生成されることで、設計者は、コントローラの制御プログラムから非周期実行型の機能モジュールを呼び出すためのプログラミングを行う必要がない。その結果、設計工数が削減される。
本開示の他の例では、コントローラ用の制御プログラムの開発を支援するための開発支援方法は、開発支援装置が、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係を取得するステップと、上記開発支援装置が、上記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュールの引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報を取得するステップと、上記開発支援装置が、上記非周期実行型の機能モジュールを呼び出すための機能モジュールであって、上記制御プログラムで利用可能な周期実行型の機能モジュールを生成するステップとを備える。上記生成するステップは、上記開発支援装置が、上記対応関係および上記定義情報に基づいて、上記引数のデータ型に対応する、上記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり上記引数の値を反映するための入力変数を上記周期実行型の機能モジュールの入力インターフェイスとして設定するステップと、上記開発支援装置が、上記対応関係および上記定義情報に基づいて、上記戻り値のデータ型に対応する、上記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり上記戻り値を反映するための出力変数を上記周期実行型の機能モジュールの出力インターフェイスとして設定するステップとを含む。
この開示によれば、開発支援方法は、非周期実行型の機能モジュールの定義情報からラッパーモジュールとしての周期実行型の機能モジュールを生成することができる。ラッパーモジュールである機能モジュールが自動で生成されることで、非周期実行型のプログラミング言語に関する知識がない設計者であっても、ラッパーモジュールである機能モジュールを介して非周期実行型の機能モジュールを利用することができる。また、ラッパーモジュールである機能モジュールが自動で生成されることで、設計者は、コントローラの制御プログラムから非周期実行型の機能モジュールを呼び出すためのプログラミングを行う必要がない。その結果、設計工数が削減される。
ある局面において、周期実行型の制御プログラムに非周期実行型の機能モジュールを組み込むことができる。
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
<A.適用例>
まず、図1を参照して、本発明の適用例について説明する。図1は、実施の形態に従う開発支援装置100を示す図である。
まず、図1を参照して、本発明の適用例について説明する。図1は、実施の形態に従う開発支援装置100を示す図である。
開発支援装置100は、たとえば、ノート型またはデスクトップ型のPC(Personal Computer)、タブレット端末、スマートフォン、または、その他の情報処理装置である。
開発支援装置100には、開発支援プログラム50がインストールされている。開発支援プログラム50は、コントローラ用の制御プログラムの開発を支援するためのアプリケーションである。開発支援プログラム50は、たとえば、オムロン社製の「Sysmac Studio」である。ユーザは、開発支援プログラム50上でコントローラ用の制御プログラムを設計し、設計した制御プログラムをコントローラにインストールすることができる。
コントローラ用の制御プログラムは、周期実行型のプログラミング言語で記述される。周期実行型とは、制御プログラムの先頭行から最終行までが予め定められた周期ごとに繰り返し実行される実行形態をいう。すなわち、周期実行型の制御プログラムにおいては、プログラムの実行周期が保障されている。周期実行型のプログラミング言語としては、たとえば、ラダー言語やST(Structured Text)言語などが挙げられる。
本実施の形態に従う開発支援装置100は、非周期実行型のプログラミング言語で記述される機能モジュールを呼び出すための機能モジュールであって、コントローラ用の制御プログラムで利用可能な周期実行型の機能モジュールを自動で生成する。非周期実行型とは、プログラムの各行が逐次的に実行される実行形態をいう。非周期実行型の機能モジュールにおいては、実行を開始してから終了するまでの時間が保障されない。非周期実行型のプログラミング言語としては、たとえば、C言語、C++、Java(登録商標)、Pythonなどが挙げられる。
図1の例では、開発支援装置100は、非周期実行型の機能モジュール55Aを呼び出すためのラッパーモジュールとして周期実行型の機能モジュール55Bを自動生成している。
より具体的には、まず、開発支援プログラム50は、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係121を所定の格納先から取得する。当該所定の格納先は、開発支援装置100内の記憶装置であってもよいし、開発支援装置100と通信可能な外部装置(たとえば、サーバー等)であってもよい。
次に、開発支援プログラム50は、非周期実行型の機能モジュール55Aに関する定義情報122を取得する。一例として、定義情報122には、機能モジュール55Aのモジュール名、機能モジュール55Aの引数のデータ型、機能モジュール55Aの引数の変数名、機能モジュール55Aの戻り値のデータ型、機能モジュール55Aの戻り値が反映される変数の名前などが規定されている。
図1の定義情報122の例では、機能モジュール55Aのモジュール名として、「sample」が例示されている。機能モジュール55Aの引数のデータ型として、「float」型および「double」型が例示されている。機能モジュール55Aの引数の変数名として、「in1」、「in2」が例示されている。機能モジュール55Aの戻り値のデータ型として、「bool」型が例示されている。機能モジュール55Aの戻り値が反映される変数の名前として、「ret」が例示されている。
開発支援プログラム50は、対応関係121および定義情報122に基づいて、非周期実行型の機能モジュール55Aの引数のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定する。図1の例では、引数「in1」のデータ型「float」に対してデータ型「REAL」が特定され、引数「in2」のデータ型「double」に対してデータ型「LREAL」が特定される。開発支援プログラム50は、当該特定したデータ型「REAL」,「LREAL」の入力変数55B1,55B2を周期実行型の機能モジュール55Bの入力インターフェイスとして設定する。機能モジュール55Bの入力変数55B1,55B2は、機能モジュール55Aの引数「in1」,「in2」の値を反映するための入力インターフェイスである。
また、開発支援プログラム50は、対応関係121および定義情報122に基づいて、非周期実行型の機能モジュール55Aの戻り値のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定する。図1の例では、機能モジュール55Aの戻り値のデータ型「bool」に対して、データ型「BOOL」が特定される。開発支援プログラム50は、当該特定したデータ型「BOOL」の出力変数を周期実行型の機能モジュール55Bの出力インターフェイスとして設定する。機能モジュール55Bの出力変数55B3は、機能モジュール55Aの戻り値を反映するための出力インターフェイスである。
「変数」とは、コントローラ用の制御プログラムにおいて扱われるデータに与えられた識別子である。典型的には、「変数」は、コントローラやコントローラの制御対象の状態を表わすデータである。異なる言い方をすれば、「変数」とは、コントローラやコントローラの制御対象の状態に連動して値が変化するデータのことをいう。「変数」との概念は、一つの値を表わすデータ、配列として表されるデータ、構造体として表されるデータ、制御プログラムに規定され得る種々のデータを含み得る。
以上のように、開発支援プログラム50は、機能モジュール55Aの定義情報122からラッパーモジュールとしての機能モジュール55Bを生成することができる。ラッパーモジュールである機能モジュール55Bが自動で生成されることで、非周期実行型のプログラミング言語に関する知識がない設計者であっても、機能モジュール55Bを介して非周期実行型の機能モジュール55Aを利用することができる。また、ラッパーモジュールである機能モジュール55Bが自動で生成されることで、設計者は、コントローラ200の制御プログラムから非周期実行型の機能モジュール55Aを呼び出すためのプログラミングを行う必要がない。その結果、設計工数が削減される。
なお、図1の例では、対応関係121において、2種類のプログラミング言語間のデータ型の対応関係が規定されているが、3種類以上のプログラミング言語間のデータ型の対応関係が規定されてもよい。
また、図1の例では、定義情報122において、1つの機能モジュール55Aに関する入出力インターフェイスの情報が規定されているが、複数の機能モジュール55Aのそれぞれに関する入出力インターフェイスの情報が規定されてもよい。
<B.FAシステム1のシステム構成>
図2は、FAシステム1のシステム構成の一例を示す図である。図2を参照して、FAシステム1のシステム構成について説明する。
図2は、FAシステム1のシステム構成の一例を示す図である。図2を参照して、FAシステム1のシステム構成について説明する。
FAシステム1は、生産工程を自動化するためのシステムである。FAシステム1は、1つ以上の開発支援装置100と、1つ以上のコントローラ200と、1つ以上の駆動機器300と、1つ以上の外部機器400とで構成される。
開発支援装置100、コントローラ200、および外部機器400は、ネットワークNW1に接続されている。ネットワークNW1には、EtherNET(登録商標)などが採用される。
コントローラ200および駆動機器300は、ネットワークNW2に接続されている。ネットワークNW2には、データの到達時間が保証される、定周期通信を行うフィールドネットワークを採用することが好ましい。このような定周期通信を行うフィールドネットワークとしては、EtherCAT(登録商標)、EtherNet/IP(登録商標)、登録商標)、CompoNet(登録商標)などが知られている。
駆動機器300は、生産工程を自動化するための種々の産業用機器を含む。一例として、駆動機器300は、ロボットコントローラ300Aや、サーボドライバ300Bや、ロボットコントローラ300Aに制御されるアームロボット301Aや、サーボドライバ300Bによって制御されるサーボモータ301Bなどを含む。また、駆動機器300は、ワークを撮影するための視覚センサや、生産工程で利用されるその他の機器などを含んでもよい。
設計者は、開発支援プログラム50を実行することで、ユーザプログラム210の開発ツールを起動することができる。設計者は、起動された開発ツール上でユーザプログラム210を設計することができる。このとき、設計者は、図1で説明したラッパーモジュールとしての機能モジュール55Bをユーザプログラム210に組み込むことができる。設計されたユーザプログラム210は、コンパイルされた上でコントローラ200に転送される。
コントローラ200は、ユーザプログラム210の実行開始命令を受け付けたことに基づいてユーザプログラム210の実行を開始し、ユーザプログラム210に規定される制御命令に従って駆動機器300を制御する。ユーザプログラム210の実行中において、ラッパーモジュールである機能モジュール55Bが実行された場合、コントローラ200は、対応する機能モジュール55Aの実行開始命令を外部機器400に送信する。外部機器400は、当該実行開始命令を受信したことに基づいて、機能モジュール55Aの実行を開始する。その後、外部機器400は、機能モジュール55Aの実行結果をコントローラ200に送信する。
なお、上述では、機能モジュール55Aの実行を外部機器400に委託する例について説明を行ったが、機能モジュール55Aの実行は、必ずしも外部機器400に委託される必要はない。機能モジュール55Aの実行を外部機器400に委託しないパターンについては後述する。
<C.ハードウェア構成>
図3~図5を参照して、図2に示される開発支援装置100、コントローラ200、および外部機器400のハードウェア構成について順に説明する。
図3~図5を参照して、図2に示される開発支援装置100、コントローラ200、および外部機器400のハードウェア構成について順に説明する。
(C1.開発支援装置100のハードウェア構成)
まず、図3を参照して、開発支援装置100のハードウェア構成について説明する。図3は、開発支援装置100のハードウェア構成の一例を示す模式図である。
まず、図3を参照して、開発支援装置100のハードウェア構成について説明する。図3は、開発支援装置100のハードウェア構成の一例を示す模式図である。
開発支援装置100は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。開発支援装置100は、CPU(Central Processing Unit)やMPU(Micro-Processing Unit)などの制御装置102と、主メモリ104と、通信インターフェイス111と、I/O(Input/Output)インターフェイス114と、表示インターフェイス117と、不揮発性の記憶装置120とを含む。これらのコンポーネントは、内部バス125を介して互いに通信可能に接続されている。
制御装置102は、記憶装置120に格納されている開発支援プログラム50を主メモリ104に展開して実行することで、ユーザプログラム210(図2参照)の開発ツールを起動する。記憶装置120は、開発支援プログラム50の他にも、ラッパーモジュールとしての機能モジュール55B(図1参照)を生成するための各種データ56を格納する。
通信インターフェイス111は、他の通信機器との間でネットワークを介してデータを遣り取りする。当該他の通信機器は、たとえば、コントローラ200、外部機器400、サーバなどを含む。開発支援装置100は、通信インターフェイス111を介して、当該他の通信機器から、開発支援プログラム50などの各種プログラムをダウンロード可能なように構成されてもよい。
I/Oインターフェイス114は、操作部115に接続され、操作部115からのユーザ操作を示す信号を取り込む。操作部115は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。操作部115は、開発支援装置100と一体的に構成されてもよいし、開発支援装置100とは別に構成されてもよい。
表示インターフェイス117は、表示部118と接続され、制御装置102などからの指令に従って、表示部118に対して、画像を表示するための画像信号を送出する。表示部118は、LCD(Liquid Crystal Display)や有機EL(Electro Luminescence)ディスプレイなどからなり、ユーザに対して各種情報を提示する。表示部118は、開発支援装置100と一体的に構成されてもよいし、開発支援装置100とは別に構成されてもよい。
(C2.コントローラ200のハードウェア構成)
次に、図4を参照して、コントローラ200のハードウェア構成について説明する。図4は、コントローラ200のハードウェア構成の一例を示す模式図である。
次に、図4を参照して、コントローラ200のハードウェア構成について説明する。図4は、コントローラ200のハードウェア構成の一例を示す模式図である。
コントローラ200は、通信インターフェイス201と、CPUやMPUなどの制御装置202と、チップセット204と、主メモリ206と、不揮発性の記憶装置208と、内部バスコントローラ222と、フィールドバスコントローラ224と、メモリカードインターフェイス239とを含む。
制御装置202は、記憶装置208に格納された制御プログラム211を読み出して、主メモリ206に展開して実行することで、ロボットコントローラ300Aやサーボドライバ300Bなどの駆動機器300に対する任意の制御を実現する。制御プログラム211は、コントローラ200を制御するための各種プログラムを含む。一例として、制御プログラム211は、システムプログラム209およびユーザプログラム210などを含む。システムプログラム209は、データの入出力処理や実行タイミング制御などの、コントローラ200の基本的な機能を提供するための命令コードを含む。ユーザプログラム210は、開発支援装置100からダウンロードされたものである。ユーザプログラム210は、制御対象に応じて任意に設計され、シーケンス制御を実行するためのシーケンスプログラム210Aおよびモーション制御を実行するためのモーションプログラム210Bとを含む。
チップセット204は、各コンポーネントを制御することで、コントローラ200全体としての処理を実現する。
記憶装置208は、制御プログラム211や、コントローラ200で用いられる各種データ212を格納する。
内部バスコントローラ222は、コントローラ200と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、I/Oユニット226が接続されている。
フィールドバスコントローラ224は、コントローラ200とフィールドバスを通じて連結される各種の駆動機器300とデータを遣り取りするインターフェイスである。このようなデバイスの一例として、ロボットコントローラ300Aやサーボドライバ300Bが接続されている。他にも、視覚センサなどの駆動機器が接続されてもよい。
内部バスコントローラ222およびフィールドバスコントローラ224は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータを取得することができる。また、内部バスコントローラ222および/またはフィールドバスコントローラ224は、ロボットコントローラ300Aやサーボドライバ300Bとの間でデータを遣り取りするためのインターフェイスとしても機能する。
通信インターフェイス201は、各種の有線/無線ネットワークを通じたデータの遣り取りを制御する。コントローラ200は、通信インターフェイス201を介して、開発支援装置100や外部機器400と通信を行う。
メモリカードインターフェイス239は、外部記憶媒体の一例であるメモリカード240(たとえば、SDカード)を着脱可能に構成されており、メモリカード240に対してデータを書き込み、メモリカード240からデータを読出すことが可能になっている。
(C3.外部機器400のハードウェア構成)
次に、図5を参照して、外部機器400のハードウェア構成について説明する。図5は、外部機器400のハードウェア構成の一例を示すブロック図である。
次に、図5を参照して、外部機器400のハードウェア構成について説明する。図5は、外部機器400のハードウェア構成の一例を示すブロック図である。
外部機器400は、汎用的なアーキテクチャを有するハードウェア構成を有している。すなわち、外部機器400は、一種のパーソナルコンピュータとして実装される。但し、外部機器400を汎用的なハードウェアではなく、専用ハードウェアを用いて実装してもよい。
より具体的には、外部機器400は、CPUやMPUなどの制御装置402と、主メモリ404と、不揮発性の記憶装置410と、通信インターフェイス412と、I/Oインターフェイス414と、表示インターフェイス420とを含む。これらのコンポーネントは、内部バス425を介して、互いにデータ通信可能に接続されている。
制御装置402は、記憶装置410に格納された制御プログラム(図示しない)を読み出して、主メモリ404に展開して実行することで、外部機器400を制御する。すなわち、制御装置402は、主メモリ404および記憶装置410と連係することで、制御演算を実行する制御部を実現する。
通信インターフェイス412、I/Oインターフェイス414、および、フィールドバスインターフェイス416は、外部機器400と他の通信機器とのデータの遣り取りを仲介する。
より具体的には、通信インターフェイス412は、ネットワークNW1(図1参照)などを介した、コントローラ200との通信を仲介する。通信インターフェイス412には、たとえば、EtherNETに従う通信が可能なコンポーネントが採用され得る。
I/Oインターフェイス414は、操作部415に接続され、操作部415からのユーザ操作を示す信号を取り込む。操作部415は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。操作部415は、外部機器400と一体的に構成されてもよいし、外部機器400とは別に構成されてもよい。
表示インターフェイス420は、表示部421と接続され、制御装置402などからの指令に従って、表示部421に対して、画像を表示するための画像信号を送出する。表示部421は、LCDや有機ELディスプレイなどからなり、ユーザに対して各種情報を提示する。表示部421は、外部機器400と一体的に構成されてもよいし、外部機器400とは別に構成されてもよい。
<D.開発支援装置100の機能構成>
図6を参照して、開発支援装置100の機能構成について説明する。図6は、開発支援装置100の機能構成の一例を示す図である。
図6を参照して、開発支援装置100の機能構成について説明する。図6は、開発支援装置100の機能構成の一例を示す図である。
開発支援装置100は、ハードウェア構成として、制御装置102と、記憶装置120とを含む。制御装置102は、機能構成として、プログラム解析部152と、モジュール登録部154と、ラッパーモジュール生成部156と、エディター部158と、ビルド部160とを含む。記憶装置120は、上述の各種データ56(図3参照)と、ユーザプログラム210とを格納している。各種データ56は、上述のデータ型の対応関係121と、上述の定義情報122と、ラッパーモジュール126と、モジュール対応関係127とを含む。
以下では、プログラム解析部152、モジュール登録部154、ラッパーモジュール生成部156、エディター部158、およびビルド部160の機能について順に説明する。
(D1.プログラム解析部152)
まず、図7を参照して、図6に示されるプログラム解析部152について説明する。図7は、プログラム解析部152の機能を説明するための図である。
まず、図7を参照して、図6に示されるプログラム解析部152について説明する。図7は、プログラム解析部152の機能を説明するための図である。
プログラム解析部152は、非周期実行型のプログラム60を解析し、上述の定義情報122(図1参照)を自動生成する。より具体的には、プログラム解析部152は、非周期実行型のプログラム60から機能モジュール55A(たとえば、関数)の宣言部分を特定する。次に、プログラム解析部152は、特定した宣言部分から、機能モジュール55Aのモジュール名と、機能モジュール55Aの引数のデータ型と、機能モジュール55Aの引数の変数名と、機能モジュール55Aの戻り値のデータ型とを抽出する。図7の例では、モジュール名として「sample」が抽出され、引数のデータ型として「float」型および「double」型が抽出され、引数の変数名として「in1」および「in2」が抽出され、戻り値のデータ型として「bool」が抽出される。
さらに、プログラム解析部152は、機能モジュール55Aの内部の記述を解析し、戻り値の変数名を取得する。一例として、プログラム解析部152は、予め定められたキーワード(たとえば、"return")を探索し、当該キーワードに続く記述を戻り値の変数名として取得する。図7の例では、戻り値の変数名として「ret」が取得される。
プログラム解析部152は、モジュール名「sample」と、引数のデータ型「float」,「double」と、引数の変数名「in1」,「in2」と、戻り値のデータ型「bool」と、戻り値の変数名「ret」とを対応付けた上でそれらを定義情報122に書き込む。定義情報122は、たとえば、開発支援装置100の記憶装置120に格納される。
なお、図7の例では、機能モジュール55Aの処理内容がプログラム60に規定されているが、機能モジュール55Aの宣言部のみがプログラム60に規定されていてもよい。この場合、プログラム解析部152は、機能モジュール55Aの宣言のみを規定したヘッダファイルとしてのプログラム60を読み込む。当該ヘッダファイルは、機能モジュール55Aのモジュール名と、機能モジュール55Aの引数のデータ型と、機能モジュール55Aの引数の変数名と、機能モジュール55Aの戻り値のデータ型とを含む。
(D2.モジュール登録部154)
次に、図8を参照して、図6に示されるモジュール登録部154について説明する。図8は、モジュール登録部154の機能を説明するための図である。
次に、図8を参照して、図6に示されるモジュール登録部154について説明する。図8は、モジュール登録部154の機能を説明するための図である。
以下では、非周期実行型の機能モジュール55A(図1参照)に関する各種情報の登録する例について説明を行うが、登録対象の機能モジュールは、機能モジュール55Aに限定されない。
モジュール登録部154は、たとえば、開発支援プログラム50によって提供される登録画面32である。登録画面32は、入力領域33A~33Eを含む。登録画面32に対する操作は、たとえば、開発支援装置100の操作部115(図3参照)を用いて行われる。
入力領域33Aは、機能モジュール55Aの名称の入力を受け付ける。当該名称の入力は、たとえば、文字入力により行われる。
入力領域33Bは、機能モジュール55Aのプログラミング言語の種類の入力を受け付ける。一例として、入力領域33Bには展開ボタンB1が対応付けられている。設計者が展開ボタンB1を押下すると、予め定められた各種のプログラミング言語がリスト表示される。設計者は、リスト表示されるプログラミング言語の中から1つのプログラミング言語を選択することで、機能モジュール55Aのプログラミング言語の種類を指定することができる。
入力領域33Cは、機能モジュール55Aの引数に関する各種情報の入力を受け付ける。一例として、入力領域33Cには、追加ボタンB3が対応付けられている。設計者が追加ボタンB3を押下する度に、引数の登録欄が入力領域33Cに追加される。設計者は、引数の登録欄において、引数のデータ型と、引数の変数名とを入力することができる。引数の登録欄の各々には、展開ボタンB4が対応付けられている。設計者が展開ボタンB4を押下すると、入力領域33Bで指定されたプログラミング言語で利用可能なデータ型がリスト表示される。設計者は、リスト表示されたデータ型の中から1つのデータ型を選択することで、引数のデータ型を指定することができる。さらに、設計者は、指定したデータ型に対応付けて引数の変数名を入力することができる。変数名の入力は、たとえば、文字入力により行われる。
入力領域33Dは、機能モジュール55Aの戻り値に関する各種情報の入力を受け付ける。一例として、入力領域33Dには、追加ボタンB7が対応付けられている。設計者が追加ボタンB7を押下する度に、戻り値の登録欄が入力領域33Dに追加される。設計者は、戻り値の登録欄において、戻り値のデータ型と、戻り値の変数名とを入力することができる。戻り値の登録欄の各々には、展開ボタンB8が対応付けられている。設計者が展開ボタンB8を押下すると、入力領域33Bで指定されたプログラミング言語で利用可能なデータ型がリスト表示される。設計者は、リスト表示されたデータ型の中から1つのデータ型を選択することで、戻り値のデータ型を指定することができる。さらに、設計者は、指定したデータ型に対応付けて戻り値の変数名を入力することができる。変数名の入力は、たとえば、文字入力により行われる。
入力領域33Eは、機能モジュール55Aの実行をコントローラ200の実行周期に同期させるか否かについての選択を受け付ける。一例として、入力領域33Eには、追加ボタンB10が対応付けられている。設計者が追加ボタンB10を押下すると、「YES」および「NO」の選択肢がリスト表示される。設計者が「YES」を選択した場合、機能モジュール55Aの実行は、コントローラ200の実行周期に同期されない。設計者が「NO」を選択した場合、機能モジュール55Aの実行は、コントローラ200の実行周期に同期される。機能モジュール55Aの同期実行/非同期実行の詳細については後述する。
設計者が登録ボタンB12を押下した場合、登録画面32に入力された各種情報は、上述の定義情報122として登録される。図8の例では、モジュール登録部154は、モジュール名「sample」と、引数のデータ型「float」,「double」と、引数の変数名「in1」,「in2」と、戻り値のデータ型「bool」と、戻り値の変数名「ret」とを対応付けた上でそれらを定義情報122として登録する。
設計者がキャンセルボタンB13を押下した場合、登録画面32に入力された各種情報は破棄され、登録画面32が閉じられる。
(D3.ラッパーモジュール生成部156)
次に、図9および図10を参照して、図6に示されるラッパーモジュール生成部156について説明する。図9は、非同期設定時における機能モジュール55Bの生成過程を概略的に表わす図である。図10は、同期設定時における機能モジュール55Bの生成過程を概略的に表わす図である。
次に、図9および図10を参照して、図6に示されるラッパーモジュール生成部156について説明する。図9は、非同期設定時における機能モジュール55Bの生成過程を概略的に表わす図である。図10は、同期設定時における機能モジュール55Bの生成過程を概略的に表わす図である。
図9および図10に示されるように、ラッパーモジュール生成部156は、プログラミング別のデータ型の対応関係121と、ラッパー対象の機能モジュール55Aの定義情報122とに基づいて、機能モジュール55Aを呼び出すための周期実行型の機能モジュール55Bを生成する。
より具体的には、ラッパーモジュール生成部156は、プログラミング別のデータ型の対応関係121を参照して、定義情報122に規定される引数のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定する。その後、ラッパーモジュール生成部156は、当該データ型の入力変数であり機能モジュール55Aの引数の値を反映するための入力変数を機能モジュール55Bの入力インターフェイスとして設定する。
機能モジュール55Bに設定される入力変数の名前は、任意である。好ましくは、機能モジュール55Bの入力変数の名前は、機能モジュール55Aの引数の名前と同じになるように設定される。図9および図10の例では、機能モジュール55Aの引数「in1」のデータ型「float」に対して、「REAL」型の入力変数「in1」が機能モジュール55Bに設定される。また、機能モジュール55Aの引数「in2」のデータ型「double」に対して、「LREAL」型の入力変数「in2」が機能モジュール55Bに設定される。これにより、設計者は、機能モジュール55Aの引数名と、機能モジュール55Bの入力変数との対応関係を把握しやすくなる。
また、ラッパーモジュール生成部156は、プログラミング別のデータ型の対応関係121を参照して、定義情報122に規定される戻り値のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定する。その後、ラッパーモジュール生成部156は、特定したデータ型の出力変数であって機能モジュール55Aの戻り値を反映するための出力変数を機能モジュール55Bの出力インターフェイスとして設定する。
機能モジュール55Bに設定される出力変数の名前は、任意である。好ましくは、機能モジュール55Bの出力変数の名前は、機能モジュール55Aの戻り値の変数名と同じになるように設定される。図9および図10の例では、機能モジュール55Aの戻り値「ret」のデータ型「bool」に対して、データ型「BOOL」の出力変数「ret」が機能モジュール55Bに設定される。これにより、設計者は、機能モジュール55Aの戻り値と、機能モジュール55Bの出力変数との対応関係を把握しやすくなる。
また、ラッパーモジュール生成部156は、定義情報122に規定されるモジュール名を参照して、機能モジュール55Bのモジュール名を決定する。機能モジュール55Bのモジュール名は、任意である。好ましくは、機能モジュール55Bのモジュール名は、機能モジュール55Aのモジュール名と同じになるように設定される。図9および図10の例では、機能モジュール55Aのモジュール名が「sample」であるので、機能モジュール55Bのモジュール名は、「sample」に設定される。これにより、設計者は、機能モジュール55Aのモジュール名と、機能モジュール55Bのモジュール名との対応関係を把握しやすくなる。
典型的には、ラッパーモジュール生成部156は、上述の登録画面32の入力領域33Eにおいて、同期設定がなされたか否かによって機能モジュール55Bの入出力インターフェイスを変える。
非同期設定時においては、ラッパーモジュール生成部156は、機能モジュール55Aの実行完了を待たずにコントローラ200の制御プログラムを継続して実行するように動作する機能モジュール55Bを生成する。すなわち、機能モジュール55Bがコントローラ200で実行された場合には、呼出し先の機能モジュール55Aは、コントローラ200の制御プログラムの実行と並列して実行される。
より具体的には、図9に示されるように、非同期設定時においては、ラッパーモジュール生成部156は、「BOOL」型の入力変数「cont」を機能モジュール55Bの入力インターフェイスにさらに設定し、「BOOL」型の出力変数「done」と「DWORD」型の出力変数「error」とを機能モジュール55Bの出力インターフェイスにさらに設定する。入力変数「cont」は、呼出し先の機能モジュール55Aの実行開始を受け付ける入力インターフェイスである。出力変数「done」は、機能モジュール55Bから呼び出された機能モジュール55Aの実行完了を反映するための出力インターフェイスである。出力変数「error」は、機能モジュール55Bから呼び出された機能モジュール55Aが正常に実行されたか否かを反映するための出力インターフェイスである。機能モジュール55Aが異常終了した場合、エラーコードが出力変数「error」に反映される。
同期設定時においては、ラッパーモジュール生成部156は、機能モジュール55Aが呼び出されてから機能モジュール55Aの実行が完了するまでの間、コントローラ200の制御プログラムの実行を中断するように動作する機能モジュール55Bを生成する。
より具体的には、図10に示されるように、同期設定時においては、ラッパーモジュール生成部156は、「DWORD」型の出力変数「error」を機能モジュール55Bの出力インターフェイスにさらに設定する。出力変数「error」は、機能モジュール55Bから呼び出された機能モジュール55Aの実行結果を反映するための出力インターフェイスである。
ラッパーモジュール生成部156によって生成された機能モジュール55Bは、ラッパーモジュール126として開発支援装置100の記憶装置120に格納される。
また、ラッパーモジュール生成部156は、生成元の機能モジュール55Aの入出力インターフェイスと、生成された機能モジュール55Bの入出力インターフェイスとの関係を規定したモジュール対応関係127を生成する。モジュール対応関係127において、機能モジュール55Aのモジュール名と、機能モジュール55Bのモジュール名とが関連付けられる。また、モジュール対応関係127において、機能モジュール55Aの引数と、機能モジュール55Bの入力変数とが関連付けられる。また、モジュール対応関係127において、機能モジュール55Aの戻り値と、機能モジュール55Bの出力変数とが関連付けられる。生成されたモジュール対応関係127は、開発支援装置100の記憶装置120に格納される。
なお、上述では、ラッパーモジュール生成部156は、機能モジュール55Aに対する同期設定/非同期設定に基づいて、生成する機能モジュール55Bの入出力インターフェイスを変える例について説明を行ったが、同期設定/非同期設定は必ずしも行われる必要はない。ある局面において、ラッパーモジュール生成部156は、同期設定/非同期設定に関係なく、図9に示される機能モジュール55Bを生成する。他の局面において、ラッパーモジュール生成部156は、同期設定/非同期設定に関係なく、図10に示される機能モジュール55Bを生成する。
(D4.エディター部158)
次に、図11を参照して、図6に示されるエディター部158について説明する。図11は、エディター部158の機能を説明するための図である。
次に、図11を参照して、図6に示されるエディター部158について説明する。図11は、エディター部158の機能を説明するための図である。
エディター部158は、上述のユーザプログラム210の編集操作を受け付ける。エディター部158は、たとえば、開発支援プログラム50によって提供される設計画面35である。
設計画面35は、ユーザプログラム210の編集領域36Aと、ファンクションブロック名をリスト表示するための表示領域36Bとを含む。表示領域36Bに表示されるファンクションブロックは、ラッパーモジュール生成部156によって生成されたラッパーモジュール126を含む。一例として、ラッパーモジュール126は、上述の機能モジュール55Bを含む。たとえば、表示領域36Bに表示されている機能モジュール55Bが編集領域36Aにドラッグ&ドロップされると、機能モジュール55Bが編集領域36Aに表示される。
このように、設計者は、ラッパーモジュール126をユーザプログラム210に任意に組み込むことができる。このとき、設計者は、ラッパーモジュール126から呼び出される機能モジュールのプログラミング言語の種別を気にする必要はない。すなわち、設計者は、非周期実行型のプログラミング言語に関する知識がなくとも、周期実行型のユーザプログラム210から非周期実行型の機能モジュールを利用することが可能になる。
典型的には、エディター部158は、ラッパーモジュール126としての機能モジュール55Bの表示時に、呼出し先の機能モジュール55Aに関するプロパティ情報を機能モジュール55Bに対応付けて表示する。一例として、表示されるプロパティ情報は、呼出し先の機能モジュール55Aのプログラミング言語の種別などを含む。図11の例では、「C++」が表示されている。他にも、表示されるプロパティ情報は、呼出し先の機能モジュール55Aの引数のデータ型、呼出し先の機能モジュール55Aの戻り値のデータ型、呼出し先の機能モジュール55Aのモジュール名などを含んでもよい。プロパティ情報の表示/非表示は、ユーザ操作によって適宜切り替えられる。
また、エディター部158は、ラッパーモジュール126の表示態様を他の機能モジュールの表示態様と異ならせる。一例として、ラッパーモジュール126は、他の機能モジュールとは異なる色で表示される。あるいは、ラッパーモジュール126は、他の機能モジュールとは異なるフォントで表示されてもよい。
なお、図11の例では、ラッパーモジュール126がラダープログラムとしてのユーザプログラム210に組み込まれる例について説明を行ったが、ラッパーモジュール126は、ST言語としてのユーザプログラム210に組み込まれてもよい。ST言語は、文字列で記述されているため、呼出し先の機能モジュール55Aに関するプロパティ情報がプログラムの設計画面にそのまま表示されると、編集中のプログラムが見にくくなる。そのため、当該プロパティ情報は、ToolTipで表示される。より具体的には、設計者が設計画面中のラッパーモジュール126にカーソルを当てたことに基づいて、エディター部158は、呼出し先の機能モジュール55Aに関するプロパティ情報を別画面に表示する。
ToolTipで表示されるプロパティ情報は、たとえば、呼出し先の機能モジュール55Aのプログラミング言語の種別、呼出し先の機能モジュール55Aの引数のデータ型、呼出し先の機能モジュール55Aの戻り値のデータ型、呼出し先の機能モジュール55Aのモジュール名などを含む。
また、エディター部158は、ST言語で記述されるラッパーモジュール126の表示態様を他の機能モジュールの表示態様と異ならせる。一例として、ラッパーモジュール126は、他の機能モジュールとは異なる色で表示される。あるいは、ラッパーモジュール126は、他の機能モジュールとは異なるフォントで表示されてもよい。
(D5.ビルド部160)
次に、図6に示されるビルド部160について説明する。
次に、図6に示されるビルド部160について説明する。
設計者が上述の設計画面35(図11参照)においてビルド操作を行った場合、ビルド部160は、設計画面35で設計されたユーザプログラム210をビルドし、ユーザプログラム210の実行ファイルを生成する。その後、設計者が上述の設計画面35(図11参照)において転送操作を行った場合、ビルド部160は、ユーザプログラム210の実行ファイルと、上述のモジュール対応関係127(図9,図10参照)とをコントローラ200に転送する。
モジュール対応関係127は、ユーザプログラム210の実行ファイルに組み込まれた状態でコントローラ200に転送されてもよいし、ユーザプログラム210の実行ファイルとは別にコントローラ200に転送されてもよい。
<E.開発支援装置100の制御構造>
図12を参照して、開発支援装置100の制御構造について説明する。図12は、開発支援装置100が実行する処理の一部を表わすフローチャートである。図12に示される処理は、開発支援装置100の制御装置102が上述のラッパーモジュール生成部156(図6参照)として機能することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
図12を参照して、開発支援装置100の制御構造について説明する。図12は、開発支援装置100が実行する処理の一部を表わすフローチャートである。図12に示される処理は、開発支援装置100の制御装置102が上述のラッパーモジュール生成部156(図6参照)として機能することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
ステップS10において、制御装置102は、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との関係を規定している対応関係121(図1参照)を取得する。
ステップS12において、制御装置102は、ラッパー対象の機能モジュール55Aに関する定義情報122(図1参照)を取得する。定義情報122は、機能モジュール55Aのモジュール名、機能モジュール55Aの引数のデータ型、機能モジュール55Aの引数の変数名、機能モジュール55Aの戻り値のデータ型、機能モジュール55Aの戻り値の変数名などを含む。
ステップS14において、制御装置102は、ステップS10で取得したデータ型の対応関係121と、ステップS12で取得した定義情報122とに基づいて、機能モジュール55Aの引数のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定する。その後、制御装置102は、当該特定したデータ型の入力変数を機能モジュール55Bの入力インターフェイスを設定する。当該入力変数は、機能モジュール55Aの引数の値を反映するための入力インターフェイスである。
ラッパー対象の機能モジュール55Aに対して非同期設定がなされている場合には、制御装置102は、機能モジュール55Bの入力インターフェイスに「BOOL」型の入力変数「cont」をさらに設定する(図9参照)。入力変数「cont」は、呼出し先の機能モジュール55Aの実行開始命令を受け付ける入力インターフェイスである。一方で、ラッパー対象の機能モジュール55Aに対して同期設定がなされている場合には、制御装置102は、「BOOL」型の入力変数「cont」を機能モジュール55Bの入力インターフェイスに設定しない(図10参照)。
ステップS16において、制御装置102は、ステップS10で取得したデータ型の対応関係121と、ステップS12で取得した定義情報122とに基づいて、機能モジュール55Aの戻り値のデータ型に対応する、周期実行型のプログラミング言語のデータ型を特定する。その後、制御装置102は、当該特定したデータ型の出力変数を機能モジュール55Bの出力インターフェイスとして設定する。当該出力変数は、機能モジュール55Aの戻り値を反映するための出力インターフェイスである。
また、制御装置102は、「DWORD」型の出力変数「error」を機能モジュール55Bの出力インターフェイスにさらに設定する(図9,図10参照)。出力変数「error」は、機能モジュール55Bから呼び出された機能モジュール55Aが正常に実行されたか否かを反映するための出力インターフェイスである。機能モジュール55Aが異常終了した場合、エラーコードが出力変数「error」に反映される。
さらに、ラッパー対象の機能モジュール55Aに対して非同期設定がなされている場合には、制御装置102は、「BOOL」型の出力変数「done」を機能モジュール55Bの出力インターフェイスにさらに設定する(図9参照)。出力変数「done」は、機能モジュール55Bから呼び出された機能モジュール55Aの実行完了を反映するための出力インターフェイスである。一方で、ラッパー対象の機能モジュール55Aに対して同期設定がなされている場合には、制御装置102は、「BOOL」型の出力変数「done」を機能モジュール55Bの出力インターフェイスに設定しない(図10参照)。
ステップS18において、制御装置102は、生成した機能モジュール55Bをラッパーモジュール126として開発支援装置100の記憶装置120に格納する。
<F.実装形態>
コントローラ200は、開発支援装置100から転送されたユーザプログラム210に従って駆動機器300を制御する。ユーザプログラム210は、コアC1(第1制御部)で実行される。ユーザプログラム210に含まれているラッパーモジュールとしての機能モジュール55Bが実行された場合、コントローラ200は、対応する機能モジュール55Aを呼び出す。非周期実行型の機能モジュール55Aは、第2コア(第2制御部)で実行される。
コントローラ200は、開発支援装置100から転送されたユーザプログラム210に従って駆動機器300を制御する。ユーザプログラム210は、コアC1(第1制御部)で実行される。ユーザプログラム210に含まれているラッパーモジュールとしての機能モジュール55Bが実行された場合、コントローラ200は、対応する機能モジュール55Aを呼び出す。非周期実行型の機能モジュール55Aは、第2コア(第2制御部)で実行される。
コアC1およびコアC2は、それぞれ異なる種類のOS(Operating System)上で動作する。典型的には、コアC1は、リアルタイムOSなどの第1の種類のOS上で動作し、当該OSの基本機能を利用する。一方で、コアC2は、Linux(登録商標)やWindows(登録商標)などの第2の種類のOS上で動作し、当該OSの基本機能を利用する。
本明細書においては、2つ以上のコアC1,C2(第1,第2制御部)で構成されるシステムを「制御システム」と称する。すなわち、「制御システム」との概念は、少なくとも2つのコアC1,C2で構成される1つの装置や、コアC1を備える第1装置とコアC2を備える第2装置とで構成されるシステムを含む。
以下では、図13~図15を参照して、コアC1,C2の実装形態について説明する。
(F1.コアC1,C2の実装形態の具体例1)
図13は、コアC1およびコアC2の実装形態の具体例1を示す図である。
(F1.コアC1,C2の実装形態の具体例1)
図13は、コアC1およびコアC2の実装形態の具体例1を示す図である。
図13に示されるように、コントローラ200は、CPUユニット250を含む。CPUユニット250は、2つ以上のコアで構成される制御装置202を含む。一例として、制御装置202は、コアC1およびコアC2を含む。本具体例においては、制御システム10は、1つの制御装置202に搭載される複数のコアC1,C2によって構成される。
コアC1は、上述のユーザプログラム210を実行する。ユーザプログラム210は、ラダープログラムやST言語などの非周期実行型のPLC言語で規定される。コアC1は、ユーザプログラム210の実行中にラッパーモジュールとしての上述の機能モジュール55Bを実行した場合に、対応する非周期実行型の機能モジュール55Aの実行開始命令をコアC2に出力する。
コアC2は、当該実行開始命令を受け付けたことに基づいて、機能モジュール55Aを実行する。当該機能モジュール55Aは、たとえば、C言語、C++、Java、またはPythonなどで規定される。コアC2は、機能モジュール55Aの実行が完了したことに基づいて、機能モジュール55Aの実行結果をコアC1に出力する。
以上のように、本具体例においては、周期実行型のプログラミング言語を実行するコアC1と、非周期実行型のプログラミング言語を実行するコアC2とが1つの制御装置102に搭載される。
(F2.コアC1,C2の実装形態の具体例2)
図14は、コアC1およびコアC2の実装形態の具体例2を示す図である。
図14は、コアC1およびコアC2の実装形態の具体例2を示す図である。
図14に示されるように、コントローラ200は、CPUユニット250と、拡張ユニット251とを含む。拡張ユニット251は、CPUユニット250と分離可能に構成され、コントローラ200のバスを介してCPUユニット250に接続される。
CPUユニット250は、制御装置202を含む。CPUユニット250は、1つ以上のコアC1を含む。コアC1は、コントローラ200用の制御プログラムであるユーザプログラム210を実行する。ユーザプログラム210は、ラダープログラムやST言語などの非周期実行型のPLC言語で規定される。
拡張ユニット251は、1つ以上のコアで構成される制御装置252を含む。一例として、制御装置252は、コアC2を含む。コアC2は、非周期実行型の機能モジュール55Aを実行する。当該機能モジュール55Aは、たとえば、C言語、C++、Java、またはPythonなどで規定される。
本具体例においては、制御システム10は、CPUユニット250に搭載されるコアC1と、拡張ユニット251に搭載されるコアC2とで構成される。
コアC1は、ユーザプログラム210の実行中にラッパーモジュールとしての機能モジュール55Bを実行した場合に、対応する非周期実行型の機能モジュール55Aの実行開始命令をコアC2に出力する。コアC2は、当該実行開始命令を受け付けたことに基づいて、機能モジュール55Aを実行する。コアC2は、機能モジュール55Aの実行が完了したことに基づいて、機能モジュール55Aの実行結果をコアC1に出力する。
以上のように、本具体例においては、周期実行型のプログラミング言語を実行するコアC1は、CPUユニット250の制御装置202に搭載される。一方で、非周期実行型のプログラミング言語を実行するコアC2は、拡張ユニット251の制御装置252に搭載される。
(F3.コアC1,C2の実装形態の具体例3)
図15は、コアC1およびコアC2の実装形態の具体例3を示す図である。
図15は、コアC1およびコアC2の実装形態の具体例3を示す図である。
コントローラ200は、外部機器400と通信可能に構成される。CPUユニット250は、制御装置202を含む。制御装置202は、1つ以上のコアC1を含む。コアC1は、コントローラ200用の制御プログラムであるユーザプログラム210を実行する。ユーザプログラム210は、ラダープログラムやST言語などの非周期実行型のPLC言語で規定される。
コントローラ200は、外部機器400と通信可能に構成される。外部機器400は、1つ以上のコアで構成される制御装置402を含む。一例として、制御装置402は、コアC2を含む。コアC2は、非周期実行型の機能モジュール55Aを実行する。当該機能モジュール55Aは、たとえば、C言語、C++、Java、またはPythonなどで規定される。
本具体例においては、制御システム10は、コントローラ200の制御装置202に搭載されるコアC1と、外部機器400の制御装置402に搭載されるコアC2とで構成される。
コアC1は、ユーザプログラム210の実行中にラッパーモジュールとしての上述の機能モジュール55Bを実行した場合に、対応する非周期実行型の機能モジュール55Aの実行開始命令をコアC2に出力する。コアC2は、当該実行開始命令を受け付けたことに基づいて、機能モジュール55Aを実行する。コアC2は、機能モジュール55Aの実行が完了したことに基づいて、機能モジュール55Aの実行結果をコアC1に出力する。
以上のように、本具体例においては、周期実行型のプログラミング言語を実行するコアC1は、コントローラ200の制御装置202に搭載される。一方で、非周期実行型のプログラミング言語を実行するコアC2は、外部機器400の制御装置402に搭載される。
<G.コアC1,C2の機能構成>
図16を参照して、図13~図15に示されるコアC1,C2の機能構成について説明する。図16は、コアC1,C2の機能構成の一例を示す図である。
図16を参照して、図13~図15に示されるコアC1,C2の機能構成について説明する。図16は、コアC1,C2の機能構成の一例を示す図である。
制御システム10は、ハードウェア構成として、コアC1と、コアC2と、記憶装置208,410とを含む。コアC1は、機能構成として、第1実行部254と、委託部256とを含む。コアC2は、機能構成として、第2実行部264を含む。
コントローラ200の記憶装置208、または外部機器400の記憶装置410は、上述の機能モジュール55Bと、上述のモジュール対応関係127と、上述のユーザプログラム210とを格納する。モジュール対応関係127およびユーザプログラム210は、たとえば、記憶装置208に格納される。モジュール対応関係127は、記憶装置208および記憶装置410のいずれかに格納される。
第1実行部254は、ユーザプログラム210の先頭行から最終行までが予め定められた周期ごとに繰り返し実行し、ユーザプログラム210に従って駆動機器300を制御する。第1実行部254は、ユーザプログラム210に含まれるラッパーモジュールとしての機能モジュール55Bが実行された場合、対応する機能モジュール55Aの実行を委託部256に委託する。
委託部256は、RPC(Remote Procedure Call)機能を有する。すなわち、委託部256は、呼出し先の機能モジュール55Aの実行を他のコアC2に実行させる。
図17を参照して、委託部256の機能について説明する。図17は、委託部256による委託処理を概略的に示す概念図である。
図17に示されるように、委託部256は、ラッパーモジュール126の1つである機能モジュール55Bから機能モジュール55Aの実行命令を受けたとする。このことに基づいて、委託部256は、モジュール対応関係127を参照して、機能モジュール55Bのモジュール名に対応する、呼出し先の機能モジュール55Aのモジュール名(関数名)を特定する。図17の例では、機能モジュール55Aのモジュール名として、「sample」が特定される。
その後、委託部256は、モジュール対応関係127を参照して、機能モジュール55Bの入力変数に対応する機能モジュール55Aの引数を特定する。図17の例では、「REAL」型の入力変数「in1」に対して「float」型の引数「in1」が特定される。「LREAL」型の入力変数「in2」に対して「double」型の引数「in2」が特定される。
委託部256は、特定したデータ型の関係に従って、「REAL」型の入力変数「in1」の値を「float」型に変換し、当該変換後の値を機能モジュール55Aの引数「in1」に代入する。同様に、委託部256は、特定したデータ型の関係に従って、「LREAL」型の入力変数「in2」を「double」型に変換し、当該変換後の入力変数「in2」を機能モジュール55Aの引数「in2」に代入する。このように、委託部256は、機能モジュール55Bの入力変数の値を機能モジュール55Aのデータ型に合わせて変換した上で、当該入力変数の値を当該引数に反映する。その後、委託部256は、機能モジュール55Aの実行開始命令を第2実行部264に出力する。
再び図16を参照して、第2実行部264は、委託部256から実行開始命令を受け付けたことに基づいて、呼出し対象の機能モジュール55Aの実行プログラムを読み出し、当該実行プログラムの各行を順次実行する。このとき、第2実行部264は、当該実行プログラムの実行が完了したことに基づいて、実行結果を委託部256に出力する。
再び図17を参照して、委託部256は、第2実行部264から機能モジュール55Aの実行結果を受けたことに基づいて、当該実行結果を機能モジュール55Bの出力変数に反映する。より具体的には、委託部256は、モジュール対応関係127を参照して、機能モジュール55Aの戻り値に対応する機能モジュール55Bの出力変数を特定する。図17の例では、「bool」型の戻り値「ret」に対して「BOOL」型の出力変数「ret」が特定される。委託部256は、特定したデータ型の関係に従って、「bool」型の戻り値「ret」を「BOOL」型に変換し、当該変換後の戻り値を機能モジュール55Bの出力変数「ret」に代入する。このように、委託部256は、機能モジュール55Aの戻り値を機能モジュール55Bの出力変数のデータ型に合わせて変換した上で、当該戻り値を当該出力変数に反映する。
<H.データフロー>
上述の図9および図10で説明したように、非同期設定がなされたラッパーモジュール126と、同期設定がなされたラッパーモジュール126とがある。非同期設定がなされたラッパーモジュール126が実行された場合、呼出し先の機能モジュール55Aは、ユーザプログラム210の実行周期に同期させずに実行される。同期設定がなされたラッパーモジュール126が実行された場合、呼出し先の機能モジュール55Aは、ユーザプログラム210の実行周期に同期して実行される。
上述の図9および図10で説明したように、非同期設定がなされたラッパーモジュール126と、同期設定がなされたラッパーモジュール126とがある。非同期設定がなされたラッパーモジュール126が実行された場合、呼出し先の機能モジュール55Aは、ユーザプログラム210の実行周期に同期させずに実行される。同期設定がなされたラッパーモジュール126が実行された場合、呼出し先の機能モジュール55Aは、ユーザプログラム210の実行周期に同期して実行される。
以下では、図18および図19を参照して、呼出し先の機能モジュール55Aを非同期実行する場合における制御システム10のデータフローと、呼出し先の機能モジュール55Aを同期実行する場合における制御システム10のデータフローとについて順に説明する。
(H1.非同期実行)
図18は、呼出し先の機能モジュール55Aを非同期実行する場合における制御システム10のデータフローの一例を示す図である。以下では、ラッパーモジュールである機能モジュール55Bから機能モジュール55Aを呼び出す前提で説明を行う。
図18は、呼出し先の機能モジュール55Aを非同期実行する場合における制御システム10のデータフローの一例を示す図である。以下では、ラッパーモジュールである機能モジュール55Bから機能モジュール55Aを呼び出す前提で説明を行う。
第1実行部254は、コントローラ200の制御周期に従ってユーザプログラム210を繰り返し実行する。非同期実行の場合には、呼出し先の機能モジュール55Aは、ユーザプログラム210の実行と並列して実行される。
より具体的には、ステップS50(コントローラ200の制御周期0周目)において、ラッパーモジュール126の1つである機能モジュール55Bの入力変数「cont」が「ON」であったとする。上述の図9で説明したように、入力変数「cont」は、呼出し先の機能モジュール55Aの実行開始命令を受け付ける入力インターフェイスである。入力変数「cont」を「ON」にすることは、呼出し先の機能モジュール55Aの実行を開始することを示す。
ステップS52において、機能モジュール55Bの入力変数「cont」が「ON」に設定されたことに基づいて、委託部256は、ユーザプログラム210を実行するスレッド(タスク)とは別に新たなスレッドを生成する。
ステップS54において、委託部256は、機能モジュール55Bの出力変数「done」を「OFF」に設定する。上述の図9で説明したように、出力変数「done」は、機能モジュール55Bから呼び出された機能モジュール55Aの実行完了を反映するための出力インターフェイスである。出力変数「done」が「OFF」であることは、呼出し先の機能モジュール55Aの実行が完了していないことを示す。
ステップS56において、委託部256は、ステップS52で生成された別スレッドとして、呼出し元の機能モジュール55Bの入力変数の値を呼出し先の機能モジュール55Aの引数に反映し、当該機能モジュール55Aの実行開始命令を第2実行部264に出力する。入力変数を引数に反映する方法については図17で説明した通りであるので、その説明については繰り返さない。
ステップS60(コントローラ200の制御周期1周目)において、機能モジュール55Bの入力変数「cont」が、引き続き「ON」であったとする。このとき、呼出し先の機能モジュール55Aが未だに実行中であるので、委託部256は、機能モジュール55Bの入力変数「cont」が「ON」に設定されていたとしても第2実行部264に対して特に何もしない。
ステップS62において、委託部256は、機能モジュール55Bの出力変数「done」を「OFF」に設定する。上述のように、出力変数「done」が「OFF」であることは、呼出し先の機能モジュール55Aの実行が完了していないことを示す。
ステップS64において、呼出し先の機能モジュール55Aの実行が完了したとする。このことに基づいて、第2実行部264は、機能モジュール55Aの実行結果を委託部256に出力する。
ステップS66において、委託部256は、ステップS52で生成された別スレッドとして、機能モジュール55Bの出力変数「done」を「ON」に設定する。出力変数「done」が「ON」であることは、呼出し先の機能モジュール55Aの実行が完了したことを示す。
ステップS70(コントローラ200の制御周期2周目)において、機能モジュール55Bの入力変数「cont」が、引き続き「ON」であったとする。このとき、呼出し先の機能モジュール55Aが完了した直後であるので、委託部256は、機能モジュール55Bの入力変数「cont」が「ON」に設定されていたとしても第2実行部264に対しては特に何もしない。
ステップS72において、委託部256は、機能モジュール55Aの実行結果(戻り値)を機能モジュール55Bの出力変数「ret」に反映する。戻り値を出力変数に反映する方法については図17で説明した通りであるので、その説明については繰り返さない。
以上のように、委託部256は、非同期実行時においては、機能モジュール55Aの実行開始命令を第2実行部264に出力してから機能モジュール55Aの実行結果を受けるまでの間、ユーザプログラム210を継続して実行する。すなわち、呼出し先の機能モジュール55Aの実行は、ユーザプログラム210の実行と並列に行われる。これにより、委託部256は、ユーザプログラム210の実行周期に同期させずに、非周期実行型の機能モジュール55Aを実行することができる。
(H2.同期実行)
図19は、呼出し先の機能モジュール55Aを同期実行する場合における制御システム10のデータフローの一例を示す図である。以下では、ラッパーモジュールである機能モジュール55Bから機能モジュール55Aを呼び出す前提で説明を行う。
図19は、呼出し先の機能モジュール55Aを同期実行する場合における制御システム10のデータフローの一例を示す図である。以下では、ラッパーモジュールである機能モジュール55Bから機能モジュール55Aを呼び出す前提で説明を行う。
第1実行部254は、コントローラ200の制御周期に従ってユーザプログラム210を繰り返し実行する。同期実行の場合には、呼出し先の機能モジュール55Aが完了するまで、ユーザプログラム210の実行は中断される。
より具体的には、ステップS80(コントローラ200の制御周期0周目)において、第1実行部254は、呼出し元の機能モジュール55Bから呼出し先の機能モジュール55Aを呼び出したとする。
ステップS82において、委託部256は、第1実行部254から機能モジュール55Aの実行命令を受けたことに基づいて、呼出し元の機能モジュール55Bの入力変数の値を呼出し先の機能モジュール55Aの引数に反映し、機能モジュール55Aの実行開始命令を第2実行部264に出力する。入力変数を引数に反映する方法については図17で説明した通りであるので、その説明については繰り返さない。
ステップS84において、呼出し先の機能モジュール55Aの実行が完了したとする。このことに基づいて、第2実行部264は、機能モジュール55Aの実行結果を委託部256に出力する。
ステップS86において、委託部256は、機能モジュール55Aの実行結果(戻り値)を機能モジュール55Bの出力変数「ret」に反映する。戻り値を出力変数に反映する方法については図17で説明した通りであるので、その説明については繰り返さない。
ステップS90(コントローラ200の制御周期1周目)において、第1実行部254は、呼出し元の機能モジュール55Bから呼出し先の機能モジュール55Aを再び呼び出したとする。
ステップS92において、委託部256は、第1実行部254から機能モジュール55Aの呼出し命令を受け付けたことに基づいて、呼出し元の機能モジュール55Bの入力変数の値を呼出し先の機能モジュール55Aの引数に反映し、機能モジュール55Aの実行開始命令を第2実行部264に出力する。
ステップS94において、呼出し先の機能モジュール55Aの実行が完了したとする。このことに基づいて、第2実行部264は、機能モジュール55Aの実行結果を委託部256に出力する。
ステップS96において、委託部256は、機能モジュール55Aの実行結果(戻り値)を機能モジュール55Bの出力変数「ret」に反映する。
以上のように、委託部256は、同期実行時においては、ステップS92で機能モジュール55Aの実行開始命令を第2実行部264に出力してからステップS94で機能モジュール55Aの実行結果を受けるまでの間、ユーザプログラム210の実行を中断する。すなわち、委託部256は、ユーザプログラム210の実行と機能モジュール55Aの実行とを直列的に実行する。これにより、委託部256は、ユーザプログラム210の実行周期に同期させて、非周期実行型の機能モジュール55Aを実行することができる。
<I.付記>
以上のように、本実施形態は以下のような開示を含む。
以上のように、本実施形態は以下のような開示を含む。
[構成1]
コントローラ用の制御プログラムの開発を支援するための開発支援プログラム(50)であって、
前記開発支援プログラム(50)は、コンピュータに、
非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係(121)を取得するステップ(S10)と、
前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュール(55A)の引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報(122)を取得するステップ(S12)と、
前記非周期実行型の機能モジュール(55A)を呼び出すための機能モジュールであって、前記制御プログラム(210、211)で利用可能な周期実行型の機能モジュール(55B)を生成するステップ(S14,S16)とを実行させ、
前記生成するステップ(S14,S16)は、
前記対応関係(121)および前記定義情報(122)に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュール(55B)の入力インターフェイスとして設定するステップ(S14)と、
前記対応関係(121)および前記定義情報(122)に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力インターフェイスとして設定するステップ(S16)とを含む、開発支援プログラム。
コントローラ用の制御プログラムの開発を支援するための開発支援プログラム(50)であって、
前記開発支援プログラム(50)は、コンピュータに、
非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係(121)を取得するステップ(S10)と、
前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュール(55A)の引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報(122)を取得するステップ(S12)と、
前記非周期実行型の機能モジュール(55A)を呼び出すための機能モジュールであって、前記制御プログラム(210、211)で利用可能な周期実行型の機能モジュール(55B)を生成するステップ(S14,S16)とを実行させ、
前記生成するステップ(S14,S16)は、
前記対応関係(121)および前記定義情報(122)に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュール(55B)の入力インターフェイスとして設定するステップ(S14)と、
前記対応関係(121)および前記定義情報(122)に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力インターフェイスとして設定するステップ(S16)とを含む、開発支援プログラム。
[構成2]
前記生成するステップ(S14,S16)で生成される前記周期実行型の機能モジュール(55B)は、前記非周期実行型の機能モジュール(55A)を呼び出してから前記非周期実行型の機能モジュール(55A)の実行が完了するまでの間、前記制御プログラム(210、211)の実行を中断するように動作する、構成1に記載の開発支援プログラム。
前記生成するステップ(S14,S16)で生成される前記周期実行型の機能モジュール(55B)は、前記非周期実行型の機能モジュール(55A)を呼び出してから前記非周期実行型の機能モジュール(55A)の実行が完了するまでの間、前記制御プログラム(210、211)の実行を中断するように動作する、構成1に記載の開発支援プログラム。
[構成3]
前記生成するステップ(S14,S16)で生成される前記周期実行型の機能モジュール(55B)は、前記非周期実行型の機能モジュール(55A)の実行完了を待たずに前記制御プログラム(210、211)を継続して実行するように動作する、構成1に記載の開発支援プログラム。
前記生成するステップ(S14,S16)で生成される前記周期実行型の機能モジュール(55B)は、前記非周期実行型の機能モジュール(55A)の実行完了を待たずに前記制御プログラム(210、211)を継続して実行するように動作する、構成1に記載の開発支援プログラム。
[構成4]
前記生成するステップ(S14,S16)は、前記非周期実行型の機能モジュール(55A)の実行完了を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力に設定するステップをさらに含む、構成3に記載の開発支援プログラム。
前記生成するステップ(S14,S16)は、前記非周期実行型の機能モジュール(55A)の実行完了を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力に設定するステップをさらに含む、構成3に記載の開発支援プログラム。
[構成5]
前記入力変数の名前は、前記引数の名前と同じである、構成1~4のいずれか1項に記載の開発支援プログラム。
前記入力変数の名前は、前記引数の名前と同じである、構成1~4のいずれか1項に記載の開発支援プログラム。
[構成6]
前記周期実行型の機能モジュール(55B)のモジュール名は、前記非周期実行型の機能モジュール(55A)のモジュール名と同じである、構成1~5のいずれか1項に記載の開発支援プログラム。
前記周期実行型の機能モジュール(55B)のモジュール名は、前記非周期実行型の機能モジュール(55A)のモジュール名と同じである、構成1~5のいずれか1項に記載の開発支援プログラム。
[構成7]
コントローラ用の制御プログラム(210、211)の開発を支援するための開発支援装置(100)であって、
非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係(121)を格納する記憶装置(120)を備え、
前記記憶装置(120)は、前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュール(55A)の引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報(122)をさらに格納し、
前記非周期実行型の機能モジュール(55A)を呼び出すための機能モジュールであって、前記制御プログラム(210、211)で利用可能な周期実行型の機能モジュール(55B)を生成するための制御装置(102)をさらに備え、
前記制御装置(102)は、
前記対応関係(121)および前記定義情報(122)に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュール(55B)の入力インターフェイスとして設定し、
前記対応関係(121)および前記定義情報(122)に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力インターフェイスとして設定する、開発支援装置。
コントローラ用の制御プログラム(210、211)の開発を支援するための開発支援装置(100)であって、
非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係(121)を格納する記憶装置(120)を備え、
前記記憶装置(120)は、前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュール(55A)の引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報(122)をさらに格納し、
前記非周期実行型の機能モジュール(55A)を呼び出すための機能モジュールであって、前記制御プログラム(210、211)で利用可能な周期実行型の機能モジュール(55B)を生成するための制御装置(102)をさらに備え、
前記制御装置(102)は、
前記対応関係(121)および前記定義情報(122)に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュール(55B)の入力インターフェイスとして設定し、
前記対応関係(121)および前記定義情報(122)に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力インターフェイスとして設定する、開発支援装置。
[構成8]
コントローラ用の制御プログラム(210、211)の開発を支援するための開発支援方法であって、
開発支援装置(100)が、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係(121)を取得するステップ(S10)と、
前記開発支援装置(100)が、前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュール(55A)の引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報(122)を取得するステップ(S12)と、
前記開発支援装置(100)が、前記非周期実行型の機能モジュール(55A)を呼び出すための機能モジュールであって、前記制御プログラム(210、211)で利用可能な周期実行型の機能モジュール(55B)を生成するステップ(S14,S16)とを備え、
前記生成するステップ(S14,S16)は、
前記開発支援装置(100)が、前記対応関係(121)および前記定義情報(122)に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュール(55B)の入力インターフェイスとして設定するステップ(S14)と、
前記開発支援装置(100)が、前記対応関係(121)および前記定義情報(122)に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力インターフェイスとして設定するステップ(S16)とを含む、開発支援方法。
コントローラ用の制御プログラム(210、211)の開発を支援するための開発支援方法であって、
開発支援装置(100)が、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係(121)を取得するステップ(S10)と、
前記開発支援装置(100)が、前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュール(55A)の引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報(122)を取得するステップ(S12)と、
前記開発支援装置(100)が、前記非周期実行型の機能モジュール(55A)を呼び出すための機能モジュールであって、前記制御プログラム(210、211)で利用可能な周期実行型の機能モジュール(55B)を生成するステップ(S14,S16)とを備え、
前記生成するステップ(S14,S16)は、
前記開発支援装置(100)が、前記対応関係(121)および前記定義情報(122)に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュール(55B)の入力インターフェイスとして設定するステップ(S14)と、
前記開発支援装置(100)が、前記対応関係(121)および前記定義情報(122)に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュール(55B)の出力インターフェイスとして設定するステップ(S16)とを含む、開発支援方法。
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
10 制御システム、32 登録画面、33A,33B,33C,33D,33E 入力領域、35 設計画面、36A 編集領域、36B 表示領域、50 開発支援プログラム、55A,55B 機能モジュール、55B1,55B2 入力変数、55B3 出力変数、56,212 各種データ、60 プログラム、100 開発支援装置、102,202,252,402 制御装置、104,206,404 主メモリ、111,201,412 通信インターフェイス、114,414 I/Oインターフェイス、115,415 操作部、117,420 表示インターフェイス、118,421 表示部、120,208,410 記憶装置、121 対応関係、122 定義情報、125,425 内部バス、126 ラッパーモジュール、127 モジュール対応関係、152 プログラム解析部、154 モジュール登録部、156 ラッパーモジュール生成部、158 エディター部、160 ビルド部、200 コントローラ、204 チップセット、209 システムプログラム、210 ユーザプログラム、210A シーケンスプログラム、210B モーションプログラム、211 制御プログラム、222 内部バスコントローラ、224 フィールドバスコントローラ、226 I/Oユニット、239 メモリカードインターフェイス、240 メモリカード、250 ユニット、251 拡張ユニット、254 第1実行部、256 委託部、264 第2実行部、300 駆動機器、300A ロボットコントローラ、300B サーボドライバ、301A アームロボット、301B サーボモータ、400 外部機器、416 フィールドバスインターフェイス。
Claims (8)
- コントローラ用の制御プログラムの開発を支援するための開発支援プログラムであって、
前記開発支援プログラムは、コンピュータに、
非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係を取得するステップと、
前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュールの引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報を取得するステップと、
前記非周期実行型の機能モジュールを呼び出すための機能モジュールであって、前記制御プログラムで利用可能な周期実行型の機能モジュールを生成するステップとを実行させ、
前記生成するステップは、
前記対応関係および前記定義情報に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュールの入力インターフェイスとして設定するステップと、
前記対応関係および前記定義情報に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュールの出力インターフェイスとして設定するステップとを含む、開発支援プログラム。 - 前記生成するステップで生成される前記周期実行型の機能モジュールは、前記非周期実行型の機能モジュールを呼び出してから前記非周期実行型の機能モジュールの実行が完了するまでの間、前記制御プログラムの実行を中断するように動作する、請求項1に記載の開発支援プログラム。
- 前記生成するステップで生成される前記周期実行型の機能モジュールは、前記非周期実行型の機能モジュールの実行完了を待たずに前記制御プログラムを継続して実行するように動作する、請求項1に記載の開発支援プログラム。
- 前記生成するステップは、前記非周期実行型の機能モジュールの実行完了を反映するための出力変数を前記周期実行型の機能モジュールの出力に設定するステップをさらに含む、請求項3に記載の開発支援プログラム。
- 前記入力変数の名前は、前記引数の名前と同じである、請求項1~4のいずれか1項に記載の開発支援プログラム。
- 前記周期実行型の機能モジュールのモジュール名は、前記非周期実行型の機能モジュールのモジュール名と同じである、請求項1~5のいずれか1項に記載の開発支援プログラム。
- コントローラ用の制御プログラムの開発を支援するための開発支援装置であって、
非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係を格納する記憶装置を備え、
前記記憶装置は、前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュールの引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報をさらに格納し、
前記非周期実行型の機能モジュールを呼び出すための機能モジュールであって、前記制御プログラムで利用可能な周期実行型の機能モジュールを生成するための制御装置をさらに備え、
前記制御装置は、
前記対応関係および前記定義情報に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュールの入力インターフェイスとして設定し、
前記対応関係および前記定義情報に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュールの出力インターフェイスとして設定する、開発支援装置。 - コントローラ用の制御プログラムの開発を支援するための開発支援方法であって、
開発支援装置が、非周期実行型のプログラミング言語で使用され得るデータ型と、周期実行型のプログラミング言語で使用され得るデータ型との対応関係を取得するステップと、
前記開発支援装置が、前記非周期実行型のプログラミング言語で規定される非周期実行型の機能モジュールの引数のデータ型と、当該機能モジュールの戻り値のデータ型とを含む定義情報を取得するステップと、
前記開発支援装置が、前記非周期実行型の機能モジュールを呼び出すための機能モジュールであって、前記制御プログラムで利用可能な周期実行型の機能モジュールを生成するステップとを備え、
前記生成するステップは、
前記開発支援装置が、前記対応関係および前記定義情報に基づいて、前記引数のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の入力変数であり前記引数の値を反映するための入力変数を前記周期実行型の機能モジュールの入力インターフェイスとして設定するステップと、
前記開発支援装置が、前記対応関係および前記定義情報に基づいて、前記戻り値のデータ型に対応する、前記周期実行型のプログラミング言語のデータ型を特定し、当該データ型の出力変数であり前記戻り値を反映するための出力変数を前記周期実行型の機能モジュールの出力インターフェイスとして設定するステップとを含む、開発支援方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201980057240.6A CN112639636B (zh) | 2018-10-05 | 2019-10-02 | 开发支援装置、开发支援方法以及存储介质 |
US17/278,658 US11321052B2 (en) | 2018-10-05 | 2019-10-02 | Development support device, development support method, and non-transitory computer readable medium |
EP19869966.2A EP3862827A4 (en) | 2018-10-05 | 2019-10-02 | DEVELOPMENT SUPPORT PROGRAM, DEVELOPMENT SUPPORT DEVICE AND DEVELOPMENT SUPPORT METHOD |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018190149A JP7024679B2 (ja) | 2018-10-05 | 2018-10-05 | 開発支援プログラム、開発支援装置、および開発支援方法 |
JP2018-190149 | 2018-10-05 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2020071435A1 true WO2020071435A1 (ja) | 2020-04-09 |
Family
ID=70054555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2019/038954 WO2020071435A1 (ja) | 2018-10-05 | 2019-10-02 | 開発支援プログラム、開発支援装置、および開発支援方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11321052B2 (ja) |
EP (1) | EP3862827A4 (ja) |
JP (1) | JP7024679B2 (ja) |
CN (1) | CN112639636B (ja) |
WO (1) | WO2020071435A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210349434A1 (en) * | 2018-10-05 | 2021-11-11 | Omron Corporation | Control system, control method, and non-transitory computer readable medium |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11372853B2 (en) * | 2019-11-25 | 2022-06-28 | Caret Holdings, Inc. | Object-based search processing |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006178818A (ja) * | 2004-12-24 | 2006-07-06 | Yaskawa Electric Corp | モーションコントローラとエンジニアリングツール並びにc言語実行システム |
JP2009009444A (ja) * | 2007-06-29 | 2009-01-15 | Fuji Electric Systems Co Ltd | プログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステム |
JP2016110220A (ja) * | 2014-12-02 | 2016-06-20 | 株式会社キーエンス | プログラマブル・ロジック・コントローラおよびその制御方法 |
JP2016224557A (ja) | 2015-05-27 | 2016-12-28 | 株式会社キーエンス | プログラム作成支援装置、プログラムおよび判別方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000036477A1 (fr) * | 1998-12-16 | 2000-06-22 | Fujitsu Limited | Systeme, dispositif et support de memorisation servant au developpement d'un programme de commande d'un mecanisme |
DE10008632B4 (de) * | 2000-02-24 | 2004-02-26 | Gunter Gemmel | Verfahren und System zum Erzeugen eines Computerprogramms |
JP2002099312A (ja) * | 2000-09-22 | 2002-04-05 | Mitsubishi Electric Corp | プログラマブルコントローラおよび制御プログラム開発支援装置 |
US20040216098A1 (en) * | 2001-02-05 | 2004-10-28 | Roe Colleen A. | Scalable agent service scheduler |
JP4202673B2 (ja) * | 2002-04-26 | 2008-12-24 | 株式会社東芝 | システムlsi開発環境生成方法及びそのプログラム |
EP1770584B1 (en) * | 2005-09-27 | 2019-03-06 | Omron Corporation | Programmable controller system and aid device for control program development therefor |
JP4770664B2 (ja) * | 2006-09-20 | 2011-09-14 | 株式会社デンソー | マイクロプロセッサおよびそれを用いたマイクロコンピュータ |
JP4302146B2 (ja) * | 2007-02-21 | 2009-07-22 | 三菱電機株式会社 | プログラム作成支援装置 |
CN102096390B (zh) * | 2011-01-30 | 2014-04-09 | 深圳市合信自动化技术有限公司 | 可编程逻辑控制器、组态程序编译器及方法 |
JP4877423B1 (ja) * | 2011-03-15 | 2012-02-15 | オムロン株式会社 | Plcのcpuユニット、plc用システムプログラムおよびplc用システムプログラムを格納した記録媒体 |
WO2013099032A1 (ja) * | 2011-12-28 | 2013-07-04 | 株式会社安川電機 | モーションコントローラ及びモータ制御システム |
JP5942446B2 (ja) * | 2012-02-01 | 2016-06-29 | オムロン株式会社 | サポート装置およびサポートプログラム |
EP2626784A1 (en) * | 2012-02-09 | 2013-08-14 | MIMOON GmbH | Method and apparatus for automated MATLAB interfacing |
US8924927B2 (en) * | 2012-06-01 | 2014-12-30 | Google Inc. | Representation and conversion of dynamically-typed arrays |
DE102015105436A1 (de) * | 2015-04-09 | 2016-10-13 | Beckhoff Automation Gmbh | Übersetzungsmodul, Verarbeitungsmodul und Steuerungssystem |
JP6520545B2 (ja) * | 2015-08-10 | 2019-05-29 | オムロン株式会社 | サポート装置およびサポートプログラム |
WO2018042520A1 (ja) * | 2016-08-30 | 2018-03-08 | 三菱電機株式会社 | プログラム編集装置、プログラム編集方法及びプログラム編集プログラム |
US11036542B2 (en) * | 2017-09-29 | 2021-06-15 | Oracle International Corporation | Automatically limiting repeated checking on completion of a command without relinquishing a processor |
-
2018
- 2018-10-05 JP JP2018190149A patent/JP7024679B2/ja active Active
-
2019
- 2019-10-02 US US17/278,658 patent/US11321052B2/en active Active
- 2019-10-02 EP EP19869966.2A patent/EP3862827A4/en active Pending
- 2019-10-02 WO PCT/JP2019/038954 patent/WO2020071435A1/ja active Application Filing
- 2019-10-02 CN CN201980057240.6A patent/CN112639636B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006178818A (ja) * | 2004-12-24 | 2006-07-06 | Yaskawa Electric Corp | モーションコントローラとエンジニアリングツール並びにc言語実行システム |
JP2009009444A (ja) * | 2007-06-29 | 2009-01-15 | Fuji Electric Systems Co Ltd | プログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステム |
JP2016110220A (ja) * | 2014-12-02 | 2016-06-20 | 株式会社キーエンス | プログラマブル・ロジック・コントローラおよびその制御方法 |
JP2016224557A (ja) | 2015-05-27 | 2016-12-28 | 株式会社キーエンス | プログラム作成支援装置、プログラムおよび判別方法 |
Non-Patent Citations (1)
Title |
---|
See also references of EP3862827A4 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210349434A1 (en) * | 2018-10-05 | 2021-11-11 | Omron Corporation | Control system, control method, and non-transitory computer readable medium |
US11579580B2 (en) * | 2018-10-05 | 2023-02-14 | Omron Corporation | Control system, control method, and non-transitory computer readable medium |
Also Published As
Publication number | Publication date |
---|---|
JP2020060855A (ja) | 2020-04-16 |
EP3862827A1 (en) | 2021-08-11 |
CN112639636A (zh) | 2021-04-09 |
JP7024679B2 (ja) | 2022-02-24 |
CN112639636B (zh) | 2023-06-30 |
US20220035601A1 (en) | 2022-02-03 |
US11321052B2 (en) | 2022-05-03 |
EP3862827A4 (en) | 2022-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020071435A1 (ja) | 開発支援プログラム、開発支援装置、および開発支援方法 | |
EP3767459A1 (en) | Controller, control method, and control program | |
EP3761127B1 (en) | Display device, screen generation method, and screen generation program | |
EP3982213A1 (en) | Support device and support program | |
JP6695679B2 (ja) | プログラマブル・ロジック・コントローラ、プログラム作成支援装置、プログラム作成支援方法およびプログラム | |
JP2013242629A (ja) | 制御装置、制御方法および命令セット | |
US11199993B2 (en) | Control system, development assistance device, and development assistance program | |
WO2020071436A1 (ja) | 制御システム、制御方法、および制御プログラム | |
US20180059649A1 (en) | Simulator linkage device, control method of simulator linkage device, information processing program and recording medium | |
CN112272820B (zh) | 支持装置以及支持程序的记录介质 | |
US20220291903A1 (en) | Information processing device, recording medium, and support system | |
US11640153B2 (en) | Control system, support device, and recording medium | |
JP7234810B2 (ja) | サポート装置およびサポートプログラム | |
EP4307060A1 (en) | Development assistance device, development assistance method, and development assistance program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 19869966 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2019869966 Country of ref document: EP |
|
ENP | Entry into the national phase |
Ref document number: 2019869966 Country of ref document: EP Effective date: 20210506 |