(57)【要約】【課題】電子カム動作を実行するのに用いられるカムテーブルを容易に変更可能とする。【解決手段】カム演算プログラム５０１は、電子カム５００の主軸の位相各々に対して電子カムの従動軸の変位を対応付けた配列であるカムテーブル５２０を用いて、電子カム動作を行う。カムテーブル生成プログラム５０４は、モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力されたカム定義変数に対応するカム曲線を配列にしたカムテーブル５２０を生成する。マイクロプロセッサ１００は、カムテーブル５２０を用いてカム演算プログラム５０１を実行する。マイクロプロセッサ１００は、カム定義変数の入力を受け付ければ、カムテーブル生成プログラム５０４を実行することでカムテーブル５２０を生成し、生成されたカムテーブル５２０をメインメモリ１０４に格納する。【選択図】図１０
2015122077.tif 000002
【特許請求の範囲】
【請求項１】
モーション制御とシーケンス制御とを実行する、制御装置であって、
プロセッサと、
電子カムの主軸の位相各々に対して前記電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、前記主軸の位相各々に対して当該電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのカム演算プログラムと、前記カムテーブルの格納に用いられる記憶部と、を備え、
前記記憶部は、前記モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力された前記カム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するためのカムテーブル生成プログラムをさらに含み、
前記プロセッサは、前記カムテーブルを用いてカム演算プログラムを実行し、モーション制御を行い、
さらに前記カム定義変数の入力を受け付け、前記カムテーブル生成プログラムを実行することで前記カムテーブルを生成し、生成された前記カムテーブルを前記記憶部に格納する、
ことを特徴とする制御装置。
【請求項２】
前記記憶部は、入力された前記カム定義変数と、前記カムテーブル生成プログラムが実行されることで生成されたカムテーブルを識別する情報とを対応づけて、前記記憶部に格納するカム定義変数記憶プログラムをさらに含むことを特徴とする、請求項１に記載の制御装置。
【請求項３】
前記モーション制御のタスクスケジュールの一周期は、定周期タスクと前記定周期タスクの空き時間に実行するシステムサービスとから構成され、
前記カムテーブル生成プログラムによる演算処理のタイミングを、前記定周期タスクとする、請求項１又は２に記載の制御装置。
【請求項４】
前記モーション制御のタスクスケジュールの一周期は、定周期タスクと定周期タスク処理の空き時間で実行するシステムサービスとから構成され、
前記カムテーブル生成プログラムによる演算処理のタイミングを、前記システムサービスとする、請求項１又は２に記載の制御装置。
【請求項５】
請求項１に記載の制御装置と、
前記制御装置に対してデータを入力可能な入力装置とを備え、
前記入力装置は、前記カム定義変数と前記カムテーブルを識別する情報とを対応付けた情報を、前記制御装置に送信することができる、コントローラ・システム。
【請求項６】
モーション制御とシーケンス制御とを実行する、制御装置の出力制御方法であって、
前記制御装置は、プロセッサと、記憶部とを有しており、
前記出力制御方法は、
前記プロセッサが、電子カムの主軸の位相各々に対して前記電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、前記主軸の位相各々に対して当該電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのカム演算プログラムを実行するステップと、
前記プロセッサが、前記モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力された前記カム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するステップと、
前記プロセッサが、生成された前記カムテーブルを前記記憶部に格納するステップと、
を備えたこと特徴とする出力制御方法。
【請求項７】
モーション制御とシーケンス制御とを実行する、制御装置を制御するプログラムであって、
前記制御装置は、プロセッサと、記憶部とを有しており、
電子カムの主軸の位相各々に対して前記電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、前記主軸の位相各々に対して当該電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのカム演算プログラムを実行するステップと、
前記モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力された前記カム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するステップと、
生成された前記カムテーブルを前記記憶部に格納するステップと、
を前記プロセッサに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、コントローラ・システム、制御装置における出力制御方法、およびプログラムに関し、特に、モーション制御とシーケンス制御とを実行する制御装置、制御装置における出力制御方法、およびプログラムに関する。
【背景技術】
【０００２】
ＰＬＣ（Programmable Logic Controller）は、たとえば、ユーザプログラムを実行するマイクロプロセッサを含むＣＰＵ（Central Processing Unit）ユニット、外部のスイッチやセンサからの信号入力および外部のリレー又はアクチュエータへの信号出力を担当するＩＯ（Input Output）ユニットといった複数のユニットで構成される。ＰＬＣは制御動作の実行の際には、それらのユニット間で、ユーザプログラム実行サイクルごとに、ＰＬＣシステムバスおよび／またはフィールドネットワークを経由してデータが授受される。
【０００３】
機械、設備などの動作の制御には、モータの運動を制御するためのモーション制御が含まれる場合がある。従来、このようなモーション制御、典型的には、モータを駆動するモータドライバに対して周期的に指令値を出力する制御処理（モーション演算プログラムの実行）は、ＰＬＣとは別に設けたモーションコントローラにおいて行われていた。
しかし、情報技術の分野においては、マイクロプロセッサや通信ネットワークの高速化が進展しつつある。そのため、ＰＬＣにおいてもそれらの技術を利用して、１つのマイクロプロセッサにおいて、ユーザプログラムだけでなくモーション演算プログラムも実行可能になってきた。
【０００４】
以下、特許文献１に記載のＰＬＣを用いて、ＰＬＣの基本構成および基本機能を説明する。
特許文献１に記載のＰＬＣは、モータを制御するモーション制御機能とシーケンス演算（ユーザプログラム）を実行するＰＬＣ機能とを、１つのＣＰＵで処理する構成を有している。より具体的には、ＰＬＣは、基本クロックの１サイクルごとに、「定周期モーション制御処理および各軸処理」と「高速シーケンス処理」とを実行し、さらに各基本クロックサイクル内の残りの時間において、「低速シーケンス処理」または「非定周期モーション制御処理」を実行する。
【０００５】
また、特許文献１に記載のＰＬＣは、モーション制御においては電子カムを実現している。電子カムは、機械式カムの動作を電子制御で実現するものであり、それによって例えばカムの段取り換え及びカム形状の微調整が自由に実現される。
具体的に、ＰＬＣでは、カムテーブルを用いて、各制御サイクルにおいて、主軸の位相の演算を行いさらに従軸の変位に対応する指令値をモータに対して出力する。カムテーブルとは、電子カムの主軸の位相（フルクローズドループ制御用のエンコーダの位置、サーボドライバ及び仮想サーボドライバの指令位置、エンコーダ、サーボドライバ、仮想サーボドライバのフィードバック位置のうちいずれか）の各々に対して、当該電子カムの従軸の変位を対応づけたテーブルである。
【０００６】
また、電子カム技術において、生産品目の変更や段取り変えに伴い、カム動作の変更を可能とすることが求められている。この「カム動作の変更」には、カム動作を規定したカムテーブルの変更を行うこと以外に、機械誤差等の影響を考慮してカムテーブルで定義されているカム動作の修正、調整を行うことが含まれる。
【０００７】
特許文献１に記載のＰＬＣでは、カム動作の変更は、演算対象のカムテーブルを切り換えることによって行われる。具体的には、複数のカムテーブルがメモリに記憶されており、ＣＰＵユニットは、制御対象の変更に伴いカムテーブルの切り換えの指示がなされると、演算対象のカムテーブルを切り換える。
【０００８】
特許文献２に記載のＰＬＣでは、カム動作の変更は、カムテーブルの値を書き換えることによって行われる。具体的には、ＣＰＵユニットは、専用の命令に基づいて、カムテーブルの値を書き換える。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第４９７３７９２号
【特許文献２】特許第４８０７４７５号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記の特許文献１及び特許文献２に記載のＰＬＣにおけるカム動作の変更は、下記の問題を有している。
【００１１】
特許文献１に開示されたＰＬＣは、演算対象のカムテーブルを切り換えることでカムテーブルを変更しているので、記憶されてないカムテーブルへの変更を行えない。そのため、記憶されていないカムテーブルの変更を行うためには、専用の設定ツールを接続して、次に専用ツールを用いてカム動作を規定するカム曲線を作成し、さらにカム曲線に従ったカムテーブルを制御装置に記憶させる必要がある。すなわち、電子カム動作を実行するのに用いられるカムテーブルを変更することに他の装置及び操作が必要になり、つまり簡単にカムテーブルの変更することができない。
【００１２】
特許文献２に開示されたＰＬＣは、専用の命令に基づいてＰＬＣに記憶されたカムテーブルの値を書き換えることでカムテーブルを変更しているので動作全体にかかわるカム曲線を変更する際には、カムテーブルの値をそれぞれ変更する必要がある。したがって、カムテーブルを大幅に変更する場合は、変更作業が増大する。
また、このＰＬＣでは、カムテーブルを変更するために実際に変更されるのはカムテーブルの値であるので、動作を規定したカム曲線がどのように変更されたのかを確認することが難しい。
【００１３】
本発明の目的は、電子カム動作を実行するのに用いられるカムテーブルを容易に変更可能とすることにある。
本発明の別の目的は、変更を行ったカムテーブルに対応するカム曲線を確認可能にすることにある。
【課題を解決するための手段】
【００１４】
本発明の一見地に係るモーション制御とシーケンス制御とを実行する。制御装置は、プロセッサと、記憶部とを備えている。
記憶部は、カム演算プログラムと、カムテーブルの格納に用いられる。カム演算プログラムは、電子カムの主軸の位相各々に対して電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのものである。
記憶部は、モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力されたカム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するためのカムテーブル生成プログラムをさらに含む。
プロセッサは、カムテーブルを用いてカム演算プログラムを実行し、モーション制御を行う。また、プロセッサは、さらにカム定義変数の入力を受け付け、カムテーブル生成プログラムを実行することでカムテーブルを生成し、生成されたカムテーブルを記憶部に格納する。
【００１５】
この制御装置では、プロセッサは、カムテーブルを用いてカム演算プログラムを実行することで、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行う。また、カム定義変数が入力されれば、プロセッサは、カムテーブル生成プログラムを実行することでカムテーブルを生成する。
以上に述べたようにカムテーブルを生成するのが制御装置のプロセッサなので、カムテーブルの変更を行うために専用の設定ツールを用いる必要がない。その結果、カムテーブルを容易に変更可能になる。
【００１６】
記憶部は、入力されたカム定義変数と、カムテーブル生成プログラムが実行されることで生成されたカムテーブルを識別する情報とを対応づけて、記憶部に格納するカム定義変数記憶プログラムをさらに含んでいてもよい。
この制御装置では、入力されたカム定義変数とカムテーブルを識別する情報とが対応付けて記憶部に格納されているので、必要に応じて現在動作中のカムテーブルに対応するカム定義変数を外部装置に取り出して、さらに外部装置においてカム定義変数からカム曲線を生成できる。その結果、変更を行ったカムテーブルに対応するカム曲線を外部装置で確認可能である。
【００１７】
モーション制御のタスクスケジュールは、定周期タスクと定周期タスク処理の空き時間に実行するシステムサービスとから構成され、カムテーブル生成プログラムによる演算処理のタイミングを、定周期タスクとしてもよい。
この制御装置では、カムテーブル生成プログラムが実行されるのが定周期タスクなので、演算終了のタイミングを制御ができる。したがって、制御装置が、生成したカムテーブルを用いたカム演算が可能になる時期を精度よく把握できる。
【００１８】
モーション制御のタスクスケジュールは、定周期タスクと定周期タスク処理の空き時間で実行するシステムサービスとから構成され、カムテーブル生成プログラムによる演算処理のタイミングを、システムサービスとしてもよい。
この制御装置では、カムテーブル生成プログラムが実行されるのがシステムサービスなので、定周期タスクに影響を与えることなく、カムテーブル生成プログラムを実行できる。このことは、カムテーブル生成プログラムの演算負荷による定周期タスクへの影響を解消するためには、特に有用である。
【００１９】
本発明の他の見地に係るコントローラ・システムは、上記の制御装置と、制御装置に対してデータを入力可能な入力装置とを備えている。入力装置は、カム定義変数とカムテーブルを識別する情報とを対応付けた情報を、制御装置に送信することができる。
このシステムでは、カム定義変数とカムテーブルを識別する情報とを対応付けた情報が制御装置に格納されているので、必要に応じて現在動作中のカムテーブルに対応するカム定義変数を外部装置に取り出して、さらに外部装置においてカム定義変数からカム曲線を生成できる。その結果、変更を行ったカムテーブルに対応するカム曲線を外部装置で確認可能である。
【００２０】
本発明の他の見地に係るモーション制御とシーケンス制御とを実行する、制御装置の出力制御方法では、制御装置は、プロセッサと、記憶部とを備えている。
出力制御方法は、以下のステップを備えている。
◎プロセッサが、電子カムの主軸の位相各々に対して電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのカム演算プログラムを実行するステップ。
◎プロセッサが、モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力されたカム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するステップ。
◎プロセッサが、生成されたカムテーブルを記憶部に格納するステップ。
なお、上記のステップの順番は限定されないし、複数のステップが同時にまたは一部重複して実行されてもよい。
【００２１】
この出力制御方法では、プロセッサが、カムテーブルを用いてカム演算プログラムを実行することで、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行う。さらに、カム定義変数が入力されれば、プロセッサが、カムテーブル生成プログラムを実行することでカムテーブルを生成する。
以上に述べたようにカムテーブルを生成するのは制御装置のプロセッサなので、カムテーブルの変更を行うために専用の設定ツールを用いる必要がない。その結果、カムテーブルを容易に変更できる。
【００２２】
本発明のさらに他の見地に係るモーション制御とシーケンス制御とを実行する、制御装置を制御するプログラムでは、制御装置は、プロセッサと、記憶部とを備えている。
プログラムは、プロセッサに以下のステップを実行させる。
◎電子カムの主軸の位相各々に対して電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのカム演算プログラムを実行するステップ。
◎モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力されたカム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するステップ。
◎生成されたカムテーブルを記憶部に格納するステップ。
なお、上記のステップの順番は限定されないし、複数のステップが同時にまたは一部重複して実行されてもよい。
【００２３】
このプログラムでは、プロセッサが、カムテーブルを用いてカム演算プログラムを実行することで、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行う。さらに、カム定義変数が入力されれば、プロセッサがカムテーブルを生成する。
以上に述べたようにカムテーブルを生成するのは制御装置のプロセッサなので、カムテーブルの変更を行うために専用の設定ツールを用いる必要がない。その結果、カムテーブルを容易に変更できる。
【発明の効果】
【００２４】
本発明によれば、電子カム動作を行う制御装置において、カム動作を行うカムテーブルを容易に変更可能になる。
【図面の簡単な説明】
【００２５】
【図１】ＰＬＣシステムの概略構成を示す模式図である。
【図２】ＣＰＵユニットのハードウェア構成を示す模式図である。
【図３】ＣＰＵユニットで実行されるソフトウェア構成を示す模式図である。
【図４】制御プログラムによって提供されるモーション制御の概略の処理手順を示すフローチャートである。
【図５】高優先度定周期タスクにモーション制御命令を記載したときのデータフローを表した図である。
【図６】低優先度定周期タスクにモーション制御命令を記載したときのデータフローを表した図である。
【図７】電子カムの機能概要を表した図である。
【図８】電子カムの動作を視覚的に説明するための図である。
【図９】電子カムのカム曲線を示した図である。
【図１０】電子カムに関するシステム構成を表した図である。
【図１１】カムデータに関する構造体配列を示した図である。
【図１２】カムテーブルのデータ構造を表した図である。
【図１３】カムテーブルの生成処理を説明するための図である。
【図１４】カムテーブルを生成する手順を示したフローチャートである。
【図１５】システムサービスの実行タイミングを示した図である。
【図１６】ＣＰＵユニットに接続して用いられるＰＬＣサポート装置のハードウェア構成を示す模式図である。
【図１７】ＣＰＵユニットとＰＬＣサポート装置におけるデータ処理を示す模式図である。
【図１８】カムテーブル生成プログラムを実現する制御命令の概要を示す模式図である。
【図１９】制御命令の実行イメージを示す模式図である。
【図２０】制御命令の制御手順を示したフローチャートである。
【図２１】カム曲線を演算しメモリへ値を反映する手順を示したフローチャートである。
【図２２】カムテーブル生成を説明するためのグラフ（カム曲線）である。
【図２３】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【図２４】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【図２５】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【図２６】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【図２７】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【図２８】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【図２９】カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルの値を示す表である。
【発明を実施するための形態】
【００２６】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００２７】
＜Ａ．システム構成＞
本実施の形態に係るＰＬＣ１は、モータの運動を制御するためのモーション制御機能を有する。まず、図１を参照して、ＰＬＣ１のシステム構成について説明する。
【００２８】
図１は、ＰＬＣシステムの概略構成を示す模式図である。図１に示すように、ＰＬＣシステムＳＹＳは、ＰＬＣ１と、ＰＬＣ１とフィールドネットワーク２を介して接続される複数のサーボモータドライバ３およびリモートＩＯターミナル５と、フィールド機器である検出スイッチ６およびリレー７とを含む。また、ＰＬＣ１には、接続ケーブル１０などを介してＰＬＣサポート装置８が接続される。
【００２９】
ＰＬＣ１は、主たる演算処理を実行するＣＰＵユニット１３（制御装置）と、１つ以上のＩＯユニット１４と、特殊ユニット１５とを含む。これらのユニットは、ＰＬＣシステムバス１１を介して、データを互いに遣り取りできるように構成される。また、これらのユニットには、電源ユニット１２によって適切な電圧の電源が供給される。なお、ＰＬＣ１として構成される各ユニットは、ＰＬＣメーカーが提供するものであるので、ＰＬＣシステムバス１１は、一般にＰＬＣメーカーごとに独自に開発され、使用されている。これに対して、後述するようにフィールドネットワーク２については、異なるメーカーの製品同士が接続できるように、その規格などが公開されている場合も多い。
【００３０】
ＣＰＵユニット１３の詳細については、図２を参照して後述する。
ＩＯユニット１４は、一般的な入出力処理に関するユニットであり、オン／オフといった２値化されたデータの入出力を司る。すなわち、ＩＯユニット１４は、検出スイッチ６などのセンサが何らかの対象物を検出している状態（オン）および何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット１４は、リレー７またはアクチュエータといった出力先に対して、活性化するための指令（オン）および不活性化するための指令（オフ）のいずれかを出力する。
【００３１】
特殊ユニット１５は、アナログデータの入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット１４ではサポートしない機能を有する。
【００３２】
フィールドネットワーク２は、ＣＰＵユニット１３と遣り取りされる各種データを伝送する。フィールドネットワーク２としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワークを用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。本実施の形態に係るＰＬＣシステムＳＹＳでは、典型的に、本実施の形態においては、産業用イーサネット（登録商標）であるＥｔｈｅｒＣＡＴ（登録商標）をフィールドネットワーク２として採用する場合の構成について例示する。
【００３３】
なお、図１には、ＰＬＣシステムバス１１およびフィールドネットワーク２の両方を有するＰＬＣシステムＳＹＳを例示するが、一方のみを搭載するシステム構成を採用することもできる。たとえば、フィールドネットワーク２ですべてのユニットを接続してもよい。あるいは、フィールドネットワーク２を使用せずに、サーボモータドライバ３をＰＬＣシステムバス１１に直接接続してもよい。さらに、フィールドネットワーク２の通信ユニットをＰＬＣシステムバス１１に接続し、ＣＰＵユニット１３から当該通信ユニット経由で、フィールドネットワーク２に接続された機器との間の通信を行なうようにしてもよい。
【００３４】
サーボモータドライバ３は、フィールドネットワーク２を介してＣＰＵユニット１３と接続されるとともに、ＣＰＵユニット１３からの指令値に従ってサーボモータ４を駆動する。より具体的には、サーボモータドライバ３は、ＰＬＣ１から一定周期で、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボモータドライバ３は、サーボモータ４の軸に接続されている位置センサ（ロータリーエンコーダ）やトルクセンサといった検出器から、位置、速度（典型的には、今回位置と前回位置との差から算出される）、トルクといったサーボモータ４の動作に係る実測値を取得する。そして、サーボモータドライバ３は、ＣＰＵユニット１３からの指令値を目標値に設定し、実測値をフィードバック値として、フィードバック制御を行なう。すなわち、サーボモータドライバ３は、実測値が目標値に近づくようにサーボモータ４を駆動するための電流を調整する。
なお、サーボモータドライバ３は、サーボモータアンプと称されることもある。
【００３５】
また、図１には、サーボモータ４とサーボモータドライバ３とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００３６】
図１に示すＰＬＣシステムＳＹＳのフィールドネットワーク２には、さらに、リモートＩＯターミナル５が接続されている。リモートＩＯターミナル５は、基本的には、ＩＯユニット１４と同様に、一般的な入出力処理に関する処理を行なう。より具体的には、リモートＩＯターミナル５は、フィールドネットワーク２でのデータ伝送に係る処理を行なうための通信カプラ５２と、１つ以上のＩＯユニット５３とを含む。これらのユニットは、リモートＩＯターミナルバス５１を介して、データを互いに遣り取りできるように構成される。
なお、ＰＬＣサポート装置８については後述する。
【００３７】
＜Ｂ．ＣＰＵユニットのハードウェア構成＞
次に、図２を参照して、ＣＰＵユニット１３のハードウェア構成について説明する。
図２は、ＣＰＵユニットのハードウェア構成を示す模式図である。図２に示すように、ＣＰＵユニット１３は、マイクロプロセッサ１００と、チップセット１０２と、メインメモリ１０４と、不揮発性メモリ１０６と、システムタイマ１０８と、ＰＬＣシステムバスコントローラ１２０と、フィールドネットワークコントローラ１４０と、ＵＳＢコネクタ１１０とを含む。チップセット１０２と他のコンポーネントとの間は、各種のバスを介してそれぞれ結合されている。
【００３８】
マイクロプロセッサ１００およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１００は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１００に必要な命令コードを生成する。さらに、チップセット１０２は、マイクロプロセッサ１００での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００３９】
ＣＰＵユニット１３は、記憶手段として、メインメモリ１０４および不揮発性メモリ１０６を有する。
【００４０】
メインメモリ１０４は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１３への電源投入後にマイクロプロセッサ１００で実行されるべき各種プログラムを保持する。また、メインメモリ１０４は、マイクロプロセッサ１００による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４としては、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）といったデバイスが用いられる。
【００４１】
一方、不揮発性メモリ１０６は、リアルタイムＯＳ（Operating System）、ＰＬＣ１のシステムプログラム、ユーザプログラム、モーション演算プログラム、システム設定パラメータといったデータを不揮発的に保持する。これらのプログラムやデータは、必要に応じて、マイクロプロセッサ１００がアクセスできるようにメインメモリ１０４にコピーされる。このような不揮発性メモリ１０６としては、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体や、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒体などを用いることもできる。
【００４２】
システムタイマ１０８は、一定周期ごとに割り込み信号を発生してマイクロプロセッサ１００に提供する。典型的には、ハードウェアの仕様によって、複数の異なる周期でそれぞれ割り込み信号を発生するように構成されるが、ＯＳ（Operating System）やＢＩＯＳ（Basic Input Output System）などによって、任意の周期で割り込み信号を発生するように設定することもできる。このシステムタイマ１０８が発生する割り込み信号を利用して、後述するようなモーション制御サイクルごとの制御動作が実現される。
【００４３】
ＣＰＵユニット１３は、通信回路として、ＰＬＣシステムバスコントローラ１２０およびフィールドネットワークコントローラ１４０を有する。
【００４４】
バッファメモリ１２６は、ＰＬＣシステムバス１１を介して他のユニットへ出力されるデータ（以下「出力データ」とも称す。）の送信バッファ、および、ＰＬＣシステムバス１１を介して他のユニットから入力されるデータ（以下「入力データ」とも称す。）の受信バッファとして機能する。なお、マイクロプロセッサ１００による演算処理によって作成された出力データは、原始的にはメインメモリ１０４に格納される。そして、特定のユニットへ転送されるべき出力データは、メインメモリ１０４から読み出されて、バッファメモリ１２６に一時的に保持される。また、他のユニットから転送された入力データは、バッファメモリ１２６に一時的に保持された後、メインメモリ１０４に移される。
【００４５】
ＤＭＡ制御回路１２２は、メインメモリ１０４からバッファメモリ１２６への出力データの転送、および、バッファメモリ１２６からメインメモリ１０４への入力データの転送を行なう。
【００４６】
ＰＬＣシステムバス制御回路１２４は、ＰＬＣシステムバス１１に接続される他のユニットとの間で、バッファメモリ１２６の出力データを送信する処理および入力データを受信してバッファメモリ１２６に格納する処理を行なう。典型的には、ＰＬＣシステムバス制御回路１２４は、ＰＬＣシステムバス１１における物理層およびデータリンク層の機能を提供する。コネクタ１３０は、ＰＬＣシステムバス制御回路１２４と外部とのインターフェースである。
【００４７】
フィールドネットワークコントローラ１４０は、フィールドネットワーク２を介したデータの遣り取りを制御する。すなわち、フィールドネットワークコントローラ１４０は、用いられるフィールドネットワーク２の規格に従い、出力データの送信および入力データの受信を制御する。上述したように、本実施の形態においてはＥｔｈｅｒＣＡＴ（登録商標）規格に従うフィールドネットワーク２が採用されるので、通常のイーサネット（登録商標）通信を行なうためのハードウェアを含む、フィールドネットワークコントローラ１４０が用いられる。ＥｔｈｅｒＣＡＴ（登録商標）規格では、通常のイーサネット（登録商標）規格に従う通信プロトコルを実現する一般的なイーサネット（登録商標）コントローラを利用できる。但し、フィールドネットワーク２として採用される産業用イーサネット（登録商標）の種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネット（登録商標）コントローラが用いられる。また、産業用イーサネット（登録商標）以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。
【００４８】
ＤＭＡ制御回路１４２は、メインメモリ１０４からバッファメモリ１４６への出力データの転送、および、バッファメモリ１４６からメインメモリ１０４への入力データの転送を行なう。
【００４９】
フィールドネットワーク制御回路１４４は、フィールドネットワーク２に接続される他の装置との間で、バッファメモリ１４６の出力データを送信する処理および入力データを受信してバッファメモリ１４６に格納する処理を行なう。典型的には、フィールドネットワーク制御回路１４４は、フィールドネットワーク２における物理層およびデータリンク層の機能を提供する。コネクタ１５０は、フィールドネットワークコントローラ１４０と外部とのインターフェースである。
【００５０】
ＵＳＢコネクタ１１０は、ＰＬＣサポート装置８とＣＰＵユニット１３とを接続するためのインターフェースである。典型的には、ＰＬＣサポート装置８から転送される、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なプログラムなどは、ＵＳＢコネクタ１１０を介してＰＬＣ１に取込まれる。
【００５１】
＜Ｃ．ＣＰＵユニットのソフトウェア構成＞
次に、図３を参照して、本実施の形態に係る各種機能を提供するためのソフトウェア群について説明する。これらのソフトウェアに含まれる命令コードは、適切なタイミングで読み出され、ＣＰＵユニット１３のマイクロプロセッサ１００によって実行される。
【００５２】
図３は、ＣＰＵユニットで実行されるソフトウェア構成を示す模式図である。図３を参照して、ＣＰＵユニット１３で実行されるソフトウェアとしては、リアルタイムＯＳ２００と、システムプログラム２１０と、ユーザプログラム２３６との３階層になっている。
【００５３】
リアルタイムＯＳ２００は、ＣＰＵユニット１３のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ１００がシステムプログラム２１０およびユーザプログラム２３６を実行するための基本的な実行環境を提供する。このリアルタイムＯＳは、典型的には、ＰＬＣのメーカーあるいは専門のソフトウェア会社などによって提供される。
【００５４】
システムプログラム２１０は、ＰＬＣ１としての機能を提供するためのソフトウェア群である。具体的には、システムプログラム２１０は、スケジューラプログラム２１２と、出力処理プログラム２１４と、入力処理プログラム２１６と、シーケンス命令演算プログラム２３２と、モーション演算プログラム２３４と、その他のシステムプログラム２２０とを含む。なお、一般には出力処理プログラム２１４および入力処理プログラム２１６は、連続的（一体として）に実行されるので、これらのプログラムを、ＩＯ処理プログラム２１８と総称する場合もある。
【００５５】
ユーザプログラム２３６は、ユーザにおける制御目的に応じて作成される。すなわち、ＰＬＣシステムＳＹＳを用いて制御する対象のライン（プロセス）などに応じて、任意に設計されるプログラムである。
【００５６】
後述するように、ユーザプログラム２３６は、シーケンス命令演算プログラム２３２およびモーション演算プログラム２３４と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム２３６は、シーケンス命令演算プログラム２３２およびモーション演算プログラム２３４によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム２３６、シーケンス命令演算プログラム２３２、およびモーション演算プログラム２３４を、制御プログラム２３０と総称する場合もある。
【００５７】
このように、ＣＰＵユニット１３のマイクロプロセッサ１００は、記憶手段に格納されたシステムプログラム２１０およびユーザプログラム２３６を実行する。
【００５８】
以下、各プログラムについてより詳細に説明する。
ユーザプログラム２３６は、上述したように、ユーザにおける制御目的（たとえば、対象のラインやプロセス）に応じて作成される。ユーザプログラム２３６は、典型的には、ＣＰＵユニット１３のマイクロプロセッサ１００で実行可能なオブジェクトプログラム形式になっている。このユーザプログラム２３６は、ＰＬＣサポート装置８などにおいて、ラダー言語などによって記述されたソースプログラムがコンパイルされることで生成される。そして、生成されたオブジェクトプログラム形式のユーザプログラム２３６は、ＰＬＣサポート装置８から接続ケーブル１０を介してＣＰＵユニット１３へ転送され、不揮発性メモリ１０６などに格納される。
【００５９】
スケジューラプログラム２１２は、出力処理プログラム２１４、入力処理プログラム２１６、および制御プログラム２３０について、各実行サイクルでの処理開始および処理中断後の処理再開を制御する。より具体的には、スケジューラプログラム２１２は、ユーザプログラム２３６およびモーション演算プログラム２３４の実行を制御する。
【００６０】
本実施の形態に係るＣＰＵユニット１３では、モーション演算プログラム２３４に適した一定周期の実行サイクル（モーション制御サイクル）を処理全体の共通サイクルとして採用する。そのため、１つのモーション制御サイクル内で、すべての処理を完了することは難しいので、実行すべき処理の優先度などに応じて、各モーション制御サイクルにおいて実行を完了すべき処理と、複数のモーション制御サイクルに亘って実行してもよい処理とが区分される。スケジューラプログラム２１２は、これらの区分された処理の実行順序などを管理する。より具体的には、スケジューラプログラム２１２は、各モーション制御サイクル期間内において、より高い優先度が与えられているプログラムほど先に実行する。
【００６１】
出力処理プログラム２１４は、ユーザプログラム２３６（制御プログラム２３０）の実行によって生成された出力データを、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０へ転送するのに適した形式に再配置する。ＰＬＣシステムバスコントローラ１２０またはフィールドネットワークコントローラ１４０が、マイクロプロセッサ１００からの、送信を実行するための指示を必要とする場合は、出力処理プログラム２１４がそのような指示を発行する。
【００６２】
入力処理プログラム２１６は、ＰＬＣシステムバスコントローラ１２０および／またはフィールドネットワークコントローラ１４０によって受信された入力データを、制御プログラム２３０が使用するのに適した形式に再配置する。
【００６３】
シーケンス命令演算プログラム２３２は、ユーザプログラム２３６で使用されるある種のシーケンス命令が実行されるときに呼び出されて、その命令の内容を実現するために実行されるプログラムである。
【００６４】
モーション演算プログラム２３４は、ユーザプログラム２３６による指示に従って実行され、サーボモータドライバ３やパルスモータドライバといったモータドライバに対して出力する指令値を算出するプログラムである。
【００６５】
その他のシステムプログラム２２０は、図３に個別に示したプログラム以外の、ＰＬＣ１の各種機能を実現するためのプログラム群をまとめて示したものである。その他のシステムプログラム２２０は、モーション制御サイクルの周期を設定するプログラム２２２を含む。
【００６６】
モーション制御サイクルの周期は、制御目的に応じて適宜設定することができる。典型的には、モーション制御サイクルの周期を指定する情報をユーザがＰＬＣサポート装置８へ入力する。すると、その入力された情報は、ＰＬＣサポート装置８からＣＰＵユニット１３へ転送される。モーション制御サイクルの周期を設定するプログラム２２２は、ＰＬＣサポート装置８からの情報を不揮発性メモリ１０６に格納させるとともに、システムタイマ１０８から指定されたモーション制御サイクルの周期で割り込み信号が発生されるように、システムタイマ１０８を設定する。ＣＰＵユニット１３への電源投入時に、モーション制御サイクルの周期を設定するプログラム２２２が実行されることで、モーション制御サイクルの周期を指定する情報が不揮発性メモリ１０６から読み出され、読み出された情報に従ってシステムタイマ１０８が設定される。
【００６７】
モーション制御サイクルの周期を指定する情報の形式としては、モーション制御サイクルの周期を示す時間の値や、モーション制御サイクルの周期に関する予め用意された複数の選択肢のうちから１つを特定する情報（番号または文字）などを採用することができる。
【００６８】
本実施の形態に係るＣＰＵユニット１３において、モーション制御サイクルの周期を設定する手段としては、モーション制御サイクルの周期を指定する情報を取得するために用いられるＰＬＣサポート装置８との通信手段、モーション制御サイクルの周期を設定するプログラム２２２、ならびにモーション制御サイクルを規定する割り込み信号の周期を任意に設定可能に構成されているシステムタイマ１０８の構成といった、モーション制御サイクルの周期を任意の設定するために用いられる要素が該当する。
【００６９】
リアルタイムＯＳ２００は、複数のプログラムを時間の経過に従い切り換えて実行するための環境を提供する。本実施の形態に係るＰＬＣ１においては、ＣＰＵユニット１３のプログラム実行によって生成された出力データを他のユニットまたは他の装置へ出力（送信）するためのイベント（割り込み）として、出力準備割り込み（Ｐ）およびフィールドネットワーク送信割り込み（Ｘ）が初期設定される。リアルタイムＯＳ２００は、出力準備割り込み（Ｐ）またはフィールドネットワーク送信割り込み（Ｘ）が発生すると、マイクロプロセッサ１００での実行対象を、割り込み発生時点で実行中のプログラムからスケジューラプログラム２１２に切り換える。なお、リアルタイムＯＳ２００は、スケジューラプログラム２１２およびスケジューラプログラム２１２がその実行を制御するプログラムが何ら実行されていない場合に、その他のシステムプログラム２１０に含まれているプログラムを実行する。このようなプログラムとしては、たとえば、ＣＰＵユニット１３とＰＬＣサポート装置８との間の接続ケーブル１０（ＵＳＢ）などを介した通信処理に関するものが含まれる。
【００７０】
＜Ｄ．モーション制御の概略＞
次に、上述したユーザプログラム２３６に含まれる典型的な構成について説明する。ユーザプログラム２３６は、モータの運動に関する制御開始の条件が成立するか否かを周期的に判断させる命令を含む。たとえば、モータの駆動力によって何らかの処置がなされるワークが所定の処置位置まで搬送されたか否かを判断するようなロジックである。そして、ユーザプログラム２３６は、この制御開始の条件が成立したと判断されたことに応答して、モーション制御を開始させる命令をさらに含む。このモーション制御の開始に伴って、モーション命令の実行が指示される。すると、指示されたモーション命令に対応するモーション演算プログラム２３４が起動し、まず、モーション演算プログラム２３４の実行ごとにモータに対する指令値を算出していくために必要な初期処理が実行される。また、初期処理と同じモーション制御サイクルにおいて、第１サイクルでの指令値が算出される。したがって、初期処理および第１番目の指令値算出処理が、起動したモーション演算プログラム２３４が第１番目の実行においてなすべき処理となる。以降、各サイクルでの指令値が順次算出される。
【００７１】
図４は、制御プログラムによって提供されるモーション制御の概略の処理手順を示すフローチャートである。図４に示すように、マイクロプロセッサ１００は、モータの運動に関する制御開始の条件が成立しているか否かを周期的に判断する（ステップＳ２）。この制御開始の条件が成立しているか否かの判断は、ユーザプログラム２３６およびシーケンス命令演算プログラム２３２によって実現される。制御開始の条件が成立していない場合（ステップＳ２において「ＮＯ」の場合）には、ステップＳ２の判断が繰り返される。
【００７２】
制御開始の条件が成立している場合（ステップＳ２において「ＹＥＳ」の場合）には、マイクロプロセッサ１００は、モーション制御に関する初期処理を実行する（ステップＳ４）。この初期処理としては、モータの運動の開始位置座標、終了位置座標、初期速度、初期加速度、軌跡などを算出処理が含まれる。続いて、マイクロプロセッサ１００は、第１サイクルでの指令値の算出処理を実行する（ステップＳ６）。さらに、マイクロプロセッサ１００は、算出した指令値の出力処理を実行する（ステップＳ８）。
【００７３】
その後、マイクロプロセッサ１００は、次のモーション制御サイクルが到来するまで待つ（ステップＳ１０）。そして、マイクロプロセッサ１００は、モータの運動に関する制御終了の条件が成立しているか否かを周期的に判断する（ステップＳ１２）。この制御終了の条件が成立しているとは、サーボモータ４が終了位置に到達している状態などをいう。制御終了の条件が成立している場合（ステップＳ１２において「ＹＥＳ」の場合）には、ステップＳ２以下の処理が再度繰り返される。このとき、起動中のモーション演算プログラム２３４は、新たな制御開始の条件が成立するまで不活性の状態に維持される。
【００７４】
制御終了の条件が成立していない場合（ステップＳ１２において「ＮＯ」の場合）には、マイクロプロセッサ１００は、現在のサイクルでの指令値の算出処理を実行する（ステップＳ１４）。さらに、マイクロプロセッサ１００は、算出した指令値の出力処理を実行する（ステップＳ１６）。そして、ステップＳ１０以下の処理が繰り返される。
【００７５】
以下では、モーション制御を実現する為の機能モジュールを、「モーション制御機能モジュール」とも称する。具体的には、「モーション制御機能モジュール」とは、ユーザプログラムから与えられた目標値（位置、速度、トルクなど）を用いて、ユーザ所望のモーション動作を実現するために必要な、軸への指令値出力、および軸からの情報取得を一定の周期で実行する機能モジュールである。なお、「モーション制御機能モジュール」は、サーボドライバに対して指令値を出力するオープンループ型のコントローラである。また、モーション制御機能モジュールに対して指示を与える命令（ファンクションブロック（以下、「ＦＢ」とも称する）等）のことを、「モーション制御命令」と称する。
【００７６】
図５は、モーション制御命令とタスクの関係を示した図であり、具体的には、高優先度定周期タスクにモーション制御命令を記載したときのデータフローを表した図である。高優先度定周期タスクは、ＣＰＵユニット１３の中で最高優先度のタスクである。図５に示すように、ＵＰＲＧ７１０に、モーション制御命令が記述された場合におけるデータの大まかな流れの順序は、（１）スレーブ→ＯＩ７０１→ＦＢ７１１→ＭＣ７０２→ＯＩ７０３→サーボモータドライバ３、（２）ＭＣ７０４→ＯＩ７０５→サーボモータドライバ３、（３）ＭＣ７０６→ＯＩ７０７→サーボモータドライバ３である。
【００７７】
図６は、低優先度定周期タスクにモーション制御命令を記載したときのデータフローを表した図である。この場合におけるデータの大まかな流れの順序は、スレーブ→ＯＩ７０１→ＭＣ７０２→ＵＰＧ７２０（ＦＢ７２１，７２２）→ＯＩ７０６→ＯＩ７０７→サーボモータドライバ３である。
【００７８】
低優先度定周期タスク実行中に高優先度定周期タスクが実行可能になった場合、低優先度定周期タスクは一旦中断され、高優先度定周期タスクが実行される。高優先度定周期タスクの完了後、低優先度定周期タスクの実行が再開される。なお、低優先度定周期タスクの周期Ｔ２は、高優先度定周期タスクの周期Ｔ１の整数倍である。図５は、Ｔ２＝２Ｔ１の場合を表している。
【００７９】
ＰＬＣ１の実行中においては、マイクロプロセッサ１００が、少なくとも、出力・入力処理プログラム（出力処理プログラム２１４および入力処理プログラム２１６）と、ユーザプログラム２３６と、モーション演算プログラム２３４とが実行可能な状態になっている。厳密に言えば、リアルタイムＯＳ２００がそれぞれのプログラムに係るプロセス（または、スレッド）を実行可能な状態に保持しており、スケジューラプログラム２１２がリアルタイムＯＳ２００およびハードウェアリソース（システムタイマ１０８など）を利用することで、各プログラムが適切なタイミングかつ適切な順序で実行される。このように、それぞれのプログラムに係る実行の開始／中断／終了などは、スケジューラプログラム２１２によって制御される。
【００８０】
図５において、スレーブからＯＩ７０１への入力（ＩＮ）に基づき、フィールドネットワークコントローラ１４０（図２参照）がモーション制御用入力データを受信してメインメモリ１０４のフィールドネットワーク受信バッファ（図示せず）に当該入力データを格納、および／または、ＰＬＣシステムバスコントローラ１２０が、モーション制御用入力データを受信してメインメモリ１０４のＰＬＣシステムバス受信バッファ（図示せず）に当該入力データを格納する。なお、ＣＰＵユニット１３がマスタであり、ＣＰＵユニット１３以外のそれぞれのユニットが、スレーブに設定される。
【００８１】
また、ＩＯ処理プログラム２１８の命令に従って、起動指令データまたはモーション指令値データが出力される。より具体的には、メインメモリ１０４の制御プログラムの作業領域（図示せず）に格納されている起動指令データおよびモーション指令値データがメインメモリ１０４のフィールドネットワーク送信バッファ（図示せず）へ転送される。さらに、フィールドネットワーク送信バッファへのデータ転送に続いて、フィールドネットワークコントローラ１４０が起動指令データまたはモーション指令値データをサーボモータドライバ３へ送信する。
【００８２】
なお、上記のスレーブからＯＩ７０１への入力（ＩＮ）では、ユーザプログラム２３６での演算には使用されるが、モーション演算プログラム２３４での演算には使用されない入力データについても入力され得る。また、ユーザプログラム２３６の実行により生成されるユーザプログラム出力データは、モーション演算プログラム２３４での演算には使用されない出力データであっても、ＩＯ処理プログラム２１８へ送られて、ＯＩの処理において出力される。
【００８３】
本実施の形態に係る「モーション制御サイクル」は、モーション演算プログラム２３４の実行および通信の周期、すなわち、サーボモータドライバ３へモーション指令値データを与える周期で実行される一連の処理のサイクルである。
【００８４】
＜Ｅ．電子カム＞
以下では、同期制御の機能として、電子カム動作について説明する。「同期制御」とは、主軸（入力軸）の位置に同期して従動軸（制御対象軸）の位置を制御することである。主軸としては、フルクローズドループ制御用のエンコーダの位置、サーボドライバおよび仮想サーボドライバの指令位置、並びに、エンコーダ、サーボドライバ、および仮想サーボドライバのフィードバック位置のうちのいずれかを指定できる。また、「電子カム動作」とは、カムテーブルによって設定されたカムパターンに従い、制御周期でカム動作を行なう機能をいう。「カムテーブル」とは、電子カムの主軸の位相各々に対して電子カムの従動軸の変位を対応付けた構造体配列である。
【００８５】
ＣＰＵユニット１３は、制御周期毎に入力に同期して演算することによって出力を制御するので、演算結果がモーション制御機能モジュールで出力可能な最高速度を上回る場合もある。しかしながら、この場合には、ＣＰＵユニット１３は、エラーとはせずに、最高速度の出力を行なう。そして、ＣＰＵユニット１３は、最高速度で飽和することにより不足する移動量を、次の制御周期以降において分配して出力する。
【００８６】
図７は、電子カムの機能概要を表した図である。図７に示すように、電子カム５００は、カム演算プログラム５０１と、補間プログラム５０２と、スイッチ部５０３とを備える。なお、電子カム５００は、ＣＰＵユニット１３及びＣＰＵユニット１３によって実行されるプログラムによって実現されている。
カム演算プログラム５０１には、フルクローズドループ制御用のエンコーダの位置、サーボドライバおよび仮想サーボドライバの指令位置、並びに、エンコーダ、サーボドライバ、および仮想サーボドライバのフィードバック位置のうち、予め選択された位置が入力される。
【００８７】
カム演算プログラム５０１は、カムテーブルを用いて、主軸の位相各々に対して当該電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのプログラムである。具体的には、カム演算プログラム５０１は、入力された主軸の位相とカムテーブルとに基づき、入力された主軸の位相に対応するカムテーブルに記載の従動軸の変位を、補間プログラム５０２に出力する。補間プログラム５０２は、カム演算プログラム５０１から出力された値を用いて補間処理を行なう。補間プログラム５０２は、補間処理後の値（指令位置）を、スイッチ部５０３を介して出力する。
【００８８】
図８は、電子カムの動作を視覚的に説明するための図である。具体的には、図８は、カムテーブルに基づいたカム曲線で表される機械式カム５００Ａを含んだカム機構ＭＥを表した図である。図８に示すように、カム機構ＭＥは、主軸４００と、機械式カム５００Ａと、従動軸６００とを備えている。機械式カム５００Ａは、主軸４００に固定されており、主軸４００の回転に伴い回転する。従動軸６００は、機械式カム５００Ａの回転に伴い、直線運動を行なう。つまり、カム機構ＭＥにおいては、主軸の位相（入力）が変化すると、従動軸６００が変位（出力）する。このようなカム機構ＭＥにおける入出力を、ソフトウェアにて実現したものが電子カム５００である。
【００８９】
図９は、電子カムのカム曲線を示した図である。図９に示すように、カム曲線５１０は、位相が０から増加するに連れて変位が０から増加し、半周期における位相（１８０度）で変位はピークを迎える。その後、位相の増加に連れて変位が減少し、１周期における位相（３６０度）で変位は０となる。なお、カム曲線５１０は、例示であって、ＰＬＣシステムＳＹＳで利用されるカム曲線は、これに限定されない。
【００９０】
図１０は、電子カムに関するシステム構成を表した図である。図１０は、図７の電子カム５００をより詳しく示した図であり、電子カムの動作を実行させるモーションコントローラの構成を示した図でもある。図１０に示すように、電子カム５００に関するシステムは、カム演算プログラム５０１と、補間プログラム５０２と、カムテーブル生成プログラム５０４と、カム定義変数記憶プログラム５０５と、メインメモリ１０４と、不揮発性メモリ１０６と、ユーザプログラム２３６とにより実現される。なお、図１０では、主軸指令位置として、エンコーダ１９からエンコーダ位置が電子カム５００に対して、が入力される。
【００９１】
図１０に示すように、電子カム５００（ＣＰＵユニット１３）には、ユーザ入出力装置２１が接続されている。ユーザ入出力装置２１は、例えばタブレット及びパーソナルコンピュータからなり、実際にＰＬＣ１を使用しているユーザが用いる装置である。ユーザは、ユーザ入出力装置２１を用いてＰＬＣ１の動作状況を確認できる。例えば、カム曲線、カムデータ、カム定義変数を表示できる。また、ユーザは、ユーザ入出力装置２１を用いてカム定義変数を作成・編集可能であり、そのカム定義変数を電子カム５００（ＣＰＵユニット１３）に送信可能である。例えば生産条件の変更の際に、ユーザは、ユーザ入出力装置２１を用いて、カム曲線を変更するために新たなカム定義変数を電子カム５００（ＣＰＵユニット１３）に送信する。
なお、ユーザ入出力装置２１は、後述するＰＬＣサポート装置８と同等の機能を有していてもよい。
【００９２】
図１０では、不揮発性メモリ１０６には、複数のカムテーブル５２０，５２１，５２２が格納されている。格納されているカムテーブルは、外部の入力装置（ユーザ入出力装置２１またはＰＬＣサポート装置８）から送信されてきたものと、後述するようにメインメモリ１０４内に作成された後に不揮発性メモリ１０６に格納されたものとの一方または両方である。また、図１０では、不揮発性メモリ１０６には、複数のカム定義変数５３０，５３１，５３２が格納されている。格納されているカム定義変数は、ＰＬＣサポート装置８から送信されてきたものと、後述するようにメインメモリ１０４においてカムテーブルを生成するのに用いられた後に不揮発性メモリ１０６に格納された元の一方または両方である。カム定義変数については後述する。
【００９３】
図１０では、メインメモリ１０４には、カムテーブル５２０が格納されている。カムテーブル５２０の詳細については、後述する。なお、以下では、説明の便宜上、カムテーブル５２０を「カムテーブルＮｏ．１」とも称する。
さらに、図１０では、カム定義変数５３０がメインメモリ１０４に格納されている。カム定義変数５３０は、ユーザ入出力装置２１またはＰＬＣサポート装置８から、不揮発性メモリ１０６を介してまたは直接にメインメモリ１０４に格納されている。
なお、図１０において、メインメモリ１０４には１つのカムテーブルと１つのカム定義変数が格納されているが、実際には複数のカムテーブルと複数のカム定義変数をメインメモリに展開することも可能である。
【００９４】
カムテーブル生成プログラム５０４は、モーション制御により実現される電子カム動作を規定するカム定義変数の入力を受け付けて、入力されたカム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するためのプログラムである。具体的には、カムテーブル生成プログラム５０４は、例えば、メインメモリ１０４に格納されたカム定義変数に基づいて、メインメモリ１０４に格納されたカムテーブルの値を書き換えることで、新たなカムテーブルをメインメモリ１０４内に生成する。より具体的には、カムテーブル生成プログラム５０４は、メインメモリ１０４内のカムテーブル（構造体配列）にカム定義変数に基づいた新たなデータを入力することで、このカムテーブルを書き換えて新たなカムテーブルとする（詳細は後述）。
なお、書き換えられる元のカムテーブルは、カムテーブル名と配列構造のためのメモリ番地がメインメモリ１０４内に確保されていればよく、特定のカムテーブルである必要はない。つまり、現在メインメモリ１０４内に展開された使用中のカムテーブルを書き換えてもよいが、現在使用中のカムテーブルを書き換えることなく別の新たなカムテーブルを生成してもよい。
【００９５】
カム定義変数記憶プログラム５０５は、例えばカムテーブル生成プログラム５０４が実行された後に、入力されたカム定義変数を不揮発性メモリ１０６に格納する。また、このときに、生成されたカムテーブルも不揮発性メモリ１０６に格納される。そのため、図１０に示すように、不揮発性メモリ１０６には、複数のカムテーブル及びカム定義変数が格納される。なお、生成されたカムテーブルは必ずしも不揮発性メモリ１０６に格納されなくてもよい。なぜなら、カム定義変数が格納されていさえすれば、当該カム定義変数を用いて例えばＰＬＣサポート装置８によってカム曲線を復元可能だからである。
【００９６】
この格納動作時に、さらに、カム定義変数記憶プログラム５０５は、生成されたカムテーブルを識別する情報を、当該カム定義変数を構成するデータに付加する。このように、入力されたカム定義変数とカムテーブルを識別する情報とが対応付けて不揮発性メモリ１０６に格納されているので、必要に応じて現在動作中のカムテーブルに対応するカム定義変数を外部装置に取り出して、さらに外部装置においてカム定義変数に基づいてカム曲線を生成できる。その結果、生成されたカムテーブルに対応するカム曲線を外部装置で確認可能である。特に、この実施形態では、カム定義変数を入力した装置と異なる装置においても、カム曲線を確認することができるメリットが大きい。例えば、カム定義変数を入力したのがユーザ入出力装置２１であっても、ＰＬＣサポート装置８においてカム曲線を確認することができる。なお、カム定義変数とカムテーブルを識別する情報とを対応付けた情報をユーザ入出力装置２１もしくはPLCサポート装置8から不揮発性メモリ１０６に格納しておくことで、カム定義変数記憶プログラム５０５が生成したカムテーブルを識別する情報を、当該カム定義変数を構成するデータに付加する処理を省略しても構わない。
なお、カム演算プログラム５０１、補間プログラム５０２、カムテーブル生成プログラム５０４、およびカム定義変数記憶プログラム５０５は、システムプログラム２１０のモーション演算プログラム２３４に含まれている。
【００９７】
図１１は、カムデータに関する構造体配列を示した図である。図１１に示すように、構造体配列５１９は、不揮発性メモリ１０６に格納されたカムテーブル５２０を、メインメモリ１０４で管理するための構造体配列を示した図である。構造体配列５１９においては、カムテーブルの識別子と、インデックスと、位相の値（または変位の値）とが対応付けられている。たとえば、構造体配列５１９の１番目の記述は、カムテーブルＮｏ．１（つまり、カムテーブル５２０）におけるインデックスが１番の位相が“０．０”であることを示している。
【００９８】
図１２は、カムテーブルのデータ構造を表した図である。図１２に示すように、カムテーブル５２０は、電子カムの主軸の位相の各々に対して当該電子カムの従動軸の変位を対応付けたデータである。つまり、カムテーブル５２０は、離散的なデータである。カムテーブル５２０におけるデータを用いて直線補完すると、図９に示したカム曲線５１０となる。当該直線補間は、図７の補間プログラム５０２によってなされる。
【００９９】
カムテーブル５２０では、０度から３６０度までの位相を、最大カムデータ数に区分して記述できる。カムテーブル５２０では、０．１度刻みで位相が記述されている。なお、「カムデータ」とは、１つの変位と１つの位相とで構成されるデータである。つまり、カムテーブル５２０は、複数のカムデータを含む。なお、変位δの単位は、たとえば、“ｍｍ”である。
【０１００】
また、カムテーブルにおいて、位相および変位の値の各々が０となっている最初のカムデータが、カムテーブル始点である。この箇所をインデックス０番とする。次に位相および変位の値の各々が次に０となる箇所よりも１つ前（つまり、１つ上）のカムデータが、カムテーブルの終点である。つまり、カムテーブルの始点からカムテーブルの終点まで（０度から３６０度までの位相の範囲のデータ）が、有意なカムデータである。「有意なカムデータ」とは、電子カムの動作に影響を与えるカムデータである。カムデータの識別子であるインデックスの番号は、有意なカムデータに対して付与される。インデックスの番号は、カムテーブルにおいて昇順に付与される。
【０１０１】
また、カムテーブルの終点よりも後（つまり、下）のカムデータは、電子カムの動作に影響を与えないカムデータ（つまり、有意でないカムデータ）である。なお、有意でないカムデータは、位相と変位との両方が０である必要はない。有意でないカムデータの数は、例えばカムテーブル編集ソフトにより指定される。
【０１０２】
図１３は、カムテーブルの書き換え処理を説明するための図である。詳しくは、図１３は、ＣＰＵユニット１３が先のカムテーブルに基づいた処理を行っている最中に、ＣＰＵユニット１３が、カムテーブルの内容（カムデータ）を変更する処理を説明するための図である。
【０１０３】
図１３（ａ）は、変更前のカムテーブルに基づくカム曲線５１０と、変更後のカムテーブルに基づくカム曲線５６０とを表した図である。図１３（ｂ）は、カムテーブルの生成前後における電子カムの動作を説明するための図である。
【０１０４】
図１３（ａ）に示すように、カム曲線５１０における位相θａの変位はδ１であり、カム曲線５６０における位相θａの変位はδ２（δ２＞δ１）である。
【０１０５】
図１３（ｂ）に示すように、ＣＰＵユニット１３は、位相θａに対応する時点で変位を変更する指令を受付けた場合、次の制御周期以降においてはカム曲線５６０に基づいて、制御対象である従動軸を動作させる。カム曲線５６０の位相θａの近傍である位相θｂ（θｂ＞θａ）からカム動作を続行する。具体的には、ＣＰＵユニット１３は、カムテーブルの書き換え処理を行う場合に、書き換え前のカムテーブルにおける位相と連続性を有するような、曲線（正確には直線の集合体となる）となる当該生成時における新たなカムテーブルにおける位相から、新たなカムテーブルを用いた制御を開始する。
【０１０６】
このため、図１３（ｂ）に示す場合においては、位相θａの時点において、指令値である変位δの値がδ１からδ２に急激に変化することになる。この場合、必要に応じてスムージング処理を行ってもよい。
【０１０７】
図１４は、カムテーブルを生成する手順を示したフローチャートである。
以下のフローチャートにおいて、マイクロプロセッサ１００は、カム定義変数の入力を受け付ければ、カムテーブル生成プログラム５０４を実行することでカムテーブルを生成し、生成されたカムテーブルをメインメモリ１０４に格納する。また、マイクロプロセッサ１００は、生成されたカムテーブルを用いてカム演算プログラム５０１を実行することで、電子カム動作を実行する。
具体的には、図１４に示すように、マイクロプロセッサ１００は、ステップＳ１０２において、例えばユーザ入出力装置２１から、複数の電子カムのうちカムテーブルを変更の対象であるカムテーブルの指定を受け付けたか否かを判断する。
【０１０８】
マイクロプロセッサ１００は、受け付けていないと判断した場合（ステップＳ１０２において「ＮＯ」の場合）、処理をステップＳ１１０に進める。マイクロプロセッサ１００は、受け付けたと判断した場合（ステップＳ１０２において「ＹＥＳ」の場合）、ステップＳ１０４において、例えばユーザ入出力装置２１からカムテーブル生成指令およびカム定義変数の入力を受け付けたか否かを判断する。なお、カム定義変数は、入力時に、不揮発性メモリ１０６に格納され、その後にメインメモリ１０４に展開されるか、または直接にメインメモリ１０４に格納される。
【０１０９】
マイクロプロセッサ１００は、受け付けていないと判断した場合（ステップＳ１０４において「ＮＯ」の場合）、処理をステップＳ１１０に進める。マイクロプロセッサ１００は、受け付けたと判断した場合（ステップＳ１０４において「ＹＥＳ」の場合）、ステップＳ１０６において、カムテーブル生成プログラム５０４を実行することで、指定された電子カム（たとえば、電子カムＮｏ．１）で使用するカムテーブルを、入力されたカム定義変数に基づいて生成する。その結果、新たなカムテーブルがメインメモリ１０４に格納される。
また、このとき、マイクロプロセッサ１００は、カム定義変数記憶プログラム５０５を実行することで、メインメモリ１０４内のカム定義変数を不揮発性メモリ１０６に格納する。
【０１１０】
ステップＳ１０８において、マイクロプロセッサ１００は、カム演算プログラム５０１を実行することで、生成後のカムデータを用いたモーション制御を実行する。ステップＳ１１０において、マイクロプロセッサ１００は、指定された電子カムを用いた制御が終了したか否かを判断する。マイクロプロセッサ１００は、終了したと判断した場合（ステップＳ１０８において「ＹＥＳ」）、一連の処理を終了する。マイクロプロセッサ１００は、終了していないと判断した場合（ステップＳ１０８において「ＮＯ」の場合）、処理をステップＳ１０２に進める。
以上に述べたように、カムテーブルを生成するのがＣＰＵユニット１３のマイクロプロセッサ１００なので、カムテーブルの生成を行うために専用の設定ツール（例えば、この実施形態ではＰＬＣサポート装置８）を用いる必要がない。その結果、カムテーブルを容易に生成できる。
【０１１１】
図１５は、システムサービスＳＣの実行タイミングを示した図である。前述したとおりモーション制御機能モジュールは高優先度定周期タスクで実行される。システムサービスは、高優先度定周期タスクを含む定周期タスクが実行終了した後の空き時間にて実行される。
【０１１２】
システムサービスＳＣは、定周期タスクの空き時間に実行され、軸への指令値出力、および軸からの情報取得に直接関係のない処理を実行しても良い。後述する電子カム、後述するカムテーブル生成命令の演算処理をシステムサービスＳＣにて実行しても良い。カムテーブル生成命令の演算処理をシステムサービスＳＣにおいて実行する場合、カムテーブル生成命令の演算処理に伴う演算負荷が定周期タスクの空き時間に実行されるため定周期タスクと動作に影響を及ぼさないという効果を奏する。またカムテーブル生成プログラムの演算処理を高優先度定周期タスクで実行させるか、システムサービスで実行させるかは、システムプログラム２１０が制御することで実現される。
【０１１３】
＜Ｆ．サポート装置＞
次に、ＰＬＣ１で実行されるプログラムの作成およびＰＬＣ１のメンテナンスなどを行なうためのＰＬＣサポート装置８について説明する。
【０１１４】
図１６は、ＣＰＵユニットに接続して用いられるＰＬＣサポート装置のハードウェア構成を示す模式図である。図１６に示すように、ＰＬＣサポート装置８は、典型的には、汎用のコンピュータで構成される。なお、メンテナンス性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
【０１１５】
図１６に示すように、ＰＬＣサポート装置８は、ＯＳを含む各種プログラムを実行するＣＰＵ８１と、ＢＩＯＳや各種データを格納するＲＯＭ（Read Only Memory）８２と、ＣＰＵ８１でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリＲＡＭ８３と、ＣＰＵ８１で実行されるプログラムなどを不揮発的に格納するハードディスク（ＨＤＤ）８４とを含む。
【０１１６】
ＰＬＣサポート装置８は、さらに、ユーザからの操作を受け付けるキーボード８５およびマウス８６と、情報をユーザに提示するためのディスプレイ８７とを含む。さらに、ＰＬＣサポート装置８は、ＰＬＣ１（ＣＰＵユニット１３）などと通信するための通信インターフェース８９（ＩＦ）を含む。
【０１１７】
後述するように、ＰＬＣサポート装置８で実行される各種プログラムは、ＣＤ−ＲＯＭ９に格納されて流通する。このＣＤ−ＲＯＭ９に格納されたプログラムは、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）ドライブ８８によって読取られ、ハードディスク（ＨＤＤ）８４などへ格納される。あるいは、上位のホストコンピュータなどからネットワークを通じてプログラムをダウンロードするように構成してもよい。
【０１１８】
図１７は、ＣＰＵユニットとＰＬＣサポート装置におけるデータ処理を示す模式図である。図１７に示すように、ＰＬＣサポート装置８は、エディタ処理部９１と、ディスプレイ８７と、記憶部９３と、変数記憶部９４とを有している。
【０１１９】
エディタ処理部９１は、カムデータ９５が構成するカム曲線を表示し、編集する機能を有する。ディスプレイ８７は、カムデータ及びカム曲線等の各種データを表示可能である。記憶部９３は、カムデータ９５およびカムプロファイル９６を格納している。変数記憶部９４は、カムデータ変数９７（カムテーブルのカムデータを構成する変数）およびカム定義変数９８を格納している。
【０１２０】
エディタ処理部９１は、記憶部９３に格納されたカムデータ９５を読出して、さらにカムプロファイル９６を作成し、次にディスプレイ８７においてグラフ表示する機能を有する。エディタ処理部９１は、カムデータ９５からカムデータ変数９７を生成し、変数記憶部９４に格納する機能を有する。エディタ処理部９１は、カムデータ変数９７を作成する際に、カム定義変数９８を生成し、さらに、生成したカム定義変数９８を変数記憶部９４に格納する機能を有する。記憶部９３及び変数記憶部９４は、前述のメモリＲＡＭ８３、ハードディスク（ＨＤＤ）８４などによって実現されている。
さらに、エディタ処理部９１は、変数記憶部９４に格納されているカム定義変数９８から、カムデータ９５またはカム曲線を生成（復元）して、ディスプレイ８７に表示する機能を有する。
【０１２１】
前述のように、ＣＰＵユニット１３のマイクロプロセッサ１００のメインメモリ１０４内においてカムテーブル５２０を生成するのに用いられたカム定義変数９８は、不揮発性メモリ１０６に格納されている。このカム定義変数９８は、サポート管理者がＰＬＣサポート装置８を操作することによって、ＣＰＵユニット１３からＰＬＣサポート装置８にダウンロードされ、変数記憶部９４に格納される。エディタ処理部９１は、格納されたカム定義変数９８を用いて、修正されたカムデータ９５およびカム曲線をＰＬＣサポート装置８上で復元でき、例えばカム曲線をディスプレイ８７に表示される。
【０１２２】
サポート管理者は、ＰＬＣサポート装置８を用いて、簡易に電子カムの動作を変更できる。例えば、サポート管理者は、変更したい電子カムを指定する情報をＣＰＵユニット１３にダウンロードする。さらに、ユーザは、カム生成指令および生成したいカム曲線に対応するカム定義変数９８をＣＰＵユニット１３にダウンロードする。以上の結果、ＣＰＵユニット１３においてカムテーブル５２０が生成され、生成されたカムテーブル５２０に基づいて電子カム動作が実行される。なお、ＰＬＣサポート装置８は、ＣＰＵユニットに格納された複数のカム定義変数の中から特定のカム定義変数を指定し、メインメモリ１０４にカム定義変数の値を直接書き込むことができる。
【０１２３】
ユーザも、ユーザ入出力装置２１を用いて、簡易に電子カムの動作を変更できる。例えば、ユーザは、変更したい電子カムを指定する情報をＣＰＵユニット１３にダウンロードする。さらに、ユーザは、カム生成指令および生成したいカム曲線に対応するカム定義変数をＣＰＵユニット１３にダウンロードする。以上の結果、ＣＰＵユニット１３においてカムテーブル５２０が生成され、生成されたカムテーブル５２０に基づいて電子カム動作が実行される。
【０１２４】
このようにユーザによって電子カム動作が変更された場合は、サポート管理者がＰＬＣサポート装置８を用いて、変更後の例えば現在動作中の電子カムの曲線を確かめることが要望されたり、必要になったりする。この場合は、サポート管理者は、ＰＬＣサポート装置８を用いて、電子カム動作の変更に用いられたカム定義変数をＣＰＵユニット１３の不揮発性メモリ１０６からアップロードする。そして、サポート管理者は、ＰＬＣサポート装置８のエディタ処理部９１を用いて、アップロードしたカム定義変数からカムデータまたはカム曲線を復元して、ディスプレイ８７に表示したり、印刷したり、編集したりする。
なお、電子カム動作の変更に用いられたカム定義変数は、生成されたカムテーブルに対応付けられてＣＰＵユニット１３において記憶されているので、ＰＬＣサポート装置８は、格納された複数のカム定義変数の中から現在動作しているカムテーブルに対応したカム定義変数を指定し、メインメモリ１０４からカム定義変数の値を直接読み出すことができる。また、ＰＬＣサポート装置８は、過去にカムテーブルを生成するのに用いられたカム定義変数をＣＰＵユニット１３から読み出すこともできる。
【０１２５】
＜Ｇ．カムテーブル生成プログラムを実現する制御命令の詳細＞
図１８は、カムテーブル生成プログラムを実現する制御命令の概要を示す模式図である。制御命令ＦＢ８００は、図５の制御命令ＦＢ７１１、図６の制御命令ＦＢ７２１，７２２に対応する。制御命令ＦＢ８００の名称は、MC_GenerateCamTable（カムテーブル生成）であって、入力変数としてExecute（起動）を有し、出力変数としてDone（完了）、EndPointIndex（終点インデックス）、Busy（実行中）、CommandAborted（実行中断）、Error（エラー）、ErrorID（エラーコード）、ErrorParameterCode（パラメータ詳細コード）、ErrorNodePointIndex（ノードポイント要素番号）を有している。Execute（起動）は、立ち上り時に命令を開始する。Done（完了）は、命令の実行が完了したときにTRUE（1）になる。EndPointIndex（終点インデックス）は、命令に実行が完了したときに、終点インデックスを出力する。
【０１２６】
MC_GenerateCamTable（カムテーブル生成）は、入出力変数として、CamTable（カムテーブル）、CamProperty（カムプロパティ）、CamNodes（カムノード）を有している。CamProperty（カムプロパティ）およびCamNodes（カムノード）が前述のカム定義変数である。
Camtable（カムテーブル）は、前述の通り、構造体配列によって定義される。
【０１２７】
CamProperty（カムプロパティ）は配列変数によって定義され、各要素の値は、カムプロファイル曲線設定における「プロパティ設定」の一部に相当する。CamProperty（カムプロパティ）は、メンバ変数として、InitVel（開始ノードポイントの初期速度）、InitAcc（開始ノードポイントの初期加速度）、Cycletime（カム動作１サイクルに要する時間であるサイクルタイム）を含んでいる。
【０１２８】
CamNodes（カムノード）は配列変数によって定義され、各配列は、カムプロファイル曲線設定における「ノードポイント」に相当する。CamNodes（カムノード）は、メンバ変数として、Phase（ノードポイントの主軸位相の値を指定する主軸位相）、Distance（ノードポイントの従軸変位の値を指定する従軸変位）、Curve（ノードポイントまでのカム曲線の形状している曲線形状）などを含んでいる。
なお、CamProperty（カムプロパティ）とCamNodes（カムノード）の各パラメータは、エディタ処理部９１（図１７）でのカムプロファイル曲線設定の各項目と一致している。
【０１２９】
図１９は、制御命令の実行イメージを示す模式図である。図１９に示すように、制御命令ＦＢ８００は、Execute（起動）の立ち上りで、入出力で指定したカム定義変数９８のCamProperty９８ａ（カムプロパティ）とCamNodes９８ｂ（カムノード）の値に従って、カムデータを演算によって生成し、指定されたカムテーブル５２０（不揮発性メモリ１０６からメインメモリ１０４に展開されている）を、生成したカムデータで書き換えることによって新たなカムテーブル５２０Ａを生成する。制御命令ＦＢ８００は、カムテーブルの生成（書き換え）が完了したら、カムテーブルの終点インデックスを更新し、その値を出力変数のEndPointIndex（終点インデックス）に出力し、命令の実行を完了する。
【０１３０】
＜Ｈ．カムテーブル生成の制御フローの詳細＞
図２０〜図２２を用いて、制御命令ＦＢ８００の制御フローの詳細を説明する。
図２０は、制御命令の制御手順を示したフローチャートであり、マイクロプロセッサ１００が制御命令ＦＢ８００を実行するときの流れを示す。
【０１３１】
マイクロプロセッサ１００は、ノードポイント数(カムノードにおいて有効となるノードポイントの数)を算出する（ステップＳ２００）。
マイクロプロセッサ１００は、変数ｎに０を代入し、変数ｘに０を代入する（ステップＳ２０４）。変数ｎは、ノード番号である。
マイクロプロセッサ１００は、変数ｎがノードポイント数より小さいか否かを判断する（ステップＳ２０６）。マイクロプロセッサ１００は、小さいと判断した場合（ステップＳ２０６において「ＹＥＳ」の場合）、処理をステップＳ２０８に進め、小さくないと判断した場合（ステップＳ２０６において「ＮＯ」の場合）、全てのノードポイントにおいて処理は終了したので全体の処理を終了する。
【０１３２】
マイクロプロセッサ１００は、ノードポイント毎の位相幅Ｐｎ、変位幅Ｈｎ、サイクル時間Ｔｎ＿ｃｙｃｌｅ、データサンプル点数Ｎ＿Ｐｎを導出する（ステップＳ２０８）。
マイクロプロセッサ１００は、各ノードポイントにおけるカム曲線の演算とメモリへの値の反映を行う（ステップＳ２１０）。ステップＳ２１０の詳細は後述する。
【０１３３】
マイクロプロセッサ１００は、変数ｎをインクリメントする（ステップＳ２１２）。その後、処理はステップＳ２０６に戻る。
ステップ２０８とステップＳ２０９のループがノードポイント数だけ繰り返されることによって、各ノードポイントの始点から終点までのサンプルポイントにカムデータとしての値が入れられる。
【０１３４】
次に、図２０のステップＳ２１０の詳細を、図２１および図２２を用いて説明する。図２１は、カム曲線を演算しメモリへ値を反映する手順を示したフローチャートである。図２２は、カムテーブル生成を説明するためのグラフ（カム曲線）である。
【０１３５】
なお、図２２のグラフにおいて、各符号の意味は下記の通りである。
Ｐｓ＿ｎ：第ｎノードポイントの位相始点（ｎは１〜の整数であり、以下同様）
Ｐｅ＿ｎ：第ｎノードポイントの位相終点
Ｈｓ＿ｎ：第ｎノードポイントの変位始点
Ｈｅ＿ｎ：第ｎノードポイントの変位終点
Ｎ：最大ノードポイント数
Ｔｃｙｃｌｅ：１サイクルの時間（ｓｅｃ）
【０１３６】
マイクロプロセッサ１００は、変数ｍに０を代入する（ステップＳ２１４）。変数ｍはサンプル点数である。
マイクロプロセッサ１００は、変数ｍがデータサンプル点数Ｎ＿Ｐｎより小さいか否かを判断する（ステップＳ２１６）。なお、データサンプル点数Ｎ＿Ｐｎは、下記の式で得られる。
Ｎ＿Ｐｎ＝Ｐｎ／ΔＰｎ  （ΔＰｎ：第ｎノードポイントの位相刻み幅）
【０１３７】
マイクロプロセッサ１００は、小さいと判断すれば（ステップＳ２１６で「ＹＥＳ」の場合）処理をステップＳ２１８に進め、小さくないと判断すれば（ステップＳ２１６で「ＮＯ」の場合）処理を終了する。
マイクロプロセッサ１００は、相対位相Ｐｎ（ｍ）、相対変位Ｈｎ（ｍ）を導出する（ステップＳ２１８）。
【０１３８】
最初に、ノードポイント毎の位相始点からの相対位相、すなわち相対位相Ｐｎ（ｍ）の導出について説明する。位相ＰがＰｓ＿ｎ＜Ｐ＜＝Ｐｅ＿ｎで、Ｐｓ＿ｎからｍ番目のサンプル点の相対位相Ｐｎ（ｍ）は、以下の式で求められる。
Ｐｎ（ｍ）＝ΔＰｎ×ｍ  （ｍ＜Ｎ＿Ｐｎの場合）
Ｐｎ（ｍ）＝Ｐｎ  （ｍ＝Ｎ＿Ｐｎの場合）
【０１３９】
次に、ノードポイント毎の変位始点からの相対変位、すなわち相対変位Ｈｎ（ｍ）の導出について説明する。具体的には、マイクロプロセッサ１００は、指定されたカム特性曲線式を用いて、ノードポイント毎の変位始点からの相対変位を導出する。位相ＰがＰｓ＿ｎ＜Ｐ＜＝Ｐｅ＿ｎで、Ｐｓ＿ｎからｍ番目のサンプル点の相対変位Ｈｎ（ｍ）は、以下の式で求められる。
Ｈｎ（ｍ）＝Ｈｎ×ｆ（Ｔ）
Ｔ＝（ΔＰｎ／Ｐｎ）×ｍ  （ｍ＜Ｎ＿Ｐｎの場合）
Ｔ＝１  （ｍ＝Ｎ＿Ｐｎの場合）
なお、ｆ（）およびＴは下記の通りである。
ｆ（）：ノードポイントで設定されたカム曲線の計算式
Ｔ：カム特性曲線式に代入する時刻（０〜１）
【０１４０】
マイクロプロセッサ１００は、Ｐｎ（ｍ）、Ｈｎ（ｍ）をカムテーブル全体での位相Ｐ（Ｘ）、変位Ｈ（Ｘ）に変換する（ステップＳ２２０）。
【０１４１】
マイクロプロセッサ１００は、カムテーブルのメモリのＸ番目の位相、変位にＰ（Ｘ）、Ｈ（Ｘ）をカムデータの値としてそれぞれ書き込む（ステップＳ２２２）。
【０１４２】
マイクロプロセッサ１００は、変数ｍ、変数Ｘをそれぞれインクリメントする（ステップＳ２２４）。
以上に述べたステップＳ２１８〜ステップＳ２２２のループがサンプル点数だけ繰り返されることで、１ノードポイント内の複数のカムデータとしての値が入力される。
【０１４３】
＜Ｉ．制御命令ＦＢ実行時のカムデータの変化の詳細＞
以下、図２３〜図２９を用いて、カムテーブル生成におけるカムデータの変化の詳細を説明する。図２３〜図２９は、カムノードの値を示す表と、カムテーブルの生成中に書き換えられていくカムテーブルのカムデータを示す表である。
【０１４４】
この例では、マイクロプロセッサ１００は、図２３の左側のCamNodes（カムノード）の値を元に、右側のCamTable（カムテーブル）のカムデータを生成して書き換えていく。以下の説明では、わかりやすさを考慮して、カムの曲線形状を直線とする。したがって、カム定義変数としては、CamProperty（カムプロパティ）は用いられず、CamNodes（カムノード）のみが用いられている。
この例では、CamNodes（カムノード）の配列要素数は４以上、CamTable（カムテーブル）の配列要素数は４０００とする。また、CamTable（カムテーブル）の位相、変位は全て不定値とする。
【０１４５】
図２４に示すように、マイクロプロセッサ１００は、CamTable（カムテーブル）の配列番号０の位相、変位をゼロにする。
マイクロプロセッサ１００は、CamNodes（カムノード）の最初の配列番号のノードポイントの値を取得する。さらに、マイクロプロセッサ１００は、パラメータを元に、開始ノードポイントから次のノードポイントまでのカムデータのサンプル点数と各位相、変位を計算する（図２０のステップＳ２０８に対応）。そして、マイクロプロセッサ１００は、配列番号１から、サンプル点数分のCamTable（カムテーブル）の値を書き換える（図２０のステップＳ２１０、図２１のステップＳ２１４〜Ｓ２２４に対応）。図２５では、配列番号１から１８００までの１８００点のカムデータが書き換えられている。
【０１４６】
マイクロプロセッサ１００は、上記と同様に、配列番号０と１のノードポイント間のカムデータのサンプル点数と各位相、変位を計算して（図２０のステップＳ２０８に対応）、CamTable（カムテーブル）の値を書き換える（図２０のステップＳ２１０、図２１のステップＳ２１４〜Ｓ２２４に対応）。有効ノードポイントが続く限り、この処理は繰り返えされる。図２６では、マイクロプロセッサ１００は、CamNodes（カムノード）の配列番号１のノードポイントの値を取得し、配列番号１８０１から３６０００までの１８００点のカムデータが書き換えられている。
【０１４７】
図２７に示すように、CamNodes（カムノード）の配列番号２は無効ノードポイントなので、マイクロプロセッサ１００は、カムデータの計算を終了する（ステップＳ２０６で「ＮＯ」の場合）。マイクロプロセッサ１００は、最後に書き換えた配列番号の次以降のカムデータが無効であることを示すため、それらカムデータの位相をゼロとする。
もし、位相の値がゼロとなる無効ノードポイントがなく、CamNodes（カムノード）の配列が終了した場合も同様に、マイクロプロセッサ１００は、位相をゼロとする。図２８は、CamNodes（カムノード）の配列要素数が２で、カムデータに無効ノードポイントが存在しない場合である。
【０１４８】
ただし、位相にゼロを書き込むCamTable（カムテーブル）の配列要素が存在しない場合、位相にゼロは書き込まれない。図２８の例では、生成したカムデータの合計点数とCamTable（カムテーブル）の配列要素数がともに３６０１である。
【０１４９】
マイクロプロセッサ１００は、最後に書き込んだ有効なカムデータの配列番号の値でカムテーブルの終点インデックスを更新する。そして、制御命令ＦＢ８００は、その値をEndPointIndex（終点インデックス）に出力する。図２９では、終点インデックスは３６００となる。以上で命令の実行は完了する。
【０１５０】
＜Ｊ．制御装置による処理のまとめ＞
制御装置（例えば、図１のＣＰＵユニット１３）は、モーション制御とシーケンス制御とを実行する。制御装置は、プロセッサ（例えば、図２のマイクロプロセッサ１００）と、記憶部（例えば、図１０のメインメモリ１０４）とを備えている。記憶部は、カム演算プログラム（例えば、図１０のカム演算プログラム５０１）と、カムテーブル（例えば、図１０のカムテーブル５２０）の格納に用いられる。カム演算プログラムは、電子カム（例えば、図１０の電子カム５００）の主軸の位相各々に対して電子カムの従動軸の変位を対応付けた配列であるカムテーブルを用いて、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行うためのものである。
記憶部は、モーション制御により実現される電子カム動作を規定するカム定義変数（例えば、図１７のカム定義変数、図１８のCamNodes（カムノード）、CamProperty（カムプロパティ））の入力を受け付けて、入力されたカム定義変数に対応するカム曲線を配列にしたカムテーブルを生成するためのカムテーブル生成プログラム（例えば、図１０のカムテーブル生成プログラム５０４）をさらに含む。
プロセッサは、カムテーブルを用いてカム演算プログラムを実行し（例えば、図１４のステップＳ１０８）、モーション制御を行う。また、プロセッサは、カム定義変数の入力を受け付け（例えば、図１４のステップＳ１０４で「ＹＥＳ」の場合）、カムテーブル生成プログラムを実行することでカムテーブルを生成し（例えば、図１４のステップＳ１０６）、生成されたカムテーブルを記憶部に格納する。
【０１５１】
この制御装置では、プロセッサは、カムテーブルを用いてカム演算プログラムを実行することで、主軸の位相各々に対して電子カムの従動軸の変位に対応する位置指令値を出力するモーション制御を行う（例えば、図１４のステップＳ１０８）。また、カム定義変数が入力されれば、プロセッサは、カムテーブル生成プログラムを実行することでカムテーブルを生成する（例えば、図１４のステップＳ１０６）。
以上に述べたようにカムテーブルを生成するのが制御装置のプロセッサなので、カムテーブルの変更を行うために専用の設定ツール（例えば、図１のＰＬＣサポート装置８）を用いる必要がない。その結果、カムテーブルを容易に変更可能になる。
【０１５２】
記憶部は、入力されたカム定義変数と、カムテーブル生成プログラムが実行されることで生成されたカムテーブルを識別する情報とを対応づけて、記憶部に格納するカム定義変数記憶プログラム（例えば、図１０のカム定義変数記憶プログラム５０５）をさらに含んでいてもよい。
この制御装置では、入力されたカム定義変数とカムテーブルを識別する情報とが対応付けて記憶部に格納されているので、必要に応じて現在動作中のカムテーブルに対応するカム定義変数を外部装置（例えば、図１のＰＬＣサポート装置８）に取り出して、さらに外部装置においてカム定義変数からカム曲線を生成できる。その結果、変更を行ったカムテーブルに対応するカム曲線を外部装置で確認可能である。
【０１５３】
＜Ｋ．他の実施形態＞
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、発明の要旨を逸脱しない範囲で種々の変更が可能である。特に、本明細書に書かれた複数の実施形態及び変形例は必要に応じて任意に組み合せ可能である。
【０１５４】
＜Ｌ．本発明の要旨＞
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した発明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【０１５５】
本発明は、制御装置、コントロール・システム、制御装置における出力制御方法、およびプログラムに広く適用できる。
【符号の説明】
【０１５６】
１        ：ＰＬＣ装置
３        ：サーボモータドライバ
４        ：サーボモータ
８        ：ＰＬＣサポート装置
１３      ：ＣＰＵユニット
２１      ：ユーザ入出力装置
９１      ：エディタ処理部
１０４    ：メインメモリ
１０６    ：不揮発性メモリ
５００    ：電子カム
５０１    ：カム演算プログラム
５０４    ：カムテーブル生成プログラム
５０５    ：カム定義変数記憶プログラム
５２０    ：カムテーブル
８００    ：制御命令ＦＢ
【図１】
2015122077.tif 000003
【図２】
2015122077.tif 000004
【図３】
2015122077.tif 000005
【図４】
2015122077.tif 000006
【図５】
2015122077.tif 000007
【図６】
2015122077.tif 000008
【図７】
2015122077.tif 000009
【図８】
2015122077.tif 000010
【図９】
2015122077.tif 000011
【図１０】
2015122077.tif 000012
【図１１】
2015122077.tif 000013
【図１２】
2015122077.tif 000014
【図１３】
2015122077.tif 000015
【図１４】
2015122077.tif 000016
【図１５】
2015122077.tif 000017
【図１６】
2015122077.tif 000018
【図１７】
2015122077.tif 000019
【図１８】
2015122077.tif 000020
【図１９】
2015122077.tif 000021
【図２０】
2015122077.tif 000022
【図２１】
2015122077.tif 000023
【図２２】
2015122077.tif 000024
【図２３】
2015122077.tif 000025
【図２４】
2015122077.tif 000026
【図２５】
2015122077.tif 000027
【図２６】
2015122077.tif 000028
【図２７】
2015122077.tif 000029
【図２８】
2015122077.tif 000030
【図２９】
2015122077.tif 000031