(57)【要約】【課題】高速に生成されるデータを含むレコードを大容量のストレージへ格納するための構成を提供する必要がある。【解決手段】制御対象を制御する制御装置が提供される。制御装置は、制御対象に関するデータを含むレコードを時系列に格納する時系列データベースと、予め定められた周期毎に時系列データベースへ格納すべきレコードを構成するためのデータを生成するデータ生成手段と、データ生成手段により生成されるデータを順次格納する、揮発性の主記憶装置上に形成されるノンブロッキングキューとを含む。【選択図】図６
2018173865.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御する制御装置であって、
前記制御対象に関するデータを含むレコードを時系列に格納する時系列データベースと、
予め定められた周期毎に前記時系列データベースへ格納すべきレコードを構成するためのデータを生成するデータ生成手段と、
前記データ生成手段により生成されるデータを順次格納する、揮発性の主記憶装置上に形成されるノンブロッキングキューとを備える、制御装置。
【請求項２】
前記時系列データベースは、前記ノンブロッキングキューに格納されたデータを順次読出して、前記時系列データベースへ格納するデータベースマネジャを含む、請求項１に記載の制御装置。
【請求項３】
前記ノンブロッキングキューは、前記主記憶装置上に論理的に用意される複数の共有バッファと、前記複数の共有バッファにおけるデータの格納有無を管理する空きリストとにより実装され、
前記データ生成手段により生成されるデータは、前記空きリストを参照することで特定される共有バッファに格納され、当該データを格納された共有バッファは、先にデータが格納されている共有バッファと論理的に結合される、請求項２に記載の制御装置。
【請求項４】
前記論理的に結合された共有バッファのうちデータが読出された共有バッファは論理的な結合から解放される、請求項３に記載の制御装置。
【請求項５】
前記時系列データベースは、前記ノンブロッキングキューから読出されたデータを一時的に格納する書込みバッファをさらに含み、
前記データベースマネジャは、前記書込みバッファに格納された複数のデータをレコードとしてデータベースファイルへ出力する、請求項２〜４のいずれか１項に記載の制御装置。
【請求項６】
前記データ生成手段は、前記データを生成する一回の処理が前記予め定められた周期内で完了するように構成されており、
前記データベースマネジャは、プロセッサの空き期間に動作するように構成されている、請求項２〜５のいずれか１項に記載の制御装置。
【請求項７】
前記データ生成手段を実現するプロセスと前記データベースマネジャを実現するプロセスとは、互いに異なる演算処理回路によって実行される、請求項６に記載の制御装置。
【請求項８】
前記ノンブロッキングキューへのデータの格納を含む、前記時系列データベースに係る動作の状態を示す情報を出力する状態情報出力手段をさらに備える、請求項１〜７のいずれか１項に記載の制御装置。
【請求項９】
前記ノンブロッキングキューのサイズは、前記データ生成手段がデータを周期的に生成するデータ速度に基づいて、格納されるデータがオーバーフローしないように設定される、請求項１〜８のいずれか１項に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象に関するデータを収集および格納する制御装置に関する。
【背景技術】
【０００２】
様々な生産現場において、ＰＬＣ（プログラマブルコントローラ）などの制御装置を用いたＦＡ（Factory Automation）技術が広く普及している。このような制御装置が取り扱うデータを事後的に解析するようなニーズがある。
【０００３】
例えば、特開２００４−１９９６７０号公報（特許文献１）は、ＰＬＣのＣＰＵユニットから確実かつ高速でデータ収集ができるデータ収集装置を開示する。より具体的には、特許文献１は、ＰＬＣのＰＬＣバスに接続されてＣＰＵユニットからＩＯデータを収集するデータ収集装置を開示する。
【０００４】
ＩＣＴ（Information and Communication Technology）の進歩によって、制御装置においても大量のデータを収集および格納することが可能になりつつある。このような状況において、ＰＬＣに接続されるデータ収集装置の形ではなく、ＰＬＣ自体のデータ収集処理を拡張させるという試みがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−１９９６７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＰＬＣにおいては、制御周期と同期して入出力データが短い周期で更新されるため、これらの入出力データを収集するためには、大容量のストレージを用意する必要がある。一方で、大容量のストレージに対するアクセス速度（特に、書込み速度）は、ＲＡＭ（Random Access Memory）などの主記憶装置に対するアクセス速度に比較して遅い。そのため、高速に生成されるデータを含むレコードを大容量のストレージへ格納するための構成を提供する必要がある。
【課題を解決するための手段】
【０００７】
本発明のある局面に従えば、制御対象を制御する制御装置が提供される。制御装置は、制御対象に関するデータを含むレコードを時系列に格納する時系列データベースと、予め定められた周期毎に時系列データベースへ格納すべきレコードを構成するためのデータを生成するデータ生成手段と、データ生成手段により生成されるデータを順次格納する、揮発性の主記憶装置上に形成されるノンブロッキングキューとを含む。
【０００８】
この局面によれば、データ生成手段から、時系列データベースへ格納されるレコードを構成するためのデータが生成されると、当該生成されたデータは一旦ノンブロッキングキューに格納された上で、時系列データベースに格納される。これにより、高速に生成されるデータを含むレコードであっても、ストレージなどで構成される時系列データベースへ確実に格納することができる。
【０００９】
好ましくは、時系列データベースは、ノンブロッキングキューに格納されたデータを順次読出して、時系列データベースへ格納するデータベースマネジャを含む。
【００１０】
この局面によれば、ノンブロッキングキューにデータを書込むデータ生成手段とは別に存在する、データベースマネジャがノンブロッキングキューからデータを読出して、時系列データベースへ格納するので、それぞれの処理を独立化でき、データ収集の速度の制御を容易化できる。
【００１１】
好ましくは、ノンブロッキングキューは、揮発性の主記憶装置上に論理的に用意される複数の共有バッファと、複数の共有バッファにおけるデータの格納有無を管理する空きリストとにより実装され、データ生成手段により生成されるデータは、空きリストを参照することで特定される共有バッファに格納され、当該データを格納された共有バッファは、先にデータが格納されている共有バッファと論理的に結合される。
【００１２】
この局面によれば、揮発性の主記憶装置上に用意される複数の共有バッファを用いて、ノンブロッキングキューを論理的に構成できるので、ノンブロッキングキューのサイズ変更などを容易に行うことができる。
【００１３】
好ましくは、論理的に結合された共有バッファのうちデータが読出された共有バッファは論理的な結合から解放される。
【００１４】
この局面によれば、データが読出されると共有バッファは順次解放されるので、予め確報される共有バッファの数、すなわちバッファプールのサイズが過剰に大きくなることを抑制できる。
【００１５】
好ましくは、時系列データベースは、ノンブロッキングキューから読出されたデータを一時的に格納する書込みバッファをさらに含み、データベースマネジャは、書込みバッファに格納された複数のデータをレコードとしてデータベースファイルへ出力する。
【００１６】
この局面によれば、ノンブロッキングキューから読出された複数のデータをまとめて１つのレコードとしてデータベースファイルへ出力できるので、ストレージの書込み特性に応じた処理を実現できる。
【００１７】
好ましくは、データ生成手段は、データを生成する一回の処理が予め定められた周期内で完了するように構成されており、データベースマネジャは、プロセッサの空き期間に動作するように構成されている。
【００１８】
この局面によれば、制御対象に対する制御演算とは直接的には関係ない付加的な処理を提供するデータベースマネジャをプロセッサの空き期間に動作させることで、制御演算を実現するために必要な処理へ影響を与えることを抑制できる。
【００１９】
好ましくは、データ生成手段を実現するプロセスとデータベースマネジャを実現するプロセスとは、互いに異なる演算処理回路によって実行される。
【００２０】
この局面によれば、レコードを構成するためのデータを生成する処理と、当該生成されたデータを含むレコードを格納する処理とを互いに独立して実行できるので、全体的なスループットを向上できる。
【００２１】
好ましくは、制御装置は、ノンブロッキングキューへのデータの格納を含む、時系列データベースに係る動作の状態を示す情報を出力する状態情報出力手段をさらに含む。
【００２２】
この局面によれば、出力される動作の状態を示す情報を参照することで、ノンブロッキングキューおよび時系列データベースの性能を確認することができ、その確認結果に基づいて、サイズなどのチューニングを容易に行うことができる。
【００２３】
好ましくは、ノンブロッキングキューのサイズは、データ生成手段がデータを周期的に生成するデータ速度に基づいて、格納されるデータがオーバーフローしないように設定される。
【００２４】
この局面によれば、データ生成手段により周期的に生成されるデータのデータ速度に基づいて、ノンブロッキングキューの適切なサイズを予め設定できるので、運用後の異常動作を防止できる。
【発明の効果】
【００２５】
本発明によれば、高速に生成されるデータを含むレコードを大容量のストレージへ格納するための構成を提供できる。
【図面の簡単な説明】
【００２６】
【図１】本実施の形態に係る制御システムの全体構成例を示す模式図である。
【図２】本実施の形態に係る制御装置のハードウェア構成例を示すブロック図である。
【図３】本実施の形態に係る制御装置のソフトウェア構成例を示すブロック図である。
【図４】本実施の形態に係る制御装置における時系列データベースに関する処理の要部を示す模式図である。
【図５】本実施の形態に係る制御装置における時系列データベースに格納されるレコードのデータ構造の一例を示す図である。
【図６】本実施の形態に係る制御装置における時系列データベースへの時系列データの書込み処理を実現する構成を示す模式図である。
【図７】本実施の形態に係る制御装置におけるノンブロッキング処理を説明するための模式図である。
【図８】本実施の形態に係る制御装置における時系列データベースへの格納対象となる変数および周期を設定するためのユーザインターフェイス画面の一例を示す図である。
【図９】本実施の形態に係る制御装置が出力する時系列データベースに関するステータス情報の一例を示す図である。
【図１０】本実施の形態に係る制御装置における処理例を示すタイムチャートである。
【図１１】本実施の形態に係る制御装置の時系列データベースに格納される時系列データを用いたアプリケーションの一例を説明するための図である。
【発明を実施するための形態】
【００２７】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２８】
＜Ａ．制御システムの全体構成例＞
まず、本実施の形態に係る制御装置を含む制御システム１の全体構成例について説明する。
【００２９】
図１は、本実施の形態に係る制御システム１の全体構成例を示す模式図である。図１を参照すると、本実施の形態に係る制御システム１は、主たる構成要素として、制御対象を制御する制御装置１００を含む。
【００３０】
制御装置１００は、ＰＬＣ（プログラマブルコントローラ）などの、一種のコンピュータとして具現化されてもよい。制御装置１００は、フィールドバス２を介してフィールド装置群８と接続されるとともに、フィールドバス４を介して１または複数の表示装置３００と接続される。制御装置１００は、それぞれのバスまたはネットワークを介して、接続された装置との間でデータを遣り取りする。一般的に「フィールドバス」は、「フィールドネットワーク」とも称されるが、説明の簡素化のため、以下の説明においては、「フィールドバス」と総称する。すなわち、本明細書の「フィールドバス」は、「フィールドバス」に加えて「フィールドネットワーク」を含み得る。
【００３１】
制御装置１００は、製造装置や設備を制御するための各種演算を実行する制御演算を行う。制御装置１００は、制御演算処理に加えて、フィールド装置群８にて計測され、制御装置１００へ転送されるデータ（以下、「入力データ」とも称す。）や制御演算処理によって算出される各種のデータを取得する入出力処理を行う。
【００３２】
制御装置１００は、時系列データベース１８０をさらに有している。時系列データベース１８０は、後述するように、入出力処理により取得される各種データを時系列に格納する。以下の説明においては、典型例として、時系列データベース１８０が制御装置１００内に配置される例を示すが、これに限られることなく、制御装置１００の外部（例えば、データベースサーバなどの上位システム）に配置されていてもよい。以下の説明においては、「データベース」を「ＤＢ」とも記す。
【００３３】
より具体的には、制御装置１００は、指定された、制御対象に関するデータを含むレコードを生成するデータ生成処理を行い、時系列データベース１８０は、データ生成処理により生成されるデータを時系列に格納する。
【００３４】
時系列データベース１８０に格納されるレコードの群を「時系列データ」とも称す。本明細書において、「時系列データ」は、任意の対象についてのデータ（観測値）の時間的な変化を連続的（あるいは、一定間隔をおいて不連続）に観測して得られる一連の値を意味する。
【００３５】
本明細書において「観測値」は、制御装置１００での制御演算において利用可能な値（実値）を総称する概念であり、典型的には、制御対象から取得されて制御演算に入力される値（フィールドから取得された測定値など）、取得された入力値に基づいて制御演算によって決定される制御対象に対する出力値（フィールドへ与えられる指令値など）、制御演算の過程において算出される演算値（任意の変数値）などを含み得る。すなわち、「観測値」は、制御装置１００においてデータとして格納できる、あるいは、制御装置１００からデータとして外部出力できる任意の値を包含するものである。
【００３６】
フィールドバス２およびフィールドバス４は、データの到達時間が保証される、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）などが知られている。また、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などを採用してもよい。
【００３７】
フィールド装置群８は、制御対象または制御に関連する製造装置や生産ラインなど（以下、「フィールド」とも総称する。）から入力データを収集する装置を含む。このような入力データを収集する装置としては、入力リレーや各種センサ（例えば、アナログセンサ、温度センサ、振動センサなど）などが想定される。フィールド装置群８は、さらに、制御装置１００にて生成される指令（以下、「出力データ」とも称す。）に基づいて、フィールドに対して何らかの作用を与える装置を含む。このようなフィールドに対して何らかの作用を与える装置としては、出力リレー、コンタクタ、サーボドライバおよびサーボモータ、その他任意のアクチュエータが想定される。
【００３８】
フィールド装置群８は、フィールドバス２を介して、制御装置１００との間で、入力データおよび出力データを含むデータを遣り取りする。図１に示す構成例においては、フィールド装置群８は、リモートＩ／Ｏ（Input/Output）装置１２と、リレー群１４と、画像センサ１８およびカメラ２０と、サーボドライバ２２およびサーボモータ２４とを含む。フィールド装置群８としては、これらに限られることなく、入力データを収集できるデバイス、または、出力データに基づく何らかのアクションができるデバイスであれば、どのようなものを採用してもよい。
【００３９】
リモートＩ／Ｏ装置１２は、フィールドバス２を介して通信を行う通信カプラと、入力データの取得および出力データの出力を行うための入出力部（以下、「Ｉ／Ｏユニット」とも称す。）とを含む。このようなＩ／Ｏユニットを介して、制御装置１００とフィールドとの間で入力データおよび出力データが遣り取りされる。図１には、リレー群１４を介して、入力データおよび出力データとして、デジタル信号が遣り取りされる例が示されている。
【００４０】
Ｉ／Ｏユニットは、フィールドバスに直接接続されるようにしてもよい。図１には、フィールドバス２にＩ／Ｏユニット１６が直接接続されている例を示す。
【００４１】
画像センサ１８は、カメラ２０によって撮像された画像データに対して、パターンマッチングなどの画像計測処理を行って、その処理結果を制御装置１００へ出力する。
【００４２】
サーボドライバ２２は、制御装置１００からの出力データ（例えば、位置指令や速度指令など）に従って、サーボモータ２４を駆動する。
【００４３】
上述のように、フィールドバス２を介して、制御装置１００とフィールド装置群８との間でデータが遣り取りされることになるが、これらの遣り取りされるデータは、数１００μｓｅｃオーダ〜数１０ｍｓｅｃオーダのごく短い周期で更新されることになる。なお、このような遣り取りされるデータの更新処理は、Ｉ／Ｏリフレッシュ処理とも称される。
【００４４】
また、フィールドバス４を介して制御装置１００と接続される表示装置３００は、ユーザからの操作を受けて、制御装置１００に対してユーザ操作に応じたコマンドなどを出力するとともに、制御装置１００での演算結果などをグラフィカルに表示する。
【００４５】
制御装置１００は、サポート装置２００が接続可能になっていてもよい。サポート装置２００は、制御装置１００が制御対象を制御するために必要な準備を支援する装置である。具体的には、サポート装置２００は、制御装置１００で実行されるプログラムの開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）、制御装置１００および制御装置１００に接続される各種デバイスのパラメータ（コンフィギュレーション）を設定するための設定環境、生成したユーザプログラムを制御装置１００へ出力する処理、制御装置１００上で実行されるユーザプログラムなどをオンラインで修正・変更する処理、などを提供する。
【００４６】
制御装置１００は、さらに、入出力処理により取得されたデータおよび／または時系列データベース１８０に格納されたデータを外部装置へ出力するゲートウェイ処理も有している。
【００４７】
外部装置として、図１には、制御装置１００と上位ネットワーク６を介して接続される、製造実行システム（ＭＥＳ：Manufacturing Execution System）４００およびＩｏＴ（Internet of Things）サービス４５０を典型例として示す。制御装置１００は、これらの外部システムや外部サービスに対して、制御対象の製造装置や設備からの情報を提供することができる。
【００４８】
製造実行システム４００は、制御対象の製造装置や設備からの情報を取得して、生産全体を監視および管理するものであり、オーダ情報、品質情報、出荷情報などを扱うこともできる。製造実行システム４００の内部、あるいは、製造実行システム４００と並列して、情報を格納するためのデータベースを配置してもよい。制御装置１００は、制御対象の製造装置や設備での製造状態などを示す製造データを製造実行システム４００から取得することができる。
【００４９】
ＩｏＴサービス４５０は、上位ネットワーク６に接続された、あるいは、上位ネットワーク６に接続されるインターネットに接続された、１または複数のコンピュータで構成される、一種のクラウドサービスが想定される。ＩｏＴサービス４５０を構成するシステムは、通信処理を行い、制御装置１００から送信された任意の情報を１または複数のプロセッサ（例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro-Processing Unit）、ＧＰＵ（Graphics Processing Unit）など）で処理するとともに、所定の出力を行うシステムをいう。
【００５０】
ＩｏＴサービス４５０としては、制御対象の製造装置や設備からの情報を取得して、マクロ的またはミクロ的な分析などを行うシステムを想定している。例えば、制御対象の製造装置や設備からの情報に含まれる何らかの特徴的な傾向を抽出するデータマイニングや、制御対象の設備や機械からの情報に基づく機械学習を行うための機械学習ツールなどが想定される。
【００５１】
制御装置１００は、他の制御装置１００と通信可能に接続されることもある。
＜Ｂ．制御装置のハードウェア構成例＞
次に、本実施の形態に係る制御システム１を構成する制御装置１００のハードウェア構成例について説明する。
【００５２】
図２は、本実施の形態に係る制御装置１００のハードウェア構成例を示すブロック図である。図２を参照すると、制御装置１００は、演算処理部および１または複数のＩ／Ｏユニット１２４−１，１２４−２，…を含む。
【００５３】
制御装置１００は、プロセッサ１０２と、チップセット１０４と、主記憶装置１０６と、内部ストレージ１０８と、上位ネットワークコントローラ１１０と、ＵＳＢ（Universal Serial Bus）コントローラ１１２と、外部ストレージインターフェイス１１４と、ローカルバスコントローラ１２２と、フィールドバスコントローラ１１８，１２０と、カウンタ１２６と、ＲＴＣ（Real Time Clock）１２８とを含む。
【００５４】
プロセッサ１０２は、ＣＰＵ、ＭＰＵ、ＧＰＵなどで構成され、内部ストレージ１０８に格納された各種プログラムを読出して、主記憶装置１０６に展開して実行することで、制御対象に応じた制御、および、後述するような各種処理を実現する。内部ストレージ１０８は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの不揮発性記憶装置などで構成される。主記憶装置１０６は、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などの揮発性記憶装置などで構成される。
【００５５】
チップセット１０４は、プロセッサ１０２と各デバイスを制御することで、制御装置１００全体としての処理を実現する。
【００５６】
内部ストレージ１０８には、基本的な動作を実現するためのシステムプログラムに加えて、制御対象の製造装置や設備に応じて作成されるユーザプログラムが格納される。
【００５７】
上位ネットワークコントローラ１１０は、上位ネットワーク６を介して、製造実行システム４００やＩｏＴサービス４５０（図１参照）などとの間のデータを遣り取りする。上位ネットワークコントローラ１１０は、典型的には、ＡＳＩＣやＦＰＧＡといった専用回路を用いて実現される。
【００５８】
ＵＳＢコントローラ１１２は、ＵＳＢ接続を介してサポート装置２００との間のデータの遣り取りを制御する。ＵＳＢコントローラ１１２は、典型的には、ＡＳＩＣやＦＰＧＡといった専用回路を用いて実現される。
【００５９】
外部ストレージインターフェイス１１４は、外部ストレージ１１６を着脱可能に構成されており、外部ストレージ１１６に対してデータを書込み、外部ストレージ１１６から各種データ（ユーザプログラムやトレースデータなど）を読出すことが可能になっている。外部ストレージ１１６は、例えば、ＳＤカードなどのフラッシュメモリからなる揮発性記憶装置に相当する。
【００６０】
カウンタ１２６は、制御装置１００における各種処理の実行タイミングを管理するための時刻基準として用いられる。カウンタ１２６は、典型的には、所定周期毎にカウンタ値をインクリメントまたはデクリメントする。カウンタ１２６として、プロセッサ１０２を駆動するシステムバス上に配置された、ハードウェアタイマーである高精度イベントタイマー（ＨＰＥＴ：High Precision Event Timer）などを用いて実装してもよいし、あるいは、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field-Programmable Gate Array）などの専用回路を用いて実装してもよい。
【００６１】
ＲＴＣ１２８は、計時動作を行う一種のカウンタであり、現在時刻をプロセッサ１０２などへ提供する。
【００６２】
ローカルバスコントローラ１２２は、制御装置１００に搭載されるＩ／Ｏユニット１２４−１，１２４−２，…との間でデータを遣り取りするインターフェイスである。ローカルバスコントローラ１２２は、典型的には、ＡＳＩＣやＦＰＧＡといった専用回路を用いて実現されるが、ソフトウェア実装で実現してもよい。ソフトウェア実装を採用する場合には、ローカルバスコントローラ１２２は、主として、プロセッサ、主記憶装置、ストレージなどで構成され、プロセッサがストレージに格納されたシステムプログラム（ファームウェア）などを読出して、主記憶装置に展開して実行することで、必要な処理を実現する。
【００６３】
ローカルバスコントローラ１２２は、ローカルバスを介して接続される他のデバイスである、Ｉ／Ｏユニット１２４−１，１２４−２，…との間でタイミングを管理するための時刻基準として用いられるカウンタ１２３を有している。同様に、Ｉ／Ｏユニット１２４−１，１２４−２，…の各々も、ローカルバスコントローラ１２２および他のＩ／Ｏユニットとの間でタイミングを管理するための時刻基準として用いられるカウンタ１２５を有している。カウンタ１２３およびカウンタ１２５については、上述のカウンタ１２６と同様の構成を採用できる。
【００６４】
フィールドバスコントローラ１１８は、フィールドバス２を介した他のデバイスとの間のデータの遣り取りを制御する。フィールドバスコントローラ１１８は、典型的には、ＡＳＩＣやＦＰＧＡといった専用回路を用いて実現されるが、ソフトウェア実装で実現してもよい。ソフトウェア実装を採用する場合には、フィールドバスコントローラ１１８は、主として、プロセッサ、主記憶装置、ストレージなどで構成され、プロセッサがストレージに格納されたシステムプログラム（ファームウェア）などを読出して、主記憶装置に展開して実行することで、必要な処理を実現する。フィールドバスコントローラ１１８は、他のデバイスとの間でタイミングを管理するための時刻基準として用いられるカウンタ１１９を有している。
【００６５】
同様に、フィールドバスコントローラ１２０は、フィールドバス４を介した他のデバイスとの間でデータを遣り取りする。フィールドバスコントローラ１２０は、典型的には、ＡＳＩＣやＦＰＧＡといった専用回路を用いて実現されるが、ソフトウェア実装で実現してもよい。ソフトウェア実装を採用する場合には、フィールドバスコントローラ１２０は、主として、プロセッサ、主記憶装置、ストレージなどで構成され、プロセッサがストレージに格納されたシステムプログラム（ファームウェア）などを読出して、主記憶装置に展開して実行することで、必要な処理を実現する。フィールドバスコントローラ１２０は、他のデバイスとの間でタイミングを管理するための時刻基準として用いられるカウンタ１２１を有している。
【００６６】
また、各デバイスも、フィールドバスコントローラ１１８またはフィールドバスコントローラ１２０との間でタイミングを管理するための時刻基準として用いられるカウンタを有している。
【００６７】
カウンタ１１９およびカウンタ１２１ならびに各デバイスが有するカウンタについては、上述のカウンタ１２６と同様の構成を採用できる。
【００６８】
フィールドバスコントローラ１１８，１２０は、フィールドバスを介した定周期通信を行うための通信マスターとして動作し、フィールドバスに接続されている各デバイスが有するカウンタが示すカウンタ値とカウンタ１１９，１２１が示すカウンタ値との差分を逐次監視して、必要に応じて、カウンタ値にずれが発生しているデバイスに対して補正を指示するための同期信号を出力する。このように、フィールドバスコントローラ１１８，１２０は、デバイスのカウンタが示すカウンタ値をカウンタ１１９，１２１が示すカウンタ値と一致させるための指令をデバイスへ与える同期管理処理を行う。
【００６９】
本実施の形態に係る制御装置１００は、時系列データベース１８０（図１参照）を有しており、時系列データベース１８０は、内部ストレージ１０８および／または外部ストレージ１１６が提供する記憶領域を利用して実現されてもよい。以下の説明においては、内部ストレージ１０８および外部ストレージ１１６を単に「ストレージ」と総称することもある。また、「ストレージ」との対比で、揮発性の主記憶装置１０６を「メモリ」と称することもある。
【００７０】
なお、本実施の形態における「時系列データベース１８０」は、データベースファイルを格納する記憶領域に加えて、データベースファイルの生成、書込み、読出しといった各種操作を実現するためのプロセッサ１０２などによる処理、ならびに、各種操作を実現するためのバッファリング領域あるいはワーキング領域を含むものである。
【００７１】
図２には、プロセッサ１０２がプログラムを実行することで必要な処理が提供される構成例を示したが、これらの提供される処理の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、制御装置１００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００７２】
上述の図１および図２に示す制御システムにおいては、制御装置１００、サポート装置２００および表示装置３００がそれぞれ別体として構成されているが、これらの処理の全部または一部を単一の装置に集約した構成を採用してもよい。
【００７３】
＜Ｃ．制御装置のソフトウェア構成例＞
次に、本実施の形態に係る制御システム１を構成する制御装置１００のソフトウェア構成例について説明する。
【００７４】
図３は、本実施の形態に係る制御装置１００のソフトウェア構成例を示すブロック図である。図３を参照すると、制御装置１００は、ＰＬＣエンジン１５０と、時系列データベース１８０と、上位接続プログラム１９２と、ゲートウェイプログラム１９４とを含む。
【００７５】
ＰＬＣエンジン１５０は、典型的には、制御装置１００のプロセッサ１０２が、内部ストレージ１０８に格納されているシステムプログラムを読出して主記憶装置１０６に展開して実行することで各種プログラムの実行環境が提供され、当該実行環境下において、各種プログラムを実行することができる。
【００７６】
より具体的には、ＰＬＣエンジン１５０は、制御プログラム１５２と、変数管理プログラム１６０と、スケジューラプログラム１７０と、入力プログラム１７２と、出力プログラム１７４とを選択的に実行可能に構成される。ＰＬＣエンジン１５０には、ＮＢＱ（Non-Blocking Queue：ノンブロッキングキュー）１５８が実現されている。
【００７７】
ＮＢＱ１５８は、例えば、メモリ（揮発性の主記憶装置１０６）上に用意される、複数のタスクまたはプロセスからのアクセスを共用する共有メモリ領域を用いて実現される。ＮＢＱ１５８は、主記憶装置１０６上の共有メモリ領域に加えて、システムプログラムをプロセッサ１０２が実行することで提供されるバッファ管理処理によって実現される。バッファ管理処理は、共有メモリ領域内に所定の大きさで区切った複数のデータ領域（後述する、共有バッファ）からなるバッファプールを規定するとともに、各共有バッファの状態（空き、データ格納中、予約など）などを管理する処理を含む。バッファ管理処理を実現するためのシステムプログラムは、空バッファへのデータ書込みなどの処理を実現するためのＣＡＳ（Compare And Swap）命令などのプロセッサ命令を含む。
【００７８】
また、ＮＢＱ１５８を実現するためのバッファ管理処理は、制御プログラム１５２からのデータ書込みを受付けるインターフェイスと、データベースマネジャ１８２からのデキューを受付けるインターフェイスとを有している。このようなそれぞれのインターフェイスによって、データベース書込みプログラム１５６から時系列データベース１８０までの論理的なデータ転送経路において、それぞれがＮＢＱ１５８を利用することができる。
【００７９】
変数管理プログラム１６０と、スケジューラプログラム１７０と、入力プログラム１７２と、出力プログラム１７４とについては、システムプログラムの一部として実装されてもよい。この場合には、これらのプログラムが提供するそれぞれの処理を単一のシステムプログラムが提供するようにしてもよい。
【００８０】
制御プログラム１５２は、典型的には、ユーザプログラム１５４と、データベース書込みプログラム１５６とにより構成される。ユーザプログラム１５４は、制御演算処理を行う主たる部分に相当し、制御装置１００の制御対象の製造装置や設備などに応じて任意に構成することができる。ユーザプログラム１５４は、例えば、ファンクションブロックなどを利用したラダーロジックなどで規定することができる。
【００８１】
データベース書込みプログラム１５６は、制御装置１００のデータ生成処理の少なくとも一部を提供するコードに相当し、ユーザプログラム１５４内に規定された命令によって、予め定められた周期毎に呼び出され、時系列データベース１８０へ格納すべきレコードを構成するためのデータを生成する。より具体的には、データベース書込みプログラム１５６から時系列データベース１８０へのデータ転送経路には、ＮＢＱ１５８が配置されており、データベース書込みプログラム１５６は、指定されたデータを時系列データベース１８０に直接書込むのではなく、ＮＢＱ１５８へ書込む。
【００８２】
ＮＢＱ１５８は、時系列データベース１８０へのデータ書込みの完了を待つことなく、データベース書込みプログラム１５６の処理を続行させるための、一種のバッファである。ＮＢＱ１５８には、データベース書込みプログラム１５６からのデータがキューの形で格納される。ＮＢＱ１５８は、データベース書込みプログラム１５６により生成されるデータを順次格納する。ＮＢＱ１５８に格納されたデータ（キュー）は、順次読出されて、時系列データベース１８０に格納される。
【００８３】
なお、データベース書込みプログラム１５６にシリアライズ通信プログラムを結合させてもよい。シリアライズ通信プログラムは、データベース書込みプログラム１５６から時系列データベース１８０に対して書込まれるデータに対してシリアライズ処理を行う。より具体的には、シリアライズ通信プログラムは、ＰＬＣエンジン１５０により実行され、時系列データを格納可能なバイト列に変換する処理（シリアライズ）を実行する。対象のデータは、時系列データベース１８０内への格納前に、シリアライズ処理により所定のバイト列に変換される。
【００８４】
時系列データベース１８０の少なくとも一部は、ストレージ（内部ストレージ１０８、または、外部ストレージ１１６（図２参照））を利用して構成される。時系列データベース１８０は、データベース書込みプログラム１５６からのデータが時系列に格納されるデータベースファイル１８６に加えて、データベースマネジャ１８２および書込みバッファ１８４を含む。
【００８５】
データベースマネジャ１８２は、典型的には、制御装置１００のプロセッサ１０２が、内部ストレージ１０８に格納されているシステムプログラムを読出して主記憶装置１０６に展開して実行することで実現される。データベースマネジャ１８２は、データベースファイル１８６へのレコードの追加、および、外部からの要求に応じたデータベースファイル１８６を構成するレコードの検索および抽出を担当する。データベースマネジャ１８２は、ＮＢＱ１５８に格納されたデータを順次読出して、データベースファイル１８６へ追加する。
【００８６】
書込みバッファ１８４は、例えば、主記憶装置１０６上に用意される記憶領域、または、ストレージに内蔵されるキャッシュメモリ上に用意される記憶領域を用いて実現される。
【００８７】
データベースファイル１８６には、データベース書込みプログラム１５６により書込まれる時系列データがレコードの形で順次格納される。データベースファイル１８６には、入力データ、出力データ、制御プログラム１５２による制御演算において算出される演算データ、製造データ、イベントデータの少なくとも一部が時系列に格納されることになる。
【００８８】
データベース書込みプログラム１５６と、ＮＢＱ１５８と、時系列データベース１８０とを含む全体処理の詳細については、後述する。
【００８９】
変数管理プログラム１６０は、ＰＬＣエンジン１５０で利用可能な値を変数の形で管理する。より具体的には、変数管理プログラム１６０は、制御装置１００の状態などを示すシステム変数１６２と、制御装置１００とローカルバスまたはフィールドバスを介して接続される各種デバイスが保持する値を示すデバイス変数１６４と、制御装置１００で実行されるユーザプログラム１５４が保持する値を示すユーザ変数１６６とを管理する。
【００９０】
スケジューラプログラム１７０は、制御装置１００で実行されるプロセスやタスクなどに対してリソース割当てや実行タイミングなどを管理する。
【００９１】
入力プログラム１７２は、制御装置１００とローカルバスまたはフィールドバスを介して接続される各種デバイスから入力データを取得する処理を行う。
【００９２】
出力プログラム１７４は、制御装置１００において実行されるユーザプログラム１５４によって算出される指令値（出力データ）をローカルバスまたはフィールドバスを介して接続される対象のデバイスへ出力する。
【００９３】
なお、制御装置１００が管理する入力データ、出力データ、演算データ、製造データ、イベントデータなどを統計処理した上で、時系列データベース１８０に対して書込みを行う、ＰＬＣエンジン１５０により実行される統計記録プログラムをさらに備えるようにしてもよい。統計処理としては、例えば、断片集約近似（ＰＡＡ：Picewise Aggregate Approximation）や離散ストリングへの記号化（ＳＡＸ：Symbolic Aggregate approximation）などの手法を用いることができる。ＰＡＡは、時系列データからパターンを見つけることができ、発見されたパターンにより圧縮を容易にする。あるいは、ＳＡＸは、時系列データを文字列に変換することで、圧縮およびパターンの発見を容易化できる。
【００９４】
上位接続プログラム１９２は、ＰＬＣエンジン１５０により実行され、製造実行システム４００などの上位ネットワーク６に接続された外部装置との間でデータを遣り取りする。本実施の形態に係る制御装置１００においては、制御装置１００から製造実行システム４００に対して入力データや演算データが出力されるとともに、製造実行システム４００から製造情報を受信することができる。このように、上位接続プログラム１９２は、制御対象に関連付けられた製造実行システム４００から製造データを取得する製造データ取得処理を行う。
【００９５】
製造実行システム４００がデータベースを有しており、あるいは、製造実行システム４００とは別にデータベースが配置されている場合には、上位接続プログラム１９２に代えて、あるいは、上位接続プログラム１９２の一部として、データベース接続プログラムが設けられていてもよい。このようなデータベース接続プログラムは、例えば、リレーショナルデータベースに対してＳＱＬなどのクエリを送信するとともに、応答を受信する処理を実行するようにしてもよい。
【００９６】
ゲートウェイプログラム１９４は、ＰＬＣエンジン１５０により実行され、ＩｏＴサービス４５０に対して時系列データを提供する。具体的には、ゲートウェイプログラム１９４は、時系列データベース１８０から、指定された種類のデータを指定された周期で取得して、時系列データとして出力する。ゲートウェイプログラム１９４によりＩｏＴサービス４５０へ出力される時系列データの詳細については後述する。
【００９７】
制御装置１００の入力プログラム１７２は、ローカルバスおよび／またはフィールドバスを介してセンサから入力データを取得する。
【００９８】
制御装置１００の上位接続プログラム１９２は、製造実行システム４００から製造データを取得する。変数管理プログラム１６０は、これらの取得された入力データおよび製造データを変数として管理する。
【００９９】
ユーザプログラム１５４は、変数管理プログラム１６０により管理されるシステム変数１６２、デバイス変数１６４、ユーザ変数１６６を参照しつつ、予め指定された制御演算を実行し、その実行結果（出力データ）を変数管理プログラム１６０に出力する。
【０１００】
出力プログラム１７４は、ユーザプログラム１５４の制御演算によって算出される出力データを制御出力として、ローカルバスおよび／またはフィールドバスを介してアクチュエータへ出力する。
【０１０１】
データベース書込みプログラム１５６は、変数管理プログラム１６０により管理される変数のうち指定された観測値をＮＢＱ１５８へ書込む。時系列データベース１８０のデータベースマネジャ１８２は、ＮＢＱ１５８にキューの形で格納されているデータを順次読出して、その読出したデータからなるレコードをデータベースファイル１８６に順次追加する。
【０１０２】
上位接続プログラム１９２は、変数管理プログラム１６０により管理される変数のうち指定された変数の値、および／または、時系列データベース１８０のデータベースファイル１８６を構成するレコードのうち指定されたレコードを、時系列データとして製造実行システム４００へ出力する。
【０１０３】
ゲートウェイプログラム１９４は、変数管理プログラム１６０により管理される変数のうち指定された変数の値、および／または、時系列データベース１８０のデータベースファイル１８６を構成するレコードのうち指定されたレコードを、時系列データとしてＩｏＴサービス４５０へ出力する。ＩｏＴサービス４５０は、制御装置１００からの時系列データに基づいて、挙動解析を行って、制御対象の設備や装置などの予知保全などを行う。
【０１０４】
＜Ｄ．時系列データベースへのデータ書込み処理＞
次に、本実施の形態に係る制御装置１００における時系列データベース１８０へのデータ書込み処理について説明する。
【０１０５】
図４は、本実施の形態に係る制御装置１００における時系列データベース１８０に関する処理の要部を示す模式図である。図４を参照すると、制御装置１００は、ローカルバスまたはフィールドバスなどを介して、フィールド装置群８との間で入力データおよび出力データを遣り取りする。
【０１０６】
制御装置１００において、製造装置や設備を制御するための各種演算を含む制御プログラム１５２は、所定の制御周期でサイクリック実行される。制御プログラム１５２は、データ書込み条件が成立すると、データベース書込みプログラム１５６を起動させるための命令を含む。
【０１０７】
データベース書込みプログラム１５６は、指定されたデータ（１または複数の変数値）を時系列データベース１８０へ書込むための命令を発行する。例えば、図４中には、"put"命令が示されている。なお、データベース書込みプログラム１５６から時系列データベース１８０へ書込まれるデータを収集および加工するための処理である、データ収集加工処理１５３を、制御プログラム１５２内において、あるいは、制御プログラム１５２と並行して実行するようにしてもよい。
【０１０８】
時系列データベース１８０には、データベース書込みプログラム１５６からのデータが時系列に格納される（時系列データ）。時系列データベース１８０に格納された時系列データは、上位システムへ送信されて解析処理などに利用されてもよい。
【０１０９】
図４に示す構成においては、製造実行システム４００やＩｏＴサービス４５０といった上位システムに配置された接続処理４０２を利用して、時系列データベース１８０から必要な時系列データが抽出される。そして、上位システムにおいては、抽出された時系列データに対して、時系列分析やデータマイニングといった解析処理が実施される。
【０１１０】
あるいは、時系列データベース１８０に格納される時系列データを異常検知処理１９８で利用するようにしてもよい。異常検知処理１９８は、ＰＬＣエンジン１５０が必要なプログラムを実行することで実現される。異常検知処理１９８は、時系列データベース１８０からの時系列データと、予め取得している教師データなどとを比較することで、制御対象において何らかの異常が発生している、あるいは、異常が発生する兆候が見られるといった判断を行う。
【０１１１】
制御装置１００において、制御プログラム１５２は所定の制御周期（例えば、数百マイクロ秒〜数ミリ秒）でサイクリック実行される。制御プログラム１５２のサイクリック実行と同期して、時系列データベース１８０へのデータ書込みが実行されることもある。一方で、時系列データベース１８０は、基本的には、ストレージ（内部ストレージ１０８、または、外部ストレージ１１６（図２参照））を利用して構成される。このようなストレージは、一般的には、記憶容量は大きいものの、主記憶装置に比較して、アクセス速度（特に、書込み速度）は低く、かつ、アクセス速度のゆらぎが大きい（例えば、１００ミリ秒〜１０００ミリ秒）。
【０１１２】
一方で、このような制御装置１００の制御周期でのデータ書込みを実現するために、揮発性記憶装置である主記憶装置上にデータを格納するようにした場合には、制御装置１００への電源供給の遮断などによってデータが消滅するといった、データの永続性を確保できないという課題が生じ得る。
【０１１３】
あるいは、データ収集加工処理１５３などを利用することで、データ書込みの頻度を低減させる（例えば、１０制御周期分のデータを一括して書込む）と、データ格納速度がゆらぐといった課題が生じ得る。
【０１１４】
あるいは、上述の特許文献１に開示されるようなデータ収集装置を採用して場合には、制御プログラム１５２で実行される制御演算とは独立してデータ収集および格納を実現できるが、制御プログラム１５２とは完全に同期していないことで、事後的な解析処理が不利になる可能性がある。
【０１１５】
そこで、本実施の形態に係る制御装置１００は、アクセス速度が高くないストレージを利用した時系列データベース１８０に対しても、制御周期と同期したデータ書込みを実現できる構成を提供する。
【０１１６】
具体的には、制御プログラム１５２（データベース書込みプログラム１５６）から時系列データベース１８０へのデータ書込みプロセスにおいて、ロックフリーのキューであるＮＢＱ１５８（図３参照）が配置される。このようなＮＢＱ１５８を採用することで、ストレージに対するアクセス速度に比較して、データベース書込みプログラム１５６がデータ書込み命令を発行する周期が短い場合であっても、データベース書込みプログラム１５６の実行がデータ書込み待ちで中断するような事態を回避できる。すなわち、制御周期に同期した、時系列データベース１８０へのデータ書込みを実現できる。
【０１１７】
このような制御周期と同期した時系列データの格納により、制御プログラム１５２に含まれる命令を用いることで、入力データ（例えば、アナログセンサの計測値など）、出力データ（例えば、位置指令や速度指令など）、演算データ（例えば、異常検知処理に用いられるフィルタパラメータや特徴量など）、製造データ（例えば、製造状態や品番など）を不揮発性のストレージに制御周期毎に格納できる。
【０１１８】
図６は、本実施の形態に係る制御装置１００における時系列データベース１８０への時系列データの書込み処理を実現する構成を示す模式図である。図６を参照すると、制御装置１００においては、制御プログラム１５２から書込みが命令されたデータが時系列データベース１８０のデータベースファイル１８６として出力されるまでの処理は、リアルタイム処理と非リアルタイム処理とに大別できる。
【０１１９】
リアルタイム処理は、例えば、制御周期と同期してサイクリック実行される処理であり、基本的には、処理開始から完了までに要する時間が予め定められた制限時間内に収まることが保証されている。一方、非リアルタイム処理は、リアルタイム処理のような実行時間についての保証はなく、外乱要因を受けて、実行に要する時間が変動するような処理を意味する。
【０１２０】
制御装置１００においては、ＰＬＣエンジン１５０が担当する処理がリアルタイム処理に相当し、時系列データベース１８０が担当する処理が非リアルタイム処理に相当する。
【０１２１】
ＰＬＣエンジン１５０においては、制御プログラム１５２によって起動されるデータベース書込みプログラム（例えば、制御プログラム１５２中の"put"命令によって起動される）は、指定されたデータ（具体的には、１または複数の変数値）をＮＢＱ１５８に順次書込む（すなわち、エンキューする）（処理Ｐ１）。この際、制御プログラム１５２からＮＢＱ１５８へのデータ（１または複数の変数値）は、ノンブロッキングの態様でＮＢＱ１５８へエンキューされる。
【０１２２】
ＮＢＱ１５８には、制御プログラム１５２からのデータが時系列順で順次格納されるとともに、その格納順にデータベースマネジャ１８２によって順次取出される。すなわち、ＮＢＱ１５８には、ＦＩＦＯ（First-In First-Out；先入れ先出し）の態様で、時系列データを構成する各データがエンキュー／デキューされる。
【０１２３】
時系列データベース１８０において、データベースマネジャ１８２は、ＮＢＱ１５８に格納されているデータ（１または複数の変数値を含む）を順次読出し（すなわち、デキューし）（処理Ｐ２）、書込みバッファ１８４へ順次書込む（処理Ｐ３）。このとき、ＮＢＱ１５８から書込みバッファ１８４へのレコードの書込み処理において、データベースマネジャ１８２がインデックス値の付加やデータ破損の検証などの処理を行うようにしてもよい。
【０１２４】
書込みバッファ１８４には、データベースマネジャ１８２からのレコードが順次格納される。書込みバッファ１８４は、ＮＢＱ１５８から読出されたデータを一時的に格納する。書込みバッファ１８４に所定数のデータが格納されると、所定の圧縮処理が実施された上で、データベースファイル１８６へ出力される（処理Ｐ４）。
【０１２５】
書込みバッファ１８４からデータベースファイル１８６への出力は、データベースマネジャ１８２によって実行される。すなわち、データベースマネジャ１８２は、書込みバッファ１８４に格納された複数のデータをレコードとしてデータベースファイル１８６へ出力する。
【０１２６】
このように、書込みバッファ１８４においては、ストレージに対するデータ書込み特性を考慮して、複数のレコードが比較的大きなデータブロックとしてまとめられて、データベースファイル１８６へ出力される。このような複数のレコードを圧縮処理して連続的なデータ列を生成した上で、データベースファイル１８６へ出力することで、書込みバッファ１８４からデータベースファイル１８６へのファイル出力の時間ゆらぎを抑制して、相対的に低いアクセス速度を補償する。
【０１２７】
ＮＢＱ１５８のサイズは、制御プログラム１５２が制御周期に同期してデータを書込めるような大きさに決定される。一例として、ＮＢＱ１５８のサイズは、データベースマネジャ１８２が書込みバッファ１８４へデータを書込むとともに、書込みバッファ１８４からデータベースファイル１８６へ出力するのに要する最大の時間（図６に示すデータベース出力処理時間の最大値）、ならびに、書込みバッファ１８４からデータベースファイル１８６へ出力されるのに要する時間のばらつき（図６に示すファイル出力の時間ゆらぎ）を考慮して、制御プログラム１５２から周期的に書込まれるデータ速度から、格納されるキューがオーバーフローしないサイズに決定されてもよい。すなわち、ＮＢＱ１５８のサイズは、データ生成処理によりデータが周期的に生成されるデータ速度に基づいて、格納されるデータがオーバーフローしないように設定される。
【０１２８】
上述したように、本実施の形態に係る制御装置１００においては、ＮＢＱ１５８および書込みバッファ１８４を採用することで、メモリに比較してアクセス速度の低いストレージを採用した場合であっても、制御周期と同期した、時系列データの生成および格納を実現できる。
【０１２９】
＜Ｅ．データ構造＞
次に、本実施の形態に係る制御装置１００の時系列データベース１８０に格納されるレコードのデータ構造の一例について説明する。
【０１３０】
制御装置１００は、制御対象に関連する観測値と、時刻管理処理によって示される観測値に対応付けられた時刻、および／または、内部カウンタが示す当該観測値に対応付けられたカウンタ値とを含む、レコードを生成してもよい。観測値は、プロセッサ１０２が利用可能な値である。
【０１３１】
図５は、本実施の形態に係る制御装置１００における時系列データベース１８０に格納されるレコードのデータ構造の一例を示す図である。図５（Ａ）を参照すると、制御装置１００にて生成されるレコードは、時刻フィールド１８２１と、カウンタ値フィールド１８２２と、インデックスフィールド１８２３と、観測値フィールド１８２４とを含む。
【０１３２】
時刻フィールド１８２１およびカウンタ値フィールド１８２２は、対応するデータ（１または複数の観測値）が取得されたタイミングを示す情報が格納される。
【０１３３】
より具体的には、時刻フィールド１８２１には、対応するデータが取得されたタイミングを示す時刻（例えば、ＲＴＣ１２８により管理される時刻）が格納される。
【０１３４】
カウンタ値フィールド１８２２には、対応するデータが取得されたときの、制御装置１００で管理するカウンタからのカウンタ値、または、フィールドバス／ローカルバスにおいてタイミングを管理するためのカウンタからのカウンタ値のうち少なくともいずれか１つが格納される。時刻フィールド１８２１に時刻を格納するとともに、カウンタ値フィールド１８２２にカウンタ値を格納することで、対応するデータ（観測値）の事後的な解析を支援することができる。
【０１３５】
インデックスフィールド１８２３は、データベースへのレコードの書込み動作などに応じて、所定値だけインクリメント／デクリメントされる値（インデックス値）が格納される。典型的には、レコードが格納される毎に１ずつカウントアップされるような値が用いられる。例えば、ユーザプログラム１５４内にデータベース書込みプログラム１５６を起動する命令が記述されている場合には、その起動する命令の実行に伴ってインデックス値をインクリメントするようにしてもよい。また、時系列データベース１８０が複数用意される場合には、データベース毎に独立したインデックス値を用いるようにしてもよい。
【０１３６】
観測値フィールド１８２４には、指定されたデータ（１または複数の観測値）が格納される。観測値フィールド１８２４に格納されるデータとしては、入力データ、出力データ、演算データ、製造データ、イベントデータなどが含まれる。
【０１３７】
具体的には、入力データとしては、各種センサから取得されたデジタル信号（状態値）やアナログ信号（各種計測信号）などを含む。観測値に加えて、当該観測値を出力したセンサを特定するための情報を併せて格納するようにしてもよい。
【０１３８】
出力データとしては、モーションドライブや開度調節器などに対して出力される指令値などが格納されてもよい。指令値に加えて、指令値の出力先のアクチュエータを特定するための情報を併せて格納するようにしてもよい。
【０１３９】
演算データとしては、ユーザプログラム１５４の実行によって算出される変数値や過渡的な値などが格納されてもよい。変数値や過渡的な値に加えて、当該演算データを出力したユーザプログラム１５４またはタスクなどを特定するための情報を併せて格納するようにしてもよい。
【０１４０】
製造データとしては、製造実行システム４００から受信した実行指令値群（例えば、ワークの品番、ロット番号、レシピ番号など）が格納されてもよい。実行指令値群としては、ワークを一意に特定する識別番号やワークの種類などを特定する情報が含まれていてもよい。
【０１４１】
イベントデータとしては、観測値が予め定められたしきい値を超えたあるいは下回った場合の情報や、予め定められた異常フラグなどがオンした場合の情報が格納されてもよい。イベントデータを発生させた変数などの情報を含めてもよい。
【０１４２】
さらに、イベントデータについては、予め定められた周期で繰返し生成または格納される時系列データではなく、予め定められた条件が満たされた場合に生成してもよい。この場合にも、カウンタ同期されたカウンタ値および／または時刻を対応付けるようにしてもよい。
【０１４３】
上述したようなレコードが制御周期または所定イベント毎に生成および出力される。例えば、図５（Ｂ）に示す例では、５００μｓｅｃ毎にレコードが生成および出力される例を示す。このように、指定された観測値を含むレコードが時系列に生成および出力されることで、これらの時系列データに基づいて、各種解析を行うことができる。
【０１４４】
図５に示すレコードをＫｅｙ−Ｖａｌｕｅ型で構成してもよい。この場合には、例えば、時刻フィールド１８２１およびカウンタ値フィールド１８２２をＫｅｙとし、インデックスフィールド１８２３および観測値フィールド１８２４をＶａｌｕｅとしてもよい。すなわち、時系列データの各レコードは、観測値に対応付けられた時刻およびカウンタ値をＫｅｙとして含むとともに、対応するＶａｌｕｅとして観測値を含む。
【０１４５】
上述の説明においては、制御装置１００が自装置内に有している時系列データベース１８０にレコードを格納する処理を典型例として説明したが、これに限らず、上位システムなどへレコードを送信するようにしてもよい。この場合においても、図５に示すようなレコードが制御周期毎に生成され、目的の外部装置へ送信されてもよい。
【０１４６】
さらに、制御装置１００の時系列データベース１８０を構成するデータベースマネジャ１８２およびデータベースファイル１８６が同一の制御装置１００内に配置されなくてもよい。すなわち、制御装置１００においては、データベースマネジャ１８２がＮＢＱ１５８からデータを読出すとともに、制御装置１００の外部にあるデータベースファイル１８６へレコードを書込むようにしてもよい。制御装置１００の外部としては、他の制御装置１００のストレージやネットワーク上のストレージ（ネットワークストレージ）などが想定される。
【０１４７】
本実施の形態に係る制御装置１００において実装される、データベース書込みプログラム１５６から時系列データベース１８０までの論理的なデータ転送経路において配置されるＮＢＱ１５８は、ストレージへの書込み速度の遅さを補償するという効果を発揮するが、ネットワークストレージに対する書込み速度の遅さについても補償するという効果を得ることができる。
【０１４８】
このような、ネットワークストレージ上にレコードを書込むことのできるような構成を採用することで、制御装置１００内にデータベースファイル１８６としてレコードを格納する構成に比較して、より多くのデータを蓄えることができる。さらに、複数の制御装置１００が単一のネットワークストレージに対してそれぞれレコードを書込むような構成も可能であり、ストレージの集約が可能であり、これによって、データ管理やセキュリティの面からもメリットが得られる。
【０１４９】
＜Ｆ．ノンブロッキング処理：リアルタイム処理と非リアルタイム処理との結合＞
次に、本実施の形態に係る制御装置におけるリアルタイム処理と非リアルタイム処理との間でのデータを受け渡しするための処理および処理について説明する。
【０１５０】
図５に示すように、本実施の形態に係る制御装置１００においては、共有メモリ領域を利用したＮＢＱ１５８を用いることで、リアルタイム処理側および非リアルタイム処理側のそれぞれからのデータアクセスを可能にしている。
【０１５１】
より具体的には、リアルタイム処理側にある制御プログラム１５２からＮＢＱ１５８に対して、データが順次書込まれる（制御プログラム１５２から"put"命令が与えられる）。この結果、ＮＢＱ１５８には、１または複数のデータが書込み順にキューイングされる。一方、非リアルタイム処理側のデータベースマネジャ１８２は、ＮＢＱ１５８に格納されているデータをＦＩＦＯで取得する（すなわち、データベースマネジャ１８２から"get"命令が与えられる）。
【０１５２】
図７は、本実施の形態に係る制御装置１００におけるノンブロッキング処理を説明するための模式図である。図７には、制御プログラム１５２からＮＢＱ１５８に対してデータを格納するための処理例を示す。
【０１５３】
図７を参照すると、揮発性の主記憶装置１０６上に形成される共有メモリ領域内に、複数の共有バッファＡ，Ｂ，…（バッファプール１５８４）が用意されており、これらの共有バッファの各々について使用中／未使用を管理する空きリスト１５８２が利用可能になっている。すなわち、ＮＢＱ１５８は、共有メモリ領域内に論理的に用意される複数の共有バッファと、当該複数の共有バッファにおけるデータの格納有無を管理する空きリスト１５８５とにより実装される。
【０１５４】
制御プログラム１５２（厳密には、制御プログラム１５２を実行するプロセス；以下の説明においても同様）は、データ書込みイベントが発生すると、空きリスト１５８２を参照すると、バッファプール１５８４から利用可能な共有バッファ（図７の例では、共有バッファＡ）を決定し、ノンブロッキングな態様で当該決定した共有バッファを取得する（図７中の処理（１））。「ノンブロッキングな態様」とは、他のプロセスまたはタスクからのアクセスを禁止するような排他処理がなされていない状態を意味する。すなわち、「ノンブロッキングな態様」とは、排他処理のような特別な処理を実施することなく、通常の処理状態で実現可能なモードである。
【０１５５】
続いて、制御プログラム１５２は、取得した共有バッファに格納すべきデータを書込む（図７中の処理（２））。この取得した共有バッファへのデータ書込みについては、他のプロセスからのデータ書込みとの競合を避けるために、排他処理が実行されてもよい。
【０１５６】
なお、排他処理としては、プロセッサ命令の一つであるＣＡＳ命令を用いて実現できる。なお、ＣＡＳ命令を用いる方法に代えて、プロセス間の排他制御を実現するためのセマフォを用いることもできるし、スレッド間の排他制御を実現するためのｍｕｔｅｘを用いることもできる。
【０１５７】
そして、データを書込んだ共有バッファをＮＢＱ１５８に論理的に結合する（図７中の処理（３））。すなわち、ＮＢＱ１５８の新たなエントリとして、データを書込んだ共有バッファを特定するアドレスなどの参照情報を追加する。このような論理的な結合によって、ＮＢＱ１５８は、ＦＩＦＯの態様でデータの書込みおよび読出しを実現できる。なお、ＮＢＱ１５８を構成する共有バッファのうちデータが読出された共有バッファについては、ＮＢＱ１５８との論理的な結合を順次解放して、空共有バッファとしてバッファプール１５８４に組み入れるようにしてもよい。
【０１５８】
このように、データベース書込みプログラム１５６により生成されるデータは、空きリスト１５８２を参照することで特定される共有バッファに格納される。そして、データが格納された共有バッファは、先にデータが格納されている共有バッファ（すなわち、更新前のＮＢＱ１５８）と論理的に結合される。さらに、記論理的に結合された共有バッファのうちデータが読出された共有バッファは、論理的な結合から解放される。
【０１５９】
上述したような、空共有バッファの管理およびデータを書込んだ共有バッファに対する論理的な参照などを用いることで、本実施の形態に係るノンブロッキングの態様でのデータ受け渡しを実現できる。
【０１６０】
なお、本実施の形態に係る制御装置１００においては、リアルタイム処理と非リアルタイム処理との間で、ノンブロッキングの態様でデータを受け渡しするための方法として、共有メモリ領域上に構成されるキューを用いる例を示すが、これに限らず、メッセージパッシングの技術を採用してもよいし、メモリとフラグとを組み合わせたハンドシェークスキームを採用してもよい。
【０１６１】
＜Ｇ．パラメータ設定＞
本実施の形態に係る制御装置１００を実現するために必要なパラメータについて説明する。
【０１６２】
まず、本実施の形態に係る制御装置１００においては、制御周期と同期して、データ書込みがサイクリックに実行することもできる。再度図５を参照すると、制御装置１００においては、制御周期を規定する設定情報１５２０が配置される。設定情報１５２０に含まれるパラメータは、制御演算がサイクリック実行される周期を規定するものであり、制御対象の種類や性質などに応じて、適宜設定される。
【０１６３】
また、ＮＢＱ１５８および書込みバッファ１８４のサイズは、制御プログラム１５２からのデータ書込みの周期およびデータ量との関係、ならびに、データベースファイル１８６のデータ生成速度に基づいて、最適化する必要がある。図５に示すように、制御装置１００には、ＮＢＱ１５８のデータサイズを規定するパラメータを含む設定情報１５２２と、書込みバッファ１８４のデータサイズを規定するパラメータを含む設定情報１８４０とが配置される。
【０１６４】
設定情報１５２２に含まれるパラメータは、ＮＢＱ１５８のデータサイズ、すなわちバッファ容量を規定するものであり、設定情報１８４０に含まれるパラメータは、書込みバッファ１８４のバッファ容量を規定するものである。これらのパラメータの値は、適宜調整および設定される。
【０１６５】
さらに、時系列データベース１８０に格納される時系列データの対象および周期については、制御プログラム１５２に含まれるユーザプログラム１５４（図３参照）などにおいて明示的に記述してもよいし、システムプログラムの一部がデータ収集およびデータ格納を担当する場合には、ユーザに対して、データ収集および格納の対象となる変数および対応する周期を設定するためのユーザインターフェイスを提供してもよい。
【０１６６】
図８は、本実施の形態に係る制御装置１００における時系列データベース１８０への格納対象となる変数および周期を設定するためのユーザインターフェイス画面の一例を示す図である。図８に示すユーザインターフェイス画面は、制御装置１００に接続されるサポート装置２００（図１など参照）のディスプレイ上などに表示される。
【０１６７】
図８を参照すると、設定画面５００においては、時系列データベース１８０への格納対象となるデータを特定するための変数名５０２と、格納周期５０４とが対応付けて設定可能になっている。ユーザは、設定画面５００に対して操作を行うことで、収集したい変数およびその収集周期を任意に設定することができる。
【０１６８】
ユーザが設定画面５００を介して設定した内容は、制御装置１００の制御プログラム１５２へ与えられて、設定内容に従って、データの収集処理および時系列データベース１８０へ書込み処理が実行される。
【０１６９】
図８に示すような設定画面５００を提供することで、ユーザプログラムに対する変更を行うことができないユーザであっても、任意の変数を選択して、時系列データとして格納することができる。
【０１７０】
＜Ｈ．ステータス出力／ログ出力＞
本実施の形態に係る制御装置１００においては、ＮＢＱ１５８のサイズおよび書込みバッファ１８４のサイズなどを最適化することで、時系列データベース１８０のデータベースファイル１８６の生成に係るスループットを向上させることができる。
【０１７１】
このような性能のチューニングや何らかの不具合があった場合の原因究明などに、時系列データベース１８０に関するステータスやログを出力する処理を行わせるようにしてもよい。例えば、制御装置１００は、ＮＢＱ１５８へのデータの格納を含む、時系列データベース１８０に係る動作の状態を示す情報を出力する状態情報出力処理を行ってもよい。
【０１７２】
図９は、本実施の形態に係る制御装置１００が出力する時系列データベース１８０に関するステータス情報の一例を示す図である。図９に示すステータス情報リスト７００は、時系列データベース１８０の性能に関する情報に加えて、データベースマネジャ１８２による処理に関する情報などを含む。
【０１７３】
例えば、ステータス情報リスト７００は、データベース書込みプログラム１５６から発行されたデータの書込み命令（"put"命令）の成功回数、成功バイト数、失敗回数とった書込み命令実行実績７０２を含む。書込み命令実行実績７０２を参照することで、制御プログラム１５２からＮＢＱ１５８へのデータ書込み処理が実行状態を確認し、必要に応じて、ＮＢＱ１５８のサイズを調整することができる。
【０１７４】
また、ステータス情報リスト７００は、データベース書込みプログラム１５６から発行されたデータの書込み命令（"put"命令）を受けて、時系列データベース１８０へのレコード格納処理に要した時間に関するレコード格納実績７０４を含む。レコード格納実績７０４を参照することで、データベース書込みプログラム１５６から時系列データベース１８０までのレコード格納に関する性能を確認し、必要に応じて、ＮＢＱ１５８のサイズや書込みバッファ１８４のサイズを調整することができる。
【０１７５】
また、ステータス情報リスト７００は、ＮＢＱ１５８の状態を示すＮＢＱ動作実績７０６を含む。ＮＢＱ動作実績７０６を参照することで、ＮＢＱ１５８に格納されるデータのオーバーフローの有無などを確認し、必要に応じて、ＮＢＱ１５８のサイズや書込みデータのサイズや書込み周期などを調整することができる。
【０１７６】
このように、本実施の形態に係る制御装置１００は、時系列データベース１８０の動作に関する実績情報などを出力する処理を行っており、このような実績情報に基づいて、時系列データベース１８０の性能のチューニングを容易に行うことができる。
【０１７７】
＜Ｉ．マルチコア＞
本実施の形態に係る制御装置１００の時系列データベース１８０に関する処理については、複数のコア（演算処理回路）を有するプロセッサを用いて実行するようにしてもよい。この場合、図６に示すリアルタイム処理および非リアルタイム処理については、異なるコアで実行するようにしてもよい。
【０１７８】
図１０は、本実施の形態に係る制御装置１００における処理例を示すタイムチャートである。図１０には、２つのコア（コア＃０およびコア＃１）を含むプロセッサを用いた場合の処理例を示す。
【０１７９】
制御装置１００においては、コア毎に実行すべき処理がタスクの単位で予め設定されている。各タスクには、実行の優先度、実行周期あるいは実行開始、および実行すべき処理（すなわち、プログラム）が予め設定されている。このタスクの設定情報は、ユーザプログラムなどとともに、内部ストレージ１０８に予め格納されている。プロセッサ１０２がスケジューラプログラム１７０を実行することで、タスクの設定情報に設定された優先度の情報に従って、各コアに実行させるプログラムを逐次選択（すなわち、スケジューリング）する。
【０１８０】
図１０には、一例として、各コアに対して、実行の優先度が最も高く設定されているタスク（以下、「プライマリタスク」とも称す。）と、プライマリタスクより実行の優先度が低く設定されているタスク（以下、「セカンダリタスク」とも称す。）とがそれぞれ登録されている例を示す。
【０１８１】
プライマリタスクは、予め定められた制御周期毎に処理を実行することが設定されており、セカンダリタスクは、対応する割込みが与えられたときに実行することが設定されているとする。このようなタスクの設定情報に従えば、コア＃０およびコア＃１においては、基本的には、プライマリタスクとして登録された処理については、制御周期毎に実行され、セカンダリタスクとして登録された処理については、プライマリタスクが実行されていない空き時間に実行されることになる。
【０１８２】
コア＃０では、主として、データ転送処理および図６に示す非リアルタイム処理が実行され、コア＃１では、主として、図６に示すリアルタイム処理が実行される例を示す。すなわち、コア＃０に割当てられているタスクには、データ転送処理および図６に示す非リアルタイム処理が設定されており、コア＃１に割当てられているタスクには、図６に示すリアルタイム処理が設定されているとする。
【０１８３】
図１０に示す例において、コア＃０に関連付けられたプライマリタスクは、送信データ生成処理６０４および排他的処理６０８を含む。送信データ生成処理６０４においては、制御演算によって算出された出力値などをフィールド装置群８へ送信するためのデータ圧縮処理などが実行される。排他的処理６０８においては、送信データを生成するために必要な排他処理が実行され、他のプロセスからはビジー状態に見える。送信データ生成処理６０４の後、データ送受信処理６０６が実行される。
【０１８４】
データ送受信処理６０６は、ローカルバスコントローラやフィールドバスコントローラ（図２など参照）によって実行されるため、プロセッサにおいて処理をしなくてもよい。そのため、送信データ生成処理６０４の後、次の排他的処理６０８の開始タイミングまでの期間において、セカンダリタスクとしてシステムサービス６２０が実行される。
【０１８５】
システムサービス６２０は、制御装置１００における制御演算とは直接的には関係ないが、制御装置１００が提供する付加的な処理を実行する。システムサービス６２０の一部として、データベースファイル１８６の出力処理、すなわち、データベースマネジャ１８２がＮＢＱ１５８からデータをデキューしてデータベースファイル１８６を出力する処理（非リアルタイム処理）が実行される。非リアルタイム処理に関して、データベースマネジャ１８２は、プロセッサの空き期間に動作するように構成されている。
【０１８６】
制御対象に対する制御演算とは直接的には関係ない付加的な処理を提供するデータベースマネジャ１８２をプロセッサの空き期間に動作させることで、制御演算を実現するために必要な送信データ生成処理６０４および排他的処理６０８の動作への影響を与えないようにすることができる。
【０１８７】
一方、コア＃１には、プライマリタスクとして、優先度の高い制御演算６００と、受信データ展開処理６０２とが関連付けられており、セカンダリタスクとして、優先度の低い制御演算６１０が関連付けられている。
【０１８８】
制御演算６００においては、ユーザプログラム１５４に規定された、制御対象に対する制御を実行するための処理が実行される。受信データ展開処理６０２は、フィールド装置群８などから受信した入力データを展開して、入力変数を更新する処理が実行される。制御演算６００は、時系列データベース１８０へのレコードの書込み命令を含む。すなわち、制御演算６００の実行によって、ＮＢＱ１５８に対してレコードを構成するためのデータが書込まれる。制御演算６００の後、優先度の低い制御演算６１０が実行される。制御演算６１０は、制御演算６００および受信データ展開処理６０２が実行されていない時間に実行される。
【０１８９】
このように、リアルタイム処理に関して、データベース書込みプログラム１５６は、データを生成する一回の処理が予め定められた周期内（制御周期内）で完了するように構成されている。
【０１９０】
図１０に示す例では、データ生成処理を行うプロセスとデータベースマネジャ１８２を実現するプロセスとは、互いに異なるコア（演算処理回路）によって実行されてもよい。データベースファイル１８６を出力する処理（非リアルタイム処理）を、制御演算を実行するコアとは別のコアで実行することで、時系列データを収集および格納する処理が制御演算へ何らの影響も与えないようになっている。また、データの書込みの指示と、制御演算とを同一のコアで実行することで、時系列データの収集および書込みを制御周期毎に実行することができ、より詳細なフィールドの情報を収集および格納できる。
【０１９１】
＜Ｊ．応用例＞
次に、本実施の形態に係る制御装置１００が生成および出力する時系列データを用いた応用例について説明する。
【０１９２】
図１１は、本実施の形態に係る制御装置１００の時系列データベース１８０に格納される時系列データを用いたアプリケーションの一例を説明するための図である。
【０１９３】
図１１に示す例では、製造実行システム４００は、制御装置１００の時系列データベース１８０に格納された時系列データを用いて、品質トレーサビリティなどを実現する。具体的には、時系列データベース１８０に格納された時系列データに含まれる製造データに基づいて、いずれのワーク（製造物）に対応付けられる時系列データであるかを判別する。判別されたワーク毎の時系列データを発生した時刻順に並べることで、製造時におけるワーク毎の状態を把握することができる。例えば、図１１には、「品番００１」のワークに対応付けて複数の時系列データが格納されるとともに、「品番００２」のワークに対応付けて複数の時系列データが格納される例を示す。
【０１９４】
このように、製造実行システム４００は、制御装置１００の時系列データベース１８０に格納された時系列データに基づいて、品質トレーサビリティに係る情報を生成してもよい。
【０１９５】
品質トレーサビリティに係る情報を生成する際に、時刻およびカウンタの情報を対応付けて、時系列データ内の観測値を処理することで、より時間的に緻密な情報を生成することができる。
【０１９６】
また、図１１に示す例では、ＩｏＴサービス４５０は、いわゆるビッグデータ解析を実現する。ＩｏＴサービス４５０には、製造装置／設備１１を制御する制御装置１００からの時系列データだけではなく、別の製造装置／設備１１からの時系列データも出力される。ＩｏＴサービス４５０には、１または複数の製造装置／設備からの時系列データに対して、各種の解析を実施する。このような解析の一例として、時系列分析４６０が示されている。
【０１９７】
ＩｏＴサービス４５０を提供するシステムを構成する１または複数のプロセッサが時系列分析４６０を実行する。時系列分析４６０においては、１または複数のプロセッサが時系列データに対する前処理４６２を実行する。前処理４６２においては、１または複数のプロセッサがストレージに格納された時系列データから特徴量などを抽出して次元を下げる処理、異常値・外れ値を除外する処理などを実行する。さらに、１または複数のプロセッサは、前処理４６２が実施された時系列データに対して、分析処理４６４を実行する。１または複数のプロセッサは、分析処理４６４の結果に基づいてモデリング４６６を実施することで、制御対象の製造装置／設備についてのモデルを生成する。１または複数のプロセッサは、生成したモデル（関数またはパラメータのセット）をストレージに格納する。さらに、１または複数のプロセッサは、生成されたモデルに基づいて、異常の発生や劣化の進行などの予測処理４６８を実行する。最終的に、１または複数のプロセッサは、予測処理４６８の結果がグラフや表などを用いて視覚的にディスプレイなどに出力されてもよい（視覚化処理４７０）。
【０１９８】
以上のように、ＩｏＴサービス４５０は、制御装置１００の時系列データベース１８０に格納された時系列データに基づくデータ解析を実施する。このようなＩｏＴサービス４５０は、典型的には、クラウド上の十分な演算リソースを有する環境で実施されることが想定される。そのため、大量の時系列データを用いて、隠れた特性などを見つけることができる。
【０１９９】
このようなデータ解析を行う際に、時刻およびカウンタの情報を対応付けて、時系列データ内の観測値同士の時間的関係をより精緻に決定できるので、より正確かつ有意義な解析を実現できる。例えば、モデルの生成にあたっては、観測値同士の隠れた因果関係を探索することが重要であるが、このような因果関係は時間的なずれによって見つけることができない場合もある。本実施の形態に係るシステムにおいては、前処理において、観測値同士の時間的な関係をより正確に決定できるので、より正確なモデルの生成を実現できる。
【０２００】
また、何らかの異常が発生した時刻を参照して、その発生した時刻における設備データを確認する必要がある場合などにより有益である。
【０２０１】
また、図１１に示す例においては、制御装置１００の内部でＡＩ（Artificial Intelligence）処理１９６が実施される例を示す。ＡＩ処理１９６においては、例えば、教師ありの機械学習を行っておき、制御対象の製造装置や設備に生じる異常や劣化傾向を事前に検出するようにしてもよい。
【０２０２】
具体的には、ＡＩ処理１９６は、制御装置１００の時系列データベース１８０に格納された時系列データに含まれる１または複数の観測値から特徴量を生成し、その生成した特徴量を統計処理した上で、学習データとして保持する。そして、ＡＩ処理１９６は、何らかの新たな観測値が入力されると、当該入力された観測値が学習データからどの程度外れているのかを示す度合いを算出するとともに、その算出された外れの度合いに基づいて、異常の有無や劣化傾向を判断する。
【０２０３】
このようなＡＩ処理１９６を制御装置１００内に実装することで、制御対象の製造装置や設備に生じる異常や劣化傾向を実質的にリアルタイムに検出できる。
【０２０４】
＜Ｋ．利点＞
本実施の形態に係る制御装置は、制御周期に同期して指定されたデータを含むレコードを時系列データベースに書込むための命令を周期的に発行することができる。この周期的なデータベースへの書込み命令に従って、指定されたデータがＮＢＱに順次格納される。制御演算の一部に含まれる書込み命令を発行する処理において、ＮＢＱへのデータの格納の完了を待つ必要がないので、制御演算自体の実行周期へ何ら影響を与えることはない。
【０２０５】
一方、時系列データベースにおいては、ＮＢＱに格納されるデータを読出して、データベースファイルとして出力する。このデータベースファイルとして出力する処理は、データベースファイルが格納されるストレージの特性に応じて、書込んだバッファなどでデータを集約した上で、ストレージへの書込みを行う。このようなＮＢＱからデータベースファイルへの出力処理をストレージの特性に応じたものとすることで、大容量であるものの、アクセス速度が相対的に低いストレージを利用した、時系列データベースを実現できる。
【０２０６】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２０７】
１  制御システム、２，４  フィールドバス、６  上位ネットワーク、８  フィールド装置群、１１  設備、１２  リモートＩ／Ｏ装置、１４  リレー群、１６，１２４  Ｉ／Ｏユニット、１８  画像センサ、２０  カメラ、２２  サーボドライバ、２４  サーボモータ、１００  制御装置、１０２  プロセッサ、１０４  チップセット、１０６  主記憶装置、１０８  内部ストレージ、１１０  上位ネットワークコントローラ、１１２  コントローラ、１１４  外部ストレージインターフェイス、１１６  外部ストレージ、１１８，１２０  フィールドバスコントローラ、１１９，１２１，１２３，１２５，１２６  カウンタ、１２２  ローカルバスコントローラ、１２８  ＲＴＣ、１５０  ＰＬＣエンジン、１５２  制御プログラム、１５３  データ収集加工処理、１５４  ユーザプログラム、１５６  データベース書込みプログラム、１６０  変数管理プログラム、１６２  システム変数、１６４  デバイス変数、１６６  ユーザ変数、１７０  スケジューラプログラム、１７２  入力プログラム、１７４  出力プログラム、１８０  時系列データベース、１８２  データベースマネジャ、１８４  書込みバッファ、１８６  データベースファイル、１９２  上位接続プログラム、１９４  ゲートウェイプログラム、１９６  ＡＩ処理、１９８  異常検知処理、２００  サポート装置、３００  表示装置、４００  製造実行システム、４０２  接続処理、４５０  ＩｏＴサービス、４６０  時系列分析、４６２  前処理、４６４  分析処理、４６６  モデリング、４６８  予測処理、４７０  視覚化処理、５００  設定画面、５０２  変数名、５０４  格納周期、６００，６１０  制御演算、６０２  受信データ展開処理、６０４  送信データ生成処理、６０６  データ送受信処理、６０８  排他的処理、６２０  システムサービス、７００  ステータス情報リスト、７０２  書込み命令実行実績、７０４  レコード格納実績、７０６  動作実績、１５２０，１５２２，１８４０  設定情報、１５８２，１５８５  空きリスト、１５８４  バッファプール、１８２１  時刻フィールド、１８２２  カウンタ値フィールド、１８２３  インデックスフィールド、１８２４  観測値フィールド。
【図１】
2018173865.tif 000003
【図２】
2018173865.tif 000004
【図３】
2018173865.tif 000005
【図４】
2018173865.tif 000006
【図５】
2018173865.tif 000007
【図６】
2018173865.tif 000008
【図７】
2018173865.tif 000009
【図８】
2018173865.tif 000010
【図９】
2018173865.tif 000011
【図１０】
2018173865.tif 000012
【図１１】
2018173865.tif 000013
【手続補正書】
【提出日】平成30年7月2日(2018.7.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
所定の制御周期で制御プログラムをサイクリック実行することで制御対象を制御する制御装置であって、
前記制御対象に関するデータを含むレコードを時系列に格納する時系列データベースと、
前記制御周期毎に前記時系列データベースへ格納すべきレコードを構成するためのデータを生成するデータ生成手段と、
前記データ生成手段により前記制御周期において生成されるデータを当該制御周期内で順次格納する、揮発性の主記憶装置上に形成されるノンブロッキングキューとを備える、制御装置。
【請求項２】
前記時系列データベースは、前記ノンブロッキングキューに格納されたデータを順次読出して、前記時系列データベースへ格納するデータベースマネジャを含む、請求項１に記載の制御装置。
【請求項３】
前記ノンブロッキングキューは、前記主記憶装置上に論理的に用意される複数の共有バッファと、前記複数の共有バッファにおけるデータの格納有無を管理する空きリストとにより実装され、
前記データ生成手段により生成されるデータは、前記空きリストを参照することで特定される共有バッファに格納され、当該データを格納された共有バッファは、先にデータが格納されている共有バッファと論理的に結合される、請求項２に記載の制御装置。
【請求項４】
前記論理的に結合された共有バッファのうちデータが読出された共有バッファは論理的な結合から解放される、請求項３に記載の制御装置。
【請求項５】
前記時系列データベースは、前記ノンブロッキングキューから読出されたデータを一時的に格納する書込みバッファをさらに含み、
前記データベースマネジャは、前記書込みバッファに格納された複数のデータをレコードとしてデータベースファイルへ出力する、請求項２〜４のいずれか１項に記載の制御装置。
【請求項６】
前記データ生成手段は、前記データを生成する一回の処理が前記制御周期内で完了するように構成されており、
前記データベースマネジャは、プロセッサの空き期間に動作するように構成されている、請求項２〜５のいずれか１項に記載の制御装置。
【請求項７】
前記データ生成手段を実現するプロセスと前記データベースマネジャを実現するプロセスとは、互いに異なる演算処理回路によって実行される、請求項６に記載の制御装置。
【請求項８】
前記ノンブロッキングキューへのデータの格納を含む、前記時系列データベースに係る動作の状態を示す情報を出力する状態情報出力手段をさらに備える、請求項１〜７のいずれか１項に記載の制御装置。
【請求項９】
前記ノンブロッキングキューのサイズは、前記データ生成手段がデータを周期的に生成するデータ速度に基づいて、格納されるデータがオーバーフローしないように設定される、請求項１〜８のいずれか１項に記載の制御装置。