(57)【要約】【課題】外部機器への変数の公開設定をより容易に行うための技術が望まれている。【解決手段】開発支援装置は、コントローラを制御するユーザプログラムを開発する開発ツールを提供する。ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属する。開発ツールは、名前空間に属する変数をコントローラに通信接続される外部機器に公開するか否かをコントローラに判断させるための公開設定を名前空間について受け付けるように構成されている。通信インターフェイスは、設計ツールがユーザプログラムの転送操作を受け付けたことに基づいて、ユーザプログラムと公開設定とをコントローラに転送する。【選択図】図１
2019159632.tif 000002
【特許請求の範囲】
【請求項１】
開発支援装置と、
前記開発支援装置と通信可能に構成されているコントローラとを備え、
前記開発支援装置には、前記コントローラを制御するユーザプログラムを開発するための開発ツールがインストールされ得、前記ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属し、前記開発ツールは、前記名前空間に属する変数を前記コントローラに通信接続される外部機器に公開するか否かを判断するための公開設定を前記名前空間について受け付けるように構成されており、
前記コントローラは、
前記開発支援装置から受信した前記ユーザプログラムに従って制御対象の駆動機器を制御し、当該ユーザプログラムの実行結果に従って前記名前空間に属する変数を更新するためのプログラム実行部と、
前記開発支援装置から受信した前記公開設定が公開を示す場合、前記名前空間に属する変数を前記外部機器に公開するための公開設定部とを含む、制御システム。
【請求項２】
前記開発ツールは、
前記名前空間に属する各変数について前記公開設定を設定可能に構成されており、
名前空間用の前記公開設定を初期値として変数用の前記公開設定に反映する、請求項１に記載の制御システム。
【請求項３】
前記公開設定部は、名前空間用の前記公開設定よりも変数用の前記公開設定を優先して、前記名前空間に属する変数を前記外部機器に公開するか否かを判断する、請求項２項に記載の制御システム。
【請求項４】
前記公開設定は、通信プロトコルを示す通信設定をさらに含み、
前記公開設定部は、前記通信設定によって示される通信プロトコルで前記コントローラと前記外部機器とが通信する場合、前記名前空間に属する変数を前記外部機器に公開する、請求項１〜３のいずれか１項に記載の制御システム。
【請求項５】
前記開発支援装置は、
揮発性の記憶装置と、
不揮発性の記憶装置とをさらに備え、
前記公開設定は、前記名前空間に属する変数を保持するか否かを示す保持設定を含み、
前記公開設定部は、
前記保持設定が保持を示す場合、前記名前空間に属する変数を前記不揮発性の記憶装置に記憶し、
前記保持設定が非保持を示す場合、前記名前空間に属する変数を前記揮発性の記憶装置に記憶し、請求項１〜４のいずれか１項に記載の制御システム。
【請求項６】
ユーザプログラムに規定される制御命令に従って制御対象の駆動機器を制御するコントローラと通信可能に構成されている開発支援装置であって、
前記コントローラと通信するための通信インターフェイスと、
前記ユーザプログラムを開発するための開発ツールを提供する開発プログラムを格納する記憶装置とを備え、前記ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属し、前記開発ツールは、前記名前空間に属する変数を前記コントローラに通信接続される外部機器に公開するか否かを前記コントローラに判断させるための公開設定を前記名前空間について受け付けるように構成されており、
前記通信インターフェイスは、前記開発ツールが前記ユーザプログラムの転送操作を受け付けたことに基づいて、前記ユーザプログラムと前記公開設定とを前記コントローラに転送する、開発支援装置。
【請求項７】
ユーザプログラムに規定される制御命令に従って制御対象の駆動機器を制御するコントローラと通信可能に構成されている開発支援装置に実行される開発支援プログラムであって、
前記開発支援プログラムは、前記開発支援装置に、前記ユーザプログラムを開発するための開発ツールを起動するステップを実行させ、前記ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属し、
前記開発支援プログラムは、前記開発支援装置に、さらに、前記名前空間に属する変数を前記コントローラに通信接続される外部機器に公開するか否かを前記コントローラに判断させるための公開設定を前記名前空間に対して受け付けるステップと、
前記開発ツールが前記ユーザプログラムの転送操作を受け付けたことに基づいて、前記ユーザプログラムと前記公開設定とを前記コントローラに転送するステップとを実行させる、開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コントローラ内で管理される変数を外部機器に公開するための技術に関する。
【背景技術】
【０００２】
様々な生産現場において、生産工程を自動化するＦＡ（Factory  Automation）システムが普及している。ＦＡシステムは、種々の産業用の駆動機器によって構成される。産業用の駆動機器は、たとえば、ワークを移動するための移動テーブルや、ワークを搬送するためのコンベアや、予め定められた目的の場所までワーク移動するためのアームロボットなどを含む。これらの駆動機器は、ＰＬＣ（Programmable Logic Controller）やロボットコントローラなどの産業用のコントローラによって制御される。
【０００３】
コントローラは、設計者によって予め設計されたプログラム（以下、「ユーザプログラム」ともいう。）に従って各種駆動機器を制御する。このようなユーザプログラムの開発を支援するためのアプリケーション（以下、「開発ツール」ともいう。）がある。設計者は、開発ツール上でプログラムを記述することで、制御対象の駆動機器に合わせた任意のユーザプログラムを開発することができる。
【０００４】
ユーザプログラムの開発ツールに関し、特開２０１１−１９２０８８号公報（特許文献１）は、「名前空間の概念を知らない又は不慣れなプログラマーであっても、特に名前空間の概念を意識すること無く、名前空間方式による「語」のグルーピングを使用してユーザプログラムを容易に作成可能とする」ための開発支援装置を開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１９２０８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年、複数のネットワークに接続することが可能なコントローラが普及している。コントローラに通信接続される外部機器は、ユーザプログラムの実行中に、当該ユーザプログラムに含まれる変数にアクセスすることで、コントローラの状態や制御対象の駆動機器の状態を監視することができる。
【０００７】
セキュリティのために、外部機器に公開する変数（以下、「公開変数」ともいう。）と外部機器に公開しない変数（以下、「非公開変数」ともいう。）とを予め設定しておく必要がある。しかしながら、ユーザプログラムに含まれる変数の数は膨大であるため、各変数に対して公開変数／非公開変数を指定することは大変な手間となる。
【０００８】
本開示は上述のような問題点を解決するためになされたものであって、ある局面における目的は、外部機器への変数の公開設定をより容易に行うことが可能な技術を提供することである。
【課題を解決するための手段】
【０００９】
本開示の一例では、制御システムは、開発支援装置と、上記開発支援装置と通信可能に構成されているコントローラとを備える。上記開発支援装置には、上記コントローラを制御するユーザプログラムを開発するための開発ツールがインストールされ得る。上記ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属する。上記開発ツールは、上記名前空間に属する変数を上記コントローラに通信接続される外部機器に公開するか否かを判断するための公開設定を上記名前空間について受け付けるように構成されている。上記コントローラは、上記開発支援装置から受信した上記ユーザプログラムに従って制御対象の駆動機器を制御し、当該ユーザプログラムの実行結果に従って上記名前空間に属する変数を更新するためのプログラム実行部と、上記開発支援装置から受信した上記公開設定が公開を示す場合、上記名前空間に属する変数を上記外部機器に公開するための公開設定部とを含む。
【００１０】
この開示によれば、外部機器への変数の公開設定がユーザプログラムに含まれる名前空間ごとに行われ、各変数を公開するか否かが、名前空間に設定された公開設定に基づいて判断される。これにより、設計者は、公開変数を各変数に個々に設定する必要がなくなる。結果として、外部機器に対する変数の公開設定がより容易になる。
【００１１】
本開示の一例では、上記名前空間に属する各変数について上記公開設定を設定可能に構成されている。名前空間用の上記公開設定を初期値として変数用の上記公開設定に反映する。
【００１２】
この開示によれば、名前空間に設定された公開設定が各変数の公開設定に初期値として反映されることで、設計者は、各変数に対する公開設定の手間を省くことができる。また、設計者は、各変数の公開設定を個別に変更することができる。その結果、設計者は、各変数に対する公開設定の時間を短縮できるだけでなく、個別の事情に合わせて各変数に対する公開／非公開を柔軟に設定することができる。
【００１３】
本開示の一例では、上記公開設定部は、名前空間用の上記公開設定よりも変数用の上記公開設定を優先して、上記名前空間に属する変数を上記外部機器に公開するか否かを判断する。
【００１４】
この開示によれば、名前空間に設定された公開設定よりも各変数に個別に設定された公開設定の方が設計者の意思が反映されている可能性が高いため、変数用の公開設定を名前空間用の公開設定よりも優先することで、設計者の意思がより確実に反映される。
【００１５】
本開示の一例では、上記公開設定は、通信プロトコルを示す通信設定をさらに含む。上記公開設定部は、上記通信設定によって示される通信プロトコルで上記コントローラと上記外部機器とが通信する場合、上記名前空間に属する変数を上記外部機器に公開する。
【００１６】
この開示によれば、コントローラは、公開する変数と非公開にする変数とを通信プロトコルに応じて分けることができる。
【００１７】
本開示の一例では、上記開発支援装置は、揮発性の記憶装置と、不揮発性の記憶装置とをさらに備える。上記公開設定は、上記名前空間に属する変数を保持するか否かを示す保持設定を含む。上記公開設定部は、上記保持設定が保持を示す場合、上記名前空間に属する変数を上記不揮発性の記憶装置に記憶し、上記保持設定が非保持を示す場合、上記名前空間に属する変数を上記揮発性の記憶装置に記憶する。
【００１８】
この開示によれば、コントローラは、揮発性の記憶装置に保持する変数と、不揮発性の記憶装置に保持する変数とを利用態様に応じて使い分けることができる。
【００１９】
本開示の他の例では、ユーザプログラムに規定される制御命令に従って制御対象の駆動機器を制御するコントローラと通信可能に構成されている開発支援装置は、上記コントローラと通信するための通信インターフェイスと、上記ユーザプログラムを開発するための開発ツールを提供する開発プログラムを格納する記憶装置とを備える。上記ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属する。上記開発ツールは、上記名前空間に属する変数を上記コントローラに通信接続される外部機器に公開するか否かを上記コントローラに判断させるための公開設定を上記名前空間について受け付けるように構成されている。上記通信インターフェイスは、上記開発ツールが上記ユーザプログラムの転送操作を受け付けたことに基づいて、上記ユーザプログラムと上記公開設定とを上記コントローラに転送する。
【００２０】
この開示によれば、外部機器への変数の公開設定がユーザプログラムに含まれる名前空間ごとに行われ、各変数を公開するか否かが、名前空間に設定された公開設定に基づいて判断される。これにより、設計者は、公開変数を各変数に個々に設定する必要がなくなる。結果として、外部機器に対する変数の公開設定がより容易になる。
【００２１】
本開示の他の例では、ユーザプログラムに規定される制御命令に従って制御対象の駆動機器を制御するコントローラと通信可能に構成されている開発支援装置に実行される開発支援プログラムは、上記開発支援装置に、上記ユーザプログラムを開発するための開発ツールを起動するステップを実行させる。上記ユーザプログラムに含まれる変数の少なくとも一部は、予め定められた名前空間に属する。上記開発支援プログラムは、上記開発支援装置に、さらに、上記名前空間に属する変数を上記コントローラに通信接続される外部機器に公開するか否かを上記コントローラに判断させるための公開設定を上記名前空間に対して受け付けるステップと、上記開発ツールが上記ユーザプログラムの転送操作を受け付けたことに基づいて、上記ユーザプログラムと上記公開設定とを上記コントローラに転送するステップとを実行させる。
【００２２】
この開示によれば、外部機器への変数の公開設定がユーザプログラムに含まれる名前空間ごとに行われ、各変数を公開するか否かが、名前空間に設定された公開設定に基づいて判断される。これにより、設計者は、公開変数を各変数に個々に設定する必要がなくなる。結果として、外部機器に対する変数の公開設定がより容易になる。
【発明の効果】
【００２３】
ある局面において、外部機器への変数の公開設定をより容易に行うことができる。
【図面の簡単な説明】
【００２４】
【図１】実施の形態に従う制御システムの構成例を示す図である。
【図２】開発支援装置とコントローラと駆動機器と外部機器との間のデータの流れを示すシーケンス図である。
【図３】開発ツールが提供するユーザインターフェイスの一例である設計画面を示す図である。
【図４】開発ツールが提供するユーザインターフェイスの一例である公開設定画面を示す図である。
【図５】公開設定情報のデータ構造の一例を示す図である。
【図６】外部機器が提供するユーザインターフェイスの一例である変数監視画面を示す図である。
【図７】変形例に従う公開設定情報のデータ構造の一例を示す図である。
【図８】開発ツールが提供するユーザインターフェイスの他の例である公開設定画面を示す図である。
【図９】開発ツールが提供するユーザインターフェイスの他の例である公開設定画面を示す図である。
【図１０】検索キーとして名前空間を入力した場合における検索画面の画面遷移を示す図である。
【図１１】検索キーとして通信プロトコルを入力した場合における検索画面の画面遷移を示す図である。
【図１２】実施の形態に従う開発支援装置のハードウェア構成を示す模式図である。
【図１３】実施の形態に従うコントローラのハードウェア構成の一例を示す模式図である。
【図１４】実施の形態に従う外部機器のハードウェア構成を示すブロック図である。
【図１５】実施の形態に従うコントローラの機能構成の一例を示す図である。
【図１６】実施の形態に従う開発支援装置が実行する処理の一部を表わすフローチャートである。
【図１７】実施の形態に従うコントローラが実行する処理の一部を表わすフローチャートである。
【発明を実施するための形態】
【００２５】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【００２６】
＜Ａ．適用例＞
図１を参照して、本発明の適用例について説明する。図１は、制御システム１の構成例を示す図である。
【００２７】
制御システム１は、生産工程を自動化するためのＦＡシステムである。図１の例では、制御システム１は、１つ以上の開発支援装置１００と、１つ以上のコントローラ２００と、１つ以上の駆動機器３００と、１つ以上の外部機器４００とで構成されている。
【００２８】
開発支援装置１００、コントローラ２００、および外部機器４００は、ネットワークＮＷ１に接続されている。ネットワークＮＷ１には、ＥｔｈｅｒＮＥＴ（登録商標）やＯＰＣ−ＵＡ（Object Linking and Embedding for Process Control Unified Architecture）などが採用される。ＯＰＣ−ＵＡは、ベンダーやＯＳ（Operating System）の種類などに依存することなくデータ交換を実現するために定められた通信の標準規格である。ＯＰＣ−ＵＡに対応したコントローラ２００が用いられることで、外部機器４００は、コントローラ２００内で管理されるデータ（変数）に容易にアクセスすることができる。
【００２９】
開発支援装置１００は、たとえば、ノート型またはデスクトップ型のＰＣ（Personal Computer）、タブレット端末、スマートフォン、または、コントローラ２００用の制御プログラムを開発することが可能なその他の情報処理装置である。外部機器４００は、たとえば、ＨＭＩ（Human Machine Interface）、ノート型またはデスクトップ型のＰＣ、サーバ、タブレット端末、スマートフォン、または、その他の表示機器である。
【００３０】
コントローラ２００および駆動機器３００は、ネットワークＮＷ２に接続されている。ネットワークＮＷ２には、データの到達時間が保証される、定周期通信を行うフィールドネットワークを採用することが好ましい。このような定周期通信を行うフィールドネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００３１】
駆動機器３００は、生産工程を自動化するための種々の産業用機器を含む。一例として、駆動機器３００は、ロボットコントローラ３００Ａや、サーボドライバ３００Ｂや、ロボットコントローラ３００Ａに制御されるアームロボット３０１Ａや、サーボドライバ３００Ｂによって制御されるサーボモータ３０１Ｂなどを含む。また、駆動機器３００は、ワークを撮影するための視覚センサや、生産工程で利用されるその他の機器などを含んでもよい。
【００３２】
開発支援装置１００には、開発ツール３０がインストールされ得る。開発ツール３０は、コントローラ２００用の制御プログラムの開発を支援するためのアプリケーションである。一例として、開発ツール３０は、オムロン社製の「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」である。設計者は、開発ツール３０上でコントローラ２００用の制御プログラムを設計し、設計した制御プログラムをユーザプログラム２１０としてコントローラ２００にインストールすることができる。典型的には、ユーザプログラム２１０は、開発支援装置１００によってコンパイルされた実行形式のファイルとしてコントローラ２００に送られる。
【００３３】
設計者は、ユーザプログラム２１０に対して開発ツール３０上で任意の名前空間や変数を規定することができる。ユーザプログラム２１０に含まれる変数の少なくとも一部は、予め定められた名前空間に属する。
【００３４】
「変数」とは、ユーザプログラム２１０のソースコードにおいて扱われるデータに与えられた識別子である。典型的には、「変数」は、コントローラ２００や駆動機器３００の状態を表わすデータである。異なる言い方をすれば、「変数」とは、コントローラ２００や駆動機器３００の各構成の状態に連動して値が変化するデータのことをいう。「変数」は、一つの値を表わすデータ、配列として表されるデータ、構造体として表されるデータ、ユーザプログラム２１０に規定され得る種々のデータを含み得る。
【００３５】
「名前空間」とは、変数の集合の範囲を決めるための抽象概念である。すなわち、「名前空間」は、１つ以上の変数を含む。設計者は、自身で定義した名前空間上に変数を定義する。異なる名前空間で定義された同一名の変数は、異なる変数として扱われる。これにより、変数名が衝突する可能性が低くなる。
【００３６】
本実施の形態においては、ユーザプログラム２１０の開発ツール３０は、ユーザプログラム２１０に含まれる変数を外部機器４００に公開するか否かについてコントローラ２００に判断させるための公開設定（属性）を名前空間に対して設定可能に構成されている。すなわち、開発ツール３０は、ユーザプログラム２１０に規定される各名前空間に対して、当該名前空間に属する変数を公開するか否かを一括で設定可能に構成されている。「公開する」とは、外部機器４００からアクセス可能な状態にすることをいう。一方で、「公開しない」または「非公開にする」とは、外部機器４００からアクセス不可能な状態にすることをいう。
【００３７】
設定された公開設定は、公開設定情報２１２として、ユーザプログラム２１０とともにコントローラ２００にダウンロードされる。なお、図１の例では、ユーザプログラム２１０および公開設定情報２１２が別個のデータとしてコントローラ２００にダウンロードされている例が示されているが、これらは、一体的なデータとしてダウンロードされてもよい。
【００３８】
コントローラ２００は、制御装置２０２と、記憶装置２０８とを含む。制御装置２０２は、機能構成として、公開設定部２５０と、プログラム実行部２５２とを含む。記憶装置２０８には、開発支援装置１００からダウンロードしたユーザプログラム２１０と公開設定情報２１２とが格納されている。
【００３９】
プログラム実行部２５２は、ユーザプログラム２１０の実行開始命令を受け付けたことに基づいて、ユーザプログラム２１０の実行を開始する。その後、プログラム実行部２５２は、ユーザプログラム２１０に規定される制御命令に従って駆動機器３００を制御する。このとき、プログラム実行部２５２は、ユーザプログラム２１０の実行結果に従って変数の値を逐次更新する。
【００４０】
公開設定部２５０は、開発支援装置１００から受信した公開設定情報２１２に基づいて、各変数の公開または非公開を設定する。上述のように、公開設定情報２１２は、公開／非公開を判断するための公開設定を各名前空間について規定している。公開設定部２５０は、公開設定が公開を示す名前空間については、当該名前空間に属する変数を外部機器４００からアクセス可能にする。一方で、公開設定部２５０は、公開設定が非公開を示す名前空間については、当該名前空間に属する変数については外部機器４００からアクセス不可能にする。
【００４１】
以上のようにして、設計者は、名前空間に対して変数の公開／非公開を設定できる。コントローラ２００は、公開が設定された名前空間に属する変数を一括で公開し、非公開が設定された名前空間に属する変数を公開しない。これにより、設計者は、ユーザプログラム２１０に含まれる各変数について公開／非公開を個々に設定する必要がなくなる。その結果、外部機器４００に対する変数の公開設定がより容易になり、開発工数が従来よりも削減される。
【００４２】
また、名前空間は、通常、設計者によって意味のある集合ごとに分けられたものである。そのため、設計者は、名前空間に対して変数の公開／非公開を設定することで、意味のある集合ごとに変数の公開／非公開を一括で設定できるようになる。たとえば、名前空間がコントローラ名や駆動機器名ごとに定義されている場合、設計者は、コントローラ単位で関連する変数群や駆動機器単位で関連する変数群について変数の公開／非公開を一括で設定できるようになる。
【００４３】
＜Ｂ．シーケンスフロー＞
図２〜図６を参照して、上述の公開変数／非公開変数の設定処理に関する処理フローについて説明する。図２は、開発支援装置１００とコントローラ２００と駆動機器３００と外部機器４００との間のデータの流れを示すシーケンス図である。
【００４４】
ステップＳ１０において、開発支援装置１００は、開発ツール３０の起動命令を受け付けたとする。このことに基づいて、開発支援装置１００は、ユーザプログラム２１０の設計画面を表示する。図３は、開発ツール３０が提供するユーザインターフェイスの一例である設計画面３１を示す図である。設計画面３１は、たとえば、開発支援装置１００の表示部１２１に表示される。
【００４５】
ユーザプログラム２１０は、任意のプログラミング言語で記述され得る。一例として、ユーザプログラム２１０は、ラダーダイアグラム（ＬＤ：Ladder Diagram）で規定されてもよいし、命令リスト（ＩＬ：Instruction List）、構造化テキスト（ＳＴ：Structured Text）、および、シーケンシャルファンクションチャート（ＳＦＣ：Sequential Function Chart）のいずれか、あるいは、これらの組み合わせで規定される。あるいは、ユーザプログラム２１０は、ＪａｖａＳｃｒｉｐｔ（登録商標）やＣ言語のような汎用的なプログラミング言語で規定されていてもよい。
【００４６】
図３の例では、ユーザプログラム２１０は、ラダーダイアグラムで記述されている。設計者は、設計画面３１上で、任意のファンクションブロックを組み合わせたり、変数やファンクションブロックの入出力関係を規定することで、制御対象の駆動機器３００に合わせたユーザプログラム２１０を設計することができる。ファンクションブロックとは、ユーザプログラム２１０内で繰り返し使用される機能が部品化されたものである。
【００４７】
図３の例では、ユーザプログラム２１０は、変数Ａ１〜Ａ３，ファンクションブロックＦＢ１，ＦＢ２を含む。ファンクションブロックＦＡ１は、その入力部に関連付けられている変数Ａ１の値に基づいて、自身の機能を実行する。当該実行結果は、ファンクションブロックＦＡ１の出力部に関連付けられている変数Ａ２に反映される。ファンクションブロックＦＢ２は、その入力部に関連付けられている変数Ａ２の値に基づいて、自身の機能を実行する。当該実行結果は、ファンクションブロックＦＡ２の出力部に関連付けられている変数Ａ３に反映される。このように、設計者は、設計画面３１上で、変数やファンクションブロックを組み合わせることで、任意のユーザプログラム２１０を設計することができる。
【００４８】
再び図２を参照して、ステップＳ１４において、開発ツール３０は、公開設定画面の呼び出し操作を受け付けたとする。このことに基づいて、開発ツール３０は、公開設定画面を表示する。
【００４９】
図４は、開発ツール３０が提供するユーザインターフェイスの一例である公開設定画面３３を示す図である。公開設定画面３３は、ユーザプログラム２１０に規定される各名前空間について変数の公開に関する設定を受け付ける。
【００５０】
より具体的には、公開設定画面３３は、名前空間の表示欄４１と、公開設定の設定欄５０とを含む。公開設定の設定欄５０は、公開範囲の設定を受け付ける設定欄５１と、公開先によるアクセス権限の設定を受け付ける設定欄５３とを含む。
【００５１】
表示欄４１には、ユーザプログラム２１０に規定される名前空間が一覧で表示される。表示欄４１に表示される名前空間は、開発ツール３０の設定情報から自動で抽出されてもよいし、ユーザによって編集されてもよい。
【００５２】
設定欄５１は、変数の公開範囲の設定を受け付ける。変数の公開範囲の設定は、たとえば、通信プロトコルで指定される。一例として、設定欄５１には、各名前空間に対応させてプルダウンメニューが並べて表示される。設計者が当該プルダウンメニューを押下することで、通信プロトコルの選択肢が一覧で表示される。一例として、当該選択肢は、「公開」、「非公開」、「ＥＩＰ（EtherNet/IP）」、および「ＯＰＣ−ＵＡ」を含む。設計者は、表示された選択肢の中から一の選択肢を選択することができる。
【００５３】
「公開」が選択された場合、選択対象の名前空間に含まれる変数は、通信プロトコルに依存せずに任意の外部機器４００に公開される。「非公開」が選択された場合、選択対象の名前空間に含まれる変数は、外部機器４００に公開されない。「ＥＩＰ」が選択された場合、選択対象の名前空間に含まれる変数は、ＥｔｈｅｒＮｅｔ／ＩＰで通信を実現する外部機器４００のみに公開される。「ＯＰＣ−ＵＡ」が選択された場合、選択対象の名前空間に含まれる変数は、ＯＰＣ−ＵＡで通信を実現する通信ネットワークに接続される外部機器４００のみに公開される。
【００５４】
このように、設定可能な公開設定は、通信プロトコルを指定するための通信設定を含む。コントローラ２００と外部機器４００との通信が設定された通信プロトコルで行われている場合、コントローラ２００の公開設定部２５０は、設定対象の名前空間に属する変数を外部機器４００に公開する。これにより、コントローラ２００は、公開変数および非公開変数を通信プロトコルに応じて分けることができる。通信プロトコルの種類は、たとえば、通信パケットに含まれる情報などに基づいて判断される。
【００５５】
設定欄５３は、変数の公開先によるアクセス権限の設定を受け付ける。一例として、設定欄５３には、各名前空間に対応させてプルダウンメニューが並べて表示される。設計者が当該プルダウンメニューを押下することで、アクセス権限に関する選択肢が一覧で表示される。一例として、当該選択肢は、「Ｒ／Ｗ」、「Ｒ」、「Ｗ」、および「−」を含む。
【００５６】
「Ｒ／Ｗ」が選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について読み書き可能なアクセス権限を公開先の外部機器４００に与える。「Ｒ」が選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について読み取りのみ可能なアクセス権限を公開先の外部機器４００に与える。「Ｗ」が選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について書き込みのみ可能なアクセス権限を公開先の外部機器４００に与える。「−」が選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について、読み書きが不可能なアクセス権限を公開先の外部機器４００に与える。
【００５７】
なお、公開設定は、必ずしも公開設定画面３３で行われる必要はない。たとえば、公開設定は、開発ツール３０によって提供されるいずれかの画面で設定されてもよい。一例として、開発ツール３０によって提供されるいずれかの画面（たとえば、設計画面３１など）において名前空間が一覧で表示されているとする。設計者が名前空間の一覧に対していずれかの名前空間を選択したことに基づいて、選択された名前空間に対する公開設定をするための画面が表示されてもよい。
【００５８】
公開設定画面３３の保存ボタン５８が押下された場合には、開発支援装置１００は、公開設定画面３３に設定された公開設定を公開設定情報２１２として保存する。公開設定画面３３のキャンセルボタン５９が押下された場合には、開発支援装置１００は、公開設定画面３３に設定された公開設定を保存せずに公開設定画面３３を閉じる。
【００５９】
図５は、保存された公開設定情報２１２のデータ構造の一例を示す図である。図５に示されるように、公開設定情報２１２は、ユーザプログラム２１０に規定される各名前空間について変数と公開設定とを対応付ける。一例として、「Ｒｏｏｔ」には、ユーザプログラム２１０に規定される複数の名前空間が対応付けられている。「名前Ａ」で示される名前空間には「変数Ａ１」〜「変数Ａ３」が対応付けられている。図５に示される「変数Ａ１」〜「変数Ａ３」は、図３に示される「変数Ａ１」〜「変数Ａ３」に相当する。また、図５の例では、「名前Ａ」で示される名前空間に「公開設定Ａ」が対応付けられている。当該「公開設定Ａ」は、公開設定画面３３の設定欄５０（図４参照）において「名前Ａ」の名前空間に対して設定された内容に相当する。
【００６０】
再び図２を参照して、ステップＳ２０において、開発ツール３０は、コンパイル操作を受け付けたとする。このことに基づいて、開発ツール３０は、ステップＳ１４で設計画面３１上で設計されたユーザプログラム２１０をコンパイルする。その後、開発ツール３０は、コンパイル結果をコントローラ２００に転送するためのダウンロード操作を受け付けたとする。このことに基づいて、開発ツール３０は、コンパイルされたユーザプログラム２１０とともに、ステップＳ１４で生成された公開設定情報２１２をコントローラ２００に転送する。コントローラ２００は、受信したユーザプログラム２１０と公開設定情報２１２とを記憶装置２０８（図１参照）に保存する。
【００６１】
ステップＳ２２において、コントローラ２００は、ユーザプログラム２１０の実行命令を受け付けたとする。このことに基づいて、コントローラ２００は、ユーザプログラム２１０の実行を開始する。ユーザプログラム２１０がサイクリック実行型のプログラムである場合、コントローラ２００は、予め定められた制御周期ごとにユーザプログラム２１０に含まれる命令群を繰り返し実行する。より具体的には、コントローラ２００は、ユーザプログラム２１０の先頭行から最終行までを１制御周期で実行する。その次の制御周期では、コントローラ２００は、再び、ユーザプログラム２１０の先頭行から最終行までを実行する。コントローラ２００は、制御周期ごとに指令値を生成し、当該指令値を駆動機器３００に出力する。
【００６２】
ステップＳ３０において、コントローラ２００は、ユーザプログラム２１０の実行中において、内部変数に対するアクセス要求を外部機器４００から受信したとする。
【００６３】
ステップＳ３２において、コントローラ２００は、上述の公開設定情報２１２（図５参照）を参照して、アクセス要求を受けた変数の公開が許可されているか否かを判断する。より具体的には、コントローラ２００は、公開範囲条件、公開先条件、およびアクセス権限条件を満たした場合に、アクセス対象の変数の公開が許可されていると判断する。
【００６４】
より具体的には、公開範囲条件は、下記（ａ１）〜（ａ３）のいずれかの場合に満たされる。
【００６５】
（ａ１）アクセス対象の変数が属する名前空間について「公開」が指定されている場合。
【００６６】
（ａ２）アクセス対象の変数が属する名前空間について「ＥＩＰ」が指定されている場合には、アクセス要求元の外部機器４００との通信がＥｔｈｅｒＮｅｔ／ＩＰで実現されているとき。
【００６７】
（ａ３）アクセス対象の変数が属する名前空間について「ＯＰＣ−ＵＡ」が指定されている場合には、アクセス要求元の外部機器４００との通信がＯＰＣ−ＵＡで実現されているとき。
【００６８】
上記アクセス権限条件は、下記（ｂ１）〜（ｂ２）のいずれかの場合に満たされる。
（ｂ１）アクセス要求が「Ｒｅａｄ」要求である場合には、アクセス対象の変数が属する名前空間について設定されたアクセス権限が「Ｒ」または「Ｒ／Ｗ」に設定されているとき。
【００６９】
（ｂ２）アクセス要求が「Ｗｒｉｔｅ」要求である場合には、アクセス対象の変数が属する名前空間について設定されたアクセス権限が「Ｗ」または「Ｒ／Ｗ」に設定されているとき。
【００７０】
コントローラ２００は、アクセス要求を受けた変数の公開が許可されていると判断した場合（ステップＳ３２においてＹＥＳ）、ステップＳ３４の処理を実行する。そうでない場合には（ステップＳ３２においてＮＯ）、コントローラ２００は、ステップＳ３４の処理を実行しない。
【００７１】
ステップＳ３４において、アクセス要求が「Ｒｅａｄ」要求である場合、コントローラ２００は、アクセス対象の変数を外部機器４００に送信する。アクセス要求が「Ｗｒｉｔｅ」である場合、コントローラ２００は、アクセス対象の変数を指定された変数に書き換え、当該書き換えた結果を外部機器４００に送信する。
【００７２】
ステップＳ３６において、外部機器４００は、駆動機器３００から受信した変数を変数監視画面に反映する。図６は、外部機器４００が提供するユーザインターフェイスの一例である変数監視画面４４０を示す図である。変数監視画面４４０は、たとえば、外部機器４００の表示部４２０に表示される。
【００７３】
図６の例では、外部機器４００は、オブジェクトＯＢ１〜ＯＢ４を含む。オブジェクトＯＢ１〜ＯＢ４は、それぞれ、いずれかの変数に関連付けられており、変数の値をグラフィカルに表わす。
【００７４】
オブジェクトＯＢ１は、たとえば、タコメータを表わす画像である。オブジェクトＯＢ１は、駆動機器Ａのバルブ圧力値を表わす変数に関連付けられており、オブジェクトＯＢ１のメータは、当該変数の値に応じて逐次更新される。
【００７５】
オブジェクトＯＢ２は、たとえば、タコメータを表わす画像である。オブジェクトＯＢ２は、駆動機器Ｂのバルブ圧力値を表わす変数に関連付けられており、オブジェクトＯＢ２のメータは、当該変数の値に応じて逐次更新される。
【００７６】
オブジェクトＯＢ３は、たとえば、サーモメータを表わす画像である。オブジェクトＯＢ３は、駆動機器Ａの温度を表わす変数に関連付けられており、オブジェクトＯＢ３のメータは、当該変数の値に応じて逐次更新される。
【００７７】
オブジェクトＯＢ４は、たとえば、サーモメータを表わす画像である。オブジェクトＯＢ４は、駆動機器Ｂの温度を表わす変数に関連付けられており、オブジェクトＯＢ４のメータは、当該変数の値に応じて逐次更新される。
【００７８】
＜Ｃ．公開設定情報の変形例＞
図７を参照して、図５で説明した公開設定情報２１２の変形例について説明する。図７は、変形例に従う公開設定情報２１２Ａのデータ構造の一例を示す図である。
【００７９】
上述の公開設定情報２１２においては、名前空間に対して公開設定が関連付けられていた。これに対して、変形例に従う公開設定情報２１２Ａにおいては、公開設定が、名前空間だけでなく、各変数にも関連付けられる。変数に対する公開設定は、たとえば、上述の開発ツール３０の公開設定画面３３で設定され得る。すなわち、公開設定画面３３は、名前空間に対する公開設定を受け付けるだけでなく、各名前空間に属する各変数に対しても公開設定を受け付けるように構成されている。
【００８０】
典型的には、変数に設定され得る公開設定の内容は、名前空間に設定され得る公開設定の内容と同じである。一例として、変数用の公開設定は、許可対象の通信プロトコルを指定するための通信設定を含む。他にも、変数用の公開設定は、公開先を指定するための公開先設定を含む。他にも、変数用の公開設定は、公開先の外部機器４００によるアクセス権限設定を含む。
【００８１】
好ましくは、開発ツール３０は、名前空間用の公開設定を、初期値として変数用の公開設定に反映する。より具体的には、開発ツール３０は、名前空間用の公開設定が設定されたことに基づいて、当該名前空間に属する各変数に関連付けられている各公開設定に名前空間用の公開設定を継承する。図７の例では、「名前空間Ａ」について設定された「公開設定Ａ」が、「名前空間Ａ」に属する「変数Ａ１」，「変数Ａ２」に継承されている。これにより、変数用の公開設定が容易になる。
【００８２】
設計者は、公開設定画面３３上において、継承した各公開設定を個別に変更することができる。図７の例では、「変数Ａ２」に対する公開設定が「公開設定Ａ」から「公開設定Ｂ」に変更されている。これにより、設計者は、各変数に対する公開設定の時間を短縮できるだけでなく、個別の事情に合わせて各変数に対する公開／非公開の設定を柔軟に切り替えることができる。
【００８３】
好ましくは、コントローラ２００の公開設定部２５０（図１参照）は、変数用の公開設定を名前空間用の公開設定よりも優先して、当該名前空間に属する変数を外部機器４００に公開するか否かを判断する。すなわち、変数用の公開設定が設定されている場合には、公開設定部２５０は、名前空間用の公開設定は無視して、変数用の公開設定に基づいて、対象の変数を公開するか否かを判断する。図７の例では、公開設定部２５０は、「変数Ａ１」については「公開設定Ａ」に基づいて公開／非公開を判断し、「変数Ａ２」については「公開設定Ｂ」に基づいて公開／非公開を判断する。
【００８４】
典型的には、名前空間に公開設定を行った後に、変数に対して個別に公開設定を行うような使用態様が想定され得る。そのため、名前空間に設定された公開設定よりも各変数に個別に設定された公開設定の方が設計者の意思が反映されている可能性が高い。変数用の公開設定を名前空間用の公開設定よりも優先することで、設計者の意思がより確実に反映される。
【００８５】
なお、上述では、名前空間に設定された公開設定が、当該名前空間に属する変数に継承される例について説明を行ったが、上位の名前空間に設定された公開設定が、下位の名前空間に継承されてもよい。より具体的には、設計者は、開発ツール３０において、名前空間を階層的に定義することができる。上位の名前空間は、１つ以上の下位の名前空間を包含し得る。このような場合、開発ツール３０は、上位の名前空間に対する公開設定を下位の名前空間に継承する。一方で、開発ツール３０は、下位の名前空間に対する公開設定については上位の名前空間に継承しない。
【００８６】
＜Ｄ．公開設定画面３３の変形例１＞
図４で説明した公開設定画面３３においては公開設定がプルダウンメニューで設定されていたが、公開設定は、その他の方法で設定されてもよい。以下では、図８を参照して、図４に示される公開設定画面３３の変形例について説明する。
【００８７】
図８は、開発ツール３０が提供するユーザインターフェイスの他の例である公開設定画面３３Ａを示す図である。公開設定画面３３Ａは、上述の図４で説明した公開設定画面３３の変形例である。
【００８８】
図８に示されるように、公開設定画面３３Ａは、名前空間の表示欄４１と、公開設定の設定欄５０Ａとを含む。公開設定の設定欄５０Ａは、通信プロトコルの設定を受け付ける設定欄６１Ａ，６１Ｂと、公開先によるアクセス権限の設定を受け付ける設定欄６３Ａ，６３Ｂとを含む。
【００８９】
表示欄４１には、ユーザプログラム２１０に規定される名前空間が一覧で表示される。表示欄４１に表示される名前空間は、開発ツール３０の設定情報から自動で抽出されてもよいし、ユーザによって編集されてもよい。
【００９０】
設定欄６１Ａ，６１Ｂは、通信プロトコルに関する設定を受け付ける。一例として、設定欄６１Ａ，６１Ｂには、各名前空間に対応させてチェックボックスが並べて表示される。当該チェックボックスは、コントローラ２００が対応している通信プロトコルの数に合わせて設けられる。図８の例では、選択可能な通信プロトコルとして、「ＥＩＰ」および「ＯＰＣ−ＵＡ」が示されている。
【００９１】
「ＥＩＰ」のチェックボックスが選択された場合、対応する名前空間に含まれる変数は、ＥｔｈｅｒＮｅｔ／ＩＰで通信を行う外部機器４００に公開される。「ＯＰＣ−ＵＡ」のチェックボックスが選択された場合、対応する名前空間に含まれる変数は、ＯＰＣ−ＵＡで通信を行う外部機器４００に公開される。いずれのチェックボックスも選択されなかった場合には、対応する名前空間に含まれる変数は、外部機器４００に公開されない。
【００９２】
設定欄６３Ａ，６３Ｂは、変数の公開先によるアクセス権限の設定を受け付ける。一例として、設定欄６３Ａ，６３Ｂには、各名前空間に対応させてチェックボックスが並べて表示される。当該チェックボックスは、アクセス権限の種類の数に合わせて設けられる。図８の例では、選択可能なアクセス権限として、「Ｒ」および「Ｗ」が示されている。
【００９３】
「Ｒ」および「Ｗ」の両方が選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について読み書きが可能なアクセス権限を公開先の外部機器４００に与える。「Ｒ」のみが選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について読み取りのみ可能なアクセス権限を公開先の外部機器４００に与える。「Ｗ」のみが選択された場合、開発ツール３０は、選択対象の名前空間に含まれる変数について書き込みのみ可能なアクセス権限を公開先の外部機器４００に与える。「Ｒ」および「Ｗ」の両方が選択されなかった場合、開発ツール３０は、選択対象の名前空間に含まれる変数について、読み書きが不可能なアクセス権限を公開先の外部機器４００に与える。
【００９４】
公開設定画面３３Ａの保存ボタン５８が押下された場合には、開発支援装置１００は、公開設定画面３３Ａに設定された公開設定を公開設定情報２１２として保存する。公開設定画面３３Ａのキャンセルボタン５９が押下された場合には、開発支援装置１００は、公開設定画面３３Ａに設定された公開設定を保存せずに公開設定画面３３Ａを閉じる。
【００９５】
＜Ｅ．公開設定画面３３の変形例２＞
図９を参照して、図４で説明した公開設定画面３３の他の変形例について説明する。図９は、開発ツール３０が提供するユーザインターフェイスの他の例である公開設定画面３３Ｂを示す図である。公開設定画面３３Ｂは、上述の図４で説明した公開設定画面３３の変形例である。
【００９６】
公開設定画面３３Ｂにおける公開設定の設定欄５０は、変数の保持／非保持の設定欄５６をさらに含む点で、図４に示される公開設定画面３３と異なる。その他の点については図４で説明した通りであるので、以下ではそれらの説明については繰り返さない。
【００９７】
設定欄５６は、各名前空間に対して変数の保持／非保持の設定を受け付ける。一例として、設定欄５６には、各名前空間に対応させてチェックボックスが並べて表示される。設定欄５６において選択された名前空間に属する変数は、開発支援装置１００内の不揮発性の記憶装置（たとえば、後述の記憶装置１１０）に記憶される。すなわち、当該変数については、開発支援装置１００の電源がオフされた場合であっても、変数の値が保持される。一方で、設定欄５６において非選択の名前空間に属する変数は、開発支援装置１００内の揮発性の記憶装置（たとえば、後述の主メモリ１０４）に記憶される。すなわち、当該変数については、開発支援装置１００の電源がオフされた場合に、変数の値が保持されない。
【００９８】
＜Ｆ．変数検索画面＞
図１０および図１１を参照して、公開設定の内容を検索キーとする変数の検索機能について説明する。図１０は、検索キーとして名前空間を入力した場合における検索画面３５の画面遷移を示す図である。図１１は、検索キーとして通信プロトコルを入力した場合における検索画面３５の画面遷移を示す図である。
【００９９】
検索画面３５は、名前空間を検索キーとして受け付ける入力部７１と、変数名を検索キーとして受け付ける入力部７２と、通信プロトコルを検索キーとして受け付ける入力部７３と、検索結果の表示領域７４とを含む。
【０１００】
開発支援装置１００は、入力部７１〜７３に検索キーが入力されたことに基づいて、上述の公開設定情報２１２（図５参照）を参照して、入力された検索キーに対応する変数を検索する。そして、開発支援装置１００は、検索結果として抽出された各変数と当該各変数に設定されている公開設定とを並べて表示する。これにより、設計者は、各変数に設定されている公開設定を容易に確認することができる。
【０１０１】
たとえば、図１０に示されるように、「名前Ａ」が入力部７１に入力されたとする。このことに基づいて、開発支援装置１００は、公開設定情報２１２（図５参照）を参照して、名前空間「名前Ａ」に属する変数を検索する。そして、開発支援装置１００は、検索結果として抽出された各変数と、各変数に設定されている公開設定とを並べて表示する。
【０１０２】
他の例として、図１１に示されるように、入力部７３に示される「ＥＩＰ」のチェックボックスが選択されたとする。このことに基づいて、開発支援装置１００は、公開設定情報２１２（図５参照）を参照して、公開設定に「ＥＩＰ」が設定されている変数を検索する。そして、開発支援装置１００は、検索結果として抽出された各変数と、当該各変数に設定されている公開設定とを並べて表示する。
【０１０３】
＜Ｇ．ハードウェア構成＞
図１２〜図１４を参照して、開発支援装置１００、コントローラ２００、および外部機器４００のハードウェア構成について順に説明する。
【０１０４】
（Ｇ１．開発支援装置１００のハードウェア構成）
まず、図１２を参照して、開発支援装置１００のハードウェア構成について説明する。図１２は、開発支援装置１００のハードウェア構成を示す模式図である。
【０１０５】
開発支援装置１００は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。開発支援装置１００は、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などの制御装置１０２と、揮発性の主メモリ１０４と、フラッシュメモリなどの不揮発性の記憶装置１１０と、通信インターフェイス１１１と、Ｉ／Ｏ（Input/Output）インターフェイス１１４と、表示インターフェイス１２０とを含む。これらのコンポーネントは、内部バス１２５を介して互いに通信可能に接続されている。
【０１０６】
制御装置１０２は、記憶装置１１０に格納されている開発支援プログラム１１０Ａを主メモリ１０４に展開して実行することで、開発ツール３０における各種処理を実現する。開発支援プログラム１１０Ａは、ユーザプログラム２１０の開発環境を提供するためのプログラムである。記憶装置１１０は、開発支援プログラム１１０Ａの他にも、開発ツール３０で生成された各種データなどを格納する。当該データは、たとえば、開発ツール３０上で設計されたユーザプログラム２１０や、上述の公開設定情報２１２などを含む。
【０１０７】
通信インターフェイス１１１は、他の通信機器との間でネットワークを介してデータを遣り取りする。当該他の通信機器は、たとえば、コントローラ２００、外部機器４００、サーバなどを含む。開発支援装置１００は、通信インターフェイス１１１を介して、当該他の通信機器から、開発支援プログラム１１０Ａなどの各種プログラムをダウンロード可能なように構成されてもよい。
【０１０８】
Ｉ／Ｏインターフェイス１１４は、操作部１１５に接続され、操作部１１５からのユーザ操作を示す信号を取り込む。操作部１１５は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。
【０１０９】
表示インターフェイス１２０は、表示部１２１と接続され、制御装置１０２などからの指令に従って、表示部１２１に対して、画像を表示するための画像信号を送出する。表示部１２１は、ＬＣＤ（Liquid Crystal Display）や有機ＥＬ（Electro Luminescence）ディスプレイなどからなり、ユーザに対して各種情報を提示する。表示部１２１には、開発ツール３０によって提供される各種画面が表示され得る。図１２の例では、開発支援装置１００および表示部１２１が別体として示されているが、開発支援装置１００および表示部１２１は、一体的に構成されてもよい。
【０１１０】
（Ｇ２．コントローラ２００のハードウェア構成）
次に、図１３を参照して、コントローラ２００のハードウェア構成について説明する。図１３は、コントローラ２００のハードウェア構成の一例を示す模式図である。
【０１１１】
コントローラ２００は、通信インターフェイス２０１と、ＣＰＵやＭＰＵなどの制御装置２０２と、チップセット２０４と、主メモリ２０６と、記憶装置２０８と、内部バスコントローラ２２２と、フィールドバスコントローラ２２４と、メモリカードインターフェイス２３９とを含む。
【０１１２】
制御装置２０２は、記憶装置２０８に格納された制御プログラム２１１を読み出して、主メモリ２０６に展開して実行することで、ロボットコントローラ３００Ａやサーボドライバ３００Ｂなどに対する任意の制御を実現する。制御プログラム２１１は、コントローラ２００を制御するための各種プログラムを含む。一例として、制御プログラム２１１は、システムプログラム２０９およびユーザプログラム２１０などを含む。システムプログラム２０９は、データの入出力処理や実行タイミング制御などの、コントローラ２００の基本的な機能を提供するための命令コードを含む。ユーザプログラム２１０は、開発支援装置１００からダウンロードされたものである。ユーザプログラム２１０は、制御対象に応じて任意に設計され、シーケンス制御を実行するためのシーケンスプログラム２１０Ａおよびモーション制御を実行するためのモーションプログラム２１０Ｂとを含む。
【０１１３】
チップセット２０４は、各コンポーネントを制御することで、コントローラ２００全体としての処理を実現する。
【０１１４】
内部バスコントローラ２２２は、コントローラ２００と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、Ｉ／Ｏユニット２２６が接続されている。
【０１１５】
フィールドバスコントローラ２２４は、コントローラ２００とフィールドバスを通じて連結される各種の駆動機器３００とデータを遣り取りするインターフェイスである。このようなデバイスの一例として、ロボットコントローラ３００Ａやサーボドライバ３００Ｂが接続されている。他にも、視覚センサなどの駆動機器が接続されてもよい。
【０１１６】
内部バスコントローラ２２２およびフィールドバスコントローラ２２４は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータを取得することができる。また、内部バスコントローラ２２２および／またはフィールドバスコントローラ２２４は、ロボットコントローラ３００Ａやサーボドライバ３００Ｂとの間でデータを遣り取りするためのインターフェイスとしても機能する。
【０１１７】
通信インターフェイス２０１は、各種の有線／無線ネットワークを通じたデータの遣り取りを制御する。コントローラ２００は、通信インターフェイス２０１を介して、開発支援装置１００や外部機器４００と通信を行う。
【０１１８】
メモリカードインターフェイス２３９は、外部記憶媒体の一例であるメモリカード２４０（たとえば、ＳＤカード）を着脱可能に構成されており、メモリカード２４０に対してデータを書き込み、メモリカード２４０からデータを読出すことが可能になっている。
【０１１９】
（Ｇ３．外部機器４００のハードウェア構成）
次に、図１４を参照して、外部機器４００のハードウェア構成について説明する。図１４は、外部機器４００のハードウェア構成を示すブロック図である。
【０１２０】
外部機器４００は、汎用的なアーキテクチャを有するハードウェア構成を有している。すなわち、外部機器４００は、一種のパーソナルコンピュータとして実装される。但し、外部機器４００を汎用的なハードウェアではなく、専用ハードウェアを用いて実装してもよい。
【０１２１】
より具体的には、外部機器４００は、ＣＰＵやＭＰＵなどの制御装置４０２と、主メモリ４０４と、フラッシュメモリなどの記憶装置４１０と、通信インターフェイス４１２と、Ｉ／Ｏインターフェイス４１４と、フィールドバスインターフェイス４１６と、表示部４２０とを含む。これらのコンポーネントは、内部バス４２５を介して、互いにデータ通信可能に接続されている。
【０１２２】
制御装置４０２は、記憶装置４１０に格納された制御プログラム（図示しない）を読み出して、主メモリ４０４に展開して実行することで、外部機器４００を制御する。すなわち、制御装置４０２は、主メモリ４０４および記憶装置４１０と連係することで、制御演算を実行する制御部を実現する。
【０１２３】
通信インターフェイス４１２、Ｉ／Ｏインターフェイス４１４、および、フィールドバスインターフェイス４１６は、外部機器４００と他の通信機器とのデータの遣り取りを仲介する。
【０１２４】
より具体的には、通信インターフェイス４１２は、ネットワークＮＷ１（図１参照）などを介した、コントローラ２００との通信を仲介する。通信インターフェイス４１２には、たとえば、ＥｔｈｅｒＮＥＴに従う通信が可能なコンポーネントが採用され得る。
【０１２５】
Ｉ／Ｏインターフェイス４１４は、各種のユーザインターフェイス装置（たとえば、キーボード、マウスなど）との通信を仲介する。Ｉ／Ｏインターフェイス４１４としては、たとえば、ＵＳＢ通信やシリアル通信が可能なコンポーネントを採用することができる。
【０１２６】
フィールドバスインターフェイス４１６は、コントローラ２００との間のデータの遣り取りを仲介する。フィールドバスインターフェイス４１６には、たとえば、ＥｔｈｅｒＣＡＴに従う通信が可能なコンポーネントが採用される。
【０１２７】
表示部４２０は、ユーザに対して各種情報を提示するとともに、ユーザからの操作を受け付ける。より具体的には、表示部４２０は、ディスプレイ４２２と、タッチパネル４２４とを含む。ディスプレイ４２２は、典型的には、ＬＣＤや有機ＥＬディスプレイなどからなる。タッチパネル４２４は、ディスプレイ４２２の上に装着され、ユーザによるタッチ操作を受け付ける。ディスプレイ４２２は、典型的には、感圧式や押圧式のデバイスが用いられる。
【０１２８】
＜Ｈ．コントローラ２００の機能構成＞
図１５を参照して、コントローラ２００の機能について説明する。図１５は、コントローラ２００の機能構成の一例を示す図である。
【０１２９】
コントローラ２００は、通信インターフェイス２０１と、リソースマネージャ２３０と、イベント管理部２３２と、ツールインターフェイス２３５と、不揮発性メモリ２３６と、プログラム実行部２５２と、ＯＰＣ−ＵＡサーバ２６０と、ＥＩＰサーバ２７０とを含む。
【０１３０】
通信インターフェイス２０１は、ＯＰＣ−ＵＡクライアント４５０Ａとして機能する外部機器４００Ａや、ＥＩＰクライアント４５０Ｂとして機能する外部機器４００Ｂや、開発支援装置１００と通信を行う。開発支援装置１００には、ユーザプログラム２１０の開発ツール３０がインストールされている。ツールインターフェイス２３５は、開発ツール３０上で設計されたユーザプログラム２１０や、開発ツール３０上で設定された公開設定情報２１２を、通信インターフェイス２０１を介して受信する。
【０１３１】
リソースマネージャ２３０は、コントローラ２００内の各変数の実体を保持しており、各変数の管理や、各変数の読み書きなどを担う。一例として、リソースマネージャ２３０は、変数の読取命令（取得命令）を受けた場合には、読取対象の変数にアクセスし、当該変数を読取命令の発信元に送る。また、リソースマネージャ２３０は、変数の書込命令を受けた場合には、書込対象の変数にアクセスし、当該変数を指定された値に書き換える。各変数に対する読取命令や書込命令は、たとえば、プログラム実行部２５２、ＯＰＣ−ＵＡサーバ２６０、およびＥＩＰサーバ２７０などから発せられる。
【０１３２】
また、リソースマネージャ２３０は、名前空間と変数と公開設定との関係を規定する公開設定情報２１２を保持している。公開設定情報２１２は、コントローラ２００の記憶装置２０８（図１３参照）から読み込まれたものである。リソースマネージャ２３０は、名前空間および変数の定義の登録命令や削除命令を受け、登録処理や削除処理を公開設定情報２１２に対して行う。
【０１３３】
ＯＰＣ−ＵＡサーバ２６０は、ＯＰＣ−ＵＡ用の通信スタック２６１と、メインプログラム２６３とを含む。ＯＰＣ−ＵＡ通信スタック２６１は、ＯＰＣ−ＵＡクライアント４５０Ａへの送信データや、ＯＰＣ−ＵＡクライアント４５０Ａからの受信データを一時的に保持する。メインプログラム２６３は、ＯＰＣ−ＵＡサーバ２６０によるサーバ機能を実現するためのソフトウェアである。
【０１３４】
ＥＩＰサーバ２７０は、ＥＩＰ用の通信スタック２７１と、メインプログラム２７３とを含む。ＥＩＰ通信スタック２７１は、ＥＩＰクライアント４５０Ｂへの送信データや、ＥＩＰクライアント４５０Ｂからの受信データを一時的に保持する。メインプログラム２７３は、ＥＩＰサーバ２７０によるサーバ機能を実現するためのソフトウェアである。
【０１３５】
＜Ｉ．開発支援装置１００の制御フロー＞
図１６を参照して、開発支援装置１００の制御構造について説明する。図１６は、開発支援装置１００が実行する処理の一部を表わすフローチャートである。図１６に示される処理は、開発支援装置１００の制御装置１０２が上述の開発支援プログラム１１０Ａ（図１２参照）を実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１３６】
ステップＳ１１０において、制御装置１０２は、開発ツール３０の起動命令を受け付けたか否かを判断する。制御装置１０２は、開発ツール３０の起動命令を受け付けたと判断した場合（ステップＳ１１０においてＹＥＳ）、制御をステップＳ１２０に切り替える。そうでない場合には（ステップＳ１１０においてＮＯ）、制御装置１０２は、ステップＳ１１０の処理を再び実行する。
【０１３７】
ステップＳ１２０において、制御装置１０２は、上述の設計画面３１（図３参照）を開く操作を受け付けたか否かを判断する。当該操作は、操作部１１５（図１２参照）に対して行われる。制御装置１０２は、設計画面３１を開く操作を受け付けたと判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１２２に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、制御装置１０２は、制御をステップＳ１３０に切り替える。
【０１３８】
ステップＳ１２２において、制御装置１０２は、開発支援装置１００の表示部１２１（図１２参照）に設計画面３１を表示する。これにより、設計者は、設計画面３１上でユーザプログラム２１０を記述することができる。
【０１３９】
ステップＳ１３０において、制御装置１０２は、上述の公開設定画面３３（図４参照）を開く操作を受け付けたか否かを判断する。当該操作は、操作部１１５に対して行われる。制御装置１０２は、公開設定画面３３を開く操作を受け付けたと判断した場合（ステップＳ１３０においてＹＥＳ）、制御をステップＳ１３２に切り替える。そうでない場合には（ステップＳ１３０においてＮＯ）、制御装置１０２は、制御をステップＳ１４０に切り替える。
【０１４０】
ステップＳ１３２において、制御装置１０２は、開発支援装置１００の表示部１２１に公開設定画面３３を表示する。これにより、設計者は、ユーザプログラム２１０で規定される各名前空間について変数の公開設定を行うことができる。公開設定画面３３に設定された情報は、上述の公開設定情報２１２（図５参照）として記憶される。
【０１４１】
ステップＳ１４０において、制御装置１０２は、ユーザプログラム２１０に対するコンパイル操作が行われたか否かを判断する。当該操作は、操作部１１５に対して行われる。制御装置１０２は、ユーザプログラム２１０に対するコンパイル操作が行われたと判断した場合（ステップＳ１４０においてＹＥＳ）、制御をステップＳ１４２に切り替える。そうでない場合には（ステップＳ１４０においてＮＯ）、制御装置１０２は、制御をステップＳ１５０に切り替える。
【０１４２】
ステップＳ１４２において、制御装置１０２は、ユーザプログラム２１０のコンパイル処理を実行する。これにより、ユーザプログラム２１０の実行形式のファイルが生成される。
【０１４３】
ステップＳ１５０において、制御装置１０２は、ユーザプログラム２１０をコントローラ２００にダウンロードするための操作を受け付けたか否かを判断する。当該操作は、操作部１１５に対して行われる。制御装置１０２は、ユーザプログラム２１０をコントローラ２００にダウンロードする操作を受け付けたと判断した場合（ステップＳ１５０においてＹＥＳ）、制御をステップＳ１５２に切り替える。そうでない場合には（ステップＳ１５０においてＮＯ）、制御装置１０２は、制御をステップＳ１６０に切り替える。
【０１４４】
ステップＳ１５２は、制御装置１０２は、ステップＳ１４２で生成されたユーザプログラム２１０のコンパイル結果と、ステップＳ１３２で生成された公開設定情報２１２とを、指定されたコントローラ２００に転送する。
【０１４５】
ステップＳ１６０において、制御装置１０２は、開発ツール３０に対する終了操作を受け付けたか否かを判断する。制御装置１０２は、開発ツール３０に対する終了操作を受け付けたと判断した場合（ステップＳ１６０においてＹＥＳ）、図１６に示される処理を終了する。そうでない場合には（ステップＳ１６０においてＮＯ）、制御装置１０２は、制御をステップＳ１２０に戻す。
【０１４６】
＜Ｊ．コントローラ２００の制御フロー＞
図１７を参照して、コントローラ２００の制御構造について説明する。図１７は、コントローラ２００が実行する処理の一部を表わすフローチャートである。図１７に示される処理は、コントローラ２００の制御装置２０２がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１４７】
ステップＳ２１０において、制御装置２０２は、ユーザプログラム２１０に対する実行命令を受け付けたか否かを判断する。制御装置２０２は、ユーザプログラム２１０に対する実行命令を受け付けたと判断した場合（ステップＳ２１０においてＹＥＳ）、制御をステップＳ２２０に切り替える。そうでない場合には（ステップＳ２１０においてＮＯ）、制御装置２０２は、ステップＳ２１０の処理を再び実行する。
【０１４８】
ステップＳ２２０において、制御装置２０２は、ユーザプログラム２１０の制御周期が到来したか否かを判断する。上述のように、ユーザプログラム２１０は、サイクリック実行型のプログラムであるので、制御装置２０２は、予め定められた制御周期ごとにユーザプログラム２１０に含まれる命令群を繰り返し実行する。制御装置２０２は、ユーザプログラム２１０の制御周期が到来したと判断した場合（ステップＳ２２０においてＹＥＳ）、制御をステップＳ２２２に切り替える。そうでない場合には（ステップＳ２２０においてＮＯ）、制御装置２０２は、制御をステップＳ２３０に切り替える。
【０１４９】
ステップＳ２２２において、制御装置２０２は、ユーザプログラム２１０の先頭行から最終行までを１制御周期で実行する。その次の制御周期では、コントローラ２００は、再び、ユーザプログラム２１０の先頭行から最終行までを実行する。コントローラ２００は、当該制御周期ごとに指令値を駆動機器３００に出力する。
【０１５０】
ステップＳ２３０において、制御装置２０２は、変数の公開処理の制御周期が到来したか否かを判断する。ＦＡシステムにおいては、処理の遅延や通信の遅延が許されないので、変数の公開処理の実行期間は、予め割り当てられている。この実行期間は、予め定められた制御周期ごとに到来する。制御装置２０２は、変数の公開処理の制御周期が到来したと判断した場合（ステップＳ２３０においてＹＥＳ）、制御をステップＳ２４０に切り替える。そうでない場合には（ステップＳ２３０においてＮＯ）、制御装置２０２は、制御をステップＳ２２０に戻す。
【０１５１】
ステップＳ２４０において、制御装置２０２は、外部機器４００のいずれかから変数へのアクセス要求を受信したか否かを判断する。制御装置２０２は、外部機器４００のいずれかから変数へのアクセス要求を受信したと判断した場合（ステップＳ２４０においてＹＥＳ）、制御をステップＳ２５０に切り替える。そうでない場合には（ステップＳ２４０においてＮＯ）、制御装置２０２は、制御をステップＳ２２０に戻す。
【０１５２】
ステップＳ２５０において、制御装置２０２は、アクセス要求を受けた変数をアクセス要求の送信元の外部機器４００に公開することが許可されているか否かを判断する。当該判断方法は上述の通りであるため、その説明については繰り返さない。制御装置２０２は、アクセス要求を受けた変数をアクセス要求の送信元の外部機器４００に公開することが許可されていると判断した場合（ステップＳ２５０においてＹＥＳ）、制御をステップＳ２５２に切り替える。そうでない場合には（ステップＳ２５０においてＮＯ）、制御装置２０２は、制御をステップＳ２２０に戻す。
【０１５３】
ステップＳ２５２において、制御装置２０２は、アクセス要求を受けた変数をアクセス要求の送信元の外部機器４００に送信する。
【０１５４】
＜Ｋ．まとめ＞
以上のようにして、開発支援装置１００は、ユーザプログラム２１０で定義される名前空間変数の各々について、各名前空間に属する変数を公開するか否かを判断するための公開設定を受け付けるように構成されている。設定された公開設定は、コントローラ２００に送信される。コントローラ２００は、公開が設定されている名前空間に属する変数を外部機器４００に公開する。
【０１５５】
このように、設計者は、外部機器４００への変数の公開設定を名前空間ごとに行うことができる。すなわち、設計者は、公開変数を各変数に個々にする必要がなくなる。結果として、外部機器４００に対する変数の公開設定がより容易になる。
【０１５６】
＜Ｌ．付記＞
以上のように、本実施形態は以下のような開示を含む。
【０１５７】
［構成１］
開発支援装置（１００）と、
前記開発支援装置（１００）と通信可能に構成されているコントローラ（２００）とを備え、
前記開発支援装置（１００）には、前記コントローラ（２００）を制御するユーザプログラム（２１０）を開発するための開発ツール（３０）がインストールされ得、前記ユーザプログラム（２１０）に含まれる変数の少なくとも一部は、予め定められた名前空間に属し、前記開発ツール（３０）は、前記名前空間に属する変数を前記コントローラ（２００）に通信接続される外部機器（４００）に公開するか否かを判断するための公開設定を前記名前空間について受け付けるように構成されており、
前記コントローラ（２００）は、
前記開発支援装置（１００）から受信した前記ユーザプログラム（２１０）に従って制御対象の駆動機器（３００）を制御し、当該ユーザプログラム（２１０）の実行結果に従って前記名前空間に属する変数を更新するためのプログラム実行部（２５２）と、
前記開発支援装置（１００）から受信した前記公開設定が公開を示す場合、前記名前空間に属する変数を前記外部機器（４００）に公開するための公開設定部（２５０）とを含む、制御システム。
【０１５８】
［構成２］
前記開発ツール（３０）は、
前記名前空間に属する各変数について前記公開設定を設定可能に構成されており、
名前空間用の前記公開設定を初期値として変数用の前記公開設定に反映する、構成１に記載の制御システム。
【０１５９】
［構成３］
前記公開設定部（２５０）は、名前空間用の前記公開設定よりも変数用の前記公開設定を優先して、前記名前空間に属する変数を前記外部機器（４００）に公開するか否かを判断する、構成２項に記載の制御システム。
【０１６０】
［構成４］
前記公開設定は、通信プロトコルを示す通信設定をさらに含み、
前記公開設定部（２５０）は、前記通信設定によって示される通信プロトコルで前記コントローラ（２００）と前記外部機器（４００）とが通信する場合、前記名前空間に属する変数を前記外部機器（４００）に公開する、構成１〜３のいずれか１項に記載の制御システム。
【０１６１】
［構成５］
前記開発支援装置（１００）は、
揮発性の記憶装置（１０４）と、
不揮発性の記憶装置（１１０）とをさらに備え、
前記公開設定は、前記名前空間に属する変数を保持するか否かを示す保持設定を含み、
前記公開設定部（２５０）は、
前記保持設定が保持を示す場合、前記名前空間に属する変数を前記不揮発性の記憶装置（１１０）に記憶し、
前記保持設定が非保持を示す場合、前記名前空間に属する変数を前記揮発性の記憶装置（１０４）に記憶し、構成１〜４のいずれか１項に記載の制御システム。
【０１６２】
［構成６］
ユーザプログラム（２１０）に規定される制御命令に従って制御対象の駆動機器（３００）を制御するコントローラ（２００）と通信可能に構成されている開発支援装置であって、
前記コントローラ（２００）と通信するための通信インターフェイス（１１１）と、
前記ユーザプログラム（２１０）を開発するための開発ツール（３０）を提供する開発プログラムを格納する記憶装置とを備え、前記ユーザプログラム（２１０）に含まれる変数の少なくとも一部は、予め定められた名前空間に属し、前記開発ツール（３０）は、前記名前空間に属する変数を前記コントローラ（２００）に通信接続される外部機器（４００）に公開するか否かを前記コントローラ（２００）に判断させるための公開設定を前記名前空間について受け付けるように構成されており、
前記通信インターフェイス（１１１）は、前記開発ツールが前記ユーザプログラム（２１０）の転送操作を受け付けたことに基づいて、前記ユーザプログラム（２１０）と前記公開設定とを前記コントローラ（２００）に転送する、開発支援装置。
【０１６３】
［構成７］
ユーザプログラム（２１０）に規定される制御命令に従って制御対象の駆動機器（３００）を制御するコントローラ（２００）と通信可能に構成されている開発支援装置（１００）に実行される開発支援プログラムであって、
前記開発支援プログラムは、前記開発支援装置（１００）に、前記ユーザプログラム（２１０）を開発するための開発ツール（３０）を起動するステップを実行させ、前記ユーザプログラム（２１０）に含まれる変数の少なくとも一部は、予め定められた名前空間に属し、
前記開発支援プログラムは、前記開発支援装置（１００）に、さらに、前記名前空間に属する変数を前記コントローラ（２００）に通信接続される外部機器（４００）に公開するか否かを前記コントローラ（２００）に判断させるための公開設定を前記名前空間に対して受け付けるステップ（Ｓ１４）と、
前記開発ツールが前記ユーザプログラム（２１０）の転送操作を受け付けたことに基づいて、前記ユーザプログラム（２１０）と前記公開設定とを前記コントローラ（２００）に転送するステップ（Ｓ２０）とを実行させる、開発支援プログラム。
【０１６４】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１６５】
１  制御システム、３０  開発ツール、３１  設計画面、３３，３３Ａ，３３Ｂ  公開設定画面、３５  検索画面、４１  表示欄、５０，５０Ａ，５１，５３，５６，６１Ａ，６１Ｂ，６３Ａ，６３Ｂ  設定欄、５８  保存ボタン、５９  キャンセルボタン、７１，７２，７３  入力部、７４  表示領域、１００  開発支援装置、１０２，２０２，４０２  制御装置、１０４，２０６，４０４  主メモリ、１１０，２０８，４１０  記憶装置、１１０Ａ  開発支援プログラム、１１１，２０１，４１２  通信インターフェイス、１１４，４１４  Ｉ／Ｏインターフェイス、１１５  操作部、１２０  表示インターフェイス、１２１，４２０  表示部、１２５，４２５  内部バス、２００  コントローラ、２０４  チップセット、２０９  システムプログラム、２１０  ユーザプログラム、２１０Ａ  シーケンスプログラム、２１０Ｂ  モーションプログラム、２１１  制御プログラム、２１２，２１２Ａ  公開設定情報、２２２  内部バスコントローラ、２２４  フィールドバスコントローラ、２２６  Ｉ／Ｏユニット、２３０  リソースマネージャ、２３２  イベント管理部、２３５  ツールインターフェイス、２３６  不揮発性メモリ、２３９  メモリカードインターフェイス、２４０  メモリカード、２５０  公開設定部、２５２  プログラム実行部、２６０  ＯＰＣ−ＵＡサーバ、２６１，２７１  通信スタック、２６３，２７３  メインプログラム、２７０  ＥＩＰサーバ、３００  駆動機器、３００Ａ  ロボットコントローラ、３００Ｂ  サーボドライバ、３０１Ａ  アームロボット、３０１Ｂ  サーボモータ、４００，４００Ａ，４００Ｂ  外部機器、４１６  フィールドバスインターフェイス、４２２  ディスプレイ、４２４  タッチパネル、４４０  変数監視画面、４５０Ａ  ＯＰＣ−ＵＡクライアント、４５０Ｂ  ＥＩＰクライアント。
【図１】
2019159632.tif 000003
【図２】
2019159632.tif 000004
【図３】
2019159632.tif 000005
【図４】
2019159632.tif 000006
【図５】
2019159632.tif 000007
【図６】
2019159632.tif 000008
【図７】
2019159632.tif 000009
【図８】
2019159632.tif 000010
【図９】
2019159632.tif 000011
【図１０】
2019159632.tif 000012
【図１１】
2019159632.tif 000013
【図１２】
2019159632.tif 000014
【図１３】
2019159632.tif 000015
【図１４】
2019159632.tif 000016
【図１５】
2019159632.tif 000017
【図１６】
2019159632.tif 000018
【図１７】
2019159632.tif 000019