〔実施形態1〕
以下、本発明の一側面に係る実施の形態(以下、「本実施形態」とも表記する)を、図1から図22に基づいて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、例えばカウンタユニット10をデータ転送装置の典型例として説明を行う。また、アナログユニット60もデータ転送装置の一例であり、詳細は後述する。本発明の一態様に係るカウンタユニット10についての理解を容易にするため、先ず、カウンタユニット10を含む制御システム1の概要を、図2を用いて説明する。
以下の説明において、「n」は「2」以上の整数を表すものとし、「m」は「2」以上で「n」以下の整数を表すものとする。また、16進法で表記した数値は、16進数を表す「0x」(ゼロエックス)を数値の前に付けて、16進法で表記した数値であることを示し、2進法で表記した数値は、2進数を表す「b」(ビー)を数値の前に付けて、2進法で表記した数値であることを示す。
§1.適用例
(制御システムの全体概要)
図2は、カウンタユニット10を含む制御システム1の全体概要を示す図である。図2に示すように、制御システム1は、データ転送装置であるカウンタユニット10と、制御装置(コントローラ)であるPLC(Programmable Logic Controller)20と、を含んでいる。制御システム1はさらに、データ転送装置であるアナログユニット60を含んでいてもよい。制御システム1は、マスタ装置としてのPLC20と、マスタ装置にネットワーク(フィールドネットワーク50)を介して接続されるスレーブ装置としてのカウンタユニット10およびアナログユニット60と、を含むマスタスレーブ制御システムである。PLC20は、フィールドネットワーク50を介したデータ伝送を管理しているという意味で「マスタ装置」と呼ばれる。
PLC20は、制御システム1全体を制御する制御装置(コントローラ)であり、カウンタユニット10およびアナログユニット60の各々と通信可能に接続されている。PLC20は、カウンタユニット10およびアナログユニット60の各々を介して、入力デバイス(計測デバイス)であるエンコーダ40およびセンサ70からの情報を入力データとして取得する。PLC20は、予め組み込まれたユーザプログラムに従って、取得した入力データを用いた演算処理を実行する。PLC20は、前記演算処理を実行して、制御システム1に対する制御内容を決定し、例えば、アクチュエータなどの出力デバイス(不図示)への制御内容を決定し、その制御内容に対応する制御データを、前記出力デバイスへと出力する。PLC20には、例えば、不図示の表示部および操作部が接続されてもよい。表示部は、画像を表示可能な液晶パネル等で構成され、また、操作部は、典型的には、タッチパネル、キーボード、マウス等で構成される。
フィールドネットワーク50は、PLC20が受信し、またはPLC20が送信する各種データを伝送し、例えば、EtherCAT(登録商標)、PROFINET(登録商標)、MECHATROLINK(登録商標)-III、Powerlink、SERCOS(登録商標)-III、CIP Motionである。また、フィールドネットワーク50は、例えば、EtherNet/IP(登録商標)、DeviceNet、CompoNet(登録商標)などであってもよい。なお、以下では、フィールドネットワーク50上をデータフレームが順次転送されることで、PLC20とスレーブ装置との間でデータが送受信される制御システム1について説明を行う。すなわち、フィールドネットワーク50上をデータフレームが順次転送されることで、PLC20とカウンタユニット10との間でデータが送受信され、また、PLC20とアナログユニット60との間でデータが送受信される。フィールドネットワーク50上をデータフレームが順次転送されることで、複数のスレーブ装置の間で、つまり、カウンタユニット10とアナログユニット60との間で、データが送受信されてもよい。
カウンタユニット10は、エンコーダ40が生成したパルス信号を受信し、受信したパルス信号の、サンプリング周期Smcごとのパルス数(以下、「カウント値Ct」とも称する)を示すデータをPLC20へと送信する、データ転送装置(通信カプラ)である。
カウンタユニット10は、PLC20をマスタ装置とするネットワーク(フィールドネットワーク50)におけるスレーブ装置であり、フィールドネットワーク50を介して、PLC20と通信可能に接続されている。カウンタユニット10は、PLC20との間で、一定の通信周期ごとに、具体的には、PLC20の制御周期Sctごとに、データ(より具体的には、データフレーム)を送受信する。
また、カウンタユニット10は、エンコーダ40と通信可能に接続されており、エンコーダ40が生成したパルス信号を入力として受け付ける。カウンタユニット10は、エンコーダ40から受け付けたパルス信号の、サンプリング周期Smcごとのパルス数(カウント値Ct)をカウントする処理を実行し、つまり、サンプリング処理を実行する。カウンタユニット10は、各々が、サンプリング周期Smcごとのカウント値Ctを示す、複数のサンプリングデータSdを生成し、それら複数のサンプリングデータSdを、1つのデータフレームに格納して、PLC20へと送信する(転送する)。
ここで、サンプリング周期Smcとは、カウンタユニット10が実行する「1回のサンプリング処理当たりの時間間隔」であり、サンプリング周期Smcは制御周期Sctよりも小さい。カウンタユニット10は、1回の制御周期Sctにおいてサンプリング処理を複数回実行し、言い換えれば、オーバーサンプリングを実行する。そして、カウンタユニット10は、各々が、各サンプリング処理において計測したカウント値Ctを示す、複数のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20へと送信する。カウンタユニット10は、1回の制御周期Sctにおいてn回実行したサンプリング処理の各々の計測結果(カウント値Ct)を示す、n個のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20へと送信する。
エンコーダ40は、カウンタユニット10へ計測結果を出力するデバイスであり、具体的には、計測量に応じたパルス信号をカウンタユニット10へと出力するパルス信号生成装置(計測デバイス)である。エンコーダ40は、例えば、コンベヤに取り付けられ、コンベヤの移動量に応じて、つまり、ワークの移動量に応じて、パルス信号を生成する。エンコーダ40は、コンベヤ(つまり、ワーク)が所定量移動するごとに、パルス波をカウンタユニット10に出力する。
アナログユニット60は、センサ70が生成したアナログ信号を受信し、受信したアナログ信号の、サンプリング周期Smcごとの値(以下、「アナログ値Al」とも称する)を示すデータをPLC20へと送信する、データ転送装置(通信カプラ)である。
アナログユニット60は、PLC20をマスタ装置とするネットワーク(フィールドネットワーク50)におけるスレーブ装置であり、フィールドネットワーク50を介して、PLC20と通信可能に接続されている。アナログユニット60は、PLC20との間で、一定の通信周期ごとに、具体的には、PLC20の制御周期Sctごとに、データ(より具体的には、データフレーム)を送受信する。
また、アナログユニット60は、センサ70と通信可能に接続されており、センサ70が生成したアナログ信号を入力として受け付ける。アナログユニット60は、センサ70から受け付けたアナログ信号の、サンプリング周期Smcごとの値(アナログ値Al)を計測する処理を実行し、つまり、サンプリング処理を実行する。アナログユニット60は、各々が、サンプリング周期Smcごとのアナログ値Alを示す、複数のサンプリングデータSdを生成し、それら複数のサンプリングデータSdを、1つのデータフレームに格納して、PLC20へと送信する(転送する)。
ここで、アナログユニット60のサンプリング周期Smc、つまり、アナログユニット60が実行する「1回のサンプリング処理当たりの時間間隔」は、制御周期Sctよりも小さい。アナログユニット60は、1回の制御周期Sctにおいてサンプリング処理を複数回実行し、言い換えれば、オーバーサンプリングを実行する。そして、アナログユニット60は、各々が、各サンプリング処理において計測したアナログ値Alを示す、複数のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20へと送信する。アナログユニット60は、1回の制御周期Sctにおいてn回実行したサンプリング処理の各々の計測結果(アナログ値Al)を示す、n個のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20へと送信する。
センサ70は、アナログユニット60へと計測結果を出力するデバイスであり、具体的には、計測量に応じたアナログ信号をカウンタユニット10へと出力するアナログ信号生成装置(計測デバイス)であり、例えば、測長センサである。センサ70は、例えば、コンベヤの頭上に取り付けられ、コンベヤに載置されたワークとの間の距離に応じて、アナログ信号を生成する。
図2に例示する制御システム1において、PLC20およびカウンタユニット10の各々には、例えばUSB(Universal Serial Bus)ケーブルである通信ケーブルを介して、ツール30(A)およびツール30(B)が接続されている。以下の説明において、ツール30(A)およびツール30(B)の各々を区別する必要がない場合は単に「ツール30」と称する。
ツール30は、制御システム1に対する各種の設定情報などを生成し、生成した設定情報を、制御システム1を構成する各機器に設定する設定装置である。ツール30は、典型的には、汎用のコンピュータで構成される。例えば、ツール30で実行される情報処理プログラムは、不図示のCD-ROM(Compact Disk-Read Only Memory)に格納されて流通してもよい。このCD-ROMに格納されたプログラムは、図示しないCD-ROM駆動装置によって読取られ、ツール30のハードディスクなどへ格納される。あるいは、ツール30は、上位のホストコンピュータなどから、ネットワークを通じて、前記DVD-ROMに格納されたプログラムと同様のプログラムをダウンロードするように構成してもよい。また、ツール30は、HMI(Human Machine Interface)により実現されてもよい。
ツール30は、例えば表示部を備え、制御システム1についての所定の情報を表示する。また、ツール30は、例えばユーザから、ツール30は、ユーザ操作を受け付け、受け付けたユーザ操作に応じて、制御システム1(例えば、PLC20、カウンタユニット10、および、アナログユニット60の各々)の各種の設定を変更する。また、ツール30は、受け付けたユーザ操作から、カウンタユニット10およびアナログユニット60の各々の設定情報を生成し、つまり、ユーザ操作に応じた設定情報を取得する。
設定情報は、例えば、「カウンタユニット10およびアナログユニット60の各々が、1回の制御周期Sctにおいて実行するサンプリング処理の回数を示す情報」を含んでいる。「カウンタユニット10およびアナログユニット60の各々が、1回の制御周期Sctにおいて実行するサンプリング処理の回数を示す情報」は、カウンタユニット10およびアナログユニット60の各々のサンプリング周期Smc、および、制御周期Sctを示す情報であってもよい。
また、設定情報は、例えば、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」および「1サンプリング周期Smcで変化し得るアナログ値Alの変化量」を示す情報を含んでいてもよい。ここで、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」は、エンコーダ40等のパルス信号生成装置のスペックおよびアプリケーション(パルス信号生成装置の使用用途)の少なくとも一方により算出することができる。パルス信号生成装置からのパルス信号をカウントする場合、カウンタユニット10が単位時間あたりに受信し得るパルス信号の数は、パルス信号生成装置の、分解能と回転速度(最大回転速度)とによって、予め決定される。そして、最大回転速度は、パルス信号生成装置のスペック(仕様、性能)から決めることができ、また、アプリケーションから決めることもできる。例えば、アプリケーションが、「パルス信号生成装置が360分解能で最大でも60rpmで回転するような低速アプリケーション」であれば、パルス信号生成装置がスペック的にはもっと高速に回転できるとしても、最大回転速度は60rpmとして想定すればよい。それゆえ、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」は、スペックおよびアプリケーションの少なくとも一方により予め決められた、「パルス信号生成装置の、分解能および最高回転数」から、算出することができる。したがって、設定情報は、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」を示す情報に代えて、スペックおよびアプリケーションの少なくとも一方により予め決められた、「パルス信号生成装置の、分解能および最高回転数」を示す情報を含んでいてもよい。
さらに、設定情報は、「カウンタユニット10のパルスカウント方式が単方向か、双方向かを示すパルスカウント方式種別」を示す情報を含んでいてもよい。前記パルスカウント方式種別は、エンコーダ40等のパルス信号生成装置の出力するパルス信号が、単方向のパルス信号であるのか、または、双方向のパルス信号であるのかを示してもよい。
ツール30は、取得した設定情報を用いて、PLC20がカウンタユニット10およびアナログユニット60の各々から受信するデータフレームに係る情報を、特に、サンプリングデータSdのデータサイズを示す情報を、生成する。ツール30は、生成した「データフレームに係る情報」を、PLC20、カウンタユニット10、および、アナログユニット60の少なくとも1つに対して設定する。
例えば、ツール30は、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」、カウンタユニット10のサンプリング周期Smc、パルスカウント方式等を示す、カウンタユニット10の設定情報を取得する。前述の通り、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」を示す情報は、エンコーダ40の分解能および最高回転数を示す情報であってもよい。
ツール30は、取得したカウンタユニット10の設定情報と制御周期Sctとから、カウンタユニット10がPLC20に送信するデータフレームに係る情報を、特に、サンプリングデータSdのデータサイズを示す情報を、生成する。例えば、ツール30は、「カウンタユニット10が、1回の制御周期Sctにおいて、2回目以降に実行したサンプリング処理」の各々の計測結果を示す、サンプリングデータSd(2)~Sd(n)の各々のデータサイズを算出する。以下の説明において、サンプリングデータSd(2)~Sd(n)の各々のデータサイズは、「圧縮サイズ」とも称する。ツール30は、算出した圧縮サイズを、カウンタユニット10が送信するデータフレームに係る情報として、PLC20およびカウンタユニット10の少なくとも一方に対して設定する(通知する)。
同様に、ツール30は、アナログユニット60の設定情報と制御周期Sctとを取得し、アナログユニット60の設定情報と制御周期Sctとから、アナログユニット60がPLC20に送信するデータフレームに係る情報を生成する。例えば、ツール30は、「アナログユニット60が、1回の制御周期Sctにおいて、2回目以降に実行したサンプリング処理」の各々の計測結果を示す、サンプリングデータSd(2)~Sd(n)の各々のデータサイズ(圧縮サイズ)を算出する。ツール30は、算出した圧縮サイズを、PLC20およびアナログユニット60の少なくとも一方に対して設定する。
(制御システムの適用例)
図3は、図2に例示した制御システム1の適用例を示す図である。図3の(A)に示すように、制御システム1は、例えば、コンベアに載せられて移動するワーク80の形状を検査するのに用いられる。エンコーダ40は、コンベアの位置に、つまり、ワーク80の位置に応じたパルス信号を出力し、センサ70は、ワーク80までの距離に応じたアナログ信号を出力する。
図3の(B)に示すように、コンベア速度が一定でない場合、距離(負方向)を縦軸として、時間を横軸とすると、コンベア速度(つまり、ワーク80の位置の単位時間あたりの変化)が変化することにより、図3の(C)に示すように、計測するワーク80の形状が歪む。これに対して、図3の(D)に示すように、距離(負方向)を縦軸として、位置を横軸とすると、ワーク位置およびコンベア速度に関わらず同じデータとなり、パターンマッチングが容易にできる。
(制御システムにおけるデータ転送装置の役割)
これまでに図2および図3を用いて説明してきたように、カウンタユニット10およびアナログユニット60の各々は、1回の制御周期Sctにおいてサンプリング処理を複数回(例えば、n回)実行する。カウンタユニット10およびアナログユニット60の各々は、実行した複数のサンプリング処理の各々の計測結果に対応する複数のサンプリングデータSdをPLC20に送信する。つまり、カウンタユニット10およびアナログユニット60の各々は、制御周期Sctごとに、サンプリング回数分のサンプリングデータSdを、PLC20に送信する。例えば、1回の制御周期Sct中にサンプリング処理がn回実行される場合、n回のサンプリング処理の各々において計測されたn個の計測結果(例、n個のカウント値Ct)を示すn個のサンプリングデータSdが、制御周期Sctごとに、PLC20に送信される。
このようなオーバーサンプリングの実施に際しては、一般に、サンプリングデータSdのデータサイズがシステム内の制約上問題となる。特に、制御システム1のように、カウンタユニット10とアナログユニット60とを組み合わせて使用する場合、1回の制御周期Sctにおいてフィールドネットワーク50上を転送されるデータ(より正確には、データフレーム)のデータサイズが膨大になる。
例えば、制御周期Sctが1msで、サンプリング周期Smcが10μsである場合、カウンタユニット10は、1制御周期Sctあたり100個のカウント値Ctを生成し、1制御周期Sctあたり100個のサンプリングデータSdをPLC20に送信する。カウンタユニット10が制御周期Sctごとに繰り返しPLC20に送信するデータフレームのデータサイズは、1個のサンプリングデータSdが4byteであるとすると、100倍した400byte以上となる。
同様に、制御周期Sctが1msで、サンプリング周期Smcが10μsである場合、アナログユニット60は、1制御周期Sctあたり100個のカウント値Ctを生成し、1制御周期Sctあたり100個のサンプリングデータSdをPLC20に送信する。アナログユニット60が制御周期Sctごとに繰り返しPLC20に送信するデータフレームのデータサイズは、1個のサンプリングデータSdが2byteであるとすると、100倍した200byte以上となる。
ここで、制御システム1において、カウンタユニット10およびアナログユニット60の各々が制御周期Sctごとに繰り返しPLC20に送信するデータフレームのデータサイズは、例えば、上限が1024byteまでと設定されている。また、フィールドネットワーク50全体に対しても、フィールドネットワーク50上を制御周期Sctごとに繰り返し転送されるデータ(より正確には、データフレーム)のデータサイズは、例えば、上限が5736byteまでと設定されている。
そこで、カウンタユニット10およびアナログユニット60の各々は、1制御周期SctにPLC20に送信するサンプリングデータSdのデータサイズを圧縮して、システム上のデータサイズ制限の問題を緩和する。
(データ圧縮)
図4は、制御システム1において実行されるデータ圧縮処理の概要を説明する図である。図4の(A)に示すように、カウンタユニット10およびアナログユニット60の各々は、1回の制御周期Sct(「スキャンタイム」とも称する)においてサンプリング処理を複数回実行する。カウンタユニット10は、1回の制御周期Sct中に複数回実行するサンプリング処理の各々においてカウント値Ctを取得し、また、アナログユニット60は、1回の制御周期Sct中に複数回実行するサンプリング処理の各々においてアナログ値Alを取得する。
図4の(B)に示すように、カウンタユニット10およびアナログユニット60の各々は、PLC20に制御周期Sctごとに送信するサンプリングデータSdを圧縮する。具体的には、カウンタユニット10およびアナログユニット60の各々が、PLC20に制御周期Sctごとに送信するサンプリングデータSdは、1つ目のサンプリングデータSd(1)のみがフルサイズのデータである。残りのサンプリングデータSd(2)~Sd(n)の各々は圧縮サイズのデータである。
フルサイズとは、例えば、1回目のサンプリング処理の計測結果(例えば、カウント値Ct(1)またはアナログ値Al(1))をそのまま格納したサンプリングデータSdのデータサイズであり、以下の説明においては、特に断らない限り「4byte」である。
これに対して、「残りのサンプリングデータSd」のデータサイズである「圧縮サイズ」は、1サンプリング周期Smcに変化し得る計測結果の表記に足るデータサイズ(ビット数)である。カウンタユニット10およびアナログユニット60の各々は、2回目以降の各々のサンプリング処理の計測結果を示すビット列を、「1サンプリング周期Smcに変化し得る計測結果の表記に足るサイズ(つまり、圧縮サイズ)」に圧縮する。「圧縮サイズ」について、詳細は図7から図10を用いて後述する。
すなわち、カウンタユニット10は、1回の制御周期Sctにおいてサンプリング処理を複数回実行し、実行した複数のサンプリング処理の各々においてカウントしたカウント値Ctを示すサンプリングデータSdを、制御周期Sctごとに、PLC20に送信する。カウンタユニット10は、「各々がカウント値Ct(2)~Ct(n)を示す、サンプリングデータSd(2)~Sd(n)」の各々のデータサイズを、圧縮サイズに圧縮して、制御周期Sctごとに、PLC20に送信する。
同様に、アナログユニット60は、1回の制御周期Sctにおいてサンプリング処理を複数回実行し、実行した複数のサンプリング処理の各々において計測したアナログ値Alを示すサンプリングデータSdを、制御周期Sctごとに、PLC20に送信する。アナログユニット60は、「各々がアナログ値Al(1)~Al(n)を示す、サンプリングデータSd(2)~Sd(n)」の各々のデータサイズを、圧縮サイズに圧縮して、制御周期Sctごとに、PLC20に送信する。
(データ転送装置が奏する効果)
図5は、カウンタユニット10およびアナログユニット60の各々が実現する効果を説明する表である。図5において、カウンタユニット10およびアナログユニット60の各々が1回のサンプリング処理で計測した計測結果のデータサイズは、4byteであり、つまり、サンプリングデータSdのフルサイズは4byteであるものとする。例えば、制御周期Sctが1msで、サンプリング周期Smcが10μsである場合、つまり、100個のサンプリングデータSdを制御周期SctごとにPLC20に送信する場合、従来技術のデータサイズに対し、本実施形態では以下のデータサイズになる。
すなわち、従来は、4byteのサンプリングデータSdを100個、つまり、1chあたり(例えば、1データフレームあたり)400byteのデータを、制御周期Sctごとに繰り返しPLC20に送信していた。
これに対して、カウンタユニット10は、1回の制御周期Sctにおいて1回目に実行したサンプリング処理のカウント値Ct(1)を示す1個目のサンプリングデータSd(1)のデータサイズは4byteのままとする。そして、カウンタユニット10は、残りの99個目のサンプリングデータSd(2)~Sd(99)の各々のデータサイズを圧縮する。
例えば、カウンタユニット10が残りの99個目のサンプリングデータSdの各々のデータサイズを1byteに圧縮する場合、カウンタユニット10が制御周期SctごとにPLC20に送信する1つデータフレームのデータサイズは、103byteとなる。これは、従来までの400byteの約26%に相当する。
また、カウンタユニット10が残りの99個目のサンプリングデータSdの各々のデータサイズを2bitに圧縮する場合、カウンタユニット10が制御周期SctごとにPLC20に送信する1つデータフレームのデータサイズは、約29byteとなる。これは、従来までの400byteの約7.25%に相当する。
§2.構成例
これまで、図2から図5を用いて、制御システム1の概要を説明してきた。次に、カウンタユニット10、アナログユニット60、PLC20、および、ツール30について、その詳細を説明する。図1等を用いて以下に詳細を説明するカウンタユニット10について、最初に概要を整理しておけば、以下の通りである。
カウンタユニット10(データ転送装置)は、1回の制御周期Sctにおいて複数回実行されたサンプリング処理の各々の計測結果(カウント値Ct)を示す、複数のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20(制御装置)へと送信するデータ転送装置である。カウンタユニット10は、取得部120と、圧縮部130と、を備えている。取得部120は、複数回(例、n回)実行されたサンプリング処理の各々の計測結果(例、カウント値Ct(1)~Ct(n)の各々)を取得する。1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果(例、カウント値Ct(m)とカウント値Ct(m-1))の間の変化の最大量Vmaxが予め決まっている場合、圧縮部130は、以下の圧縮処理を実行する。すなわち、圧縮部130は、2回目以降のサンプリング処理の各々の計測結果を、「1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化の最大量Vmax」を表現可能なサイズのサンプリングデータSdに圧縮する。
ここで、前述の通り、「圧縮サイズ」は、「1サンプリング周期Smcに変化し得る計測結果の表記に足るデータサイズ(ビット数)」である。言い換えれば、「圧縮サイズ」は、「1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化の最大量Vmax」を表現可能なサイズ(ビット数)である。
つまり、圧縮サイズが予め決まっている場合、圧縮部130は、カウント値Ct(2)~Ct(n)の各々を、圧縮サイズのサンプリングデータSd(2)~Sd(n)の各々に圧縮する。
前記の構成によれば、カウンタユニット10は、最大量Vmaxが予め決まっている場合、サンプリングデータSd(2)~Sd(n)の各々を、最大量Vmaxを表現可能なデータサイズ(つまり、圧縮サイズ)に圧縮して、PLC20へと送信する。
したがって、カウンタユニット10は、カウント値Ct(2)~Ct(n)の各々を圧縮せずに送信する場合に比べて、制御周期SctごとにPLC20へと送信するデータフレームのデータサイズを、抑制することができるとの効果を奏する。
ここで、前記変化が正負のいずれでもあり得る場合、例えば、前記変化の範囲が「-127」以上「127」以下である場合、「127」を表現可能な7ビットに1ビットを加えた8ビット、つまり、1byteが、最大量Vmaxを表現可能なデータサイズとなる。同様に、例えば、前記変化の範囲が「-1」以上「1」以下である場合、「1」を表現可能な1ビットに1ビットを加えた2ビットが、最大量Vmaxを表現可能なデータサイズとなる。
また、前記変化が常に正または常に負である場合、例えば、前記変化の範囲が「0」以上「255」以下である場合、「255」を表現可能な8ビット、つまり、1byteが、最大量Vmaxを表現可能なデータサイズとなる。同様に、例えば、前記変化の範囲が「0」以上「1」以下である場合、「1」を表現可能な1ビットが、最大量Vmaxを表現可能なデータサイズとなる。
カウンタユニット10において、サンプリング処理は、パルス信号のパルス数をカウントする処理であり、サンプリング処理の計測結果は、カウントされたパルス数(つまり、カウント値Ct)である。
前記の構成によれば、カウンタユニット10は、最大量Vmaxが予め決まっている場合、2回目以降のサンプリング処理の各々において計測されたカウント値Ctを示すサンプリングデータSdを、最大量Vmaxを表現可能なデータサイズに圧縮する。つまり、カウンタユニット10は、最大量Vmaxが予め決まっている場合、カウント値Ct(2)~Ct(n)の各々を示すサンプリングデータSd(2)~Sd(n)の各々を、圧縮サイズに圧縮する。
ここで、パルス信号のパルス数をカウントするサンプリング処理において、1回のサンプリング処理において計測し得るパルス数は予め決まっており、つまり、サンプリング処理がパルス数をカウントする処理である場合、最大量Vmaxは予め決まっている。
より正確には、カウンタユニット10が、1回のサンプリング処理において、「エンコーダ40または流量計のような、検出量に応じてパルス信号を生成するパルス信号生成装置」から受信し得るパルス信号の数は、予め決まっている。例えば、エンコーダ40からのパルス信号を計数する(つまり、カウントする)場合、カウンタユニット10が単位時間あたりに受信し得るパルス信号の数は、エンコーダ40の、分解能と回転速度(最大回転速度)とによって、予め決定される。そして、最大回転速度は、エンコーダ40のスペック(仕様、性能)から決めることができ、また、アプリケーション(エンコーダ40の使用用途)から決めることもできる。例えば、アプリケーションが、「エンコーダ40が360分解能で最大でも60rpm(1秒間に1回転)で回転するような低速アプリケーション」であれば、エンコーダ40がスペック的にはもっと高速に回転できるとしても、最大回転速度は60rpmとして想定すればよい。つまり、カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数は、エンコーダ40(パルス信号生成装)のスペックおよびアプリケーションの少なくとも一方により予め決められている。
したがって、カウンタユニット10は、2回目以降のサンプリング処理の各々において計測されたカウント値Ctを示すサンプリングデータSdを、最大量Vmaxを表現可能なデータサイズに圧縮して、PLC20へと送信することができるとの効果を奏する。
カウンタユニット10において、最大量Vmaxを表現可能なデータサイズは、(1)1回のサンプリング処理においてカウントし得るパルス数の絶対値と、(2)サンプリング処理のパルスカウント方式が双方向であるのか、または、単方向であるのかとによって、予め決定されている。
前記の構成によれば、カウンタユニット10において、最大量Vmaxを表現可能なデータサイズは、(1)1回のサンプリング処理においてカウントし得るパルス数の絶対値と、(2)パルスカウント方式とによって、予め決定されている。
パルスカウント方式が双方向である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、正負のいずれでもあり得る。例えば、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が「127」である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、「-127~127」と示すことができる。したがって、最大量Vmaxを表現可能なデータサイズは、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数に1ビットを加えたビット数となる。
パルスカウント方式が単方向である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、常に正または常に負である。例えば、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が「255」である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、「0~255」と示すことができる。したがって、最大量Vmaxを表現可能なデータサイズは、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数となる。
したがって、カウンタユニット10は、最大量Vmaxが予め決まっているので、2回目以降のサンプリング処理の各々において計測されたカウント値Ctを示すサンプリングデータSdを、最大量Vmaxを表現可能なデータサイズに圧縮できるとの効果を奏する。
カウンタユニット10において、圧縮部130は、2回目以降のサンプリング処理の各々の計測結果を示すビット列から、最下位ビットを含む、最大量Vmaxを表現可能なビット数分のビット列を抽出し、抽出したビット列を、サンプリングデータSdとする。圧縮部130は、例えば、「カウント値Ct(2)~Ct(n)の各々を示すビット列」から「最下位ビットを含む、圧縮サイズ分のビット列」を抽出し、抽出したビット列を、サンプリングデータSd(2)~Sd(n)としてデータフレームへと格納する。
前記の構成によれば、カウンタユニット10は、2回目以降のサンプリング処理の各々の計測結果を示すビット列から抽出した、最下位ビットを含む、最大量Vmaxを表現可能なビット数分のビット列を、サンプリングデータSdとする。
2回目以降のサンプリング処理の各々の計測結果を示すビット列に比べて、そのビット列から抽出された「最下位ビットを含む、最大量Vmaxを表現可能なビット数分のビット列」の方が、データサイズが小さいことは明らかである。
したがって、カウンタユニット10は、2回目以降のサンプリング処理の各々の計測結果を示すビット列を、そのビット列から抽出された「最下位ビットを含む、最大量Vmaxを表現可能なビット数分のビット列」に圧縮することができるとの効果を奏する。
例えば、サンプリング処理の各々の計測結果を示すビット列が4byteである場合、前記変化の範囲が「-127」以上「127」以下であると、最大量Vmaxを表現可能なデータサイズは1byteだから、カウンタユニット10は、以下の圧縮を行う。すなわち、カウンタユニット10は、2回目以降のサンプリング処理の各々の計測結果を示す4byteのビット列を、1byteのサンプリングデータSdに圧縮する。
同様に、前記変化の範囲が「-1」以上「1」以下であると、最大量Vmaxを表現可能なデータサイズは2ビットだから、カウンタユニット10は、2回目以降のサンプリング処理の各々の計測結果を示す4byteのビット列を、2ビットに圧縮する。さらに、前記変化の範囲が「0」以上「1」以下であると、最大量Vmaxを表現可能なデータサイズは1ビットだから、カウンタユニット10は、2回目以降の前記サンプリング処理の各々の計測結果を示す4byteのビット列を、1ビットに圧縮する。
これまでに概要を説明したカウンタユニット10等について、次に、その構成の詳細について図1を参照しながら説明し、その後、カウンタユニット10が実行する処理について、図6を参照しながら説明していく。
(カウンタユニットの詳細)
図1は、制御システム1に含まれる、カウンタユニット10等の要部構成を示すブロック図である。図1に示すように、カウンタユニット10は、機能ブロックとして、計測部110、取得部120、圧縮部130、および、送信部140を備える。
計測部110は、エンコーダ40(パルス信号生成装置)等の計測デバイスから、そのパルス信号生成装置によって生成されたパルス信号を受信し、受信したパルス信号のパルス数(カウント値Ct)をカウントするサンプリング処理を実行する。計測部110は、1回の制御周期Sctにおいてサンプリング処理を複数回(例えば、n回)実行し、各サンプリング処理において計測したカウント値Ct(例えば、カウント値Ct(1)~Ct(n))を、取得部120に通知する。
送信部140は、制御周期Sctごとに繰り返し、データフレームをPLC20に送信する。送信部140が制御周期SctごとにPLC20に送信するデータフレームには、各々が、「各サンプリング処理において計測されたカウント値Ct」を示す、複数のサンプリングデータSdが格納されている。例えば、データフレームには、各々が、「1回目からn回目までの各サンプリング処理において計測されたカウント値Ct(1)~Ct(n))」を示す、サンプリングデータSd(1)~Sd(n)が格納されている。
取得部120は、計測部110から取得したカウント値Ctについて、1回目のサンプリング処理において計測されたカウント値Ct(1)を示すビット列は、そのまま、サンプリングデータSd(1)として、データフレームへと格納する。取得部120は、2回目以降の各々のサンプリング処理において計測されたカウント値Ctを示すビット列を、圧縮部130へと転送し、例えば、カウント値Ct(2)~Ct(n)の各々を示すビット列を、圧縮部130へと転送する。
圧縮部130は、取得部120から取得した「2回目以降の各々のサンプリング処理において計測されたカウント値Ctを示すビット列」を、「圧縮サイズ」のビット列に圧縮する。圧縮部130は、「圧縮サイズ」に圧縮した複数のビット列の各々を、「2回目以降の各々のサンプリング処理において計測されたカウント値Ct」を示すサンプリングデータSdとして、データフレームへと格納する。
具体的には、圧縮部130は、カウント値Ct(2)を示すビット列を、「圧縮サイズ」のビット列に圧縮して、サンプリングデータSd(2)として、データフレームへと格納する。また、圧縮部130は、カウント値Ct(3)を示すビット列を、「圧縮サイズ」のビット列に圧縮して、サンプリングデータSd(3)として、データフレームへと格納する。同様に、圧縮部130は、カウント値Ct(n)を示すビット列を、「圧縮サイズ」のビット列に圧縮して、サンプリングデータSd(n)として、データフレームへと格納する。
圧縮部130は、ツール30によって予め設定された「圧縮サイズ」を用いて、「2回目以降の各々のサンプリング処理において計測されたカウント値Ctを示すビット列」を圧縮してもよい。
「圧縮サイズ」は、「1サンプリング周期Smcに変化し得るカウント値Ct」の表記に足るデータサイズ(ビット数)である。「1サンプリング周期Smcに変化し得るカウント値Ct」は、「1サンプリング周期Smc中に計測部110がカウントし得るカウント値Ctの最大量Vmax(つまり、1回のサンプリング処理でカウントし得るカウント値Ctの範囲)」と言い換えられる。つまり、「1サンプリング周期Smcに変化し得るカウント値Ct」は、「1回の制御周期Sct中に連続して実行される2つのサンプリング処理においてカウントされるカウント値Ctの間の変化の最大量Vmax」である。したがって、「圧縮サイズ」は、「計測部110が1回の制御周期Sctにおいて連続して実行する2つのサンプリング処理においてカウントするカウント値Ctの間の変化の最大量Vmax」を表現可能なビット数である。
「1サンプリング周期Smcに変化し得るカウント値Ct」は、つまり、最大量Vmaxは、「計測部110が1回のサンプリング処理においてカウントし得るパルス数の絶対値」と、「計測部110のパルスカウント方式」と、によって決定される。
「1回のサンプリング処理においてカウントし得るパルス数の絶対値」は、サンプリング周期Smcを、パルス信号の最短周期(最短パルス周期Plcmin)によって除した値」に対して小数点以下を繰り上げた値として算出できる。
計測部110のパルスカウント方式が双方向である場合、m-1回目のサンプリング処理のカウント値Ct(m-1)から、m回目のサンプリング処理のカウント値Ct(m)までの変化は、正負のいずれでもあり得る。例えば、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が「127」である場合、カウント値Ct(m-1)からカウント値Ct(m)までの変化の最大量Vmaxは、つまり、最大量Vmaxは、「-127~127」と示すことができる。
したがって、計測部110のパルスカウント方式が双方向である場合、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数に1ビットを加えたビット数が、「圧縮サイズ」となる。
計測部110のパルスカウント方式が単方向である場合、カウント値Ct(m-1)からカウント値Ct(m)までの変化は、常に正または常に負である。例えば、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が「255」である場合、カウント値Ct(m-1)からカウント値Ct(m)までの変化の最大量Vmaxは、つまり、最大量Vmaxは、「0~255」と示すことができる。
したがって、計測部110のパルスカウント方式が単方向である場合、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数が、「圧縮サイズ」となる。
圧縮部130は、例えば、「2回目以降の各々のサンプリング処理において計測されたカウント値Ctを示すビット列」から、「最下位ビットを含む、圧縮サイズ分のビット列」を、下位ビット列Lbとして抽出する。そして、圧縮部130は、抽出した下位ビット列Lbを、サンプリングデータSdとしてデータフレームへと格納する。
例えば、圧縮サイズが1byteである場合、圧縮部130は、カウント値Ct(2)~Ct(n)の各々を示すビット列の各々から、「最下位ビットを含む、1byte分のビット列」である下位ビット列Lb(2)~Lb(n)を抽出する。圧縮部130は、抽出した下位ビット列Lb(2)~Lb(n)を、サンプリングデータSd(2)~Sd(n)としてデータフレームへと格納する。
以下の説明においては、カウント値Ctを示すビット列の「最下位ビットを含む、圧縮サイズ分のビット列」を、カウント値Ctを示すビット列の下位ビット列Lbと称する。また、カウント値Ctを示すビット列の、「最下位ビットを含む、圧縮サイズ分のビット列」以外のビット列を、カウント値Ctを示すビット列の上位ビット列Hbと称する。つまり、カウント値Ctの上位ビット列Hbは、カウント値Ctを示すビット列の、下位ビット列Lb以外のビット列である。
§3.動作例
図6は、カウンタユニット10が実行する処理の概要を示す図であり、特に、図6の(A)は、カウンタユニット10が実行するデータ圧縮処理の一例を示すフロー図である。取得部120は、計測部110から、計測部110が1回の制御周期Sctにおいて1回目に実行したサンプリング処理においてカウントしたカウント値Ct(1)を取得する(S110)。取得部120は、計測部110から取得したカウント値Ct(p)(「p」は「1」以上で、「n」以下の整数)が2回目以降のカウント値Ct(2)~Ct(n)であるのかを判定する(S120)。
取得部120は、計測部110から取得したカウント値Ct(p)が2回目以降のカウント値Ct(2)~Ct(n)ではない、つまり、カウント値Ct(1)を取得したと判定すると(S120でNo)、以下の処理を実行する。すなわち、取得部120は、カウント値Ct(1)を示すビット列を、そのまま、サンプリングデータSd(1)として、データフレームへと格納し、つまり、カウント値Ct(1)を示すビット列によってサンプリングデータSd(1)を更新する(S140)。
取得部120は、計測部110から取得したカウント値Ct(p)が2回目以降のカウント値Ct(2)~Ct(n)のいずれかであると判定すると(S120でYes)、取得したカウント値Ct(p)を、圧縮部130へと出力する。圧縮部130は、取得部120から取得したカウント値Ct(p)(より正確には、「カウント値Ct(p)を示すビット列」)から、「最下位ビットを含む、圧縮サイズ分のビット列」を、「下位ビット列Lb(p)」として取り出す(S130)。圧縮部130は、カウント値Ct(p)から取り出した下位ビット列Lb(p)を、サンプリングデータSd(p)として、データフレームへと格納し、つまり、下位ビット列Lb(p)によって、対応するサンプリングデータSd(p)を更新する(S140)。
取得部120は、計測部110から全てのカウント値Ct(1)~Ct(n)を取得済みであるかを判定する(S150)。取得部120は、全てのカウント値Ct(1)~Ct(n)を取得済みであると判定すると(S150でYes)、処理を終了する。取得部120は、全てのカウント値Ct(1)~Ct(n)を取得済みではないと判定すると(S150でNo)、次のカウント値Ct(p+1)を計測部110から取得する(S160)。
図6の(A)に示す処理を実行することにより、カウンタユニット10は、図6の(B)に示すように、サンプリングデータSd(1)のみがフルサイズで、サンプリングデータSd(2)~Sd(n)の各々が圧縮サイズであるデータフレームを生成する。
これまでに図6を参照しながら説明してきたカウンタユニット10が実行する処理(言い換えれば、カウンタユニット10が実行する制御方法)は、以下のように整理することができる。すなわち、カウンタユニット10が実行する処理(制御方法)は、1回の制御周期Sctにおいて複数回実行されたサンプリング処理の各々の計測結果(例、カウント値Ct)を示す、複数のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20へと送信するデータ転送装置の制御方法である。カウンタユニット10が実行する処理は、複数回(例、n回)実行されたサンプリング処理の各々の計測結果(例、カウント値Ct(1)~Ct(n)の各々)を取得する取得ステップ(S110およびS160)と、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化の最大量Vmaxが予め決まっている場合、前記取得ステップにて取得された複数の計測結果のうち、2回目以降のサンプリング処理の各々の計測結果を、最大量Vmaxを表現可能なデータサイズのサンプリングデータSdに圧縮する圧縮ステップ(S130)と、を含んでいる。
前記の構成によれば、前記制御方法は、最大量Vmaxが予め決まっている場合、2回目以降のサンプリング処理の各々の計測結果を示すサンプリングデータSdを、最大量Vmaxを表現可能なデータサイズ(つまり、圧縮サイズ)に圧縮して、PLC20へと送信する。つまり、前記制御方法は、最大量Vmaxが予め決まっている場合、カウント値Ct(2)~Ct(n)を示すサンプリングデータSd(2)~Sd(n)を、最大量Vmaxを表現可能なデータサイズに圧縮して、PLC20へと送信する。
したがって、前記制御方法は、2回目以降のサンプリング処理の各々の計測結果を圧縮しない場合に比べて、制御周期SctごとにPLC20へと送信するデータフレームのデータサイズを、抑制することができるとの効果を奏する。
ここで、前記変化が正負のいずれでもあり得る場合、例えば、前記変化の範囲が「-127」以上「127」以下である場合、「127」を表現可能な7ビットに1ビットを加えた8ビット、つまり、1byteが、最大量Vmaxを表現可能なデータサイズとなる。同様に、例えば、前記変化の範囲が「-1」以上「1」以下である場合、「1」を表現可能な1ビットに1ビットを加えた2ビットが、最大量Vmaxを表現可能なデータサイズとなる。
また、前記変化が常に正または常に負である場合、例えば、前記変化の範囲が「0」以上「255」以下である場合、「255」を表現可能な8ビット、つまり、1byteが、最大量Vmaxを表現可能なデータサイズとなる。同様に、例えば、前記変化の範囲が「0」以上「1」以下である場合、「1」を表現可能な1ビットが、最大量Vmaxを表現可能なデータサイズとなる。
(データフレームの概要)
図7は、カウンタユニット10およびアナログユニット60の各々が制御周期Sctごとに繰り返しPLC20に送信するデータフレームの概要を示す図である。送信部140が制御周期Sct毎にPLC20に送信するデータフレームにおいて、1つ目のサンプリングデータSd(1)のみがフルサイズで、残りのサンプリングデータSd(2)~Sd(n)の各々は圧縮サイズとする。
例えば、計測部110は、1回の制御周期Sctにおいてサンプリング処理をn回実行する。計測部110は、1回目のサンプリング処理においてカウント値Ct(1)を、2回目のサンプリング処理においてカウント値Ct(2)を、3回目のサンプリング処理においてカウント値Ct(3)を生成する。同様に、計測部110は、n回目のサンプリング処理においてカウント値Ct(n)を生成する。
つまり、計測部110は、1回の制御周期Sctにおいてn回実行したサンプリング処理によって、各サンプリング処理に対応するカウント値Ct(1)からカウント値Ct(n)までのn個のカウント値Ctを生成する。そして、カウンタユニット10は、カウント値Ct(1)からカウント値Ct(n)の各々に対応する、サンプリングデータSd(1)からサンプリングデータSd(n)を生成する。
カウンタユニット10は、サンプリングデータSd(1)のみをフルサイズのデータとし、残りのサンプリングデータSd(つまり、サンプリングデータSd(2)からサンプリングデータSd(n)までの各々)は、圧縮サイズのデータとする。そして、カウンタユニット10(特に、送信部140)は、サンプリングデータSd(1)からサンプリングデータSd(n)までのn個のサンプリングデータSdを格納したデータフレームを、制御周期Sctごとに繰り返し、PLC20に送信する。
(圧縮サイズ)
図8は、カウンタユニット10およびアナログユニット60の各々が制御周期SctごとにPLC20に送信するサンプリングデータSd(2)~Sd(n)の各々のデータサイズを、つまり、圧縮サイズを説明する図である。
計測部110がサンプリング周期Smcごとにカウントしたカウント値Ct(2)~Ct(n)の各々を示す、サンプリングデータSd(2)~Sd(n)の各々の圧縮サイズは、1サンプリング周期Smcに変化し得るカウント値Ctの表記に足る分とする。つまり、圧縮サイズは、計測部110が1回の制御周期Sctにおいて連続して実行する2つのサンプリング処理の各々においてカウントした2つのカウント値Ctの間の変化の最大量Vmaxを表現可能なデータサイズである。言い換えれば、圧縮サイズは、「m」回目のサンプリング処理において計測したカウント値Ct(m)と、その直前の「m-1」回目のサンプリング処理において計測したカウント値Ct(m-1)と、の間の変化の最大量Vmaxを表現可能なデータサイズである。
1サンプリング周期Smcに変化し得るカウント値Ctの変化の範囲が、つまり、最大量Vmaxが、例えば、「-127」以上「127」以下である場合、「127」を表現可能な7ビットに1ビットを加えた8ビット(=1byte)が、圧縮サイズとなる。同様に、1サンプリング周期Smcに変化し得るカウント値Ctの変化の範囲が、例えば、「-1」以上「1」以下である場合、「1」を表現可能な1ビットに1ビットを加えた2ビットが、圧縮サイズとなる。また、1サンプリング周期Smcに変化し得るカウント値Ctの変化の範囲が、例えば、「0」以上「255」以下である場合、「255」を表現可能な8ビット(=1byte)が、圧縮サイズとなる。
(1サンプリング周期にカウントし得るパルス数の絶対値)
図9は、「カウンタユニット10(特に、計測部110)が1回のサンプリング周期Smcにカウントし得るパルス数の絶対値」を説明する図である。計測部110のパルスカウント方式が双方向であっても、計測部110がカウントするパルス数は、パルス信号を受信する毎に「1」ずつ(または、「-1」ずつ)しか変化しない。
そのため、サンプリング周期Smcとパルス信号の最高周波数(最高パルス周波数)とから、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」は決まる。すなわち、「パルス周期Plc」は、「1/パルス周波数」であるから、「最短パルス周期Plcmin」は、「1/最高パルス周波数」となる。したがって、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」は、「サンプリング周期Smcを最短パルス周期Plcminによって除した値(小数点以下切り上げ)」となる。
(圧縮データに必要なビット数)
図10は、カウンタユニット10(特に、計測部110)が1回のサンプリング周期Smcにカウントし得るカウント値Ctの最大量Vmaxを説明する図である。計測部110のパルスカウント方式に正方向と負方向とがある場合、つまり、パルスカウント方式が双方向である場合、「1回のサンプリング周期Smcにカウントし得るカウント値Ctの最大量Vmax」を表現可能なビット数は、以下のようになる。すなわち、1回のサンプリング周期Smcにカウントし得るカウント値Ctの最大量Vmaxを表現可能なビット数は、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数に、1ビット加えたビット数となる。「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数に加えて、正方向か負方向かを区別するための1ビットが必要となるためである。したがって、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が半周(半分)を越えないビット数が、圧縮サイズとして必要となる。
計測部110のパルスカウント方式が単方向である場合、「1回のサンプリング周期Smcにカウントし得るカウント値Ctの最大量Vmax」は、常に正または常に負である。そのため、1回のサンプリング周期Smcにカウントし得るカウント値Ctの最大量Vmaxを表現可能なビット数は、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数となる。
(必要なビット数の具体例)
計測部110のパルスカウント方式が双方向である場合、計測部110が1サンプリング周期Smc中にカウントできるパルス数の絶対値が「127」であれば、最大量Vmaxは、「-127」以上、「127」以下であるから、1byteで表現可能である。それゆえ、パルスカウント方式が双方向であり、1サンプリング周期Smcにカウントし得るパルス数の絶対値が「127」であれば、圧縮サイズは1byteとなる。
同様に、パルスカウント方式が双方向であり、1サンプリング周期Smcにカウントし得るパルス数の絶対値が「32767」であれば、圧縮サイズは2byteとなる。パルスカウント方式が双方向であり、1サンプリング周期Smcにカウントし得るパルス数の絶対値が「1」あれば、圧縮サイズは2bitとなる。
計測部110のパルスカウント方式が単方向である場合、計測部110が1サンプリング周期Smc中にカウントできるパルス数の絶対値が「255」あれば、圧縮サイズは1byteとなる。パルスカウント方式が単方向であり、1サンプリング周期Smcにカウントし得るパルス数の絶対値が「65535」であれば、圧縮サイズは2byteとなる。パルスカウント方式が単方向であり、1サンプリング周期Smcにカウントし得るパルス数の絶対値が「3」であれば、圧縮サイズは2bitとなる。パルスカウント方式が単方向であり、1サンプリング周期Smcにカウントし得るパルス数の絶対値が「1」であれば、圧縮サイズは1bitとなる。
(PLCの詳細)
PLC20は、図1に示すように、機能ブロックとして、データフレーム受信部210および復元部220を備えている。PLC20は、上述の各機能ブロックに加えて、制御システム1を制御するための指示部などを備えていてもよいが、記載の簡潔性を担保するため、本実施の形態に直接関係のない構成は、説明およびブロック図から省略している。ただし、実施の実情に則して、PLC20は、当該省略された構成を備えてもよい。データフレーム受信部210および復元部220は、例えば、CPU(central processing unit)等が、ROM(read only memory)、NVRAM(non-Volatile random access memory)等で実現された記憶装置に記憶されているプログラムを不図示のRAM(random access memory)等に読み出して実行することで実現できる。以下、PLC20におけるデータフレーム受信部210および復元部220について説明する。
データフレーム受信部210は、カウンタユニット10(特に、カウンタユニット10の送信部140)から送信されたデータフレームを、制御周期Sctごとに繰り返し受信する。データフレーム受信部210は、カウンタユニット10から受信したデータフレームから、圧縮サイズに圧縮されているサンプリングデータSd(2)~Sd(n)を取り出し、サンプリングデータSd(2)~Sd(n)の各々を復元部220へと出力する。データフレーム受信部210は、カウンタユニット10から受信したデータフレームから、圧縮サイズに圧縮されていないサンプリングデータSd(1)を取り出し、サンプリングデータSd(1)をそのまま、不図示のカウント値テーブルに格納してもよい。
復元部220は、データフレーム受信部210から取得した、圧縮サイズに圧縮されているサンプリングデータSd(2)~Sd(n)の各々を、カウント値Ct(2)~Ct(n)の各々へと復元する。復元部220は、例えばツール30から通知された(設定された)圧縮サイズを用いて、サンプリングデータSd(2)~Sd(n)の各々から、カウント値Ct(2)~Ct(n)の各々を復元する。復元部220は、例えばカウンタユニット10から通知された圧縮サイズを用いて、サンプリングデータSd(2)~Sd(n)の各々から、カウント値Ct(2)~Ct(n)の各々を復元してもよい。
データフレーム受信部210および復元部220を備えるPLC20は、圧縮サイズに圧縮されたSd(2)~Sd(n)の各々から、2回目以降のサンプリング処理の各々の計測結果(つまり、カウント値Ct(2)~Ct(n)の各々)を復元する。
したがって、PLC20は、圧縮されていない場合に比べてデータサイズが抑制されたサンプリングデータSdから、圧縮されていない場合と同様に、2回目以降のサンプリング処理の各々のカウント値Ctを取得することができるとの効果を奏する。
PLC20において、復元部220は、2回目以降のサンプリング処理の各々の計測結果を、直前のサンプリング処理の計測結果を示すビット列と、2回目以降のサンプリング処理の各々の計測結果を示すサンプリングデータSdとしてデータフレームに格納されているビット列と、を用いて、直前のサンプリング処理の計測結果からの変化量が最大量Vmax以下となるように、復元する。復元部220は、カウント値Ct(m-1)を示すビット列と、サンプリングデータSd(m)を示すビット列と、を用いて、カウント値Ct(m)の、カウント値Ct(m-1)からの変化量が最大量Vmax以下となるように、カウント値Ct(m)を復元する。
前記の構成によれば、PLC20は、2回目以降のサンプリング処理の各々の計測結果を、以下の方法によって復元する。すなわち、PLC20は、2回目以降のサンプリング処理の各々の計測結果を、直前のサンプリング処理の計測結果を示すビット列と、サンプリングデータSdとしてデータフレームに格納されているビット列と、を用いて復元する。その際、PLC20は、復元する「2回目以降のサンプリング処理の各々の計測結果」の、直前のサンプリング処理の計測結果からの変化量が最大量Vmax以下となるように、「2回目以降のサンプリング処理の各々の計測結果」を復元する。
したがって、PLC20は、2回目以降のサンプリング処理の各々の計測結果を、サンプリングデータSdとしてデータフレームに格納されているビット列を用いて、正確に復元することができるとの効果を奏する。
例えば、PLC20は、先ず、復元対象のサンプリングデータSd(m)と、そのサンプリングデータSd(m)を復元することで得られる計測結果(カウント値Ct(m))を計測したサンプリング処理の直前に実行されたサンプリング処理で計測した計測結果(カウント値Ct(m-1))を示すビット列と、を取得する。
次に、PLC20は、カウント値Ct(m-1)を示すビット列から、「最下位ビットを含む、最大量Vmaxを表現可能なビット数分のビット列」を、つまり、下位ビット列Lb(m-1)を取り出す。PLC20は、取り出した下位ビット列Lb(m-1)を、復元対象のサンプリングデータSd(m)と比較する。
PLC20は、復元対象のサンプリングデータSd(m)の、「カウント値Ct(m-1)を示すビット列の、下位ビット列Lb(m-1)」からの変化量が、最大量Vmax以下となっていると判定すると、以下の処理を実行する。
すなわち、PLC20は、「カウント値Ct(m-1)を示すビット列の、上位ビット列Hb(m-1)」と、「復元対象のサンプリングデータSd(m)」とを組み合わせたビット列を、「復元対象のサンプリングデータSd(m)」から復元された計測結果(つまり、カウント値Ct(m))を示すビット列として生成する。具体的には、PLC20は、「カウント値Ct(m-1)を示すビット列の、上位ビット列Hb(m-1)」を上位ビットとし、「復元対象のサンプリングデータSd(m)」を下位ビットとするビット列を、復元された計測結果(カウント値Ct(m))を示すビット列として生成する。
PLC20は、復元対象のサンプリングデータSd(m)が、「カウント値Ct(m-1)を示すビット列の、下位ビット列Lb(m-1)」から、最大量Vmaxを超えて減少していると判定すると、以下の処理を実行する。
すなわち、PLC20は先ず、復元対象のサンプリングデータSd(m)は、「カウント値Ct(m-1)を示すビット列の、下位ビット列Lb(m-1)」から減少した値ではなく、増加して桁上がりした値を示していると判定する。そして、PLC20は、「カウント値Ct(m-1)を示すビット列の、上位ビット列Hb(m-1)」に1を加えた上位ビット列Hb’(m-1)を用いて、「復元対象のサンプリングデータSd(m)」から復元された計測結果(カウント値Ct(m))を示すビット列を生成する。具体的には、PLC20は、上位ビット列Hb’(m-1)を上位ビットとし、「復元対象のサンプリングデータSd(m)」を下位ビットとするビット列を、カウント値Ct(m)を示すビット列として生成する。
PLC20は、復元対象のサンプリングデータSd(m)が、「カウント値Ct(m-1)を示すビット列の、下位ビット列Lb(m-1)」から、最大量Vmaxを超えて増加していると判定すると、以下の処理を実行する。
すなわち、PLC20は先ず、復元対象のサンプリングデータSd(m)は、「カウント値Ct(m-1)を示すビット列の、下位ビット列Lb(m-1)」から増加した値ではなく、減少して桁下がりした値を示していると判定する。そして、PLC20は、「カウント値Ct(m-1)の計測結果を示すビット列の、上位ビット列Hb(m-1)」から1を減じた上位ビット列Hb’(m-1)を用いて、「復元対象のサンプリングデータSd(m)」から復元された計測結果(カウント値Ct(m))を示すビット列を生成する。具体的には、PLC20は、上位ビット列Hb’(m-1)を上位ビットとし、「復元対象のサンプリングデータSd(m)」を下位ビットとするビット列を、カウント値Ct(m)を示すビット列として生成する。
PLC20は、PLC20が使用する各種データを格納する記憶装置として、不図示のPLC記憶部を備えていてもよい。なお、PLC記憶部は、PLC20が実行する(1)制御プログラム、(2)OSプログラム、(3)PLC20が有する各種機能を実行するためのアプリケーションプログラム、および、(4)該アプリケーションプログラムを実行するときに読み出す各種データを非一時的に記憶してもよい。上記の(1)~(4)のデータは、例えば、ROM(read only memory)、フラッシュメモリ、EPROM(Erasable Programmable ROM)、EEPROM(登録商標)(Electrically EPROM)、HDD(Hard Disc Drive)等の不揮発性記憶装置に記憶される。PLC20は、さらに、PLC一時記憶部を備えていてもよい。PLC一時記憶部は、PLC20が実行する各種処理の過程で、演算に使用するデータおよび演算結果等を一時的に記憶するいわゆるワーキングメモリであり、RAM(Random Access Memory)等の揮発性記憶装置で構成される。どのデータをどの記憶装置に記憶するのかについては、PLC20の使用目的、利便性、コスト、または、物理的な制約等から適宜決定される。PLC記憶部には、不図示のカウント値テーブルが格納されていてもよい。カウント値テーブルには、サンプリングデータSd(1)~Sd(n)の各々に対応するカウント値Ct(1)~Ct(n)の各々が格納される。
(PLCの実行する処理:圧縮データの復元処理)
図11は、PLC20が実行する処理の概要を示す図であり、特に、図11の(A)は、PLC20が実行するデータ復元処理の一例を示すフロー図である。以下の説明において、PLC20は、ツール30およびカウンタユニット10の少なくとも一方から、「カウンタユニット10が、1回のサンプリング処理においてカウントし得るカウント値Ctの最大量Vmax」を示す情報を取得するものとする。例えば、PLC20は、ツール30またはカウンタユニット10から、「カウンタユニット10が、1回のサンプリング処理においてカウントし得るカウント値Ct(つまり、最大量Vmax)は『-127~127』であるといった情報を、取得する。「カウンタユニット10が、1回のサンプリング処理においてカウントし得るカウント値Ctの最大量Vmax」を示す情報は、圧縮サイズを示す情報と言い換えることもできる。
復元部220は、「データフレーム受信部210が受信したデータフレーム」から、先頭のサンプリングデータSd(1)を取り出し(S210)、サンプリングデータSd(1)を1回目のカウント値Ct(1)としてカウント値テーブルに格納する(S220)。カウント値Ct(1)をカウント値テーブルに格納すると、復元部220は、データフレームから、次のサンプリングデータSd(2)を取り出し、つまり、「p=2」として、サンプリングデータSd(p)を取り出す(S230)。
復元部220は、前回のカウント値Ct(p-1)から「最下位ビットを含む、圧縮サイズ分のビット列」を取り出し、つまり、下位ビット列Lb(p-1)を取り出す(S240)。そして、復元部220は、サンプリングデータSd(p)の、下位ビット列Lb(p-1)からの変化が最大量Vmaxを超過しているかを判定する(S250)。
復元部220は、「サンプリングデータSd(p)の、下位ビット列Lb(p-1)からの変化」が最大量Vmaxを超過していると判定すると(S250でYes)、桁上げ処理または桁下げ処理を実行する。具体的には、復元部220は、前回のカウント値Ct(p-1)の上位ビット列Hb(p-1)に「1」を加える桁上げ処理を実行し、または、上位ビット列Hb(p-1)から「1」を減じる桁下げ処理を実行する(S260)。
すなわち、復元部220は、サンプリングデータSd(p)が、下位ビット列Lb(p-1)から、最大量Vmaxを超えて減少していると判定すると、上位ビット列Hb(p-1)に1を加えた上位ビット列Hb’(p-1)を生成する桁上げ処理を実行する。また、サンプリングデータSd(p)が、下位ビット列Lb(p-1)から、最大量Vmaxを超えて増加していると判定すると、上位ビット列Hb(p-1)から1を減じた上位ビット列Hb’(p-1)を生成する桁下げ処理を実行する。そして、復元部220は、桁上げ処理または桁下げ処理を実行して生成した上位ビット列Hb’(p-1)を上位ビットとし、サンプリングデータSd(p)を下位ビットとするビット列を生成する(S270)。
復元部220は、変化が最大量Vmaxを超過していないと判定すると(S250でNo)、上位ビット列Hb(p-1)を上位ビットとし、サンプリングデータSd(p)を下位ビットとするビット列を生成する(S270)。復元部220は、S270で生成したビット列を、カウント値Ct(p)を示すビット列としてカウント値テーブルに格納する(S280)。復元部220は、データフレームから、全ての圧縮データ(つまり、サンプリングデータSd(2)~Sd(n)の全て)を取り出したかを判定し(S290)、全ての圧縮データを取り出したと判定すると(S290でYes)、処理を終了する。復元部220は、全ての圧縮データを取り出していないと判定すると(S290でNo)、次のサンプリングデータSd(p+1)を取り出し(S230)、S240以降の処理を実行する。
図11の(A)に示す処理を実行することにより、PLC20は、図11の(B)に示すように、サンプリングデータSd(1)~Sd(n)の各々から、カウント値Ct(1)~Ct(n)の各々を復元する。
(復元処理の詳細)
図12は、PLC20(特に、復元部220)が実行するデータ復元処理の詳細を示す図である。復元部220は、カウンタユニット10から送信されてきたサンプリングデータSd(p)からカウント値Ct(p)を復元し、具体的には、サンプリングデータSd(2)~Sd(n)の各々を、カウント値Ct(2)~Ct(n)の各々へと復元する。
図12に示すように、第1に、復元部220は、カウンタユニット10から送信されてきたデータ(データフレーム)から、先頭データ(つまり、先頭のサンプリングデータSd(1):0x43C2A267)を取り出し、カウント値Ct(1)とする。第2に、復元部220は、次の圧縮データを取り出し、具体的には、サンプリングデータSd(2):0x69を取り出す。第3に、復元部220は、カウント値Ct(1):0x43C2A267の下位ビット列Lb:0x67と、サンプリングデータSd(2):0x69とを用いて「桁上がり/桁下がりチェック」を実行する。
第4に、復元部220は、「桁上がり/桁下がりチェック」において問題がないと判定すると、カウント値Ct(1):0x43C2A267の下位ビット列Lb:0x67を、サンプリングデータSd(2):0x69と差し替えたビット列を生成する。すなわち、復元部220は、サンプリングデータSd(2)から復元したカウント値Ct(2)を示すビット列として、0x43C2A269を生成する。
また、復元部220は、「桁上がり/桁下がりチェック」において問題があると判定すると、カウント値Ct(1):0x43C2A267の上位ビット列Hb(1):0x43C2A2に対して、桁上がり処理または桁下がり処理を実行する(第5の処理)。
復元部220は、サンプリングデータSd(p)から復元したカウント値Ct(p)と、次の圧縮データ(サンプリングデータSd(p+1))と、を用いて第2から第5までの処理を実行し、カウント値Ct(p+1)を復元する。復元部220は、サンプリングデータSd(2)~Sd(n)の各々に対して、第2から第5までの処理を実行し、カウント値Ct(2)~Ct(n)の各々を復元する。
(圧縮データ復元例1:圧縮サイズが1byteで、パルスカウント方式が双方向)
図13は、圧縮サイズが1byteで、カウンタユニット10のパルスカウント方式が双方向である場合に、PLC20(特に、復元部220)が実行するデータ復元処理を示す図である。圧縮サイズが1byteで、パルスカウント方式が双方向であるので、図8を用いて説明したように、最大量Vmaxは、「-127」以上「127」以下である。復元部220は先ず、「データフレーム受信部210が受信したデータフレーム」から、先頭データ(つまり、先頭のサンプリングデータSd(1):0x43C2A267)を取り出し、カウント値Ct(1)としてカウント値テーブルに格納する。
復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(2):0x69)を取り出すと、カウント値Ct(1)の下位ビット列Lb(1):0x67とサンプリングデータSd(2):0x69とを比較する。復元部220は、カウント値Ct(1)の下位ビット列Lb(1):0x67から、サンプリングデータSd(2):0x69までの変化「2」が、最大量Vmax(つまり、「-127」以上「127」以下)を超えていないと判定する。
そこで、復元部220は、カウント値Ct(1)の下位ビット列Lb(1):0x67を、サンプリングデータSd(2):0x69に差し替えたビット列:0x43C2A269を生成する。言い換えれば、復元部220は、カウント値Ct(1)の上位ビット列Hb(1):0x43C2A2を上位ビットとし、サンプリングデータSd(2):0x69を下位ビットとするビット列:0x43C2A269を生成する。復元部220は、生成したビット列:0x43C2A269を、サンプリングデータSd(2)から復元したカウント値Ct(2)を示すビット列として、カウント値テーブルに格納する。
同様に、復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(3):0x6E)を取り出すと、カウント値Ct(2)の下位ビット列Lb(2):0x69とサンプリングデータSd(3):0x6Eとを比較する。復元部220は、カウント値Ct(2)の下位ビット列Lb(2):0x69から、サンプリングデータSd(3):0x6Eまでの変化「5」が、最大量Vmax(つまり、「-127」以上「127」以下)を超えていないと判定する。
そこで、復元部220は、カウント値Ct(2)の下位ビット列Lb(1):0x69を、サンプリングデータSd(3):0x6Eに差し替えたビット列:0x43C2A26Eを生成する。言い換えれば、復元部220は、カウント値Ct(2)の上位ビット列Hb(1):0x43C2A2を上位ビットとし、サンプリングデータSd(3):0x6Eを下位ビットとするビット列:0x43C2A26Eを生成する。復元部220は、生成したビット列:0x43C2A26Eを、サンプリングデータSd(3)から復元したカウント値Ct(3)を示すビット列として、カウント値テーブルに格納する。
(桁上がり/桁下がりがある場合)
図14は、図13と同様に、圧縮サイズが1byteで、カウンタユニット10のパルスカウント方式が双方向である場合に、PLC20が実行するデータ復元処理を示す図であり、特に、PLC20が桁上げ/桁下げ処理を実行する例を示している。圧縮サイズが1byteで、パルスカウント方式が双方向であるので、前述の通り、最大量Vmaxは、「-127」以上「127」以下である。
復元部220は先ず、「データフレーム受信部210が受信したデータフレーム」から、先頭データ(つまり、先頭のサンプリングデータSd(1):0x43C2A2FF)を取り出し、カウント値Ct(1)としてカウント値テーブルに格納する。
復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(2):0x01)を取り出すと、カウント値Ct(1)の下位ビット列Lb(1):0xFFとサンプリングデータSd(2):0x01とを比較する。復元部220は、サンプリングデータSd(2):0x01が、下位ビット列Lb(1):0xFFから「0xFE」減少しており、つまり、最大量Vmax(つまり、「-127」以上「127」以下)を超えて減少していると判定する。したがって、復元部220は、サンプリングデータSd(2):0x01は、下位ビット列Lb(1):0xFFから減少した値ではなく、増加して桁上がりした値を示していると判定する。
復元部220は、カウント値Ct(1)の上位ビット列Hb(1):0x43C2A2に1を加えたビット列:0x43C2A3を上位ビットとし、サンプリングデータSd(2):0x01を下位ビットとするビット列を生成する。すなわち、復元部220は、ビット列:0x43C2A301を生成し、このビット列を、サンプリングデータSd(2)から復元したカウント値Ct(2)を示すビット列として、カウント値テーブルに格納する。
同様に、復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(3):0xFE)を取り出すと、カウント値Ct(2)の下位ビット列Lb(2):0x01とサンプリングデータSd(3):0xFEとを比較する。復元部220は、サンプリングデータSd(3):0xFEが、下位ビット列Lb(2):0x01から「0xFD」増加しており、つまり、最大量Vmax(つまり、「-127」以上「127」以下)を超えて増加していると判定する。したがって、復元部220は、サンプリングデータSd(3):0xFEは、下位ビット列Lb(2):0x01から増加した値ではなく、減少して桁下がりした値を示していると判定する。
復元部220は、カウント値Ct(2)の上位ビット列Hb(2):0x43C2A3から1を減じたビット列:0x43C2A2を上位ビットとし、サンプリングデータSd(3):0xFEを下位ビットとするビット列を生成する。すなわち、復元部220は、ビット列:0x43C2A2FEを生成し、このビット列を、サンプリングデータSd(3)から復元したカウント値Ct(3)を示すビット列として、カウント値テーブルに格納する。
(圧縮データ復元例2:圧縮サイズが2bitで、パルスカウント方式が双方向)
図15は、圧縮サイズが2bitで、カウンタユニット10のパルスカウント方式が双方向である場合に、PLC20(特に、復元部220)が実行するデータ復元処理を示す図である。圧縮サイズが2bitで、パルスカウント方式が双方向であるので、図8を用いて説明したように、最大量Vmaxは、「-1」以上「1」以下である。復元部220は先ず、「データフレーム受信部210が受信したデータフレーム」から、先頭データ(つまり、先頭のサンプリングデータSd(1):0x43C2A267)を取り出し、カウント値Ct(1)としてカウント値テーブルに格納する。カウント値Ct(1):0x43C2A267の、「最下位ビットを含む、最大量Vmax分(つまり、2bit分)のビット列」である下位ビット列Lb(1)は、「b11」である。
復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(2):b10)を取り出すと、カウント値Ct(1)の下位ビット列Lb(1):b11とサンプリングデータSd(2):b10とを比較する。復元部220は、カウント値Ct(1)の下位ビット列Lb(1):b11から、サンプリングデータSd(2):b10までの変化「-1」が、最大量Vmax(つまり、「-1」以上「1」以下)を超えていないと判定する。
そこで、復元部220は、カウント値Ct(1)の下位ビット列Lb(1):b11を、サンプリングデータSd(2):b10に差し替えたビット列:0x43C2A266を生成する。復元部220は、生成したビット列:0x43C2A266を、サンプリングデータSd(2)から復元したカウント値Ct(2)を示すビット列として、カウント値テーブルに格納する。
同様に、復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(3):b11)を取り出すと、カウント値Ct(2)の下位ビット列Lb(2):b10とサンプリングデータSd(3):b11とを比較する。復元部220は、カウント値Ct(2)の下位ビット列Lb(2):b10から、サンプリングデータSd(3):b11までの変化「1」が、最大量Vmax(つまり、「-127」以上「127」以下)を超えていないと判定する。
そこで、復元部220は、カウント値Ct(2)の下位ビット列Lb(1):b10を、サンプリングデータSd(3):b11に差し替えたビット列:0x43C2A267を生成する。復元部220は、生成したビット列:0x43C2A267を、サンプリングデータSd(3)から復元したカウント値Ct(3)を示すビット列として、カウント値テーブルに格納する。
(桁上がり/桁下がりがある場合)
図16は、図15と同様に、圧縮サイズが2bitで、カウンタユニット10のパルスカウント方式が双方向である場合に、PLC20が実行するデータ復元処理を示す図であり、特に、PLC20が桁上げ/桁下げ処理を実行する例を示している。圧縮サイズが2bitで、パルスカウント方式が双方向であるので、前述の通り、最大量Vmaxは、「-1」以上「1」以下である。
復元部220は先ず、「データフレーム受信部210が受信したデータフレーム」から、先頭データ(つまり、先頭のサンプリングデータSd(1):0x43C2A2FF)を取り出し、カウント値Ct(1)としてカウント値テーブルに格納する。カウント値Ct(1):0x43C2A2FFの、「最下位ビットを含む、最大量Vmax分(つまり、2bit分)のビット列」である下位ビット列Lb(1)は、「b11」である。
復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(2):b00)を取り出すと、カウント値Ct(1)の下位ビット列Lb(1):b11とサンプリングデータSd(2):b00とを比較する。復元部220は、サンプリングデータSd(2):b00が、下位ビット列Lb(1):b11から「b11」減少しており、つまり、最大量Vmax(つまり、「-1」以上「1」以下)を超えて減少していると判定する。したがって、復元部220は、サンプリングデータSd(2):b00は、下位ビット列Lb(1):b11から減少した値ではなく、増加して桁上がりした値を示していると判定する。
復元部220は、カウント値Ct(1)の上位ビット列Hb(1)に1を加えたビット列を上位ビットとし、サンプリングデータSd(2)を下位ビットとするビット列:0x43C2A300を生成する。復元部220は、生成したビット列:0x43C2A300を、サンプリングデータSd(2)から復元したカウント値Ct(2)を示すビット列として、カウント値テーブルに格納する。
同様に、復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(3):b11)を取り出すと、カウント値Ct(2)の下位ビット列Lb(2):b00とサンプリングデータSd(3):b11とを比較する。復元部220は、サンプリングデータSd(3):b11が、下位ビット列Lb(2):b00から「b11」増加しており、つまり、最大量Vmax(つまり、「-1」以上「1」以下)を超えて増加していると判定する。したがって、復元部220は、サンプリングデータSd(3):b11は、下位ビット列Lb(2):b00から増加した値ではなく、減少して桁下がりした値を示していると判定する。
復元部220は、カウント値Ct(2)の上位ビット列Hb(2)から1を減じたビット列を上位ビットとし、サンプリングデータSd(3):b11を下位ビットとするビット列:0x43C2A2FFを生成する。復元部220は、生成したビット列:0x43C2A2FFを、サンプリングデータSd(3)から復元したカウント値Ct(3)を示すビット列として、カウント値テーブルに格納する。
(圧縮データ復元例3:圧縮サイズが1bitで、パルスカウント方式が単方向)
図17は、圧縮サイズが1bitで、カウンタユニット10のパルスカウント方式が単方向である場合に、PLC20(特に、復元部220)が実行するデータ復元処理を示す図である。圧縮サイズが1bitで、パルスカウント方式が単方向であるので、図8を用いて説明したように、最大量Vmaxは、「0」以上「1」以下である。復元部220は先ず、「データフレーム受信部210が受信したデータフレーム」から、先頭データ(つまり、先頭のサンプリングデータSd(1):0x43C2A267)を取り出し、カウント値Ct(1)としてカウント値テーブルに格納する。カウント値Ct(1):0x43C2A267の、「最下位ビットを含む、最大量Vmax分(つまり、1bit分)のビット列」である下位ビット列Lb(1)は、「b1」である。
復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(2):b1)を取り出すと、カウント値Ct(1)の下位ビット列Lb(1):b1とサンプリングデータSd(2):b1とを比較する。復元部220は、カウント値Ct(1)の下位ビット列Lb(1):b1から、サンプリングデータSd(2):b1までの変化「0」が、最大量Vmax(つまり、「-1」以上「1」以下)を超えていないと判定する。
そこで、復元部220は、カウント値Ct(1)の下位ビット列Lb(1):b1を、サンプリングデータSd(2):b1に差し替えたビット列:0x43C2A267を生成する。復元部220は、生成したビット列:0x43C2A267を、サンプリングデータSd(2)から復元したカウント値Ct(2)を示すビット列として、カウント値テーブルに格納する。
同様に、復元部220は、データフレームから次の圧縮データ(サンプリングデータSd(3):b0)を取り出すと、カウント値Ct(2)の下位ビット列Lb(2):b1とサンプリングデータSd(3):b0とを比較する。復元部220は、サンプリングデータSd(3):b0が、下位ビット列Lb(2):b1から減少しており、つまり、最大量Vmax(つまり、「0」以上「1」以下)を超えて減少していると判定する。したがって、復元部220は、サンプリングデータSd(3):b0は、下位ビット列Lb(2):b1から減少した値ではなく、増加して桁下がりした値を示していると判定する。
復元部220は、カウント値Ct(2)の上位ビット列Hb(2)に1を加えたビット列を上位ビットとし、サンプリングデータSd(3)を下位ビットとするビット列:0x43C2A268を生成する。復元部220は、生成したビット列:0x43C2A268を、サンプリングデータSd(3)から復元したカウント値Ct(3)を示すビット列として、カウント値テーブルに格納する。
(ツールの詳細)
ツール30は、図1に示すように、機能ブロックとして、算出部310および設定部320を備えている。ツール30は、上述の各機能ブロックに加え、PLC20に対して制御周期Sctを設定する、不図示の制御周期Sct調整部などを備えていてもよい。しかしながら、記載の簡潔性を担保するため、本実施の形態に直接関係のない構成は、説明およびブロック図から省略している。ただし、実施の実情に則して、ツール30は、当該省略された構成を備えてもよい。
設定部320は、最大量Vmaxを表現可能なデータサイズ(ビット数)を、つまり、圧縮サイズを、カウンタユニット10と、PLC20と、の少なくとも一方に対して設定する。前記の構成によれば、ツール30は、カウンタユニット10とPLC20との少なくとも一方に対して、圧縮サイズを設定する。
したがって、ツール30は、カウンタユニット10に圧縮サイズを設定することにより、カウンタユニット10が、ツール30によって設定された圧縮サイズに圧縮したサンプリングデータSdを、PLC20に送信することができるようにするとの効果を奏する。また、ツール30は、PLC20に圧縮サイズを設定することにより、PLC20が、圧縮サイズに圧縮されたサンプリングデータSdを復元することができるようにするとの効果を奏する。
算出部310は、カウンタユニット10が、1回の制御周期Sctにおいて実行するサンプリング処理の回数を示す情報を含む、カウンタユニット10についての設定情報を用いて、圧縮サイズを算出する。そして、設定部320は、算出部310によって算出された圧縮サイズを、カウンタユニット10とPLC20との少なくとも一方に対して設定する。
前記の構成によれば、ツール30の算出部310は、カウンタユニット10についての設定情報を用いて、圧縮サイズを算出し、つまり、「1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化の最大量Vmax」を表現可能なデータサイズ(つまり、圧縮サイズ)を算出する。
ここで、前記設定情報は、「1回の制御周期Sctにおいて実行するサンプリング処理の回数を示す情報」に加えて、例えば、以下の情報を含んでいてもよい。すなわち、前記設定情報は、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」を示す情報を含んでいてもよい。
前述の通り、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」は、エンコーダ40(パルス信号生成装置)のスペックおよびアプリケーションの少なくとも一方により算出することができる。具体的には、「カウンタユニット10が、1回のサンプリング処理において受信し得るパルス信号の数」は、スペックおよびアプリケーションの少なくとも一方により予め決められた、「エンコーダ40の、分解能および最高回転数」から、算出することができる。
それゆえ、前記設定情報は、前記「受信し得るパルス信号の数」を示す情報に代えて、スペックおよびアプリケーションの少なくとも一方により予め決められた、「エンコーダ40の、分解能および最高回転数」を示す情報を含んでいてもよい。
また、前記設定情報は、カウンタユニット10のパルスカウント方式が単方向であるのか、双方向であるのかを示すパルスカウント方式種別を含んでいてもよい。パルスカウント方式種別は、カウンタユニット10にパルス信号を出力するエンコーダ40の出力するパルス信号が、単方向のパルス信号であるのか、または、双方向のパルス信号であるのかを示してもよい。
パルスカウント方式が双方向である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、正負のいずれでもあり得る。例えば、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が「127」である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、「-127~127」と示すことができる。したがって、圧縮サイズは、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数に1ビットを加えたビット数となる。
パルスカウント方式が単方向である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、常に正または常に負である。例えば、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」が「255」である場合、1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化は、「0~255」と示すことができる。したがって、圧縮サイズは、「1回のサンプリング処理においてカウントし得るパルス数の絶対値」を表現可能なビット数となる。
「1回のサンプリング処理においてカウントし得るパルス数の絶対値」は、「1回のサンプリング処理当たりの期間を示すサンプリング周期Smcを、パルス信号の最短パルス周期Plcminによって除した値」に対して小数点以下を繰り上げた値である。また、サンプリング周期Smcは、制御周期Sctが分かれば、設定情報が含む「1回の制御周期Sctにおいて実行するサンプリング処理の回数を示す情報」から算出することができる。さらに、「最短パルス周期Plcmin」は、「最高回転数を60で除した値に分解能を乗じた値」の逆数として算出することができる。上述の通り、最大回転速度は、エンコーダ40のスペック(仕様、性能)から決めることができ、また、アプリケーション(使用用途)から決めることもできる。
したがって、ツール30は、設定情報を用いて、圧縮サイズ(つまり、「1回の制御周期Sctにおいて連続して実行される2つのサンプリング処理の計測結果の間の変化の最大量Vmax」を表現可能なサイズ)を正確に算出することができるとの効果を奏する。
ツール30は、ツール30が使用する各種データを格納する記憶装置として、不図示のツール記憶部を備えていてもよい。なお、ツール記憶部は、ツール30が実行する(1)制御プログラム、(2)OSプログラム、(3)ツール30が有する各種機能を実行するためのアプリケーションプログラム、および、(4)該アプリケーションプログラムを実行するときに読み出す各種データを非一時的に記憶してもよい。上記の(1)~(4)のデータは、例えば、ROM(read only memory)、フラッシュメモリ、EPROM(Erasable Programmable ROM)、EEPROM(登録商標)(Electrically EPROM)、HDD(Hard Disc Drive)等の不揮発性記憶装置に記憶される。ツール30は、さらに、ツール一時記憶部を備えていてもよい。ツール一時記憶部は、ツール30が実行する各種処理の過程で、演算に使用するデータおよび演算結果等を一時的に記憶するいわゆるワーキングメモリであり、RAM(Random Access Memory)等の揮発性記憶装置で構成される。どのデータをどの記憶装置に記憶するのかについては、ツール30の使用目的、利便性、コスト、または、物理的な制約等から適宜決定される。
(ツールが利用する情報について)
図18は、ツール30(特に、算出部310)が圧縮サイズを算出する際に利用する情報(設定情報)の一例を示す図である。算出部310は、例えば図18に例示するような設定情報を取得することによって、圧縮サイズを、つまり、最大量Vmax(1サンプリング周期Smcに変化し得るカウント値Ct)を表現可能なビット数を、算出する。ツール30は、例えば、制御周期Sct、カウンタユニット10が1回の制御周期Sctにおいて実行するサンプリング処理の回数、カウンタユニット10のパルスカウント方式、エンコーダ40の分解能および最高回転数を用いて、圧縮サイズを算出する。前述の通り、エンコーダ40の分解能および最高回転数は、エンコーダ40のスペック(仕様、性能)およびアプリケーション(使用用途)の少なくとも一方により、予め決められている。ツール30は、カウンタユニット10等の設定を示す設定情報を用いて、圧縮サイズを算出する。
ツール30は、「制御周期Sct」および「カウンタユニット10が1回の制御周期Sctにおいて実行するサンプリング処理の回数」を示す情報に代えて、「カウンタユニット10のサンプリング周期Smc」を取得してもよい。すなわち、ツール30は、カウンタユニット10のサンプリング周期Smcおよびパルスカウント方式を、設定情報として取得してもよい。
また、カウンタユニット10のパルスカウント方式を示す情報に代えて、ツール30は、エンコーダ40の出力するパルス信号が単方向であるのか、または、双方向であるのかを示す情報を、設定情報として取得してもよい。
例えば、制御周期Sctが「1[ms]」であり、1回の制御周期Sctにおいて実行するサンプリング処理の回数が「10[回]」であると、算出部310は、サンプリング周期Smcが「100[μs](=1ms/10)」であると算出する。
軸を1回転させた場合にエンコーダ40が出力するパルス数を示す分解能が「360」であり、エンコーダ40が1分間に可能な回転数を示す最高回転数が「6000[rpm]」であると、算出部310は、最短パルス周期Plcminを以下のように算出する。すなわち、算出部310は、「1/{(6000/60)*360}」から、最短パルス周期Plcminが約「27.78μs」であると算出する。
算出部310は、サンプリング周期Smc(100[μs])と、最短パルス周期Plcmin(27.78μs)とから、1回のサンプリング処理においてカウントし得るパルス数の絶対値を、以下のように算出する。すなわち、算出部310は、1回のサンプリング処理においてカウントし得るパルス数の絶対値を、「4(=ROUNDUP(100/27.78))」と算出する。ROUNDUP(x)は、引数xの小数点以下を切り上げる関数を示している。
「4」を表現可能なビット数は3ビットであるから、カウンタユニット10のパルスカウント方式が双方向である場合、算出部310は、最大量Vmaxを表現可能なビット数を、つまり、圧縮サイズを、「4bit(=3bit+1bit)」と算出する。ツール30は、設定情報を用いて上述のように算出した圧縮サイズ(上述の例では4bit)を、カウンタユニット10およびPLC20の少なくとも一方に対して、設定する。
ツール30は、さらに、1データフレームのデータサイズを算出し、算出した1データフレームのデータサイズを、カウンタユニット10およびPLC20の少なくとも一方に対して、設定してもよい。例えば、フルサイズを4byteとすると、上述の例ではカウンタユニット10は1回の制御周期Sctにおいてサンプリング処理を10回実行するので、データフレームのデータサイズは約9byte(=4byte+ROUNDUP((9*4/8))となる。ツール30算出した1データフレームのデータサイズ(上述の例では4byte)を、カウンタユニット10およびPLC20の少なくとも一方に対して、設定してもよい。
ただし、ツール30が圧縮サイズを算出し、カウンタユニット10およびPLC20の少なくとも一方に、算出した圧縮サイズを設定することは必須ではない。カウンタユニット10が、自装置等の設定に係る設定情報を用いて、圧縮サイズを算出し、算出した圧縮サイズをPLC20に通知してもよい。また、PLC20が、カウンタユニット10等の設定情報を用いて、圧縮サイズを算出し、算出した圧縮サイズをカウンタユニット10に通知してもよい。
§4.変形例
(圧縮方法についての変形例:サンプリングデータを差分データとする)
図19は、サンプリング処理において計測した計測結果(例、カウント値Ct)を、圧縮サイズのサンプリングデータSdに圧縮する方法の例を示す図である。特に、図19には、データ圧縮処理について、下位ビット列Lbを抽出する場合(図19の(1))と、差分を算出する場合(図19の(2))と、が対比して示されている。
これまで、圧縮部130が、「2回目以降の各々のサンプリング処理において計測されたカウント値Ctを示すビット列」を、圧縮サイズのサンプリングデータSdに圧縮する方法として、以下の例を説明してきた。すなわち、圧縮部130が、カウント値Ctを示すビット列から、「最下位ビットを含む、圧縮サイズ分のビット列」を、下位ビット列Lbとして抽出し、抽出した下位ビット列Lbを、サンプリングデータSdとしてデータフレームへと格納する例を説明してきた。しかしながら、圧縮部130が、「2回目以降の各々のサンプリング処理において計測されたカウント値Ctを示すビット列」を、圧縮サイズのサンプリングデータSdに圧縮する方法は、下位ビット列Lbを抽出する方法に限られるものではない。
図19の(1)には、圧縮部130が、圧縮サイズ(2byte)のサンプリングデータSd(m)(圧縮データ)を、カウント値Ct(m)の下位ビット列Lb(m)とする方法が開示されている。図19の(1)に示す方法によれば、カウント値Ct(1):0x43C2A267からは、そのまま、サンプリングデータSd(1)が生成される。カウント値Ct(2):0x43C2A269からは、圧縮部130によって圧縮サイズ(2byte)の下位ビット列Lb(2):0x69が抽出され、抽出された下位ビット列Lb(2):0x69がサンプリングデータSd(2)となる。カウント値Ct(3):0x43C2A275からは、圧縮部130によって圧縮サイズ(2byte)の下位ビット列Lb(3):0x75が抽出され、抽出された下位ビット列Lb(3):0x75がサンプリングデータSd(3)となる。カウント値Ct(4):0x43C2A294からは、圧縮部130によって圧縮サイズ(2byte)の下位ビット列Lb(4):0x94が抽出され、抽出された下位ビット列Lb(4):0x94がサンプリングデータSd(4)となる。カウント値Ct(5):0x43C2A2B8からは、圧縮部130によって圧縮サイズ(2byte)の下位ビット列Lb(5):0xB8が抽出され、抽出された下位ビット列Lb(5):0xB8がサンプリングデータSd(5)となる。
図19の(2)には、圧縮部130が、圧縮サイズのサンプリングデータSd(m)(圧縮データ)を、カウント値Ct(m)の、直前のカウント値Ct(m-1)からの差分とする方法が開示されている。図19の(2)に示す方法によれば、カウント値Ct(1):0x43C2A267からは、そのまま、サンプリングデータSd(1)が生成される。カウント値Ct(2):0x43C2A269からは、圧縮部130によって、カウント値Ct(1):0x43C2A267からの変化量を示す、圧縮サイズ(2byte)のビット列:0x02が算出され、0x02がサンプリングデータSd(2)となる。カウント値Ct(3):0x43C2A275からは、圧縮部130によって、カウント値Ct(2):0x43C2A269からの変化量を示す、圧縮サイズ(2byte)のビット列:0x0Cが算出され、0x0CがサンプリングデータSd(3)となる。カウント値Ct(4):0x43C2A294からは、圧縮部130によって、カウント値Ct(3):0x43C2A275からの変化量を示す、圧縮サイズ(2byte)のビット列:0x1Fが算出され、0x1FがサンプリングデータSd(4)となる。カウント値Ct(5):0x43C2A2B8からは、圧縮部130によって、カウント値Ct(4):0x43C2A294からの変化量を示す、圧縮サイズ(2byte)のビット列:0x24が算出され、0x24がサンプリングデータSd(5)となる。
図19の(2)に示すように、カウント値Ct(m)を、圧縮サイズのサンプリングデータSd(m)に圧縮する方法として、圧縮部130は、カウント値Ct(m)の、直前のカウント値Ct(m-1)からの差分を、サンプリングデータSd(m)としてもよい。圧縮部130は、カウント値Ct(2)~Ct(n)の各々について、Ct(1)~Ct(n-1)の各々からの差分を計算する。
すなわち、カウンタユニット10において、圧縮部130は、2回目以降の前記サンプリング処理の各々の計測結果の、直前の前記サンプリング処理の計測結果からの変化量を示すビット列を、サンプリングデータSdとしてもよい。
前記の構成によれば、カウンタユニット10は、2回目以降の前記サンプリング処理の各々の計測結果の、直前の前記サンプリング処理の計測結果からの変化量を示すビット列を、サンプリングデータSdとする。
ここで、前述の通り、サンプリングデータSdのデータサイズは、1回の制御周期Sctにおいて連続して実行される2つの前記サンプリング処理の計測結果の間の変化の最大量Vmaxを表現可能なデータサイズである。それゆえ、2回目以降の前記サンプリング処理の各々の計測結果の、直前の前記サンプリング処理の計測結果からの変化量のデータサイズは、前記変化の最大量Vmaxを表現可能なデータサイズ以下であり、つまり、サンプリングデータSdのデータサイズ以下である。
したがって、カウンタユニット10は、2回目以降の前記サンプリング処理の各々の計測結果の、直前の前記サンプリング処理の計測結果からの変化量を示すビット列を、サンプリングデータSdとして、PLC20に送信することができるとの効果を奏する。
サンプリングデータSd(2)~Sd(n)の各々が、カウント値Ct(2)~Ct(n)の各々の、カウント値Ct(1)~Ct(n-1)の各々からの差分である場合、PLC20は、以下のように、カウント値Ct(2)~Ct(n)を復元する。すなわち、PLC20の復元部220は、直前のカウント値Ct(m-1)にサンプリングデータSd(m)を加算することによって、カウント値Ct(m)を復元する。
(データフレームに格納されている情報)
図20は、カウンタユニット10がPLC20へと制御周期Sctごとに繰り返し送信するデータフレームに格納されている情報の一例を示す図である。図20に示すように、カウンタユニット10がPLC20へと送信するデータフレームには、各々がカウント値Ct(1)~Ct(n)の各々に対応する、サンプリングデータSd(1)~Sd(n)に加えて、以下の情報が格納されていてもよい。
すなわち、データフレームには、カウンタユニット10が1回の制御周期Sctにおいて実行するサンプリング処理の回数(つまり、サンプリング数)を示す情報が格納されていてもよい。例えば、データフレームには、カウンタユニット10が1回の制御周期Sctにおいて5回のサンプリング処理を実行することを示すビット列:0x0005が格納されていてもよい。
また、データフレームには、圧縮サイズ(ビット数)を示す情報が格納されていてもよく、例えば、圧縮サイズが8bit(つまり、1byte)であることを示すビット列:0x08が格納されていてもよい。
さらに、データフレームには、エンコーダの40の出力するパルス信号のパルス方向を示す情報が、つまり、カウンタユニット10のパルスカウント方式を示す情報が、格納されていてもよい。例えば、ビット列:0x00はパルスカウント方式が単方向(正方向のみ)であることを示し、ビット列:0x01はパルスカウント方式が双方向であることを示してもよい。
(サンプリング処理についての変形例:アナログ値を計測する)
図21は、アナログユニット60が、1回の制御周期Sctにおいて複数回実行したサンプリング処理の各々において計測した計測結果(アナログ値Al(1)~Al(n))を、圧縮サイズのサンプリングデータSd(1)~Sd(n)に圧縮する例を示している。アナログユニット60は、カウンタユニット10と同様の構成を備え、アナログユニット60の計測部110は、1回の制御周期Sctにおいてサンプリング処理を複数回実行し、各サンプリング処理において計測したアナログ値Alを、取得部120に通知する。
アナログユニット60の圧縮部130は、カウンタユニット10の圧縮部130と同様、「1サンプリング周期Smcに変化し得るアナログ値Al」を表現可能なビット数に、「2回目以降の各々のサンプリング処理において計測したアナログ値Al」を圧縮する。「1サンプリング周期Smcに変化し得るアナログ値Al」は、「1サンプリング周期Smcで変化し得るアナログ値Alの変化量」と言い換えてもよい。つまり、圧縮サイズは、アナログユニット60が1回の制御周期Sctにおいて連続して実行する2つのサンプリング処理の各々においてカウントした2つのアナログ値Alの間の変化の最大量Vmaxを表現可能なデータサイズである。言い換えれば、圧縮サイズは、「m」回目のサンプリング処理において計測したアナログ値Al(m)と、その直前の「m-1」回目のサンプリング処理において計測したアナログ値Al(m-1)との間の変化の最大量Vmaxを表現可能なデータサイズである。
1サンプリング周期Smcに変化し得るアナログ値Alの変化の範囲が、例えば、「-127」以上「127」以下である場合、「127」を表現可能な7ビットに1ビットを加えた8ビット、つまり、1byteが、圧縮サイズとなる。同様に、1サンプリング周期Smcに変化し得るアナログ値Alの変化の範囲が、例えば、「-1」以上「1」以下である場合、「1」を表現可能な1ビットに1ビットを加えた2ビットが、圧縮サイズとなる。また、1サンプリング周期Smcに変化し得るアナログ値Alの変化の範囲が、例えば、「0」以上「255」以下である場合、「255」を表現可能な8ビット、つまり、1byteが、圧縮サイズとなる。
すなわち、アナログユニット60(データ転送装置)は、1回の制御周期Sctにおいて複数回実行されたサンプリング処理の各々の計測結果(アナログ値Al)を示す、複数のサンプリングデータSdを、1データフレームに格納して、制御周期SctごとにPLC20へと送信するデータ転送装置である。アナログユニット60は、取得部120と、圧縮部130と、を備えている。取得部120は、前記複数回実行されたサンプリング処理の各々の計測結果(アナログ値Al)を取得する。圧縮部130は、1回の制御周期Sctにおいて連続して実行される2つの前記サンプリング処理の計測結果(アナログ値Al)の間の変化の最大量Vmaxが予め決まっている場合、取得部120によって取得された複数の前記計測結果(アナログ値Al)のうち、2回目以降の前記サンプリング処理の各々の計測結果(つまり、アナログ値Al(2)~Al(n)の各々)を、最大量Vmaxを表現可能なデータサイズ(つまり、圧縮サイズ)のサンプリングデータSdに圧縮する。
前記の構成によれば、アナログユニット60は、最大量Vmaxが予め決まっている場合、サンプリングデータSd(2)~Sd(n)の各々を、最大量Vmaxを表現可能なデータサイズ(つまり、圧縮サイズ)に圧縮して、PLC20へと送信する。
したがって、アナログユニット60は、アナログ値Al(2)~Al(n)の各々を圧縮せずに送信する場合に比べて、制御周期SctごとにPLC20へと送信するデータフレームのデータサイズを、抑制することができるとの効果を奏する。
アナログユニット60の圧縮部130は、カウンタユニット10の圧縮部130と同様、アナログ値Al(2)~Al(n)の各々の下位ビット列Lb(2)~Lb(n)を抽出して、サンプリングデータSd(2)~Sd(n)の各々を生成してもよい。また、アナログユニット60の圧縮部130は、アナログ値Al(2)~Al(n)の各々の、アナログ値Al(1)~Al(n-1)の各々からの差分を、サンプリングデータSd(2)~Sd(n)の各々としてもよい。
(カウンタユニットとPLCとの接続例)
カウンタユニット10とPLC20とは、一定の通信周期ごとに相互に信号(データ)を送受信できるように通信可能に接続されていればよく、カウンタユニット10とPLC20との接続方式は特に限定されない。同様に、アナログユニット60とPLC20とは、一定の通信周期ごとに相互に信号(データ)を送受信できるように通信可能に接続されていればよく、アナログユニット60とPLC20との接続方式は特に限定されない。
図22は、カウンタユニット10とPLC20との接続例を示す図である。カウンタユニット10とPLC20とは、相互に通信可能に接続され、特に、所定の通信周期(例えば、PLC20の制御周期Sct)で繰り返し、相互にデータを送受信する。カウンタユニット10は、PLC20と周期的に通信できればよく、カウンタユニット10とPLC20との間のバス/ネットワーク構成は、特に限定されない。
すなわち、図22の(A)に示すように、カウンタユニット10とPLC20とは、PLC直結バスを介して、相互に通信可能に接続されていてもよい。つまり、カウンタユニット10は、PLC20と一体的に(言い換えれば、PLC20の機能ユニットとして)構成され、カウンタユニット10とPLC20(特に、PLC20のCPUユニット)とが内部バスによって接続されてもよい。
また、図22の(B)に示すように、カウンタユニット10とPLC20とは、フィールドネットワーク50を介して、相互に通信可能に接続されていてもよい。カウンタユニット10とPLC20とを接続するフィールドネットワーク50としては、典型的には、各種の産業用イーサネット(登録商標)を用いることができる。産業用イーサネット(登録商標)としては、たとえば、EtherCAT(登録商標)、Profinet IRT、MECHATROLINK(登録商標)-III、Powerlink、SERCOS(登録商標)-III、CIP Motionなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット(登録商標)以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、DeviceNet、CompoNet/IP(登録商標)などを用いてもよい。図22の(B)に示す例では、PLC20をマスタ装置とするマスタスレーブ制御システムにおいて、スレーブ装置としてのカウンタユニット10が、フィールドネットワーク50を介して、PLC20に接続されている。
さらに、図22の(C)に示すように、カウンタユニット10とPLC20とは、IOターミナル内部バスを介して、相互に通信可能に接続されていてもよい。より正確には、カウンタユニット10とカプラユニット(通信カプラ)とは、IOターミナル内部バス(内部バス)を介して互いに通信可能に接続され、一体となってIOユニットを構成してもよい。そして、PLC20をマスタ装置とするマスタスレーブ制御システムにおいて、カウンタユニット10とカプラユニットとを含むIOユニットは、スレーブ装置として、フィールドネットワーク50を介して、PLC20に接続されていてもよい。
〔ソフトウェアによる実現例〕
カウンタユニット10、PLC20、および、ツール30の各々の機能ブロック(具体的には、計測部110、取得部120、圧縮部130、送信部140、データフレーム受信部210、復元部220、算出部310、および、設定部320)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(CenTral Processing Unit)を用いてソフトウェアによって実現してもよい。
後者の場合、カウンタユニット10、PLC20、および、ツール30の各々は、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、上記プログラムおよび各種データがコンピュータ(またはCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、上記プログラムを展開するRAM(Random Access Memory)等を備えている。そして、コンピュータ(またはCPU)が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。