(57)【特許請求の範囲】
【請求項１】
ＣＰＵユニットと、前記ＣＰＵユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置であって、
前記プログラマブル・ロジック・コントローラは、
前記ＣＰＵユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記ＣＰＵユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記ＣＰＵユニットおよび前記拡張ユニットは同期されたそれぞれの内部における前記ユニット間同期周期にしたがって各々のプログラムを実行し、
前記ＣＰＵユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記デバイスメモリに格納される時刻を管理するためのＣＰＵユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファとを有し、
前記拡張ユニットは、
前記デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記ＣＰＵユニットへ入力された前記デバイス値を保持する入力デバイスと、前記ＣＰＵユニットの出力デバイスに関連付けられており、前記ＣＰＵユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すバッファメモリ値を格納するバッファメモリと、
前記ユニット間同期周期を管理し、前記ＣＰＵユニットタイマーと時刻同期されており、前記バッファメモリ値が前記バッファメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記ＣＰＵユニットは、前記ＣＰＵユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記ＣＰＵユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記ＣＰＵユニットの前記第一リングバッファから前記デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の時刻情報とを取得する取得手段と、
前記デバイス値の時刻情報と前記バッファメモリ値の時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示する表示手段と
を有することを特徴とするモニタ装置。
【請求項２】
前記ＣＰＵユニットのデバイスメモリに格納される複数のデバイス値のうち少なくとも一部のデバイス値は、前記ＣＰＵユニットがユーザプログラムを繰り返し実行するスキャンタイムにしたがって前記拡張ユニットと通信することで更新され、前記複数のデバイス値のうち少なくとも一部のデバイス値は、前記スキャンタイムよりも短い一定の制御周期で前記拡張ユニットと通信することで更新されることを特徴とする請求項１に記載のモニタ装置。
【請求項３】
前記ＣＰＵユニットの内部における制御周期と前記拡張ユニットの内部における制御周期とが前記ＣＰＵユニットタイマーと前記拡張ユニットタイマーとを通じて同期している
ことを特徴とする請求項１または２に記載のモニタ装置。
【請求項４】
前記取得手段は、前記制御周期の整数倍の取得周期で前記デバイス値と前記バッファメモリ値を取得し、
前記表示手段は、前記取得周期で取得された前記デバイス値と前記バッファメモリ値を表示することを特徴とする請求項３に記載のモニタ装置。
【請求項５】
前記ＣＰＵユニットは各デバイス値と当該各デバイス値の格納時刻を示す時刻情報とを前記取得手段に送信し、
前記拡張ユニットは各バッファメモリ値と当該各バッファメモリ値の格納時刻を示す時刻情報とを前記取得手段に送信し、
前記表示手段は、前記各デバイス値の格納時刻を示す時刻情報と、前記各バッファメモリ値の格納時刻を示す時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示することを特徴とする請求項１に記載のモニタ装置。
【請求項６】
前記ＣＰＵユニットは各バッファメモリ値と当該各バッファメモリ値の格納時刻を示す時刻情報とを前記拡張ユニットから受信し、各デバイス値の格納時刻を示す時刻情報と、前記各バッファメモリ値の格納時刻を示す時刻情報とに基づき、前記各デバイス値と前記各バッファメモリ値との時間軸を整合させて前記取得手段に送信し、
前記表示手段は、前記各デバイス値の格納時刻を示す時刻情報と、前記各バッファメモリ値の格納時刻を示す時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示することを特徴とする請求項１に記載のモニタ装置。
【請求項７】
前記取得手段は、前記ＣＰＵユニットを介して前記拡張ユニットの前記バッファメモリから前記バッファメモリ値を取得することを特徴とする請求項１ないし６のいずれか一項に記載のモニタ装置。
【請求項８】
前記取得手段により取得された前記デバイス値と前記バッファメモリ値とを記憶する第三リングバッファをさらに有し、
前記表示手段は、前記第三リングバッファから前記デバイス値と前記バッファメモリ値とを読み出して前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示することを特徴とする請求項１ないし７のいずれか一項に記載のモニタ装置。
【請求項９】
ＣＰＵユニットと、前記ＣＰＵユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと前記プログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置とを有するプログラマブル・ロジック・コントローラ・システムであって、
前記プログラマブル・ロジック・コントローラは、
前記ＣＰＵユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記ＣＰＵユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記ＣＰＵユニットおよび前記拡張ユニットは同期されたそれぞれの内部におけるユニット間同期周期にしたがって各々のプログラムを実行し、
前記ＣＰＵユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記デバイスメモリに格納される時刻を管理するためのＣＰＵユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファと
を有し、
前記拡張ユニットは、
前記デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記ＣＰＵユニットへ入力された前記デバイス値を保持する入力デバイスと、前記ＣＰＵユニットの出力デバイスに関連付けられており、前記ＣＰＵユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すバッファメモリ値を格納するバッファメモリと、
前記ユニット間同期周期を管理し、前記ＣＰＵユニットタイマーと時刻同期されており、前記バッファメモリ値が前記バッファメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記ＣＰＵユニットは前記ＣＰＵユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記ＣＰＵユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記ＣＰＵユニットの前記第一リングバッファから前記デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の時刻情報とを取得する取得手段と、
前記デバイス値の時刻情報と前記バッファメモリ値の時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示する表示手段と
を有することを特徴とするプログラマブル・ロジック・コントローラ・システム。
【請求項１０】
ＣＰＵユニットと、前記ＣＰＵユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置であって、
前記プログラマブル・ロジック・コントローラは、
前記ＣＰＵユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記ＣＰＵユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記ＣＰＵユニットおよび前記拡張ユニットは同期されたそれぞれの内部における前記ユニット間同期周期にしたがって各々のプログラムを実行し、
前記ＣＰＵユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなる第一デバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記第一デバイスメモリに格納される時刻を管理するためのＣＰＵユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記第一デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファと
を有し、
前記拡張ユニットは、
前記第一デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記ＣＰＵユニットへ入力された前記デバイス値を保持する入力デバイスと、前記ＣＰＵユニットの出力デバイスに関連付けられており、前記ＣＰＵユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値を格納する第二デバイスメモリと、
前記ユニット間同期周期を管理し、前記ＣＰＵユニットタイマーと時刻同期されており、前記デバイス値が前記第二デバイスメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記第二デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記ＣＰＵユニットは前記ＣＰＵユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記ＣＰＵユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記ＣＰＵユニットの前記第一リングバッファから前記第一デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記第二デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得する取得手段と、
前記第一デバイスメモリのデバイス値の時刻情報と前記第二デバイスメモリのデバイス値の時刻情報とに基づき前記第一デバイスメモリのデバイス値と前記第二デバイスメモリのデバイス値との時間軸を整合させて表示する表示手段と
を有することを特徴とするモニタ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル・ロジック・コントローラのモニタ装置に関する。
【背景技術】
【０００２】
プログラマブル・ロジック・コントローラ（以下、ＰＬＣと称す）は、ＦＡ（Factory Automation）制御システムにおいて広く使用されているシーケンス制御装置であり、ラダープログラムと呼ばれる専用プログラムにしたがって動作する。操作者（オペレータ）は、リミットスイッチ、センサ、温度計などの入力機器や、電磁開閉器、ソレノイド、モータ、アクチュエータ、シリンダ、リレー、位置決めシステムなどの出力機器をＰＬＣに接続し、ラダープログラムによってこれらの被制御機器を制御する。
【０００３】
オペレータは、パーソナルコンピュータ（以下、ＰＣと称す）などのプログラム作成支援装置上でラダープログラムを作成し、ＰＣとＰＬＣを接続し、ラダープログラムをＰＬＣの記憶部に記憶させる。ＰＬＣの記憶部にはデバイス情報等の各種データも記憶される。デバイス情報とは、入力機器からの入力状態、出力機器への出力状態およびラダープログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。デバイスとは、デバイス情報を格納するために設けられたメモリ上の領域を指す名称である。ＰＬＣにプログラム作成支援装置を接続することで、ＰＬＣが保持しているデバイス情報（デバイスの値）をプログラム作成支援装置に表示させ、視認することもできる。
【０００４】
ＰＬＣは一般に基本ユニット（ＣＰＵユニット）と拡張ユニットにより構成される。ＣＰＵユニットと拡張ユニットは予め割り付けられたデバイスを通じてスキャン周期ごとに実行されるリフレッシュによってデバイス値を相互に交換する。このようなデバイスはデータメモリと呼ばれることもある。データメモリとは別に拡張ユニットにはバッファメモリが設けられる。ＣＰＵユニットはラダープログラム中に記述された専用の命令語にしたがって、バス通信によってバッファメモリにアクセスし、バッファメモリを読み書きする。
【０００５】
プログラム作成支援装置で作成したラダープログラムをデバッグしたり、チューニングしたりするためには、実際にラダープログラムをＣＰＵユニットで実行し、実行中におけるＣＰＵユニットや拡張ユニットのデバイス値やバッファメモリが想定した値となっているかどうかを判断する必要がある。特許文献１によれば、ＣＰＵユニットや拡張ユニットからデバイス値やバッファメモリを読み出してバッファメモリ値を表示するＰＬＣ動作表示システムが表示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１０２４７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１は、ＣＰＵユニットや拡張ユニットから取得されたデバイス値やバッファメモリ値が表示されるため、デバッグやチューニングに有用であった。しかし、ＣＰＵユニットのクロック（タイマー）と拡張ユニットのクロックとが同期していない場合、ＣＰＵユニットから取得したデータと拡張ユニットから取得したデータに時間的な齟齬が生じ、問題の原因を見つけることを困難にしていた。そこで、本発明は、ＣＰＵユニットから取得したデータの時間軸と拡張ユニットから取得したデータの時間軸とを正確に揃えて表示することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、たとえば、
ＣＰＵユニットと、前記ＣＰＵユニットと通信する拡張ユニットとを有するプログラマブル・ロジック・コントローラと接続され、当該プログラマブル・ロジック・コントローラの動作状態をモニタするモニタ装置であって、
前記プログラマブル・ロジック・コントローラは、
前記ＣＰＵユニットの時刻情報と拡張ユニットの時刻情報とが同期され、前記ＣＰＵユニットと前記拡張ユニットのそれぞれのデバイス値はスキャン周期とは異なるユニット間同期周期ごとにユニット間同期リフレッシュとして更新され、
前記ＣＰＵユニットおよび前記拡張ユニットは同期されたそれぞれの内部における前記ユニット間同期周期にしたがって各々のプログラムを実行し、
前記ＣＰＵユニットは、
前記プログラマブル・ロジック・コントローラの動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリと、
前記ユニット間同期周期を管理し、前記デバイス値が前記デバイスメモリに格納される時刻を管理するためのＣＰＵユニットタイマーと、
前記ユニット間同期周期にしたがって、前記デバイス値を参照してユーザプログラムを実行するユーザプログラム実行部と、
前記ユニット間同期リフレッシュにしたがって、前記デバイスメモリの前記デバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファとを有し、
前記拡張ユニットは、
前記デバイスメモリの入力デバイスに関連付けられており、前記拡張ユニットから前記ＣＰＵユニットへ入力された前記デバイス値を保持する入力デバイスと、前記ＣＰＵユニットの出力デバイスに関連付けられており、前記ＣＰＵユニットから前記拡張ユニットへ出力される前記デバイス値を保持する出力デバイスとを有し、前記プログラマブル・ロジック・コントローラの動作状態を示すバッファメモリ値を格納するバッファメモリと、
前記ユニット間同期周期を管理し、前記ＣＰＵユニットタイマーと時刻同期されており、前記バッファメモリ値が前記バッファメモリに格納される時刻を管理するための拡張ユニットタイマーと、
前記ユニット間同期リフレッシュにしたがって、前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファと
を有し、
前記ＣＰＵユニットは、前記ＣＰＵユニットタイマーの時刻と前記拡張ユニットタイマーの時刻とを同期させる同期信号を前記拡張ユニットに送信し、前記拡張ユニットは前記同期信号に応じて前記拡張ユニットタイマーの時刻を前記ＣＰＵユニットタイマーの時刻に同期させ、
前記モニタ装置は、
前記ＣＰＵユニットの前記第一リングバッファから前記デバイスメモリの前記デバイス値と当該デバイス値の時刻情報とを取得し、かつ、前記拡張ユニットの前記第二リングバッファから前記バッファメモリの前記バッファメモリ値と当該バッファメモリ値の時刻情報とを取得する取得手段と、
前記デバイス値の時刻情報と前記バッファメモリ値の時刻情報とに基づき前記デバイス値と前記バッファメモリ値との時間軸を整合させて表示する表示手段と
を有することを特徴とするモニタ装置を提供する。
【発明の効果】
【０００９】
本発明によればＣＰＵユニットから取得したデータの時間軸と拡張ユニットから取得したデータの時間軸とを正確に揃えて表示できるようになる。
【図面の簡単な説明】
【００１０】
【図１】ＰＬＣシステムの一例を示す図
【図２】ユーザプログラムの一例を示す図
【図３】プログラム作成支援装置の一例を示す図
【図４】ＰＬＣの一例を示す図
【図５】スキャンタイムを説明するための図
【図６】プログラム作成支援装置の機能を示す図
【図７】ユーザインタフェースの一例を示す図
【図８】ユーザインタフェースの一例を示す図
【図９】ユーザインタフェースの一例を示す図
【図１０】基本ユニットの機能を示す図
【図１１】拡張ユニットの機能を示す図
【図１２】プログラム作成支援装置が実行する処理を示すフローチャート
【図１３】基本ユニットが実行する処理を示すフローチャート
【図１４】拡張ユニットが実行する処理を示すフローチャート
【図１５】一括リフレッシュと同期リフレッシュとの関係を示す図
【図１６】同期リフレッシュの一例を示す図
【発明を実施するための形態】
【００１１】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１２】
はじめにプログラマブル・ロジック・コントローラ（ＰＬＣ、単にプログラマブルコントローラと呼ばれてもよい）を当業者にとってよりよく理解できるようにするために、一般的なＰＬＣの構成とその動作について説明する。
【００１３】
図１は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図１に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置１と、工場等に設置される各種制御装置を統括的に制御するためのＰＬＣ（プログラマブル・ロジック・コントローラ）２とを備えている。ユーザプログラムは、ラダー言語やモーションフローなどのグラフィカルプログラミング言語を用いて作成されてもよいし、Ｃ言語などの高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザプログラムはラダープログラムとする。ＰＬＣ２は、ＣＰＵが内蔵された基本ユニット３と１つないし複数の拡張ユニット４を備えている。基本ユニット３に対して１つないし複数の拡張ユニット４が着脱可能となっている。基本ユニット３はＣＰＵユニットと呼ばれることもある。
【００１４】
基本ユニット３には、表示部５及び操作部６が備えられている。表示部５には、基本ユニット３に取り付けられている各拡張ユニット４の動作状況などを表示することができ、表示部５の表示内容は、操作部６を操作することにより切り替えることができる。表示部５には、通常、ＰＬＣ２内のデバイスの現在値（デバイス値）やＰＬＣ２内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。
【００１５】
拡張ユニット４は、ＰＬＣ２の機能を拡張するために用意されており、基本ユニット３に対して側方から取り付けられる。１つ目の拡張ユニット４は、基本ユニット３に対して側方から直接的に取り付けられる。２つ目以降の拡張ユニット４は、既に取り付けられている拡張ユニット４に対して、側方から直列的に取り付けられる。たとえば、基本ユニット３の右側面と拡張ユニット４の左側面とが連結面になっている。同様に、１つ目の拡張ユニット４の右側面の形状等は基本ユニット３の右側面とほぼ同じであるため、１つ目の拡張ユニット４の右側面に２つ目の拡張ユニット４の左側面が連結される。このような連結方式は、数珠つなぎ方式とかデイジーチェーン方式と呼ばれてもよい。各連結面にはコネクタが設けられており、通信や電力供給を行うためのバスもコネクタを介して連結される。このようにして、基本ユニット３と複数の拡張ユニット４が直列的に取り付けられると、各拡張ユニット４内に備えられた配線（例：バス）を介して、各拡張ユニット４が基本ユニット３に対して通信可能に接続される。各拡張ユニット４には、その拡張ユニット４の機能に対応する被制御装置１６（図４）が接続され、これにより、各被制御装置１６が拡張ユニット４を介して基本ユニット３に接続される。被制御装置１６には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
【００１６】
プログラム作成支援装置１は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部７及び操作部８を備えている。ＰＬＣ２を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置１を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置１内でニモニックコードに変換される。そして、プログラム作成支援装置１を、ＵＳＢ(Universal Serial Bus)などの通信ケーブル９を介してＰＬＣ２の基本ユニット３に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置１から基本ユニット３に送ると、そのラダープログラムが基本ユニット３内でマシンコードに変換され、基本ユニット３に備えられたメモリ内に記憶される。なお、ここではニモニックコードを基本ユニット３に送信するようにしているが、本発明はこれに限られず、例えばニモニックコードを更に中間コードに変換し、中間コードを基本ユニット３に送信するようにしてもよい。
【００１７】
なお、図１では示していないが、プログラム作成支援装置１の操作部８には、プログラム作成支援装置１に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置１は、ＵＳＢ以外の他の通信ケーブル９を介して、ＰＬＣ２の基本ユニット３に対して着脱可能に接続されるような構成であってもよい。
【００１８】
図２は、ラダープログラムの作成時にプログラム作成支援装置１の表示部７に表示されるラダー図Ｌｄの一例を示す図である。図２に示すように、ＰＬＣ２を制御するためのラダープログラムは、プログラム作成支援装置１の表示部７にマトリックス状に表示される複数のセル１８内に仮想デバイスのシンボル１９を適宜配置して、視覚的なリレー回路を表すラダー図Ｌｄを構築することにより作成される。
【００１９】
ラダー図Ｌｄには、たとえば、１０列×Ｎ行（Ｎは任意の自然数）のセル１８が配置されている。そして、各行のセル１８内に、図２に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル１９を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、１行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
【００２０】
図２に示すリレー回路は、入力装置からの入力信号に基づいてオン／オフされる３つの仮想デバイス（以下、「入力デバイス」と呼ぶ。）のシンボル１９ａ，１９ｂ，１９ｃと、出力装置の動作を制御するためにオン／オフされる仮想デバイス（以下、「出力デバイス」と呼ぶ。）のシンボル１９ｄとが適宜結合されることにより構成されている。
【００２１】
各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの上方に表示されている文字（「Ｒ０００１」、「Ｒ０００２」及び「Ｒ０００３」）は、その入力デバイスのデバイス名（アドレス名）２１を表している。各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの下方に表示されている文字（「フラグ１」、「フラグ２」及び「フラグ３」）は、その入力デバイスに対応付けられたデバイスコメント２２を表している。出力デバイスのシンボル１９ｄの上方に表示されている文字（「原点復帰」）は、その出力デバイスの機能を表す文字列からなるラベル２３である。
【００２２】
図２に示す例では、デバイス名「Ｒ０００１」及び「Ｒ０００２」にそれぞれ対応する２つの入力デバイスのシンボル１９ａ，１９ｂが直列的に結合されることにより、ＡＮＤ回路が構成されている。また、これらの２つの入力デバイスのシンボル１９ａ，１９ｂからなるＡＮＤ回路に対して、デバイス名「Ｒ０００３」に対応する入力デバイスのシンボル１９ｃが並列的に結合されることにより、ＯＲ回路が構成されている。すなわち、このリレー回路では、２つのシンボル１９ａ，１９ｂに対応する入力デバイスがいずれもオンした場合、又は、シンボル１９ｃに対応する入力デバイスがオンした場合にのみ、シンボル１９ｄに対応する出力デバイスがオンされるようになっている。
【００２３】
図３は、図１のプログラム作成支援装置１の電気的構成について説明するためのブロック図である。図３に示すように、プログラム作成支援装置１には、ＣＰＵ２４、表示部７、操作部８、記憶装置２５及び通信部２６が備えられている。表示部７、操作部８、記憶装置２５及び通信部２６は、それぞれＣＰＵ２４に対して電気的に接続されている。記憶装置２５は、少なくともＲＡＭを含む構成であり、プログラム記憶部２７と、編集ソフト記憶部２８とを備えている。
【００２４】
ユーザは、編集ソフト記憶部２８に記憶されている編集ソフトをＣＰＵ２４に実行させて、操作部８を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、プログラム記憶部２７に記憶される。また、ユーザは、必要に応じてプログラム記憶部２７に記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部２６は、通信ケーブル９を介してプログラム作成支援装置１を基本ユニット３に通信可能に接続するためのものである。
【００２５】
図４は、ＰＬＣ２の電気的構成について説明するためのブロック図である。図４に示すように、基本ユニット３には、ＣＰＵ１０、表示部５、操作部６、記憶装置１２及び通信部１４が備えられている。表示部５、操作部６、記憶装置１２、及び通信部１４は、それぞれＣＰＵ１０に電気的に接続されている。記憶装置１２は、ＲＡＭやＲＯＭ、メモリカードなどを含んでもよく、ラダープログラムなどを記憶する。記憶装置１２には、プログラム作成支援装置１から入力されたラダープログラムやユーザデータが上書きして記憶される。また、記憶装置１２には基本ユニット用の制御プログラムも格納されている。図４が示すように基本ユニット３と拡張ユニット４とは拡張バスの一種であるユニット外部バス９０を介して接続されている。なお、ユニット外部バス９０に関する通信機能は通信部１４の一部として実装されてもよい。
【００２６】
図５は、本発明の実施の形態に係るプログラマブルコントローラの基本ユニット３でのスキャンタイムの構成を示す模式図である。図５が示すように１つのスキャンタイムＴは、入出力のリフレッシュを行うためのユニット間通信２０１、プログラム実行２０２、ＥＮＤ処理２０４により構成されている。ユニット間通信２０１で、基本ユニット３は、ラダープログラムを実行して得られた出力データを基本ユニット３内の記憶装置１２から外部機器などに送信するとともに、受信データを含めた入力データを基本ユニット３内の記憶装置１２に取り込む。たとえば、基本ユニット３のデバイスに記憶されているデバイス値はリフレッシュによって拡張ユニット４のデバイスに反映される。同様に、拡張ユニット４のデバイスに記憶されているデバイス値はリフレッシュによって基本ユニット３のデバイスに反映される。なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組みが採用されてもよい。ただし、基本ユニット３のデバイスは基本ユニット３が随時書き換えており、同様に、拡張ユニット４のデバイスは拡張ユニット４が随時書き換えている。つまり、基本ユニット３のデバイスは基本ユニット３の内部の装置によって随時アクセス可能であり、同様に、拡張ユニット４のデバイスは拡張ユニット４の内部の装置によって随時アクセス可能になっている。基本ユニット３と拡張ユニット４との間では基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行２０２で、基本ユニット３は、更新された入力データを用いてプログラムを実行（演算）する。基本ユニット３はプログラムの実行によりデータを演算処理する。なお、ＥＮＤ処理とは、プログラム作成支援装置１や基本ユニット３に接続された表示器（図示せず）等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【００２７】
このように、プログラム作成支援装置１はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをＰＬＣ２に転送する。ＰＬＣ２は、入出力リフレッシュ、ラダープログラムの実行およびＥＮＤ処理を１サイクル（１スキャン）として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器（センサ等）からのタイミング信号に基づいて、各種出力機器（モータ等）を制御する。よって、ＰＬＣ２は汎用のパーソナルコンピュータ（ＰＣ）とは全く異なる動きをする。
【００２８】
＜モニタ装置の機能＞
図６はモニタ装置として動作するプログラム作成支援装置１の機能を示す図である。ＣＰＵ２４は記憶装置２５のＲＯＭ（ＥＥＰＲＯＭ，ＨＤＤ，ＳＳＤなど）に記憶されている編集ソフトウエア３６を実行することで編集部３１として機能する。編集部３１は、表示部７にラダープログラム３５を編集するためのＵＩ（ユーザインタフェース）を表示させ、操作部８を通じて入力された指示に従ってラダープログラム３５を作成し、記憶装置２５に格納する。ＣＰＵ２４は記憶装置２５のＲＯＭ（ＥＥＰＲＯＭ，ＨＤＤ，ＳＳＤなど）に記憶されているモニタソフトウエア３７を実行することで、設定部３２、リングバッファ管理部３３および描画部３４として機能する。なお、モニタソフトウエア３７は編集ソフトウエア３６に統合されてもよい。設定部３２は、基本ユニット３や拡張ユニット４からデバイス値やバッファメモリを取得するために必要となる設定データ（トレース設定）を作成する。なお、トレースとは、基本ユニット３と拡張ユニット４からデバイス値（バッファメモリ）を取得して表示する処理であり、モニタリングと同様の意味である。なお、狭義のトレースは、デバイス値（バッファメモリ）の取得ないしは収集を意味する。
【００２９】
図７は設定部３２が表示部７に表示するユーザインタフェースの一例である。デバイス選択ＵＩ６１は、基本ユニット３や拡張ユニット４から取得される取得対象を選択ないしは指定するためのユーザインタフェースである。この例では、取得対象となるデバイス名称の表示欄と、その名称の左側にチェックボックスが設けられている。ユーザは操作部８を通じてチェックボックスにチェックを付与することで、チェックを付与されたデバイスを取得対象として選択できる。設定部３２は、デバイス選択ＵＩ６１においていずれかのデバイスが指定されると、そのデバイスについてのトレース設定を作成すべく、トリガ位置設定ＵＩ６２、サンプリング周期設定ＵＩ６４およびトリガ条件設定ＵＩ６５を表示部７に表示する。トリガ位置設定ＵＩ６２は、デバイス値のサンプル数（サンプル時間）を設定するためのユーザインタフェースである。スライダーバー６３はデフォルトで中央に設定されている。これは、トリガ条件が満たされたタイミングの前と後で同数のデバイス値をサンプルすることを示している。スライダーバー６３が中央よりも左に移動されると、トリガ条件が満たされたタイミングの前のサンプル数が減少し、トリガ条件が満たされたタイミングの後のサンプル数が増加する。反対に、スライダーバー６３が中央よりも右に移動されると、トリガ条件が満たされたタイミングよりも前のサンプル数が増加し、トリガ条件が満たされたタイミングよりも後のサンプル数が減少する。サンプリング周期設定ＵＩ６４は、デバイス値やバッファメモリ値のサンプリング周期を設定するためのＵＩである。デバイス値についてのサンプリング周期は、たとえば、デバイスメモリに格納されているデバイス値をリングバッファに格納する周期である。バッファメモリ値についてのサンプリング周期は、たとえば、バッファメモリに格納されているバッファメモリ値をリングバッファに格納する周期である。トリガ条件設定ＵＩ６５はトリガ条件を設定するためのユーザインタフェースである。トリガ条件とは、デバイス値やバッファメモリ値を基本ユニット３や拡張ユニット４から取得して表示部７に表示させるといったトレース処理を開始させる条件である。図７によれば、Ｒ０００という名称のビットデバイス（リレーデバイス）のデバイス値が“１”（ＯＮ）になり、かつ（ＡＮＤ）、ＤＭ００１という名称のワードデバイスのデバイス値が“０”以下になったことをトリガ条件として設定されている。このように、トリガ条件設定ＵＩ６５ではトレース開始の条件が設定可能となっているが、トレース停止の条件も設定可能とされてもよい。なお、本実施例では、トレース停止条件はトリガ位置設定ＵＩ６２により設定された数のサンプル値（デバイス値やバッファメモリ）の取得が完了したことであるものと仮定する。設定部３２がこれらのＵＩを通じて作成したトレース設定は通信部２６を通じて基本ユニット３と拡張ユニット４とに転送される。
【００３０】
図６に示したリングバッファ管理部３３は、基本ユニット３のデバイスメモリに記憶されているデバイス値を取得したり、拡張ユニット４のデバイスメモリ（バッファメモリ）に記憶されているデバイス値（バッファメモリ）を取得したりする機能である。リングバッファ管理部３３は、設定部３２により設定された条件（トレース設定）にしたがってデバイス値やバッファメモリをリングバッファ３８に格納する。リングバッファ３８は記憶装置２５のＲＡＭに確保される。なお、基本ユニット３や拡張ユニット４におけるデバイス値の取得時刻やバッファメモリの取得時刻もこれらと関連付けてリングバッファ３８に格納されてもよい。描画部３４は、リングバッファ３８に格納されたデバイス値やバッファメモリをそれぞれ取得時刻に基づき時間軸を整合させて表示部７に表示する機能である。
【００３１】
図８は表示例を示す図である。この例では、基本ユニット３のデバイスメモリＤＭ０００とデバイスメモリＤＭ００１から取得されたデバイス値と、拡張ユニット４から取得されたバッファメモリＥＭ０００とバッファメモリＥＭ００１とから取得されたバッファメモリとが時間軸を揃えられて表示されている。
【００３２】
図９は他の表示例を示す図である。この例では、基本ユニット３のデバイスメモリＤＭ０００とデバイスメモリＤＭ００１から取得されたデバイス値とが第一の表示領域に表示されている。拡張ユニット４から取得されたバッファメモリＵＧ０００とバッファメモリＵＧ００１とから取得されたバッファメモリとが第２の表示領域に表示されている。第一の表示領域と第二の表示領域は横に並べられているものの、時間軸は揃えられている。このように、各ユニットから取得されたデバイス値（バッファメモリ）は必ずしも一つの表示領域にまとめて表示されなくてもよい。
【００３３】
＜基本ユニットの機能＞
図１０は基本ユニット３の機能を示す図である。ＣＰＵ１０は記憶装置１２のＲＯＭ（ＥＥＰＲＯＭ，ＨＤＤ，ＳＳＤなど）に記憶されている制御プログラム４５を実行することで、ラダー実行部４０、デバイス管理部４１、バッファ管理部４２、ＣＰＵユニットタイマー４３および同期部４４として機能する。ラダー実行部４０は、プログラム作成支援装置１により作成されて転送されてきたラダープログラム３５を実行するエンジンである。ラダー実行部４０はＣＰＵ１０とは異なるＡＳＩＣなどにより実現されてもよい。デバイス管理部４１は、それぞれデバイス値を格納する複数のデバイスからなるデバイスメモリ４８を管理する機能である。デバイスメモリ４８は第一デバイスメモリと呼ばれてもよい。デバイスとしては、上述したスキャン周期ごとにリフレッシュされるデバイスと、スキャン周期よりも短いユニット間同期周期ごとにリフレッシュ（ユニット間同期リフレッシュ）されるデバイスとがある。また、デバイスには、拡張ユニット４から受信したデバイス値が格納される入力デバイスと、基本ユニット３から拡張ユニット４に送信される出力デバイスとが存在する。たとえば、ラダー実行部４０は、入力デバイスに格納された拡張ユニット４（モーションユニットなど）の現在座標や現在速度に対してラダープログラム３５により定義された所定の演算を実行して目標座標と目標速度を決定し、出力デバイスにこれらを格納する。次のリフレッシュのタイミングでは、出力デバイスに格納された目標座標と目標速度が拡張ユニット４によって読み出され、被制御装置１６（パラレルリンクなど）の制御に反映される。バッファ管理部４２は、デバイスメモリ４８に格納されているデバイス値をトレース設定４７にしたがってリングバッファ４９に格納する機能である。トレース設定４７は上述したようにプログラム作成支援装置１によって作成されたものである。リングバッファ４９は記憶装置１２のＲＡＭに確保される。また、バッファ管理部４２は、プログラム作成支援装置１からトレースの開始指示を受信すると、トレース設定４７にしたがってリングバッファ４９に格納しておいたデバイス値とその格納時刻を示す時刻情報を、通信部１４を介してプログラム作成支援装置に送信する。ＣＰＵユニットタイマー４３は、基本ユニット３における各種の動作の制御タイミングを決定するために利用されるクロックやカウンタである。ＣＰＵユニットタイマー４３は必ずしも時刻を計時する必要はなく、時刻に相当するカウント値をカウントしてもよい。このようなカウント値も時刻情報の一種である。図８、図９に示した横軸は時間軸であるが、時間軸に付与されている７５０００や７６０００は時刻情報としてのカウント値である。同期部４４は、ＣＰＵユニットタイマー４３の時刻情報と拡張ユニット４が備える拡張ユニットタイマー５３の時刻情報とを同期させる機能である。同期部４４は、通信部１４を介したバス通信によって同期信号を拡張ユニット４に送信することで、ＣＰＵユニットタイマー４３の時刻情報と拡張ユニット４が備える拡張ユニットタイマー５３の時刻情報とを同期させる。
【００３４】
＜拡張ユニットの機能＞
図１１は拡張ユニット４の機能を示す図である。ＣＰＵ１１０は記憶装置１１２のＲＯＭ（ＥＥＰＲＯＭ，ＨＤＤ，ＳＳＤなど）に記憶されている制御プログラム５５を実行することで、機能制御部５０、デバイス管理部５１、バッファ管理部５２、拡張ユニットタイマー５３および同期部５４として機能する。機能制御部５０は、バッファメモリを含むデバイスメモリ５８に格納されたデバイス値（バッファメモリ）に基づき被制御装置１６を制御する。なお、被制御装置１６は単なるセンサなどの入力装置であってもよい。デバイスメモリ５８は第二デバイスメモリと呼ばれてもよい。デバイス管理部５１は、それぞれデバイス値（バッファメモリ）を格納する複数のデバイス（バッファメモリ）からなるデバイスメモリ５８を管理する機能である。デバイスとしては、上述したスキャン周期ごとにリフレッシュされるデバイスと、スキャン周期よりも短いユニット間同期周期ごとにリフレッシュ（ユニット間同期リフレッシュ）されるデバイスとがある。さらに、他のデバイスとしては、基本ユニット３から命令語により読み書きされるバッファメモリがある。なお、拡張ユニット４に関するデバイスは総称としてバッファメモリとして呼ばれてもよい。もちろん、デバイスメモリ５８は、デバイスメモリとしての領域とバッファメモリとしての領域とを有していてもよい。この場合、デバイスメモリに記憶されているデバイス値と、バッファメモリに記憶されているバッファメモリとがモニタリングの対象となり得る。また、デバイスには、拡張ユニット４から送信されるデバイス値が格納される入力デバイスと、基本ユニット３から拡張ユニット４に送信される出力デバイスとが存在する。たとえば、機能制御部５０は、被制御装置１６の現在座標や現在速度を入力デバイス（バッファメモリ）に格納してもよい。機能制御部５０は、次のリフレッシュのタイミングで基本ユニット３により出力デバイスに格納された目標座標と目標速度を被制御装置１６（パラレルリンクなど）に反映させる。バッファ管理部５２は、デバイスメモリ５８に格納されているデバイス値をトレース設定５７にしたがってリングバッファ５９に格納する機能である。トレース設定５７は上述したようにプログラム作成支援装置１によって作成されたものである。リングバッファ５９は記憶装置１１２のＲＡＭに確保される。また、バッファ管理部５２は、通信部１１４を介してプログラム作成支援装置１からトレースの開始指示を受信すると、トレース設定５７にしたがってリングバッファ５９に格納しておいたデバイス値（バッファメモリ）とその格納時刻を示す時刻情報を、通信部１１４を介してプログラム作成支援装置１に送信する。なお、拡張ユニット４の通信部１１４は、通信ハブとしても機能する基本ユニット３の通信部１４を介してプログラム作成支援装置１の通信部２６と通信する。拡張ユニットタイマー５３は、拡張ユニット４における各種の動作の制御タイミングを決定するために利用されるクロックやカウンタである。拡張ユニットタイマー５３は必ずしも時刻を計時する必要はなく、時刻に相当するカウント値をカウントしてもよい。このようなカウント値も時刻情報の一種である。同期部５４は、拡張ユニットタイマー５３の時刻情報をＣＰＵユニットタイマー４３の時刻情報に同期させる機能である。同期部５４は、通信部１１４を介したバス通信によって同期信号を基本ユニット３から受信することで、ＣＰＵユニットタイマー４３の時刻情報と拡張ユニットタイマー５３の時刻情報とを同期させる。
【００３５】
＜プログラム作成支援装置が実行する処理＞
図１２はプログラム作成支援装置１のＣＰＵ２４が実行する処理を示すフローチャートである。Ｓ１１でＣＰＵ２４（編集部３１）は編集ソフトウエア３６にしたがってラダープログラム３５を編集し、通信部２６を介して基本ユニット３に接続して転送する。Ｓ１２でＣＰＵ２４（設定部３２）はモニタソフトウエア３７にしたがってトレース設定を編集し、通信部２６を介して基本ユニット３に接続して転送する。トレース設定は基本ユニット３と拡張ユニット４のそれぞれについて作成される。トレース設定には、デバイスの識別情報、トリガ位置、サンプリング周期、トリガ条件などが含まれる。
【００３６】
Ｓ１３でＣＰＵ２４（描画部３４）は操作部８を通じてトレースの開始を指示されると、基本ユニット３や拡張ユニット４のそれぞれに通信部２６を介して接続し、トレース開始を指示する。Ｓ１４でＣＰＵ２４（リングバッファ管理部３３）は基本ユニット３に通信部２６を介して接続し、リングバッファ４９に格納されているデバイス値とその時刻情報を取得する。また、ＣＰＵ２４（リングバッファ管理部３３）は拡張ユニット４に通信部２６を介して接続し、リングバッファ５９に格納されているデバイス値（バッファメモリ）とその時刻情報を取得し、リングバッファ３８に格納する。Ｓ１５でＣＰＵ２４（描画部３４）はリングバッファ３８から各デバイス値（バッファメモリ）とその時刻情報を読み出して、各デバイス値（バッファメモリ）の時刻情報にしたがって各デバイス値（バッファメモリ）時間軸を揃えてチャートにレンダリングし、表示部７に表示する。
【００３７】
Ｓ１６でＣＰＵ２４（描画部３４）は操作部８を通じてモニタリング（トレース）の停止が指示されたかどうかを判定する。なお、基本ユニット３や拡張ユニット４のうちいずれかのユニットで停止トリガが発生したことを、通信部２６を介したメッセージ通信により認識したときも、ＣＰＵ２４（描画部３４）は停止指示が入力されたものとして取り扱う。停止が指示されていなければ、ＣＰＵ２４（描画部３４）はＳ１４に戻り、Ｓ１４とＳ１５を繰り返す。停止が指示されると、ＣＰＵ２４（描画部３４）は、Ｓ１７に進む。Ｓ１７でＣＰＵ２４は通信部２６を介した通信により基本ユニット３や拡張ユニット４にトレースの停止を指示する。
【００３８】
＜基本ユニットが実行する処理＞
図１３は基本ユニット３のＣＰＵ１０が実行する処理を示すフローチャートである。Ｓ２１でＣＰＵ１０はプログラム作成支援装置１からラダープログラム３５を受信し、記憶装置１２に記憶する。Ｓ２２でＣＰＵ１０はプログラム作成支援装置１から基本ユニット３用のトレース設定４７を受信し、記憶装置１２に記憶する。Ｓ２３でＣＰＵ１０は操作部６を通じてプログラミングモードからランモードに設定されたかどうかを判定する。操作部６には、電源オフ、プログラミングモード、ランモードを切り替えるメインスイッチが設けられていてもよい。ランモードが設定されると、ＣＰＵ１０はＳ２４に進む。Ｓ２４でＣＰＵ１０はラダープログラム３５をラダー実行部４０に実行させる。ラダー実行部４０はスキャンタイム（スキャン周期）にしたがってラダープログラム３５を繰り返し実行する。また、デバイス管理部４１は、リフレッシュによって各デバイスのデバイス値を更新する。
【００３９】
Ｓ２５でＣＰＵ１０（バッファ管理部４２）はプログラム作成支援装置１からトレースの開始を指示されたかどうかを判定する。トレースの開始を指示されると、ＣＰＵ１０はＳ２６に進む。
【００４０】
Ｓ２６でＣＰＵ１０（バッファ管理部４２）はトレース設定４７にしたがってデバイスメモリ４８からデバイス値を読み出してリングバッファ４９に格納する。格納の際に、バッファ管理部４２はＣＰＵユニットタイマー４３によってカウントされているカウント値（時刻情報）を取得して、デバイス値とともにリングバッファ４９に格納してもよい。あるいは、デバイス管理部４１が、各デバイスのデバイス値を更新したときのＣＰＵユニットタイマー４３によってカウントされているカウント値（時刻情報）を取得して、各デバイスの時刻情報としてデバイスメモリ４８に記憶させてもよい。つまり、時刻情報を格納するデバイスがデバイスメモリ４８に設けられてもよい。この場合、バッファ管理部４２は、デバイスメモリ４８からデバイス値と時刻情報とを読み出してリングバッファ４９に格納する。リングバッファ４９に格納したデバイス値と時刻情報はプログラム作成支援装置１によって読み出される。換言すれば、バッファ管理部４２は、リングバッファ４９に格納したデバイス値と時刻情報を、通信部１４を介して接続したプログラム作成支援装置１に出力ないしは送信する。
【００４１】
Ｓ２７でＣＰＵ１０（バッファ管理部４２）はトレースを停止する条件が満たされたかどうかを判定する。たとえば、バッファ管理部４２は、プログラム作成支援装置１からトレース停止の指示を受信したかどうかを判定する。あるいは、ＣＰＵ１０（バッファ管理部４２）はトレース設定４７により定義された停止トリガ（停止イベント）が発生したかどうかを判定してもよい。トレースを停止する条件が満たされていなければ、バッファ管理部４２はＳ２６に戻り、Ｓ２６とＳ２７を繰り返す。トレースを停止する条件が満たされると、バッファ管理部４２はトレースを終了する。
【００４２】
＜拡張ユニットが実行する処理＞
図１４は拡張ユニット４のＣＰＵ１１０が実行する処理を示すフローチャートである。なお、デバイス管理部５１は、ラダープログラム３５が開始されたことを通信によって通知されると、リフレッシュのタイミングごとに各デバイス値（バッファメモリ）を更新する。
【００４３】
Ｓ３１でＣＰＵ１１０はプログラム作成支援装置１から拡張ユニット４用のトレース設定５７を受信し、記憶装置１１２に記憶する。Ｓ３２でＣＰＵ１１０（バッファ管理部５２）はプログラム作成支援装置１からトレースの開始を指示されたかどうかを判定する。トレースの開始を指示されると、ＣＰＵ１１０はＳ３３に進む。
【００４４】
Ｓ３３でＣＰＵ１１０（バッファ管理部５２）はトレース設定５７にしたがってデバイスメモリ５８からデバイス値を読み出してリングバッファ５９に格納する。格納の際に、バッファ管理部５２は拡張ユニットタイマー５３によってカウントされているカウント値（時刻情報）を取得して、デバイス値とともにリングバッファ５９に格納してもよい。あるいは、デバイス管理部５１が、各デバイスのデバイス値（バッファメモリ）を更新したときに拡張ユニットタイマー５３によってカウントされていたカウント値（時刻情報）を取得して、各デバイス（バッファメモリ）の時刻情報としてデバイスメモリ５８に記憶させてもよい。つまり、時刻情報を格納するデバイス（バッファメモリ）がデバイスメモリ５８に設けられてもよい。この場合、バッファ管理部５２は、デバイスメモリ５８からデバイス値（バッファメモリ値）と時刻情報とを読み出してリングバッファ５９に格納する。リングバッファ５９に格納したデバイス値と時刻情報はプログラム作成支援装置１によって読み出される。換言すれば、バッファ管理部５２は、リングバッファ５９に格納したデバイス値と時刻情報を、通信部１１４および基本ユニット３の通信部１４を介して接続したプログラム作成支援装置１に出力ないしは送信する。
【００４５】
Ｓ３４でＣＰＵ１１０（バッファ管理部５２）はトレースを停止する条件が満たされたかどうかを判定する。たとえば、バッファ管理部５２は、プログラム作成支援装置１からトレース停止の指示を受信したかどうかを判定する。あるいは、ＣＰＵ１１０（バッファ管理部５２）はトレース設定５７により定義された停止トリガ（停止イベント）が発生したかどうかを判定してもよい。トレースを停止する条件が満たされていなければ、バッファ管理部５２はＳ３３に戻り、Ｓ３３とＳ３４を繰り返す。トレースを停止する条件が満たされると、バッファ管理部５２はトレースを終了する。
【００４６】
＜ユニット間同期＞
スキャンタイムは一般に数ミリ秒であるが、位置決めユニットなどの拡張ユニット４ではより短い周期で被制御装置１６の位置を制御したいという要請がある。しかし、１つのスキャンタイムで入出力デバイスのリフレッシュ（一括リフレッシュ）は１回だけである。そこで、本実施例では上述した同期リフレッシュも採用している。
【００４７】
図１５は一括リフレッシュと同期リフレッシュとの関係を示す図である。図１５が示すように、一括リフレッシュにより基本ユニット３と拡張ユニット４との間で入出力デバイスのデバイス値が更新される。たとえば、カウンタユニットである拡張ユニット４の現在座標は１つのスキャンタイムで一回だけ更新され、位置決めユニットである他の拡張ユニット４への目標座標も１つのスキャンタイムで一回だけ更新される。しかし、これではより高速な追従制御を実現することができない。そこで、基本ユニット３の内部制御周期と拡張ユニット４の内部制御周期とを同期させ、この制御周期ごとにデバイスやバッファなどをリフレッシュする同期リフレッシュについても本実施例では採用している。なお、ラダープログラムのうち、この制御周期に同期して実行されるプログラムはユニット間同期プログラムと呼ばれる。図１５において同期リフレッシュは、ラダープログラムの実行期間だけでなく、一括リフレッシュの実行期間やエンド処理の実行期間においても実行される。
【００４８】
図１６は同期リフレッシュの一例を示す図である。基本ユニット３のデバイス管理部４１は、制御周期ごとに同期リフレッシュを実行する。図１６によれば、制御周期内でまず同期リフレッシュの対象として予め指定されているデバイスである現在座標Ｘｎがリフレッシュされる。次に、デバイス管理部４１は、現在座標Ｘｎから算出した目標座用Ｙｎ＋１のデバイスに格納し、これを位置決めユニットである拡張ユニット４のデバイスにコピーする。位置決めユニットである拡張ユニット４は、デバイスが保持しているデバイス値を今回の指令値（目標座標）として内部処理（パラレルリンクやボールねじなどの追従制御）を実行する。以下、同様に制御周期ごとに同期リフレッシュが実行される。
【００４９】
このように同期リフレッシュを採用すると、位置決めユニットが内部処理を開始する時点では必ず最新の指令値を基本ユニット３から取得できるようになる。これにより、高速かつきめ細やかな追従制御が実現可能となる。
【００５０】
また、各デバイス値は時刻情報（１０、１１などのカウント値）とともにリングバッファに格納されて保持されている。よって、同一の時刻情報に関連付けられている複数のデバイス値（現在座標や目標座標）の時間軸を揃えて表示させることが可能となる。
【００５１】
＜まとめ＞
図１などを用いて説明したように、ＣＰＵユニットとして機能する基本ユニット３と、基本ユニット３と通信する拡張ユニット４とを有するプログラマブル・ロジック・コントローラ（ＰＬＣ２）が提供される。また、プログラム作成支援装置１はＰＬＣ２の動作状態をモニタするモニタ装置として機能する。図１０を用いて説明したように、基本ユニット３はＰＬＣ２の動作状態を示すデバイス値が格納される複数のデバイスからなるデバイスメモリ４８と、デバイス値がデバイスに格納される時刻を管理するためのＣＰＵユニットタイマー４３とを有している。図１１を用いて説明したように拡張ユニット４はＰＬＣ２の動作状態を示すバッファメモリを格納するバッファメモリとして機能するデバイスメモリ５８を有している。さらに、拡張ユニット４はＣＰＵユニットタイマー４３と時刻同期されており、バッファメモリがバッファメモリに格納される時刻を管理するための拡張ユニットタイマー５３を有している。図６を用いて説明したように、プログラム作成支援装置１は基本ユニット３のデバイスメモリ４８に記憶されているデバイス値を取得するとともに、拡張ユニット４のバッファメモリ（デバイスメモリ５８）に記憶されているバッファメモリ（デバイス値）を取得する取得手段として機能するリングバッファ管理部３３を有している。描画部３４や表示部７は、デバイス値の格納時刻とバッファメモリの格納時刻とに基づきデバイス値とバッファメモリとの時間軸を整合させて表示する表示手段として機能する。このように、ＣＰＵユニットタイマー４３と拡張ユニットタイマー５３が時刻同期しているため、デバイス値やバッファメモリ値の取得ないしは格納のタイミングも正確となろう。つまり、デバイス値やバッファメモリの時間軸が正確に揃うことになる。よって、基本ユニット３から取得したデータの時間軸と拡張ユニット４から取得したデータの時間軸とを正確に揃えて表示することが可能となる。
【００５２】
基本ユニット３のリングバッファ４９は、予め設定された周期でデバイスメモリ４８のデバイス値と当該デバイス値の格納時刻に関する時刻情報を格納する第一リングバッファの一例である。プログラム作成支援装置１のリングバッファ管理部３３は、基本ユニット３のリングバッファ４９からデバイスメモリ４８のデバイス値と当該デバイス値の時刻情報とを取得する。一般に、リングバッファは、時系列のデータを格納して読み出すのに向いたバッファである。したがって、デバイス値を時間軸に揃えて管理することに向いている。リングバッファ以外の記憶構造がリングバッファに代えて採用されてもよい。
【００５３】
拡張ユニット４のリングバッファ５９は、予め設定された周期でバッファメモリのバッファメモリと当該バッファメモリ値の格納時刻に関する時刻情報を格納する第二リングバッファの一例である。プログラム作成支援装置１のリングバッファ管理部３３は、拡張ユニット４のリングバッファ５９からバッファメモリのバッファメモリと当該バッファメモリの時刻情報とを取得してもよい。このようにリングバッファを採用することでデバイス値やバッファメモリを時間軸に揃えて管理しやすくなろう。
【００５４】
基本ユニット３の同期部４４はＣＰＵユニットタイマー４３の時刻と拡張ユニットタイマー５３の時刻とを同期させる同期信号を拡張ユニット４に送信してもよい。拡張ユニット４の同期部５４は同期信号に応じて拡張ユニットタイマー５３の時刻をＣＰＵユニットタイマー４３の時刻に同期させる。このように同期信号によって拡張ユニットタイマー５３の時刻をＣＰＵユニットタイマー４３の時刻に同期させてもよい。これにより、ある時刻に取得された基本ユニット３のデバイス値と、その時刻に拡張ユニット４から取得されたデバイス値（バッファメモリ）とを時間軸でより正確に揃えやすくなろう。
【００５５】
基本ユニット３のデバイスメモリ４８に格納される複数のデバイス値のうち少なくとも一部のデバイス値は、基本ユニット３がユーザプログラムを繰り返し実行するスキャンタイムにしたがって拡張ユニット４と通信することで更新される。また、複数のデバイス値のうち少なくとも一部のデバイス値は、スキャンタイムよりも短い一定の制御周期で拡張ユニット４と通信することで更新されてもよい。つまり、後者のデバイス値はユニット間同期リフレッシュによって更新されてもよい。これにより、スキャンタイムよりも短い周期でデバイス値がどのように変化しているかをモニタリングすることが可能となる。
【００５６】
図１５や図１６を用いて説明したように、基本ユニット３の内部における制御周期と拡張ユニット４の内部における制御周期とがＣＰＵユニットタイマー４３と拡張ユニットタイマー５３とを通じて同期していてもよい。このようなユニット間同期を採用することで、基本ユニット３内の制御周期と拡張ユニット４内の制御周期とが整合するようになる。その結果、モーションユニットなど、スキャンタイムよりも短い周期で制御される拡張ユニット４のデバイス値（バッファメモリ）についても基本ユニット３のデバイス値に対して精度よく時間軸を整合させてモニタリングすることが可能となろう。
【００５７】
プログラム作成支援装置１のリングバッファ管理部３３は、制御周期の整数倍の取得周期でデバイス値とバッファメモリを取得してもよい。表示部７は、この取得周期で取得されたデバイス値とバッファメモリを表示する。ユニット間同期に関連した制御周期は、スキャンタイムによりかなり短い周期に設定されることもある。この場合、短時間で非常に多くのデバイス値とバッファメモリが取得されてしまう。しかし、短時間ではそれほどデバイス値とバッファメモリが変化しないアプリケーションでは同じ値のデバイス値とバッファメモリが連続してしまい、通信の負荷が大きくなるわりには無駄なデータが増えてしまう。したがって、制御周期の整数倍の取得周期でデバイス値とバッファメモリを取得することで、ＰＬＣ２とプログラム作成支援装置１との間の通信の負荷を軽減できるようになろう。
【００５８】
上述した説明では、プログラム作成支援装置１が主体的にデバイス値等を基本ユニット３や拡張ユニット４から取得するものとして説明したが、基本ユニット３や拡張ユニット４の側から取得処理を理解してもよい。たとえば、基本ユニット３は各デバイス値と当該各デバイス値の格納時刻を示す時刻情報とをプログラム作成支援装置１に送信する。また、拡張ユニット４は各バッファメモリと当該各バッファメモリの格納時刻を示す時刻情報とをプログラム作成支援装置１に送信する。描画部３４は各デバイス値の格納時刻を示す時刻情報と、各バッファメモリの格納時刻を示す時刻情報とに基づきデバイス値とバッファメモリとの時間軸を整合させて表示部７に表示する。
【００５９】
上述した説明では、プログラム作成支援装置１が基本ユニット３と拡張ユニット４とから並列にデータを収集するものとして説明したが、収集機能は基本ユニット３に設けられてもよい。より具体的には、基本ユニット３のバッファ管理部４２は各バッファメモリと当該各バッファメモリ値の格納時刻を示す時刻情報とを拡張ユニット４から受信し、各デバイス値の格納時刻を示す時刻情報と、各バッファメモリ値の格納時刻を示す時刻情報とに基づき、各デバイス値と各バッファメモリとの時間軸を整合させてプログラム作成支援装置１に送信してもよい。この場合、時刻情報はプログラム作成支援装置１に送信されなくてもよい。基本ユニット３のから収集したデバイス値と拡張ユニット４から収集したデバイス値（バッファメモリ）とは、それぞれの時刻情報に基づき時間軸を整合されてリングバッファ４９に格納されるからである。つまり、リングバッファ４９に格納される段階で、基本ユニット３のから収集したデバイス値と拡張ユニット４から収集したデバイス値（バッファメモリ）とは時間軸上で整合されていてもよい。
【００６０】
プログラム作成支援装置１は、基本ユニット３を介して拡張ユニット４のデバイスメモリ５８からデバイス値（バッファメモリ）を取得してもよい。プログラム作成支援装置１から基本ユニット３と拡張ユニット４にそれぞれ通信ケーブルを接続することも考えられるが、複数の通信ケーブルは邪魔になりやすい。そこで、プログラム作成支援装置１から基本ユニット３に一本の通信ケーブルを接続し、基本ユニット３と拡張ユニット４をバスで接続する。つまり、プログラム作成支援装置１と拡張ユニット４は、通信ケーブル、基本ユニット３およびバスを介して接続されてもよい。これにより、通信ケーブルの本数を削減可能となろう。
【００６１】
プログラム作成支援装置１のリングバッファ３８は、リングバッファ管理部３３により取得されたデバイス値とバッファメモリとを記憶する第三リングバッファとして機能する。描画部３４は、リングバッファ３８からデバイス値とバッファメモリ値とを読み出してデバイス値とバッファメモリとの時間軸を整合させて表示してもよい。このように、プログラム作成支援装置１にもリングバッファ３８を設けてデバイス値とバッファメモリを保持することで、これらの時間軸を容易に揃えやすくなろう。
【図１】
0006626315.tif 000002
【図２】
0006626315.tif 000003
【図３】
0006626315.tif 000004
【図４】
0006626315.tif 000005
【図５】
0006626315.tif 000006
【図６】
0006626315.tif 000007
【図７】
0006626315.tif 000008
【図８】
0006626315.tif 000009
【図９】
0006626315.tif 000010
【図１０】
0006626315.tif 000011
【図１１】
0006626315.tif 000012
【図１２】
0006626315.tif 000013
【図１３】
0006626315.tif 000014
【図１４】
0006626315.tif 000015
【図１５】
0006626315.tif 000016
【図１６】
0006626315.tif 000017