(57)【要約】      （修正有）【課題】単一の制御装置において、シーケンスプログラムに加えて、複数のアプリケーションプログラムを並列的に実行させる際に、複数のアプリケーションプログラムの実行タイミングなどを容易に制御できる構成を提供する。【解決手段】制御装置１００は、第１のアプリケーションプログラムが第１の特殊コマンドを含み、第２のアプリケーションプログラムが第１の特殊コマンドに対応する第２の特殊コマンドを含む場合に、指令演算部１６４は、第１のアプリケーションプログラムにおいて第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、第２のアプリケーションプログラムにおいて第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングを基準として出力する。【選択図】図４
2019067045.tif 000002
【特許請求の範囲】
【請求項１】
シーケンスプログラムと、逐次実行される第１および２のアプリケーションプログラムとを格納する記憶部を備え、前記第１および２のアプリケーションプログラムの各々は１または複数のコマンドを含み、
制御周期毎に前記シーケンスプログラムを実行して制御指令を出力するプログラム実行部と、
前記制御周期が同じまたは前記制御周期より長い第１の周期毎に前記第１のアプリケーションプログラムの少なくとも一部を構文解析して第１の内部コマンドを逐次生成するとともに、前記制御周期が同じまたは前記制御周期より長い第２の周期毎に前記第２のアプリケーションプログラムの少なくとも一部を構文解析して第２の内部コマンドを逐次生成する解析部と、
前記解析部により生成される前記第１および第２の内部コマンドを格納する共有メモリと、
前記第１および第２の内部コマンドに従って前記制御周期毎にそれぞれの制御指令を出力する指令演算部とを備え、
前記第１のアプリケーションプログラムが第１の特殊コマンドを含み、前記第２のアプリケーションプログラムが前記第１の特殊コマンドに対応する第２の特殊コマンドを含む場合に、前記指令演算部は、前記第１のアプリケーションプログラムにおいて前記第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、前記第２のアプリケーションプログラムにおいて前記第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングを基準として出力する、制御装置。
【請求項２】
前記第１の特殊コマンドの直前に記述されたコマンドまでの実行完了、および、前記第２の特殊コマンドの直前に記述されたコマンドまでの実行完了を検知して、前記解析部に対して、前記共通のタイミングを通知する調停部をさらに備える、請求項１に記載の制御装置。
【請求項３】
前記第１の特殊コマンドおよび前記第２の特殊コマンドは、前記第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、前記第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、前記共通のタイミングから同時に出力するための命令を含む、請求項１または２に記載の制御装置。
【請求項４】
前記第１の特殊コマンドは、前記第１の特殊コマンド以降に記述されたコマンドに従う制御指令を、前記共通のタイミングから指定された時間だけ経過後に出力するための命令を含む、請求項１または２に記載の制御装置。
【請求項５】
前記第１のアプリケーションプログラムおよび前記第２のアプリケーションプログラムは、前記シーケンスプログラムにより更新される変数を実行開始条件として指定可能になっている、請求項１〜４のいずれか１項に記載の制御装置。
【請求項６】
前記第１および第２の特殊コマンドは、コマンド本体に加えて、互いを対応付けるための引数が指定される、請求項１〜５のいずれか１項に記載の制御装置。
【請求項７】
前記解析部は、前記第１および第２のアプリケーションプログラムに記述されたコマンドから内部コマンドを生成するにあたって、当該内部コマンドの生成対象となるコマンド以降に記述されたコマンドも参照する、請求項１〜６のいずれか１項に記載の制御装置。
【請求項８】
前記解析部は、
予め定められた実行周期毎にアプリケーションプログラムの構文解析を実行し、
前記実行周期毎の構文解析の開始から実行完了までの期間において、前記共有メモリへの書込みを禁止する、請求項１〜７のいずれか１項に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象を制御するための制御装置に関する。
【背景技術】
【０００２】
生産現場においては、様々なＦＡ（Factory Automation）技術が広く普及している。このようなＦＡシステムは、ＰＬＣ（プログラマブルコントローラ）といった制御装置だけではなく、ＣＮＣ（Computer Numerical Control：コンピュータ数値制御）およびロボットなどの高度な動作が可能な各種アクチュエータなどを含む。このようなＦＡシステムはますます大規模化する傾向にある。
【０００３】
例えば、特開２０１６−１９４８３１号公報（特許文献１）は、複数のモータの制御を複数の制御プログラムで並列に実行することで実現する場合に、容易に制御プログラム間の同期を図ることが可能な制御装置を開示する。特許文献１は、制御プログラム１と制御プログラム２の実行開始のタイミングで、そのタイミングの１つ前の制御プログラム１の軸変数を制御プログラム２に受け渡す構成を開示する。すなわち、制御プログラム２の実行開始後に、制御プログラム１の軸変数が更新されたとしても、制御プログラム２への当該変数の受け渡しは行われないようになっている。
【０００４】
ロボットなどを制御するシステムにおいては、複数のプロセッサ間でメモリを共有する方式が採用されることもある。
【０００５】
例えば、特開２０１１−０６２７９８号公報（特許文献２）は、ＣＰＵを有するＰＬＣとロボットＣＰＵとからなるロボットシステムを開示する。このロボットシステムにおいては、ロボットＣＰＵは、データを入出力するＩ／Ｏエリア内での位置と、この位置に書き込まれるデータと、によって定義された指示情報を、所定のプログラム言語で動作する指示送信装置から受信すると、定義に基づいて指示情報に応じた動作をロボットに行なわせる。特許文献２に開示されるロボットシステムにおいては、Ｉ／ＯエリアのデータをＰＬＣおよびロボットＣＰＵの間で共有する。
【０００６】
特開平０１−２８０８０４号公報（特許文献３）は、数値制御装置（ＮＣ）と該ＮＣに接続するプログラマブルロジックコントローラ（ＰＬＣ）とを有する制御装置において、ＮＣにＰＬＣとの共有メモリを有する構成を開示している。
【０００７】
特開２００３−２２８４１８号公報（特許文献４）は、産業用ロボットの制御装置（ＲＣ）とＰＬＣの双方からアクセス可能なデュアルポートランダムアクセスメモリを有する産業用ロボットの制御装置を開示する。
【０００８】
特開平０６−１４９３２９号公報（特許文献５）は、ＮＣ工作機械に付加して使用するロボットの制御装置を開示する。この制御装置において、操作パネルよりロボットプログラムの転送操作が入力されると、ロボットプログラムはプログラム保存用ＲＡＭから共通ＲＡＭに書き込まれ、ＣＰＵがそれを認識してロボットプログラム保存用ＲＡＭ内にロボットプログラムを登録する。その後、操作パネルよりロボットプログラム運転操作を行なうと共通ＲＡＭにロボットプログラム運転指令が書き込まれ、ＣＰＵがそれを認識し、ロボットプログラム保存用ＲＡＭ内に登録されているロボットプログラムを読みだしてロボットに指令することによりロボットプログラム運転が実行される。
【０００９】
また、アプリケーションプログラムにプログラムの実行自体を制御するためのコードを挿入する技術が存在する。
【００１０】
特開平０８−２３４８２０号公報（特許文献６）は、複数のアクチュエータに同時動作を行わせるＮＣプログラムによる同時動作指令方式を開示する。同時動作指令方式においては、複数の汎用Ｍコードの同時動作開始を意味する指令と、同時動作解除を意味する指令とを予め特殊Ｍコードとして設定し、同時動作させる複数の汎用Ｍコードの並びの直前に、同時動作開始を意味する特殊Ｍコードを、並びの直後に同時動作解除を意味する特殊Ｍコードを配列してＮＣプログラムを作成し、このＮＣプログラムの実行に際しては、同時動作開始指令後、同時動作解除指令が出るまでは、アクチュエータからの動作確認を待つことなく、汎用Ｍコードを次々と記憶して直ちに実行する。
【００１１】
特開昭６０−２４５００２号公報（特許文献７）は、中央処理装置からの制御に応じて所定のプログラムに従って工作機械を数値制御する装置を開示する。この装置は、中央処理装置からドゥエル実行の指令を受けたとき該指令によって指定された時間動作するタイマと、外部的にドゥエルの終了を指令する手段とを具え、該タイマの動作中工作機械の動作を停留状態にしてドゥエルを実行するとともに該タイマの動作終了時またはドゥエル終了指令を受けたとき工作機械の動作停留を解除してドゥエルを終了することで、ドゥエルに対するスキップを行う。
【００１２】
また、特開２０１４−２４１０１８号公報（特許文献８）は、一つの加工プログラムによって、工作機械とロボットの両方を制御する制御装置を開示する。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１６−１９４８３１号公報
【特許文献２】特開２０１１−０６２７９８号公報
【特許文献３】特開平０１−２８０８０４号公報
【特許文献４】特開２００３−２２８４１８号公報
【特許文献５】特開平０６−１４９３２９号公報
【特許文献６】特開平０８−２３４８２０号公報
【特許文献７】特開昭６０−２４５００２号公報
【特許文献８】特開２０１４−２４１０１８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
近年のＩＣＴ（Information and Communication Technology）の進歩に伴って、制御装置の処理能力も飛躍的に向上しつつある。従来技術においては、ＮＣ工作機械やロボットは、ＰＬＣとは独立した専用の制御装置を用いて制御する構成が一般的であったが、これらの制御についても、ＰＬＣに含めたいというニーズが存在する。また、シーケンス制御、モーション制御、ＮＣ工作機械に対する制御、ロボットに対する制御を互いにより正確に同期させることで、生産効率を高めたいというニーズが存在する。従来技術は、これらのニーズに十分に応えるものではなかった。
【００１５】
上述の特許文献１は、複数のモータの制御を複数の制御プログラムで並列に実行する際に、一方の制御プログラムの軸変数を他方の制御プログラムに受け渡すことで、制御プログラム間の同期を実現することを開示するが、ＮＣ工作機械やロボットについては言及がなく、また、一方の制御プログラムから他方の制御プログラムへの軸変数を開示するのみであり、両制御プログラムをコード単位で同期させる方法については開示されていない。
【００１６】
上述の特許文献２〜５は、複数の制御装置あるいは複数のプロセッサ間でデータを共有することが前提であり、単一の制御装置で複数の処理を実行させることについては、何ら想定されていない。
【００１７】
特許文献６は、制御装置を用いてＮＣ装置での同時動作を制御することを前提とするものであり、単一の制御装置で複数の処理を実行させることについては、何ら想定されていない。
【００１８】
特許文献７は、１つのプログラムにおけるドゥエル動作を開示するにすぎず、複数のプログラム間の同期実行については、何ら開示するものではない。
【００１９】
特許文献８は、一つの加工プログラムを工作機械およびロボット用のプログラムに分離することを開示するのみであり、工作機械とロボットとの間の同期実行などについては、何ら開示されていない。
【００２０】
本発明は、単一の制御装置において、シーケンスプログラムに加えて、複数のアプリケーションプログラムを並列的に実行させる際に、複数のアプリケーションプログラムの実行タイミングなどを容易に制御できる構成を提供することを一つの目的としている。
【課題を解決するための手段】
【００２１】
本開示の一例によれば、制御装置は、シーケンスプログラムと、逐次実行される第１および２のアプリケーションプログラムとを格納する記憶部を含む。第１および２のアプリケーションプログラムの各々は１または複数のコマンドを含む。制御装置は、制御周期毎にシーケンスプログラムを実行して制御指令を出力するプログラム実行部と、制御周期が同じまたは制御周期より長い第１の周期毎に第１のアプリケーションプログラムの少なくとも一部を構文解析して第１の内部コマンドを逐次生成するとともに、制御周期が同じまたは制御周期より長い第２の周期毎に第２のアプリケーションプログラムの少なくとも一部を構文解析して第２の内部コマンドを逐次生成する解析部と、解析部により生成される第１および第２の内部コマンドを格納する共有メモリと、第１および第２の内部コマンドに従って制御周期毎にそれぞれの制御指令を出力する指令演算部とを含む。第１のアプリケーションプログラムが第１の特殊コマンドを含み、第２のアプリケーションプログラムが第１の特殊コマンドに対応する第２の特殊コマンドを含む場合に、指令演算部は、第１のアプリケーションプログラムにおいて第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、第２のアプリケーションプログラムにおいて第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングを基準として出力する。
【００２２】
この開示によれば、単一の制御装置において、複数のアプリケーションプログラムを並列的に実行させるにあたって、ユーザは、各アプリケーションプログラムに互いに対応する特殊コードをそれぞれ追加するだけで、各特殊コード以降に記述されたコマンドに従うそれぞれの制御指令を共通のタイミングを基準として出力させることができる。このような共通のタイミングを基準として出力を用いることで、複数の制御アプリケーションを互いに連係して動作させることができる。このような連係動作によって、生産設備の作業効率を高めて、生産性を向上させることができる。
【００２３】
上述の開示において、制御装置は、第１の特殊コマンドの直前に記述されたコマンドまでの実行完了、および、第２の特殊コマンドの直前に記述されたコマンドまでの実行完了を検知して、解析部に対して、共通のタイミングを通知する調停部をさらに含んでいてもよい。
【００２４】
この開示によれば、解析部自体が特殊コマンドに基づくタイミングの管理を行う必要がなく、制御装置の機能構成をより簡素化および独立化できる。
【００２５】
上述の開示において、第１の特殊コマンドおよび第２の特殊コマンドは、第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングから同時に出力するための命令を含んでいてもよい。
【００２６】
この開示によれば、複数の制御アプリケーションを同時に動作させるような用途において、制御周期の精度で同期を実現できる。
【００２７】
上述の開示において、第１の特殊コマンドは、第１の特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングから指定された時間だけ経過後に出力するための命令を含んでいてもよい。
【００２８】
この開示によれば、複数の制御アプリケーションを任意の時間差を保って並列的に動作させるような用途において、制御周期の精度で時間差を管理できる。
【００２９】
上述の開示において、第１のアプリケーションプログラムおよび第２のアプリケーションプログラムは、シーケンスプログラムにより更新される変数を実行開始条件として指定可能になっていてもよい。
【００３０】
この開示によれば、シーケンスプログラムにより制御される設備と、アプリケーションプログラムにより制御される制御アプリケーションとの間の同期や連係をより柔軟に実現できる。
【００３１】
上述の開示において、第１および第２の特殊コマンドは、コマンド本体に加えて、互いを対応付けるための引数が指定されてもよい。
【００３２】
この開示によれば、複数の特殊コマンドを各アプリケーションプログラムに記述する必要がある場合であっても、引数だけを指定すればよいので、プログラミングの手間を低減できる。
【００３３】
上述の開示において、解析部は、第１および第２のアプリケーションプログラムに記述されたコマンドから内部コマンドを生成するにあたって、当該内部コマンドの生成対象となるコマンド以降に記述されたコマンドも参照するようにしてもよい。
【００３４】
この開示によれば、アプリケーションプログラムから内部コマンドを生成するにあたって、その生成される内部コマンドの精度を向上させることができる。また、内部コマンドが軌跡を示す場合などには、より滑らかな軌跡を実現できる。
【００３５】
上述の開示において、解析部は、予め定められた実行周期毎にアプリケーションプログラムの構文解析を実行し、実行周期毎の構文解析の開始から実行完了までの期間において、共有メモリへの書込みを禁止するようにしてもよい。
【００３６】
この開示によれば、アプリケーションプログラムとシーケンスプログラムとの間で、共有される変数が処理の途中で変更させるような事態を防止できる。
【発明の効果】
【００３７】
本発明によれば、単一の制御装置において、シーケンスプログラムに加えて、複数のアプリケーションプログラムを並列的に実行させる際に、複数のアプリケーションプログラムの実行タイミングなどを容易に制御できる。
【図面の簡単な説明】
【００３８】
【図１】本実施の形態に係る制御装置におけるアプリケーションプログラムの実行例を説明するための模式図である。
【図２】本実施の形態に係る制御システムの全体構成例を示す模式図である。
【図３】本実施の形態に係る制御装置のハードウェア構成例を示すブロック図である。
【図４】本実施の形態に係る制御装置の機能構成例を示すブロック図である。
【図５】本実施の形態に係る制御装置における内部コマンドの生成処理を説明するための模式図である。
【図６】本実施の形態に係る制御装置における処理実行のタイミングの一例を示すタイムチャートである。
【図７】本実施の形態に係る制御装置の共有メモリへのアクセス処理の一例を示すタイムチャートである。
【図８】本実施の形態に係る制御装置において共通のタイミングを基準としたプログラム実行の実現例を示すシーケンス図である。
【図９】本実施の形態に係る制御装置において共通のタイミングを基準としたプログラム実行を実現するためのプログラム例を示す模式図である。
【図１０】本実施の形態に係る制御装置によるロボットおよびＮＣ工作機械の制御の一例を示すタイムチャートである。
【図１１】本実施の形態に係る制御装置において共通のタイミングを基準としたプログラム実行を実現するための別のプログラム例を示す模式図である。
【図１２】図１１に示すプログラム例に対応するプログラム実行を示すタイムチャートである。
【図１３】本実施の形態に係る制御装置においてシーケンスプログラムでの処理結果を条件としたアプリケーションプログラムの同期実行を実現するためのプログラム例を示す模式図である。
【図１４】図１３に示すプログラム例に対応するプログラム実行を示すタイムチャートである。
【図１５】本実施の形態に係る表示機能部を有する制御装置の外観を示す模式図である。
【図１６】本実施の形態に係る制御装置の共有メモリへのアクセス処理の別の一例を示すタイムチャートである。
【発明を実施するための形態】
【００３９】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００４０】
＜Ａ．適用例＞
まず、本発明が適用される場面の一例について説明する。本実施の形態に係る制御装置１００は、シーケンスプログラムと複数のアプリケーションプログラムとを実行する。これらのプログラムは、制御対象に応じて、ユーザによって任意に作成されるものであるため、以下の説明においては、便宜上、シーケンスプログラムおよび１または複数のアプリケーションプログラムを「ユーザプログラム」と総称することもある。
【００４１】
本明細書において、「シーケンスプログラム」は、実行毎に全体がスキャンされて、実行毎に１または複数の指令値が算出されるプログラムを包含する概念である。「シーケンスプログラム」は、国際電気標準会議（International Electrotechnical Commission：ＩＥＣ）によって規定された国際規格ＩＥＣ６１１３１−３に従って記述された１または複数の命令からなるプログラムを包含する。「シーケンスプログラム」には、シーケンス命令および／またはモーション命令を含み得る。なお、「シーケンスプログラム」としては、国際規格ＩＥＣ６１１３１−３に従って記述された命令に限らず、ＰＬＣ（プログラマブルコントローラ）の製造メーカまたはベンダーなどが独自に規定した命令を含むようにしてもよい。このように、「シーケンスプログラム」は、即時性および高速性が要求される制御に好適である。
【００４２】
本明細書において、「シーケンス命令」は、基本的には、入力値、出力値、内部値などを算出する１または複数の論理回路により記述された１または複数の命令を包含する用語である。基本的には、１回の制御周期において、「シーケンス命令」は、先頭から最終まで実行され、次の制御周期において、「シーケンス命令」は、先頭から最終までが再度実行される。
【００４３】
本明細書において、「モーション命令」は、サーボモータなどのアクチュエータに対して、位置、速度、加速度、加加速度、角度、角速度、角加速度、角加加速度などの数値を指令として算出するための１または複数の命令を包含する用語である。「モーション命令」についても、１回の制御周期において、ファンクションブロックや数値算出式などにより記述されたモーション命令のプログラム（モーションプログラム）の先頭から最終までが実行される。すなわち、制御周期毎に指令値は算出（更新）されることになる。
【００４４】
制御周期毎にシーケンスプログラムを実行することで出力される制御指令は、典型的には、シーケンス命令に従って決定されるデジタル出力のオン／オフ、ならびに、モーション命令に従って算出されるアナログ出力を含む。
【００４５】
本明細書において、「アプリケーションプログラム」は、逐次実行される任意のプログラムを包含する。典型的には、「アプリケーションプログラム」は、１行ずつ逐次実行して実行するインタプリタ方式で実行可能な任意の言語で記述されたプログラムを包含する。「アプリケーションプログラム」は、１または複数のコマンドにより記述される。
【００４６】
このような「アプリケーションプログラム」の一例として、ＮＣ工作機械を制御するためのプログラム（以下、「ＮＣプログラム」とも称する。）がある。ＮＣ工作機械は、典型的には、旋盤加工、フライス盤、放電加工などの加工装置を含む。
【００４７】
また、「アプリケーションプログラム」の別の一例として、ロボットを制御するためのプログラムがある。ロボットは、典型的には、多関節型ロボットやスカラ型ロボットを含む。
【００４８】
ＮＣプログラムは、予め定められた言語に従って記述される。一例として、ＮＣプログラムは「Ｇ言語」を用いて記述され、ロボットを制御するためのプログラムは、専用のロボット言語（例えば、「Ｍ言語」と称されるコマンド群）を用いて記述されることが多い。
【００４９】
以下の説明において、例えば、ＮＣ工作機械および／またはおよびロボットを用いた、特定の加工または動作を行う装置または機械ならびにそれらの制御を包含して、「制御アプリケーション」と称することもある。
【００５０】
制御装置１００は、各アプリケーションプログラムについて、制御周期が同じまたは制御周期より長いアプリケーション実行周期毎に当該アプリケーションプログラムの少なくとも一部を構文解析して内部コマンドを逐次生成し、生成された内部コマンドに従って制御周期毎に制御指令を出力する。
【００５１】
逐次実行されるアプリケーションプログラムは、本来的に、一定周期毎に制御指令を出力する処理には不向きであるため、制御周期毎の制御指令の出力に適した内部コマンドが生成される。このような内部コマンドは、制御周期毎に制御指令を出力できるものであれば、どのようなコードであってもよい。典型的には、内部コマンドは、時間を入力変数とする１または複数の関数、あるいは、時間を引数とする１または複数の命令であってもよい。
【００５２】
制御装置１００において複数のアプリケーションプログラムが実行される場合には、制御装置１００は、制御周期が同じまたは制御周期より長い第１の周期（アプリケーション実行周期Ｔ２１）毎に第１のアプリケーションプログラムの少なくとも一部を構文解析して第１の内部コマンドを逐次生成するとともに、制御周期が同じまたは制御周期より長い第２の周期（アプリケーション実行周期Ｔ２２）毎に第２のアプリケーションプログラムの少なくとも一部を構文解析して第２の内部コマンドを逐次生成する。そして、制御装置１００は、第１および第２の内部コマンドに従って制御周期毎にそれぞれの制御指令を出力する。
【００５３】
例えば、ロボットを用いて、ワークをＮＣ工作機械内に配置し、ＮＣ工作機械で処理された後のワークをロボットで取り出すような制御アプリケーションを想定する。このような制御アプリケーションにおいては、ロボットの動作タイミングとＮＣ工作機械の動作タイミングと互いに連係させることが好ましい。例えば、ロボットによるワークの配置が完了次第、ＮＣ工作機械の動作を開始させることで開始の待ち時間を削減でき、あるいは、ＮＣ工作機械での加工が完了次第、ロボットにより処理済ワークを取り出すことで、次のワークの処理開始までの待ち時間を削減できる。
【００５４】
本実施の形態に係る制御装置１００は、このようなそれぞれ別のアプリケーションプログラムによって制御される装置の動作タイミングをより緻密に制御することが可能である。
【００５５】
図１は、本実施の形態に係る制御装置１００におけるアプリケーションプログラムの実行例を説明するための模式図である。図１には、複数のアプリケーションプログラム３２−１，３２−２の一例として、ＮＣプログラムおよびロボットプログラムを想定する。
【００５６】
図１を参照して、ＮＣプログラムにおいては、Ｇ言語に従って必要な動作を規定するためのコマンドが記述されている。ＮＣプログラムの実行時には、各コマンドが逐次実行される。同様に、ロボットプログラムにおいても、必要な動作を規定するためのコマンドが記述されている。ロボットプログラムの実行時にも、各コマンドが逐次実行される。
【００５７】
図１に示すアプリケーションプログラム３２−１は、通常の動作を規定するコマンドに加えて、５０行目に「ＳｙｎｃＳｔａｒ（１）」という特殊コマンド３２０−１を含む。また、アプリケーションプログラム３２−２についても、通常の動作を規定するコマンドに加えて、「ＳｙｎｃＳｔａｒ（１）」という特殊コマンド３２０−２を含む。
【００５８】
特殊コマンド３２０−１と特殊コマンド３２０−２とは、互いに対応付けられている。制御装置１００は、あるアプリケーションプログラムにこのような特殊コマンドが発現すると、他のアプリケーションプログラムにおいて対応する特殊コマンドを基準として、２つのアプリケーションプログラムに従う制御指令を出力する。
【００５９】
すなわち、複数のアプリケーションプログラムに記述されるそれぞれの特殊コマンドは、各特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングを基準として出力することを命令するものである。図１に示す例では、アプリケーションプログラム３２−１の特殊コマンド３２０−１以降のコマンドと、アプリケーションプログラム３２−２の特殊コマンド３２０−２以降のコマンドとは、共通のタイミングを基準として実行を開始する。このように、制御装置１００は、アプリケーションプログラム間でそれぞれのコマンドを、共通のタイミングを基準として実行させる、アプリケーションプログラムの調停処理を実行する。
【００６０】
図１に示すように、例えば、アプリケーションプログラム３２−１の５０行目に特殊コマンド３２０−１が記述されている場合において、その直前（すなわち、４９行目）のコマンドが実行されると、アプリケーションプログラム３２−２における対応する特殊コマンドの実行状態が確認される。図１には、アプリケーションプログラム３２−２に含まれる特殊コマンド３２０−２の直前に記述されたコマンドの実行が、アプリケーションプログラム３２−１の４９行目のコマンドの実行完了より遅い例を示す。そのため、特殊コマンド３２０−１は、アプリケーションプログラム３２−２に記述された特殊コマンド３２０−２の直前に記述されたコマンドの実行完了を待つ命令と同義となる。
【００６１】
アプリケーションプログラム３２−２に含まれる特殊コマンド３２０−２の直前に記述されたコマンドの実行が完了すると、アプリケーションプログラム３２−１の特殊コマンド３２０−１以降のコマンド、および、アプリケーションプログラム３２−２の特殊コマンド３２０−２以降のコマンドは、共通のタイミングを基準として実行開始される。
【００６２】
図１に示す例では、アプリケーションプログラム３２−１の特殊コマンド３２０−１以降に記述されたコマンド「Ｇ０１  Ｘ２０  Ｙ１０」、および、アプリケーションプログラム３２−２の特殊コマンド３２０−２以降に記述されたコマンド「ＭＯＶＥ  Ｘ２００  Ｙ１００」は、共通のタイミングを基準に同時に実行開始される。
【００６３】
なお、図１には、アプリケーションプログラム３２−１に記述された特殊コマンド３２０−１迄のコマンドの実行が、アプリケーションプログラム３２−２に記述された特殊コマンド３２０−２迄のコマンドの実行より早い場合を例示するが、その逆においても同様の動作が行われる。
【００６４】
すなわち、アプリケーションプログラム３２−２に記述された特殊コマンド３２０−２迄のコマンドの実行が、アプリケーションプログラム３２−１に記述された特殊コマンド３２０−１迄のコマンドの実行より早い場合には、特殊コマンド３２０−２は、アプリケーションプログラム３２−１に記述された特殊コマンド３２０−１の直前に記述されたコマンドの実行完了を待つ命令と同義となる。
【００６５】
本明細書において、「制御指令を共通のタイミングを基準として出力する」は、対象のそれぞれのコマンドに従う制御指令を共通のタイミングを基準として同時に出力開始する場合に加えて、対象のそれぞれのコマンドに従う制御指令を共通のタイミングを基準としてそれぞれのオフセット時間経過後に出力開始する場合を含む。例えば、アプリケーションプログラム３２−１の対象となるコマンドについては、共通のタイミングが到来すると実行を開始し、アプリケーションプログラム３２−２の対象となるコマンドについては、共通のタイミングから予め定められたオフセット時間だけ経過すると実行を開始するようにしてもよい。このようなオフセット時間を用いることで、複数の制御アプリケーションを所定時間だけずらして並列的に動作させることができる。このようなオフセット時間を設定することで、例えば、ＮＣ工作機械にロボットが移動するまでに要する時間などを考慮した並列動作を容易に実現できる。
【００６６】
説明の便宜上、図１には、特殊コマンド３２０−１および特殊コマンド３２０−２を同一のコードを用いて規定しているが、これに限らず、互いに対応付けができるコードであれば、どのようなコードを用いてもよい。例えば、それぞれの言語形式に準じたコードを特殊コマンドとして用いるようにしてもよい。各アプリケーションプログラムの言語形式に準じた特殊コマンドを採用することで、それぞれのプログラムの開発者にとって、特殊コマンドの使用をより容易化できる。
【００６７】
また、図１には、２つのアプリケーションプログラムについて説明したが、３つ以上のアプリケーションプログラムにそれぞれ特殊コマンドを記述することで、対象となる３つ以上のアプリケーションプログラムの間で、各特殊コマンド以降に記述されたそれぞれのコマンドに従う制御指令を、共通のタイミングを基準として出力することができる。
【００６８】
また、同一のアプリケーションプログラム内に異なる複数のアプリケーションプログラムとそれぞれ対応する特殊コマンドを記述してもよい。
【００６９】
以上のように、単一の制御装置１００が複数のアプリケーションプログラムを実行する場合に、それぞれのアプリケーションプログラムに対応する特殊コマンドを記述することで、各アプリケーションプログラムにおいて特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングを基準として出力することができる。それぞれのアプリケーションプログラムに記述されたコマンドに従う制御指令を共通のタイミングを基準として出力することで、複数のアクチュエータや装置を連係して動作させるにあたって、連係動作をより緻密に制御できる。すなわち、制御装置１００の制御周期の単位で連係動作を制御できるので、従来に比較して、待ち時間などを削減でき、それによって、生産効率を高めることができる。
【００７０】
以下、本発明のより具体的な応用例として、本実施の形態に係る制御装置１００のより詳細な構成および処理について説明する。
【００７１】
＜Ｂ．制御システムの全体構成例＞
まず、本実施の形態に係る制御装置１００を含む制御システム１の全体構成例について説明する。図２は、本実施の形態に係る制御システム１の全体構成例を示す模式図である。図２には、本実施の形態に係る制御装置１００を中心とした制御システム１を示す。
【００７２】
図２を参照して、制御装置１００は、各種の設備や装置などの制御対象を制御する産業用コントローラに相当する。制御装置１００は、後述するような制御演算を実行する一種のコンピュータであり、典型的には、ＰＬＣ（プログラマブルコントローラ）として具現化されてもよい。制御装置１００は、フィールドネットワーク２を介して各種のフィールド機器５００と接続されてもよい。制御装置１００は、フィールドネットワーク２などを介して、１または複数のフィールド機器５００との間でデータを遣り取りする。一般的に「フィールドネットワーク」は、「フィールドバス」とも称されるが、説明の簡素化のため、以下の説明においては、「フィールドネットワーク」と総称する。すなわち、本明細書の「フィールドネットワーク」は、狭義の「フィールドネットワーク」に加えて「フィールドバス」を含み得る概念である。
【００７３】
フィールドネットワーク２は、データの到達時間が保証される、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００７４】
フィールドネットワーク２には、任意のフィールド機器５００を接続することができる。フィールド機器５００は、製造装置や生産ラインなど（以下、「フィールド」とも総称する。）に対して何らかの物理的な作用を与えるアクチュエータ、および、フィールドとの間で情報を遣り取りする入出力装置などを含む。
【００７５】
フィールドネットワーク２を介して、制御装置１００とフィールド機器５００との間でデータが遣り取りされることになるが、これらの遣り取りされるデータは、数１００μｓｅｃオーダ〜数１０ｍｓｅｃオーダのごく短い周期で更新されることになる。このようなデータの遣り取りは、フィールド機器５００において収集または生成されたデータ（以下、「入力データ」とも称す。）を制御装置１００へ送信する処理、および、制御装置１００からフィールド機器５００に対する制御指令などのデータ（以下、「出力データ」とも称す。）を送信する処理を含む。このような遣り取りされるデータの更新処理が上述の「入出力リフレッシュ処理」に相当する。
【００７６】
図２に示す構成例においては、フィールド機器５００は、リモートＩ／Ｏ（Input/Output）装置５１０と、ロボット５２０およびロボットコントローラ５２２と、ＮＣ工作機械５３０と、サーボドライバ５４０およびサーボモータ５４２とを含む。
【００７７】
サーボモータ５４２は、コンベア５４４を駆動して、ＮＣ工作機械５３０の前に配置されたワークテーブル５４６にワークＷを搬送する。ロボット５２０は、ワークテーブル５４６上の処理前のワークＷをＮＣ工作機械５３０内に配置し、ＮＣ工作機械５３０での処理済ワークＷを取り出してワークテーブル５４６上に配置する。
【００７８】
フィールド機器５００としては、これらに限られることなく、入力データを収集する任意のデバイス（例えば、視覚センサなど）、ならびに、出力データに従う何らかの作用を与える任意のデバイス（例えば、インバータ装置など）などを採用することができる。
【００７９】
リモートＩ／Ｏ装置５１０は、典型的には、フィールドネットワーク２を介して通信を行う通信カプラと、入力データの取得および出力データの出力を行うための入出力部（以下、「Ｉ／Ｏユニット」とも称す。）とを含む。
【００８０】
リモートＩ／Ｏ装置５１０には、入力リレーや各種センサ（例えば、アナログセンサ、温度センサ、振動センサなど）などの入力データを収集する装置、および、出力リレー、コンタクタ、サーボドライバ、および、その他任意のアクチュエータなどのフィールドに対して何らかの作用を与える装置が接続される。
【００８１】
ロボットコントローラ５２２は、制御装置１００からの制御指令（位置指令または速度指令など）に従って、軌跡計算および各軸の角度計算などを行うとともに、計算結果に従って、ロボット５２０を構成するサーボモータなどを駆動する。
【００８２】
サーボドライバ５４０は、制御装置１００からの制御指令（例えば、位置指令または速度指令など）に従って、サーボモータ５４２を駆動する。
【００８３】
制御装置１００は、上位ネットワーク６を介して、他の装置に接続されていてもよい。上位ネットワーク６には、一般的なネットワークプロトコルであるイーサネット（登録商標）やＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）が採用されてもよい。より具体的には、上位ネットワーク６には、１または複数のサーバ装置３００および１または複数の表示装置４００が接続されてもよい。
【００８４】
サーバ装置３００としては、データベースシステム、製造実行システム（ＭＥＳ：Manufacturing Execution System）などが想定される。製造実行システムは、制御対象の製造装置や設備からの情報を取得して、生産全体を監視および管理するものであり、オーダ情報、品質情報、出荷情報などを扱うこともできる。これに限らず、情報系サービスを提供する装置を上位ネットワーク６に接続するようにしてもよい。情報系サービスとしては、制御対象の製造装置や設備からの情報を取得して、マクロ的またはミクロ的な分析などを行う処理が想定される。例えば、制御対象の製造装置や設備からの情報に含まれる何らかの特徴的な傾向を抽出するデータマイニングや、制御対象の設備や機械からの情報に基づく機械学習を行うための機械学習ツールなどが想定される。
【００８５】
表示装置４００は、ユーザからの操作を受けて、制御装置１００に対してユーザ操作に応じたコマンドなどを出力するとともに、制御装置１００での演算結果などをグラフィカルに表示する。
【００８６】
さらに、制御装置１００には、サポート装置２００が接続可能になっている。サポート装置２００は、制御装置１００が制御対象を制御するために必要な準備を支援する装置である。具体的には、サポート装置２００は、制御装置１００で実行されるプログラムの開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）、制御装置１００および制御装置１００に接続される各種デバイスのパラメータ（コンフィギュレーション）を設定するための設定環境、生成したユーザプログラムを制御装置１００へ出力する機能、制御装置１００上で実行されるユーザプログラムなどをオンラインで修正・変更する機能、などを提供する。
【００８７】
＜Ｃ．制御装置のハードウェア構成例＞
次に、本実施の形態に係る制御装置１００のハードウェア構成例について説明する。図３は、本実施の形態に係る制御装置１００のハードウェア構成例を示すブロック図である。
【００８８】
図３を参照して、制御装置１００は、ＣＰＵユニットと称される演算処理部であり、プロセッサ１０２と、チップセット１０４と、主メモリ１０６と、ストレージ１０８と、上位ネットワークコントローラ１１０と、ＵＳＢ（Universal Serial Bus）コントローラ１１２と、メモリカードインターフェイス１１４と、内部バスコントローラ１２０と、フィールドネットワークコントローラ１３０とを含む。
【００８９】
プロセッサ１０２は、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＧＰＵ（Graphics Processing Unit）などで構成される。プロセッサ１０２としては、複数のコアを有する構成を採用してもよいし、プロセッサ１０２を複数配置してもよい。すなわち、制御装置１００は、１または複数のプロセッサ１０２、および／または、１または複数のコアを有するプロセッサ１０２を有している。チップセット１０４は、プロセッサ１０２および周辺エレメントを制御することで、制御装置１００全体としての処理を実現する。主メモリ１０６は、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などの揮発性記憶装置などで構成される。ストレージ１０８は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの不揮発性記憶装置などで構成される。
【００９０】
プロセッサ１０２は、ストレージ１０８に格納された各種プログラムを読出して、主メモリ１０６に展開して実行することで、制御対象に応じた制御、および、後述するような各種処理を実現する。ストレージ１０８には、基本的な機能を実現するためのシステムプログラム３４に加えて、制御対象の製造装置や設備に応じて作成されるシーケンスプログラム３０および１または複数のアプリケーションプログラム３２（総称して、「ユーザプログラム」）が格納される。すなわち、ストレージ１０８は、シーケンスプログラム３０と、逐次実行される複数のアプリケーションプログラム３２とを格納する記憶部に相当する。
【００９１】
上位ネットワークコントローラ１１０は、上位ネットワーク６を介して、サーバ装置３００や表示装置４００（図３参照）などとの間のデータの遣り取りを制御する。ＵＳＢコントローラ１１２は、ＵＳＢ接続を介してサポート装置２００との間のデータの遣り取りを制御する。
【００９２】
メモリカードインターフェイス１１４は、メモリカード１１６が着脱可能に構成されており、メモリカード１１６に対してデータを書込み、メモリカード１１６から各種データ（ユーザプログラムやトレースデータなど）を読出すことが可能になっている。
【００９３】
内部バスコントローラ１２０は、制御装置１００に装着されるＩ／Ｏユニット１２２との間のデータの遣り取りを制御する。フィールドネットワークコントローラ１３０は、フィールドネットワーク２を介したフィールドデバイスとの間のデータの遣り取りを制御する。
【００９４】
図３には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、制御装置１００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００９５】
図２に示す制御システム１においては、制御装置１００、サポート装置２００および表示装置４００がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成を採用してもよい。
【００９６】
＜Ｄ．制御装置の機能構成例＞
次に、本実施の形態に係る制御装置１００の機能構成例について説明する。図４は、本実施の形態に係る制御装置１００の機能構成例を示すブロック図である。
【００９７】
図４には、制御装置１００が制御アプリケーション１および制御アプリケーション２を制御する構成例を示す。制御アプリケーション１および制御アプリケーション２の各々は、典型的には、リレーやコンタクタなどのＩ／Ｏデバイスおよびサーボモータなどの各種アクチュエータを含む。制御アプリケーション１および制御アプリケーション２に加えて、他のＩ／Ｏデバイスおよび各種センサについても、フィールドネットワーク２を介して制御装置１００と接続されている。
【００９８】
制御装置１００は、上位ネットワーク６を介して接続されているサーバ装置３００などから、生産の開始／終了といった命令を受ける。サーバ装置３００は、レシピ情報３８（生産品種や生産に適したパラメータなどの情報）を制御装置１００に送信することもある。制御装置１００は、図示しない他の制御装置１００とネットワーク接続されていてもよい。
【００９９】
図４を参照して、制御装置１００は、ＰＬＣ処理エンジン１５０と、アプリケーション解析部１６０と、アプリケーション調停部１６２と、制御指令演算部１６４と、共有メモリ１７０と、共有メモリ制御部１７２と、表示機能部１７４と、フィールドネットワークインターフェイス１７６と、上位ネットワークインターフェイス１７８とを含む。
【０１００】
ＰＬＣ処理エンジン１５０は、シーケンスプログラム３０の実行および制御装置１００全体の処理を管理する。より具体的には、ＰＬＣ処理エンジン１５０は、シーケンスプログラム実行部１５２と、スケジューラ１５４とを含む。
【０１０１】
シーケンスプログラム実行部１５２は、制御周期毎にシーケンスプログラム３０を実行（スキャン）して制御指令を出力する。
【０１０２】
スケジューラ１５４は、制御装置１００において実行される処理の順序を調停するものである。制御装置１００においては、１または複数の処理を「タスク」として登録し、スケジューラ１５４は、予め設定された優先度に基づいて、１または複数のタスクに対してプロセッサリソースを割当てる。
【０１０３】
アプリケーション解析部１６０は、アプリケーションプログラム３２の少なくとも一部を構文解析して、内部コマンド４０を生成する。アプリケーション解析部１６０には、異なる種類のアプリケーションプログラム３２が提供されることもある。アプリケーション解析部１６０は、予め格納されたアプリケーションプログラム３２を実行するようにしてもよいし、サーバ装置３００から適宜送信されるアプリケーションプログラム３２を実行するようにしてもよい。
【０１０４】
例えば、アプリケーション解析部１６０が２つのアプリケーションプログラム（第１および第２のアプリケーションプログラム）を処理する場合には、制御周期が同じまたは制御周期より長い第１のアプリケーション実行周期毎に第１のアプリケーションプログラムの少なくとも一部を構文解析して第１の内部コマンドを逐次生成するとともに、制御周期が同じまたは制御周期より長い第２のアプリケーション実行周期毎に第２のアプリケーションプログラムの少なくとも一部を構文解析して第２の内部コマンドを逐次生成することになる。
【０１０５】
制御指令演算部１６４は、シーケンスプログラム３０に含まれるモーション命令に従って、制御指令を制御周期毎に算出する。また、制御指令演算部１６４は、アプリケーション解析部１６０により、アプリケーションプログラム毎に逐次生成される内部コマンド４０に従って、制御指令を制御周期毎に算出する。
【０１０６】
シーケンスプログラム実行部１５２および制御指令演算部１６４は、制御周期毎に処理を実行する（高優先タスク）。一方、アプリケーション解析部１６０によるアプリケーションプログラム３２に対する処理は、制御周期の整数倍であるアプリケーション実行周期Ｔ２（第２の周期）毎に実行される（低優先タスク）。
【０１０７】
アプリケーション調停部１６２は、アプリケーション解析部１６０において複数のアプリケーションプログラム３２が処理される場合に、その実行タイミングなどを調停する。アプリケーション調停部１６２の処理の詳細については、後述する。
【０１０８】
共有メモリ１７０は、ＰＬＣ処理エンジン１５０、アプリケーション解析部１６０、および制御指令演算部１６４の間で共有されるデータを保持する。共有されるデータは、構造体変数として格納されるようにしてもよい。例えば、アプリケーション解析部１６０により逐次生成される内部コマンド４０は、共有メモリ１７０の構造体変数に逐次書込まれる。すなわち、共有メモリ１７０は、アプリケーション解析部１６０により生成されるアプリケーション毎の内部コマンドを格納する。
【０１０９】
共有メモリ制御部１７２は、共有メモリ１７０に対するデータ読書きの排他制御、および、外部からの要求に応じた共有メモリ１７０へのアクセスなどを行う。例えば、共有メモリ制御部１７２は、共有メモリ１７０上のデータをフィールドネットワークインターフェイス１７６へ与えることで、フィールドネットワーク２を介して接続される任意のフィールド機器５００へ送信される。
【０１１０】
表示機能部１７４は、共有メモリ１７０に格納されるデータおよびアプリケーション解析部１６０による処理結果などをユーザなどへ出力する。
【０１１１】
フィールドネットワークインターフェイス１７６は、フィールドネットワーク２を介して接続されているフィールド機器５００との間のデータの遣り取りを仲介する。
【０１１２】
上位ネットワークインターフェイス１７８は、上位ネットワーク６を介して接続されている装置との間のデータの遣り取りを仲介する。
【０１１３】
＜Ｅ．内部コマンドの一例＞
次に、制御装置１００のアプリケーション解析部１６０がアプリケーションプログラム３２を構文解析して生成する内部コマンド４０の一例について説明する。アプリケーションプログラム３２としては、インタプリタ方式で実行可能な任意の言語で記述されたどのようなプログラムを採用することもできるが、以下の説明においては、ＮＣプログラムまたはロボットプログラムのように、１または複数のコマンドのより予め軌跡を規定するプログラムを想定する。
【０１１４】
図５は、本実施の形態に係る制御装置１００における内部コマンド４０の生成処理を説明するための模式図である。図５（Ａ）を参照して、アプリケーション解析部１６０がアプリケーションプログラム３２を構文解析して、アプリケーションプログラム３２に含まれる各命令が構文解析される（（１）アプリケーションプログラム解析）。アプリケーションプログラム３２を構文解析によって、規定された軌跡が内部的に生成される（（２）軌跡生成）。アプリケーションプログラム３２は、区間毎に軌跡を規定する命令を含むことが多いので、各命令に対応する区間毎に軌跡が生成される。
【０１１５】
複数の軸からなるグループが規定される場合には、軸毎に軌跡を生成してもよいし、当該グループに属する軸の全体の挙動を規定する軌跡を生成してもよい。
【０１１６】
アプリケーション解析部１６０は、生成した軌跡を示す内部コマンド４０（典型的には、１または複数の関数）を生成する（（３）内部コマンド生成）。軌跡が区間毎に規定される場合には、各区間に対応する内部コマンド４０が生成される。
【０１１７】
以上のように、アプリケーション解析部１６０は、アプリケーションプログラム３２を構文解析して軌跡上の通過点を算出し、算出した通過点に基づいて内部コマンドを生成するようになっている。
【０１１８】
複数の区間を共通の内部コマンド４０で規定してもよいし、１つの区間をさらに分割して個別の内部コマンド４０をそれぞれ生成してもよい。すなわち、アプリケーションプログラム３２の命令または当該命令によって規定される軌跡の区間と、生成される内部コマンド４０の数とを一致させる必要はなく、任意に生成すればよい。また、内部コマンド４０の出力形態についても、要求される制御周期の時間幅などを考慮して、適宜設計されてもよい。
【０１１９】
図５（Ａ）に示すように、内部コマンド４０の一例としては、時間と指令値との関係を規定する関数であってもよい。図５（Ａ）に示す例では、内部的に生成された軌跡は、直線の組合せで規定できる。一例として、Ｘ軸に関して、直線区間毎（区間１〜区間３）の軌跡を時間と速度との関係を示すＦｘ１（ｔ），Ｆｘ２（ｔ），Ｆｘ３（ｔ）を出力できる。同一のグループに属する他の軸（例えば、Ｙ軸およびＺ軸）についても、それぞれ同様に関数が出力されてもよい。
【０１２０】
図５（Ｂ）に示すように、制御指令演算部１６４が、制御周期毎に、生成された内部コマンド４０に従って制御指令を算出することで、制御周期毎に制御指令が出力される（（４）指令値演算）。すなわち、各区間に対応する関数に、各制御周期の時刻を入力することで、当該時刻における指令値を一意に決定できる。何らかのグループが設定されている場合には、当該グループに属する各軸について、指令値を同期して出力することが好ましい。
【０１２１】
上述の図５には、一例として、ＣＮＣで用いられるＧ言語により記述されたコマンドの一例を示すが、これに限らず、任意のインタプリタ方式で実行されるプログラムであれば、どのような言語を用いてもよい。また、処理対象の言語形式に応じて、生成される内部コマンド４０の形式を異ならせてもよい。
【０１２２】
＜Ｆ．制御装置における処理実行のタイミング＞
次に、本実施の形態に係る制御装置１００における処理実行のタイミングについて説明する。図６は、本実施の形態に係る制御装置１００における処理実行のタイミングの一例を示すタイムチャートである。図６に示すタイムチャートにおいては、制御装置１００が、アプリケーション実行周期Ｔ２１毎にアプリケーションプログラム１を構文解析し、アプリケーション実行周期Ｔ２２毎にアプリケーションプログラム２を構文解析する例を示す。
【０１２３】
図６を参照して、高優先タスクとして、入出力リフレッシュ処理１０と、シーケンスプログラムに含まれるシーケンス命令に従う制御指令に出力処理１２と、シーケンスプログラムに含まれるモーション命令に従う制御指令の出力処理１６と、アプリケーションプログラム１に従う制御指令の出力処理１４−１と、アプリケーションプログラム２に従う制御指令の出力処理１４−２とが設定されている。
【０１２４】
アプリケーションプログラム１およびアプリケーションプログラム２の構文解析処理２０−１，２０−２は、それぞれ低優先タスク１，２として設定されている。
【０１２５】
アプリケーション解析部１６０（図４）は、アプリケーション実行周期Ｔ２１（図６に示す例では、制御周期Ｔ１の２倍）毎に、アプリケーションプログラム１の少なくとも一部を構文解析して内部コマンド４０を逐次生成する。生成される内部コマンド４０は、逐次、共有メモリ１７０内のバッファ１７０−１にキューイング（エンキュー）される。
【０１２６】
また、アプリケーション解析部１６０（図４）は、アプリケーション実行周期Ｔ２２（図６に示す例では、制御周期Ｔ１の３倍）毎に、アプリケーションプログラム２の少なくとも一部を構文解析して内部コマンド４０を逐次生成する。生成される内部コマンド４０は、逐次、共有メモリ１７０内のバッファ１７０−２にキューイング（エンキュー）される。
【０１２７】
なお、アプリケーションプログラム１およびアプリケーションプログラム２をそれぞれ処理する互いに独立した２つのアプリケーション解析部１６０を用意してもよい。
【０１２８】
低優先タスクの各々は、アプリケーション実行周期Ｔ２１またはＴ２２内に処理を完了できればよい。図６に示す例において、複数の低優先タスクを同時実行できないので、一方の低優先タスクは中断（サスペンド）状態で待機する。
【０１２９】
高優先タスクは、制御周期Ｔ１毎に実行される。アプリケーションプログラムに従う制御指令の出力処理１４−１，１４−２においては、アプリケーション解析部１６０により生成される内部コマンド４０は、共有メモリ１７０のバッファ１７０−１，１７０−２からそれぞれ読出されて（デキューされて）、当該制御周期Ｔ１における制御指令が算出される。
【０１３０】
説明の便宜上、アプリケーション実行周期Ｔ２１が制御周期Ｔ１の２倍であり、アプリケーション実行周期Ｔ２２が制御周期Ｔ１の３倍である場合を例示したが、これに限らず、アプリケーション実行周期Ｔ２１，Ｔ２２は、対象となるアプリケーションプログラムの種類に応じて、制御周期Ｔ１の整数倍として設定でき、制御周期Ｔ１と同じ長さに設定することもできる。
【０１３１】
＜Ｇ．共有メモリのアクセス処理＞
次に、本実施の形態に係る制御装置１００における共有メモリへのアクセス処理について説明する。上述したように、制御装置１００においては、異なる実行周期で複数のプログラムが実行される。これらのプログラムの実行に必要なデータやこれらのプログラムの実行により算出されるデータの全部または一部は、共有メモリ１７０に格納されてもよい。共有メモリ１７０に格納されるデータは、プログラム間で相互に参照可能になる。
【０１３２】
以下では、実行周期が同一ではないことを考慮した、共有メモリ１７０へのアクセス処理の一例について説明する。
【０１３３】
図７は、本実施の形態に係る制御装置１００の共有メモリ１７０へのアクセス処理の一例を示すタイムチャートである。図７に示すタイムチャートにおいては、ＰＬＣ処理エンジン１５０およびアプリケーション解析部１６０が共有メモリ１７０へアクセスする処理例を示す。
【０１３４】
ＰＬＣ処理エンジン１５０は、予め定められた制御周期Ｔ１毎にシーケンスプログラム３０をサイクリックに実行する。各制御周期Ｔ１において、ＰＬＣ処理エンジン１５０は、フィールドネットワークインターフェイス１７６との間で入出力リフレッシュ処理を実行する。
【０１３５】
具体的には、ＰＬＣ処理エンジン１５０は、フィールドネットワーク２を介して接続されているフィールド機器５００に対する制御指令（出力データ）をフィールドネットワークインターフェイス１７６へ出力するとともに、フィールドネットワークインターフェイス１７６を介して、フィールド機器５００からの計測値および状態値（入力データ）を取得する。ＰＬＣ処理エンジン１５０とフィールドネットワークインターフェイス１７６との間のデータの遣り取り（入出力リフレッシュ処理）は、制御周期Ｔ１毎に繰返し実行される。フィールドネットワークインターフェイス１７６は、所定のフレーム伝送周期毎に、フィールド機器５００との間で出力データおよび入力データを遣り取りする。
【０１３６】
そのため、ＰＬＣ処理エンジン１５０とフィールドネットワークインターフェイス１７６との間の制御周期Ｔ１毎のデータ遣り取りによって、ＰＬＣ処理エンジン１５０とフィールド機器５００との間では、所定周期毎に出力データおよび入力データを更新できる。
【０１３７】
ＰＬＣ処理エンジン１５０がフィールドネットワークインターフェイス１７６を介して取得した入力データの一部または全部は、共有メモリ１７０に書込まれてもよい。この書込み処理によって、アプリケーション解析部１６０は、ＰＬＣ処理エンジン１５０が取扱うデータにアクセスできるようになる。
【０１３８】
ＰＬＣ処理エンジン１５０は、制御周期Ｔ１毎に、共有メモリ１７０にアクセスして必要なデータを読込む。ＰＬＣ処理エンジン１５０が共有メモリ１７０から読込んだデータの一部または全部は、次の制御周期Ｔ１において、フィールドネットワークインターフェイス１７６へ出力されてもよい。この出力処理によって、アプリケーション解析部１６０が取扱うデータをフィールド機器５００へ制御指令として出力することもできる。
【０１３９】
本実施の形態に係る制御装置１００において、アプリケーション解析部１６０によるアプリケーションプログラム３２に対する構文解析は、制御周期が同じまたは制御周期より長いアプリケーション実行周期Ｔ２毎に実行される。すなわち、アプリケーション解析部１６０は、予め定められたアプリケーション実行周期毎にアプリケーションプログラム３２の構文解析を実行する。
【０１４０】
このアプリケーション解析部１６０によるアプリケーションプログラム３２の構文解析中において、処理対象の変数値が変更されないように、以下のような共有メモリに対する排他処理が実行されることが好ましい。
【０１４１】
具体的には、図７に示すように、各アプリケーション実行周期において、アプリケーション解析部１６０が対象のアプリケーションプログラム３２に対する処理の実行を開始すると、アプリケーション解析部１６０は共有メモリ１７０への書込み禁止を設定する。すなわち、アプリケーション解析部１６０は、アプリケーション実行周期毎の構文解析の開始から実行完了までの期間において、共有メモリ１７０への書込みを禁止する。なお、共有メモリ１７０の領域を複数のアプリケーションプログラム３２に対してそれぞれに割当てている場合には、各アプリケーションプログラム３２に割当てられた一部の領域のみを書込み禁止の対象としてもよい。
【０１４２】
アプリケーション解析部１６０により書込みが禁止された期間（書込み禁止期間）において、ＰＬＣ処理エンジン１５０からの当該領域へのデータの書込みが禁止される。そのため、ＰＬＣ処理エンジン１５０は、各制御周期Ｔ１におけるシーケンスプログラム３０の実行前に共有メモリ１７０から必要となるデータを読込むものの、シーケンスプログラム３０の実行により算出される制御指令などの出力データを共有メモリ１７０へ書込むことはしない。
【０１４３】
アプリケーション実行周期Ｔ２において、アプリケーションプログラム３２に対する構文解析の処理の実行が完了すると、アプリケーション解析部１６０は、当該構文解析の処理の実行により生成されたデータ（典型的には、内部コマンド４０を記述するデータ）を共有メモリ１７０へ書込み、続いて、共有メモリ１７０への書込み禁止を解除する。
【０１４４】
共有メモリ１７０への書込み禁止が解除されると、ＰＬＣ処理エンジン１５０は、シーケンスプログラム３０の実行により算出される制御指令などのデータを共有メモリ１７０へ書込む。ＰＬＣ処理エンジン１５０により共有メモリ１７０へ書込まれたデータは、次のアプリケーション実行周期において、アプリケーション解析部１６０により読込まれることになる。すなわち、アプリケーション解析部１６０は、各アプリケーション実行周期Ｔ２の開始時には、ＰＬＣ処理エンジン１５０が同一の制御周期Ｔ１において共有メモリ１７０へ書込んだデータを参照できる。つまり、ＰＬＣ処理エンジン１５０とアプリケーション解析部１６０との間のデータの遣り取りは、同一の制御周期Ｔ１内で完了することになる。
【０１４５】
このように、本実施の形態に係る制御装置１００においては、アプリケーション解析部１６０によるアプリケーションプログラム３２に対する１回の構文解析に要する処理時間（アプリケーション実行周期Ｔ２）は、シーケンスプログラム３０（シーケンス命令および／またはモーション命令）の実行周期（制御周期Ｔ１）と同じか、あるいは、実行周期（制御周期Ｔ１）より長い。このような実行形態において、アプリケーションプログラム３２に対する１回の構文解析処理の途中で、シーケンスプログラム３０からの制御指令などのデータが変更することを防止するために、アプリケーション解析部１６０は、自身の処理が完了するまでの間、他からの共有メモリ１７０へのデータの書込みを禁止する。但し、このデータの書込み禁止期間であっても、他からのデータ読込み（データ参照）は可能とされる。
【０１４６】
アプリケーション解析部１６０は、アプリケーション実行周期Ｔ２における構文解析の処理が完了した時点で、共有メモリ１７０へのデータ書込みの禁止を解除する。この解除以降、ＰＬＣ処理エンジン１５０から共有メモリ１７０へのデータ書込みが可能となる。
【０１４７】
アプリケーション解析部１６０は、アプリケーションプログラム３２に対する解析処理の実行中においては、アプリケーションプログラム３２に関する情報が途中で変化することを防止するために、各アプリケーション実行周期Ｔ２において生成されたデータを処理完了後に共有メモリ１７０へ書込む。
【０１４８】
アプリケーション解析部１６０から共有メモリ１７０へ書込まれたデータは、次の制御周期Ｔ１において、共有メモリ１７０から読出され、当該制御周期Ｔ１において算出されたシーケンスプログラム３０に基づく制御指令とともに、フィールド機器５００へ与えられる。そのため、シーケンスプログラム３０に基づく制御指令およびアプリケーションプログラム３２に基づく制御指令を同期して、フィールド機器５００へ与えることができる。
【０１４９】
＜Ｈ．共通のタイミングを基準としたプログラム実行：その１＞
次に、上述の図１に示すような複数のアプリケーションプログラムについて、共通のタイミングを基準としたプログラム実行を実現するための一例について説明する。
【０１５０】
シーケンスプログラム３０は、制御周期毎に全体がスキャン実行される。これに対して、アプリケーションプログラム３２は、インタプリタ方式で、プログラムが一行ずつ解釈および実行される。本実施の形態に係る制御装置１００においては、アプリケーション解析部１６０は、アプリケーションプログラム３２に含まれるコマンドをある程度余分に構文解析（先読み（Look Ahead））しており、特殊コマンドの存在を予め知ることができる。
【０１５１】
すなわち、アプリケーション解析部１６０が先読み動作を行う場合には、アプリケーションプログラム３２に記述されたコマンドから内部コマンドを生成するにあたって、当該内部コマンドの生成対象となるコマンド以降に記述されたコマンドも参照する。そのため、アプリケーション解析部１６０は、複数のアプリケーションプログラム３２の間で共通のタイミングを基準として実行すべきコマンド（行）を事前に特定できる。
【０１５２】
図１に示すように、複数のアプリケーションプログラム３２のそれぞれにおいて、共通のタイミングを基準として実行すべきコマンドが記述された行の直前に、予め定められたキーワードを含む特殊コマンドを記述する。それぞれの特殊コマンド以降に記述されたコマンドは、すべてのアプリケーションプログラムが実行開始可能になった後に実行が開始される。
【０１５３】
このように、複数のアプリケーションプログラムのコマンドが、共通のタイミングを基準として実行開始され、それぞれのコマンドによって生成される制御指令は、共通のフィールドネットワーク２を介して接続されたそれぞれの制御アプリケーションへ同時に与えられる。これによって、ＮＣ工作機械とロボットとの間で連係動作を実現できる。
【０１５４】
それぞれのアプリケーションプログラム３２が実行開始可能になったか否かについては、典型的には、アプリケーション調停部１６２によって管理される。
【０１５５】
図８は、本実施の形態に係る制御装置１００において共通のタイミングを基準としたプログラム実行の実現例を示すシーケンス図である。図８には、一例として、制御装置１００がアプリケーションプログラム１およびアプリケーションプログラム２をそれぞれ処理する場合を示す。
【０１５６】
図８を参照して、制御指令演算部１６４は、共有メモリ１７０に逐次格納されるそれぞれの内部コマンドを読出して（シーケンスＳＱ２）、それぞれの制御指令を算出する（シーケンスＳＱ４）。シーケンスＳＱ４の処理は制御周期Ｔ１毎に繰返される。シーケンスＳＱ２の処理は、内部コマンドに基づく制御指令の算出に応じて、適宜実行される。
【０１５７】
アプリケーション解析部１６０は、アプリケーションプログラム１に対する構文解析の先読み動作によって、特殊コマンドを発見すると（シーケンスＳＱ１０）、当該特殊コマンド以降に記述されたコマンドに基づいて内部コマンドを生成する（シーケンスＳＱ１２）。そして、アプリケーション解析部１６０は、アプリケーションプログラム１の当該特殊コマンド以前に記述されたコマンドに基づいて生成された先行の内部コマンドの処理状況を確認する（シーケンスＳＱ１４）。先行する内部コマンドの処理状況の確認は、共有メモリ１７０を参照することで実現されてもよいし、制御指令演算部１６４での制御指令の算出処理の状況を示すフラグなどを参照することで実現されてもよい。
【０１５８】
アプリケーション解析部１６０は、先行の内部コマンドに基づく制御指令の算出が完了したことを検知すると、アプリケーションプログラム１の処理が特殊コマンドに到達したこと（すなわち、実行開始可能になったこと）を、アプリケーション調停部１６２へ通知する（シーケンスＳＱ１６）。
【０１５９】
同様に、アプリケーション解析部１６０は、アプリケーションプログラム２に対する構文解析の先読み動作によって、特殊コマンドを発見すると（シーケンスＳＱ２０）、当該特殊コマンド以降に記述されたコマンドに基づいて内部コマンドを生成する（シーケンスＳＱ２２）。そして、アプリケーション解析部１６０は、アプリケーションプログラム２の当該特殊コマンド以前に記述されたコマンドに基づいて生成された先行の内部コマンドの処理状況を確認する（シーケンスＳＱ２４）。
【０１６０】
アプリケーション解析部１６０は、先行の内部コマンドに基づく制御指令の算出が完了したことを検知すると、アプリケーションプログラム２の処理が特殊コマンドに到達したこと（すなわち、実行開始可能になったこと）を、アプリケーション調停部１６２へ通知する（シーケンスＳＱ２６）。
【０１６１】
アプリケーション調停部１６２は、アプリケーションプログラム１およびアプリケーションプログラム２のいずれからも、実行開始可能になった通知を受けると、アプリケーション解析部１６０に対して、アプリケーションプログラム１およびアプリケーションプログラム２についての実行開始通知を送出する（シーケンスＳＱ３０）。
【０１６２】
実行開始通知を受けて、アプリケーション解析部１６０は、シーケンスＳＱ１２において生成済の内部コマンド、および、シーケンスＳＱ２２において生成済の内部コマンドを共有メモリ１７０内のそれぞれのバッファにキューイング（エンキュー）する（シーケンスＳＱ２８）。
【０１６３】
制御指令演算部１６４は、共有メモリ１７０のそれぞれのバッファから内部コマンドを読出して（デキューして）、それぞれの制御指令を算出する。
【０１６４】
このように、アプリケーション調停部１６２は、アプリケーションプログラム１の特殊コマンドの直前に記述されたコマンドまでの実行完了、および、アプリケーションプログラム２の特殊コマンドの直前に記述されたコマンドまでの実行完了を検知して、アプリケーション解析部１６０に対して、共通のタイミングを通知する。
【０１６５】
以上のような内部処理によって、共通のタイミングを基準としたプログラム実行を実現できる。
【０１６６】
図９は、本実施の形態に係る制御装置１００において共通のタイミングを基準としたプログラム実行を実現するためのプログラム例を示す模式図である。図９に示すシーケンスプログラム３０は、図２に示す、コンベア５４４、ＮＣ工作機械５３０、およびロボット５２０の制御に向けられる。
【０１６７】
図９に示すシーケンスプログラム３０は、コンベア５４４を駆動するサーボモータ５４２を制御するためのモーション命令を規定するファンクションブロック３０２と、ＮＣ工作機械５３０を制御するためのアプリケーションプログラム３２−１（ＮＣプログラム）の実行開始を指示するファンクションブロック３０４と、ロボット５２０を制御するためのアプリケーションプログラム３２−２（ロボットプログラム）の実行開始を指示するファンクションブロック３０６とを含む。
【０１６８】
ファンクションブロック３０２，３０４，３０６の各々は、運転開始フラグがＴＲＵＥになることで、指定された処理を実行する。
【０１６９】
アプリケーションプログラム３２−１およびアプリケーションプログラム３２−２には、共通のタイミングを基準として実行するための特殊コマンド（ＳｙｎｃＳｔａｒｔ）を含む。図９に示すアプリケーションプログラム３２−１においては、「Ｇ０１  Ｘ−１０  Ｙ−５０」とのコマンドと、「Ｇ０１  Ｘ２０  Ｙ１０」とのコマンドの間に、特殊コマンド３２０−１が配置されている。また、アプリケーションプログラム３２−２においては、「ＭＯＶＥ  Ｘ３０  Ｙ１０」とのコマンドと、「ＭＯＶＥ  Ｘ２００  Ｙ１００」とのコマンドとの間に、特殊コマンド３２０−２が配置されている。
【０１７０】
特殊コマンド３２０−１および特殊コマンド３２０−２には、互いを関連付けるキーワードとして、引数としての「１」が付加されている。特殊コマンド３２０−１と特殊コマンド３２０−２との間で、基準タイミングを合せる処理が実行される。すなわち、特殊コマンド３２０−１および特殊コマンド３２０−２は、コマンド本体（ＳｙｎｃＳｔａｒｔ）に加えて、互いを対応付けるための引数が指定される。そして、特殊コマンド３２０−１以降に記述されたコマンドおよび特殊コマンド３２０−２以降に記述されたコマンドは、共通のタイミングを基準として実行される。
【０１７１】
図９に示すように、共通のタイミングを基準として実行させる対象のコマンドの直前に、基準タイミング合わせを指示するための特殊コマンド３２０−１，３２０−２を配置する。これらの特殊コマンドのうち、引数の値（図９に示す例では、「１」）が一致するものが互いに対応付けられた特殊コマンドであると判断される。そして、これらの特殊コマンドが記載された次の行に記載のコマンドは、共通のタイミングを基準として実行される。図９に示す例では、それぞれの特殊コマンド以降に記述されたコマンド同士が共通のタイミングを基準として同時に実行開始される。
【０１７２】
図９に示す例において、特殊コマンド３２０−１および特殊コマンド３２０−２は、特殊コマンド３２０−１以降に記述されたコマンドに従う制御指令、および、特殊コマンド３２０−２以降に記述されたコマンドに従う制御指令を、共通のタイミングから同時に出力するための命令に相当する。
【０１７３】
このようなシーケンスプログラム３０およびアプリケーションプログラム３２を用意することで、上述の図１に示すように、ロボット５２０およびＮＣ工作機械５３０を共通のタイミングを基準として動作させることができる。
【０１７４】
＜Ｉ．共通のタイミングを基準としたプログラム実行：その２＞
次に、上述の図１に示すような複数のアプリケーションプログラムについて、共通のタイミングを基準としたプログラム実行を実現するための別の一例について説明する。上述の説明においては、特殊コマンド以降に記述されたコマンドを、共通のタイミングを基準に同時に実行開始する例を示したが、これに限らず、共通のタイミングを基準として一方または両方のコマンドに従う制御指令を各オフセット時間経過後に出力開始するようにしてもよい。
【０１７５】
図１０は、本実施の形態に係る制御装置１００によるロボット５２０およびＮＣ工作機械５３０の制御の一例を示すタイムチャートである。図１５を参照して、典型的な動作例として、ロボット５２０は、コンベア５４４により搬送されるワークＷをピックアップして、ＮＣ工作機械５３０の内部に配置する。ＮＣ工作機械５３０は、ワークＷに対して加工処理を実施する。そして、ロボット５２０は、ＮＣ工作機械５３０の内部からワークＷを取り出して、次工程の受入れ位置へ当該ワークＷを配置する。
【０１７６】
図１０には、ＮＣ工作機械５３０においてワークＷに対する加工が終了する直前の動作例を示す。ＮＣ工作機械５３０のワークＷに対する加工処理が時刻ｔ２に終了するとすれば、ロボット５２０は、時刻ｔ２において加工処理が終了したワークＷを取り出すことが好ましい。そのため、ロボット５２０は、時刻ｔ２において、ＮＣ工作機械５３０のワーク取出位置に到着できるように、時刻ｔ１から動作を開始する。そして、ロボット５２０は、時刻ｔ２においてワークＷを取り出し、時刻ｔ３から次工程への移動を開始する。一方、ＮＣ工作機械５３０は、ワークＷがロボット５２０により取り出されるとすぐに、新たなワークＷを受入れるための受入位置までの移動を開始する。
【０１７７】
但し、時刻ｔ２から時刻ｔ３の間は、ロボット５２０がワークＷを取り出す動作を行っているため、ＮＣ工作機械５３０はロボット５２０と干渉しないように、動作を停止する。すなわち、ロボット５２０は、時刻ｔ２を基準に動作を開始する一方で、ＮＣ工作機械５３０は、時刻ｔ２を基準に所定時間だけ動作を停止した後に、動作を開始する。
【０１７８】
図１０に示す時刻ｔ２から時刻ｔ３までの時間は、上述した「オフセット時間」の一例に相当する。上述したような特殊コマンドを用いることで、このようなオフセット時間を反映した動作を実現できる。
【０１７９】
図１１は、本実施の形態に係る制御装置１００において共通のタイミングを基準としたプログラム実行を実現するための別のプログラム例を示す模式図である。図１１に示すシーケンスプログラム３０は、図９に示すシーケンスプログラム３０と同様であるが、シーケンスプログラム３０から呼び出されるアプリケーションプログラム３２−１（ＮＣプログラム）に記述される特殊コマンドが異なっている。
【０１８０】
より具体的には、図１１に示すアプリケーションプログラム３２−１においては、図９に示すアプリケーションプログラム３２−１の特殊コマンド３２０−１に代えて、特殊コマンド３２２が記述されている。
【０１８１】
特殊コマンド３２２には、対応する特殊コマンド３２０−２と関連付けるための第１引数として「１」が付加されている。さらに、特殊コマンド３２２には、第２引数としてオフセット時間の長さを示す「１００」が付加されている。
【０１８２】
図１１に示すように、それぞれのアプリケーションプログラム３２に記述された特殊コマンドのうち、引数の値（図９に示す例では、「１」）が一致するものが互いに対応付けられた特殊コマンドであると判断される。そして、これらの特殊コマンドが記載された次の行に記載のコマンドは、共通のタイミングを基準として実行される。但し、特殊コマンド３２２以降に記述されたコマンドは、第２引数として指定された「１００」に相当するオフセット時間だけ待機した上で、実行開始される。
【０１８３】
図１２は、図１１に示すプログラム例に対応するプログラム実行を示すタイムチャートである。図１２を参照して、アプリケーションプログラム３２−２に含まれる特殊コマンド３２０−２の直前に記述されたコマンドの実行が完了すると、共通のタイミングが基準として設定される。
【０１８４】
アプリケーションプログラム３２−２の特殊コマンド３２０−２には、オフセット時間が設定されていないので、特殊コマンド３２０−２以降のコマンドは、基準タイミングの直後に実行が開始される。
【０１８５】
これに対して、アプリケーションプログラム３２−１の特殊コマンド３２２には、オフセット時間が設定されているので、特殊コマンド３２２以降のコマンドは、基準タイミングから指定されたオフセット時間の経過後に実行が開始される。
【０１８６】
図１２に示す例において、特殊コマンド３２２は、特殊コマンド３２２以降に記述されたコマンドに従う制御指令を、共通のタイミングから指定された時間だけ経過後に出力するための命令に相当する。
【０１８７】
以上のように、オフセット時間を含む特殊コマンドを用いることで、所定の相対的な時間関係を維持したまま、複数のアプリケーションプログラムを実行させることができる。
【０１８８】
上述の図１１および図１２に示す例では、一方のアプリケーションプログラムのみにオフセット時間を設定する例を示すが、それぞれのアプリケーションプログラムの記述される特殊コマンドにオフセット時間を設定してもよい。それぞれのアプリケーションプログラムにオフセット時間を設定することで、複数のアプリケーションプログラムを一定の時間差をもって実行することができ、共通のタイミングを基準に同時に実行開始だけではなく、多種多様な制御アプリケーションに対応できるようになる。
【０１８９】
＜Ｊ．任意の条件による複数のアプリケーションプログラムの同期実行＞
次に、任意の条件による複数のアプリケーションプログラム３２の同期実行について説明する。上述の説明においては、複数のアプリケーションプログラム３２に特殊コマンドを記述することで、共通のタイミングを基準に実行開始する例を示したが、これに限らず、任意の条件の成立を基準タイミングとすることもできる。
【０１９０】
図１３は、本実施の形態に係る制御装置１００においてシーケンスプログラムでの処理結果を条件としたアプリケーションプログラムの同期実行を実現するためのプログラム例を示す模式図である。図１３に示すシーケンスプログラム３０は、コンベア５４４を駆動するサーボモータ５４２を制御するためのモーション命令を規定するファンクションブロック３０２と、ＮＣ工作機械５３０を制御するためのアプリケーションプログラム３２−１（ＮＣプログラム）の実行開始を指示するファンクションブロック３０４と、ロボット５２０を制御するためのアプリケーションプログラム３２−２（ロボットプログラム）の実行開始を指示するファンクションブロック３０６とを含む。
【０１９１】
ファンクションブロック３０２によりサーボモータ５４２に対する制御指令が与えられ、ワークＷの搬送が完了すると、コンベア搬送完了を示すコイル３０３がＴＲＵＥになる。このようなシーケンス命令および／またはモーション命令により更新されるデータ（フラグ値など）は、アプリケーションプログラム３２に対する構文解析においても参照可能である。
【０１９２】
図１３に示す例では、アプリケーションプログラム３２−３（ＮＣプログラム）の１行目において、「コンベア搬送完了＝ＴＲＵＥ」といった条件が記述されている。すなわち、アプリケーションプログラム３２−３は、コンベア搬送完了を示すコイル３０３がＴＲＵＥになったことを条件に実行されることになる。
【０１９３】
同様に、アプリケーションプログラム３２−４（ロボットプログラム）においても、「コンベア搬送完了＝ＴＲＵＥ」といった条件が記述されている。すなわち、アプリケーションプログラム３２−４は、コンベア搬送完了を示すコイル３０３がＴＲＵＥになったことを条件に実行されることになる。
【０１９４】
図１３に示すように、それぞれのアプリケーションプログラムには、「コンベア搬送完了＝ＴＲＵＥ」との条件が記述されており、この共通の条件によって、処理実行の基準となる共通のタイミングを設定することができる。
【０１９５】
このように、本実施の形態に係る制御装置１００においては、アプリケーションプログラム中において、シーケンスプログラム３０により更新される変数が参照可能になっている。すなわち、アプリケーションプログラム３２−３および３２−４は、シーケンスプログラム３０により更新される変数を実行開始条件として指定可能になっている。
【０１９６】
図１３に示す例では、「コンベア搬送完了」という変数が「ＴＲＵＥ」になったときに、ＮＣプログラムおよびロボットプログラムの両方について処理が開始されることになる。
【０１９７】
図１４は、図１３に示すプログラム例に対応するプログラム実行を示すタイムチャートである。図１４を参照して、「コンベア搬送完了」という変数が「ＴＲＵＥ」になったタイミングが、実質的に共通の基準タイミングとして設定される。そして、アプリケーションプログラム３２−１およびアプリケーションプログラム３２−２の各コマンドは、この共通の基準タイミングから実行が開始される。このように、シーケンスプログラムでの変数を利用することで、複数のアプリケーションプログラムについて、共通のタイミングを基準として同時に実行開始させることができる。
【０１９８】
説明の便宜上、図１３および図１４には、２つのアプリケーションプログラムを同時に実行開始する例を示したが、これに限らず、３つ以上のアプリケーションプログラムを同時に実行開始させるようにすることもできる。
【０１９９】
また、複数のアプリケーションプログラムを同時に実行開始する例を示したが、上述したようなオフセット時間を設定することも可能である。この場合には、各アプリケーションプログラムにおいて、基準タイミングを規定する条件の後に、待機すべきオフセット時間を明示的に記述することで実現できる。
【０２００】
本実施の形態に係る制御装置１００においては、アプリケーションプログラム３２中に特殊コマンドを記述して共通のタイミングを設定する方法だけに限らず、シーケンスプログラムにより更新される変数を利用して共通のタイミングを設定する方法を採用できるので、プログラム開発者から見れば、プログラミングの自由度を高めることができる。
【０２０１】
＜Ｋ．表示機能部＞
次に、本実施の形態に係る制御装置１００の表示機能部１７４について説明する。制御装置１００は、ユーザに対して任意の情報を視覚的に提示する表示部を有していてもよい。この表示部は、ユーザからの操作を受付ける入力機能を有していてもよい。図１５は、本実施の形態に係る表示機能部を有する制御装置の外観を示す模式図である。
【０２０２】
図１５（Ａ）を参照して、制御装置１００Ａは、電源ユニット１４０と、ＣＰＵユニット１４２と、表示ユニット１４４とを含む。ＣＰＵユニット１４２は、上述の制御装置１００と同様の機能を提供する。表示ユニット１４４は、ディスプレイを含み、ＣＰＵユニット１４２による演算結果などを出力する。表示ユニット１４４は、タッチパネルなどのユーザ入力機能を有していてもよい。
【０２０３】
図１５（Ａ）に示す制御装置１００Ａは、本体に比較的小型のディスプレイを含む表示ユニット１４４を有しており、表示ユニット１４４には、共有メモリ１７０上のデータに基づく表示がなされる。ユーザは、表示ユニット１４４により共有メモリ１７０上のデータの内容を確認できる。
【０２０４】
図１５（Ｂ）を参照して、制御装置１００Ｂは、タッチパネル１４６と、本体部１４８とを含み、一体型として構成されている。タッチパネル１４６は、本体部１４８による演算結果などを表示するとともに、ユーザ操作を受付けて、その操作内容を示す信号を本体部１４８へ出力する。本体部１４８は、上述の制御装置１００と同様の機能を提供する。
【０２０５】
図１５（Ｂ）に示す制御装置１００Ｂの構成によれば、本体に比較的大型のディスプレイを配置することができるので、共有メモリ１７０上のデータに基づく表示だけではなく、アプリケーションプログラムの内容および実行状況などを表示することも可能となる。また、ユーザは、タッチパネル１４６を操作することで、アプリケーションプログラムを編集することもできる。
【０２０６】
図１６は、本実施の形態に係る制御装置１００の共有メモリ１７０へのアクセス処理の別の一例を示すタイムチャートである。図１６に示すタイムチャートにおいては、表示機能部１７４およびアプリケーション解析部１６０が共有メモリ１７０へアクセスする処理例を示す。
【０２０７】
図１６を参照して、上述したように、各アプリケーション実行周期において、アプリケーション解析部１６０が対象のアプリケーションプログラム３２に対する処理の実行を開始すると、アプリケーション解析部１６０は共有メモリ１７０への書込み禁止を設定する。この書込み禁止期間が終了すると、共有メモリ１７０から表示機能部１７４へのデータの書込みが実行される。
【０２０８】
また、タッチパネルなどを介してユーザからの操作を受付けた場合には、書込み禁止期間以外のタイミングで、ユーザからの操作内容を示すデータが共有メモリ１７０に書込まれる。なお、共有メモリ１７０へのデータ書込みについては、指定された処理が実行されてないことなどをさらなる条件として許可するようにしてもよい。
【０２０９】
以上のように、本実施の形態に係る制御装置１００，１００Ａ，１００Ｂにおいては、表示機能部１７４が共有メモリ１７０へアクセスすることで、アプリケーションプログラム３２に対する処理の結果や処理状況などをユーザへ提示することができ、また、ユーザからのアプリケーションプログラム３２に対する編集などを可能にすることもできる。これによって、アプリケーションプログラム３２を実行する際のユーザビリティを高めることができる。
【０２１０】
＜Ｌ．付記＞
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
シーケンスプログラム（３０）と、逐次実行される第１および２のアプリケーションプログラム（３２）とを格納する記憶部（１０８）を備え、前記第１および２のアプリケーションプログラムの各々は１または複数のコマンドを含み、
制御周期毎に前記シーケンスプログラムを実行して制御指令を出力するプログラム実行部（１５２）と、
前記制御周期が同じまたは前記制御周期より長い第１の周期毎に前記第１のアプリケーションプログラムの少なくとも一部を構文解析して第１の内部コマンドを逐次生成するとともに、前記制御周期が同じまたは前記制御周期より長い第２の周期毎に前記第２のアプリケーションプログラムの少なくとも一部を構文解析して第２の内部コマンドを逐次生成する解析部（１６０）と、
前記解析部により生成される前記第１および第２の内部コマンドを格納する共有メモリ（１７０）と、
前記第１および第２の内部コマンドに従って前記制御周期毎にそれぞれの制御指令を出力する指令演算部（１６４）とを備え、
前記第１のアプリケーションプログラムが第１の特殊コマンド（３２０−１；３２２）を含み、前記第２のアプリケーションプログラムが前記第１の特殊コマンドに対応する第２の特殊コマンド（３２０−２）を含む場合に、前記指令演算部は、前記第１のアプリケーションプログラムにおいて前記第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、前記第２のアプリケーションプログラムにおいて前記第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、共通のタイミングを基準として出力する、制御装置。
［構成２］
前記第１の特殊コマンドの直前に記述されたコマンドまでの実行完了、および、前記第２の特殊コマンドの直前に記述されたコマンドまでの実行完了を検知して、前記解析部に対して、前記共通のタイミングを通知する調停部（１６２）をさらに備える、構成１に記載の制御装置。
［構成３］
前記第１の特殊コマンド（３２０−１）および前記第２の特殊コマンド（３２０−２）は、前記第１の特殊コマンド以降に記述されたコマンドに従う制御指令、および、前記第２の特殊コマンド以降に記述されたコマンドに従う制御指令を、前記共通のタイミングから同時に出力するための命令を含む、構成１または２に記載の制御装置。
［構成４］
前記第１の特殊コマンド（３２２）は、前記第１の特殊コマンド以降に記述されたコマンドに従う制御指令を、前記共通のタイミングから指定された時間だけ経過後に出力するための命令を含む、構成１または２に記載の制御装置。
［構成５］
前記第１のアプリケーションプログラムおよび前記第２のアプリケーションプログラムは、前記シーケンスプログラムにより更新される変数（３０３）を実行開始条件として指定可能になっている、構成１〜４のいずれか１項に記載の制御装置。
［構成６］
前記第１および第２の特殊コマンドは、コマンド本体に加えて、互いを対応付けるための引数が指定される、構成１〜５のいずれか１項に記載の制御装置。
［構成７］
前記解析部は、前記第１および第２のアプリケーションプログラムに記述されたコマンドから内部コマンドを生成するにあたって、当該内部コマンドの生成対象となるコマンド以降に記述されたコマンドも参照する、構成１〜６のいずれか１項に記載の制御装置。
［構成８］
前記解析部は、
予め定められた実行周期毎にアプリケーションプログラムの構文解析を実行し、
前記実行周期毎の構文解析の開始から実行完了までの期間において、前記共有メモリへの書込みを禁止する、構成１〜７のいずれか１項に記載の制御装置。
【０２１１】
＜Ｍ．利点＞
本実施の形態に係る制御装置は、シーケンス命令およびモーション命令を含むシーケンスプログラムに加えて、１または複数のアプリケーションプログラムを並列的に実行できる。このような並列実行においても、それぞれの命令に従う制御指令を制御周期毎に出力できるので、シーケンスプログラムおよびアプリケーションプログラムの別にかかわらず、同一の制御精度を実現できる。
【０２１２】
本実施の形態に係る制御装置は、複数のアプリケーションプログラムを並列的に実行するにあたって、それぞれのアプリケーションプログラムが制御する制御アプリケーションの間の連係動作を制御周期で同期させることができる。あるいは、制御アプリケーションの間の動作を制御周期の単位で規定されるオフセット時間だけずらして連係動作させることもできる。このような精緻な連係動作を提供することで、設備をより効率的に動作させることもでき、これによって生産効率を高めることもできる。
【０２１３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２１４】
１  制御システム、２  フィールドネットワーク、６  上位ネットワーク、１０  入出力リフレッシュ処理、１２，１４，１６  出力処理、２０  構文解析処理、３０  シーケンスプログラム、３２  アプリケーションプログラム、３４  システムプログラム、３８  レシピ情報、４０  内部コマンド、１００，１００Ａ，１００Ｂ  制御装置、１０２  プロセッサ、１０４  チップセット、１０６  主メモリ、１０８  ストレージ、１１０  上位ネットワークコントローラ、１１２  ＵＳＢコントローラ、１１４  メモリカードインターフェイス、１１６  メモリカード、１２０  内部バスコントローラ、１２２  Ｉ／Ｏユニット、１３０  フィールドネットワークコントローラ、１４０  電源ユニット、１４２  ＣＰＵユニット、１４４  表示ユニット、１４６  タッチパネル、１４８  本体部、１５０  処理エンジン、１５２  シーケンスプログラム実行部、１５４  スケジューラ、１６０  アプリケーション解析部、１６２  アプリケーション調停部、１６４  制御指令演算部、１７０  共有メモリ、１７０−１，１７０−２  バッファ、１７２  共有メモリ制御部、１７４  表示機能部、１７６  フィールドネットワークインターフェイス、１７８  上位ネットワークインターフェイス、２００  サポート装置、３００  サーバ装置、３０２，３０４，３０６  ファンクションブロック、３０３  コイル、３２０，３２２  特殊コマンド、４００  表示装置、５００  フィールド機器、５１０  リモートＩ／Ｏ装置、５２０  ロボット、５２２  ロボットコントローラ、５３０  ＮＣ工作機械、５４０  サーボドライバ、５４２  サーボモータ、５４４  コンベア、５４６  ワークテーブル、Ｗ  ワーク。
【図１】
2019067045.tif 000003
【図２】
2019067045.tif 000004
【図３】
2019067045.tif 000005
【図４】
2019067045.tif 000006
【図５】
2019067045.tif 000007
【図６】
2019067045.tif 000008
【図７】
2019067045.tif 000009
【図８】
2019067045.tif 000010
【図９】
2019067045.tif 000011
【図１０】
2019067045.tif 000012
【図１１】
2019067045.tif 000013
【図１２】
2019067045.tif 000014
【図１３】
2019067045.tif 000015
【図１４】
2019067045.tif 000016
【図１５】
2019067045.tif 000017
【図１６】
2019067045.tif 000018