(57)【要約】【課題】メモリの使用容量が多くなった場合に駆動機器に影響を与えずにサーバー機能を制約するための技術が望まれている。【解決手段】コントローラ１００は、メモリ１０６と、制御プログラム１１２に従って駆動機器２００を制御するプログラム実行部１０３と、外部機器３００と通信するＯＰＣ−ＵＡサーバー１５０とを備える。ＯＰＣ−ＵＡサーバー１５０は、外部機器３００からの要求に応答して、メモリ１０６上の記憶領域を利用する機能を実行する機能実行部１５２と、メモリ１０６の使用容量を監視する監視部１５４と、使用容量が所定閾値を超えたことに基づいて、ＯＰＣ−ＵＡサーバー１５０の上記機能を停止する制約部１５６とを含む。【選択図】図１
2019096210.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）サーバー、または、ＨＴＴＰサーバーなどのＷｅｂサーバーで代用されてもよい。
【００４４】
また、図１には、監視部１５４および制約部１５６がＯＰＣ−ＵＡサーバー１５０に実装されている例について説明を行ったが、監視部１５４および制約部１５６は、ＯＰＣ−ＵＡサーバー１５０外に実装されてもよい。このように実装されることで、監視部１５４は、複数のサーバー部のそれぞれについてメモリ１０６の使用容量を個々に監視することができる。また、制約部１５６は、メモリ１０６の使用容量が所定の閾値を超えたサーバー部に対して機能の制約処理を個々に実行することができる。
【００４５】
＜Ｂ．公開変数の設定＞
図２を参照して、制御プログラム１１２に含まれる変数の内から外部機器３００に公開する変数（以下、「公開変数」ともいう。）を設定する方法について説明する。図２は、制御プログラム１１２に含まれる変数の一覧と、公開が許可された変数の一覧とを示す図である。
【００４６】
制御プログラム１１２の設計者は、ＯＰＣ−ＵＡクライアント３５０に対する公開変数の設定をサポート装置４００上で予め行うことができる。サポート装置４００は、たとえば、ＰＣ、タブレット端末、または、表示機能を有するその他の情報処理装置である。サポート装置４００には、制御プログラム１１２の開発ツールがインストールされ得る。設計者は、当該開発ツール上で制御プログラム１１２を設計し、設計した制御プログラム１１２をコントローラ１００にインストールする。制御プログラム１１２の開発ツールは、たとえば、オムロン社製の「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」である。
【００４７】
図２には、公開変数の設定画面４０１が示されている。設計者は、設定画面４０１上において、制御プログラム１１２に規定される各変数について属性を設定することができる。設定可能な属性は、たとえば、変数名と、変数の型と、変数の初期値と、ＯＰＣ−ＵＡクライアント３５０への公開属性とを含む。公開属性としては、「公開のみ」、「入力」、「出力」、「非公開」のいずれかが設定され得る。「公開のみ」、「入力」、「出力」と設定された変数はＯＰＣ−ＵＡクライアント３５０に公開され、「非公開」と設定された変数はＯＰＣ−ＵＡクライアント３５０に公開されない。
【００４８】
図２の例では、公開属性として「公開のみ」と設定された変数「Ｖａｒ１」と、公開属性として「入力」と設定された変数「Ｖａｒ２」と、公開属性として「出力」と設定された変数「Ｖａｒ３」とがＯＰＣ−ＵＡクライアント３５０上に表示されている。公開属性として「非公開」と設定された変数「Ｖａｒ４」は、ＯＰＣ−ＵＡクライアント３５０上で表示されていない。
【００４９】
「公開のみ」と設定された変数「Ｖａｒ１」については、ＯＰＣ−ＵＡクライアント３５０は、変数名のみを特定でき、変数の値を取得することはできない。「入力」と設定された変数「Ｖａｒ２」については、ＯＰＣ−ＵＡクライアント３５０は、変数の値を読み込むことができるが、変数の値を書き換えることはできない。「出力」と設定された変数「Ｖａｒ３」については、ＯＰＣ−ＵＡクライアント３５０は、変数の値を読み込むことも書き換えることもできる。
【００５０】
＜Ｃ．公開変数の取得処理＞
外部機器３００のユーザは、公開変数を参照することで、コントローラ１００や駆動機器２００の状態を監視するための様々なプログラムを設計することができる。一例として、外部機器３００のユーザは、監視対象の変数が異常値を示す場合に、当該変数に係る駆動機器２００を表示する監視プログラムなどを設計することができる。
【００５１】
監視プログラムの実行により公開変数へのアクセス処理が実行されたことに基づいて、ＯＰＣ−ＵＡクライアント３５０は、公開変数のアクセス要求をＯＰＣ−ＵＡサーバー１５０に送信する。アクセス要求は、たとえば、Ｒｅａｄ要求、Ｗｒｉｔｅ要求、または、Ｓｕｂｓｃｒｉｐｔｉｏｎ要求である。アクセス要求がＲｅａｄ要求である場合、ＯＰＣ−ＵＡサーバー１５０は、アクセス対象の公開変数の値をＯＰＣ−ＵＡクライアント３５０に１回送信する。アクセス要求がＷｒｉｔｅ要求である場合、ＯＰＣ−ＵＡサーバー１５０は、アクセス対象の公開変数を指定された値に書き換える。アクセス要求がＳｕｂｓｃｒｉｐｔｉｏｎ要求である場合、ＯＰＣ−ＵＡサーバー１５０は、アクセス対象の公開変数の値を定期的に送信する。
【００５２】
以下では、図３および図４を参照して、指定された公開変数を定期的に送信するＳｕｂｓｃｒｉｐｔｉｏｎ処理について説明する。図３は、Ｓｕｂｓｃｒｉｐｔｉｏｎ処理を実現するためのデータフローを示すシーケンス図である。図４は、Ｓｕｂｓｃｒｉｐｔｉｏｎ処理を実現するためのオブジェクト群の一例を示す図である。
【００５３】
ステップＳ１０において、ＯＰＣ−ＵＡクライアント３５０は、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクトの生成命令が実行されたことに基づいて、当該生成命令をＯＰＣ−ＵＡサーバー１５０に送信する。ここでいう「オブジェクト」とは、クラスから生成されたインスタンスを意味する。当該生成命令には、たとえば、ＯＰＣ−ＵＡクライアント３５０に公開変数の値を通知する周期が規定されている。
【００５４】
ステップＳ１２において、ＯＰＣ−ＵＡサーバー１５０は、ＯＰＣ−ＵＡクライアント３５０から当該生成命令を受信したことに基づいて、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２を生成する。Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２は、指定された通知周期に従って、後述のキュー３５４Ａ〜３５４Ｃ内のデータをＯＰＣ−ＵＡクライアント３５０に送信する機能を有する。
【００５５】
ステップＳ１４において、ＯＰＣ−ＵＡサーバー１５０は、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクトの生成結果として、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２の識別情報（たとえば、ＩＤ（Identification））をＯＰＣ−ＵＡクライアント３５０に送信する。
【００５６】
ステップＳ２０において、ＯＰＣ−ＵＡクライアント３５０は、ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクトの生成命令が実行されたことに基づいて、当該生成命令をＯＰＣ−ＵＡサーバー１５０に送信する。当該生成命令は、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２のＩＤと、監視対象の公開変数と、公開変数のサンプリング周期と、キューオブジェクトのサイズとを含む。
【００５７】
ステップＳ２２において、ＯＰＣ−ＵＡサーバー１５０は、ＯＰＣ−ＵＡクライアント３５０から当該生成命令を受信したことに基づいて、当該生成命令で指定されたＳｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２に関連付けて、Ｑｕｅｕｅオブジェクト３５４Ａと、ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクト３５６Ａとを生成する。
【００５８】
ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクト３５６Ａは、上記の生成命令で指定された監視対象の変数１１１を、当該生成命令で指定されたサンプリング周期ごとに取得し、当該変数１１１をＱｕｅｕｅオブジェクト３５４Ａに格納する機能を有する。Ｑｕｅｕｅオブジェクト３５４Ａは、上記の生成命令で指定されたサイズを有し、格納された公開変数をＦＩＦＯ（First In First Out）形式でＳｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２に出力する機能を有する。
【００５９】
ステップＳ２４において、ＯＰＣ−ＵＡサーバー１５０は、ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクト３５６Ａの生成結果をＯＰＣ−ＵＡクライアント３５０に送信する。当該生成結果は、ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクト３５６Ａが正常に生成されたか否か（Ｔｒｕｅ／Ｆａｌｓｅ）を示す。
【００６０】
ＯＰＣ−ＵＡサーバー１５０は、ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクトの生成命令をＯＰＣ−ＵＡクライアント３５０から受信する度に、ステップＳ２０，Ｓ２２，Ｓ２４と同様の処理を実行する。すなわち、当該生成命令が発行される度に、ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクトおよびＱｕｅｕｅオブジェクトが生成される。図４の例では、結果的に、３つのＱｕｅｕｅオブジェクト３５４Ａ〜３５４Ｃと、３つのＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクト３５６Ａ〜３５６Ｃとが生成されている。
【００６１】
ステップＳ３０において、ＯＰＣ−ＵＡクライアント３５０は、監視対象の公開変数の取得命令が実行されたことに基づいて、当該取得命令をＯＰＣ−ＵＡサーバー１５０に送信する。
【００６２】
ステップＳ３２において、ＯＰＣ−ＵＡサーバー１５０は、監視対象の公開変数の取得命令をＯＰＣ−ＵＡクライアント３５０から受信したことに基づいて、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２の機能を実行する。これにより、Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト３５２は、設定されている通知周期ごとに、Ｑｕｅｕｅオブジェクト３５４Ａ〜３５４Ｃから公開変数を取得し、当該公開変数をＯＰＣ−ＵＡクライアント３５０に送信する。
【００６３】
＜Ｄ．ＯＰＣ−ＵＡサーバー１５０の制約処理＞
図１で説明したように、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量が所定の閾値を超えたことに基づいて、ＯＰＣ−ＵＡサーバー１５０のサーバー機能の制約処理を実行する。このような制約処理の例としては、ＯＰＣ−ＵＡサーバー１５０の状態を正常状態から異常状態に遷移させる処理や、外部機器３００からＯＰＣ−ＵＡサーバー１５０へのアクセス要求に対してエラー応答を行う処理や、ＯＰＣ−ＵＡサーバー１５０によるサーバー機能を停止する処理などが挙げられる。
【００６４】
以下では、図５を参照して、これらの制約処理が実行されるタイミングの一例について説明する。図５は、ＯＰＣ−ＵＡサーバー１５０およびＯＰＣ−ＵＡクライアント３５０のシステムフローを表わす図である。
【００６５】
ステップＳ５０において、ＯＰＣ−ＵＡサーバー１５０は、起動指示を受けたとする。この起動指示は、たとえば、コントローラ１００の制御エンジンから発せられる。
【００６６】
ステップＳ５２において、ＯＰＣ−ＵＡサーバー１５０は、上述の機能実行部１５２（図１参照）として、上述の公開変数をコントローラ１００のメモリ１０６に展開する。このとき、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の空き領域の範囲内で可能な限り多くの公開変数をメモリ１０６に展開する。
【００６７】
また、ＯＰＣ−ＵＡサーバー１５０は、上述の監視部１５４（図１参照）として、メモリ１０６の使用容量をチェックする。メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、自身の状態を正常状態とする。メモリ１０６の使用容量が所定の閾値を超えている場合、ＯＰＣ−ＵＡサーバー１５０は、上述の制約部１５６（図１参照）として、サーバー機能の制約処理を実行する。本ステップＳ５２における制約処理では、ＯＰＣ−ＵＡサーバー１５０は、自身の状態を異常状態とする。このとき、ＯＰＣ−ＵＡサーバー１５０は、自身のサーバー機能の一部または全部を停止してもよい。
【００６８】
ステップＳ６０において、ＯＰＣ−ＵＡクライアント３５０は、ＯＰＣ−ＵＡサーバー１５０に通信接続要求を送信したとする。
【００６９】
ステップＳ６２において、ＯＰＣ−ＵＡサーバー１５０は、ＯＰＣ−ＵＡクライアント３５０からの通信接続要求を受信したことに基づいて、ＯＰＣ−ＵＡクライアント３５０との通信接続処理を実行する。このとき、ＯＰＣ−ＵＡサーバー１５０は、上述の監視部１５４として、メモリ１０６の使用容量をチェックする。
【００７０】
ステップＳ６４において、メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、ステップＳ６０での通信接続要求の応答として正常を示す応答をＯＰＣ−ＵＡクライアント３５０に送信する。メモリ１０６の使用容量が所定の閾値を超えている場合、ＯＰＣ−ＵＡサーバー１５０は、上述の制約部１５６として、サーバー機能の制約処理を実行する。本ステップＳ６４における制約処理では、ＯＰＣ−ＵＡサーバー１５０は、ステップＳ６０での通信接続要求の応答として異常を示す応答をＯＰＣ−ＵＡクライアント３５０に送信する。
【００７１】
ステップＳ７０において、ＯＰＣ−ＵＡクライアント３５０は、公開変数のＲｅａｄ要求またはＷｒｉｔｅ要求をＯＰＣ−ＵＡサーバー１５０に送信したとする。
【００７２】
ステップＳ７２において、ＯＰＣ−ＵＡサーバー１５０は、上述の監視部１５４として、ＯＰＣ−ＵＡクライアント３５０からＲｅａｄ要求を受信した場合、メモリ１０６の使用容量をチェックする。メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、上述の機能実行部１５２として、指定された公開変数を読み出すための処理を実行する。一方で、ＯＰＣ−ＵＡクライアント３５０の要求がＷｒｉｔｅ要求であるとき、ＯＰＣ−ＵＡサーバー１５０は、上述の機能実行部１５２として、指定された公開変数を指定された値に書き換えるための処理を実行する。
【００７３】
ステップＳ７４において、メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、ステップＳ７０でのＲｅａｄ要求またはＷｒｉｔｅ要求の応答として正常を示す応答をＯＰＣ−ＵＡクライアント３５０に送信する。メモリ１０６の使用容量が所定の閾値を超えている場合、ＯＰＣ−ＵＡサーバー１５０は、上述の制約部１５６として、サーバー機能の制約処理を実行する。本ステップＳ７４における制約処理では、ＯＰＣ−ＵＡサーバー１５０は、ステップＳ７０でのＲｅａｄ要求またはＷｒｉｔｅ要求の応答として異常を示す応答をＯＰＣ−ＵＡクライアント３５０に送信する。
【００７４】
ステップＳ８０において、ＯＰＣ−ＵＡクライアント３５０は、公開変数のＳｕｂｓｃｒｉｐｔｉｏｎ要求をＯＰＣ−ＵＡサーバー１５０に送信したとする。
【００７５】
ステップＳ８２において、ＯＰＣ−ＵＡサーバー１５０は、ＯＰＣ−ＵＡクライアント３５０からＳｕｂｓｃｒｉｐｔｉｏｎ要求を受信した場合、上述の監視部１５４として、メモリ１０６の使用容量をチェックする。メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、上述の図３および図４で説明したＳｕｂｓｃｒｉｐｔｉｏｎ処理を実行する。
【００７６】
ステップＳ８４において、メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、ステップＳ８０でのＳｕｂｓｃｒｉｐｔｉｏｎ要求の応答として正常を示す応答をＯＰＣ−ＵＡクライアント３５０に送信する。一方で、メモリ１０６の使用容量が所定の閾値を超えている場合、ＯＰＣ−ＵＡサーバー１５０は、上述の制約部１５６として、サーバー機能の制約処理を実行する。本ステップＳ８４における制約処理では、ＯＰＣ−ＵＡサーバー１５０は、ステップＳ８０でのＳｕｂｓｃｒｉｐｔｉｏｎ要求の応答として異常を示す応答をＯＰＣ−ＵＡクライアント３５０に送信する。
【００７７】
ステップＳ９０において、ＯＰＣ−ＵＡサーバー１５０は、上述の機能実行部１５２として、公開変数の再ダウンロード指示を受けたとする。この再ダウンロード指示は、公開変数が変更された場合などに、コントローラ１００の制御エンジンから発せられる。
【００７８】
ステップＳ９２において、ＯＰＣ−ＵＡサーバー１５０は、再ダウンロード指示を受けたことに基づいて、上述の監視部１５４として、メモリ１０６の使用容量をチェックする。メモリ１０６の使用容量が所定の閾値を超えていない場合、ＯＰＣ−ＵＡサーバー１５０は、自身の状態を正常状態とする。メモリ１０６の使用容量が所定の閾値を超えている場合、ＯＰＣ−ＵＡサーバー１５０は、上述の制約部１５６として、サーバー機能の制約処理を実行する。本ステップＳ９２における制約処理では、ＯＰＣ−ＵＡサーバー１５０は、自身の状態を異常状態とする。このとき、ＯＰＣ−ＵＡサーバー１５０は、自身のサーバー機能の一部または全部を停止してもよい。
【００７９】
＜Ｅ．メモリ１０６の使用容量の監視処理＞
ＯＰＣ−ＵＡサーバー１５０は、公開変数のアクセス要求をＯＰＣ−ＵＡクライアント３５０から受信したことに基づいて、当該公開変数にアクセスするための処理を実行する。このとき、ＯＰＣ−ＵＡサーバー１５０は、公開変数にアクセスするために必要な各種データをメモリ１０６に展開することで、公開変数の読み書きを行う。たとえば、アクセス要求が上述のＳｕｂｓｃｒｉｐｔｉｏｎ要求である場合には、ＯＰＣ−ＵＡサーバー１５０は、公開変数の定期的な読み込みを実現するために、上述のＳｕｂｓｃｒｉｐｔｉｏｎオブジェクト、上述のＱｕｅｕｅオブジェクト、上述のＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクトをメモリ１０６上に生成する。
【００８０】
このように、ＯＰＣ−ＵＡクライアント３５０からの公開変数のアクセス要求が多いほど、メモリ１０６の使用容量が多くなる。特に、ＯＰＣ−ＵＡサーバー１５０が意図しない悪意のアクセス要求を外部機器３００から受けた場合には、あらゆる変数にアクセスされるため、メモリ１０６の使用容量が多くなる。メモリ１０６の使用容量が上限値を超えると、駆動機器２００を駆動するための制御プログラム１１２が予期せず停止してしまう可能性がある。そのため、ＯＰＣ−ＵＡサーバー１５０は、制御プログラム１１２が停止しないように、メモリ１０６の使用容量を監視する。
【００８１】
以下では、図６を参照して、ＯＰＣ−ＵＡサーバー１５０によるメモリ１０６の監視処理について説明する。図６は、メモリ１０６の使用容量の推移の一例を示す図である。
【００８２】
図６に示されるように、メモリ使用容量に対して、閾値ｔｈ１，ｔｈ２が設定されている。閾値ｔｈ１は、上限値であり、閾値ｔｈ２よりも大きい。閾値ｔｈ１，ｔｈ２は、予め設定されていてもよいし、ユーザによって任意に設定されてもよい。
【００８３】
時刻Ｔ１において、メモリ１０６の使用容量が閾値ｔｈ２を超えたとする。ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量が閾値ｔｈ２（第２閾値）を超えたことに基づいて、メモリ１０６の使用容量が上限の閾値ｔｈ１に近付いていることを示す警告を出力する。警告の出力方法は、任意である。一例として、ＯＰＣ−ＵＡサーバー１５０は、ログとして警告を出力してもよいし、後述のＬＥＤ（Light Emitting Diode）１３８（図７参照）を発光させることで警告を出力してもよいし、音声で警告を出力してもよい。
【００８４】
時刻Ｔ２において、メモリ１０６の使用容量が閾値ｔｈ１を超えたとする。ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量が閾値ｔｈ１（第１閾値）を超えたことに基づいて、ＯＰＣ−ＵＡサーバー１５０のサーバー機能を制約するための制約処理を実行する。このような制約処理の例としては、ＯＰＣ−ＵＡサーバー１５０の状態を正常状態から異常状態に遷移させる処理や、外部機器３００からＯＰＣ−ＵＡサーバー１５０へのアクセス要求に対してエラー応答を行う処理や、ＯＰＣ−ＵＡサーバー１５０によるサーバー機能を停止する処理（シャットダウン処理）などが挙げられる。このとき、ＯＰＣ−ＵＡサーバー１５０は、駆動機器２００の制御プログラム１１２の実行については維持する。これにより、ＯＰＣ−ＵＡサーバー１５０は、自身のサーバー機能のみを制約することができ、駆動機器２００の駆動を阻害せずに済む。
【００８５】
好ましくは、ＯＰＣ−ＵＡサーバー１５０は、自身が使用しているメモリ１０６上の記憶領域を解放した上でサーバー機能を制約する。これにより、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量を減らすことができ、駆動機器２００の制御プログラム１１２の実行が停止されることを確実に防止することができる。図６の例では、メモリ１０６上の記憶領域が解放された時刻Ｔ２において、メモリ１０６の使用容量が大幅に減っている。
【００８６】
好ましくは、ＯＰＣ−ＵＡサーバー１５０は、サーバー機能を制約したことをログとして後述のメモリカード１４０（図７参照）などの外部記憶媒体に書き込む。外部記憶装置にログが書き込まれることで、ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量を削減することができる。また、ＯＰＣ−ＵＡクライアント３５０は、サーバー機能を制約したことをＯＰＣ−ＵＡクライアント３５０に通知する。
【００８７】
＜Ｆ．コントローラ１００の機能構成＞
図７を参照して、コントローラ１００の機能について説明する。図７は、コントローラ１００の機能構成の一例を示す図である。
【００８８】
コントローラ１００は、外部通信インターフェイス１０１と、プログラム実行部１０３と、リソースマネージャ１３０と、イベント管理部１３２と、ツールインターフェイス１３５と、不揮発性メモリ１３６と、ドライバ１３７と、ＬＥＤ１３８と、メモリカードインターフェイス１３９と、ＯＰＣ−ＵＡサーバー１５０とを含む。ＯＰＣ−ＵＡサーバー１５０は、通信スタック１５１と、メインプログラム１５３と、メモリ監視プログラム１５５とを含む。
【００８９】
外部通信インターフェイス１０１は、外部機器３００であるＯＰＣ−ＵＡクライアント３５０Ａ，３５０Ｂとの通信を行う。外部通信インターフェイス１０１には、たとえば、ＥｔｈｅｒＮｅｔ（登録商標）が採用される。また、外部通信インターフェイス１０１は、サポート装置４００との通信を行う。サポート装置４００には、たとえば、制御プログラム１１２の開発ツールである「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」がインストールされている。当該開発ツール上で設計された制御プログラム１１２は、外部通信インターフェイス１０１を介してコントローラ１００にインストールされる。また、コントローラ１００のエラー情報やログデータは、外部通信インターフェイス１０１を介してサポート装置４００に送られる。
【００９０】
リソースマネージャ１３０は、コントローラ１００内の各変数のアドレス情報を保持しており、各変数の管理や、各変数の読み書きなどを担う。一例として、リソースマネージャ１３０は、変数の読取命令（取得命令）を受けた場合には、読取対象の変数にアクセスし、当該変数を読取命令の発信元に送る。また、リソースマネージャ１３０は、変数の書込命令を受けた場合には、書込対象の変数にアクセスし、当該変数を指定された値に書き換える。リソースマネージャ１３０によって管理される変数は、制御プログラム１１２内の変数、コントローラ１００の状態を示すシステム変数１３１などを含む。
【００９１】
イベント管理部１３２は、コントローラ１００内で発生したイベントに応じた処理を実行する。ある局面において、イベント管理部１３２は、メモリ１０６の使用容量が上限に達しそうなことを示すイベントを検知した場合、警告を出力する。当該イベントは、メモリ１０６の使用容量が閾値ｔｈ２（図６参照）を超えたことに基づいて発せられる。警告の出力態様は任意である。一例として、警告の内容が不揮発性メモリ１３６にログとして書き込まれることで、警告が出力される。あるいは、警告の内容がドライバ１３７を介してメモリカード１４０にログとして書き込まれることで、警告が出力される。あるいは、ドライバ１３７介してＬＥＤ１３８が発光することにより、警告が出力される。あるいは、システム変数１３１が警告状態に書き換えられることで、警告が出力される。
【００９２】
他の局面において、イベント管理部１３２は、メモリ１０６の使用容量が上限に達したことを示すイベントを検知した場合、メモリ異常を出力する。当該イベントは、メモリ１０６の使用容量が閾値ｔｈ１（図６参照）を超えたことに基づいて発せられる。メモリ異常の出力態様は任意である。一例として、メモリ異常が不揮発性メモリ１３６にログとして書き込まれることで、異常が出力される。あるいは、メモリ異常がドライバ１３７を介してメモリカード１４０にログとして書き込まれることで、メモリ異常が出力される。あるいは、ドライバ１３７介してＬＥＤ１３８が発光することにより、メモリ異常が出力される。システム変数１３１がメモリ異常状態に書き換えられることで、メモリ異常が出力される。
【００９３】
ドライバ１３７は、ＬＥＤ１３８やメモリカードインターフェイス１３９を正常に動作させるためのソフトウェアである。メモリカードインターフェイス１３９は、メモリカード１４０を脱着するためのソケットである。
【００９４】
ＯＰＣ−ＵＡ通信スタック１５１は、ＯＰＣ−ＵＡクライアント３５０への送信データや、ＯＰＣ−ＵＡクライアント３５０からの受信データを一時的に保持する。メインプログラム１５３は、上述の機能実行部１５２（図１参照）による通信制御機能や制約部１５６（図１参照）によるサーバー停止機能を実現するためのソフトウェアである。メモリ監視プログラム１５５は、上述の監視部１５４によるメモリ１０６の使用容量の監視機能を実現するためのソフトウェアである。
【００９５】
＜Ｇ．コントローラ１００のハードウェア構成＞
図８を参照して、コントローラ１００のハードウェア構成について説明する。図８は、コントローラ１００のハードウェア構成の一例を示す模式図である。
【００９６】
コントローラ１００は、外部通信インターフェイス１０１と、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１０２と、チップセット１０４と、メインメモリとしてのメモリ１０６と、フラッシュメモリ１０８と、内部バスコントローラ１２２と、フィールドバスコントローラ１２４と、メモリカードインターフェイス１３９とを含む。
【００９７】
プロセッサ１０２は、フラッシュメモリ１０８に格納された制御プログラム１１２を読み出して、メモリ１０６に展開して実行することで、駆動機器２００の一例であるサーボドライバ２００Ｂなどに対する任意の制御を実現する。制御プログラム１１２は、コントローラ１００を制御するための各種プログラムを含む。一例として、制御プログラム１１２は、システムプログラム１０９およびユーザプログラム１１０などを含む。システムプログラム１０９は、データの入出力処理や実行タイミング制御などの、コントローラ１００の基本的な機能を提供するための命令コードを含む。ユーザプログラム１１０は、制御対象に応じて任意に設計され、シーケンス制御を実行するためのシーケンスプログラム１１０Ａおよびモーション制御を実行するためのモーションプログラム１１０Ｂとを含む。制御プログラム１１２は、たとえば、ラダー言語やＳＴ（Structured Text）言語で記述されているＰＬＣプログラムである。
【００９８】
チップセット１０４は、各コンポーネントを制御することで、コントローラ１００全体としての処理を実現する。
【００９９】
内部バスコントローラ１２２は、コントローラ１００と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、Ｉ／Ｏユニット１２６が接続されている。
【０１００】
フィールドバスコントローラ１２４は、コントローラ１００とフィールドバスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、サーボドライバ２００Ｂが接続されている。他にも、ロボットコントローラ２００Ａ（図１参照）や視覚センサ２００Ｃ（図１参照）などが接続されてもよい。
【０１０１】
内部バスコントローラ１２２およびフィールドバスコントローラ１２４は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータ（測定値を含む）を取得することができる。また、内部バスコントローラ１２２および／またはフィールドバスコントローラ１２４は、サーボドライバ２００Ｂとの間でデータを遣り取りするためのインターフェイスとしても機能する。
【０１０２】
外部通信インターフェイス１０１は、各種の有線／無線ネットワークを通じたデータの遣り取りを制御する。メモリカードインターフェイス１３９は、外部記憶媒体の一例であるメモリカード１４０（たとえば、ＳＤカード）を着脱可能に構成されており、メモリカード１４０に対してデータを書き込み、メモリカード１４０からデータを読出すことが可能になっている。
【０１０３】
＜Ｈ．コントローラ１００の制御構造＞
図９を参照して、コントローラ１００の制御構造について説明する。図９は、コントローラ１００内のＯＰＣ−ＵＡサーバー１５０によって実現される処理の一部を表わすフローチャートである。図９に示される処理は、コントローラ１００のプロセッサ１０２がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１０４】
ステップＳ１０８において、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０に対する初期化処理を実行する。当該初期化処理は、たとえば、公開変数をメモリ１０６に展開し、外部機器３００から公開変数にアクセス可能な状態にする処理などを含む。
【０１０５】
ステップＳ１１０において、プロセッサ１０２は、上述の機能実行部１５２（図１参照）として、外部機器３００のいずれかから公開変数に対するアクセス要求を受信したか否かを判断する。プロセッサ１０２は、外部機器３００のいずれかから公開変数に対するアクセス要求を受信したと判断した場合（ステップＳ１１０においてＹＥＳ）、制御をステップＳ１１２に切り替える。そうでない場合には（ステップＳ１１０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１２０に切り替える。
【０１０６】
ステップＳ１１２において、プロセッサ１０２は、ステップＳ１１０で受信したアクセス要求で指定される公開変数を取得するために必要な各種データをメモリ１０６に展開し、当該公開変数にアクセスする。一例として、プロセッサ１０２は、「Ｓｕｂｓｃｒｉｐｔｉｏｎ要求」を受信した場合には、アクセス要求の送信元の外部機器３００に指定された公開変数を定期的に送信する機能を有するオブジェクトをメモリ１０６に準備する。Ｓｕｂｓｃｒｉｐｔｉｏｎ処理については図３および図４で説明した通りであるので、その説明については繰り返さない。
【０１０７】
ステップＳ１２０において、プロセッサ１０２は、上述の監視部１５４（図１参照）として、メモリ１０６の使用容量が所定の閾値ｔｈ２（図６参照）を超えたか否かを判断する。閾値ｔｈ２は、予め設定されていてもよいし、ユーザによって任意に設定されてもよい。プロセッサ１０２は、メモリ１０６の使用容量が所定の閾値ｔｈ２を超えたと判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１２２に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１３０に切り替える。
【０１０８】
ステップＳ１２２において、プロセッサ１０２は、メモリ１０６の使用容量が上限に達しそうなことを示す警告を出力する。警告の出力方法は、任意である。一例として、プロセッサ１０２は、メモリカード１４０（図７参照）などにログとして警告を出力してもよいし、ＬＥＤ１３８（図７参照）などを発光させることで警告を出力してもよいし、音声で警告を出力してもよい。また、プロセッサ１０２は、外部機器３００に警告を通知してもよい。
【０１０９】
ステップＳ１３０において、プロセッサ１０２は、メモリ１０６の使用容量が所定の閾値ｔｈ１（図６参照）を超えたか否かを判断する。閾値ｔｈ１は、閾値ｔｈ２よりも大きい。閾値ｔｈ１は、予め設定されていてもよいし、ユーザによって任意に設定されてもよい。プロセッサ１０２は、メモリ１０６の使用容量が所定の閾値ｔｈ１を超えたと判断した場合（ステップＳ１３０においてＹＥＳ）、制御をステップＳ１３２に切り替える。そうでない場合には（ステップＳ１３０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１１０に戻す。
【０１１０】
ステップＳ１３２において、プロセッサ１０２は、上述の制約部１５６（図１参照）として、ＯＰＣ−ＵＡサーバー１５０のサーバー機能を制約する。このような制約処理の例としては、ＯＰＣ−ＵＡサーバー１５０の状態を正常状態から異常状態に遷移させる処理や、外部機器３００からＯＰＣ−ＵＡサーバー１５０へのアクセス要求に対してエラー応答を行う処理や、ＯＰＣ−ＵＡサーバー１５０によるサーバー機能を停止する処理（シャットダウン処理）などが挙げられる。このとき、プロセッサ１０２は、駆動機器２００の制御プログラム１１２の実行については停止しない。好ましくは、プロセッサ１０２は、ＯＰＣ−ＵＡサーバー１５０が使用しているメモリ１０６上の記憶領域を解放した上で、ＯＰＣ−ＵＡサーバー１５０におけるサーバー機能を停止する。
【０１１１】
ステップＳ１４０において、プロセッサ１０２は、サーバー機能の終了指示を受け付けたか否かを判断する。プロセッサ１０２は、サーバー機能の終了指示を受け付けたと判断した場合（ステップＳ１４０においてＹＥＳ）、ＯＰＣ−ＵＡサーバー１５０を停止し、図９に示される処理を終了する。プロセッサ１０２は、サーバー機能の終了指示を受け付けたと判断しなかった場合（ステップＳ１４０においてＮＯ）、制御をステップＳ１４２に切り替える。
【０１１２】
ステップＳ１４２において、プロセッサ１０２は、上述の制約部１５６として、復帰指示を受け付けたか否かを判断する。当該復帰指示は、たとえば、サポート装置４００がコントローラ１００に設定を再転送したことなどに基づいて発せられる。プロセッサ１０２は、復帰指示を受け付けたと判断した場合（ステップＳ１４２においてＹＥＳ）、制御をステップＳ１０８に戻す。ステップＳ１０８で再び初期化処理が実行されることで、サーバー機能の制約が解除される。当該解除処理は、たとえば、ＯＰＣ−ＵＡサーバー１５０の状態を異常状態から正常状態に遷移させる処理などを含む。プロセッサ１０２は、復帰指示を受け付けたと判断しなかった場合（ステップＳ１４２においてＮＯ）、制御をステップＳ１４０に戻す。
【０１１３】
＜Ｉ．まとめ＞
以上のようにして、コントローラ１００は、ＯＰＣ−ＵＡクライアント３５０として機能する外部機器３００との通信を実現するためのＯＰＣ−ＵＡサーバー１５０を含む。ＯＰＣ−ＵＡサーバー１５０は、制御プログラム１１２の変数に対するアクセス要求を外部機器３００のいずれから受信したことに基づいて、アクセス要求で指定された公開変数の取得処理をメモリ１０６の記憶領域の一部を利用して実行し、当該アクセス要求の送信元の外部機器３００に当該変数の値を送信する。そのため、外部機器３００からのアクセス要求が多いほど、メモリ１０６の使用容量は多くなる。
【０１１４】
ＯＰＣ−ＵＡサーバー１５０は、メモリ１０６の使用容量を監視し、当該使用容量が所定の閾値を超えたことに基づいて、メモリ１０６を利用するサーバー機能を制約するための処理を実行する。これにより、ＯＰＣ−ＵＡサーバー１５０のサーバー機能が制約され、コントローラ１００は、ＯＰＣ−ＵＡサーバー１５０のサーバー機能を制約するだけであるので、制御プログラム１１２の実行は停止されない。これにより、コントローラ１００は、メモリ１０６の使用容量が多くなった場合に駆動機器２００に影響を与えずにサーバー機能を制約することができる。
【０１１５】
＜Ｊ．付記＞
以上のように、本実施形態は以下のような開示を含む。
【０１１６】
［構成１］
１つ以上の外部機器と通信するためのサーバー部（１５０）を有し、駆動機器（２００）を制御するための制御装置（１００）であって、
メモリ（１０６）と、
前記駆動機器（２００）の制御プログラム（１１２）の実行命令を受け付けたことに基づいて、当該制御プログラム（１１２）の実行に必要なデータを前記メモリに展開し、当該制御プログラム（１１２）に従って前記駆動機器（２００）を制御するためのプログラム実行部（１０３）と、
前記１つ以上の外部機器（３００）からの要求に応答して、前記メモリ（１０６）上の記憶領域を利用する、前記サーバー部の機能を実行するための機能実行部（１５２）と、
前記メモリ（１０６）の使用容量を監視するための監視部（１５４）と、
前記使用容量が所定の第１閾値を超えたことに基づいて、前記サーバー部（１５０）の前記機能を制約するための処理を実行する制約部（１５６）とを備える、制御装置。
【０１１７】
［構成２］
前記制約部（１５６）は、前記使用容量が前記第１閾値を超えた場合に、前記制御プログラム（１１２）の実行を維持した状態で前記サーバー部（１５０）の前記機能を制約する、構成１に記載の制御装置。
【０１１８】
［構成３］
前記制約部（１５６）は、前記サーバー部（１５０）が使用している前記メモリ（１０６）上の記憶領域を解放した上で、前記サーバー部（１５０）の前記機能を制約する、構成１または２に記載の制御装置。
【０１１９】
［構成４］
前記制御装置は、外部記憶媒体（１４０）に電気的に接続可能に構成されており、
前記制約部（１５６）は、前記サーバー部（１５０）の前記機能を制約したことをログとして前記外部記憶媒体（１４０）に書き込む、構成１〜３のいずれか１項に記載の制御装置。
【０１２０】
［構成５］
前記制約部（１５６）は、前記使用容量が前記第１閾値よりも小さい第２閾値を超えたことに基づいて、警告を出力する、構成１〜４のいずれか１項に記載の制御装置。
【０１２１】
［構成６］
前記サーバー部（１５６）は、ＯＰＣ−ＵＡに従った通信プロトコルを利用して前記１つ以上の外部機器（３００）と通信する、構成１〜５のいずれか１項に記載の制御装置。
【０１２２】
［構成７］
前記制約部（１５６）は、前記サーバー部（１５０）の前記機能の制約を解除する指示を受け付けたことに基づいて、当該制約を解除する、構成１〜６のいずれか１項に記載の制御装置。
【０１２３】
［構成８］
駆動機器（２００）の制御装置（１００）の制御方法であって、
前記制御装置（１００）は、１つ以上の外部機器（３００）と通信するためのサーバー部（１５０）を備え、
前記制御方法は、
前記駆動機器（２００）の制御プログラム（１１２）の実行命令を受け付けたことに基づいて、当該制御プログラム（１１２）の実行に必要なデータを前記制御装置（１００）のメモリ（１０６）に展開し、当該制御プログラム（１１２）に従って前記駆動機器（２００）を制御するステップと、
前記１つ以上の外部機器（３００）からの要求に応答して、前記メモリ（１０６）上の記憶領域を利用する、前記サーバー部（１５０）における機能を実行するステップと、
前記メモリ（１０６）の使用容量を監視するステップと、
前記使用容量が所定の第１閾値を超えたことに基づいて、前記サーバー部（１５０）の前記機能を制約するための処理を実行するステップとを備える、制御方法。
【０１２４】
［構成９］
駆動機器（２００）の制御装置（１００）によって実行されるプログラムであって、
前記制御装置（１００）は、１つ以上の外部機器（３００）と通信するためのサーバー部（１５０）を備え、
前記プログラムは、前記制御装置（１００）に、
前記駆動機器（２００）の制御プログラム（１１２）の実行命令を受け付けたことに基づいて、当該制御プログラム（１１２）の実行に必要なデータを前記制御装置（１００）のメモリ（１０６）に展開し、当該制御プログラム（１１２）に従って前記駆動機器（２００）を制御するステップと、
前記１つ以上の外部機器（３００）からの要求に応答して、前記制御装置（１００）のメモリ（１０６）上の記憶領域を利用する、前記サーバー部（１５０）における機能を実行するステップと、
前記メモリ（１０６）の使用容量を監視するステップと、
前記使用容量が所定の第１閾値を超えたことに基づいて、前記サーバー部（１５０）の前記機能を制約するための処理を実行するステップとを実行させる、プログラム。
【０１２５】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１２６】
１００  コントローラ、１０１  外部通信インターフェイス、１０２  プロセッサ、１０３  プログラム実行部、１０４  チップセット、１０６  メモリ、１０８  フラッシュメモリ、１０９  システムプログラム、１１０  ユーザプログラム、１１０Ａ  シーケンスプログラム、１１０Ｂ  モーションプログラム、１１１  変数、１１２  制御プログラム、１２２  内部バスコントローラ、１２４  フィールドバスコントローラ、１２６  Ｉ／Ｏユニット、１３０  リソースマネージャ、１３１  システム変数、１３２  イベント管理部、１３５  ツールインターフェイス、１３６  不揮発性メモリ、１３７  ドライバ、１３９  メモリカードインターフェイス、１４０  メモリカード、１５０  ＯＰＣ−ＵＡサーバー、１５１  通信スタック、１５２  通信制御部、１５３  メインプログラム、１５４  監視部、１５５  メモリ監視プログラム、１５６  停止部、２００  駆動機器（２００）、２００Ａ  ロボットコントローラ、２００Ｂ  サーボドライバ、２００Ｃ  視覚センサ、２０１Ａ  アームロボット、２０１Ｂ  サーボモータ、３００  外部機器、３５０Ａ，３５０Ｂ，３５０Ｃ  ＯＰＣ−ＵＡクライアント、３５２  Ｓｕｂｓｃｒｉｐｔｉｏｎオブジェクト、３５４Ａ〜３５４Ｃ  Ｑｕｅｕｅオブジェクト、３５６Ａ〜３５６Ｃ  ＭｏｎｉｔｅｒｅｄＩｔｅｍオブジェクト、４００  サポート装置、４０１  設定画面。
【図１】
2019096210.tif 000003
【図２】
2019096210.tif 000004
【図３】
2019096210.tif 000005
【図４】
2019096210.tif 000006
【図５】
2019096210.tif 000007
【図６】
2019096210.tif 000008
【図７】
2019096210.tif 000009
【図８】
2019096210.tif 000010
【図９】
2019096210.tif 000011