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