(57)【要約】【課題】公開の優先度がより高い変数を可能な限り多く外部機器に公開することが可能な技術が望まれている。【解決手段】制御装置は、アドレス情報を格納するメモリと、アドレス情報の公開先である外部機器と通信するサーバー部とを備える。サーバー部は、予め定められたルールに従って、制御プログラムに含まれる変数について、外部機器への公開の優先度を決定する決定部と、メモリの空き容量を監視する監視部と、制御プログラムに含まれる変数の内の外部機器に対する公開変数について、空き容量が予め定められた閾値を下回らない範囲で、各公開変数の論理アドレスを公開の優先度の順にアドレス情報に追加するアドレス管理部とを含む。【選択図】図１
2019096211.tif 000002
【特許請求の範囲】
【請求項１】
駆動機器を制御するための制御装置であって、
外部機器に公開される情報であって、前記駆動機器の制御プログラムに含まれる変数の論理アドレスを規定するアドレス情報を格納するためのメモリと、
予め定められたルールに従って、前記制御プログラムに含まれる変数について、前記外部機器への公開の優先度を決定するための決定部と、
前記メモリの空き容量を監視するための監視部と、
前記制御プログラムに含まれる変数の内の、前記外部機器に対して公開することが許可されている１つ以上の公開変数について、前記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを前記公開の優先度の順に前記アドレス情報に追加するためのアドレス管理部とを備える、制御装置。
【請求項２】
前記決定部は、前記予め定められたルールに従って前記制御プログラムに含まれる変数をソートし、当該ソート順が上位の変数ほど前記公開の優先度を高くする、請求項１に記載の制御装置。
【請求項３】
前記予め定められたルールは、前記制御プログラムに含まれる変数を、変数名の文字コードの順にソートすることを含む、請求項２に記載の制御装置。
【請求項４】
前記予め定められたルールは、前記制御プログラムに含まれる変数を、各変数に予め設定されている優先度の順にソートすることを含む、請求項２に記載の制御装置。
【請求項５】
前記１つ以上の公開変数のそれぞれには、名前空間が関連付けられており、
前記予め定められたルールは、前記制御プログラムに含まれる変数を、前記名前空間に予め設定されている優先度の順にソートすることを含む、請求項２に記載の制御装置。
【請求項６】
前記予め定められたルールは、予め定められたキーワードを含む変数が他の変数よりもソート順が上位になるように、前記制御プログラムに含まれる変数をソートすることを含む、請求項２に記載の制御装置。
【請求項７】
駆動機器を制御するための制御装置の制御方法であって、
外部機器に公開される情報であって、前記駆動機器の制御プログラムに含まれる変数の論理アドレスを規定するアドレス情報をメモリに準備するステップと、
予め定められたルールに従って、前記制御プログラムに含まれる変数について、外部機器への公開の優先度を決定するステップと、
前記メモリの空き容量を監視するステップと、
前記制御プログラムに含まれる変数の内の、前記外部機器に対して公開することが許可されている１つ以上の公開変数について、前記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを前記公開の優先度の順に前記アドレス情報に追加するステップとを備える、制御方法。
【請求項８】
駆動機器の制御装置によって実行されるプログラムであって、
前記プログラムは、前記制御装置に、
外部機器に公開される情報であって、前記駆動機器の制御プログラムに含まれる変数の論理アドレスを規定するアドレス情報をメモリに準備するステップと、
予め定められたルールに従って、前記制御プログラムに含まれる変数について、外部機器への公開の優先度を決定するステップと、
前記メモリの空き容量を監視するステップと、
前記制御プログラムに含まれる変数の内の、前記外部機器に対して公開することが許可されている１つ以上の公開変数について、前記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを前記公開の優先度の順に前記アドレス情報に追加するステップとを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、産業用の制御装置内で管理される変数を外部機器に公開するための技術に関する。
【背景技術】
【０００２】
様々な生産現場において、生産工程を自動化するＦＡ（Factory  Automation）システムが普及している。ＦＡシステムは、種々の産業用の駆動機器によって構成される。産業用の駆動機器は、たとえば、ワークを移動するための移動テーブルや、ワークを搬送するためのコンベアや、予め定められた目的の場所までワーク移動するためのアームロボットなどを含む。これらの駆動機器は、ＰＬＣ（Programmable Logic Controller）やロボットコントローラなどの産業用の制御装置（以下、「コントローラ」ともいう。）によって制御される。
【０００３】
産業用の駆動機器の状態を監視するために、コントローラ内のデータにアクセスする必要がある。コントローラ内のデータにアクセスするための技術に関し、特開２０１２−０１８５４１号公報（特許文献１）は、「外部機器の種類や接続に関係なく、外部機器のデータを容易に収集することが可能な」表示装置を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−０１８５４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、ＯＰＣ−ＵＡ（Object Linking and Embedding for Process Control Unified Architecture）に対応したコントローラが普及しつつある。ＯＰＣ−ＵＡとは、ベンダやＯＳ（Operating System）の種類などに依存することなくデータ交換を実現するために定められた通信の標準規格である。ＯＰＣ−ＵＡに対応したコントローラが用いられることで、外部機器は、当該コントローラ内で管理されるデータ（変数）に容易にアクセスすることができる。
【０００６】
コントローラは、外部機器に変数を公開するためには、変数にアクセスするたに必要なデータ（たとえば、変数自体やインスタンスなど）をメモリに展開する必要がある。メモリの記憶領域の一部は、駆動機器の制御プログラムによって使用されているため、メモリの空き容量は、限られている。そのため、公開変数の数が多いときには、コントローラは、全ての公開変数を公開できない可能性がある。
【０００７】
本開示は上述のような問題点を解決するためになされたものであって、ある局面における目的は、公開の優先度がより高い変数を可能な限り多く外部機器に公開することが可能な技術を提供することである。
【課題を解決するための手段】
【０００８】
本開示の一例では、駆動機器を制御するための制御装置は、外部機器に公開される情報であって、上記駆動機器の制御プログラムに含まれる変数の論理アドレスを規定するアドレス情報を格納するメモリと、予め定められたルールに従って、上記制御プログラムに含まれる変数について、上記外部機器への公開の優先度を決定するための決定部と、上記メモリの空き容量を監視するための監視部と、上記制御プログラムに含まれる変数の内の、上記外部機器に対して公開することが許可されている１つ以上の公開変数について、上記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを上記公開の優先度の順に上記アドレス情報に追加するためのアドレス管理部とを備える。
【０００９】
この開示によれば、制御装置は、メモリの空き容量が予め定められた閾値を下回らない範囲で公開変数の論理アドレスをアドレス情報に追加するので、可能な限り多くの公開変数を外部機器に公開することができる。また、公開の優先度が高い公開変数から順に論理アドレスが追加されるので、制御装置は、重要な公開変数を優先的に外部機器に公開することができる。
【００１０】
本開示の一例では、上記決定部は、上記予め定められたルールに従って上記制御プログラムに含まれる変数をソートし、当該ソート順が上位の変数ほど上記公開の優先度を高くする。
【００１１】
この開示によれば、制御装置は、変数のソート順で変数の公開の優先度を決定することができる。
【００１２】
本開示の一例では、上記予め定められたルールは、上記制御プログラムに含まれる変数を、変数名の文字コードの順にソートすることを含む。
【００１３】
この開示によれば、設計者は、公開の優先度を変数の命名規則で設定できるので、各変数に対して優先度を設定する手間を省くことができる。
【００１４】
本開示の一例では、上記予め定められたルールは、上記制御プログラムに含まれる変数を、各変数に予め設定されている優先度の順にソートすることを含む。
【００１５】
この開示によれば、制御装置は、設計者によって設定された公開の優先度が高い変数を他の変数よりも優先的に公開することができる。
【００１６】
本開示の一例では、上記１つ以上の公開変数のそれぞれには、名前空間が関連付けられている。上記予め定められたルールは、上記制御プログラムに含まれる変数を、上記名前空間に予め設定されている優先度の順にソートすることを含む。
【００１７】
この開示によれば、設計者は、公開の優先度を名前空間で指定することができるので、全変数に公開の優先度を設定する必要がない。
【００１８】
本開示の一例では、上記予め定められたルールは、予め定められたキーワードを含む変数が他の変数よりもソート順が上位になるように、上記制御プログラムに含まれる変数をソートすることを含む。
【００１９】
この開示によれば、設計者は、公開の優先度を変数名で指定することができるので、各変数名に対して優先度を設定する手間を省くことができる。
【００２０】
本開示の他の例では、駆動機器を制御するための制御装置の制御方法は、外部機器に公開される情報であって、上記駆動機器の制御プログラムに含まれる変数の論理アドレスを規定するアドレス情報をメモリに準備するステップと、予め定められたルールに従って、上記制御プログラムに含まれる変数について、外部機器への公開の優先度を決定するステップと、上記メモリの空き容量を監視するステップと、上記制御プログラムに含まれる変数の内の、上記外部機器に対して公開することが許可されている１つ以上の公開変数について、上記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを上記公開の優先度の順に上記アドレス情報に追加するステップとを備える。
【００２１】
この開示によれば、制御装置の制御方法は、メモリの空き容量が予め定められた閾値を下回らない範囲で公開変数の論理アドレスをアドレス情報に追加するので、可能な限り多くの公開変数を外部機器に公開することができる。また、公開の優先度が高い公開変数から順に論理アドレスが追加されるので、制御装置の制御装置は、重要な公開変数を優先的に外部機器に公開することができる。
【００２２】
本開示の他の例では、駆動機器の制御装置によって実行されるプログラムは、上記制御装置に、外部機器に公開される情報であって、上記駆動機器の制御プログラムに含まれる変数の論理アドレスを規定するアドレス情報をメモリに準備するステップと、予め定められたルールに従って、上記制御プログラムに含まれる変数について、外部機器への公開の優先度を決定するステップと、上記メモリの空き容量を監視するステップと、上記制御プログラムに含まれる変数の内の、上記外部機器に対して公開することが許可されている１つ以上の公開変数について、上記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを上記公開の優先度の順に上記アドレス情報に追加するステップとを実行させる。
【００２３】
この開示によれば、制御装置によって実行されるプログラムは、メモリの空き容量が予め定められた閾値を下回らない範囲で公開変数の論理アドレスをアドレス情報に追加するので、可能な限り多くの公開変数を外部機器に公開することができる。また、公開の優先度が高い公開変数から順に論理アドレスが追加されるので、制御装置の制御プログラムは、重要な公開変数を優先的に外部機器に公開することができる。
【発明の効果】
【００２４】
ある局面において、公開の優先度がより高い変数を可能な限り多く外部機器に公開することができる。
【図面の簡単な説明】
【００２５】
【図１】実施の形態に従うＦＡシステムの構成例を示す図である。
【図２】制御プログラムに含まれる変数の一覧と、外部機器に公開されるアドレス情報とを示す図である。
【図３】アドレス情報を視覚的に表した図である。
【図４】ＯＰＣ−ＵＡサーバーの起動から停止までの処理を表わすフローチャートである。
【図５】ＯＰＣ−ＵＡサーバーの初期化処理を表わすフローチャートである。
【図６】実施の形態に従うコントローラの機能構成の一例を示す図である。
【図７】実施の形態に従うコントローラのハードウェア構成の一例を示す模式図である。
【発明を実施するための形態】
【００２６】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【００２７】
＜Ａ．適用例＞
図１を参照して、本発明の適用例について説明する。図１は、ＦＡシステム１の構成例を示す図である。
【００２８】
ＦＡシステム１は、生産工程を自動化するためのシステムである。図１の例では、ＦＡシステム１は、コントローラ１００と、駆動機器２００と、外部機器３００とで構成されている。
【００２９】
コントローラ１００および駆動機器２００は、フィールドネットワークＮＷ１に接続されている。フィールドネットワークＮＷ１には、データの到達時間が保証される、定周期通信を行うネットワークを採用することが好ましい。このような定周期通信を行うネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００３０】
駆動機器２００は、生産工程を自動化するための種々の産業用機器を含む。一例として、駆動機器２００は、アームロボット２０１Ａを制御するロボットコントローラ２００Ａや、サーボモータ２０１Ｂを制御するサーボドライバ２００Ｂや、ワークを撮影するための視覚センサ２００Ｃや、生産工程で利用されるその他の機器などを含む。
【００３１】
コントローラ１００および外部機器３００は、フィールドネットワークＮＷ２に接続されている。フィールドネットワークＮＷ２には、たとえば、ベンダやＯＳの種類などに依存することなくデータ交換を実現することができる通信規格に従ったネットワークを採用することが望ましい。このような通信規格としては、たとえば、ＯＰＣ−ＵＡなどが知られている。以下では、ＯＰＣ−ＵＡを前提として説明を行うが、フィールドネットワークＮＷ２に採用される通信規格は、ＯＰＣ−ＵＡに限定されるわけではない。
【００３２】
ＯＰＣ−ＵＡに従った通信を実現するためには、コントローラ１００をサーバーとして機能させるとともに、外部機器３００をクライアントとして機能させる必要がある。より具体的には、コントローラ１００には、サーバー機能を有するＯＰＣ−ＵＡサーバー１５０（サーバー部）がインストールされている。ここでいう「ＯＰＣ−ＵＡサーバー」とは、通信ドライバとして機能するアプリケーション（プログラム）である。また、ＯＰＣ−ＵＡサーバーの「サーバー機能」とは、コントローラ１００のメモリ１０６上の記憶領域を利用する機能のこといい、特に、外部機器３００と通信し、外部機器３００とのデータのやり取りを実現するための機能のことをいう。
【００３３】
また、外部機器３００には、ＯＰＣ−ＵＡサーバー１５０との通信機能を有するＯＰＣ−ＵＡクライアント３５０Ａ〜３５０Ｃがインストールされている。ここでいう「ＯＰＣ−ＵＡクライアント」とは、ＯＰＣ−ＵＡサーバー１５０に通信要求（アクセス要求）を送信するアプリケーションである。以下では、ＯＰＣ−ＵＡクライアント３５０Ａ〜３５０Ｃを総称して、ＯＰＣ−ＵＡクライアント３５０ともいう。
【００３４】
ＯＰＣ−ＵＡクライアント３５０は、ＯＰＣ−ＵＡサーバー１５０にアクセス要求を送信することで、駆動機器２００の制御プログラム１１２に含まれる変数１１１の論理アドレスを規定するアドレス情報１１３を参照し、コントローラ１００内で管理される変数１１１をＯＰＣ−ＵＡサーバー１５０から取得する。アドレス情報１１３の詳細については後述する。ＯＰＣ−ＵＡクライアント３５０は、取得した変数に基づいて、コントローラ１００や駆動機器２００の状態をグラフィカルに表示する。ＯＰＣ−ＵＡクライアント３５０として機能する外部機器３００は、たとえば、ＨＭＩ（Human Machine Interface）、ＰＣ（Personal Computer）、スマートフォン、タブレット端末、または、表示機能を有するその他の情報処理装置を含む。
【００３５】
コントローラ１００は、ＯＰＣ−ＵＡサーバー１５０の他に、プロセッサ１０２と、メモリ１０６とを含む。プロセッサ１０２は、機能構成として、プログラム実行部１０３を含む。ＯＰＣ−ＵＡサーバー１５０は、機能構成として、監視部１５２と、決定部１５４と、アドレス管理部１５６とを含む。
【００３６】
プログラム実行部１０３は、制御プログラム１１２の実行命令を受け付けたことに基づいて、制御プログラム１１２の実行に必要な各種データをメモリ１０６に展開し、制御プログラム１１２に従って駆動機器２００を制御する。このように、メモリ１０６は、ワーキングメモリとして機能し、制御プログラム１１２の実行に必要な各種データを一時的に格納する。
【００３７】
コントローラ１００と駆動機器２００との間で遣り取りされる信号（典型的には、入力信号および出力信号）を制御プログラム１１２内では、それぞれ変数１１１として取り扱う。すなわち、これらの現実の信号と制御プログラム１１２内の対応する変数１１１とは本質的に同じものである。
【００３８】
監視部１５２は、メモリ１０６の空き容量を監視し、当該使用容量をアドレス管理部１５６に出力する。決定部１５４は、予め定められたルールに従って、制御プログラム１１２に含まれる変数１１１について、外部機器３００への公開の優先度を決定する。公開の優先度の決定方法の詳細については後述する。
【００３９】
アドレス管理部１５６は、変数１１１の内の、外部機器３００に対して公開することが許可されている変数（以下、「公開変数」ともいう。）について、メモリ１０６の空き容量が予め定められた閾値を下回らない範囲で、決定部１５４によって決定された公開の優先度の順に従って、公開変数のそれぞれの論理アドレスをアドレス情報１１３に追加する。アドレス情報１１３の詳細については後述する。公開変数の論理アドレスがアドレス情報１１３に追加されることで、外部機器３００は、コントローラ１００内の公開変数にアクセスすることができ、公開変数の値を参照することができる。
【００４０】
メモリ１０６の記憶領域の一部は、駆動機器２００を制御するための制御プログラム１１２によって使用されているため、メモリ１０６の空き容量は、限られている。このような状況下では、変数１１１の全てが外部機器３００に公開されると、メモリ１０６の空き容量がなくなってしまう可能性がある。この場合には、制御プログラム１１２が意図せずに停止してしまい、ＦＡシステム１が停止してしまう可能性がある。ＦＡシステム１が停止すると多大な機会損失が生じるため、ＦＡシステム１を極力停止しないことが望まれている。本実施の形態に従うコントローラ１００は、メモリ１０６の空き容量が予め定められた閾値を下回らない範囲で、公開変数の論理アドレスをアドレス情報１１３に追加するので、公開変数の公開処理により制御プログラム１１２が停止することはない。
【００４１】
一方で、公開変数は、メモリ１０６に空きがある限り、可能な限り多く公開されることが好ましい。本実施の形態に従うコントローラ１００は、メモリ１０６の空き容量が予め定められた閾値を下回らない範囲で公開変数を公開するので、可能な限り多くの公開変数を公開することができる。また、公開の優先度が高い公開変数から順に論理アドレスが追加されるので、コントローラ１００は、重要な公開変数を優先的に外部機器３００に公開することができる。
【００４２】
なお、上述では、ＦＡシステム１が１つのコントローラ１００（ＯＰＣ−ＵＡサーバー１５０）で構成されている例について説明を行ったが、ＦＡシステム１は、２つ以上のコントローラ１００（ＯＰＣ−ＵＡサーバー１５０）で構成されてもよい。
【００４３】
また、上述では、ＦＡシステム１が３つの外部機器３００（ＯＰＣ−ＵＡクライアント３５０）で構成されている例について説明を行ったが、ＦＡシステム１は、１つ以上の外部機器３００（ＯＰＣ−ＵＡクライアント３５０）で構成されればよい。
【００４４】
また、上述では、監視部１５２がメモリ１０６の空き容量を監視する例について説明を行ったが、メモリ１０６の空き容量と、メモリ１０６の使用容量とは、互いに相関する概念であるため、監視部１５２は、メモリ１０６の使用容量を監視するように構成されてもよい。この場合、監視部１５２は、メモリ１０６のメモリ容量から使用容量を差分することで、メモリ１０６の空き容量を算出することができる。
【００４５】
また、上述では、外部機器３００との通信を実現するためのサーバーとして、ＯＰＣ−ＵＡサーバー１５０を例に挙げて説明を行ったが、ＯＰＣ−ＵＡサーバー１５０は、外部機器３００との通信を実現することが可能なサーバーであれば任意の種類のサーバーで代用され得る。一例として、ＯＰＣ−ＵＡサーバー１５０は、ＳＱＬ（Structured Query Language）サーバーなどのＤＢ（Data Base）サーバー、ＦＴＰ（File Transfer Protocol）サーバー、または、ＨＴＴＰサーバーなどのＷｅｂサーバーで代用されてもよい。
【００４６】
また、図１には、監視部１５２、決定部１５４、およびアドレス管理部１５６がＯＰＣ−ＵＡサーバー１５０に実装されている例について説明を行ったが、監視部１５２、決定部１５４、およびアドレス管理部１５６は、ＯＰＣ−ＵＡサーバー１５０外に実装されてもよい。この場合、監視部１５２は、複数のサーバー部のそれぞれについてメモリ１０６の使用容量を個々に監視する。決定部１５４は、公開変数の公開の優先度をサーバー部ごとに決定する。アドレス管理部１５６は、アドレス情報１１３をサーバー部ごとに個々に管理する。
【００４７】
＜Ｂ．公開変数の設定＞
図２を参照して、公開変数の設定方法について説明する。図２は、制御プログラム１１２に含まれる変数の一覧と、外部機器３００に公開されるアドレス情報１１３とを示す図である。
【００４８】
制御プログラム１１２の設計者は、ＯＰＣ−ＵＡクライアント３５０に対する公開変数の設定をサポート装置４００上で行うことができる。サポート装置４００は、たとえば、ＰＣ、タブレット端末、または、表示機能を有するその他の情報処理装置である。サポート装置４００には、制御プログラム１１２の開発ツールがインストールされ得る。設計者は、当該開発ツール上で制御プログラム１１２を設計し、設計した制御プログラム１１２をコントローラ１００にインストールする。制御プログラム１１２の開発ツールは、たとえば、オムロン社製の「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」である。
【００４９】
図２には、公開変数の設定画面４０１が示されている。設計者は、設定画面４０１上において、制御プログラム１１２に規定される各変数について属性を設定することができる。設定可能な属性は、たとえば、変数名と、変数の型と、変数の初期値と、ＯＰＣ−ＵＡクライアント３５０への公開属性とを含む。公開属性としては、「公開のみ」、「入力」、「出力」、「非公開」のいずれかが設定され得る。「公開のみ」、「入力」、「出力」と設定された変数はＯＰＣ−ＵＡクライアント３５０に公開され、「非公開」と設定された変数はＯＰＣ−ＵＡクライアント３５０に公開されない。
【００５０】
図２の例では、ＯＰＣ−ＵＡクライアント３５０は、公開属性として「公開のみ」と設定された変数「Ｖａｒ１」と、公開属性として「入力」と設定された変数「Ｖａｒ２」と、公開属性として「出力」と設定された変数「Ｖａｒ３」とにアクセスすることができる。一方で、ＯＰＣ−ＵＡクライアント３５０は、公開属性として「非公開」と設定された変数「Ｖａｒ４」にはアクセスすることができない。
【００５１】
より具体的には、「公開のみ」と設定された変数「Ｖａｒ１」については、ＯＰＣ−ＵＡクライアント３５０は、変数名のみを特定でき、変数の値を取得することはできない。「入力」と設定された変数「Ｖａｒ２」については、ＯＰＣ−ＵＡクライアント３５０は、変数の値を読み込むことができるが、変数の値を書き換えることはできない。「出力」と設定された変数「Ｖａｒ３」については、ＯＰＣ−ＵＡクライアント３５０は、変数の値を読み込むことも書き換えることもできる。
【００５２】
＜Ｃ．アドレス情報１１３＞
引き続き図２を参照しつつ、図３を参照して、アドレス情報１１３について説明する。図３は、アドレス情報１１３を視覚的に表した図である。
【００５３】
図２に示されるように、設定画面４０１における公開変数の設定に従ってアドレス情報１１３が生成される。典型的には、アドレス情報１１３は、コントローラ１００によって生成されるが、サポート装置４００によって生成されてもよい。生成されたアドレス情報１１３は、ＯＰＣ−ＵＡクライアント３５０として機能する外部機器３００から参照され得る。
【００５４】
アドレス情報１１３には、制御プログラム１１２に含まれる変数１１１の論理アドレスが規定されている。論理アドレスとは、メモリ１０６上の論理位置のこといい、メモリ１０６上の所定の情報（たとえば、図２の「ＲＯＯＴ」）を基準とした相対位置を表わす。より具体的には、アドレス情報１１３は、複数のノードで構成される。各ノードは、対応する変数の属性（たとえば、アドレス、変数値、変数の型など）を規定する。各ノードは、他のノードと関連付けられており階層関係を有する。ＯＰＣ−ＵＡクライアント３５０は、アドレス情報１１３に規定されている各ノードの論理アドレスを辿ることで、目的のノードを探索することができ、辿りついた目的のノードの属性を参照することで、当該ノードに規定されている変数の型や変数の値を取得することができる。
【００５５】
図２および図３には、コントローラ「ｎｅｗ＿Ｃｏｎｔｒｏｌｌｅｒ＿０」内の変数がノードＮ１〜Ｎ３として管理されている。ＯＰＣ−ＵＡクライアント３５０は、オブジェクト「ＤｅｖｉｃｅＳｅｔ」に含まれるノード「ｎｅｗ＿Ｃｏｎｔｒｏｌｌｅｒ＿０」、オブジェクト「Ｒｅｓｏｕｒｃｅｓ」に含まれるノード「ＣＰＵ」を順に辿ることで、オブジェクト「ＧｌｏｂａｌＶａｒｓ」に含まれるノードＮ１〜Ｎ３にアクセスすることができる。
【００５６】
図３の例では、ノードＮ１〜Ｎ３には、変数の属性として、変数の値と変数の型とが規定されている。ＯＰＣ−ＵＡクライアント３５０は、ノードＮ１を参照することで、ノードＮ１に関連付けられている変数「Ｖａｒ１」の型および値を特定することができる。また、ＯＰＣ−ＵＡクライアント３５０は、ノードＮ２を参照することで、ノードＮ２に関連付けられている変数「Ｖａｒ２」の型および値を特定することができる。また、ＯＰＣ−ＵＡクライアント３５０は、ノードＮ３を参照することで、ノードＮ３に関連付けられている変数「Ｖａｒ３」の型および値を特定することができる。
【００５７】
＜Ｄ．全体フロー＞
図４を参照して、コントローラ１００内のＯＰＣ−ＵＡサーバー１５０の制御構造について説明する。図４は、ＯＰＣ−ＵＡサーバー１５０の起動から停止までの処理を表わすフローチャートである。図４に示される処理は、コントローラ１００のプロセッサ１０２（図１参照）がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【００５８】
ステップＳ１１０において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０を起動するためのイベントを検知したか否かを判断する。プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０を起動するためのイベントを検知したと判断した場合（ステップＳ１１０においてＹＥＳ）、制御をステップＳ１２０に切り替える。そうでない場合には（ステップＳ１１０においてＮＯ）、プロセッサ１０２は、ステップＳ１１０の処理を再び実行する。
【００５９】
ステップＳ１２０において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０を起動し、ＯＰＣ−ＵＡサーバー１５０の初期化処理を実行する。ＯＰＣ−ＵＡサーバー１５０の初期化処理の詳細については後述する。
【００６０】
ステップＳ１５０において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０の初期化処理が完了したか否かを判断する。プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０の初期化処理が完了したと判断した場合（ステップＳ１５０においてＹＥＳ）、制御をステップＳ１５２に切り替える。そうでない場合には（ステップＳ１５０においてＮＯ）、プロセッサ１０２は、ステップＳ１５０の処理を再び実行する。
【００６１】
ステップＳ１５２において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０の状態を稼働中とする。これにより、ＯＰＣ−ＵＡサーバー１５０は、ＯＰＣ−ＵＡクライアント３５０から、公開変数へのアクセス要求を受信可能な状態となる。当該アクセス要求は、たとえば、Ｒｅａｄ要求、Ｗｒｉｔｅ要求、または、Ｓｕｂｓｃｒｉｐｔｉｏｎ要求である。アクセス要求がＲｅａｄ要求である場合、ＯＰＣ−ＵＡサーバー１５０は、アクセス対象の公開変数の値をＯＰＣ−ＵＡクライアント３５０に１回送信する。アクセス要求がＷｒｉｔｅ要求である場合、ＯＰＣ−ＵＡサーバー１５０は、アクセス対象の公開変数を指定された値に書き換える。アクセス要求がＳｕｂｓｃｒｉｐｔｉｏｎ要求である場合、ＯＰＣ−ＵＡサーバー１５０は、アクセス対象の公開変数の値を定期的に送信する。
【００６２】
ステップＳ１６０において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０を停止するためのイベントを検知したか否かを判断する。プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０を停止するためのイベントを検知したと判断した場合（ステップＳ１６０においてＹＥＳ）、制御をステップＳ１６２に切り替える。そうでない場合には（ステップＳ１６０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１５２に戻す。
【００６３】
ステップＳ１６２において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０の停止処理を実行する。このとき、プロセッサ１０２は、制御プログラム１１２による駆動機器２００の制御については停止しない。これにより、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０のサーバー機能のみを停止することができ、駆動機器２００の駆動を阻害せずに済む。
【００６４】
好ましくは、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０が使用しているメモリ１０６上の記憶領域を解放した上でサーバー機能を停止する。これにより、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量を減らすことができ、駆動機器２００の制御プログラム１１２の実行が停止されることを確実に防止することができる。
【００６５】
＜Ｅ．初期化フロー＞
図５を参照して、図４に示されるステップＳ１２０の初期化処理について説明する。図５は、ＯＰＣ−ＵＡサーバー１５０の初期化処理を表わすフローチャートである。
【００６６】
ステップＳ１１２において、プロセッサ１０２は、上述の決定部１５４（図１参照）として、予め定められたソートルールに従って、制御プログラム１１２に含まれる変数１１１をソートする。プロセッサ１０２は、当該ソート順に従って、各変数の公開の優先度を決定する。変数のソートルールの具体例については後述する。プロセッサ１０２は、当該ソート順が上位の変数ほど公開の優先度を高くする。
【００６７】
ステップＳ１１４において、プロセッサ１０２は、ステップＳ１１２でのソート順が最上位の変数を注目変数とする。
【００６８】
ステップＳ１２０において、プロセッサ１０２は、現在の注目変数が公開変数であるか否かを判断する。各変数の公開／非公開の設定は、予め行われている。公開変数の設定方法については図２で説明した通りであるので、その説明については繰り返さない。プロセッサ１０２は、現在の注目変数が公開変数であると判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１３０に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１４２に切り替える。
【００６９】
ステップＳ１３０において、プロセッサ１０２は、上述の監視部１５２（図１参照）として、メモリ１０６の使用容量に空きがあるか否かを判断する。一例として、プロセッサ１０２は、メモリ１０６の使用容量が予め定められた閾値以上である場合に、メモリ１０６の使用容量に空きがあると判断する。プロセッサ１０２は、メモリ１０６の使用容量に空きがあると判断した場合（ステップＳ１３０においてＹＥＳ）、制御をステップＳ１３２に切り替える。そうでない場合には（ステップＳ１３０においてＮＯ）、プロセッサ１０２は、図５に示されるＯＰＣ−ＵＡサーバー１５０の初期化処理を終了する。
【００７０】
ステップＳ１３２において、プロセッサ１０２は、上述のアドレス管理部１５６（図１参照）として、現在の注目変数をアドレス情報１１３（図２，図３参照）に追加する。注目変数に関する情報は、ノードとしてアドレス情報１１３に追加される。当該ノードには、注目変数の論理アドレスや、注目変数の型や、当該ノードから他のノードへの参照先（たとえば、ノードの論理アドレス）などの情報が含まれる。
【００７１】
ステップＳ１４０において、プロセッサ１０２は、現在の注目変数のソート順が最下位（最後）であるか否かを判断する。プロセッサ１０２は、現在の注目変数のソート順が最下位であると判断した場合（ステップＳ１４０においてＹＥＳ）、プロセッサ１０２は、図５に示されるＯＰＣ−ＵＡサーバー１５０の初期化処理を終了する。そうでない場合には（ステップＳ１４０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１４２に切り替える。
【００７２】
ステップＳ１４２において、プロセッサ１０２は、ステップＳ１１２でのソート順に従って、ソート順が現在の注目変数の次である変数を新たな注目変数として設定する。
【００７３】
以上のようにして、プロセッサ１０２は、制御プログラム１１２に含まれる変数１１１を予め定められたソートルールに従ってソートする。その後、プロセッサ１０２は、ソート順が上位である公開変数から順にアドレス情報１１３に追加する。このとき、プロセッサ１０２は、メモリ１０６に空きがある範囲でアドレス情報１１３への公開変数の追加処理を行う。
【００７４】
好ましくは、プロセッサ１０２は、メモリ１０６の使用容量が上限に達したことにより公開できなかった公開変数をログに記録する。このとき、プロセッサ１０２は、メモリ１０６の使用容量が上限に達したことを公開できなかった理由としてログに記録する。当該ログは、たとえば、メモリカード１４０（図７参照）などの外部記憶装置に格納される。
【００７５】
なお、上述では、プロセッサ１０２が制御プログラム１１２に含まれる変数１１１を予め定められたルールに従ってソートし、当該ソート順に従って各変数１１１の公開の優先度を決定する例について説明を行ったが、プロセッサ１０２は、各変数１１１の優先度を決定するにあたって、必ずしも変数１１１をソートする必要はない。
【００７６】
＜Ｆ．公開の優先度の決定方法＞
上述のように、コントローラ１００は、制御プログラム１１２に含まれる変数１１１を予め定められたソートルールに従ってソートし、ソート順が上位の変数から順にアドレス情報１１３に追加する。当該ソートルールには、様々なアルゴリズムが採用され得る。以下では、その例として、ソートルールの具体例１〜４について説明する。
【００７７】
（Ｆ１．ソートルールの具体例１）
本具体例のソートルールでは、コントローラ１００は、制御プログラム１１２に含まれる変数１１１の各々を変数名の文字コードに従ってソートする。
【００７８】
より具体的には、コントローラ１００は、制御プログラム１１２に含まれる変数１１１の各々を変数名の文字コードに従って昇順／降順にソートする。昇順にソートする場合、コントローラ１００は、変数の１文字目に着目し、数字については「０」→「９」の順に、英文字については「Ａ」→「Ｚ」の順に各変数をソートする。次に、コントローラ１００は、１文字目が同じ変数群の各々について、２文字目の文字コードに従って昇順にソートする。コントローラ１００は、このようなソート処理を繰り返すことで変数１１１を昇順にソートする。
【００７９】
降順にソートする場合、コントローラ１００は、変数の１文字目に着目し、数字については「９」→「０」の順に、英文字については「Ｚ」→「Ａ」の順に各変数をソートする。次に、コントローラ１００は、１文字目が同じ変数群の各々について、２文字目の文字コードに従って降順にソートする。コントローラ１００は、このようなソート処理を繰り返すことで変数１１１を降順にソートする。
【００８０】
設計者は、公開の優先度を変数の命名規則で設定できるので、各変数に対して優先度を設定する手間を省くことができる。
【００８１】
（Ｆ２．ソートルールの具体例２）
本具体例のソートルールでは、ＯＰＣ−ＵＡサーバー１５０は、制御プログラム１１２に含まれる変数１１１を、各変数に予め設定されている優先度の順にソートする。
【００８２】
各変数に対する優先度の設定は、たとえば、図２に示されるサポート装置４００の設定画面４０１上で行われる。より具体的には、設計者は、設定画面４０１において、変数１１１の各々について外部機器３００へ公開を許可するか否かを設定するとともに、各変数についての公開の優先度を変数の属性として設定する。
【００８３】
ある局面において、設定画面４０１において、文字入力領域（たとえば、テキストボックス）が各変数と並べて表示され、設計者は、文字入力領域の各々に公開の優先度を数値（たとえば、１〜５の５段階）で指定する。
【００８４】
他の局面において、設定画面４０１において、プルダウンメニューが各変数と並べて表示され、設計者は、各プルダウンメニューに含まれる選択項目の中から１つの選択項目を選択することで公開の優先度を設定する。一例として、当該選択項目は、高優先項目と、中優先項目と、低優先項目とを含む。高優先項目が設定された変数は、他の変数よりも優先的に公開される。中優先項目が設定された変数は、高優先項目が設定された変数の次に優先的に公開される。低優先項目が設定された変数は、中優先項目が設定された変数の次に優先的に公開される。
【００８５】
コントローラ１００は、設定された優先度の順に制御プログラム１１２に含まれる変数１１１をソートする。これにより、ＯＰＣ−ＵＡサーバー１５０は、設計者によって設定された公開の優先度が高い変数を他の変数よりも優先的に公開することができる。
【００８６】
（Ｆ３．ソートルールの具体例３）
本具体例のソートルールでは、ＯＰＣ−ＵＡサーバー１５０は、制御プログラム１１２に含まれる変数１１１を、各変数が属する名前空間に予め設定されている優先度の順にソートする。
【００８７】
より具体的には、変数１１１の各々は、制御プログラム１１２上で、設計者によって定義された名前空間に属していることがある。コントローラ１００は、同じ変数名の変数を属する名前空間に応じて区別することができる。
【００８８】
名前空間に対する優先度の設定は、たとえば、図２に示されるサポート装置４００の設定画面４０１上で行われる。一例として、定義されている名前空間の一覧が設定画面４０１上に表示され、設計者は、各名前空間について公開の優先度を設定する。
【００８９】
ある局面において、設定画面４０１において、文字入力領域（たとえば、テキストボックス）が各変数と並べて表示され、設計者は、文字入力領域の各々に公開の優先度を数値（たとえば、１〜５の５段階）で指定する。
【００９０】
他の局面において、設定画面４０１において、プルダウンメニューが各変数と並べて表示され、設計者は、各プルダウンメニューに含まれる選択項目の中から１つの選択項目を選択することで公開の優先度を設定する。一例として、当該選択項目は、高優先項目と、中優先項目と、低優先項目とを含む。高優先項目が設定された名前空間に属する変数は、他の変数よりも優先的に公開される。中優先項目が設定された名前空間に属する変数は、高優先項目が設定された名前空間に属する変数の次に優先的に公開される。低優先項目が設定された名前空間に属する変数は、中優先項目が設定された名前空間に属する変数の次に優先的に公開される。
【００９１】
コントローラ１００は、名前空間に設定された優先度の順に制御プログラム１１２に含まれる変数１１１をソートする。これにより、ＯＰＣ−ＵＡサーバー１５０は、公開の優先度が高い名前空間に属する変数を他の名前空間に属する変数よりも優先的に公開することができる。また、設計者は、公開の優先度を名前空間で指定することができるので、全変数に公開の優先度を設定する必要がなくなる。
【００９２】
（Ｆ４．ソートルールの具体例４）
本具体例のソートルールでは、ＯＰＣ−ＵＡサーバー１５０は、予め定められたキーワードを含む変数が他の変数よりもソート順が上位になるように、制御プログラム１１２に含まれる変数１１１をソートする。
【００９３】
一例として、ＯＰＣ−ＵＡサーバー１５０は、キーワード「Ｐｕｂｌｉｃ＿」を含む変数を他の変数よりもソート順を上位とする。設計者は、公開の優先度を高くしたい変数にキーワード「Ｐｕｂｌｉｃ＿」を付すことで、当該変数の公開の優先度を高くすることができる。
【００９４】
当該キーワードの種類が複数種類存在する場合には、設計者は、各キーワードに優先度を設定してもよい。たとえば、キーワード「Ｐｕｂｌｉｃ１＿」およびキーワード「Ｐｕｂｌｉｃ２＿」が定義されているとする。この場合、設計者は、キーワード「Ｐｕｂｌｉｃ１＿」および「Ｐｕｂｌｉｃ２＿」のそれぞれについて優先度を設定する。キーワード「Ｐｕｂｌｉｃ１＿」の優先度がキーワード「Ｐｕｂｌｉｃ２＿」の優先度よりも高く設定されている場合、ＯＰＣ−ＵＡサーバー１５０は、キーワード「Ｐｕｂｌｉｃ１＿」を含む変数をキーワード「Ｐｕｂｌｉｃ２＿」を含む変数よりもソート順を上位とする。また、ＯＰＣ−ＵＡサーバー１５０は、キーワード「Ｐｕｂｌｉｃ２＿」を含む変数を残りの変数よりもソート順を上位とする。
【００９５】
これにより、設計者は、公開の優先度を変数名で指定することができるので、各変数名に対して優先度を設定する手間を省くことができる。
【００９６】
（Ｆ５．その他のソートルール）
なお、変数１１１のソートルールは、上記「具体例１」〜「具体例４」に限定されず、その他の様々なソートルールが採用され得る。たとえば、変数１１１のソートルールには、より多くの変数が効率よく公開されるように変数１１１をソートするためのアルゴリズム（たとえば、ナップサック問題を解決するためのアルゴリズム）が採用されてもよい。
【００９７】
また、変数１１１のソートルールは、固定されている必要はなく、動的に変更されてもよい。一例として、適用されるソートルールは、ユーザによって動的に設定されてもよいし、自動的に設定されてもよい。この場合、公開変数の設定時に適用候補のソートルールが一覧表示され、ユーザは、当該一覧表示されたソートルールの中から適用するソートルールを選択する。ＯＰＣ−ＵＡサーバー１５０は、選択されたソートルールに従って制御プログラム１１２に含まれる変数１１１をソートする。
【００９８】
＜Ｇ．コントローラ１００の機能構成＞
図６を参照して、コントローラ１００の機能について説明する。図６は、コントローラ１００の機能構成の一例を示す図である。
【００９９】
コントローラ１００は、外部通信インターフェイス１０１と、プログラム実行部１０３と、リソースマネージャ１３０と、イベント管理部１３２と、ツールインターフェイス１３５と、不揮発性メモリ１３６と、ＯＰＣ−ＵＡサーバー１５０とを含む。ＯＰＣ−ＵＡサーバー１５０は、通信スタック１５１と、メインプログラム１５３と、初期化プログラム１５５とを含む。
【０１００】
外部通信インターフェイス１０１は、外部機器３００であるＯＰＣ−ＵＡクライアント３５０Ａ，３５０Ｂとの通信を行う。外部通信インターフェイス１０１には、たとえば、ＥｔｈｅｒＮｅｔ（登録商標）が採用される。また、外部通信インターフェイス１０１は、サポート装置４００との通信を行う。サポート装置４００には、制御プログラム１１２の開発ツールである「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」がインストールされている。ツールインターフェイス１３５は、当該開発ツール上で設計された制御プログラム１１２を、外部通信インターフェイス１０１を介して受信する。また、ツールインターフェイス１３５は、当該開発ツール上でのプロジェクトファイルに関する設定（たとえば、変数設定など）を外部通信インターフェイス１０１を介して受信し、当該設定を変数設定１３７に書き込む。また、ツールインターフェイス１３５は、コントローラ１００のエラー情報やログデータを外部通信インターフェイス１０１を介してサポート装置４００に送信する。
【０１０１】
リソースマネージャ１３０は、コントローラ１００内の各変数の実体を保持しており、各変数の管理や、各変数の読み書きなどを担う。一例として、リソースマネージャ１３０は、変数の読取命令（取得命令）を受けた場合には、読取対象の変数にアクセスし、当該変数を読取命令の発信元に送る。また、リソースマネージャ１３０は、変数の書込命令を受けた場合には、書込対象の変数にアクセスし、当該変数を指定された値に書き換える。リソースマネージャ１３０によって管理される変数は、制御プログラム１１２内の変数、コントローラ１００の状態を示すシステム変数１３１などを含む。
【０１０２】
イベント管理部１３２は、コントローラ１００内で発生したイベントに応じた処理を実行する。ある局面において、イベント管理部１３２は、メモリ１０６の使用容量が上限に達しそうなことを示すイベントを検知した場合、警告を出力する。当該イベントは、メモリ１０６の使用容量が所定閾値を超えたことに基づいて発せられる。警告の出力態様は任意である。一例として、警告の内容が不揮発性メモリ１３６にログとして書き込まれることで、警告が出力される。あるいは、警告の内容がメモリカード１４０（図７参照）などの外部記憶装置にログとして書き込まれることで、警告が出力される。
【０１０３】
ＯＰＣ−ＵＡ通信スタック１５１は、ＯＰＣ−ＵＡクライアント３５０への送信データや、ＯＰＣ−ＵＡクライアント３５０からの受信データを一時的に保持する。メインプログラム１５３は、ＯＰＣ−ＵＡサーバー１５０によるサーバー機能を実現するためのソフトウェアである。初期化プログラム１５５は、上述の図５に示されるＯＰＣ−ＵＡサーバー１５０の初期化処理を実現するためのソフトウェアである。初期化プログラム１５５は、監視部１５２によるメモリ１０６の空き容量の監視機能や、上述の決定部１５４による変数に対する公開の優先度の決定機能や、アドレス管理部１５６によるアドレス情報１１３の管理機能を実現するためのソフトウェアである。初期化プログラム１５５は、メインプログラム１５３と一体的に構成されてもよいし、図６に示されるように、メインプログラム１５３とは別に構成されてもよい。
【０１０４】
＜Ｈ．コントローラ１００のハードウェア構成＞
図７を参照して、コントローラ１００のハードウェア構成について説明する。図７は、コントローラ１００のハードウェア構成の一例を示す模式図である。
【０１０５】
コントローラ１００は、外部通信インターフェイス１０１と、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１０２と、チップセット１０４と、メインメモリとしてのメモリ１０６と、フラッシュメモリ１０８と、内部バスコントローラ１２２と、フィールドバスコントローラ１２４と、メモリカードインターフェイス１３９とを含む。
【０１０６】
プロセッサ１０２は、フラッシュメモリ１０８に格納された制御プログラム１１２を読み出して、メモリ１０６に展開して実行することで、駆動機器２００の一例であるサーボドライバ２００Ｂなどに対する任意の制御を実現する。制御プログラム１１２は、コントローラ１００を制御するための各種プログラムを含む。一例として、制御プログラム１１２は、システムプログラム１０９およびユーザプログラム１１０などを含む。システムプログラム１０９は、データの入出力処理や実行タイミング制御などの、コントローラ１００の基本的な機能を提供するための命令コードを含む。ユーザプログラム１１０は、制御対象に応じて任意に設計され、シーケンス制御を実行するためのシーケンスプログラム１１０Ａおよびモーション制御を実行するためのモーションプログラム１１０Ｂとを含む。制御プログラム１１２は、たとえば、ラダー言語やＳＴ（Structured Text）言語で記述されているＰＬＣプログラムである。
【０１０７】
チップセット１０４は、各コンポーネントを制御することで、コントローラ１００全体としての処理を実現する。
【０１０８】
内部バスコントローラ１２２は、コントローラ１００と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、Ｉ／Ｏユニット１２６が接続されている。
【０１０９】
フィールドバスコントローラ１２４は、コントローラ１００とフィールドバスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、サーボドライバ２００Ｂが接続されている。他にも、ロボットコントローラ２００Ａ（図１参照）や視覚センサ２００Ｃ（図１参照）などが接続されてもよい。
【０１１０】
内部バスコントローラ１２２およびフィールドバスコントローラ１２４は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータ（測定値を含む）を取得することができる。また、内部バスコントローラ１２２および／またはフィールドバスコントローラ１２４は、サーボドライバ２００Ｂとの間でデータを遣り取りするためのインターフェイスとしても機能する。
【０１１１】
外部通信インターフェイス１０１は、各種の有線／無線ネットワークを通じたデータの遣り取りを制御する。メモリカードインターフェイス１３９は、外部記憶媒体の一例であるメモリカード１４０（たとえば、ＳＤカード）を着脱可能に構成されており、メモリカード１４０に対してデータを書き込み、メモリカード１４０からデータを読出すことが可能になっている。
【０１１２】
＜Ｉ．まとめ＞
以上のようにして、コントローラ１００は、ＯＰＣ−ＵＡクライアント３５０として機能する外部機器３００との通信を実現するためのＯＰＣ−ＵＡサーバー１５０を含む。ＯＰＣ−ＵＡサーバー１５０は、制御プログラム１１２に含まれる変数１１１を予め定められたソートルールに従ってソートする。その後、ＯＰＣ−ＵＡサーバー１５０は、外部機器３００への公開が許可されている変数（すなわち、公開変数）をソート順が上位である変数から順にアドレス情報１１３に追加する。このとき、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６に空きがある範囲でアドレス情報１１３への公開変数の追加処理を行う。
【０１１３】
コントローラ１００のような産業用の制御装置のように、メモリ１０６の使用可能容量が制限されている状況下では、変数１１１の全てが外部機器３００に公開されると、メモリ１０６の空き容量がなくなってしまう可能性がある。この場合には、制御プログラム１１２が意図せずに停止してしまう可能性がある。ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の空き容量が予め定められた閾値を下回らない範囲で公開変数を公開するため、公開変数の公開処理により制御プログラム１１２が停止することはない。
【０１１４】
一方で、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の空き容量が予め定められた閾値を下回らない範囲で公開変数の論理アドレスをアドレス情報１１３に追加するので、可能な限り多くの公開変数を公開することができる。また、公開の優先度が高い公開変数から順に論理アドレスが追加されるので、コントローラ１００は、重要な公開変数を優先的に外部機器３００に公開することができる。
【０１１５】
＜Ｊ．付記＞
以上のように、本実施形態は以下のような開示を含む。
【０１１６】
［構成１］
駆動機器（２００）を制御するための制御装置（１００）であって、
外部機器（３００）に公開される情報であって、前記駆動機器（２００）の制御プログラム（１１２）に含まれる変数の論理アドレスを規定するアドレス情報（１１３）を格納するためのメモリ（１０６）と、
予め定められたルールに従って、前記制御プログラム（１１２）に含まれる変数について、前記外部機器（３００）への公開の優先度を決定するための決定部（１５４）と、
前記メモリ（１０６）の空き容量を監視するための監視部（１５２）と、
前記制御プログラム（１１２）に含まれる変数の内の、前記外部機器（３００）に対して公開することが許可されている１つ以上の公開変数について、前記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを前記公開の優先度の順に前記アドレス情報（１１３）に追加するためのアドレス管理部（１５６）とを備える、制御装置。
【０１１７】
［構成２］
前記決定部（１５４）は、前記予め定められたルールに従って前記制御プログラム（１１２）に含まれる変数をソートし、当該ソート順が上位の変数ほど前記公開の優先度を高くする、構成１に記載の制御装置。
【０１１８】
［構成３］
前記予め定められたルールは、前記制御プログラム（１１２）に含まれる変数を、変数名の文字コードの順にソートすることを含む、構成２に記載の制御装置。
【０１１９】
［構成４］
前記予め定められたルールは、前記制御プログラム（１１２）に含まれる変数を、各変数に予め設定されている優先度の順にソートすることを含む、構成２に記載の制御装置。
【０１２０】
［構成５］
前記１つ以上の公開変数のそれぞれには、名前空間が関連付けられており、
前記予め定められたルールは、前記制御プログラム（１１２）に含まれる変数を、前記名前空間に予め設定されている優先度の順にソートすることを含む、構成２に記載の制御装置。
【０１２１】
［構成６］
前記予め定められたルールは、予め定められたキーワードを含む変数が他の変数よりもソート順が上位になるように、前記制御プログラム（１１２）に含まれる変数をソートすることを含む、構成２に記載の制御装置。
【０１２２】
［構成７］
駆動機器（２００）を制御するための制御装置（１００）の制御方法であって、
外部機器（３００）に公開される情報であって、前記駆動機器（２００）の制御プログラム（１１２）に含まれる変数の論理アドレスを規定するアドレス情報（１１３）をメモリ（１０６）に準備するステップと、
予め定められたルールに従って、前記制御プログラム（１１２）に含まれる変数について、外部機器（３００）への公開の優先度を決定するステップと、
前記メモリ（１０６）の空き容量を監視するステップと、
前記制御プログラム（１１２）に含まれる変数の内の、前記外部機器（３００）に対して公開することが許可されている１つ以上の公開変数について、前記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを前記公開の優先度の順に前記アドレス情報（１１３）に追加するステップとを備える、制御方法。
【０１２３】
［構成８］
駆動機器（２００）を制御するための制御装置（１００）の制御プログラムであって、
前記制御プログラム（１１２）は、前記制御装置（１００）に、
外部機器（３００）に公開される情報であって、前記駆動機器（２００）の制御プログラム（１１２）に含まれる変数の論理アドレスを規定するアドレス情報（１１３）をメモリ（１０６）に準備するステップと、
予め定められたルールに従って、前記制御プログラム（１１２）に含まれる変数について、外部機器（３００）への公開の優先度を決定するステップと、
前記メモリ（１０６）の空き容量を監視するステップと、
前記制御プログラム（１１２）に含まれる変数の内の、前記外部機器（３００）に対して公開することが許可されている１つ以上の公開変数について、前記空き容量が予め定められた閾値を下回らない範囲で、当該１つ以上の公開変数のそれぞれの論理アドレスを前記公開の優先度の順に前記アドレス情報（１１３）に追加するステップとを実行させる、制御プログラム。
【０１２４】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１２５】
１  ＦＡシステム、１００  コントローラ、１０１  外部通信インターフェイス、１０２  プロセッサ、１０３  プログラム実行部、１０４  チップセット、１０６  メモリ、１０８  フラッシュメモリ、１０９  システムプログラム、１１０  ユーザプログラム、１１０Ａ  シーケンスプログラム、１１０Ｂ  モーションプログラム、１１１  変数、１１２  制御プログラム、１１３  アドレス情報、１２２  内部バスコントローラ、１２４  フィールドバスコントローラ、１２６  Ｉ／Ｏユニット、１３０  リソースマネージャ、１３１  システム変数、１３２  イベント管理部、１３５  ツールインターフェイス、１３６  不揮発性メモリ、１３７  変数設定、１３９  メモリカードインターフェイス、１４０  メモリカード、１５０  ＯＰＣ−ＵＡサーバー、１５１  通信スタック、１５２  監視部、１５３  メインプログラム、１５４  決定部、１５５  初期化プログラム、１５６  アドレス管理部、２００  駆動機器、２００Ａ  ロボットコントローラ、２００Ｂ  サーボドライバ、２００Ｃ  視覚センサ、２０１Ａ  アームロボット、２０１Ｂ  サーボモータ、３００  外部機器、３５０Ａ，３５０Ｂ，３５０Ｃ  ＯＰＣ−ＵＡクライアント、４００  サポート装置、４０１  設定画面。
【図１】
2019096211.tif 000003
【図２】
2019096211.tif 000004
【図３】
2019096211.tif 000005
【図４】
2019096211.tif 000006
【図５】
2019096211.tif 000007
【図６】
2019096211.tif 000008
【図７】
2019096211.tif 000009