(57)【要約】【課題】  正確なタイムスタンプを付与されたデータを取得できるようにすること。【解決手段】  ＰＬＣ１００に組み込みの時系列データベース１０２ｂに、データを記録する。また、ＰＬＣ１００のローカルクロックを、ＮＴＰサーバなどの時刻サーバ４００に定期的にアクセスして補正する。その際、時刻補正量と、各回の補正処理を識別するためのＮＴＰ−ＩＤとを対応付けてＮＴＰログ１０２ａに記録する。クエリが到来すると、指定された時間レンジに対応するレコードのタイムスタンプを、対応するＮＴＰ−ＩＤの時刻補正量を比例配分して修正する。【選択図】  図５
2018190216.tif 000002
【特許請求の範囲】
【請求項１】
タイムスタンプの基準となるローカル時刻を提供するローカルクロックと、
前記ローカル時刻の補正処理を繰り返し実行する補正部と、
前記補正処理ごとの時刻補正量を記憶する記憶部と、
制御対象に関わるデータを収集するデータ収集部と、
前記収集されたデータを前記タイムスタンプ付きで蓄積するデータベースと、
前記データベースへのクエリで指定された期間に対応するデータを前記データベースから抽出する抽出部と、
前記抽出されたデータのタイムスタンプを前記時刻補正量に基づいて修正する修正部と、
前記修正されたタイムスタンプ付きのデータを前記クエリの発出元に向け返送する応答部と
を具備する、制御装置。
【請求項２】
前記記憶部は、前記補正処理ごとの時刻補正量を、それぞれの補正処理を識別するための識別子に対応付けて記憶し、
前記データベースは、前記タイムスタンプ付きデータと、当該データのタイムスタンプの由来するローカル時刻についての補正処理の前記識別子とを含むレコードを蓄積し、
前記修正部は、
前記抽出されたデータを含むレコードに含まれる前記識別子に対応する時刻補正量を取得し、
前記取得された時刻補正量に基づいて、前記抽出されたデータのタイムスタンプを修正する、請求項１に記載の制御装置。
【請求項３】
前記修正部は、前記取得された時刻補正量を前記補正処理の実行された時刻を基準として内挿した値に基づいて前記タイムスタンプを修正する、請求項２に記載の制御装置。
【請求項４】
前記データベースは、前記期間の指定を含むクエリへの応答に備えて設計された時系列データベースである、請求項１に記載の制御装置。
【請求項５】
前記補正部は、グローバル時刻を提供する時刻サーバにアクセスして前記ローカル時刻の補正処理を実行する、請求項１に記載の制御装置。
【請求項６】
前記データ収集部は、前記補正部による前記補正処理の頻度よりも高い頻度で前記データを収集する、請求項１に記載の制御装置。
【請求項７】
さらに、前記補正処理ごとの時刻補正量を用いたフィードバック学習により前記補正処理の精度に関わる学習データを作成する学習部を具備し、
前記補正部は、前記作成された学習データを参照して前記ローカル時刻を補正する、請求項１に記載の制御装置。
【請求項８】
さらに、前記ローカル時刻の補正処理の妥当性を判定する判定部を具備し、
前記補正部は、前記判定部により妥当でないと判定された補正処理を無効とする、請求項１に記載の制御装置。
【請求項９】
ローカルクロックにより提供されるローカル時刻の補正処理を繰り返し実行する過程と、
前記補正処理ごとの時刻補正量を記憶部に記憶させる過程と、
制御対象に関わるデータを収集する過程と、
前記収集されたデータを、前記ローカル時刻を基準とするタイムスタンプ付きでデータベースに蓄積する過程と、
前記データベースへのクエリで指定された期間に対応するデータを前記データベースから抽出する過程と、
前記抽出されたデータのタイムスタンプを前記時刻補正量に基づいて修正する過程と
を具備する、タイムスタンプ修正方法。
【請求項１０】
請求項９に記載の方法をコンピュータに実行させるための命令を含む、プログラム。
【請求項１１】
クロックを具備する装置に備えられたデータベースに蓄積されるレコードのデータ構造であって、
前記装置の制御対象に関わるデータと、
前記データに付与されたタイムスタンプと、
前記クロックにより提供される時刻の補正処理を識別するための識別子とを含む、データ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、例えばＦＡ（Factory Automation）に適用可能な制御装置に関する。
【背景技術】
【０００２】
工場や物流拠点などの多くは、多種多様な機器(facilities)や機械(machines)を制御するための制御システムを備える。制御システムや制御装置を適切に運用することで、省力化や作業の効率化を図ることができる。プログラマブルコントローラ(Programmable Logic Controller：ＰＬＣ）は、タフな環境にも耐えうる制御装置として著名である。
【０００３】
ＰＬＣは、プロセッサおよびメモリを有し、プログラムに従って動作するコンピュータである。ＰＬＣのプログラミング言語に関する検討がＩＥＣ ＳＣ６５Ｂ／ＷＧ７／ＴＦ３により主導され、１９９３年に、国際規格「ＩＥＣ ６１１３１−３」が発行された。この規格は、従来主体であったラダー言語を含む「４言語＋１要素」を規定するもので、近年のＰＬＣはこの規格に沿って開発されている。ＩＥＣ ６１１３１−３には、ＰＯＵ（Program Organization Unit）と称されるプログラムの単位がある。ＰＯＵは、オブジェクト指向言語のクラスの概念に近く、関数あるいはメソッドに相当するＦＢ（Function Block）を、１または複数含むことができる。
【０００４】
ところで、近年のＰＬＣは高度に発達していて、超高速のＣＰＵ（Central Processing Unit）と、大容量のメモリを備えている。このため従来では不可能であったようなアプリケーションを実装することが可能になってきている。大量のデータをＰＬＣに蓄積しデータベース化することも、その一つである。
【０００５】
すなわち、制御対象（センサ、サーボモータ等）に係わる各種のデータをｍｓｅｃ（ミリ秒）オーダの頻度で収集し、タイムスタンプを付与し、ＰＬＣに組み込まれた時系列データベースに蓄積することが考えられている。時系列データベースは、期間（時間レンジ）を指定した問い合わせを高速に処理できるように最適化されたデータベースであり、ＡＩ（Artifical Intelligence）やＩｏＴ（Internet of Things）などの分野で近年、注目されている。時系列データベースは、例えば、機械学習に基づく予測制御などに利用することができる。
【０００６】
ここで問題になるのは、複数のＰＬＣで収集された時系列データ間のタイムスタンプの精度である。ＰＬＣの内部クロック（ローカルクロック）は温度などの擾乱によりドリフトするし、その程度はＰＬＣ毎に異なるからである。
【０００７】
例えばＷＷＷ（World Wide Web）では、ＮＴＰ（Network Time Protocol）を利用してサーバ（サイト）間の時刻同期をとるようにしている。しかしながらＮＴＰサーバの台数は限られているので、ＮＴＰサーバへのアクセスの頻度は多くとも１時間に一度くらいに留めざるを得ない。タイムスタンプの間隔が極短周期であるシステムでは、その間の時刻ずれが許容できない程度に大きくなることがあり、解決策が求められている。
【０００８】
特許文献１では、複数の装置間で時刻情報を相互に授受することで、リアルタイムデータのタイムスタンプを正規化し、装置間での相対的な時刻同期を保つようにしている。しかしながらシステム内の装置が増えれば増えるほど、通信の負荷が大きくなったり、効率が低下したりする。また、複数のシステム間でデータを統合する処理（データマイニング）に際しては、データ間の同期は保証されない。さらに、装置間の通信がＮＧになれば、正規化されたタイムスタンプを計算することができない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１５−２０１１９４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
以上述べたように、制御装置に時系列データベースを構築し、高い頻度で収集したデータにタイムスタンプを付けて蓄積することが検討されている。しかしデータ収集サイクルに対して内部クロックの精度が十分でなく、制御装置間でタイムスタンプがずれる虞がある。例えば、事後のデータ解析の信頼性や精度、機械学習、あるいはデータ統合の精度を高めるためにも、データのタイムスタンプの精度を高めることが要望されている。
【００１１】
この発明は上記事情に着目してなされたもので、その目的は、正確なタイムスタンプを付与されたデータを取得することの可能な制御装置、タイムスタンプ修正方法、プログラムおよびデータ構造を提供することにある。
【課題を解決するための手段】
【００１２】
上記の目的を達成するために、本発明では以下のような手段を講じる。
【００１３】
この発明の第１の様態は、タイムスタンプの基準となるローカル時刻を提供するローカルクロックと、ローカル時刻の補正処理を繰り返し実行する補正部と、補正処理ごとの時刻補正量を記憶する記憶部と、制御対象に関わるデータを収集するデータ収集部と、収集されたデータをタイムスタンプ付きで蓄積するデータベースと、データベースへのクエリで指定された期間に対応するデータをデータベースから抽出する抽出部と、抽出されたデータのタイムスタンプを時刻補正量に基づいて修正する修正部と、修正されたタイムスタンプ付きのデータをクエリの発出元に向け返送する応答部とを具備するように構成したものである。
【００１４】
このような構成であるから、例えば定期的に実行されるローカル時刻の補正処理の、各回ごとの時刻補正量が記憶部に記憶される。制御対象に関わるデータが、データ収集部により収集され、タイムスタンプ付きでデータベースに蓄積される。データベースへのクエリを受けると、このクエリで指定された期間に対応するデータがデータベースから抽出される。抽出されたデータのタイムスタンプは、修正部により、上記時刻補正量に基づいて修正される。そして、修正されたタイムスタンプ付きのデータが、クエリの発出元に向けて返送される。
【００１５】
これにより、データベースから読み出されたデータに付随するタイムスタンプは、クエリ元に返送される前に修正される。つまり、内部クロックに生じた誤差によるタイムスタンプのずれが修正され、従って、正確なタイムスタンプを伴ったデータを取得することが可能になる。
【００１６】
この発明の第２の様態は、記憶部に、補正処理ごとの時刻補正量をそれぞれの補正処理を識別するための識別子に対応付けて記憶させ、データベースに、タイムスタンプ付きデータと、当該データのタイムスタンプの由来するローカル時刻についての補正処理の識別子とを含むレコードを蓄積し、修正部が、抽出されたデータを含むレコードに含まれる識別子に対応する時刻補正量を取得し、取得された時刻補正量に基づいて、抽出されたデータのタイムスタンプを修正するように構成したものである。
【００１７】
このような構成であるから、補正処理での時刻補正量は、各回ごとの識別子に対応付けて記憶される。タイムスタンプ付きデータは、そのタイムスタンプの元になったローカル時刻をもたらした補正処理の識別子とセットでデータベースに蓄積される。修正部は、抽出されたデータを含むセット（レコード）の識別子を参照して時刻補正量を取得し、その値に基づいてタイムスタンプを修正する。
【００１８】
つまり、タイムスタンプと、このタイムスタンプを修正するための時刻補正量への参照（識別子）とがワンセットでデータベースに蓄積される。このようなデータ構造を用いることで、タイムスタンプの修正に係わる処理がシンプルになり、実装の容易さ、あるいは処理時間の短縮などの効果を得ることができる。
【００１９】
この発明の第３の様態は、修正部が、取得された時刻補正量を補正処理の実行された時刻を基準として内挿した値に基づいてタイムスタンプを修正するように構成したものである。
【００２０】
このような構成であるから、タイムスタンプは、その元となったローカル時刻の補正処理の実行された時刻を基準として、対応する時刻補正量を内挿した値に基づいて修正される。例えば、２４時間間隔で補正処理が実行されるとし、その間の時刻補正量が０．６ｍｓｅｃであったとする。この場合、前回の補正処理から１２時間後に付されたタイムスタンプは、０．３ｍｓｅｃ分だけ修正されることになる。同様に、８時間後のタイムスタンプであればその修正量は０．２ｍｓｅｃとなる。
【００２１】
すなわちタイムスタンプは、時刻補正量を、前回からの経過時間で比例配分した値で補正される。これにより、タイムスタンプの修正にかかる有効数字の桁数を格段に細かくすることができ、精度を飛躍的に向上させることができる。
【００２２】
この発明の第４の様態は、データベースが、期間の指定を含むクエリへの応答に備えて設計された時系列データベースであるように構成したものである。
【００２３】
このように、時系列データベースにデータを蓄積することで、時間範囲を指定したクエリへの応答性を高めることができる。
【００２４】
この発明の第５の様態は、補正部が、グローバル時刻を提供する時刻サーバにアクセスしてローカル時刻の補正処理を実行するように構成したものである。  
このような構成であるから、例えばＮＴＰサーバにアクセスしてグローバル時刻を参照することで、世界的に統一された基準のもとでタイムスタンプを修正することができる。
【００２５】
この発明の第６の様態は、データ収集部が、補正部による補正処理の頻度よりも高い頻度でデータを収集するように構成したものである。  
このような構成であるから、例えば、データ収集サイクルが数ｍｓｅｃオーダのシステムにも適用することができる。
【００２６】
この発明の第７の様態は、さらに、補正処理ごとの時刻補正量を用いたフィードバック学習により補正処理の精度に関わる学習データを作成する学習部を具備し、補正部が、作成された学習データを参照してローカル時刻を補正するように構成したものである。
【００２７】
このような構成であるから、学習部により、過去の補正処理の精度に関する学習データが作成され、ローカル時刻は学習データを参照して補正される。従って内部クロックそのものの精度が向上し、ひいてはタイムスタンプの精度も高めることができる。
【００２８】
この発明の第８の様態は、さらに、ローカル時刻の補正処理の妥当性を判定する判定部を具備し、補正部が、判定部により妥当でないと判定された補正処理を無効とするように構成したものである。
【００２９】
このような構成であるから、例えば、時刻補正量が発振する場合や、誤ったタイムゾーン設定で補正処理が実行された場合、そのことが判定部により判定され、補正処理が無効にされる。従って、補正処理が誤ってなされたままの状態が継続することを防止できる。
【００３０】
この発明の第９の様態は、クロックを具備する装置に備えられたデータベースに蓄積されるレコードのデータ構造であって、装置の制御対象に関わるデータと、データに付与されたタイムスタンプと、クロックにより提供される時刻の補正処理を識別するための識別子とを含むように構成したものである。
【００３１】
このようなデータ構造を用いることにより、時刻が、どの補正処理により補正されたのかという情報を、個々のデータおよびタイムスタンプとひとまとめにして管理することができる。つまり、時刻の補正処理は例えば周期的（１時間ごと、１２時間ごとあるいは２４時間ごと）に実施されるが、各回の補正処理を、通し番号などで区別することができる。レコードがこの通し番号（識別子の一例）を含むことで、各レコードのタイムスタンプが、どの補正処理で補正された時刻に由来するのかを特定することができる。このことを利用して、タイムスタンプの補正量を適切に計算することができる。
【発明の効果】
【００３２】
本発明によれば、正確なタイムスタンプを付与されたデータを取得することの可能な制御装置、タイムスタンプ修正方法、プログラムおよびデータ構造を提供することができる。
【図面の簡単な説明】
【００３３】
【図１】実施形態に係わる制御装置を含む制御システムの一例を示す図。
【図２】実施形態に係わる制御システムの一例を示すブロック図。
【図３】コンピュータ２００のハードウェア構成の一例を示すブロック図。
【図４】コンピュータ２００のソフトウェア構成の一例を示すブロック図。
【図５】ＰＬＣ１００の一例を示すブロック図。
【図６】ＮＴＰログ１０２ａの一例を示す図。
【図７】時系列データベース１０２ｂの一例を示す図。
【図８】実施形態に係るブロック間でのデータフローの一例を示す模式図。
【図９】実施形態に係る処理手順の一例を示すシーケンスチャート。
【図１０】タイムスタンプの修正されたデータの一例を示す図である。
【発明を実施するための形態】
【００３４】
図１は、実施形態に係わる制御装置を含む制御システムの一例を示す図である。制御システムは、例えば工場や物流倉庫などの拠点１０００に設置される。制御システムは、制御装置の一例としてのＰＬＣ１００と、このＰＬＣ１００にＬＡＮ（Local Area Network）３を介して通信可能に接続されるコンピュータ（ＰＣ）２００とを備える。
【００３５】
例えば、ＣＤ−ＲＯＭなどの記録メディア３０から、実施形態に係る手順や方法をＰＣ２００に実行させるための命令を含むプログラムを、ＰＣ２００にインストールすることが可能である。ＣＤ−ＲＯＭ３０は、コンピュータその他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を光学的に記録可能な媒体である。このほか、各種のデータを電気的、磁気的、機械的又は化学的作用により記録可能な媒体を用いることも可能である。
【００３６】
ＰＬＣ１００は、拠点１０００に形成されたフィールドバス２に接続される。フィールドバス２には、制御対象の一例としてのフィールド装置群８が接続される。フィールド装置群８は、例えばリモートＩ／Ｏ（Input/Output）装置１２、リレー群１４、Ｉ／Ｏユニット１６、画像センサ１８、カメラ２０、サーボドライバ２２およびサーボモータ２４を含む。これらのフィールド装置群８は、制御に係わる各種のデータを、フィールドバス２を介して制御装置１００と授受する。ＰＬＣ１００は、取得したデータを組み込みデータベースに蓄積する。
【００３７】
フィールドバス２には、データの到達時間を保証可能なプロトコルを採用することが好ましい。この種のプロトコルを採用するネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ（登録商標）／ＩＰ、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００３８】
ＰＬＣ１００は、さらに、ネットワーク３００に接続可能なインタフェースを備える。ネットワーク３００には、グローバル時刻を提供する時刻サーバ４００が設置される。ＰＬＣ１００は、この時刻サーバ４００に定期的にアクセスし、自らの内部クロック（リアルタイムクロック（ＲＴＣ））をグローバル時刻に同期させるべく、補正する。
【００３９】
実施形態において、時刻サーバ４００は、例えばインターネットに接続されるＮＴＰサーバである。ＮＴＰサーバは、さらに上位のタイムサーバに接続されたラジオ・クロックや原子時計から、ＵＴＣ（協定世界時）に同期したグローバル時刻を取得する。つまりＰＬＣ１００は、ＮＴＰサーバあるいはタイムサーバのいずれかにアクセスすることによって、内部クロックをグローバル時刻に同期させることができる。
【００４０】
図２は、図１に示される制御システムの一例を示すブロック図である。一例として、複数のユニットを組み合わせたビルディングブロックタイプとして知られる形態のＰＬＣ１００を示す。このほか、パッケージタイプや、ベース装着タイプのＰＬＣも知られている。
【００４１】
ＰＬＣ１００は、電源部５１、ＣＰＵブロック５２、複数のＩＯブロック５３および特殊ブロック５４を備える。このうちＣＰＵブロック５２、ＩＯブロック５３および特殊ブロック５４は、装置内に設けられるシステムバス５５により接続される。これらのブロックが互いにデータを授受可能に接続されることにより、ＰＬＣ１００は、コンピュータとして動作する。つまりＰＬＣ１００は、プロセッサおよびメモリを備えるコンピュータである。
【００４２】
ＰＬＣ１００の電源部５１は、ＣＰＵブロック５２、Ｉ／Ｏブロック５３および特殊ブロック５４に、駆動電圧を供給する。
【００４３】
ＣＰＵブロック５２は、ＣＰＵを備え、ＰＬＣ１００の中枢として機能する。ＣＰＵブロック５２は、フィールド装置群８に至るフィールドバスと、ＰＣ２００に至るＬＡＮ３とに接続される。
【００４４】
Ｉ／Ｏブロック５３は、Ｉ／Ｏユニット１６に接続され、リレーや検出スイッチなどから発生したデータを取得してＣＰＵブロック５２に送る。制御に係わるこの種のデータとしては、例えばサーボモータのトルク、物品（ワーク）の搬送速度、ロボットアームの角度など、多種多様なデータがある。もちろん、これらに限定されるものではない。
【００４５】
特殊ブロック５４は、電源部５１、ＣＰＵブロック５２およびＩ／Ｏブロック５３によりサポートされていない処理を実行する。特殊ブロック５４は、例えば、アナログデータの入出力、温度制御、特定の通信方式による通信などの処理を実行する。
【００４６】
図３は、ＰＣ２００のハードウェア構成の一例を示すブロック図である。ＰＣ２００は、ＣＰＵ４１、ＲＯＭ（Read Only Memory）４２、ＲＡＭ（Random Access Memory）４３、およびハードディスクドライブ（ＨＤＤ）４４を備える。ＣＰＵ４１は、ＰＣ２００の演算部に相当する。ＲＯＭ４２、ＲＡＭ４３およびハードディスク４４は、ＰＣ２００の記憶部に相当する。
【００４７】
ＣＰＵ４１は、ＯＳ（Operating System）を含む各種プログラムを実行する。ＲＯＭ４２は、ＢＩＯＳ（Basic Input Output System）や各種データを格納する。ＲＡＭ４３は、ハードディスク４４からロードされたプログラムやデータを一時的に記憶する。ハードディスク４４は、ＣＰＵ４１により実行されるプログラムやデータを記憶する。
【００４８】
ＰＣ２００は、さらに、キーボード４５、マウス４６、モニタ４７、光学メディアドライブ４８、および通信インタフェース（ＩＦ）４９を備える。キーボード４５およびマウス４６は、ユーザからの操作を受付ける。モニタ４７は、各種の情報を視覚的に表示する。光学メディアドライブ４８は、ＣＤ−ＲＯＭ３０などの記録媒体に記録されたディジタルデータを読み取る。通信インタフェース（ＩＦ）４９は、ＬＡＮ３に接続されてＰＬＣ１００と通信する。
【００４９】
ＰＣ２００で実行される各種プログラムは、例えばＣＤ−ＲＯＭ３０に記録されて流通することができる。このＣＤ−ＲＯＭ３０に格納されたプログラムは、光学メディアドライブ４８により読み取られ、ハードディスク（ＨＤＤ）４４などに格納される。あるいは、上位のサーバコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【００５０】
図４は、ＰＣ２００のソフトウェア構成の一例を示すブロック図である。ＰＣ２００は、データマイニングツール２０１と、機械学習パラメータ設定ツール２０２とを備える。データマイニングツール２０１および機械学習パラメータ設定ツール２０２は、例えば、ＯＳ２０３の制御のもとで動作するアプリケーションプログラムのうちの一つである。つまり、ハードディスクドライブ４４（図３）からＲＡＭ４３にロードされたプログラムをＣＰＵ４１が解釈し、実行することで、ＰＣ２００は、データマイニングツール２０１および機械学習パラメータ設定ツール２０２として動作する。
【００５１】
データマイニングツール２０１は、クエリプログラム２０１ａ、データマイニングプログラム２０１ｂおよび可視化プログラム２０１ｃを備える。クエリプログラム２０１ａは、時系列データベースから所望のデータを取得するためのクエリを作成する。データマイニングプログラム２０１ｂは、クエリにより取得されたデータを既定のアルゴリズムに基づいて処理して、制御に係わる予測処理などを行う。可視化プログラム２０１ｃは、データ処理の結果をグラフに表示するなどして、人間とのヒューマンマシンインタフェースの一部を担う。これによりＵＩ（User Interface）を持たないＰＬＣについても、ＧＵＩ（Graphical User Interface）環境を利用することができる。
【００５２】
これらのブロックにより、データマイニングツール２０１は、クエリにおける特徴量の決定、異常検知手法の決定、機械学習パラメータの決定、または異常検知結果の評価などを実行する。
【００５３】
機械学習パラメータ設定ツール２０２は、例えばＩＥＣ ６１１３１−３に準拠するＰＬＣ向けのプログラムをクロス開発するための統合開発環境（ＰＬＣプログラムＩＤＥ（Integrated Development Environment））により提供される。機械学習パラメータ設定ツール２０２は、ＰＬＣ変数アクセスプログラム２０２ａを含む。ＰＬＣ変数アクセスプログラム２０２ａは、ＰＬＣ１００にアクセスして、変数にマッピングされた各種データ（センサデータ、サーボモータのデータなど）を取得する。
【００５４】
図５は、ＰＬＣ１００の一例を示す機能ブロック図である。ＰＬＣ１００は、プロセッサ１０１、メモリ１０２、内部クロック１０３、チップセット１０４、およびインタフェース部１０５を備える。これらは内部バス１１０を介して接続される。なお、プロセッサ１０１、メモリ１０２、内部クロック１０３、チップセット１０４、およびインタフェース部１０５は、例えば、ＣＰＵブロック５２（図２）に実装される。
【００５５】
内部クロック１０３は、例えば水晶発振器とＰＬＬ（Phase Lock Loop）回路とを備える、高精度のパルスジェネレータである。内部クロック１０３は、ＰＬＣ１００のローカルクロックを提供する。このローカルクロックは、データに付与されるタイムスタンプの基準としても使用される。
【００５６】
チップセット１０４は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。例えば、チップセット１０２は、接続されている各種コンポーネントとの間でデータを授受したり、プロセッサ１０１による演算処理の結果生成されたデータなどをキャッシュしたりする。また、チップセット１０４は、内部バス１１０を介したプロセッサ１０１、メモリ１０２、およびインタフェース部１０５間でのデータの授受を調停する。
【００５７】
インタフェース部１０５は、例えばＵＳＢ（Universal Serial Bus）コネクタやシリアルポート／パラレルポート等のコネクタを備える。インタフェース部１０５は、ローカルバス１０５ａ、およびフィールドバス１０５ｂを備える。ローカルバス１０５ａは、接続されたセンサ８１からデータを取得し、制御相手先のアクチュエータ８２にコントロール信号を送出する。同様に、フィールドバス１０５ｂは、接続されたセンサ８３からデータを取得し、制御相手先のアクチュエータ８４にコントロール信号を送出する。
【００５８】
メモリ１０２は、ＮＴＰログ１０２ａ、時系列データベース１０２ｂ、制御プログラム１０２ｃおよび学習データ１０２ｄを記憶する。
【００５９】
メモリ１０２は、例えばＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）などの記憶素子、あるいはハードディスクドライブ（Hard Disk Drive：ＨＤＤ）などの記憶デバイスである。このほか、フラッシュメモリ、ＳＤＲＡＭ（Synchronous Dynamic RAM）などの半導体メモリ、あるいはＥＰＲＯＭ（Erasable Programmable ROM）、ＥＰＲＯＭ（Electrically Erasable Programmable ROM）などの不揮発性メモリを用いても良い。
【００６０】
プロセッサ１０１は、実施形態に係る処理手段として、補正部１０１ａ、データ収集部１０１ｂ、抽出部１０１ｃ、修正部１０１ｄ、応答部１０１ｅ、学習部１０１ｆおよび判定部１０１ｇを備える。これらは、例えばＣＰＵが制御プログラム１０２ｃに従って実行する演算処理により実現されることができる。
【００６１】
補正部１０１ａは、内部クロック１０３のローカルクロックを繰り返し補正する。すなわち補正部１０１ａは、時刻サーバ４００（図１）に例えば１日に１回の頻度で定期的にアクセスして、ローカルクロックの補正処理を実行する。例えばＵＮＩＸ（登録商標）ライクなシステムでは、ＮＴＰＤコマンドを用いて時刻補正処理を実行することができる。時刻補正処理の履歴は、ＮＴＰログとしてメモリ１０２に記憶される。
【００６２】
図６は、メモリ１０２に記憶されるＮＴＰログ１０２ａの一例を示す図である。ＮＴＰログ１０２ａは、補正処理ごとの時刻補正量を、それぞれの補正処理を識別するための識別子（IDentification：ＩＤ）に対応付けてテーブル化したデータベースである。さらに、図示するように、補正処理の実行された時点のタイムスタンプを併せて記録しても良い。タイムスタンプの間隔を参照すると、ローカルクロックの補正処理が１時間周期で実行されていることが分かる。例えばＩＤ＝３４４での時刻補正量は、＋０．３０５ｓｅｃ（秒）である。
【００６３】
なお、ＰＬＣ１００にインストールされたＯＳ（Operating System）によりシステムログが作成されていれば、このシステムログから必要な情報を抽出してＮＴＰログ１０２ａを作成することも可能である。
【００６４】
データ収集部１０１ｂは、制御対象に関わるデータを、例えばミリ秒、あるいはマイクロ秒の周期で収集する。収集されたデータは、例えば収集された時点のタイムスタンプを付与されて、メモリ１０２の時系列データベースに蓄積される。
【００６５】
図７は、メモリ１０２に記憶される時系列データベース１０２ｂの一例を示す図である。時系列データベース１０２ｂは、期間の指定を含むクエリへの応答に備えて設計されたデータベースであり、ＰＬＣ１００の組み込みデータベースとして利用可能である。図７に示されるように、時系列データベース１０２ｂは、インデックス（Ｉｎｄｅｘ）に対応付けて複数のレコードを記録したデータベースである。
【００６６】
各レコードは、データ収集部１０１ｂから渡されたタイムスタンプ付きデータ（Ｄａｔａ１，Ｄａｔａ２）と、これらのデータのタイムスタンプの由来するローカルクロックについての補正処理のＩＤ（ＮＴＰ−ＩＤ）とを含む。つまり実施形態にかかるレコードは、ＰＬＣ１００の制御対象に関わるデータと、そのタイムスタンプと、ローカルクロックの補正処理を識別するためのＩＤとを含むデータ構造を有する。さらに、カウンタ値（Ｃｏｕｎｔｅｒ）をレコードに含めても良い。カウンタ値は、例えばローカルクロックパルスの基準時刻からのカウント値である。
【００６７】
図７において、最下段のインデックス１５４のレコードのタイムスタンプは、“2017-03-03-09:00:00.014”である。このタイムスタンプは、何らかの時点で補正されたローカルクロックに基づいて付されているはずで、その補正処理を区別するためのカラムがＮＴＰ−ＩＤである。レコード１５４のＮＴＰ−ＩＤは“３４４”であり、そのタイムスタンプ“2017-03-03-08:00:00.014”が由来するローカルクロックは、図６を参照すると、“2017-03-03-09:00:00.014”の時点で補正されたことがわかる。
【００６８】
つまりレコード１５４は、まさに時刻補正の実行されたその時点に取得されたデータであることが示される。しかし時間が経過するにつれ、タイムスタンプには誤差が累積される。実施形態ではこれに対応するための技術が開示される。
【００６９】
図５に戻って説明を続ける。抽出部１０１ｃは、時系列データベース１０２ｂへのクエリで指定された期間に対応するデータを、時系列データベース１０２ｂから抽出する。修正部１０１ｄは、抽出されたデータのタイムスタンプを、ＮＴＰログ１０２ａの時刻補正量に基づいて修正する。
【００７０】
応答部１０１ｅは、修正されたタイムスタンプ付きのデータを、クエリの発出元に向けて返送する。なお、クエリの送出元は、ＰＬＣ１００それ自身のプロセス（サービス）であっても良いし、または、ＰＣ２００や、さらにその上位のサーバなどであってもよい。
【００７１】
学習部１０１ｆは、補正処理ごとの時刻補正量を用いたフィードバック学習により、補正処理の精度に関わる学習データを作成する。作成された学習データはメモリ１０２に記憶される（学習データ１０２ｄ）。補正部１０１ａは、この学習データ１０２ｄを参照してローカルクロックの補正処理を実行しても良い。
【００７２】
判定部１０１ｇは、ローカルクロックの補正処理の妥当性を判定する。例えば、判定部により補正処理が妥当でないと判定されると、補正部１０１ａはその補正処理を無効とする。例えば、時刻補正量が発振したり、予期せぬエラーにより誤ったタイムゾーン設定で補正処理が実行されてしまうことがある。判定部１０１ｇを設けることで、このような不具合を防止することができる。
【００７３】
なお、補正部１０１ａ、データ収集部１０１ｂ、抽出部１０１ｃ、修正部１０１ｄ、応答部１０１ｅ、学習部１０１ｆおよび判定部１０１ｇは、例えばＰＬＣプログラムＩＤＥ上で開発されるＰＯＵ、あるいはＦＢとして実装されることが可能である。ＰＯＵは、ＩＥＣ ６１１３１−３におけるプログラムの実行モデルの単位である。ＰＯＵには、ユーザプログラム全体を構成する基本的な単位として、アルゴリズムとローカル変数テーブルを記述するプログラム、ＦＢ、ファンクションの３種類がある。
【００７４】
ファンクションは、演算処理など、入力に対して出力が一意に決まる部品を作成するときに使用されるＰＯＵである。ＦＢは、タイマやカウンタなど、状態により、同じ入力に対して出力が異なる場合がある部品を作成するときに使用されるＰＯＵである。プログラムは、ファンクションおよびＦＢと並ぶ、３種類のＰＯＵのひとつであり、タスクに割り付けられて動作する。
【００７５】
図８は、実施形態に係るブロック間でのデータフローの一例を示す模式図である。アナログデータ（Analog）、ディジタルデータ（Digital）、エンコーダ（Encoder）の回転量、あるいは軸（Axis）の角度データ等のデータは、インタフェース部１０５において既定のフォーマットにデータ化される。このデータは、制御プログラム１０２ｃによるデータ収集処理（データ収集部１０１ｂ）によりＰＬＣ１００に取り込まれ、変数値にマッピングされる。
【００７６】
データ収集部１０１ｂは、変数値にタイムスタンプを付与し、時系列データベース１０２ｂに書き込む。この操作は、時系列データベース１０２ｂのシェル（Ｓｈｅｌｌ）１０６に、例えばＳＱＬ構文におけるＰＵＴでデータを渡すことで実現される。この処理は、リレーショナルデータベース（ＲＤＢ）に対するＩＮＳＥＲＴに相当する。
【００７７】
また、シェル１０６にアプリケーション１０７からクエリ（Ｑｕｅｒｙ）を渡せば、このクエリで指定されたデータが抽出される。このように、時系列データベース１０２ｂは、プロセスからの割り込みに逐次応答するデーモン（Ｄａｅｍｏｎ）としての側面を備えていても良い。
【００７８】
さらに、例えばメモリカードなどに時系列データベース１０２ｂをコピーして、データコネクタ（Data Connector）経由でＰＣ２００に所望の時系列データ（センサ入力、制御値、出力値など）を渡すこともできる。ＰＣ２００は、取得した時系列データを用いて時系列分析、データマイニングなどの処理を行うことができる。次に、上記構成を基礎として実施形態における作用を説明する。
【００７９】
図９は、実施形態に係る処理手順の一例を示すシーケンスチャートである。図９において、補正部１０１ａは、ローカルクロックの時刻補正を定期的に実行する（ステップＳ１）。時刻補正処理が実行される度に、その履歴がＮＴＰログに記録される（ステップＳ２）。つまり時刻補正量とＮＴＰ−ＩＤとがＮＴＰログ１０２ａに記録される。また、時系列データベース１０２ｂ（図７）のＮＴＰ−ＩＤカラムにも、ＮＴＰログ１０２ａと同じＩＤが書き込まれる（ステップＳ３）。
【００８０】
例えば、図８のアプリケーション１０７から、時間レンジとして“2017-03-03-08:00”を指定したクエリが与えられたとする（ステップＳ４）。そうするとシェル１０６（図８）は、時系列データベース１０２ｂへのデータ読み出しプロセスを開始する（ステップＳ５）。これに応じて、時系列データベース１０２ｂから、タイムスタンプを修正する前のデータ（ＲＡＷデータ）が読み出されて修正部１０１ｄに渡される（ステップＳ６）。
【００８１】
また修正部１０１ｄは、補正情報を補正部１０１ａから取得する（ステップＳ７）。つまり、クエリの時間レンジに対応するＮＴＰ−ＩＤと、その時刻補正量とを、修正部１０１ｄはＮＴＰログ１０２ａから取得する。これらの情報をもとに、修正部１０１ｄは、抽出されたデータのタイムスタンプを修正する（ステップＳ８）。
【００８２】
図７の、インデックス１〜４のレコードを含む時間レンジのクエリが与えられたとする。レコード４に着目すると、ＲＡＷデータのタイムスタンプは“2017-03-03-08:00.015”であり、ＮＴＰ−ＩＤは３４３である。よって修正部１０１ｄは、ＮＴＰログ１０２ａから、ＩＤ＝３４３に対応する時刻補正量０．２０５を取得する。
【００８３】
修正部１０１ｄは、取得した時刻補正量０．２０５をＮＴＰの動作間隔（例えば１時間）で割って、単位時間（例えば１マイクロ秒）あたりの時刻ずれ量を計算する。例えば次式（１）により単位時間当たりの時刻ずれ量を計算できる。  
時刻ずれ量／時間  ＝  ０．２０５／（６０×６０）  …  （１）
または次式（２）のように、ＮＴＰログ１０２ａ（図６）のタイムスタンプからＮＴＰのインターバルを計算しても良い。  
時刻ずれ量／時間  ＝  ０．２０５／（“2017-03-03-09:00.014”−“2017-03-03-08:00.035”）  …  （２）  
次に修正部１０１ｄは、単位時間当たりの時刻ずれ量に、ＮＴＰ動作時刻からの経過時間を乗算して、各レコードに適用すべき時刻修正量を計算する。例えば、レコード４に対しては、ＮＴＰ動作時刻からの経過時間＝（“2017-03-03-08:00.015”−“2017-03-03-07:00.148”）である。これを、次式（３）のように時刻ずれ量／時間に乗算して、時刻修正量を算出することができる。  
時刻修正量  ＝  時刻ずれ量／時間×ＮＴＰ動作時刻からの経過時間  …  （３）
式（１）〜（３）を用いて説明したような計算は、要するに比例配分である。つまり修正部１０１ｄは、取得した時刻補正量を、ＮＴＰ処理の実行された時刻を基準として内挿した値に基づいて、各レコードのタイムスタンプを修正する。
【００８４】
図１０は、クエリ元に返送される、タイムスタンプの修正された状態のデータの一例を示す図である。レコード４のタイムスタンプは、“2017-03-03-08:00.016”に修正されたことが分かる。
【００８５】
以上説明したようにこの実施形態では、ＰＬＣ１００に組み込みの時系列データベース１０２ｂに、データを記録する。また、ＰＬＣ１００のローカルクロックを、ＮＴＰサーバなどの時刻サーバ４００に定期的にアクセスして補正する。その際、時刻補正量と、各回の補正処理を識別するためのＮＴＰ−ＩＤとを対応付けてＮＴＰログ１０２ａに記録する。クエリが到来すると、指定された時間レンジに対応するレコードのタイムスタンプを、対応するＮＴＰ−ＩＤの時刻補正量を比例配分して修正する。
【００８６】
このようにしたので、クエリの送出元には、タイムスタンプを修正された状態のデータが返送される。つまり正確なタイムスタンプを出力することができる。従って、正確な時刻情報に基づいてデータ解析を実施することが可能になる。よって例えば、サーボモータのトルク修正の精度向上や、速度データの時系列解析の精度向上などの効果を得ることができる。  
また実施形態では、オリジナルのバイナリデータ（ＲＡＷデータ）のタイムスタンプは修正されないので、発生したデータをそのまま保っておくことができる。
【００８７】
また、学習部１０１ｆにより、時刻補正の統計情報から誤差の補正精度をフィードバック学習するようにしているので、より最適な時刻補正を実現することが可能である。さらに、判定部１０１ｇにより時刻補正処理の妥当性を判定し、時刻補正が妥当でない場合には補正を無効にするようにした。従って、時刻ずれの生じた状態がそのまま継続されることもない。
【００８８】
これらのことから、この実施形態によれば、正確なタイムスタンプを付与されたデータを取得することの可能な制御装置、タイムスタンプ修正方法、プログラムおよびデータ構造を提供することが可能となる。
【００８９】
なお、この発明は上記実施形態に限定されるものではない。例えば実施形態に係るＰＬＣ１００のプログラムは、記録媒体に記録することも、ネットワークを介して提供することも可能である。  
コンピュータに関連して用いられる「プロセッサ」という用語は、例えばＣＰＵ、ＧＰＵ(Graphics Processing Unit)、或いは、ＡＳＩＣ（Application Specific Integrated Circuit）、ＳＰＬＤ（Simple Programmable Logic Device）、ＣＰＬＤ（Complex Programmable Logic Device）、またはＦＰＧＡ等の回路と理解され得る。
【００９０】
プロセッサは、メモリに記憶されたプログラムを読み出し実行することで、プログラムに基づく特有の処理手順を実行する。メモリに代えて、プロセッサの回路内にプログラムを直接組み込むよう構成することも可能である。このケースでは、プロセッサは回路内に組み込まれたプログラムを読み出し実行することで特有の処理手順を実行する。
【００９１】
また、実施形態の制御システムは、少なくともその一部が、クラウドサーバ装置により構成されていてもよい。すなわち、実施形態の制御システムにより実行される処理手順の少なくとも一部は、クラウド・コンピューティングにより実行されてもよい。
【００９２】
クラウド・コンピューティングには、アプリケーション（ソフトウェア）をサービスとして提供するＳａａＳ（Software as a Service）と、アプリケーションを稼働させるための基盤（プラットフォーム）をサービスとして提供するＰａａＳ（Platform as a Service）と、サーバ装置、中央演算処理装置およびストレージなどのリソースをサービス（パブリッククラウド）として提供するＩａａＳ（Infrastructure as a Service）とのうち、少なくとも一つが含まれていてもよい。例えば、このクラウド・コンピューティングには、クラウド・サービス提供層（ＰａａＳ）により、インターネットを介した遠隔操作が含まれていてもよい。
【００９３】
また、データベースの種別は時系列データベースに限定されるものではない。また、ＰＬＣ１００のブロックの一部をＰＣ２００に実装することもできる。
【００９４】
さらに、ＰＬＣ１００単独でなく、他のデータベース（上位データベース）にも同様のブロックをインプリメントし、複数のデータベース間でタイムスタンプを修正することで、異なるデータベースのデータを精度高く統合することができる。
【００９５】
このほか、システムの形態、ネットワークのプロトコル、プログラムのインストール手法、取得されるデータの種別（目標値、結果値など）、ＰＬＣの処理手順および処理内容などについても、この発明の要旨を逸脱しない範囲で種々変形して実施することが可能である。
【００９６】
要するにこの発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【００９７】
上記の実施形態の一部又は全部は以下の付記のようにも記載され得るが、以下に限られるものではない。  
（付記１）
タイムスタンプの基準となるローカル時刻を提供するローカルクロックと、プロセッサと、記憶部とを具備し、
前記プロセッサは、
前記ローカル時刻の補正処理を繰り返し実行し、
前記補正処理ごとの時刻補正量を前記記憶部に記憶させ、
制御対象に関わるデータを収集し、
前記収集されたデータを前記タイムスタンプ付きで前記記憶部のデータベースに蓄積し、
前記データベースへのクエリで指定された期間に対応するデータを前記データベースから抽出し、
前記抽出されたデータのタイムスタンプを前記時刻補正量に基づいて修正する、制御装置。
【００９８】
（付記２）
ローカルクロックにより提供されるローカル時刻の補正処理を、少なくとも１つのプロセッサを用いて、繰り返し実行する過程と、
少なくとも１つのプロセッサを用いて、前記補正処理ごとの時刻補正量を記憶部に記憶させる過程と、
少なくとも１つのプロセッサを用いて、制御対象に関わるデータを収集する過程と、
前記収集されたデータを、少なくとも１つのプロセッサを用いて、前記ローカル時刻を基準とするタイムスタンプ付きでデータベースに蓄積する過程と、
少なくとも１つのプロセッサを用いて、前記データベースへのクエリで指定された期間に対応するデータを前記データベースから抽出する過程と、
少なくとも１つのプロセッサを用いて、前記抽出されたデータのタイムスタンプを前記時刻補正量に基づいて修正する過程と
を具備する、タイムスタンプ修正方法。
【符号の説明】
【００９９】
２…フィールドバス、４…レコード、８…フィールド装置群、１２…装置、１４…リレー群、１６…Ｉ／Ｏユニット、１８…画像センサ、２０…カメラ、２２…サーボドライバ、２４…サーボモータ、３０…記録メディア、４１…ＣＰＵ、４２…ＲＯＭ、４３…ＲＡＭ、４４…ＨＤＤ、４５…キーボード、４６…マウス、４７…モニタ、４８…光学メディアドライブ、４９…通信インタフェース、５１…電源部、５２…ＣＰＵブロック、５３…ＩＯブロック、５４…特殊ブロック、５５…システムバス、８１…センサ、８２…アクチュエータ、８３…センサ、８４…アクチュエータ、１００…制御装置、１０１…プロセッサ、１０１ａ…補正部、１０１ｂ…データ収集部、１０１ｃ…抽出部、１０１ｄ…修正部、１０１ｅ…応答部、１０１ｆ…学習部、１０１ｇ…判定部、１０２…メモリ、１０２ａ…ＮＴＰログ、１０２ｂ…時系列データベース、１０２ｃ…制御プログラム、１０２ｄ…学習データ、１０３…内部クロック、１０４…チップセット、１０５…インタフェース部、１０５ａ…ローカルバス、１０５ｂ…フィールドバス、１０６…シェル、１０７…アプリケーション、１１０…内部バス、２００…コンピュータ（ＰＣ）、２０１…データマイニングツール、２０１ａ…クエリプログラム、２０１ｂ…データマイニングプログラム、２０１ｃ…可視化プログラム、２０２…機械学習パラメータ設定ツール、２０２ａ…ＰＬＣ変数アクセスプログラム、２０３…ＯＳ、３００…ネットワーク、４００…時刻サーバ、１０００…拠点。
【図１】
2018190216.tif 000003
【図２】
2018190216.tif 000004
【図３】
2018190216.tif 000005
【図４】
2018190216.tif 000006
【図５】
2018190216.tif 000007
【図６】
2018190216.tif 000008
【図７】
2018190216.tif 000009
【図８】
2018190216.tif 000010
【図９】
2018190216.tif 000011
【図１０】
2018190216.tif 000012