以下において、本実施の形態について図面を参照して詳しく説明する。なお、図中同一符号は同一または相当部分を示す。
(A.制御システムの構成)
本実施の形態に係る制御システムは、制御装置であるCPUユニットから指令に基づいて駆動装置(例えば、ステッピングモータ)を制御する制御機能を有しており、CPUユニットからの指令に従ったパルス信号をパルス出力装置で生成して駆動装置に出力している。まず、図1を参照して、本実施の形態に係る制御システムの構成について説明する。
図1は、本実施の形態における制御システムの概略構成を示す模式図である。制御システムであるPLCシステムSYSは、PLC1と、モータドライバ3A,3Bと、ステッピングモータ4A,4Bと、リモートIOターミナル5とを含む。モータドライバ3A,3Bは、それぞれの信号配線3を介してPLC1のパルス出力ユニット16と接続されている。リモートIOターミナル5は、フィールドネットワーク2を介してPLC1と接続されている。また、PLC1には、接続ケーブル10などを介してPLCサポート装置と、ネットワーク114を介してプログラマブル表示器300がそれぞれ接続される。
モータドライバ3Aは、パルス信号に基づきステッピングモータ4Aを駆動する。モータドライバ3Aおよびステッピングモータ4Aで駆動装置30を構成する。モータドライバ3Bは、パルス信号に基づきステッピングモータ4Bを駆動する。モータドライバ3Bおよびステッピングモータ4Bで駆動装置40を構成する。
各構成についてさらに詳しく説明する。PLC1は、主たる演算処理を実行するCPUユニット13と、1つ以上のIOユニット14と、特殊ユニット15、パルス出力ユニット16とを含む。パルス出力ユニット16は、パルス出力装置でありCPUユニット13からの指令に従ったパルス信号を生成して、モータドライバ3A,3Bに生成したパルス信号をそれぞれの信号配線3を介して出力する。パルス出力ユニット16の詳細については、図5を参照して後述する。
PLC1に含まれるユニットは、PLCシステムバス11を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット12によって適切な電圧の電源が供給される。なお、PLC1として構成される各ユニットは、PLCメーカーが提供するものであるので、PLCシステムバス11は、一般にPLCメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク2については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。なお、PLC1では、PLCシステムバス11を介してCPUユニット13とパルス出力ユニット16とを接続しているが、フィールドネットワーク2を介してCPUユニット13とパルス出力ユニット16とを接続してもよい。
CPUユニット13の詳細については、図2を参照して後述する。IOユニット14は、一般的な入出力処理に関するユニットであり、オン/オフといった2値化されたデータの入出力を司る。すなわち、IOユニット14は、センサが何らかの対象物を検出している状態(オン)および何らの対象物も検出していない状態(オフ)のいずれであるかという情報を収集する。また、IOユニット14は、リレーやアクチュエータといった出力先に対して、活性化するための指令(オン)および不活性化するための指令(オフ)のいずれかを出力する。
特殊ユニット15は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、IOユニット14ではサポートしない機能を有する。
フィールドネットワーク2は、CPUユニット13と遣り取りされる各種データを伝送する。フィールドネットワーク2としては、典型的には、各種の産業用イーサネット(登録商標)を用いることができる。産業用イーサネット(登録商標)としては、たとえば、EtherCAT(登録商標)、Profinet IRT、MECHATROLINK(登録商標)−III、Powerlink、SERCOS(登録商標)−III、CIP Motionなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット(登録商標)以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、DeviceNet、CompoNet(登録商標)などを用いてもよい。本実施の形態に係るPLCシステムSYSでは、典型的に、本実施の形態においては、産業用イーサネット(登録商標)であるEtherCAT(登録商標)をフィールドネットワーク2として採用する場合の構成について例示する。
なお、図1には、PLCシステムバス11およびフィールドネットワーク2の両方を有するPLCシステムSYSを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク2ですべてのユニットを接続してもよい。さらに、フィールドネットワーク2の通信ユニットをPLCシステムバス11に接続し、CPUユニット13から当該通信ユニット経由で、フィールドネットワーク2に接続された機器との間の通信を行なうようにしてもよい。
モータドライバ3A,3Bは、それぞれの信号配線3を介してパルス出力ユニット16と接続されるとともに、パルス出力ユニット16からのパルス信号に従ってステッピングモータ4A,4Bを駆動する。より具体的に、パルス出力ユニット16は、CPUユニット13から一定周期で、指令位置、指令速度といった指令値を受ける。パルス出力ユニット16は、受けた指令値に従いパルス信号をモータドライバ3A,3Bに出力する。モータドライバ3A,3Bは、パルス信号に基づきステッピングモータ4A,4Bを駆動するための電流を調整する。なお、モータドライバ3A,3Bは、モータアンプと称されることもある。また、モータドライバ3A,3Bは、ステッピングモータ4A,4Bの軸に接続されている位置センサ(ロータリーエンコーダ)やトルクセンサといった検出器から、位置(典型的には、今回位置と前回位置との差から算出される)、速度、トルクといったステッピングモータ4A,4Bの動作に係る実測値を取得することも可能である。
図1に示すPLCシステムSYSでは、ステッピングモータ4A,4Bとモータドライバ3A,3Bとを組み合わせたシステム例を示したが、その他、パルス信号を用いて制御する装置と組み合わせたシステムに採用することもできる。
図1に示すPLCシステムSYSのフィールドネットワーク2には、さらに、リモートIOターミナル5が接続されている。リモートIOターミナル5は、基本的には、IOユニット14と同様に、一般的な入出力処理に関する処理を行なう。より具体的には、リモートIOターミナル5は、フィールドネットワーク2でのデータ伝送に係る処理を行なうための通信カプラ52と、1つ以上のIOユニット53とを含む。さらに、リモートIOターミナル5は、パルス出力ユニット54を含んでもよい。パルス出力ユニット54には、図示していないが信号配線を介してモータドライバおよびステッピングモータが接続されている。そのため、CPUユニット13は、フィールドネットワーク2を介してパルス出力ユニット54に指令位置、指令速度といった指令値を出力することができる。これらのユニットは、リモートIOターミナルバス51を介して、データを互いに遣り取りできるように構成される。
PLCシステムSYSにおいては、PLC1のCPUユニット13がEtherCATにおけるマスタ装置として機能し、モータドライバ3A,3Bおよび通信カプラ52がEtherCATにおけるスレーブ装置として機能する。なお、CPUユニット13の代わりに、マスタ装置として機能するユニットを設けてもよい。
なお、PLCサポート装置8は、ユーザプログラム、システム構成(デバイス構成)を表すシステム構成情報、変数テーブルなどを含むプロジェクトをユーザが生成するための装置である。PLCサポート装置8のハードウェア構成は、典型的には、汎用のコンピュータで構成される。具体的に、PLCサポート装置8は、図示していないが、CPU,ROM,RAM,ハードディスク(HDD),キーボードおよびマウス,ディスプレイ,通信インターフェイス(IF)などを含む。PLCサポート装置8で実行される各種プログラムは、CD−ROM(Compact Disk-Read Only Memory)9に格納されて流通する。なお、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
プログラマブル表示器300は、PLC1から取得した各種の情報を画面に表示するとともに、ユーザが操作することにより、PLC1に格納されている入力変数の値や、パルス信号のパルス数,パルス速度などを変更することができる。プログラマブル表示器300のハードウェア構成は、CPU,ROM,RAM,フラッシュROM,時計,操作キー,カメラ,タッチスクリーン,通信インターフェイスなどを含む。
(B.CPUユニットのハードウェア構成)
次に、図2を参照して、CPUユニット13のハードウェア構成について説明する。図2は、本実施の形態におけるCPUユニットのハードウェア構成を示す模式図である。図2を参照して、CPUユニット13は、マイクロプロセッサ100と、チップセット102と、メインメモリ104と、不揮発性メモリ106と、システムタイマ108と、PLCシステムバスコントローラ120と、フィールドネットワークコントローラ140と、USBコネクタ110とを含む。チップセット102と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
マイクロプロセッサ100およびチップセット102は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ100は、チップセット102から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット102は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ100に必要な命令コードを生成する。さらに、チップセット102は、マイクロプロセッサ100での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
CPUユニット13は、記憶手段として、メインメモリ104および不揮発性メモリ106を有する。
メインメモリ104は、揮発性の記憶領域(RAM)であり、CPUユニット13への電源投入後にマイクロプロセッサ100で実行されるべき各種プログラムを保持する。また、メインメモリ104は、マイクロプロセッサ100による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ104としては、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)といったデバイスが用いられる。
一方、不揮発性メモリ106は、リアルタイムOS(Operating System)、PLC1のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ100がアクセスできるようにメインメモリ104にコピーされる。このような不揮発性メモリ106としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、DVD−RAM(Digital Versatile Disk Random Access Memory)のような光学記録媒 体などを用いることもできる。
システムタイマ108は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ100に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、OS(Operating System)やBIOS(Basic Input Output System)などによって、任意の周期で割り込み信号を発生するように設定することもできる。このシステムタイマ108が発生する割り込み信号を利用して、後述するようなモーション制御サイクルごとの制御動作が実現される。
CPUユニット13は、通信回路として、PLCシステムバスコントローラ120およびフィールドネットワークコントローラ140を有する。
バッファメモリ126は、PLCシステムバス11を介して他のユニットへ出力されるデータ(以下「出力データ」とも称す。)の送信バッファ、および、PLCシステムバス11を介して他のユニットから入力されるデータ(以下「入力データ」とも称す。)の受信バッファとして機能する。なお、マイクロプロセッサ100による演算処理によって作成された出力データは、原始的にはメインメモリ104に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ104から読み出されて、バッファメモリ126に一次的に保持される。また、他のユニットから転送された入力データは、バッファメモリ126に一次的に保持された後、メインメモリ104に移される。
DMA制御回路122は、メインメモリ104からバッファメモリ126への出力データの転送、および、バッファメモリ126からメインメモリ104への入力データの転送を行なう。
PLCシステムバス制御回路124は、PLCシステムバス11に接続される他のユニットとの間で、バッファメモリ126の出力データを送信する処理および入力データを受信してバッファメモリ126に格納する処理を行なう。典型的には、PLCシステムバス制御回路124は、PLCシステムバス11における物理層およびデータリンク層の機能を提供する。
フィールドネットワークコントローラ140は、フィールドネットワーク2を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラ140は、用いられるフィールドネットワーク2の規格に従い、出力データの送信および入力データの受信を制御する。上述したように、本実施の形態においてはEtherCAT(登録商標)規格に従うフィールドネットワーク2が採用されるので、通常のイーサネット(登録商標)通信を行なうためのハードウェアを含む、フィールドネットワークコントローラ140が用いられる。EtherCAT(登録商標)規格では、通常のイーサネット(登録商標)規格に従う通信プロトコルを実現する一般的なイーサネット(登録商標)コントローラを利用できる。但し、フィールドネットワーク2として採用される産業用イーサネット(登録商標)の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット(登録商標)コントローラが用いられる。また、産業用イーサネット(登録商標)以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。
DMA制御回路142は、メインメモリ104からバッファメモリ146への出力データの転送、および、バッファメモリ146からメインメモリ104への入力データの転送を行なう。
フィールドネットワーク制御回路144は、フィールドネットワーク2に接続される他の装置との間で、バッファメモリ146の出力データを送信する処理および入力データを受信してバッファメモリ146に格納する処理を行なう。典型的には、フィールドネットワーク制御回路144は、フィールドネットワーク2における物理層およびデータリンク層の機能を提供する。
USBコネクタ110は、PLCサポート装置8とCPUユニット13とを接続するためのインターフェイスである。典型的には、PLCサポート装置8から転送される、CPUユニット13のマイクロプロセッサ100で実行可能なプログラムなどは、USBコネクタ110を介してPLC1に取込まれる。
(C.CPUユニットのソフトウェア構成)
次に、図3を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、CPUユニット13のマイクロプロセッサ100によって実行される。
図3は、本実施の形態におけるCPUユニットで実行されるソフトウェア構成を示す模式図である。図3を参照して、CPUユニット13で実行されるソフトウェアとしては、リアルタイムOS200と、システムプログラム210と、ユーザプログラム236との3階層になっている。
リアルタイムOS200は、CPUユニット13のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ100がシステムプログラム210およびユーザプログラム236を実行するための基本的な実行環境を提供する。このリアルタイムOSは、典型的には、PLCのメーカーあるいは専門のソフトウェア会社などによって提供される。
システムプログラム210は、PLC1としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム210は、スケジューラプログラム212と、出力処理プログラム214と、入力処理プログラム216と、シーケンス命令演算プログラム232と、モーション演算プログラム234と、その他のシステムプログラム220とを含む。なお、一般には出力処理プログラム214および入力処理プログラム216は、連続的(一体として)に実行されるので、これらのプログラムを、IO処理プログラム218と総称する場合もある。
ユーザプログラム236は、ユーザにおける制御目的に応じて作成される。すなわち、PLCシステムSYSを用いて制御する対象のライン(プロセス)などに応じて、任意に設計されるプログラムである。
ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム236は、シーケンス命令演算プログラム232およびモーション演算プログラム234によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム236、シーケンス命令演算プログラム232、およびモーション演算プログラム234を、制御プログラム230と総称する場合もある。
このように、CPUユニット13のマイクロプロセッサ100は、記憶手段に格納されたシステムプログラム210およびユーザプログラム236を実行する。
以下、各プログラムについてより詳細に説明する。
ユーザプログラム236は、上述したように、ユーザにおける制御目的(たとえば、対象のラインやプロセス)に応じて作成される。ユーザプログラム236は、典型的には、CPUユニット13のマイクロプロセッサ100で実行可能なオブジェクトプログラム形式になっている。このユーザプログラム236は、PLCサポート装置8などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラム236は、PLCサポート装置8から接続ケーブル10を介してCPUユニット13へ転送され、不揮発性メモリ106などに格納される。
スケジューラプログラム212は、出力処理プログラム214、入力処理プログラム216、および制御プログラム230について、各実行サイクルでの処理開始および処理中断後の処理再開を制御する。より具体的には、スケジューラプログラム212は、ユーザプログラム236およびモーション演算プログラム234の実行を制御する。
本実施の形態に係るCPUユニット13では、モーション演算プログラム234に適した一定周期の実行サイクル(モーション制御サイクル)を処理全体の共通サイクルとして採用する。そのため、1つのモーション制御サイクル内で、すべての処理を完了することは難しいので、実行すべき処理の優先度などに応じて、各モーション制御サイクルにおいて実行を完了すべき処理と、複数のモーション制御サイクルに亘って実行してもよい処理とが区分される。スケジューラプログラム212は、これらの区分された処理の実行順序などを管理する。より具体的には、スケジューラプログラム212は、各モーション制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。
出力処理プログラム214は、ユーザプログラム236(制御プログラム230)の実行によって生成された出力データを、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140へ転送するのに適した形式に再配置する。PLCシステムバスコントローラ120またはフィールドネットワークコントローラ140が、マイクロプロセッサ100からの、送信を実行するための指示を必要とする場合は、出力処理プログラム214がそのような指示を発行する。
入力処理プログラム216は、PLCシステムバスコントローラ120および/またはフィールドネットワークコントローラ140によって受信された入力データを、制御プログラム230が使用するのに適した形式に再配置する。
シーケンス命令演算プログラム232は、ユーザプログラム236で使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。例えば、計測装置から得られた計測データに基づいて対象物の2次元形状データを生成するプログラムや、生成された形状データから高さや断面積などの特徴量を演算するプログラムなどが、シーケンス命令演算プログラム232に含まれる。
モーション演算プログラム234は、ユーザプログラム236による指示に従って実行され、コントローラ6からの計測情報の読み出しや、モータドライバ3A,3Bに対して出力する指令位置を算出するプログラムなどである。
その他のシステムプログラム220は、図3に個別に示したプログラム以外の、PLC1の各種機能を実現するためのプログラム群をまとめて示したものである。その他のシステムプログラム220は、モーション制御サイクルの周期を設定するプログラム222を含む。
モーション制御サイクルの周期は、制御目的に応じて適宜設定することができる。典型的には、モーション制御サイクルの周期を指定する情報をユーザがPLCサポート装置8へ入力する。すると、その入力された情報は、PLCサポート装置8からCPUユニット13へ転送される。モーション制御サイクルの周期を設定するプログラム222は、PLCサポート装置8からの情報を不揮発性メモリ106に格納させるとともに、システムタイマ108から指定されたモーション制御サイクルの周期で割り込み信号が発生されるように、システムタイマ108を設定する。CPUユニット13への電源投入時に、モーション制御サイクルの周期を設定するプログラム222が実行されることで、モーション制御サイクルの周期を指定する情報が不揮発性メモリ106から読み出され、読み出された情報に従ってシステムタイマ108が設定される。
モーション制御サイクルの周期を指定する情報の形式としては、モーション制御サイクルの周期を示す時間の値や、モーション制御サイクルの周期に関する予め用意された複数の選択肢のうちから1つを特定する情報(番号または文字)などを採用することができる。
本実施の形態に係るCPUユニット13において、モーション制御サイクルの周期を設定する手段としては、モーション制御サイクルの周期を指定する情報を取得するために用いられるPLCサポート装置8との通信手段、モーション制御サイクルの周期を設定するプログラム222、ならびにモーション制御サイクルを規定する割り込み信号の周期を任意に設定可能に構成されているシステムタイマ108の構成といった、モーション制御サイクルの周期を任意の設定するために用いられる要素が該当する。
リアルタイムOS200は、複数のプログラムを時間の経過に従い切り換えて実行するための環境を提供する。本実施の形態に係るPLC1においては、CPUユニット13のプログラム実行によって生成された出力データを他のユニットまたは他の装置へ出力(送信)するためのイベント(割り込み)として、出力準備割り込み(P)およびフィールドネットワーク送信割り込み(X)が初期設定される。リアルタイムOS200は、出力準備割り込み(P)またはフィールドネットワーク送信割り込み(X)が発生すると、マイクロプロセッサ100での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラプログラム212に切り換える。なお、リアルタイムOS200は、スケジューラプログラム212およびスケジューラプログラム212がその実行を制御するプログラムが何ら実行されていない場合に、その他のシステムプログラム210に含まれているプログラムを実行する。このようなプログラムとしては、たとえば、CPUユニット13とPLCサポート装置8との間の接続ケーブル10(USB)などを介した通信処理に関するものが含まれる。
(D.制御システムのパルス出力構成)
次に、PLCシステムSYSは、PLC1でシーケンス命令演算プログラム232やモーション演算プログラム234を実行することにより、CPUユニット13がパルス出力ユニット16に指令位置および指令速度を指令する。パルス出力ユニット16は、指令に従いパルス信号をモータドライバ3A,3Bに出力する。さらに、PLCシステムSYSでは、モータドライバ3A,3Bがパルス信号に基づきステッピングモータ4A,4Bを駆動する。具体的に、図を参照して、制御システムであるPLCシステムSYSのパルス出力構成について説明する。図4は、本実施の形態における制御システムのパルス出力構成を示すブロック図である。
PLCシステムSYSは、上位コントローラとしてのCPUユニット13と、パルス出力ユニット16と、モータドライバ3A,3Bとを有している。CPUユニット13とパルス出力ユニット16とは、PLCシステムバス11を介して接続され、CPUユニット13からパルス出力ユニット16に対して指令位置および指令速度を含む指令値が出力される。パルス出力ユニット16とモータドライバ3A,3Bとは、それぞれの信号配線3を介して接続され、パルス出力ユニット16からモータドライバ3A,3Bに対して指令に従うパルス信号が出力される。
上位コントローラであるCPUユニット13は、PLCシステムバス11を経由して一定周期でパルス出力ユニット16にパルス信号を出力するための指令値を出力している。ここで、一定周期を制御周期とも呼ぶ。パルス出力ユニット16も制御周期ごとに入力される指令値に基づいて、制御周期ごとにシステム設定として予めパルス出力ユニット16に定められたタイミングにパルス信号を生成し出力している。つまり、上位コントローラであるCPUユニット13とパルス出力ユニット16とは、PLCシステムバス11を経由して同期している。同期する方法としては、例えばIEEE1588規格のディストリビュートクロック方式などの方法を用いている。CPUユニット13は、パルス出力ユニット16に対して出力する指令値として整数の位置データ(指令位置)と整数の速度データ(指令速度)を与える。ここで、位置データ(指令位置)および速度データ(指令速度)は、例えばCiA402規格の”Command Position”および”Command Velocity”で定義することができる。例えば、モータを制御するアプリケーションをCPUユニット13で実行する場合、CPUユニット13は、モータの回転角および回転速度を制御するために位置データ(指令位置)および速度データ(指令速度)をパルス出力ユニット16に出力する。
PLCシステムバス11は、CPUユニット13とパルス出力ユニット16との間でデータを交換する通信ネットワークである。CPUユニット13とパルス出力ユニット16とを接続する通信ネットワークは、PLCシステムバス11に限られずフィールドネットワーク2であってもよい。CPUユニット13とパルス出力ユニット16との間に用いられる通信ネットワークは、少なくともCPUユニット13とパルス出力ユニット16とを同期させる同期手段を備えていればよい。また、CPUユニット13とパルス出力ユニット16との間は、複数の通信ネットワークで接続されてもよい。ただし、その場合は各通信ネットワークを接続するカプラ装置が各通信ネットワーク間での同期を保証する機能を有する必要がある。
指令に従うパルス信号を生成するパルス出力ユニット16について、さらに詳しく説明する。図5は、本実施の形態におけるパルス出力ユニット16の機能構成を示すブロック図である。図5に示すパルス出力ユニット16は、通信部161、処理部162、クロック生成部163、パルス出力部164およびパルス計数部165を有している。なお、パルス出力ユニット16は、図示していないが、CPU,ROM,RAMなどを含む。通信部161は、通信インターフェイス(IF)であり、PLCシステムバス11を経由してCPUユニット13とデータの交換を行う部分である。通信部161は、PLCシステムバス11を経由してCPUユニット13と同期する手段を有している。通信部161は、CPUユニット13から指令値として位置データ(指令位置)と速度データ(指令速度)を受信する。
処理部162は、受信した指令値に基づいて制御周期毎に出力するパルス数およびパルス周波数(パルス速度)を算出する。処理部162は、パルス数およびパルス周波数を算出する際、パルス計数部165からパルス出力部164から実際に出力されているパルス数の情報を受け取り、算出するパルス周波数を補正する。処理部162は、算出したパルス数およびパルス周波数をパルス出力部164に出力し、その制御周期で出力すべきパルス信号をパルス出力部164から出力することができるように制御している。
パルス出力部164は、処理部162で算出したパルス数およびパルス周波数に基づき、クロック生成部163が生成したクロック信号を分周してパルス信号を生成して出力する。パルス計数部165は、パルス出力部164が出力したパルス信号のパルス数を計数し、処理部162にフィードバックしている。
次に、指令位置および指令速度とパルス信号との関係についてさらに詳しく説明する。図6は、指令位置および指令速度について説明するための図である。図6(a)に示す波形は、指令位置および指令速度を指令したときのパルス信号の波形である。例えば、制御周期を1msとして、指令位置を1、指令速度を1000pps(pulse per second)と指令した場合、パルス信号は、パルス数が1でパルス周波数が1000ppsの波形となる。次に、指令位置を3、指令速度を2000ppsと指令した場合、パルス信号は、パルス数が2でパルス周波数が2000ppsの波形となる。なお、パルス数は、今回の指令位置の3から前回の指令位置の1を引いた2となる。さらに、指令位置を7、指令速度を4000ppsと指令した場合、パルス信号は、パルス数が4でパルス周波数が4000ppsの波形となり、指令位置を15、指令速度を8000ppsと指令した場合、パルス信号は、パルス数が8でパルス周波数が8000ppsの波形となる。
処理部162は、制御周期ごとに指令位置および指令速度を受け取ると、その制御周期に出力するパルス信号のパルス数およびパルス周波数を算出して、図6(a)に示したような波形のパルス信号をパルス出力部164から出力させる。処理部162での具体的な処理は、図6(b)に示すようにパルス信号の出力の直前にある出力パルス演算処理のタイミングで行われる。つまり、処理部162は、予め定められたタイミング(破線で示した位置)にパルス信号が出力できるように、予め指令位置および指令速度の指令値をCPUユニット13から受信しておき、出力パルス演算処理のタイミングでパルス信号のパルス数およびパルス周波数を算出する。例えば、処理部162は、図6(b)に示す指令位置P1および指令速度V1のタイミングでパルス信号を出力するためには、指令位置P1および指令速度V1の前のパルス信号が出力されている途中(例えば、70%のパルス信号が出力されたタイミング)でCPUユニット13から指令値を受信して出力パルス演算処理を実行する。
図6(a)で説明した例では、指令位置および指令速度が制御周期に収まる値で指令されているため、CPUユニット13が指令した指令位置および指令速度と、実際に出力されるパルス信号のパルス数およびパルス周波数との間で進みや遅れは発生しない。しかし、CPUユニット13が指令する指令位置および指令速度と出力されるパルス信号のパルス数およびパルス周波数との誤差により、指令位置および指令速度が制御周期に収まらない値の場合がある。指令位置および指令速度が制御周期に収まらない値の場合、パルス出力ユニット16は、CPUユニット13によってシステム設定として予め定められたタイミングに対して進んだまたは遅れたパルス信号を出力することになる。具体的に、図を参照しながら、システム設定として予めパルス出力ユニット16に定められたタイミングに対するパルス信号の進みまたは遅れを説明する。
図7は、パルス信号の進みまたは遅れについて説明するための図である。図7では、CPUユニット13からパルス速度を一定にする指令値をパルス出力ユニット16が受信した場合を例に説明する、図7(a)は、予め定められたタイミングに対するパルス信号の進みを示している。図7(b)は、予め定められたタイミングに対するパルス信号の遅れを示している。例えば、パルス数が8でパルス速度が8000ppsとなるようにCPUユニット13が指令位置および指令速度を指令した場合、8000ppsのパルス速度で1msの制御周期の間に8個分のパルスが収まるので、指令したパルス数が8であればパルス信号に進みも遅れも発生しない。
しかし、CPUユニット13で指令した指令位置および指令速度に基づいて制御周期に収まるパルス数を算出した結果、算出したパルス数の値に小数が含まれる場合、処理部162は、算出したパルス数の値を整数に丸める。そのため、処理部162で整数に丸めた分だけパルス信号に誤差が生じる。例えば、CPUユニット13が指令した指令位置および指令速度に基づき処理部162で算出したパルス数の小数以下を切り捨ててパルス数が7と算出された場合、パルス周波数が8000ppsであれば1msの制御周期の間に8個分のパルスが収まるが、指令したパルス数が7であるためパルス1個分だけ次のパルス信号が速く進むことになる。
図7(a)に示す波形では、予め定められたタイミングに対してパルス信号出力が進み、指令1、指令2、指令3、指令4と順に進みが大きくなっている。パルス出力部164では、パルス信号の出力処理において、パルス信号の出力を開始した後に次の制御周期でのパルス信号を連続的につなげる処理を行っているが、パルス信号出力の進みが大きくなるとパルス信号を連続的につなげる処理を行う前にパルス信号の出力が完了してしまう場合がある。そのため、パルス出力部164では、連続したパルス信号として生成することができなくなり、次の制御周期のパルス信号出力が開始されるまでの時間分だけパルス信号が途切れることになる。
逆に、処理部162で小数以下を切り上げた場合にパルス数が9でパルス周波数が8000ppsと算出されるようにCPUユニット13が指令位置および指令速度を指令することがある。この場合、1msの制御周期の間に8個分のパルスが収まるが、指令したパルス数が9であるためパルス1個分だけ次のパルス信号が遅れることになる。
図7(b)に示す波形では、予め定められたタイミング(指令1などの破線の位置)に対してパルス信号出力が遅れ、指令1、指令2、指令3、指令4と順に遅れが大きくなっている。ここで、パルス出力ユニット16は、例えばCPUユニット13から受信した指令値をバッファに1個保存することができる構成であって、指令2のパルス信号を出力中に指令3の指令値を受信した場合、バッファに指令3の指令値が保存される。しかし、指令2のパルス信号出力が遅れている場合、指令2のパルス信号を出力中にさらに指令4の指令値も受信することになり、既にバッファに指令3の指令値が保存されているため受信した指令4の指令値をバッファに保存することができずに破棄される。そして、指令2のパルス信号の出力が終了後、バッファに保存された指令3の指令値に基づいて指令3のパルス信号が出力されるが、指令3のパルス信号の出力が終了するまでに指令5の指令値を受信できない場合、図7(b)のように途切れることになる。
パルス速度を何ら補正せずに、図7(a)および図7(b)で示したように予め定められたタイミングに対してパルス信号出力の進みまたは遅れが生じた場合、パルス信号に途切れが発生する。パルス信号に途切れが発生すると、パルス速度が急激に変化することになる。図7(c)は、パルス信号に途切れが発生した場合のパルス速度の変化を示した図である。パルス出力ユニットでは、例えばパルス信号の出力を開始してからパルス速度を大きくし、ある値でパルス速度を一定に維持し、その後パルス速度を小さくする制御を行っている。しかし、図7(c)のようにパルス速度を一定に維持している期間にパルス信号の途切れが発生すると、スパイク状の急激なパルス速度の変化が発生する。急激なパルス速度の変化によって、駆動装置が例えばステッピングモータのようなモータの場合、モータ速度が急激に変化して異音や振動が発生することになる。さらに、モータ速度の急激な変化によって、モータがパルス信号に同期しなくなり脱調することがある。
そこで、パルス出力ユニット16では、パルス計数部165でパルス出力部164が実際に出力したパルス信号のパルス数を計数し、処理部162で計数したパルス数と指令位置から算出されるパルス数との誤差を補正している。具体的に、処理部162は、誤差に応じてパルス信号の速度(パルス速度)を補正して、指令に対するパルス信号出力の進みまたは遅れを小さくしている。パルス出力ユニット16では、制御周期ごとに実行される出力パルス演算処理(図6(b)参照)においてパルス速度の補正を行なっている。
出力パルス演算処理についてさらに詳しく説明する。図8および図9は、本実施の形態におけるパルス出力ユニット16の出力パルス演算処理を説明するためのフローチャートである。なお、図8に示すフローチャートでは、出力パルス演算処理が前回の指令に基づくパルス信号の70%を出力したタイミングで開始される例について説明する。但し、当該タイミングは例示であって、パルス信号の70%を出力したタイミングに限定されるものではなく、出力パルス演算処理が実行可能なタイミングであれば何れのタイミングであってもよい。出力パルス演算処理では、主にパルス進み/遅れ判定処理およびパルス出力処理の2つの処理が実行される。パルス進み/遅れ判定処理では、まず、CPUユニット13から指令値を受信して出力パルス演算処理を開始する時点(前回の指令に基づくパルス信号の70%を出力したタイミング)に期待されるパルス数を算出する。図8に示すフローチャートにおいて、処理部162は、期待値のパルス数=前回の指令値に基づき算出したパルス数×0.7(ステップS21)を実行して期待値のパルス数を算出する。具体的に、前回の指令値に基づき算出したパルス数が120パルスである場合、期待値のパルス数が120×0.7=84パルスとなる。
次に、パルス進み/遅れ判定処理では、パルス計数部165でパルス計数値を取得したタイミングでパルス信号出力の進みまたは遅れを判定する。図8に示すフローチャートにおいて、処理部162は、図5に示すパルス計数部165で得られた累積パルス数から、前回の指令値に基づき出力が開始されてから現時点に至るまでのパルス信号のパルス数を計数して、パルス計数値として取得する(ステップS22)。そして、処理部162は、進み/遅れパルス数=ステップS21で算出した期待値のパルス数−ステップS22で取得したパルス計数値の処理(ステップS23)を実行して、進み/遅れパルス数を算出する。ステップS22で取得したパルス計数値が、期待値のパルス数である84パルスより大きい値(例えば、90パルス)であればパルス信号に進みが発生しており、進み/遅れパルス数が負の値となる。一方、ステップS22で取得したパルス計数値が、期待値のパルス数である84パルスより小さい値(例えば、80パルス)であればパルス信号に遅れが発生しており、進み/遅れパルス数が正の値となる。次に、処理部162は、ステップS23で算出した進み/遅れパルス数が0(ゼロ)か否かを判断する(ステップS24)。算出した進み/遅れパルス数が0(ゼロ)である場合(ステップS24でYES)、処理部162は、予め定められたタイミングに対してパルス信号出力に進み/遅れがないと判定する(ステップS25)。算出した進み/遅れパルス数が0(ゼロ)でない場合(ステップS24でNO)、処理部162は、予め定められたタイミングに対してパルス信号出力に進み/遅れがあると判定する(ステップS26)。つまり、処理部162は、進み/遅れパルス数が負の値であればパルス信号に進みが発生していると判定し、進み/遅れパルス数が正の値であればパルス信号に遅れが発生していると判定する。
次に、パルス出力処理では、指令速度と算出した進み/遅れパルス数を元にパルス速度を補正する。図9に示すフローチャートは、パルス出力処理を説明するためのフローチャートである。まず、処理部162は、図8に示したステップS25で予め定められたタイミングに対してパルス信号出力に進み/遅れがないと判定したか、ステップS26で予め定められたタイミングに対してパルス信号出力に進み/遅れがあると判定したか否かを判定する(ステップS31)。ステップS26で予め定められたタイミングに対してパルス信号出力に進み/遅れがあると判定した場合(ステップS31:YES)、処理部162は、パルス速度の補正を行なう(ステップS32)。一方、ステップS25で予め定められたタイミングに対してパルス信号出力に進み/遅れがないと判定した場合(ステップS31:NO)、処理部162は、パルス速度の補正をスキップしてパルス出力処理を行なう(ステップS33)。処理部162は、パルス出力処理で、指令値に基づく指令速度に代えて、ステップS32で補正したパルス速度でパルス出力部164に出力して、パルス出力部164にパルス信号を生成させる。
次に、ステップS32でのパルス速度の補正についてさらに詳しく説明する。パルス速度の補正は、指令に対するパルス信号出力が進んでいる場合、指令速度よりパルス速度を遅くし、指令に対するパルス信号出力が遅れている場合、指令速度よりパルス速度を速くする。ただし、パルス速度を補正する幅が大きすぎると指令速度からのかい離が大きくなり、パルス速度が急激に変化する。一方、パルス速度を補正する幅が小さすぎると、指令に対するパルス信号出力の進みまたは遅れを十分に補正することができない。そのため、処理部162は、制御周期の1周期あたり所定の割合でパルス信号の速度を補正するように制御している。例えば、処理部162は、制御周期の1周期あたり2%以内でパルス信号の速度を補正する。
具体的に、処理部162が、制御周期の1周期あたり2%以内でパルス信号の速度を補正する一例として、指令速度を120000ppsとする場合について説明する。処理部162がパルス速度を2%速くする場合は、120000×1.02=122400ppsを補正後のパルス速度とする。また、処理部162がパルス速度を2%遅くする場合は、120000×0.98=117600ppsを補正後のパルス速度とする。
次に、制御周期の1周期あたり2%以内でパルス信号の速度を補正することについて図を用いて説明する。図10は、パルス信号のパルス速度を補正について説明するための図である。図10(a)では、例えば、指令速度を120000ppsとした場合、1ms(=0.001s)の制御周期においてパルス数が120パルスとなることが図示されている。
制御周期の1周期あたりパルス信号の速度を約0.83%速くする補正を図10(b)に示す。図10(b)では、指令速度を120000pps×1.083=約121000ppsを補正後のパルス速度とする。そのため、図10(b)では、1ms(=0.001s)の制御周期においてパルス数が121パルスとなっている。
一方、制御周期の1周期あたりパルス信号の速度を約0.83%遅くする補正を図10(c)に示す。図10(c)では、指令速度を120000pps×0.917=約119000ppsを補正後のパルス速度とする。そのため、図10(c)では、1ms(=0.001s)の制御周期においてパルス数が119パルスとなっている。
これまで説明したように、パルス出力ユニット16では、パルス計数部165で計数したパルス数に基づいて、処理部162でパルス信号の速度(パルス速度)を補正している。パルス出力ユニット16では、急激なパルス速度の変化を抑えることができる。図11は、パルス速度の補正後のパルス信号について説明するための図である。
図11(a)に示す波形では、予め定められたタイミング(指令1などの破線の位置)に対するパルス信号出力の進みが、指令1、指令2と順に大きくなっているが、パルス出力ユニット16でパルス速度を補正して速度ダウンすることで指令3において予め定められたタイミングに対するパルス信号出力の進みを解消している。しかし、補正でパルス速度を速度ダウンしたことで、図11(a)に示す波形では、予め定められたタイミングに対するパルス信号出力の遅れが、指令3、指令4と順に大きくなっている。そこで、パルス出力ユニット16は、指令4において予め定められたタイミングに対するパルス信号が出力されるタイミングで、パルス速度を補正して速度アップしている。パルス出力ユニット16でパルス速度を補正して速度アップすることで指令5において予め定められたタイミングに対するパルス信号出力の進みを解消している。なお、図11(a)に示す波形では、パルス出力ユニット16によってパルス速度を補正しているので、図7(a)および図7(b)で示したようなパルス信号の途切れが発生していない。
図11(b)は、パルス速度の補正を行なった場合のパルス速度の変化を示した図である。図11(b)においても、パルス出力ユニット16は、例えばパルス信号の出力を開始してからパルス速度を大きくし、ある値でパルス速度を一定に維持し、その後パルス速度を小さくする制御を行っている。パルス出力ユニット16は、パルス速度を一定に維持している期間に、パルス速度の補正を行なうことで、図7(c)のようなスパイク状の急激なパルス速度の変化に比べて図11(b)のような緩やかな変化に調整している。そのため、パルス出力ユニット16は、急激なパルス速度の変化を抑えて、駆動装置が例えばステッピングモータ4A,4Bのようなモータである場合に、モータ速度が急激に変化しないように制御して異音や振動が発生することを防止している。さらに、パルス出力ユニット16は、モータ速度が急激に変化しないように制御しているので、モータがパルス信号に同期しなくなって脱調することを防止することができる。
以上のように、本実施の形態に係るPLCシステムSYSは、モータドライバ3A,3Bおよびステッピングモータ4A,4Bで構成される駆動装置30,40と、駆動装置30,40に出力されるパルス信号のパルス数およびパルス速度を指令するCPUユニット13と、CPUユニット13での指令に基づき駆動装置30,40にパルス信号を出力するパルス出力ユニット16とを備えている。パルス出力ユニット16は、クロック信号を生成するクロック生成部163と、クロック信号を分周してパルス信号を生成し、CPUユニット13で指令したパルス数およびパルス速度のパルス信号を、予め定められたタイミングで出力するパルス出力部164と、出力するパルス信号のパルス数を計数するパルス計数部165と、パルス数の誤差に基づき、パルス出力部164で生成するパルス信号のパルス速度を補正する処理部162とを含む。そのため、パルス出力ユニット16では、予め定められたタイミングに対するパルス信号出力の進みまたは遅れを補正して、パルス信号の急激なパルス速度の変化を抑えることができる。
また、CPUユニット13は、位置を指令することでパルス信号のパルス数を指令し、パルス出力ユニット16は、今回指令された指令位置(位置データ)と前回指令された指令位置(位置データ)との差から指令されたパルス信号のパルス数を求める。
さらに、処理部162は、パルス出力部164から出力するパルス信号が予め定められたタイミングに対して進んでいる場合、CPUユニット13で指令したパルス速度よりも遅くなるようにパルス速度を補正する。また、処理部162は、パルス出力部164から出力するパルス信号が予め定められたタイミングに対して遅れている場合、CPUユニット13で指令したパルス速度よりも速くなるようにパルス速度を補正する。そのため、パルス出力ユニット16は、予め定められたタイミングに対するパルス信号出力の進みまたは遅れを補正して、急激なパルス速度の変化を抑えることができる。
処理部162は、CPUユニット13でパルス数およびパルス速度を指令する制御周期の1周期あたり、パルス信号の1パルス分の速度を補正する。そのため、パルス出力ユニット16は、パルス速度を補正する幅が大きすぎずまた小さすぎず、適正にパルス速度を変化させることができる。
(変形例)
(1)本実施の形態に係るCPUユニット13では、位置(図6に示す指令位置)を指令することでパルス信号のパルス数を指令しているが、これに限定されない。CPUユニット13が、今回の指令位置と前回の指令位置との差からパルス信号のパルス数を算出して、パルス数をパルス出力ユニット16に直接指令してもよい。
(2)本実施の形態に係るパルス出力ユニット16では、パルス信号の進みまたは遅れの原因が指令値(指令位置、指令速度)の整数を丸めることによる誤差であると説明したが、これに限定されない。パルス出力ユニット16は、例えば、パルス速度の分解能による誤差やクロック生成部163自体のハードウェアの誤差などでも、パルス信号の進みまたは遅れが発生する。ここで、パルス速度の分解能による誤差とは、パルス出力ユニット16が出力するパルス信号がクロック生成部163のクロック信号を分周して生成しているため、クロック信号を分周することができる範囲(分解能)までしかパルス速度を表現できないことで生じる誤差である。クロック生成部163自体のハードウェアの誤差とは、クロック生成部163を構成する素子の精度や温度による特性の変化などで生じる誤差である。
(3)本実施の形態に係るパルス出力ユニット16は、PLCシステムSYSの構成の1つとして説明したが、これに限定されない。パルス出力ユニット16は、例えば、上位コントローラに接続して駆動装置を駆動するだけの構成であってもよい。
(4)本実施の形態に係るパルス出力ユニット16では、CPUユニット13で指令したパルス速度を調整して、システム設定として予めパルス出力ユニット16に定められたタイミングに対するパルス信号出力の進みまたは遅れを補正する構成について説明したが、これに限定されない。例えば、図7に示した波形において途切れが発生する場合に、パルス出力ユニット16は、途切れる前に出力していたパルス信号を継続して出力するような補正であってもよい。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。