(58)【調査した分野】(Int.Cl.,DB名)
前記指定ユニットは、エンコーダから入力される信号をカウントするカウンタユニットであることを特徴とする請求項4に記載のプログラマブル・ロジック・コントローラ。
前記プログラム実行部は、前記ユーザプログラムにしたがって実行する内部演算によって前記指令値を決定することを特徴とする請求項1ないし3のいずれか1項に記載のプログラマブル・ロジック・コントローラ。
前記プログラム実行部は、前記ユーザプログラムを実行する周期であるスキャンタイムにしたがって前記第1デバイスメモリに記憶されている前記指令値を前記第2デバイスメモリにコピーすることを特徴とする請求項1ないし7のいずれか1項に記載のプログラマブル・ロジック・コントローラ。
前記出力部は、前記拡張ユニットの制御周期内で前記制御量のすべてを前記外部機器の位置に反映させるよう前記指令信号を生成し、前記拡張ユニットの制御周期と前記制御量とから求められる前記外部機器の移動速度が、前記外部機器について予め定められている上限速度を超える場合は、前記外部機器の移動速度が前記上限速度に一致するように前記制御量を削減することを特徴とする請求項1ないし9のいずれか1項に記載のプログラマブル・ロジック・コントローラ。
前記指令演算部は、n番目に更新された指令値とn+1番目に更新された指令値との差分に基づき前記制御量を演算することを特徴とする請求項10に記載のプログラマブル・ロジック・コントローラ。
基本ユニットと、前記基本ユニットと通信バスを介して通信し、外部機器に接続された拡張ユニットとを有し、ユーザプログラムを周期的に実行して外部機器を制御するプログラマブル・ロジック・コントローラの制御方法であって、
前記基本ユニットは、外部機器を制御するための指令値を第1デバイスメモリに記憶し、
前記拡張ユニットは、前記第1デバイスメモリに記憶されている指令値と同期した指令値が記憶される第2デバイスメモリに記憶された前回の指令値と前記第2デバイスメモリに記憶されている今回の指令値とに基づき前記外部機器の相対的な制御量を演算し、前記制御量を示す指令信号を生成して前記外部機器に出力し、
前記外部機器の位置は前記指令信号にしたがって追従制御され、当該追従制御が開始されたときの前記外部機器の現在位置が前記追従制御の初期位置とされることを特徴とするプログラマブル・ロジック・コントローラの制御方法。
ユーザプログラムを周期的に実行して外部機器を制御するプログラマブル・ロジック・コントローラの基本ユニットと通信バスを介して通信し、外部機器に接続された拡張ユニットであって、
前記外部機器を制御するための指令値を記憶する前記基本ユニットの第1デバイスメモリに記憶されている指令値と同期した指令値が記憶される第2デバイスメモリと、
前記第2デバイスメモリに記憶された前回の指令値と前記第2デバイスメモリに記憶されている今回の指令値とに基づき前記外部機器の相対的な制御量を演算する指令演算部と、
前記制御量を示す指令信号を生成して前記外部機器に出力する出力部と
を有し、
前記外部機器の位置は前記指令信号にしたがって追従制御され、当該追従制御が開始されたときの前記外部機器の現在位置が前記追従制御の初期位置とされることを特徴とする拡張ユニット。
【発明を実施するための形態】
【0009】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【0010】
はじめにプログラマブル・ロジック・コントローラ(PLC、単にプログラマブルコントローラと呼ばれてもよい)を当業者にとってよりよく理解できるようにするために、一般的なPLCの構成とその動作について説明する。
【0011】
図1は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。
図1に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置1と、工場等に設置される各種制御装置を統括的に制御するためのPLC(プログラマブル・ロジック・コントローラ)2とを備えている。ユーザプログラムは、ラダー言語やモーションフローなどのグラフィカルプログラミング言語を用いて作成されてもよいし、C言語などの高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザプログラムはラダープログラムとする。PLC2は、CPUが内蔵された基本ユニット3と1つないし複数の拡張ユニット4を備えている。基本ユニット3に対して1つないし複数の拡張ユニット4が着脱可能となっている。基本ユニット3はCPUユニットと呼ばれることもある。
【0012】
基本ユニット3には、表示部5及び操作部6が備えられている。表示部5には、基本ユニット3に取り付けられている各拡張ユニット4の動作状況などを表示することができ、表示部5の表示内容は、操作部6を操作することにより切り替えることができる。表示部5には、通常、PLC2内のデバイスの現在値(デバイス値)やPLC2内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー(補助リレー)、タイマー、カウンタ、データメモリ等の状態を示す情報である。
【0013】
拡張ユニット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には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
【0014】
プログラム作成支援装置1は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部7及び操作部8を備えている。PLC2を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置1を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置1内でニモニックコードに変換される。そして、プログラム作成支援装置1を、USB(Universal Serial Bus)などの通信ケーブル9を介してPLC2の基本ユニット3に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置1から基本ユニット3に送ると、そのラダープログラムが基本ユニット3内でマシンコードに変換され、基本ユニット3に備えられたメモリ内に記憶される。なお、ここではニモニックコードを基本ユニット3に送信するようにしているが、本発明はこれに限られず、例えばニモニックコードを更に中間コードに変換し、中間コードを基本ユニット3に送信するようにしてもよい。
【0015】
なお、
図1では示していないが、プログラム作成支援装置1の操作部8には、プログラム作成支援装置1に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置1は、USB以外の他の通信ケーブル9を介して、PLC2の基本ユニット3に対して着脱可能に接続されるような構成であってもよい。
【0016】
図2は、ラダープログラムの作成時にプログラム作成支援装置1の表示部7に表示されるラダー
図17の一例を示す図である。
図2に示すように、PLC2を制御するためのラダープログラムは、プログラム作成支援装置1の表示部7にマトリックス状に表示される複数のセル18内に仮想デバイスのシンボル19を適宜配置して、視覚的なリレー回路を表すラダー
図17を構築することにより作成される。
【0017】
ラダー
図17には、たとえば、10列×N行(Nは任意の自然数)のセル18が配置されている。そして、各行のセル18内に、
図2に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル19を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、1行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
【0018】
図2に示すリレー回路は、入力装置からの入力信号に基づいてオン/オフされる3つの仮想デバイス(以下、「入力デバイス」と呼ぶ。)のシンボル19a,19b,19cと、出力装置の動作を制御するためにオン/オフされる仮想デバイス(以下、「出力デバイス」と呼ぶ。)のシンボル19dとが適宜結合されることにより構成されている。
【0019】
各入力デバイスのシンボル19a,19b,19cの上方に表示されている文字(「R0001」、「R0002」及び「R0003」)は、その入力デバイスのデバイス名(アドレス名)21を表している。各入力デバイスのシンボル19a,19b,19cの下方に表示されている文字(「フラグ1」、「フラグ2」及び「フラグ3」)は、その入力デバイスに対応付けられたデバイスコメント22を表している。出力デバイスのシンボル19dの上方に表示されている文字(「原点復帰」)は、その出力デバイスの機能を表す文字列からなるラベル23である。
【0020】
図2に示す例では、デバイス名「R0001」及び「R0002」にそれぞれ対応する2つの入力デバイスのシンボル19a,19bが直列的に結合されることにより、AND回路が構成されている。また、これらの2つの入力デバイスのシンボル19a,19bからなるAND回路に対して、デバイス名「R0003」に対応する入力デバイスのシンボル19cが並列的に結合されることにより、OR回路が構成されている。すなわち、このリレー回路では、2つのシンボル19a,19bに対応する入力デバイスがいずれもオンした場合、又は、シンボル19cに対応する入力デバイスがオンした場合にのみ、シンボル19dに対応する出力デバイスがオンされるようになっている。
【0021】
図3は、
図1のプログラム作成支援装置1の電気的構成について説明するためのブロック図である。
図3に示すように、プログラム作成支援装置1には、CPU24、表示部7、操作部8、記憶装置25及び通信部26が備えられている。表示部7、操作部8、記憶装置25及び通信部26は、それぞれCPU24に対して電気的に接続されている。記憶装置25は、少なくともRAMを含む構成であり、ラダープログラム記憶部25aと、編集ソフト記憶部25bとを備えている。
【0022】
ユーザは、編集ソフト記憶部25bに記憶されている編集ソフトをCPU24に実行させて、操作部8を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、ラダープログラム記憶部25aに記憶される。また、ユーザは、必要に応じてラダープログラム記憶部25aに記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部26は、通信ケーブル9を介してプログラム作成支援装置1を基本ユニット3に通信可能に接続するためのものである。
【0023】
図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の一部として実装されてもよい。
【0024】
図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に接続された表示器(図示せず)等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【0025】
このように、プログラム作成支援装置1はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをPLC2に転送する。PLC2は、入出力リフレッシュ、ラダープログラムの実行およびEND処理を1サイクル(1スキャン)として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器(センサ等)からのタイミング信号に基づいて、各種出力機器(モータ等)を制御する。よって、PLC2は汎用のパーソナルコンピュータ(PC)とは全く異なる動きをする。
【0026】
<位置決めユニットを含むPLC>
図6を用いて位置決めユニットを含むPLCの構成例について説明する。
図6が示すように基本ユニット3と、拡張ユニット4である位置決めユニット4aおよびカウンタユニット4bは通信バスであるユニット外部バス90を介して接続されている。位置決めユニット4aには外部機器としてモータ45と、モータ45を駆動するドライバ44とが接続されている。モータ45が回転することで、ステージなどワークを搬送する搬送ユニットやワークを保持する保持ユニット、あるいはワーク自体などが位置決めされる。基本ユニット3は、入力データを格納するデバイス31と、出力データを格納するデバイス32と、ユーザプログラムであるラダープログラムを実行するプログラム実行部33とを有している。デバイス31、32はいわゆるデバイスメモリであり、記憶装置12に確保される。デバイス31、32はバッファメモリであってもよいが、ここではデバイスメモリと仮定する。プログラム実行部33はCPU10によって実現される。プログラム実行部33は、たとえば、ラダープログラムにしたがってデバイス31に入力された入力デバイス値に対して演算を実行し、位置決めユニット4aに対する指令値(出力デバイス値)を求め、デバイス32に記憶させる。
【0027】
位置決めユニット4aは、デバイス41、指令演算部42および出力部43を有している。デバイス31、32がバッファメモリで実現される場合は、デバイス41もバッファメモリで実現される。デバイス41は、基本ユニット3のデバイス32に記憶されている指令値と同期した指令値が記憶されるデバイスメモリである。指令演算部42は、デバイス41に記憶されていた前回の指令値とデバイス41に記憶されている今回の指令値とに基づき外部機器の相対的な制御量を演算する。出力部43は当該制御量を示す指令信号を生成して外部機器に出力する。ドライバ44は指令信号にしたがってモータ45を駆動する。
【0028】
カウンタユニット4bは入力機器の一例であり、外部機器の絶対的な位置を指定する指定ユニットとして機能する。たとえば、カウンタユニット4bは手動パルサなどのエンコーダ53から信号をカウントするカウント部52を有し、カウント値をデバイス54に格納する。デバイス54に格納されたカウント値は、上述したリフレッシュにより基本ユニット3のデバイス31に格納される。なお、カウンタユニット4bはオプションであり、必ずしも本発明に必要ではない。
【0029】
<外部機器の追従制御の問題点>
図7(A)、
図7(B)は外部機器の追従制御の問題点を説明するための図である。
図7(A)は手動パルサなどの操作量をカウンタユニットによりカウントした値(カウンタ座標)を示している。
図7(B)は位置決めユニットの制御量(位置決め座標)を示している。
図7(A)、
図7(B)が示すように、カウンタユニットの初期位置(例:110)と位置決めユニットの初期位置(例:10)は、通常、異なっている。よって、カウンタユニットによりカウントされた操作量をそのまま絶対的な制御量として位置決めユニットに反映させると、最初の制御周期における制御量が極端に大きくなってしまうことがある。これは外部機器を安定して制御する観点からは不都合なことが多い。そこで、本実施例では、追従制御が開始されたときの外部機器の現在位置が追従制御の初期位置とされる場合であっても、最初の制御量が極端に大きくならないように工夫する。
【0030】
図7(C)はカウンタ座標、追従制御開始フラグ、および、指令信号の関係を示すタイムシーケンスを示している。この例では、追従制御開始フラグが0から1に変化すると、追従制御が開始される。追従制御が開始されたときのカウンタ座標は前回の指令値であり、1つ目制御周期でのカウンタ座標は今回の指令値となる。前回の指令値は、位置決めユニット4aが備えるRAMなどに保持される。今回の指令値は、リフレッシュにより、デバイス54からデバイス31にコピーされ、デバイス31からデバイス32にコピーされ、さらに、デバイス32からデバイス41にコピーされ、デバイス41により保持される。指令演算部42は、前回の指令値と今回の指令値とに基づき外部機器であるモータ45の制御量を演算して求める。たとえば、指令演算部42は、前回の指令値と今回の指令値との差分を制御量として求める。
図7(C)や
図7(D)が示すように、前回の指令値が110であり、今回の指令値が120であれば、差分である10を示す指令信号が生成される。
図7(E)が示すように、追従制御の初期位置は、追従制御が開始されたときのモータ45の現在位置(モータ45によって駆動されるステージなどの現在位置)が使用される。つまり、前回の指令値と今回の指令値とに基づく制御量は、この初期位置に対する移動量として利用される。
【0031】
図7(B)と
図7(E)とを比較すると明らかなように、
図7(E)が示す本実施例ではカウンタ座標の初期位置(入力座標系における初期位置)と位置決め座標の初期位置(出力座標系における初期位置)とが一致していなくても、最初の制御周期における制御量が極端に大きくならないようになる。たとえば、
図7(B)では最初の制御周期における制御量が100であったものが、
図7(E)では10にまで削減されている。
【0032】
このような前回の指令値と今回の指令値との差分をラダープログラムによって求めることも可能である。しかし、この場合は、各ユーザがラダープログラムに差分演算を実行するための制御コード(ラダー図)を記述しなければならず、ユーザビリティに欠けるだろう。また、この記述をユーザが忘れてしまうと、最初の制御周期における制御量が極端に大きくなってしまう。一方で本実施例であれば、ユーザが自ら対策コードを記述しなくても、位置決めユニット4aの最初の制御周期における制御量が極端に大きくなってしまうことを抑制できる。そのため、ユーザのプログラミングの負担を軽減できるようになる。
【0033】
<基本ユニットの機能>
図8を用いて基本ユニット3の機能について説明する。CPU10は不図示の制御プログラムを実行することで、プログラム実行部33、デバイス制御部71および同期部72(オプション)として機能する。プログラム実行部33は、記憶装置12に記憶されているラダープログラム60を実行する機能である。プログラム実行部33は、演算の高速化のために、他の制御担当するCPUコアとは別のCPUコアにより実現されてもよいし、ASIC(特定用途集積回路)やFPGA(フィールドプログラマブルロジックアレイ)などにより専用の演算ユニットとして実現されてもよい。デバイス制御部71は、拡張ユニット4が保持しているデバイスの記憶内容と基本ユニット3が有しているデバイスの記憶内容とを一致させる機能(いわゆるリフレッシュ)などを含む。デバイス制御部71は、通常、
図5に示したリフレッシュのタイミングでデバイスの記憶内容を更新する。同期部72は拡張ユニット4の制御周期と基本ユニット3の制御周期とを同期させる機能である。デバイス制御部71は、ラダープログラム60にしたがって、この制御周期ごとにデバイスを更新してもよい。
【0034】
記憶装置12には出力系のデバイス32と入力系のデバイス31とが確保されている。出力系のデバイス32には、指令値用のデバイス61、追従制御の開始を拡張ユニット4に要求するための開始要求リレー62と、その他の情報を記憶するその他のデバイス63とが含まれている。なお、入力系のデバイス31には、位置制御ユニット4aが追従制御の開始に成功したことを示すリレーや追従制御を実行中であることを示すリレーが含まれてもよい。なお、リレーとは、一ビットのデータを保持するデバイスの通称である。入力系のデバイス31には、カウンタユニット4bにより取得されたカウンタ座標を保持するカウンタ座標デバイス64が含まれている。
【0035】
<位置決めユニットの機能>
図9を用いて位置決めユニット4aの機能について説明する。位置決めユニット4aは、制御プログラム80を実行するCPU46と、制御プログラム80などを記憶する記憶装置47と、ユニット外部バス90を介して基本ユニット3と通信する通信部50を有している。なお、CPU46の機能はASICやFPGAなどにより実現されてもよい。記憶装置47は、RAM、ROMなどを含む。記憶装置47には、入力系のデバイス41、バッファメモリ48およびワークメモリ49などが確保されている。入力系のデバイス41には、指令値用のデバイス81、基本ユニット3からの追従制御の開始を要求するための開始要求リレー82と、その他の情報を記憶するその他のデバイス83とが含まれている。なお、出力系のデバイスについては図示を省略しているが、これには位置制御ユニット4aが追従制御の開始に成功したことを示すリレーや追従制御を実行中であることを示すリレーが含まれる。バッファメモリ48は、ラダープログラムの実行中に基本ユニット3により読み書きされる記憶領域であり、上限速度を記憶する上限速度バッファ85と、減速レートを記憶する減速レートバッファ86とを含んでいる。ワークメモリ49は、CPU46が各種の演算をするうえで一時的にデータなどを格納する記憶領域である。この例では、前回の指令値88が記憶されているとともに、前回の指令値88と指令値用のデバイス81に保持されている今回の指令値とから求められた差分89が記憶されている。
【0036】
CPU46は、制御プログラム80を実行することで、デバイス制御部99、バッファメモリ制御部91、指令演算部42、座標管理部96、出力部43として機能する。デバイス制御部99は、基本ユニット3のデバイス制御部71と連携し、拡張ユニット4が保持しているデバイスの記憶内容と基本ユニット3が有しているデバイスの記憶内容とを一致させる機能である。バッファメモリ制御部91は、基本ユニット3がラダープログラムにしたがって発行するバッファ書き込みコマンドや読み出しコマンドにしたがって、バッファメモリ48にデータを書き込んだり、バッファメモリ48からデータを読み出して基本ユニット3に転送したりする。
【0037】
指令演算部42は、差分演算部92、制限部93、イベント検知部94および減速制御部95を有している。差分演算部92は、前回の指令値88と指令値用のデバイス81に保持されている今回の指令値とから差分89を演算により求める。制限部93は、外部機器の移動速度を上限速度以下になるようにクリップ(制限)する。イベント検知部94は外部機器の移動を停止すべきかどうかを監視する。減速制御部95は、外部機器を減速させるときの速度の変化を示す制御曲線を演算により求める。座標管理部96は、外部機器の現在位置(現在座標)を管理する。出力部43は、モータ45を制御するためのパルス信号を生成して出力する。通信部50はユニット外部バス90を介して基本ユニット3と通信する。指令値などのデバイス値はユニット外部バス90を
介して送受信される。
【0038】
<カウンタユニットの機能>
図10を用いてカウンタユニット4bの機能について説明する。カウンタユニット4bは他の拡張ユニット4と同様でCPU56と記憶装置57を有している。なお、CPU56の機能はASICやFPGAなどにより実現されてもよい。記憶装置57は、RAM、ROMなどを含む。記憶装置57は出力系のデバイス51を有している。出力系のデバイス51には、カウント部52のカウント値であるカウンタ座標を保持するカウンタ座標デバイス78が含まれている。CPU56は制御プログラム100を実行することで、デバイス制御部101とカウント部52として機能する。デバイス制御部101は、上述したリフレッシュのタイミングまたは基本ユニット3の制御周期と同期したタイミングで、基本ユニット3のデバイス制御部71と連携し、カウンタ座標デバイス78のカウンタ座標を基本ユニット3のカウンタ座標デバイス
64にコピーする。カウント部52は、エンコーダ53などの入力機器から入力されるパルスの数をカウントすることで、カウンタ座標(現在座標)を求め、カウンタ座標デバイス78に書き込む。通信部58はユニット外部バス90を介して基本ユニット3と通信する。カウンタ座標などのデバイス値はユニット外部バス90を介して送受信される。
【0039】
<基本ユニットのフローチャート>
図11を用いて基本ユニット3の処理について説明する。この処理は、基本ユニット3においてユーザプログラムであるラダープログラム60の開始が指示されると、CPU10によって実行される。S1でCPU10(デバイス制御部71)は、入力系のデバイスのリフレッシュ(入力リフレッシュ)と出力系のデバイスのリフレッシュ(出力リフレッシュ)を実行する。カウンタユニット4bのカウンタ座標と位置決めユニット4aへの指令値は、一括リフレッシュと同期リフレッシュとのいずれにより更新されてもよいが、ここでは同期リフレッシュにより更新されるものとする。このようにスキャンタイムにおいて一回実行される入出力リフレッシュを一括リフレッシュと呼ぶ。なお、スキャンタイム内で拡張ユニット4などの制御周期に同期して複数回実行されるリフレッシュを同期リフレッシュと呼ぶことにする。カウンタ座標や指令値のリフレッシュとしてはこのどちらのタイプのリフレッシュが採用されてもよい。同期リフレッシュは、デバイスメモリだけでなく、バッファメモリに対して適用されてもよいため、カウンタ座標や指令値はバッファメモリに格納されてもよい。
【0040】
S2でCPU10(プログラム実行部33)はラダープログラム60にしたがって位置決めユニット4aに対して追従制御の開始を指示する。たとえば、プログラム実行部33はデバイス制御部71に対して開始要求リレー62が保持しているデバイス値を0から1に変更するよう指示する。デバイス制御部71は、この指示に従って開始要求リレー62が保持しているデバイス値を1に変更する。開始要求リレー62も同期リフレッシュされるものとする。
【0041】
S3でCPU10は位置決めユニット4aの制御周期に連動した制御タイミングが到来したかどうかを判定する。CPU46はタイマーやカウンタを用いて制御周期を管理しており、制御周期に応じて様々な処理を実行する。制御周期が到来すると、CPU10は、S4に進む。
【0042】
S4でCPU10はデバイス制御部99やバッファメモリ制御部91を介して同期リフレッシュの対象となっているデバイスメモリやバッファメモリの値を更新する。たとえば、CPU10は、カウンタユニット4bの指令値であるカウンタ座標を基本ユニット3にコピーし、さらにコピーしたカウンタ座標を位置決めユニット4aにコピーする。これにより、カウンタユニット4bのカウンタ座標デバイス78に保持されているカウンタ座標が基本ユニット3のカウンタ座標デバイス64に格納される。また、カウンタ座標デバイス64に格納されたカウンタ座標がそのまま指令値として基本ユニット3の指令値用のデバイス61に格納される。さらに、指令値用のデバイス61に格納された指令値が位置決めユニット4aの指令値用のデバイス81に格納される。
【0043】
S5でCPU10(プログラム実行部33)はラダープログラム60にしたがって追従制御の終了条件が成立したかどうかを判定する。追従制御の終了条件が成立していなければ、S3に戻り、ラダープログラム60にしたがった処理を継続して実行する。一方で、追従制御の終了条件が成立していれば、CPU10はS6に進む。たとえば、追従制御の終了条件は、実行中リレーが0になったことであってもよい。実行中リレーは、位置決めユニット4aにおいて追従制御が実行中かどうかを示すリレーデバイスであり、1(オン)は追従制御を実行中であることを示し、0(オフ)は追従制御を終了したことを示す。
【0044】
S6でCPU10(プログラム実行部33)はラダープログラム60にしたがって位置決めユニット4aに対して追従制御の終了を指示する。たとえば、プログラム実行部33はデバイス制御部71に対して開始要求リレー62が保持しているデバイス値を1から0に変更するよう指示する。デバイス制御部71は、この指示に従って開始要求リレー62が保持しているデバイス値を0に変更する。その後、CPU10はエンド処理を実行してS1に戻り、次のスキャンタイムに移行する。
【0045】
このように前回の指令値と今回の指令値との差分を求めるなどの処理は位置決めユニット4aで実行されるため、ラダープログラム60には差分を求める処理が不要となる。つまり、本実施例は、ユーザのプログラミングの負担を軽減できる。
【0046】
<位置決めユニットのフローチャート>
図12を用いて位置決めユニット4aの処理について説明する。S11でCPU46は基本ユニット3によって追従制御を開始するよう要求されているかどうかを判定する。たとえば、CPU46は開始要求リレー82のデバイス値を取得し、その値が1になっているかどうかを判定する。デバイス値が0から1に変化すると、基本ユニット3によって追従制御を開始するよう要求されたと判定し、CPU46はS12に進む。S12でCPU46は追従制御の開始時に指令値用のデバイス81に記憶されているデバイス値(指令値)を読み出し、ワークメモリ49に前回の指令値88として保存する。
【0047】
S13でCPU46は位置決めユニット4aの制御周期に連動した制御タイミングが到来したかどうかを判定する。CPU46はタイマーやカウンタを用いて制御周期を管理しており、制御周期に応じて様々な処理を実行する。なお、基本ユニット3、位置決めユニット4aおよびカウンタユニット4bの制御周期はユニット外部バス90を通じて同期しているものとする。
【0048】
S14でCPU46(指令演算部42)は指令値用のデバイス81に記憶されている今回の指令値を読み出すとともに、ワークメモリ49から前回の指令値88を読み出し、これらに基づいて制御量を演算して求める。S15でCPU46(出力部43)は制御量に応じた指令信号を生成して外部機器に出力する。たとえば、出力部43は、制御量を制御周期で除算して移動速度を求め、移動速度に応じた周波数のパルスを生成して出力する。外部機器の移動速度とモータを駆動するためのパルス(指令信号)の周波数は比例している。このように、一つの制御周期の間に制御量のすべてが外部機器の位置に反映される。座標管理部96は、外部機器の現在位置に制御量を加算することで現在位置のデータ(座標)を更新する。
【0049】
S16でCPU46(指令演算部42)は今回の指令値を前回の指令値88としてワークメモリ49に保存する。S17でCPU46は追従制御の終了条件が満たされたかどうかを判定する。終了条件は、たとえば、外部機器の移動速度が0になったことであってもよい。終了条件が満たされると、CPU46は実行中リレーを0に書き換え、本処理を終了する。終了条件が満たされていなければ、CPU46はS13に戻る。
【0050】
<制御量の求め方の詳細>
図13を用いて制御量の決定方法について説明する。ここでは停止イベントが発生したときの減速制御と、移動速度を上限速度に制限する制御(クリップ)とを含めて説明するが、これらはオプションである。
【0051】
S21でCPU46(イベント検知部94)は外部機器の移動を停止すべき所定のイベント(停止イベント)が生じているかどうかを判定する。たとえば、イベント検知部94は外部機器の位置データや外部機器の位置を検知するセンサの検知結果に基づいて外部機器の位置が所定範囲外になっているかどうかを判定する。外部機器の位置が所定範囲外になると、イベント検知部94は停止イベントが発生したと判定する。なお、イベント検知部94は停止イベントが発生したことを基本ユニット3に伝達するために所定のリレーの値を1に設定してもよい。停止イベントが発生していなければ、CPU46はS22に進む。
【0052】
S22でCPU46(差分演算部92)は前回の指令値と今回の指令値との差分を求め、ワークメモリ49に記憶する。S23でCPU46(差分演算部92)は、前回の指令値と今回の指令値とから求められた差分と、制御周期とから移動速度を求める。移動速度は、たとえば、差分を制御周期で除算することで容易に求められる。
【0053】
S24でCPU46(制限部93)は、バッファメモリ48から上限速度を読み出し、移動速度が上限速度を超えているかどうかを判定する。移動速度が上限速度を超えていなければ、CPU46はS25をスキップし、S15に進む。一方で、移動速度が上限速度を超えていれば、CPU46はS25に進む。S25でCPU46(制限部93)は移動速度を上限速度にクリップし、制御量を補正する。たとえば、制限部93は移動速度として上限速度を採用し、上限速度に制御周期を乗算することで制御量を求め、求めた制御量を今回の制御量としてワークメモリ49に保存する。
【0054】
S21で停止イベントが検知されると、外部機器を停止させるべく、CPU46はS26に進む。S26でCPU46(減速制御部95)は、ワークメモリ49から前回の移動速度を読み出すとともに、バッファメモリ48から減速レートを読み出し、前回の移動速度と減速レートに基づき今回の移動速度を求める。たとえば、減速制御部95は、前回の移動速度に減速レートを乗算し、今回の移動速度を求める。減速レートは、たとえば、1.0未満の係数である。なお、減速レートは、所定の減速曲線を表す関数に基づき、減速制御部95によって動的に算出されてもよい。S27でCPU46(減速制御部95)は、移動速度が0になったかどうかを判定する。移動速度が0であれば、CPU46は、追従制御を終了すべく、
図12に示したS17に進む。一方で、移動速度が0でなければ、CPU46は、追従制御を継続するために、
図12に示したS15に進む。
【0055】
<追従制御のタイミングチャートの一例>
図14は追従制御のタイミングチャートの一例を示す図である。この例では、時刻t1に開始要求リレー82が1(オン)になり、追従制御が開始されている。また、この例では開始要求リレー82に加え、追従制御が実行中であることを示す実行中リレーと、追従制御を開始したことを報告するための開始報告リレーが用いられている。時刻tnから時刻tn+1までの期間が制御周期を表している。
【0056】
CPU46は時刻t1で開始要求リレー82が1になったことを認識する(S11)。CPU46は時刻t2で実行中リレーを1にセットするとともに開始報告リレーも1にセットする。さらに、CPU46は現在の指令値を前回の指令値として記憶する(S12)。CPU46は時刻t3以降で、前回の指令値と今回の指令値との差分(相対的な制御量)を求めて外部機器を追従制御する(S13〜S17)。制御量に応じて外部機器の移動速度と位置が変化する。この例では、時刻t10で停止イベントが発生している。CPU46は、停止イベントが発生したため、外部機器の減速制御を実行する(S21、S26〜S28)。減速制御により移動速度が徐々に減少し、位置の変化量も徐々に小さくなっている。時刻t13では移動速度が0となり、外部機器が停止する(S27)。移動速度が0となり、追従制御の終了条件が満たされたため、CPU46は実行中リレーを0に変更し、基本ユニット3に追従制御が終了したことを伝達している(S17)。
【0057】
<ユニット間同期>
スキャンタイムは一般に数ミリ秒であるが、位置決めユニット4aではより短い周期で外部機器の位置を制御したいという要請がある。しかし、1つのスキャンタイムで入出力デバイスのリフレッシュ(一括リフレッシュ)は1回だけである。そこで、本実施例では上述した同期リフレッシュを採用している。
【0058】
図15は一括リフレッシュと同期リフレッシュとの関係を示す図である。
図15が示すように、一括リフレッシュにより基本ユニット3と拡張ユニット4との間で入出力デバイスのデバイス値が更新される。たとえば、カウンタユニット4bのカウンタ座標は1つのスキャンタイムで一回だけ更新され、位置決めユニット4aへの指令値も1つのスキャンタイムで一回だけ更新される。しかし、これではより高速な追従制御を実現することができない。そこで、基本ユニット3の内部制御周期と拡張ユニット4の内部制御周期とを同期させ、この制御周期ごとにデバイスやバッファなどをリフレッシュする同期リフレッシュを本実施例では採用する。なお、ラダープログラムのうち、この制御周期に同期して実行されるプログラムはユニット間同期プログラムと呼ばれる。
図15において同期リフレッシュは、ラダープログラムの実行期間だけでなく、一括リフレッシュの実行期間やエンド処理の実行期間においても実行される。
【0059】
図16は同期リフレッシュの一例を示す図である。基本ユニット3のデバイス制御部71は、制御周期ごとに同期リフレッシュを実行する。
図16によれば、制御周期内でまず同期リフレッシュの対象として予め指定されているデバイスであるカウンタユニット4bのカウンタ座標Xnがリフレッシュされる。次に、デバイス制御部71は、カウンタ座標XnをそのままYn+1として指令値用のデバイス61に格納し、これを位置決めユニット4aの指令値用のデバイス81にコピーする。位置決めユニット4aは、指令値用のデバイス81が保持しているデバイス値を今回の指令値として内部処理(追従制御)を実行する。以下、同様に制御周期ごとに同期リフレッシュが実行される。
【0060】
このように同期リフレッシュを採用すると、位置決めユニット4aが内部処理を開始する時点では必ず最新の指令値を基本ユニット3から取得できるようになる。これにより、高速かつきめ細やかな追従制御が実現可能となる。
【0061】
<まとめ>
以上で説明したように、本実施例は、基本ユニット3と拡張ユニット4とを備え、ユーザプログラムを周期的に実行して外部機器を制御するPLC2に関するものである。基本ユニット3と拡張ユニット4は、通信バス(拡張バス)であるユニット外部バス90を介して通信し、外部機器(被制御装置16)を制御する。
【0062】
図6を用いて説明したように、基本ユニット3は、外部機器を制御するための指令値を記憶する第1デバイスメモリとしてデバイス32を有している。また、基本ユニット3は、ユーザプログラムを実行し、当該ユーザプログラムにしたがって指令値を更新するプログラム実行部33を有している。拡張ユニット4は、デバイス32に記憶されている指令値と同期した指令値が記憶される第2デバイスメモリであるデバイス41を有している。拡張ユニット4の指令演算部42は、デバイス41に記憶されていた前回の指令値とデバイス41に記憶されている今回の指令値とに基づき外部機器の相対的な制御量を演算する。出力部43は、当該制御量を示す指令信号を生成して、外部機器に出力する。とりわけ、
図7(E)を用いて説明したように、本実施例では、外部機器の位置は指令信号にしたがって追従制御され、追従制御が開始されたときの外部機器の現在位置が追従制御の初期位置とされる。また、拡張ユニット4の指令演算部42が相対的な制御量を演算するため、ユーザは、相対的な制御量を求めるためのプログラムをラダープログラム60内に記述する手間を省けるようになる。つまり、PLC2を用いて追従制御を実行する際のユーザの負担が軽減される。なお、位置決めユニット4aは、デバイス41とは別に、外部機器インターフェース用のデバイス41aを有している。このデバイス41aには、外部機器の現在位置が格納され、適宜、基本ユニット3(プログラム実行部33)から参照可能となっている。すなわち、指令演算部42は、デバイス41に記憶されている指令値に基づいて、外部機器の相対的な制御量を演算した後に、追従制御を実現するために制御量を出力部43に渡す一方、制御量に基づいてデバイス41aに格納された外部機器の現在位置を更新する。
【0063】
図6を用いて説明したように、外部機器は拡張ユニット4によって位置決めされるモータ45などの機器であってもよい。この場合、出力部43が出力する指令信号により伝達される制御量はモータ45の現在位置(回転角度など)またはモータ45によって駆動されるステージなどの現在位置に対する相対的な移動量となる。
図7(B)を用いて説明したように、絶対的な移動量をそのまま制御量としてしまうと、追従制御の開始時における移動量が極端に大きくなってしまう。しかし、相対的な移動量を位置決めユニット4aなどの拡張ユニット4が求めるため、追従制御の開始時における移動量が極端に大きくならないようになる。
【0064】
基本ユニット3が拡張ユニット4に送信する指令値は外部機器の絶対的な位置を示していてもよい。
図7(B)を用いて説明したように、絶対的な位置を指令値とすると、追従制御の開始時における移動量が極端に大きくなってしまうことがある。このようケースであっても本実施例では、相対的な移動量を位置決めユニット4aなどの拡張ユニット4が求めるため、追従制御の開始時における移動量が極端に大きくならないようになる。
【0065】
図6を用いて説明したように、カウンタユニット4bは、基本ユニット3とユニット外部バス90を介して通信し、絶対的な位置を指定する指定ユニットとして機能してもよい。プログラム実行部33はラダープログラム60にしたがってカウンタユニット4bから取得した絶対的な位置を指令値としてデバイス32に記憶させる。このようにカウンタユニット4bのカウンタ座標をそのまま指令値として位置決めユニット4aに渡されることになるため、ユーザは指令値を操作するようなラダープログラムを記述する手間を省ける。なお、指令値に対して多少の演算が施されてから位置決めユニット4aに渡されてもよい。
【0066】
このように、指定ユニットは、エンコーダ53から入力される信号をカウントするカウンタユニット4bであってもよいが、エンコーダ53はたとえば手動パルサなどであってもよい。また、指定ユニットは、アナログ/デジタル変換ユニットなど、入力信号をデジタル値に変換するユニットであってもよい。また、指定ユニットは、基本ユニット3であってもよい。基本ユニット3は、たとえばラダープログラム60を実行することで指令値を求めてもよい。つまり、基本ユニット3のプログラム実行部33は、ユーザプログラムにしたがって実行する内部演算によって指令値を決定してもよい。
【0067】
図8に示したように、基本ユニット3の制御周期と拡張ユニット4との制御周期とを同期させる同期部72がさらに設けられてもよい。
図16を用いて説明したように、プログラム実行部33は、デバイス制御部71を通じて、基本ユニット3の制御周期または拡張ユニット4の制御周期に同期してデバイス32に記憶されている指令値を位置決めユニット4aのデバイス41にコピーしてもよい。同様に、プログラム実行部33は、デバイス制御部71を通じて、基本ユニット3の制御周期または拡張ユニット4の制御周期に同期してカウンタユニット4bのデバイス54から基本ユニット3のデバイス31にコピーしてもよい。このような同期リフレッシュを採用すれば、位置決めユニット4aの内部処理(追従制御)を実行する際には最新の指令値を入手できるようになる。
【0068】
プログラム実行部33は、ユーザプログラムを実行する周期であるスキャンタイムにしたがってデバイス32に記憶されている指令値を位置決めユニット4aのデバイス41にコピーしてもよい。高速かつ精緻な制御が不要なケースでは、指令値を一括リフレッシュにより更新してもよい。同期リフレッシュは、一括リフレッシュと比較して実行回数が多いため、基本ユニット3や拡張ユニット4に対する処理負荷が重くなるだろう。よって、一括リフレッシュを採用すれば処理負荷が軽減されよう。
【0069】
基本ユニット3は、追従制御の開始を示す第1リレーデバイスである開始要求リレー62をさらに有していてもよい。この場合、位置決めユニット4aは、開始要求リレー62の記憶内容と一致した記憶内容を記憶する第2リレーデバイスとして開始要求リレー82を有することになる。指令演算部42は、開始要求リレー82の記憶内容に基づき追従制御の開始を認識する。これにより、位置決めユニット4aは明示的に追従制御の開始を認識可能となり、追従制御の開始時の指令値を基準値(前回の指令値)として確実に保持できるようになろう。
【0070】
指令演算部42は、拡張ユニット4の制御周期内で制御量のすべてを外部機器の位置に反映させるよう出力部43に指令信号を生成させる。S24、S25に関して説明したように、拡張ユニット4の制御周期と制御量とから求められる外部機器の移動速度が外部機器について予め定められている上限速度を超える場合、指令演算部42は、外部機器の移動速度が上限速度に一致するように制御量を削減してもよい。これにより、外部機器の移動速度を上限速度以下に制御可能となる。これは、外部機器などの耐久性を高めるために要求されてもよい。
【0071】
S21に関して説明したように、基本ユニット3は、外部機器の移動を停止させるべきイベントを検知するイベント検知部94を有していてもよい。指令演算部42は、このような停止イベントが検知されると、外部機器が減速するよう制御量を調整してもよい。これにより外部機器を安全に停止させることが可能となる。
【0072】
指令演算部42の動作は次のような概念として理解されてもよい。指令演算部42は、ユーザプログラムにしたがって外部機器についての追従制御が開始されると、追従制御が開始されたときの外部機器の位置を当該追従制御の初期位置とするとともに、ユーザプログラムにしたがって更新される時系列の指令値の変化量に基づき、外部機器の位置の制御量を演算する。この場合、指令演算部42は、n番目に更新された指令値(前回の指令値)とn+1番目に更新された指令値(今回の指令値)との差分に基づき制御量を演算することになろう。
【0073】
指令値やカウンタ座標はデバイスメモリではなくバッファメモリによって保持されてもよい。つまり、基本ユニット3や拡張ユニット4は外部機器を制御するための入力座標系における位置を示す指令値を記憶するデバイスまたはバッファであるメモリを有していてもよい。プログラム実行部33はユーザプログラムを実行し、当該ユーザプログラムにしたがってメモリに記憶される指令値を更新してもよい。拡張ユニット4の指令演算部42は、入力座標系(カウンタユニット4bの座標系)においてユーザプログラムにしたがって更新される時系列の指令値の変化量が、外部機器の位置を示す出力座標系(位置決めユニット4aの座標系)における外部機器の位置の変化量となるように、外部機器の位置の制御量を演算してもよい。これにより、ユーザは、相対的な制御量を求めるためのプログラムをラダープログラム60内に記述する手間を省けるようになる。つまり、PLC2を用いて追従制御を実行する際のユーザの負担が軽減される。
【0074】
上述した実施例では基本ユニット3、位置決めユニット4aおよびカウンタユニット4bはそれぞれ独立した筐体に収容されているものとして説明したが、これらの3つが1つの筐体に収容されていてもよい。たとえば、基本ユニット3に位置決めユニット4aおよびカウンタユニット4bが設けられていてもよい。また、基本ユニット3と位置決めユニット4aとが1つのユニットを形成し、カウンタユニット4bが独立したユニットであってもよい。基本ユニット3とカウンタユニット4bとが1つのユニットを形成し、位置決めユニット4aが独立したユニットであってもよい。さらに、位置決めユニット4aとカウンタユニット4bとが1つのユニットを形成し、基本ユニット3が独立したユニットであってもよい。いずれの場合であってもユーザプログラムにおいて相対的な制御量を求める必要がなくなるため、ユーザビリティが向上しよう。
上述した実施例では基本ユニット3と拡張ユニット4とがそれぞれ別の筐体に収容され、バスを介して接続されるものとして説明した。しかし、拡張ユニット4の機能は基本ユニット3に搭載されてもよい。たとえば、被制御装置16、ドライバ44、モータ45などの外部機器を直接的に基本ユニット3へ接続することが可能となる。この場合に、カウンタユニット4bは基本ユニット3の外部に設けられてもよいが、カウンタユニット4bの機能が基本ユニット3に内蔵されてもよい。