(58)【調査した分野】(Int.Cl.,DB名)
CPUユニットと、前記CPUユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置であって、
前記プログラマブル・ロジック・コントローラは、
前記CPUユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記CPUユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記CPUユニットおよび前記拡張ユニットは同期されたそれぞれの内部における前記ユニット間同期周期にしたがって各々のプログラムを実行し、
前記CPUユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記デバイスメモリに格納される時刻を管理するためのCPUユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファとを有し、
前記拡張ユニットは、
前記デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記CPUユニットへ入力された前記デバイス値を保持する入力デバイスと、前記CPUユニットの出力デバイスに関連付けられており、前記CPUユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すバッファメモリ値を格納するバッファメモリと、
前記ユニット間同期周期を管理し、前記CPUユニットタイマーと時刻同期されており、前記バッファメモリ値が前記バッファメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記CPUユニットは、前記CPUユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記CPUユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記CPUユニットの前記第一リングバッファから前記デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の時刻情報とを取得する取得手段と、
前記デバイス値の時刻情報と前記バッファメモリ値の時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示する表示手段と
を有することを特徴とするモニタ装置。
前記CPUユニットのデバイスメモリに格納される複数のデバイス値のうち少なくとも一部のデバイス値は、前記CPUユニットがユーザプログラムを繰り返し実行するスキャンタイムにしたがって前記拡張ユニットと通信することで更新され、前記複数のデバイス値のうち少なくとも一部のデバイス値は、前記スキャンタイムよりも短い一定の制御周期で前記拡張ユニットと通信することで更新されることを特徴とする請求項1に記載のモニタ装置。
前記CPUユニットの内部における制御周期と前記拡張ユニットの内部における制御周期とが前記CPUユニットタイマーと前記拡張ユニットタイマーとを通じて同期している
ことを特徴とする請求項1または2に記載のモニタ装置。
前記CPUユニットは各バッファメモリ値と当該各バッファメモリ値の格納時刻を示す時刻情報とを前記拡張ユニットから受信し、各デバイス値の格納時刻を示す時刻情報と、前記各バッファメモリ値の格納時刻を示す時刻情報とに基づき、前記各デバイス値と前記各バッファメモリ値との時間軸を整合させて前記取得手段に送信し、
前記表示手段は、前記各デバイス値の格納時刻を示す時刻情報と、前記各バッファメモリ値の格納時刻を示す時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示することを特徴とする請求項1に記載のモニタ装置。
CPUユニットと、前記CPUユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと前記プログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置とを有するプログラマブル・ロジック・コントローラ・システムであって、
前記プログラマブル・ロジック・コントローラは、
前記CPUユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記CPUユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記CPUユニットおよび前記拡張ユニットは同期されたそれぞれの内部におけるユニット間同期周期にしたがって各々のプログラムを実行し、
前記CPUユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記デバイスメモリに格納される時刻を管理するためのCPUユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファと
を有し、
前記拡張ユニットは、
前記デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記CPUユニットへ入力された前記デバイス値を保持する入力デバイスと、前記CPUユニットの出力デバイスに関連付けられており、前記CPUユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すバッファメモリ値を格納するバッファメモリと、
前記ユニット間同期周期を管理し、前記CPUユニットタイマーと時刻同期されており、前記バッファメモリ値が前記バッファメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記CPUユニットは前記CPUユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記CPUユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記CPUユニットの前記第一リングバッファから前記デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の時刻情報とを取得する取得手段と、
前記デバイス値の時刻情報と前記バッファメモリ値の時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示する表示手段と
を有することを特徴とするプログラマブル・ロジック・コントローラ・システム。
CPUユニットと、前記CPUユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置であって、
前記プログラマブル・ロジック・コントローラは、
前記CPUユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記CPUユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記CPUユニットおよび前記拡張ユニットは同期されたそれぞれの内部における前記ユニット間同期周期にしたがって各々のプログラムを実行し、
前記CPUユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなる第一デバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記第一デバイスメモリに格納される時刻を管理するためのCPUユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記第一デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファと
を有し、
前記拡張ユニットは、
前記第一デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記CPUユニットへ入力された前記デバイス値を保持する入力デバイスと、前記CPUユニットの出力デバイスに関連付けられており、前記CPUユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値を格納する第二デバイスメモリと、
前記ユニット間同期周期を管理し、前記CPUユニットタイマーと時刻同期されており、前記デバイス値が前記第二デバイスメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記第二デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記CPUユニットは前記CPUユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記CPUユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記CPUユニットの前記第一リングバッファから前記第一デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記第二デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得する取得手段と、
前記第一デバイスメモリのデバイス値の時刻情報と前記第二デバイスメモリのデバイス値の時刻情報とに基づき前記第一デバイスメモリのデバイス値と前記第二デバイスメモリのデバイス値との時間軸を整合させて表示する表示手段と
を有することを特徴とするモニタ装置。
【発明を実施するための形態】
【0011】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【0012】
はじめにプログラマブル・ロジック・コントローラ(PLC、単にプログラマブルコントローラと呼ばれてもよい)を当業者にとってよりよく理解できるようにするために、一般的なPLCの構成とその動作について説明する。
【0013】
図1は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。
図1に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置1と、工場等に設置される各種制御装置を統括的に制御するためのPLC(プログラマブル・ロジック・コントローラ)2とを備えている。ユーザプログラムは、ラダー言語やモーションフローなどのグラフィカルプログラミング言語を用いて作成されてもよいし、C言語などの高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザプログラムはラダープログラムとする。PLC2は、CPUが内蔵された基本ユニット3と1つないし複数の拡張ユニット4を備えている。基本ユニット3に対して1つないし複数の拡張ユニット4が着脱可能となっている。基本ユニット3はCPUユニットと呼ばれることもある。
【0014】
基本ユニット3には、表示部5及び操作部6が備えられている。表示部5には、基本ユニット3に取り付けられている各拡張ユニット4の動作状況などを表示することができ、表示部5の表示内容は、操作部6を操作することにより切り替えることができる。表示部5には、通常、PLC2内のデバイスの現在値(デバイス値)やPLC2内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー(補助リレー)、タイマー、カウンタ、データメモリ等の状態を示す情報である。
【0015】
拡張ユニット4は、PLC2の機能を拡張するために用意されており、基本ユニット3に対して側方から取り付けられる。1つ目の拡張ユニット4は、基本ユニット3に対して側方から直接的に取り付けられる。2つ目以降の拡張ユニット4は、既に取り付けられている拡張ユニット4に対して、側方から直列的に取り付けられる。たとえば、基本ユニット3の右側面と拡張ユニット4の左側面とが連結面になっている。同様に、1つ目の拡張ユニット4の右側面の形状等は基本ユニット3の右側面とほぼ同じであるため、1つ目の拡張ユニット4の右側面に2つ目の拡張ユニット4の左側面が連結される。このような連結方式は、数珠つなぎ方式とかデイジーチェーン方式と呼ばれてもよい。各連結面にはコネクタが設けられており、通信や電力供給を行うためのバスもコネクタを介して連結される。このようにして、基本ユニット3と複数の拡張ユニット4が直列的に取り付けられると、各拡張ユニット4内に備えられた配線(例:バス)を介して、各拡張ユニット4が基本ユニット3に対して通信可能に接続される。各拡張ユニット4には、その拡張ユニット4の機能に対応する被制御装置16(
図4)が接続され、これにより、各被制御装置16が拡張ユニット4を介して基本ユニット3に接続される。被制御装置16には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
【0016】
プログラム作成支援装置1は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部7及び操作部8を備えている。PLC2を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置1を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置1内でニモニックコードに変換される。そして、プログラム作成支援装置1を、USB(Universal Serial Bus)などの通信ケーブル9を介してPLC2の基本ユニット3に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置1から基本ユニット3に送ると、そのラダープログラムが基本ユニット3内でマシンコードに変換され、基本ユニット3に備えられたメモリ内に記憶される。なお、ここではニモニックコードを基本ユニット3に送信するようにしているが、本発明はこれに限られず、例えばニモニックコードを更に中間コードに変換し、中間コードを基本ユニット3に送信するようにしてもよい。
【0017】
なお、
図1では示していないが、プログラム作成支援装置1の操作部8には、プログラム作成支援装置1に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置1は、USB以外の他の通信ケーブル9を介して、PLC2の基本ユニット3に対して着脱可能に接続されるような構成であってもよい。
【0018】
図2は、ラダープログラムの作成時にプログラム作成支援装置1の表示部7に表示されるラダー
図Ldの一例を示す図である。
図2に示すように、PLC2を制御するためのラダープログラムは、プログラム作成支援装置1の表示部7にマトリックス状に表示される複数のセル18内に仮想デバイスのシンボル19を適宜配置して、視覚的なリレー回路を表すラダー
図Ldを構築することにより作成される。
【0019】
ラダー
図Ldには、たとえば、10列×N行(Nは任意の自然数)のセル18が配置されている。そして、各行のセル18内に、
図2に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル19を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、1行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
【0020】
図2に示すリレー回路は、入力装置からの入力信号に基づいてオン/オフされる3つの仮想デバイス(以下、「入力デバイス」と呼ぶ。)のシンボル19a,19b,19cと、出力装置の動作を制御するためにオン/オフされる仮想デバイス(以下、「出力デバイス」と呼ぶ。)のシンボル19dとが適宜結合されることにより構成されている。
【0021】
各入力デバイスのシンボル19a,19b,19cの上方に表示されている文字(「R0001」、「R0002」及び「R0003」)は、その入力デバイスのデバイス名(アドレス名)21を表している。各入力デバイスのシンボル19a,19b,19cの下方に表示されている文字(「フラグ1」、「フラグ2」及び「フラグ3」)は、その入力デバイスに対応付けられたデバイスコメント22を表している。出力デバイスのシンボル19dの上方に表示されている文字(「原点復帰」)は、その出力デバイスの機能を表す文字列からなるラベル23である。
【0022】
図2に示す例では、デバイス名「R0001」及び「R0002」にそれぞれ対応する2つの入力デバイスのシンボル19a,19bが直列的に結合されることにより、AND回路が構成されている。また、これらの2つの入力デバイスのシンボル19a,19bからなるAND回路に対して、デバイス名「R0003」に対応する入力デバイスのシンボル19cが並列的に結合されることにより、OR回路が構成されている。すなわち、このリレー回路では、2つのシンボル19a,19bに対応する入力デバイスがいずれもオンした場合、又は、シンボル19cに対応する入力デバイスがオンした場合にのみ、シンボル19dに対応する出力デバイスがオンされるようになっている。
【0023】
図3は、
図1のプログラム作成支援装置1の電気的構成について説明するためのブロック図である。
図3に示すように、プログラム作成支援装置1には、CPU24、表示部7、操作部8、記憶装置25及び通信部26が備えられている。表示部7、操作部8、記憶装置25及び通信部26は、それぞれCPU24に対して電気的に接続されている。記憶装置25は、少なくともRAMを含む構成であり、プログラム記憶部27と、編集ソフト記憶部28とを備えている。
【0024】
ユーザは、編集ソフト記憶部28に記憶されている編集ソフトをCPU24に実行させて、操作部8を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、プログラム記憶部27に記憶される。また、ユーザは、必要に応じてプログラム記憶部27に記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部26は、通信ケーブル9を介してプログラム作成支援装置1を基本ユニット3に通信可能に接続するためのものである。
【0025】
図4は、PLC2の電気的構成について説明するためのブロック図である。
図4に示すように、基本ユニット3には、CPU10、表示部5、操作部6、記憶装置12及び通信部14が備えられている。表示部5、操作部6、記憶装置12、及び通信部14は、それぞれCPU10に電気的に接続されている。記憶装置12は、RAMやROM、メモリカードなどを含んでもよく、ラダープログラムなどを記憶する。記憶装置12には、プログラム作成支援装置1から入力されたラダープログラムやユーザデータが上書きして記憶される。また、記憶装置12には基本ユニット用の制御プログラムも格納されている。
図4が示すように基本ユニット3と拡張ユニット4とは拡張バスの一種であるユニット外部バス90を介して接続されている。なお、ユニット外部バス90に関する通信機能は通信部14の一部として実装されてもよい。
【0026】
図5は、本発明の実施の形態に係るプログラマブルコントローラの基本ユニット3でのスキャンタイムの構成を示す模式図である。
図5が示すように1つのスキャンタイムTは、入出力のリフレッシュを行うためのユニット間通信201、プログラム実行202、END処理204により構成されている。ユニット間通信201で、基本ユニット3は、ラダープログラムを実行して得られた出力データを基本ユニット3内の記憶装置12から外部機器などに送信するとともに、受信データを含めた入力データを基本ユニット3内の記憶装置12に取り込む。たとえば、基本ユニット3のデバイスに記憶されているデバイス値はリフレッシュによって拡張ユニット4のデバイスに反映される。同様に、拡張ユニット4のデバイスに記憶されているデバイス値はリフレッシュによって基本ユニット3のデバイスに反映される。なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組みが採用されてもよい。ただし、基本ユニット3のデバイスは基本ユニット3が随時書き換えており、同様に、拡張ユニット4のデバイスは拡張ユニット4が随時書き換えている。つまり、基本ユニット3のデバイスは基本ユニット3の内部の装置によって随時アクセス可能であり、同様に、拡張ユニット4のデバイスは拡張ユニット4の内部の装置によって随時アクセス可能になっている。基本ユニット3と拡張ユニット4との間では基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行202で、基本ユニット3は、更新された入力データを用いてプログラムを実行(演算)する。基本ユニット3はプログラムの実行によりデータを演算処理する。なお、END処理とは、プログラム作成支援装置1や基本ユニット3に接続された表示器(図示せず)等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【0027】
このように、プログラム作成支援装置1はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをPLC2に転送する。PLC2は、入出力リフレッシュ、ラダープログラムの実行およびEND処理を1サイクル(1スキャン)として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器(センサ等)からのタイミング信号に基づいて、各種出力機器(モータ等)を制御する。よって、PLC2は汎用のパーソナルコンピュータ(PC)とは全く異なる動きをする。
【0028】
<モニタ装置の機能>
図6はモニタ装置として動作するプログラム作成支援装置1の機能を示す図である。CPU24は記憶装置25のROM(EEPROM,HDD,SSDなど)に記憶されている編集ソフトウエア36を実行することで編集部31として機能する。編集部31は、表示部7にラダープログラム35を編集するためのUI(ユーザインタフェース)を表示させ、操作部8を通じて入力された指示に従ってラダープログラム35を作成し、記憶装置25に格納する。CPU24は記憶装置25のROM(EEPROM,HDD,SSDなど)に記憶されているモニタソフトウエア37を実行することで、設定部32、リングバッファ管理部33および描画部34として機能する。なお、モニタソフトウエア37は編集ソフトウエア36に統合されてもよい。設定部32は、基本ユニット3や拡張ユニット4からデバイス値やバッファメモリを取得するために必要となる設定データ(トレース設定)を作成する。なお、トレースとは、基本ユニット3と拡張ユニット4からデバイス値(バッファメモリ)を取得して表示する処理であり、モニタリングと同様の意味である。なお、狭義のトレースは、デバイス値(バッファメモリ)の取得ないしは収集を意味する。
【0029】
図7は設定部32が表示部7に表示するユーザインタフェースの一例である。デバイス選択UI61は、基本ユニット3や拡張ユニット4から取得される取得対象を選択ないしは指定するためのユーザインタフェースである。この例では、取得対象となるデバイス名称の表示欄と、その名称の左側にチェックボックスが設けられている。ユーザは操作部8を通じてチェックボックスにチェックを付与することで、チェックを付与されたデバイスを取得対象として選択できる。設定部32は、デバイス選択UI61においていずれかのデバイスが指定されると、そのデバイスについてのトレース設定を作成すべく、トリガ位置設定UI62、サンプリング周期設定UI64およびトリガ条件設定UI65を表示部7に表示する。トリガ位置設定UI62は、デバイス値のサンプル数(サンプル時間)を設定するためのユーザインタフェースである。スライダーバー63はデフォルトで中央に設定されている。これは、トリガ条件が満たされたタイミングの前と後で同数のデバイス値をサンプルすることを示している。スライダーバー63が中央よりも左に移動されると、トリガ条件が満たされたタイミングの前のサンプル数が減少し、トリガ条件が満たされたタイミングの後のサンプル数が増加する。反対に、スライダーバー63が中央よりも右に移動されると、トリガ条件が満たされたタイミングよりも前のサンプル数が増加し、トリガ条件が満たされたタイミングよりも後のサンプル数が減少する。サンプリング周期設定UI64は、デバイス値やバッファメモリ値のサンプリング周期を設定するためのUIである。デバイス値についてのサンプリング周期は、たとえば、デバイスメモリに格納されているデバイス値をリングバッファに格納する周期である。バッファメモリ値についてのサンプリング周期は、たとえば、バッファメモリに格納されているバッファメモリ値をリングバッファに格納する周期である。トリガ条件設定UI65はトリガ条件を設定するためのユーザインタフェースである。トリガ条件とは、デバイス値やバッファメモリ値を基本ユニット3や拡張ユニット4から取得して表示部7に表示させるといったトレース処理を開始させる条件である。
図7によれば、R000という名称のビットデバイス(リレーデバイス)のデバイス値が“1”(ON)になり、かつ(AND)、DM001という名称のワードデバイスのデバイス値が“0”以下になったことをトリガ条件として設定されている。このように、トリガ条件設定UI65ではトレース開始の条件が設定可能となっているが、トレース停止の条件も設定可能とされてもよい。なお、本実施例では、トレース停止条件はトリガ位置設定UI62により設定された数のサンプル値(デバイス値やバッファメモリ)の取得が完了したことであるものと仮定する。設定部32がこれらのUIを通じて作成したトレース設定は通信部26を通じて基本ユニット3と拡張ユニット4とに転送される。
【0030】
図6に示したリングバッファ管理部33は、基本ユニット3のデバイスメモリに記憶されているデバイス値を取得したり、拡張ユニット4のデバイスメモリ(バッファメモリ)に記憶されているデバイス値(バッファメモリ)を取得したりする機能である。リングバッファ管理部33は、設定部32により設定された条件(トレース設定)にしたがってデバイス値やバッファメモリをリングバッファ38に格納する。リングバッファ38は記憶装置25のRAMに確保される。なお、基本ユニット3や拡張ユニット4におけるデバイス値の取得時刻やバッファメモリの取得時刻もこれらと関連付けてリングバッファ38に格納されてもよい。描画部34は、リングバッファ38に格納されたデバイス値やバッファメモリをそれぞれ取得時刻に基づき時間軸を整合させて表示部7に表示する機能である。
【0031】
図8は表示例を示す図である。この例では、基本ユニット3のデバイスメモリDM000とデバイスメモリDM001から取得されたデバイス値と、拡張ユニット4から取得されたバッファメモリEM000とバッファメモリEM001とから取得されたバッファメモリとが時間軸を揃えられて表示されている。
【0032】
図9は他の表示例を示す図である。この例では、基本ユニット3のデバイスメモリDM000とデバイスメモリDM001から取得されたデバイス値とが第一の表示領域に表示されている。拡張ユニット4から取得されたバッファメモリUG000とバッファメモリUG001とから取得されたバッファメモリとが第2の表示領域に表示されている。第一の表示領域と第二の表示領域は横に並べられているものの、時間軸は揃えられている。このように、各ユニットから取得されたデバイス値(バッファメモリ)は必ずしも一つの表示領域にまとめて表示されなくてもよい。
【0033】
<基本ユニットの機能>
図10は基本ユニット3の機能を示す図である。CPU10は記憶装置12のROM(EEPROM,HDD,SSDなど)に記憶されている制御プログラム45を実行することで、ラダー実行部40、デバイス管理部41、バッファ管理部42、CPUユニットタイマー43および同期部44として機能する。ラダー実行部40は、プログラム作成支援装置1により作成されて転送されてきたラダープログラム35を実行するエンジンである。ラダー実行部40はCPU10とは異なるASICなどにより実現されてもよい。デバイス管理部41は、それぞれデバイス値を格納する複数のデバイスからなるデバイスメモリ48を管理する機能である。デバイスメモリ48は第一デバイスメモリと呼ばれてもよい。デバイスとしては、上述したスキャン周期ごとにリフレッシュされるデバイスと、スキャン周期よりも短いユニット間同期周期ごとにリフレッシュ(ユニット間同期リフレッシュ)されるデバイスとがある。また、デバイスには、拡張ユニット4から受信したデバイス値が格納される入力デバイスと、基本ユニット3から拡張ユニット4に送信される出力デバイスとが存在する。たとえば、ラダー実行部40は、入力デバイスに格納された拡張ユニット4(モーションユニットなど)の現在座標や現在速度に対してラダープログラム35により定義された所定の演算を実行して目標座標と目標速度を決定し、出力デバイスにこれらを格納する。次のリフレッシュのタイミングでは、出力デバイスに格納された目標座標と目標速度が拡張ユニット4によって読み出され、被制御装置16(パラレルリンクなど)の制御に反映される。バッファ管理部42は、デバイスメモリ48に格納されているデバイス値をトレース設定47にしたがってリングバッファ49に格納する機能である。トレース設定47は上述したようにプログラム作成支援装置1によって作成されたものである。リングバッファ49は記憶装置12のRAMに確保される。また、バッファ管理部42は、プログラム作成支援装置1からトレースの開始指示を受信すると、トレース設定47にしたがってリングバッファ49に格納しておいたデバイス値とその格納時刻を示す時刻情報を、通信部14を介してプログラム作成支援装置に送信する。CPUユニットタイマー43は、基本ユニット3における各種の動作の制御タイミングを決定するために利用されるクロックやカウンタである。CPUユニットタイマー43は必ずしも時刻を計時する必要はなく、時刻に相当するカウント値をカウントしてもよい。このようなカウント値も時刻情報の一種である。
図8、
図9に示した横軸は時間軸であるが、時間軸に付与されている75000や76000は時刻情報としてのカウント値である。同期部44は、CPUユニットタイマー43の時刻情報と拡張ユニット4が備える拡張ユニットタイマー53の時刻情報とを同期させる機能である。同期部44は、通信部14を介したバス通信によって同期信号を拡張ユニット4に送信することで、CPUユニットタイマー43の時刻情報と拡張ユニット4が備える拡張ユニットタイマー53の時刻情報とを同期させる。
【0034】
<拡張ユニットの機能>
図11は拡張ユニット4の機能を示す図である。CPU110は記憶装置112のROM(EEPROM,HDD,SSDなど)に記憶されている制御プログラム55を実行することで、機能制御部50、デバイス管理部51、バッファ管理部52、拡張ユニットタイマー53および同期部54として機能する。機能制御部50は、バッファメモリを含むデバイスメモリ58に格納されたデバイス値(バッファメモリ)に基づき被制御装置16を制御する。なお、被制御装置16は単なるセンサなどの入力装置であってもよい。デバイスメモリ58は第二デバイスメモリと呼ばれてもよい。デバイス管理部51は、それぞれデバイス値(バッファメモリ)を格納する複数のデバイス(バッファメモリ)からなるデバイスメモリ58を管理する機能である。デバイスとしては、上述したスキャン周期ごとにリフレッシュされるデバイスと、スキャン周期よりも短いユニット間同期周期ごとにリフレッシュ(ユニット間同期リフレッシュ)されるデバイスとがある。さらに、他のデバイスとしては、基本ユニット3から命令語により読み書きされるバッファメモリがある。なお、拡張ユニット4に関するデバイスは総称としてバッファメモリとして呼ばれてもよい。もちろん、デバイスメモリ58は、デバイスメモリとしての領域とバッファメモリとしての領域とを有していてもよい。この場合、デバイスメモリに記憶されているデバイス値と、バッファメモリに記憶されているバッファメモリとがモニタリングの対象となり得る。また、デバイスには、拡張ユニット4から送信されるデバイス値が格納される入力デバイスと、基本ユニット3から拡張ユニット4に送信される出力デバイスとが存在する。たとえば、機能制御部50は、被制御装置16の現在座標や現在速度を入力デバイス(バッファメモリ)に格納してもよい。機能制御部50は、次のリフレッシュのタイミングで基本ユニット3により出力デバイスに格納された目標座標と目標速度を被制御装置16(パラレルリンクなど)に反映させる。バッファ管理部52は、デバイスメモリ58に格納されているデバイス値をトレース設定57にしたがってリングバッファ59に格納する機能である。トレース設定57は上述したようにプログラム作成支援装置1によって作成されたものである。リングバッファ59は記憶装置112のRAMに確保される。また、バッファ管理部52は、通信部114を介してプログラム作成支援装置1からトレースの開始指示を受信すると、トレース設定57にしたがってリングバッファ59に格納しておいたデバイス値(バッファメモリ)とその格納時刻を示す時刻情報を、通信部114を介してプログラム作成支援装置1に送信する。なお、拡張ユニット4の通信部114は、通信ハブとしても機能する基本ユニット3の通信部14を介してプログラム作成支援装置1の通信部26と通信する。拡張ユニットタイマー53は、拡張ユニット4における各種の動作の制御タイミングを決定するために利用されるクロックやカウンタである。拡張ユニットタイマー53は必ずしも時刻を計時する必要はなく、時刻に相当するカウント値をカウントしてもよい。このようなカウント値も時刻情報の一種である。同期部54は、拡張ユニットタイマー53の時刻情報をCPUユニットタイマー43の時刻情報に同期させる機能である。同期部54は、通信部114を介したバス通信によって同期信号を基本ユニット3から受信することで、CPUユニットタイマー43の時刻情報と拡張ユニットタイマー53の時刻情報とを同期させる。
【0035】
<プログラム作成支援装置が実行する処理>
図12はプログラム作成支援装置1のCPU24が実行する処理を示すフローチャートである。S11でCPU24(編集部31)は編集ソフトウエア36にしたがってラダープログラム35を編集し、通信部26を介して基本ユニット3に接続して転送する。S12でCPU24(設定部32)はモニタソフトウエア37にしたがってトレース設定を編集し、通信部26を介して基本ユニット3に接続して転送する。トレース設定は基本ユニット3と拡張ユニット4のそれぞれについて作成される。トレース設定には、デバイスの識別情報、トリガ位置、サンプリング周期、トリガ条件などが含まれる。
【0036】
S13でCPU24(描画部34)は操作部8を通じてトレースの開始を指示されると、基本ユニット3や拡張ユニット4のそれぞれに通信部26を介して接続し、トレース開始を指示する。S14でCPU24(リングバッファ管理部33)は基本ユニット3に通信部26を介して接続し、リングバッファ49に格納されているデバイス値とその時刻情報を取得する。また、CPU24(リングバッファ管理部33)は拡張ユニット4に通信部26を介して接続し、リングバッファ59に格納されているデバイス値(バッファメモリ)とその時刻情報を取得し、リングバッファ38に格納する。S15でCPU24(描画部34)はリングバッファ38から各デバイス値(バッファメモリ)とその時刻情報を読み出して、各デバイス値(バッファメモリ)の時刻情報にしたがって各デバイス値(バッファメモリ)時間軸を揃えてチャートにレンダリングし、表示部7に表示する。
【0037】
S16でCPU24(描画部34)は操作部8を通じてモニタリング(トレース)の停止が指示されたかどうかを判定する。なお、基本ユニット3や拡張ユニット4のうちいずれかのユニットで停止トリガが発生したことを、通信部26を介したメッセージ通信により認識したときも、CPU24(描画部34)は停止指示が入力されたものとして取り扱う。停止が指示されていなければ、CPU24(描画部34)はS14に戻り、S14とS15を繰り返す。停止が指示されると、CPU24(描画部34)は、S17に進む。S17でCPU24は通信部26を介した通信により基本ユニット3や拡張ユニット4にトレースの停止を指示する。
【0038】
<基本ユニットが実行する処理>
図13は基本ユニット3のCPU10が実行する処理を示すフローチャートである。S21でCPU10はプログラム作成支援装置1からラダープログラム35を受信し、記憶装置12に記憶する。S22でCPU10はプログラム作成支援装置1から基本ユニット3用のトレース設定47を受信し、記憶装置12に記憶する。S23でCPU10は操作部6を通じてプログラミングモードからランモードに設定されたかどうかを判定する。操作部6には、電源オフ、プログラミングモード、ランモードを切り替えるメインスイッチが設けられていてもよい。ランモードが設定されると、CPU10はS24に進む。S24でCPU10はラダープログラム35をラダー実行部40に実行させる。ラダー実行部40はスキャンタイム(スキャン周期)にしたがってラダープログラム35を繰り返し実行する。また、デバイス管理部41は、リフレッシュによって各デバイスのデバイス値を更新する。
【0039】
S25でCPU10(バッファ管理部42)はプログラム作成支援装置1からトレースの開始を指示されたかどうかを判定する。トレースの開始を指示されると、CPU10はS26に進む。
【0040】
S26でCPU10(バッファ管理部42)はトレース設定47にしたがってデバイスメモリ48からデバイス値を読み出してリングバッファ49に格納する。格納の際に、バッファ管理部42はCPUユニットタイマー43によってカウントされているカウント値(時刻情報)を取得して、デバイス値とともにリングバッファ49に格納してもよい。あるいは、デバイス管理部41が、各デバイスのデバイス値を更新したときのCPUユニットタイマー43によってカウントされているカウント値(時刻情報)を取得して、各デバイスの時刻情報としてデバイスメモリ48に記憶させてもよい。つまり、時刻情報を格納するデバイスがデバイスメモリ48に設けられてもよい。この場合、バッファ管理部42は、デバイスメモリ48からデバイス値と時刻情報とを読み出してリングバッファ49に格納する。リングバッファ49に格納したデバイス値と時刻情報はプログラム作成支援装置1によって読み出される。換言すれば、バッファ管理部42は、リングバッファ49に格納したデバイス値と時刻情報を、通信部14を介して接続したプログラム作成支援装置1に出力ないしは送信する。
【0041】
S27でCPU10(バッファ管理部42)はトレースを停止する条件が満たされたかどうかを判定する。たとえば、バッファ管理部42は、プログラム作成支援装置1からトレース停止の指示を受信したかどうかを判定する。あるいは、CPU10(バッファ管理部42)はトレース設定47により定義された停止トリガ(停止イベント)が発生したかどうかを判定してもよい。トレースを停止する条件が満たされていなければ、バッファ管理部42はS26に戻り、S26とS27を繰り返す。トレースを停止する条件が満たされると、バッファ管理部42はトレースを終了する。
【0042】
<拡張ユニットが実行する処理>
図14は拡張ユニット4のCPU110が実行する処理を示すフローチャートである。なお、デバイス管理部51は、ラダープログラム35が開始されたことを通信によって通知されると、リフレッシュのタイミングごとに各デバイス値(バッファメモリ)を更新する。
【0043】
S31でCPU110はプログラム作成支援装置1から拡張ユニット4用のトレース設定57を受信し、記憶装置112に記憶する。S32でCPU110(バッファ管理部52)はプログラム作成支援装置1からトレースの開始を指示されたかどうかを判定する。トレースの開始を指示されると、CPU110はS33に進む。
【0044】
S33でCPU110(バッファ管理部52)はトレース設定57にしたがってデバイスメモリ58からデバイス値を読み出してリングバッファ59に格納する。格納の際に、バッファ管理部52は拡張ユニットタイマー53によってカウントされているカウント値(時刻情報)を取得して、デバイス値とともにリングバッファ59に格納してもよい。あるいは、デバイス管理部51が、各デバイスのデバイス値(バッファメモリ)を更新したときに拡張ユニットタイマー53によってカウントされていたカウント値(時刻情報)を取得して、各デバイス(バッファメモリ)の時刻情報としてデバイスメモリ58に記憶させてもよい。つまり、時刻情報を格納するデバイス(バッファメモリ)がデバイスメモリ58に設けられてもよい。この場合、バッファ管理部52は、デバイスメモリ58からデバイス値(バッファメモリ値)と時刻情報とを読み出してリングバッファ59に格納する。リングバッファ59に格納したデバイス値と時刻情報はプログラム作成支援装置1によって読み出される。換言すれば、バッファ管理部52は、リングバッファ59に格納したデバイス値と時刻情報を、通信部114および基本ユニット3の通信部14を介して接続したプログラム作成支援装置1に出力ないしは送信する。
【0045】
S34でCPU110(バッファ管理部52)はトレースを停止する条件が満たされたかどうかを判定する。たとえば、バッファ管理部52は、プログラム作成支援装置1からトレース停止の指示を受信したかどうかを判定する。あるいは、CPU110(バッファ管理部52)はトレース設定57により定義された停止トリガ(停止イベント)が発生したかどうかを判定してもよい。トレースを停止する条件が満たされていなければ、バッファ管理部52はS33に戻り、S33とS34を繰り返す。トレースを停止する条件が満たされると、バッファ管理部52はトレースを終了する。
【0046】
<ユニット間同期>
スキャンタイムは一般に数ミリ秒であるが、位置決めユニットなどの拡張ユニット4ではより短い周期で被制御装置16の位置を制御したいという要請がある。しかし、1つのスキャンタイムで入出力デバイスのリフレッシュ(一括リフレッシュ)は1回だけである。そこで、本実施例では上述した同期リフレッシュも採用している。
【0047】
図15は一括リフレッシュと同期リフレッシュとの関係を示す図である。
図15が示すように、一括リフレッシュにより基本ユニット3と拡張ユニット4との間で入出力デバイスのデバイス値が更新される。たとえば、カウンタユニットである拡張ユニット4の現在座標は1つのスキャンタイムで一回だけ更新され、位置決めユニットである他の拡張ユニット4への目標座標も1つのスキャンタイムで一回だけ更新される。しかし、これではより高速な追従制御を実現することができない。そこで、基本ユニット3の内部制御周期と拡張ユニット4の内部制御周期とを同期させ、この制御周期ごとにデバイスやバッファなどをリフレッシュする同期リフレッシュについても本実施例では採用している。なお、ラダープログラムのうち、この制御周期に同期して実行されるプログラムはユニット間同期プログラムと呼ばれる。
図15において同期リフレッシュは、ラダープログラムの実行期間だけでなく、一括リフレッシュの実行期間やエンド処理の実行期間においても実行される。
【0048】
図16は同期リフレッシュの一例を示す図である。基本ユニット3のデバイス管理部41は、制御周期ごとに同期リフレッシュを実行する。
図16によれば、制御周期内でまず同期リフレッシュの対象として予め指定されているデバイスである現在座標Xnがリフレッシュされる。次に、デバイス管理部41は、現在座標Xnから算出した目標座用Yn+1のデバイスに格納し、これを位置決めユニットである拡張ユニット4のデバイスにコピーする。位置決めユニットである拡張ユニット4は、デバイスが保持しているデバイス値を今回の指令値(目標座標)として内部処理(パラレルリンクやボールねじなどの追従制御)を実行する。以下、同様に制御周期ごとに同期リフレッシュが実行される。
【0049】
このように同期リフレッシュを採用すると、位置決めユニットが内部処理を開始する時点では必ず最新の指令値を基本ユニット3から取得できるようになる。これにより、高速かつきめ細やかな追従制御が実現可能となる。
【0050】
また、各デバイス値は時刻情報(10、11などのカウント値)とともにリングバッファに格納されて保持されている。よって、同一の時刻情報に関連付けられている複数のデバイス値(現在座標や目標座標)の時間軸を揃えて表示させることが可能となる。
【0051】
<まとめ>
図1などを用いて説明したように、CPUユニットとして機能する基本ユニット3と、基本ユニット3と通信する拡張ユニット4とを有するプログラマブル・ロジック・コントローラ(PLC2)が提供される。また、プログラム作成支援装置1はPLC2の動作状態をモニタするモニタ装置として機能する。
図10を用いて説明したように、基本ユニット3はPLC2の動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリ48と、デバイス値がデバイスに格納される時刻を管理するためのCPUユニットタイマー43とを有している。
図11を用いて説明したように拡張ユニット4はPLC2の動作状態を示すバッファメモリを格納するバッファメモリとして機能するデバイスメモリ58を有している。さらに、拡張ユニット4はCPUユニットタイマー43と時刻同期されており、バッファメモリがバッファメモリに格納される時刻を管理するための拡張ユニットタイマー53を有している。
図6を用いて説明したように、プログラム作成支援装置1は基本ユニット3のデバイスメモリ48に記憶されているデバイス値を取得するとともに、拡張ユニット4のバッファメモリ(デバイスメモリ58)に記憶されているバッファメモリ(デバイス値)を取得する取得手段として機能するリングバッファ管理部33を有している。描画部34や表示部7は、デバイス値の格納時刻とバッファメモリの格納時刻とに基づきデバイス値とバッファメモリとの時間軸を整合させて表示する表示手段として機能する。このように、CPUユニットタイマー43と拡張ユニットタイマー53が時刻同期しているため、デバイス値やバッファメモリ値の取得ないしは格納のタイミングも正確となろう。つまり、デバイス値やバッファメモリの時間軸が正確に揃うことになる。よって、基本ユニット3から取得したデータの時間軸と拡張ユニット4から取得したデータの時間軸とを正確に揃えて表示することが可能となる。
【0052】
基本ユニット3のリングバッファ49は、予め設定された周期でデバイスメモリ48のデバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファの一例である。プログラム作成支援装置1のリングバッファ管理部33は、基本ユニット3のリングバッファ49からデバイスメモリ48のデバイス値と当該デバイス値の時刻情報とを取得する。一般に、リングバッファは、時系列のデータを格納して読み出すのに向いたバッファである。したがって、デバイス値を時間軸に揃えて管理することに向いている。リングバッファ以外の記憶構造がリングバッファに代えて採用されてもよい。
【0053】
拡張ユニット4のリングバッファ59は、予め設定された周期でバッファメモリのバッファメモリと当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファの一例である。プログラム作成支援装置1のリングバッファ管理部33は、拡張ユニット4のリングバッファ59からバッファメモリのバッファメモリと当該バッファメモリの時刻情報とを取得してもよい。このようにリングバッファを採用することでデバイス値やバッファメモリを時間軸に揃えて管理しやすくなろう。
【0054】
基本ユニット3の同期部44はCPUユニットタイマー43の時刻と拡張ユニットタイマー53の時刻とを同期させる同期信号を拡張ユニット4に送信してもよい。拡張ユニット4の同期部54は同期信号に応じて拡張ユニットタイマー53の時刻をCPUユニットタイマー43の時刻に同期させる。このように同期信号によって拡張ユニットタイマー53の時刻をCPUユニットタイマー43の時刻に同期させてもよい。これにより、ある時刻に取得された基本ユニット3のデバイス値と、その時刻に拡張ユニット4から取得されたデバイス値(バッファメモリ)とを時間軸でより正確に揃えやすくなろう。
【0055】
基本ユニット3のデバイスメモリ48に格納される複数のデバイス値のうち少なくとも一部のデバイス値は、基本ユニット3がユーザプログラムを繰り返し実行するスキャンタイムにしたがって拡張ユニット4と通信することで更新される。また、複数のデバイス値のうち少なくとも一部のデバイス値は、スキャンタイムよりも短い一定の制御周期で拡張ユニット4と通信することで更新されてもよい。つまり、後者のデバイス値はユニット間同期リフレッシュによって更新されてもよい。これにより、スキャンタイムよりも短い周期でデバイス値がどのように変化しているかをモニタリングすることが可能となる。
【0056】
図15や
図16を用いて説明したように、基本ユニット3の内部における制御周期と拡張ユニット4の内部における制御周期とがCPUユニットタイマー43と拡張ユニットタイマー53とを通じて同期していてもよい。このようなユニット間同期を採用することで、基本ユニット3内の制御周期と拡張ユニット4内の制御周期とが整合するようになる。その結果、モーションユニットなど、スキャンタイムよりも短い周期で制御される拡張ユニット4のデバイス値(バッファメモリ)についても基本ユニット3のデバイス値に対して精度よく時間軸を整合させてモニタリングすることが可能となろう。
【0057】
プログラム作成支援装置1のリングバッファ管理部33は、制御周期の整数倍の取得周期でデバイス値とバッファメモリを取得してもよい。表示部7は、この取得周期で取得されたデバイス値とバッファメモリを表示する。ユニット間同期に関連した制御周期は、スキャンタイムによりかなり短い周期に設定されることもある。この場合、短時間で非常に多くのデバイス値とバッファメモリが取得されてしまう。しかし、短時間ではそれほどデバイス値とバッファメモリが変化しないアプリケーションでは同じ値のデバイス値とバッファメモリが連続してしまい、通信の負荷が大きくなるわりには無駄なデータが増えてしまう。したがって、制御周期の整数倍の取得周期でデバイス値とバッファメモリを取得することで、PLC2とプログラム作成支援装置1との間の通信の負荷を軽減できるようになろう。
【0058】
上述した説明では、プログラム作成支援装置1が主体的にデバイス値等を基本ユニット3や拡張ユニット4から取得するものとして説明したが、基本ユニット3や拡張ユニット4の側から取得処理を理解してもよい。たとえば、基本ユニット3は各デバイス値と当該各デバイス値の格納時刻を示す時刻情報とをプログラム作成支援装置1に送信する。また、拡張ユニット4は各バッファメモリと当該各バッファメモリの格納時刻を示す時刻情報とをプログラム作成支援装置1に送信する。描画部34は各デバイス値の格納時刻を示す時刻情報と、各バッファメモリの格納時刻を示す時刻情報とに基づきデバイス値とバッファメモリとの時間軸を整合させて表示部7に表示する。
【0059】
上述した説明では、プログラム作成支援装置1が基本ユニット3と拡張ユニット4とから並列にデータを収集するものとして説明したが、収集機能は基本ユニット3に設けられてもよい。より具体的には、基本ユニット3のバッファ管理部42は各バッファメモリと当該各バッファメモリ値の格納時刻を示す時刻情報とを拡張ユニット4から受信し、各デバイス値の格納時刻を示す時刻情報と、各バッファメモリ値の格納時刻を示す時刻情報とに基づき、各デバイス値と各バッファメモリとの時間軸を整合させてプログラム作成支援装置1に送信してもよい。この場合、時刻情報はプログラム作成支援装置1に送信されなくてもよい。基本ユニット3のから収集したデバイス値と拡張ユニット4から収集したデバイス値(バッファメモリ)とは、それぞれの時刻情報に基づき時間軸を整合されてリングバッファ49に格納されるからである。つまり、リングバッファ49に格納される段階で、基本ユニット3のから収集したデバイス値と拡張ユニット4から収集したデバイス値(バッファメモリ)とは時間軸上で整合されていてもよい。
【0060】
プログラム作成支援装置1は、基本ユニット3を介して拡張ユニット4のデバイスメモリ58からデバイス値(バッファメモリ)を取得してもよい。プログラム作成支援装置1から基本ユニット3と拡張ユニット4にそれぞれ通信ケーブルを接続することも考えられるが、複数の通信ケーブルは邪魔になりやすい。そこで、プログラム作成支援装置1から基本ユニット3に一本の通信ケーブルを接続し、基本ユニット3と拡張ユニット4をバスで接続する。つまり、プログラム作成支援装置1と拡張ユニット4は、通信ケーブル、基本ユニット3およびバスを介して接続されてもよい。これにより、通信ケーブルの本数を削減可能となろう。
【0061】
プログラム作成支援装置1のリングバッファ38は、リングバッファ管理部33により取得されたデバイス値とバッファメモリとを記憶する第三リングバッファとして機能する。描画部34は、リングバッファ38からデバイス値とバッファメモリ値とを読み出してデバイス値とバッファメモリとの時間軸を整合させて表示してもよい。このように、プログラム作成支援装置1にもリングバッファ38を設けてデバイス値とバッファメモリを保持することで、これらの時間軸を容易に揃えやすくなろう。