(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-31
(45)【発行日】2022-11-09
(54)【発明の名称】制御装置、制御方法、および制御プログラム
(51)【国際特許分類】
G05B 19/05 20060101AFI20221101BHJP
G05B 19/18 20060101ALI20221101BHJP
【FI】
G05B19/05 F
G05B19/18 U
(21)【出願番号】P 2018134976
(22)【出願日】2018-07-18
【審査請求日】2020-12-11
(73)【特許権者】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】安井 勇人
(72)【発明者】
【氏名】仲野 征彦
(72)【発明者】
【氏名】島村 純児
【審査官】山村 秀政
(56)【参考文献】
【文献】特開平06-246664(JP,A)
【文献】特開昭62-031405(JP,A)
【文献】特許第3664910(JP,B2)
【文献】特開昭60-074140(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/05
G05B 19/18
(57)【特許請求の範囲】
【請求項1】
複数のモータを制御する制御装置であって、
制御プログラムに従って第1工程および前記第1工程の後に続く第2工程において前記複数のモータを制御するプロセッサと、
メモリとを備え、
前記メモリは、前記複数のモータのそれぞれに対応する複数のドライバと、座標系を構成する複数の軸のうちの少なくとも1つの軸とを対応付ける対応情報を記憶し、
前記プロセッサは、
前記少なくとも1つの軸の各々について指令値を演算する演算部と、
前記対応情報に基づいて、前記指令値の出力先となる前記複数のドライバの各々を特定する特定部と、
所定条件が成立したときに、参照する前記対応情報を、前記第1工程のための第1対応情報から、前記第2工程のための第2対応情報へと変更することによって、前記指令値の前記出力先を変更する変更部とを含み、
前記メモリは、前記特定部によって前記対応情報に基づいて前記出力先を特定中であるか否かを示すステータス情報をさらに記憶し、
前記特定部は、前記第1工程において、前記第1対応情報に基づいて前記出力先を特定している間、前記ステータス情報によって前記出力先を特定している旨を示し、
前記変更部は、前記第1工程において、
前記第1対応情報に基づいて前記出力先が特定されている旨を前記ステータス情報が示している間、前記第1対応情報から前記第2対応情報への変更を禁止する、制御装置。
【請求項2】
前記制御プログラムは、前記演算部、前記特定部、および前記変更部の各々に対応する、ファンクションブロックの形で規定される制御命令を含む、請求項1に記載の制御装置。
【請求項3】
前記プロセッサは、前記対応情報に基づいて特定することができない前記少なくとも1つの軸について前記演算部によって前記指令値が演算された場合、異常であると判断する第1異常判断部をさらに含む、請求項1または請求項2に記載の制御装置。
【請求項4】
前記プロセッサは、前記対応情報において、一のドライバに対して前記複数の軸が対応する場合、異常であると判断する第2異常判断部をさらに含む、請求項1~請求項3のいずれか1項に記載の制御装置。
【請求項5】
前記所定条件は、前記演算部、前記特定部、および前記変更部に対する制御命令の実行中に所定のイベントが発生したとき、または外部からの指令が入力されたときに成立する、請求項1~請求項4のいずれか1項に記載の制御装置。
【請求項6】
複数のモータを制御する制御装置における制御方法であって、
座標系を構成する複数の軸のうちの少なくとも1つの軸の各々について指令値を演算するステップと、
前記複数のモータのそれぞれに対応する複数のドライバと、前記少なくとも1つの軸とを対応付ける対応情報に基づいて、前記指令値の出力先となる前記複数のドライバの各々を特定するステップと、
所定条件が成立したときに、参照する前記対応情報を、第1工程のための第1対応情報から、前記第1工程の後に続く第2工程のための第2対応情報へと変更することによって、前記指令値の出力先を変更するステップとを含み、
前記特定するステップは、前記第1工程において、前記第1対応情報に基づいて前記出力先を特定している間、メモリに記憶されたステータス情報によって前記出力先を特定している旨を示し、
前記変更するステップは、前記第1工程において、
前記第1対応情報に基づいて前記出力先が特定されている旨を前記ステータス情報が示している間、前記第1対応情報から前記第2対応情報への変更を禁止する、制御方法。
【請求項7】
複数のモータを制御する制御装置が実行する制御プログラムであって、
座標系を構成する複数の軸のうちの少なくとも1つの軸の各々について指令値を演算するステップと、
前記複数のモータのそれぞれに対応する複数のドライバと、前記少なくとも1つの軸とを対応付ける対応情報に基づいて、前記指令値の出力先となる前記複数のドライバの各々を特定するステップと、
所定条件が成立したときに、参照する前記対応情報を、第1工程のための第1対応情報から、前記第1工程の後に続く第2工程のための第2対応情報へと変更することによって、前記指令値の出力先を変更するステップとを含み、
前記特定するステップは、前記第1工程において、前記第1対応情報に基づいて前記出力先を特定している間、メモリに記憶されたステータス情報によって前記出力先を特定している旨を示し、
前記変更するステップは、前記第1工程において、
前記第1対応情報に基づいて前記出力先が特定されている旨を前記ステータス情報が示している間、前記第1対応情報から前記第2対応情報への変更を禁止する、制御プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のモータを制御する制御装置、当該制御装置における制御方法、および当該制御装置が実行する制御プログラムに関する。
【背景技術】
【0002】
生産現場においては、様々なFA(Factory Automation)技術が広く普及している。このようなFAシステムは、PLC(Programmable Logic Controller:プログラマブルロジックコントローラ)といった制御装置だけでなく、CNC(Computer Numerical Control:コンピュータ数値制御)およびCNCに従う工作機械(以下、「CNC工作機械」とも称する。)なども含む。CNC工作機械においては、各々が「軸」と称される機械構成を定義して、当該軸に対応するモータの制御を行うことがある。
【0003】
たとえば、特許第3664910号公報(特許文献1)には、複数のロボットを制御する制御装置が開示されており、複数のロボットのそれぞれは、互いに異なる軸の組合せを有するように構成されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述の特許第3664910号公報に開示される制御装置のように、複数のロボットが互いに異なる軸の組合せを有するように構成すれば、工程の変化などによる状況変化に応じて、適切な軸の組合せごとにモータの制御を行うことが可能となる。たとえば、工程の変化に応じて使用する軸の組合せが変わると、変化後の軸に対応する出力先(モータに接続されたドライバのアドレスなど)に指令値が出力される。しかし、このように状況変化に応じて軸の組合せが変わることを考えると、制御対象となる全ての軸の組合せについて対応する出力先を特定するための情報を予め準備して記憶しておく必要がある。このため、制御対象となる軸の組合せの数が多くなればなるほど、記憶領域も増大する。
【0006】
本発明は、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
本開示の一例に従えば、複数のモータを制御する制御装置が提供される。制御装置は、座標系を構成する複数の軸のうちの少なくとも1つ以上の軸について指令値を演算する演算部と、複数のモータのそれぞれに対応する出力先のうち、演算部における演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報を記憶する記憶部と、記憶部によって記憶された対応情報に基づいて、演算部によって演算された指令値の出力先を特定する特定部と、所定条件が成立したときに、記憶部によって記憶された対応情報において、演算部における演算対象である1つ以上の軸のそれぞれに対応する出力先を変更する変更部とを備える。
【0008】
この開示によれば、指令値の演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報に基づいて、演算された指令値の出力先を特定することができ、さらに、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先が変更される。このため、制御対象となる全ての軸の組合せについて対応する出力先を特定するための対応情報を予め準備して記憶しておく必要がなく、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先を動的に変更するだけで、出力先を適切に特定することができる。これにより、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【0009】
上述の開示において、演算部、特定部、および変更部は、ファンクションブロックの形で規定される制御命令に従って動作する。
【0010】
この開示によれば、再利用性のある制御命令に従って、指令値の演算、出力先の特定、および対応情報の内容変更を実現することができる。
【0011】
上述の開示において、変更部は、特定部によって対応情報に基づいて出力先が特定されている間、当該対応情報を変更しない。
【0012】
この開示によれば、出力先の特定のために対応情報が使用されている間は、対応情報の内容が変更されないため、対応情報の内容変更が出力先の特定に影響を与えてしまうことがない。
【0013】
上述の開示において、制御装置は、対応情報に基づいて特定することができない出力先に対応する軸について演算部によって指令値が演算された場合、異常であると判断する第1異常判断部をさらに備える。
【0014】
この開示によれば、対応情報に基づいて特定することができない出力先に対応する軸について指令値が演算された場合に、異常であると判断することができる。
【0015】
上述の開示において、制御装置は、対応情報において、一の出力先に対して複数の軸が対応する場合、異常であると判断する第2異常判断部をさらに備える。
【0016】
この開示によれば、対応情報において、一の出力先に対して複数の軸が対応する場合に、異常であると判断することができる。
【0017】
上述の開示において、所定条件は、演算部、特定部、および変更部に対する制御命令の実行中に所定のイベントが発生したとき、または外部からの指令が入力されたときに成立する。
【0018】
この開示によれば、制御命令の実行中に所定のイベントが発生したとき、または外部からの指令が入力されたときに、対応情報の内容を動的に変更することができる。
【0019】
本開示の別の一例に従えば、複数のモータを制御する制御装置における制御方法が提供される。制御方法は、座標系を構成する複数の軸のうちの少なくとも1つ以上の軸について指令値を演算するステップと、複数のモータのそれぞれに対応する出力先のうち、演算するステップにおける演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報を記憶するステップと、記憶するステップによって記憶された対応情報に基づいて、演算するステップによって演算された指令値の出力先を特定するステップと、所定条件が成立したときに、記憶するステップによって記憶された対応情報において、演算するステップにおける演算対象である1つ以上の軸のそれぞれに対応する出力先を変更するステップとを含む。
【0020】
この開示によれば、指令値の演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報に基づいて、演算された指令値の出力先を特定することができ、さらに、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先が変更される。このため、制御対象となる全ての軸の組合せについて対応する出力先を特定するための対応情報を予め準備して記憶しておく必要がなく、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先を動的に変更するだけで、出力先を適切に特定することができる。これにより、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【0021】
本開示の別の一例に従えば、複数のモータを制御する制御装置が実行する制御プログラムが提供される。制御プログラムは、座標系を構成する複数の軸のうちの少なくとも1つ以上の軸について指令値を演算するステップと、複数のモータのそれぞれに対応する出力先のうち、演算するステップにおける演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報に基づいて、演算するステップによって演算された指令値の出力先を特定するステップと、所定条件が成立したときに、対応情報において、演算するステップにおける演算対象である1つ以上の軸のそれぞれに対応する出力先を変更するステップとを含む。
【0022】
この開示によれば、指令値の演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報に基づいて、演算された指令値の出力先を特定することができ、さらに、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先が変更される。このため、制御対象となる全ての軸の組合せについて対応する出力先を特定するための対応情報を予め準備して記憶しておく必要がなく、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先を動的に変更するだけで、出力先を適切に特定することができる。これにより、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【発明の効果】
【0023】
本発明によれば、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【図面の簡単な説明】
【0024】
【
図1】本実施の形態に係る制御装置の第1工程(準備動作)における適用例を説明するための模式図である。
【
図2】本実施の形態に係る制御装置の対応関係変更における適用例を説明するための模式図である。
【
図3】本実施の形態に係る制御装置の第2工程(通常動作)における適用例を説明するための模式図である。
【
図4】本実施の形態に係る制御システムの全体構成例を説明するための模式図である。
【
図5】本実施の形態に係る制御装置のハードウェア構成例を説明するためのブロック図である。
【
図6】本実施の形態に係る制御装置が実行する制御プログラムを規定するファンクションブロックを説明するための図である。
【
図7】軸グループ構造体を説明するための図である。
【
図8】対応情報が使用中の場合における対応情報の内容変更について説明するための図である。
【
図9】本実施の形態に係る制御装置が実行する第1異常処理を説明するための模式図である。
【
図10】本実施の形態に係る制御装置が実行する第2異常処理を説明するための模式図である。
【発明を実施するための形態】
【0025】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【0026】
<A.適用例>
まず、
図1~
図3を参照して、本発明が適用される場面の一例について説明する。
図1は、本実施の形態に係る制御装置100の第1工程(準備動作)における適用例を説明するための模式図である。
図2は、本実施の形態に係る制御装置100の対応関係変更における適用例を説明するための模式図である。
図3は、本実施の形態に係る制御装置100の第2工程(通常動作)における適用例を説明するための模式図である。
【0027】
図1に示されるように、本実施の形態に係る制御装置100は、複数のモータを制御可能に構成されている。
図1の適用例においては、モータの一例として、サーボモータ522_1,522_2,522_3,522_4,522_5(以下、まとめて「サーボモータ522」とも称する。)が制御装置100によって制御される。サーボモータ522_1,522_2,522_3,522_4,522_5のそれぞれは、制御装置100とフィールドネットワーク2を介して接続されるドライバ520_1,520_2,520_3,520_4,520_5(以下、まとめて「ドライバ520」とも称する。)のそれぞれによって駆動される。制御装置100は、フィールドネットワーク2を介して各ドライバ520に指令値を出力することで、各サーボモータ522を制御する。なお、説明の都合上、ドライバ520_1は「ドライバ1」、ドライバ520_2は「ドライバ2」、ドライバ520_3は「ドライバ3」、ドライバ520_4は「ドライバ4」、ドライバ520_5は「搬送用ドライバ」と称することがある。
【0028】
本発明の「モータ」は、サーボモータに限らず、同期モータおよび誘導モータを含む任意の駆動装置を包含する概念である。また、本発明の「モータ」は、たとえば、リニアモータのような、回転運動ではなく直線運動するような装置も含み得る。
【0029】
産業用ロボットやCNC工作機械においては、ワークに対して何らかのアクションを行う場合に、複数のモータを連係させて駆動する必要がある。すなわち、複数のモータに対してそれぞれの指令値を同期して与える必要がある。本明細書において、それぞれの指令値を同期して与える必要がある複数のモータを「グループ」と称する。
【0030】
図1に示す適用例においては、制御装置100から各サーボドライバ520に対して、フィールドネットワーク2を介して、対応する指令値が出力(送信,通信)されるが、これに限らず、制御装置100と各サーボドライバ520とを配線接続して、指令値を示す信号を直接伝送するようにしてもよい。
【0031】
任意のグループに属する1つ以上のモータのそれぞれに対応する軸により規定される空間を「座標系」とも称する。たとえば、あるグループに属する複数のモータがCNC工作機械をX軸,Y軸,Z軸のそれぞれに沿って動作させるような場合、当該グループに属するモータは、「X-Y-Z座標系」に関連付けられる。このような各モータの軸方向に着目して、以下の説明においては、各グループを「軸グループ」と称することもある。
【0032】
また、状況によっては、同じ軸方向において複数の軸が定義され得る。たとえば、本実施の形態においては、X軸方向について、互いの回転方向が異なる軸として、X’軸およびX”軸が定義され、それぞれの軸が異なるモータによって駆動される。
【0033】
たとえば、後述する
図4には、CNC工作機械540が示されている。CNC工作機械540は、搬送装置550によって搬送されるワークWに対して部品を組み付けるガントリ型の組付装置である。具体的には、CNC工作機械540は、土台545と、土台545に対してY軸方向に移動可能な本体544と、本体544に対してZ軸方向に移動可能な前部543と、前部543に対してX軸方向に移動可能なアーム541およびアーム542とを備える。X軸、Y軸、Z軸は、互いに直交する軸である。X軸方向について、アーム541がアーム542とは独立して移動する際に用いられる軸としてX’軸が定義される。また、X軸方向について、アーム542がアーム541とは独立して移動する際に用いられる軸としてX”軸が定義される。
【0034】
サーボモータ522_1は、アーム541をX軸方向あるいはX’軸方向に動作させる。サーボモータ522_2は、アーム542をX軸方向またはX”軸方向に動作させる。サーボモータ522_3は、本体544をY軸方向に動作させる。サーボモータ522_4は、前部543をZ軸方向に動作させる。サーボモータ522_5は、搬送装置550を搬送方向に動作させる。
【0035】
このように構成されたCNC工作機械540は、搬送装置550によって搬送されたワークWが作業台554の上に配置されると、まず、第1工程として準備動作を行う。第1工程においては、ワークWに部品を取り付けるための準備として、アーム541およびアーム542のそれぞれが、互いに独立して移動し、通常動作のための位置に配置される。たとえば、アーム541およびアーム542のそれぞれは、X軸に沿って互いに向かい合う方向(前部543における外側から内側に向かう方向)に向かって移動する。これにより、アーム541およびアーム542は、互いに近接する位置にまで移動して準備動作を完了する。
【0036】
次に、CNC工作機械540は、第2工程として通常動作を行う。通常動作においては、アーム541およびアーム542がX軸に沿って同じ方向に向かって移動しながらワークWに部品を取り付ける。たとえば、アーム541およびアーム542はともに、前部543の一端から他端に向かって移動しながらワークWに部品を取り付ける。
【0037】
このように、第1工程においては、アーム541とアーム542とで、移動方向が互いに異なり、かつ互いに独立して移動する。このため、アーム541およびアーム542は同時に制御されないため、X軸方向に沿った軸として、アーム541を移動させるサーボモータ522_1に対してはX’軸、アーム542を移動させるサーボモータ522_2に対してはX”軸が規定される。一方、第2工程においては、アーム541とアーム542とで、移動方向が同じであり、両者がともに移動する。このため、アーム541およびアーム542は同時に制御されるため、アーム541を移動させるサーボモータ522_1およびアーム542を移動させるサーボモータ522_2のそれぞれに対して共通のX軸が規定される。
【0038】
なお、第1工程および第2工程のいずれにおいても、本体544をY軸方向に移動させるサーボモータ522_3に対してはY軸、前部543をZ軸方向に移動させるサーボモータ522_4に対してはZ軸が規定される。
【0039】
図1に戻り、制御装置100は、ストレージ108と、プログラム実行部150と、記憶部(メモリ)195と、入出力リフレッシュ部180とを含む。
【0040】
ストレージ108には、制御プログラム30が格納されている。プログラム実行部150は、制御プログラム30を制御周期ごとに実行する。
【0041】
「制御プログラム」は、所謂シーケンスプログラムであり、実行ごとに全体がスキャンされて、実行ごとに1または複数の指令値が算出されるプログラムを包含する概念である。「シーケンスプログラム」は、国際電気標準会議(International Electrotechnical Commission:IEC)によって規定された国際規格IEC61131-3に従って記述された1または複数の命令からなるプログラムを包含する。「シーケンスプログラム」には、シーケンス命令および/またはモーション命令を含み得る。なお、「シーケンスプログラム」としては、国際規格IEC61131-3に従って記述された命令に限らず、PLC(プログラマブルロジックコントローラ)の製造メーカまたはベンダーなどが独自に規定した命令を含むようにしてもよい。このように、「シーケンスプログラム」は、即時性および高速性が要求される制御に好適である。
【0042】
「シーケンス命令」は、基本的には、入力値、出力値、内部値などを算出する1または複数の論理回路により記述される1または複数の命令である。基本的には、1回の制御周期において、「シーケンス命令」は、先頭から最終まで実行され、次の制御周期において、「シーケンス命令」は、先頭から最終までが再度実行される。
【0043】
「モーション命令」は、サーボモータなどのアクチュエータに対して、位置(Position)、速度(Velocity)、加速度(Acceleration)、加加速度(Jerk)、角度、角速度、角加速度、角加加速度などの数値を指令値として算出するための1または複数の命令である。「モーション命令」についても、1回の制御周期において、ファンクションブロックや数値算出式などにより記述されるモーション命令のプログラム(モーションプログラム)の先頭から最終までが実行される。すなわち、制御周期ごとに指令値は算出(更新)されることになる。
【0044】
プログラム実行部150は、制御命令解釈部152と、ライブラリ154と、演算部159と、変更部156と、特定部158とを含む。
【0045】
制御命令解釈部152は、制御プログラム30に含まれる制御命令を解釈し、指定されたシーケンス演算(論理演算)を実行する。ライブラリ154は、制御プログラム30に含まれる単純なシーケンス以外の制御命令に対応するコードを提供する。たとえば、複合的な処理を可能とするファンクションブロックを用いて制御プログラム30を記述することができるような場合には、制御プログラム30を参照することで、当該ファンクションブロックを解釈して実行するために必要なコードが取得される。
【0046】
演算部159は、制御プログラム30に含まれるモーション命令に従って指令値141を算出する。モーション命令は、1つのコマンドによって複数の制御周期に亘って指令値141の算出を定義しており、演算部159は、このようなモーション命令を解釈して、指令値141を制御周期ごとに更新する。
【0047】
演算部159により制御周期ごとに算出される1または複数の指令値141は、記憶部195に出力される。
【0048】
記憶部195は、パラメータ143と、軸グループ構造体140と、指令値141,142とを記憶する。パラメータ143は、第1工程や第2工程といったような状況に応じてドライバ520に出力される指令値141を算出するための各種パラメータを含む。たとえば、パラメータ143は、位置(Position)、速度(Velocity)、加速度(Acceleration)、および加加速度(Jerk)などを含む。
【0049】
軸グループ構造体140は、主にステータス144と対応情報145とを含むオブジェクトである。ステータス144は、軸グループ構造体140を実行中であるか否か、より具体的には対応情報145を用いて指令値の出力先を特定中であるか否かを示すデータである。対応情報145は、各軸(X軸,Y軸,Z軸,X’軸,X”軸)に対応する出力先のドライバ520を特定するためのデータである。
【0050】
対応情報145においては、座標系を構成する全ての軸(X軸,Y軸,Z軸,X’軸,X”軸)が予め配列されており、当該全ての軸のいずれかに対して指令値の出力先であるドライバ1~4のいずれかが対応付けられている。
【0051】
たとえば、
図1に示す例は第1工程(準備動作)における適用例であり、この場合、座標系を構成する全ての軸(X軸,Y軸,Z軸,X’軸,X”軸)のうち、X’軸、X”軸、Y軸、およびZ軸が使用される。そして、X’軸に対してはサーボモータ522_1を駆動させるドライバ1、X”軸に対してはサーボモータ522_2を駆動させるドライバ2、Y軸に対してはサーボモータ522_3を駆動させるドライバ3、Z軸に対してはサーボモータ522_4を駆動させるドライバ4が出力先として設定されている。なお、上述したように、第1工程においてはX軸が使用されないため、X軸に対してはいずれのドライバも出力先として設定されない。なお、図示は省略するが、
図1~
図3に示す対応情報145において、空欄は“NULL”である。
【0052】
指令値141は、演算部159による演算によって算出される。第1工程においては、X’軸、X”軸、Y軸、Z軸が用いられるため、これら各軸に対する指令値141が記憶部195に記憶される。たとえば、Y軸に対しては“a”、Z軸に対しては“b”、X’軸に対しては“c”、X”軸に対しては“d”が指令値として算出されている。なお、第1工程においてはX軸が使用されないため、X軸に対しては指令値が算出されない。
【0053】
特定部158は、記憶部195によって記憶された対応情報145に基づいて、演算部159によって演算された指令値141の出力先を特定する。たとえば、
図1に示す例においては、特定部158は、X’軸、X”軸、Y軸、Z軸のそれぞれに対応付けられた指令値141と、対応情報145によって特定可能なX’軸、X”軸、Y軸、Z軸のそれぞれに対応付けられた出力先のドライバとに基づき、X’軸、X”軸、Y軸、Z軸のそれぞれに対応付けられた指令値141の出力先を特定して、出力先に対応付けた指令値142を記憶部195に格納する。
【0054】
なお、特定部158は、対応情報145を用いて指令値の出力先を特定中である間、ステータス144を実行中(Status=Executing)とする。これにより、軸グループ構造体140に対応する軸グループの命令に対してインターロックが掛かり、軸グループに対して対応情報145を変更する処理の実行が禁止される。
【0055】
入出力リフレッシュ部180は、所定周期ごとに、指令値142を含む出力データをフィールド側へ送信する。これにより、制御装置100は、制御対象である軸に対応するドライバ520に対して指令値を出力する。
【0056】
ここで、上述したように、第1工程(準備動作)から第2工程(通常動作)へと状況が変化すると、サーボモータ522_1に規定されるX’軸がX軸に切り替わり、かつサーボモータ522_2に規定されるX”軸がX軸に切り替わる。そして、演算部159による指令値の演算対象となる軸も、X’軸、X”軸、Y軸、Z軸から、X軸、Y軸、Z軸へと変更される。よって、各指令値の出力先も、X’軸、X”軸、Y軸、Z軸のそれぞれに対応する出力先から、X軸、Y軸、Z軸のそれぞれに対応する出力先へと変更されなければならない。
【0057】
しかし、仮に、第1工程用の出力先を特定する対応情報と第2工程用の出力先を特定する対応情報とを予め準備して記憶部195に記憶させた場合、制御対象となる軸の組合せ(軸グループ)の数が多くなればなるほど、記憶部195の記憶領域も増大する。すなわち、X’軸、X”軸、Y軸、Z軸で構成される軸グループ専用の対応情報と、X軸、Y軸、Z軸で構成される軸グループ専用の対応情報とを予め準備して記憶部195に記憶させると、記憶部195の記憶領域が増大する。また、パラメータ143についても、X’軸、X”軸、Y軸、Z軸で構成される軸グループ専用のパラメータと、X軸、Y軸、Z軸で構成される軸グループ専用のパラメータとを予め準備して記憶部195に記憶させると、記憶部195の記憶領域が増大する。
【0058】
そこで、本実施の形態に係る制御装置100では、一の軸グループについて、対応情報145において、工程の種類に関わらず座標系を構成する全ての軸(X軸,Y軸,Z軸,X’軸,X”軸)が予め規定され、当該全ての軸のいずれかに対して指令値の出力先であるドライバ1~4のいずれかが対応付けられている。そして、変更部156は、所定条件が成立したときに、記憶部195によって記憶された同じ対応情報145において、演算部159における演算対象である1つ以上の軸のそれぞれに対応する出力先を変更する。なお、所定条件としては、制御プログラムの実行中に所定の内部イベントが発生したとき、または、たとえば、後述するサポート装置200におけるユーザ操作など、外部からの指令が入力されたときに成立する。
【0059】
たとえば、
図2に示されるように、第1工程においては、X’軸に対してドライバ1、X”軸に対してドライバ2が出力先として設定される一方で、X軸に対しては出力先が設定されていなかったが(NULL)、第2工程への移行に伴い、X’軸およびX”軸に対しては出力先が設定されない(NULL)一方で、X軸に対してドライバ1およびドライバ2の両方が出力先として設定される。
【0060】
そして、
図3に示されるように、第2工程(通常動作)に移行した後では、再び演算部159によって1または複数の指令値146が算出される。たとえば、第2工程においては、X軸、Y軸、Z軸が用いられ、X軸に対しては“α”、Y軸に対しては“β”、Z軸に対しては“γ”が指令値146として算出される。なお、第2工程においてはX’軸およびX”が使用されないため、これらの軸に対しては指令値が算出されない。
【0061】
次に、特定部158は、変更部156によって、各軸と出力先との対応関係が変更された後の対応情報145に基づいて、演算部159によって演算された指令値146の出力先を特定する。たとえば、
図3に示す例においては、特定部158は、X軸、Y軸、Z軸のそれぞれに対応付けられた指令値146と、対応情報145によって特定可能なX軸、Y軸、Z軸のそれぞれに対応付けられたドライバの出力先とに基づき、X軸、Y軸、Z軸のそれぞれに対応付けられた指令値146の出力先を特定して、出力先に対応付けられた指令値147を記憶部195に格納する。
【0062】
また、特定部158は、対応情報145を用いて指令値の出力先を特定中である間、ステータス144を実行中(Status=Executing)にするため、軸グループ構造体140に対応する軸グループの命令に対してインターロックが掛かり、軸グループに対して対応情報145を変更する処理の実行が禁止される。
【0063】
その後、入出力リフレッシュ部180によって、指令値147を含む出力データがフィールド側へ送信されることで、制御対象である軸に対応するドライバ520に対して指令値が出力される。
【0064】
このように、特定部158によって、指令値の演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報145に基づいて、指令値の出力先が特定される。さらに、変更部156によって、所定条件が成立したときに、対応情報145において、演算対象である1つ以上の軸のそれぞれに対応する出力先が変更される。このため、制御対象となる全ての軸の組合せについて対応する出力先を特定するための対応情報を予め準備して記憶しておく必要がなく、所定条件が成立したときに、対応情報145において、演算対象である1つ以上の軸のそれぞれに対応する出力先を動的に変更するだけで、出力先を適切に特定することができる。これにより、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【0065】
以上、本実施の形態に係る制御装置100の適用例について説明した。以下では、より詳細に、本実施の形態に係る制御装置100の構成および処理について説明する。
【0066】
<B.制御システムの全体構成例>
次に、本実施の形態に係る制御装置100を含む制御システム1の全体構成例について説明する。
図4は、本実施の形態に係る制御システム1の全体構成例を説明するための模式図である。なお
図4では、本実施の形態に係る制御装置100を中心とした制御システム1を示す。
【0067】
制御装置100は、各種の設備や装置などの制御対象を制御する産業用コントローラに相当する。制御装置100は、制御演算を実行する一種のコンピュータであり、典型的には、PLC(プログラマブルコントローラ)として具現化されている。制御装置100は、フィールドネットワーク2を介して各種のフィールドデバイス500と接続されている。制御装置100は、フィールドネットワーク2などを介して、1または複数のフィールドデバイス500との間でデータを遣り取りする。
【0068】
制御装置100において実行される制御演算は、フィールドデバイス500において収集または生成されたデータ(入力データ)を収集する処理(入力処理)、フィールドデバイス500に対する指令値などのデータ(出力データ)を生成する処理(演算処理)、生成した出力データを対象のフィールドデバイス500へ送信する処理(出力処理)などを含む。
【0069】
フィールドネットワーク2は、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、EtherCAT(登録商標)、EtherNet/IP(登録商標)、DeviceNet(登録商標)、CompoNet(登録商標)などが知られている。データの到達時間が保証される点において、EtherCAT(登録商標)が好ましい。
【0070】
フィールドネットワーク2には、任意のフィールドデバイス500を接続することができる。フィールドデバイス500は、フィールド側にある製造装置や生産ラインなどに対して何らかの物理的な作用を与えるアクチュエータ、および、フィールドとの間で情報を遣り取りする入出力装置などを含む。
【0071】
フィールドネットワーク2を介して、制御装置100とフィールドデバイス500との間でデータが遣り取りされることになるが、これらの遣り取りされるデータは、数100μsecオーダ~数10msecオーダのごく短い周期で更新されることになる。
【0072】
図4に示す構成例においては、制御装置100は、CNC工作機械540と、CNC工作機械540に対してワークWを供給する搬送装置550とを制御する。
【0073】
CNC工作機械540は、前述したように、搬送装置550によって搬送されるワークWに対して部品を組み付けるガントリ型の組付装置である。なお、CNC工作機械540としては、図示のものに限られず、旋盤加工、フライス盤、放電加工などの任意の加工装置に適用できる。
【0074】
CNC工作機械540および搬送装置550は、制御装置100からの指令値に従って駆動される。搬送装置550により搬送されるワークWは、作業台554の上に配置され、CNC工作機械540により指定された加工が行われる。
【0075】
図4に示す構成例においては、フィールドデバイス500は、リモートI/O(Input/Output)装置510と、サーボドライバ520_1,520_2,520_3,520_4およびサーボモータ522_1,522_2,522_3,522_4と、サーボドライバ530とを含む。
【0076】
リモートI/O装置510は、典型的には、フィールドネットワーク2を介して通信を行う通信カプラと、入力データの取得および出力データの出力を行うための入出力部(以下、「I/Oユニット」とも称す。)とを含む。リモートI/O装置510には、入力リレーや各種センサ(たとえば、アナログセンサ、温度センサ、振動センサなど)などの入力データを収集する装置、および、出力リレー、コンタクタ、サーボドライバ、および、その他任意のアクチュエータなどのフィールドに対して何らかの作用を与える装置が接続される。
【0077】
フィールドデバイス500としては、これらに限られることなく、入力データを収集する任意のデバイス(たとえば、視覚センサなど)、出力データに従う何らかの作用を与える任意のデバイス(たとえば、インバータ装置など)、各種ロボットなどを採用することができる。
【0078】
サーボモータ522_1,522_2,522_3,522_4は、CNC工作機械540の一部として組み込まれており、サーボドライバ530は、搬送装置550のコンベアに連結されたサーボモータ532を駆動する。サーボドライバ520_1~520_4,530は、制御装置100からの指令値(たとえば、位置指令値や速度指令値など)に従って、対応するサーボモータ522を駆動する。
【0079】
制御装置100は、上位ネットワーク6を介して、他の装置にも接続されている。上位ネットワーク6には、一般的なネットワークプロトコルであるイーサネット(登録商標)やEtherNet/IP(登録商標)が採用されてもよい。より具体的には、上位ネットワーク6には、1または複数のサーバ装置300および1または複数の表示装置400が接続されてもよい。
【0080】
サーバ装置300としては、データベースシステム、製造実行システム(MES:Manufacturing Execution System)などが想定される。製造実行システムは、制御対象の製造装置や設備からの情報を取得して、生産全体を監視および管理するものであり、オーダ情報、品質情報、出荷情報などを扱うこともできる。これに限らず、情報系サービスを提供する装置を上位ネットワーク6に接続するようにしてもよい。情報系サービスとしては、制御対象の製造装置や設備からの情報を取得して、マクロ的またはミクロ的な分析などを行う処理が想定される。たとえば、制御対象の製造装置や設備からの情報に含まれる何らかの特徴的な傾向を抽出するデータマイニングや、制御対象の設備や機械からの情報に基づく機械学習を行うための機械学習ツールなどが想定される。
【0081】
表示装置400は、ユーザからの操作を受けて、制御装置100に対してユーザ操作に応じたコマンドなどを出力するとともに、制御装置100での演算結果などをグラフィカルに表示する。
【0082】
制御装置100には、サポート装置200が接続可能になっている。サポート装置200は、制御装置100が制御対象を制御するために必要な準備を支援する装置である。具体的には、サポート装置200は、制御装置100で実行されるプログラム(たとえば、制御プログラム)の開発環境(プログラム作成編集ツール、パーサ、コンパイラなど)、制御装置100および制御装置100に接続される各種デバイスの構成情報(コンフィギュレーション)を設定するための設定環境、生成したユーザプログラム(たとえば、制御プログラム)を制御装置100へ出力する機能、制御装置100上で実行されるユーザプログラム(たとえば、制御プログラム)などをオンラインで修正・変更する機能などを提供する。
【0083】
<C.制御装置100のハードウェア構成例>
次に、本実施の形態に係る制御装置100のハードウェア構成例について説明する。
図5は、本実施の形態に係る制御装置100のハードウェア構成例を説明するためのブロック図である。
【0084】
図5に示されるように、制御装置100は、CPUユニットと称される演算処理部であり、プロセッサ102と、チップセット104と、主メモリ106と、ストレージ108と、上位ネットワークコントローラ110と、USB(Universal Serial Bus)コントローラ112と、メモリカードインターフェイス114と、内部バスコントローラ120と、フィールドネットワークコントローラ130とを含む。
【0085】
プロセッサ102は、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、GPU(Graphics Processing Unit)などで構成される。プロセッサ102としては、複数のコアを有する構成を採用してもよいし、プロセッサ102を複数配置してもよい。チップセット104は、プロセッサ102および周辺エレメントを制御することで、制御装置100における全体としての処理を実現する。主メモリ106は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)などの揮発性記憶装置などで構成される。
図1に示された記憶部(メモリ)195は、典型的には、主メモリ106によって実現される。ストレージ108は、たとえば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの不揮発性記憶装置などで構成される。
【0086】
プロセッサ102は、ストレージ108に格納された各種プログラムを読み出して、主メモリ106に展開して実行することで、制御対象に応じた制御、および、各種処理を実現する。ストレージ108には、基本的な機能を実現するためのシステムプログラム34に加えて、制御対象の製造装置や設備に応じて作成されるユーザプログラム(たとえば、制御プログラム30)が格納される。
【0087】
上位ネットワークコントローラ110は、上位ネットワーク6を介して、サーバ装置300や表示装置400(
図4参照)などとの間のデータの遣り取りを制御する。USBコントローラ112は、USB接続を介してサポート装置200との間のデータの遣り取りを制御する。なお、サポート装置200は、USB接続を介して制御装置100との間で通信可能であるものに限らず、EtherNet(イーサネット)通信によって制御装置100との間で通信可能であってもよい。
【0088】
メモリカードインターフェイス114は、メモリカード116が着脱可能に構成されており、メモリカード116に対してデータを書込み、メモリカード116から各種データ(ユーザプログラムやトレースデータなど)を読み出すことが可能になっている。
【0089】
内部バスコントローラ120は、制御装置100に装着されるI/Oユニット122との間のデータの遣り取りを制御する。フィールドネットワークコントローラ130は、フィールドネットワーク2を介したフィールドデバイスとの間のデータの遣り取りを制御する。
【0090】
図5には、プロセッサ102がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(たとえば、ASICまたはFPGAなど)を用いて実装してもよい。あるいは、制御装置100の主要部を、汎用的なアーキテクチャに従うハードウェア(たとえば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のOS(Operating System)を並列的に実行させるとともに、各OS上で必要なアプリケーションを実行させるようにしてもよい。
【0091】
図4に示される制御システム1においては、制御装置100、サポート装置200および表示装置400がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成を採用してもよい。
【0092】
<D.制御プログラム>
次に、本実施の形態に係る制御装置100が実行する制御プログラムについて説明する。
図6は、本実施の形態に係る制御装置100が実行する制御プログラムを規定するファンクションブロックを説明するための図である。
【0093】
制御プログラムは、対応情報(
図1~
図3で示した対応情報145)において各軸と出力先との対応関係を変更するための変更プログラムと、指令値を演算するとともに対応情報に基づいて当該指令値の出力先を特定するための特定プログラムとを含む。
【0094】
図6に示されるように、変更プログラムは、「CNC_ChangeAxes」と称されるファンクションブロック600,650の形で規定されてもよい。ファンクションブロック600,650において、左側の端子は入力端子、右側の端子は出力端子である。なお、ファンクションブロック600は、第1工程において用いられる変更プログラムであり、ファンクションブロック650は、第2工程において用いられる変更プログラムである。
【0095】
特定プログラムは、「CNC_Move」と称されるファンクションブロック700,750の形で規定されてもよい。ファンクションブロック700,750において、左側の端子は入力端子、右側の端子は出力端子である。なお、ファンクションブロック700は、第1工程において用いられる特定プログラムであり、ファンクションブロック750は、第2工程において用いられる特定プログラムである。
【0096】
まず、第1工程におけるファンクションブロック600の入力端子について説明する。ファンクションブロック600の入力端子としては、「AxisGroup」、「Execute」、および「AxisComp.」が設けられている。
【0097】
「AxisGroup」には、対応情報の変更対象となる軸グループを特定するための識別情報(たとえば、識別番号)が与えられる。
図6に示す例では、軸グループ1を特定するための識別情報として“AxisGroup No.1”が「AxisGroup」に与えられている。
【0098】
「Execute」には、ファンクションブロック600を実行させるための指示が与えられる。ファンクションブロック600は、制御プログラム30(制御命令)の実行中に所定のイベントが発生したときに起動する。所定のイベントの発生例としては、ファンクションブロック600の前に実行された図示しないファンクションブロックの出力において、「Done1」がONになることで、ファンクションブロック600の起動条件が成立する。なお、ファンクションブロック600は、制御プログラム30(制御命令)の実行中における内部イベントが発生したときに実行されるものに限らず、外部からの指令が入力されたときに実行されてもよい。たとえば、サポート装置200や図示しない他のユーザ端末(たとえば、タッチパネルディスプレイ)におけるユーザ操作など、外部からの指令が入力されたときにファンクションブロック600が実行されてもよい。
【0099】
「AxisComp.」(「AxisComposition」の略称)には、ユーザによって指定された各軸のそれぞれに対応する出力先を特定するための軸構成が与えられる。たとえば、第1工程においては、X軸に対して“NULL”、Y軸に対して“Drive3”(ドライバ3)、Z軸に対して“Drive4”(ドライバ4)、X’軸に対して“Drive1”(ドライバ1)、X”軸に対して“Drive2”(ドライバ2)の対応関係が示された軸構成が「AxisComp.」に与えられる。なお、「AxisComp.」は、制御プログラム中に記述されるものに限らず、外部からの指令の入力に基づき決定されてもよい。たとえば、図示しないユーザ端末(たとえば、タッチパネルディスプレイ)におけるユーザ操作など、外部からの指令の入力に基づき軸構成を変更してもよい。このようにすれば、ユーザ端末におけるユーザ操作によって、軸グループのパターンを増やすことができる。
【0100】
次に、第1工程におけるファンクションブロック600の出力端子について説明する。出力端子としては、「AxisGroup」、「Busy」、「Done」、「CommandAborted」、「Error」、および「ErrorID」が設けられている。
【0101】
「AxisGroup」は、入力側の「AxisGroup」に与えられた軸グループを特定するための識別情報(たとえば、識別番号)を出力する。
図6に示す例では、軸グループ1を特定するための識別情報として“AxisGroup No.1”が「AxisGroup」から出力される。
【0102】
「Busy」は、「Execute」に指示が与えられてファンクションブロック600が起動するとONになり、ファンクションブロック600の実行中にONを維持する。
【0103】
「Done」は、ファンクションブロック600の実行が完了すると、ONになり、このとき、後続の「Done2」で示された変数もONになる。
【0104】
「CommandAborted」は、ファンクションブロック600の実行が中断すると、ONになる。
【0105】
「Error」は、ファンクションブロック600の実行において何らかのエラーが発生した場合に、ONになる。
【0106】
「ErrorID」は、ファンクションブロック600の実行において何らかのエラーが発生した場合に、エラーコードを出力する。
【0107】
次に、第1工程におけるファンクションブロック700の入力端子について説明する。ファンクションブロック700の入力端子としては、「Coord」、「Execute」、「LogicalMotorNo」、「Position」、「Velocity」、「Acceleration」、「Jerk」、および「MoveMode」が設けられている。
【0108】
「Coord」には、指令値の演算対象となる軸グループを特定するための識別情報(たとえば、識別番号)が与えられる。
図6に示す例では、軸グループ1を特定するための識別情報として“AxisGroup No.1”が「Coord」に与えられている。
【0109】
「Execute」には、ファンクションブロック700を実行させるための指示が与えられる。ファンクションブロック700は、制御プログラム30(制御命令)の実行中に所定のイベントが発生したときに起動する。所定のイベントの発生例としては、ファンクションブロック700の前に実行されたファンクションブロック600の出力において、「Error」がOFFでありかつ「Done2」がONになっていることで、ファンクションブロック700の起動条件が成立する。なお、ファンクションブロック700は、制御プログラム30(制御命令)の実行中における内部イベントが発生したときに実行されるものに限らず、外部からの指令が入力されたときに実行されてもよい。たとえば、サポート装置200や図示しない他のユーザ端末(たとえば、タッチパネルディスプレイ)におけるユーザ操作など、外部からの指令が入力されたときにファンクションブロック700が実行されてもよい。
【0110】
「LogicalMotorNo」には、演算対象となる軸を特定するための対応情報が与えられる。たとえば、第1工程の場合、X軸に対して“NULL”、Y軸に対して“Drive3”(ドライバ3)、Z軸に対して“Drive4”(ドライバ4)、X’軸に対して“Drive1”(ドライバ1)、X”軸に対して“Drive2”(ドライバ2)の対応関係が示された対応情報が「LogicalMotorNo」に与えられる。
【0111】
「Position」には、動作の目標位置が与えられる。「Velocity」には、動作の目標速度が与えられる。「Acceleration」には、動作の目標加速度が与えられる。「Jerk」には、動作の目標加加速度が与えられる。「MoveMode」には、絶対位置に基づく動作モード、あるいは相対位置に基づく動作モードなど、指定された動作モードが与えられる。
【0112】
次に、第1工程におけるファンクションブロック700の出力端子について説明する。ファンクションブロック700の出力端子としては、「AxisGroup」、「Busy」、「Done」、「CommandAborted」、「Error」、および「ErrorID」が設けられている。
【0113】
「AxisGroup」は、入力側の「Coord」に与えられた軸グループを特定するための識別情報(たとえば、識別番号)を出力する。
図6に示す例では、軸グループ1を特定するための識別情報として“AxisGroup No.1”が「AxisGroup」から出力される。
【0114】
「Busy」は、「Execute」に指示が与えられてファンクションブロック700が起動するとONになり、ファンクションブロック700の実行中にONを維持する。
【0115】
「Done」は、ファンクションブロック700の実行が完了すると、ONになり、このとき、後続の「Done3」で示された変数もONとなる。
【0116】
「CommandAborted」は、ファンクションブロック700の実行が中断すると、ONになる。
【0117】
「Error」は、ファンクションブロック700の実行において何らかのエラーが発生した場合に、ONになる。
【0118】
「ErrorID」は、ファンクションブロック700の実行において何らかのエラーが発生した場合に、エラーコードを出力する。
【0119】
次に、第2工程におけるファンクションブロック650について説明する。第2工程におけるファンクションブロック650は、上述した第1工程におけるファンクションブロック600と基本的には同じ機能を有する。但し、第2工程においては、第1工程における対応情報とは異なる内容の対応情報を得る。
【0120】
たとえば、ファンクションブロック650の「AxisComp.」には、ファンクションブロック600の「AxisComp.」とは異なる軸構成が与えられる。たとえば、第2工程においては、X軸に対して“Drive1”(ドライバ1)および“Drive2”(ドライバ2)、Y軸に対して“Drive3”(ドライバ3)、Z軸に対して“Drive4”(ドライバ4)、X’軸に対して“NULL”、X”軸に対して“NULL”の対応関係が示された軸構成が「AxisComp.」に与えられる。なお、ファンクションブロック650においても、ファンクションブロック600と同様に、「AxisComp.」が制御プログラム中に記述されるものに限らず、外部からの指令の入力に基づき決定されてもよい。たとえば、図示しないユーザ端末(たとえば、タッチパネルディスプレイ)におけるユーザ操作など、外部からの指令の入力に基づき軸構成を変更してもよい。このようにすれば、ユーザ端末におけるユーザ操作によって、軸グループのパターンを増やすことができる。
【0121】
「Execute」には、ファンクションブロック650を実行させるための指示が与えられる。ファンクションブロック650は、制御プログラム30(制御命令)の実行中に所定のイベントが発生したときに起動する。所定のイベントの発生例としては、ファンクションブロック650の前に実行されたファンクションブロック700の出力において、「Error」がOFFでありかつ「Done3」がONになっていることで、ファンクションブロック650の起動条件が成立する。なお、ファンクションブロック650は、制御プログラム30(制御命令)の実行中における内部イベントが発生したときに実行されるものに限らず、外部からの指令が入力されたときに実行されてもよい。たとえば、サポート装置200や図示しない他のユーザ端末(たとえば、タッチパネルディスプレイ)におけるユーザ操作など、外部からの指令が入力されたときにファンクションブロック650が実行されてもよい。
【0122】
ファンクションブロック650の実行が完了すると、「Done」がONになり、このとき、後続の「Done4」で示された変数もONになる。
【0123】
次に、第2工程におけるファンクションブロック750について説明する。第2工程におけるファンクションブロック750は、上述した第2工程におけるファンクションブロック700と基本的には同じ機能を有する。
【0124】
「Coord」には、指令値の演算対象となる軸グループを特定するための識別情報(たとえば、識別番号)が与えられる。
図6に示す例では、軸グループ1を特定するための識別情報として“AxisGroup No.1”が「Coord」に与えられている。
【0125】
「Execute」には、ファンクションブロック750を実行させるための指示が与えられる。ファンクションブロック750は、制御プログラム30(制御命令)の実行中に所定のイベントが発生したときに起動する。所定のイベントの発生例としては、ファンクションブロック750の前に実行されたファンクションブロック650の出力において、「Error」がOFFでありかつ「Done4」がONになっていることで、ファンクションブロック750の起動条件が成立する。なお、ファンクションブロック750は、制御プログラム30(制御命令)の実行中における内部イベントが発生したときに実行されるものに限らず、外部からの指令が入力されたときに実行されてもよい。たとえば、サポート装置200や図示しない他のユーザ端末(たとえば、タッチパネルディスプレイ)におけるユーザ操作など、外部からの指令が入力されたときにファンクションブロック750が実行されてもよい。
【0126】
ファンクションブロック750の実行が完了すると、「Done」がONになり、このとき、後続の「Done5」で示された変数もONになる。
【0127】
制御装置100は、上述したようなファンクションブロックを制御周期に基づいて順に実行することで、ファンクションブロック600に従って一の軸グループについて第1工程用の対応情報(
図1に示す対応情報145)を取得し、ファンクションブロック700に従って第1工程用の対応情報に基づいて指令値を演算して出力先を指定する。これにより、第1工程用の対応情報に基づいて、適切な出力先に指令値が出力される。
【0128】
また、制御装置100は、上述したようなファンクションブロックを制御周期に基づいて順に実行することで、ファンクションブロック650に従って当該一の軸グループについて第1工程用の対応情報を第2工程用の対応情報へと変更して第2工程用の対応情報(
図3に示す対応情報145)を取得し、ファンクションブロック750に従って第2工程用の対応情報に基づいて指令値を演算して出力先を指定する。これにより、第2工程用の対応情報に基づいて、適切な出力先に指令値が出力される。
【0129】
このように、制御装置100は、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先を動的に変更するだけで、出力先を適切に特定することができる。これにより、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【0130】
<E.軸グループ構造体>
次に、軸グループ構造体について説明する。
図7は、軸グループ構造体を説明するための図である。本実施の形態においては、複数の軸グループ構造体が設けられている。各軸グループ構造体には、軸グループを特定するための識別情報(たとえば、識別番号)と、「Status」(
図1~
図3で示したステータス144)と、「AxisComposition」とを含む。
【0131】
たとえば、軸グループ1に対応する軸グループ構造体においては、軸グループ1を特定するための識別情報として“AxisGroup No.1”が格納される。「Status」は、上述した特定プログラムであるファンクションブロック700,750によって対応情報(AxisComposition)が参照されている場合に、“Executing”になる。これにより、軸グループ1の命令に対してインターロックが掛かり、軸グループ1に対して対応情報を変更する処理の実行が禁止される。「AxisComposition」は、対応情報に相当し、各軸(X軸,Y軸,Z軸,X’軸,X”軸)に対応するドライバ520の出力先を特定するためのデータである。たとえば、第1工程においては、X軸に対して“NULL”、Y軸に対して“Drive3”(ドライバ3)、Z軸に対して“Drive4”(ドライバ4)、X’軸に対して“Drive1”(ドライバ1)、X”軸に対して“Drive2”(ドライバ2)といったような対応関係が「AxisComposition」で規定される。
【0132】
第1工程用の軸グループ構造体においては、上述した変更プログラムであるファンクションブロック600が実行されることで、軸グループ1を特定するための識別情報として“AxisGroup No.1”が指定され、かつ「AxisComposition」が規定される。その後、特定プログラムであるファンクションブロック700が実行されることで、「Status」が“Executing”となってインターロックが掛かる。
【0133】
第1工程から第2工程に移行すると、変更プログラムであるファンクションブロック650が実行される。このファンクションブロック650の実行によって、第1工程用の軸グループ構造体が第2工程用の軸グループ構造体に変更される。
【0134】
具体的には、第2工程用の変更プログラムであるファンクションブロック650が実行されることで、第2工程用の「AxisComposition」が規定される。たとえば、第2工程においては、X軸に対して“Drive1”(ドライバ1),“Drive2”(ドライバ2)、Y軸に対して“Drive3”(ドライバ3)、Z軸に対して“Drive4”(ドライバ4)、X’軸に対して“NULL”、X”軸に対して“NULL”といったような対応関係が「AxisComposition」で規定される。その後、特定プログラムであるファンクションブロック750が実行されることで、「Status」が“Executing”となってインターロックが掛かる。
【0135】
このように、本実施の形態に係る制御装置100は、軸グループ1の軸グループ構造体において、軸グループ1という枠組みを変更することなく工程の種類に応じて対応情報の内容を変更することで、工程の種類に応じて適切な出力先に指令値を出力することができる。
【0136】
また、
図8は、対応情報が使用中の場合における対応情報の内容変更について説明するための図である。
図8に示されるように、たとえば、第1工程用の軸グループ構造体が実行中(Executing)の場合、第2工程用の変更プログラムであるファンクションブロック650が実行されないため、第1工程用の軸グループ構造体が第2工程用の軸グループ構造体に変更されることはない。
【0137】
<F.異常処理>
次に、制御装置100が実行する異常処理について説明する。制御装置100は、異常処理として、第1異常処理および第2異常処理を実行可能である。
【0138】
図9は、本実施の形態に係る制御装置100が実行する第1異常処理を説明するための模式図である。第1異常処理とは、対応情報に基づいて特定することができない出力先に対応する軸について指令値が演算された場合に制御装置100によって実行される異常処理である。
【0139】
たとえば、
図9には、第2工程において指令値146が演算されたが、対応情報145が第1工程のまま変更されていないという異常を示す例である。具体的には、第2工程においては、X軸、Y軸、Z軸が用いられるため、演算部159によって、X軸に対しては“α”、Y軸に対しては“β”、Z軸に対しては“γ”が指令値146として算出される。一方、本来であれば、変更部156によって、第2工程に応じた内容に対応情報145が変更されるはずであるが、何らかの原因(たとえば、ユーザによるプログラミングの間違い、制御装置100による処理異常など)により、第1工程に応じた内容で対応情報145が維持されている。
【0140】
具体的には、第2工程に従えば、X’軸およびX”軸に対して出力先が設定されない(NULL)一方で、X軸に対してドライバ1およびドライバ2の両方が設定されるはずであるが、この例では、X’軸に対して“ドライバ1”、X”軸に対して“ドライバ2”が出力先として設定され、X軸に対しては出力先が設定されていない(NULL)。このため、演算部159によって演算されたX軸に対する指令値“α”は、対応情報145に基づいて出力先が特定されないことになる。
【0141】
そこで、制御装置100のプログラム実行部150は、さらに第1異常判断部191を含んでいてもよい。第1異常判断部191は、たとえば、特定プログラムにおけるファンクションブロック700やファンクションブロック750によって規定され、対応情報145に基づいて特定することができない出力先に対応する軸について演算部159によって指令値が演算された場合、異常であると判断する。そして、第1異常判断部191によって異常であると判断された場合、特定プログラムや変更プログラムなどの制御プログラム、あるいは他のプログラムの実行が禁止されるとともに、図示しないLEDによる点灯や点滅、あるいはサポート装置200や表示装置400による警告画像の表示などによって、ユーザに異常が報知される。
【0142】
なお、
図9に示す例は、第2工程において指令値が演算されたが、対応情報145が第1工程のまま変更されていないという異常を示す例であるが、たとえば、第1工程において指令値が演算されたが、対応情報145が第2工程のまま変更されていないという異常についても、第1異常判断部191は、異常であると判断することができ、この場合であっても、プログラムの実行を禁止したり、警告を発したりするなどの第1異常処理が実行される。
【0143】
このように、制御装置100は、対応情報145に基づいて特定することができない出力先に対応する軸について演算部159によって指令値146が演算された場合、異常であると判断するとともに、プログラムの実行を禁止したり、警告を発したりするなどの第1異常処理を実行してもよい。
【0144】
なお、第1異常判断部191は、特定プログラムにおけるファンクションブロック700やファンクションブロック750によって規定されるものに限らず、特定プログラムとは別の図示しない監視プログラムによって規定されてもよい。すなわち、対応情報145に基づいて特定することができない出力先に対応する軸について指令値が出力されたか否かを、監視プログラムによって第三者的に監視するものであってもよい。
【0145】
図10は、本実施の形態に係る制御装置100が実行する第2異常処理を説明するための模式図である。第2異常処理とは、対応情報において、一の出力先に対して複数の軸が対応する場合に制御装置100によって実行される異常処理である。
【0146】
たとえば、
図10には、第2工程において、対応情報145において一の出力先(ドライバ)に対して複数の軸が対応するという異常を示す例である。具体的には、本来、第2工程においては、X軸に対して“ドライバ1”および“ドライバ2”の両方が設定され、Y軸に対して“ドライバ3”が設定され、Z軸に対して“ドライバ4”が設定され、各ドライバ520はそれぞれ一の軸のみが対応する。しかし、この例では、何らかの原因(たとえば、ユーザによるプログラミングの間違い、制御装置100による処理異常など)により、ドライバ2に対してX軸およびX”軸の両方が対応付けられている。このため、演算部159によって、X”軸に対応する指令値が演算されていないにも関わらず、出力先としてはX”軸が設定されることになる。
【0147】
そこで、制御装置100のプログラム実行部150は、さらに第2異常判断部192を含んでいてもよい。第2異常判断部192は、たとえば、特定プログラムにおけるファンクションブロック700やファンクションブロック750によって規定され、対応情報145において、一の出力先に対して複数の軸が対応する場合、異常であると判断する。そして、第2異常判断部192によって異常であると判断された場合、特定プログラムや変更プログラムなどの制御プログラム、あるいは他のプログラムの実行が禁止されるとともに、図示しないLEDによる点灯や点滅、あるいはサポート装置200や表示装置400による警告画像の表示などによって、ユーザに異常が報知される。
【0148】
なお、
図10に示す例は、第2工程において、対応情報145において一の出力先(ドライバ)に対して複数の軸が対応するという異常を示す例であるが、たとえば、第1工程において、対応情報145において一の出力先(ドライバ)に対して複数の軸が対応するという異常についても、第2異常判断部192は、異常であると判断することができ、この場合であっても、プログラムの実行を禁止したり、警告を発したりするなどの第2異常処理が実行される。
【0149】
このように、制御装置100は、対応情報145において、一の出力先に対して複数の軸が対応する場合、異常であると判断するとともに、プログラムの実行を禁止したり、警告を発したりするなどの第2異常処理を実行してもよい。
【0150】
なお、第2異常判断部192は、特定プログラムにおけるファンクションブロック700やファンクションブロック750によって規定されるものに限らず、変更プログラムにおけるファンクションブロック600やファンクションブロック650によって規定されてもよい。また、第2異常判断部192は、特定プログラムや変更プログラムとは別の図示しない監視プログラムによって規定されてもよい。すなわち、対応情報145において、一の出力先に対して複数の軸が対応するか否かを、監視プログラムによって第三者的に監視するものであってもよい。
【0151】
<G.作用効果>
以上のように、本実施の形態に係る制御装置100は、特定プログラムにおけるファンクションブロック700やファンクションブロック750を実行することで、指令値の演算対象である1つ以上の軸のそれぞれに対応する出力先を特定するための対応情報145に基づいて、演算された指令値の出力先を特定することができる。さらに、制御装置100は、変更プログラムにおけるファンクションブロック600やファンクションブロック650を実行することで、所定条件が成立したときに、対応情報145において、演算対象である1つ以上の軸のそれぞれに対応する出力先を変更する。このため、制御対象となる全ての軸の組合せについて対応する出力先を特定するための対応情報を予め準備して記憶しておく必要がなく、所定条件が成立したときに、対応情報において、演算対象である1つ以上の軸のそれぞれに対応する出力先を動的に変更するだけで、出力先を適切に特定することができる。これにより、記憶領域を増大させることなく制御対象となる軸の組合せを変更することができる。
【0152】
特定プログラムおよび変更プログラムは、ファンクションブロックで規定されているため、制御装置100は、再利用性のある制御命令に従って、指令値の演算、出力先の特定、および対応情報の内容変更を実現することができる。
【0153】
制御装置100は、対応情報145を用いて指令値の出力先を特定中である間、ステータス144(「Status」)のデータを実行中(Executing)に書き換え、軸グループの命令に対してインターロックを掛けて、軸グループに対して対応情報145を変更する処理の実行を禁止する。これにより、出力先の特定のために対応情報145が使用されている間は、対応情報145の内容が変更されないため、対応情報145の内容変更が出力先の特定に影響を与えてしまうことがない。
【0154】
制御装置100は、対応情報145に基づいて特定することができない出力先に対応する軸について演算部159によって指令値が演算された場合、第1異常判断部191によって異常であると判断する。これにより、対応情報145に基づいて特定することができない出力先に対応する軸について指令値が演算された場合に、異常であると判断することができる。
【0155】
制御装置100は、対応情報145において、一の出力先に対して複数の軸が対応する場合、第2異常判断部192によって異常であると判断する。これにより、対応情報145において、一の出力先に対して複数の軸が対応する場合に、異常であると判断することができる。
【0156】
制御装置100は、演算部159、特定部158、および変更部156に対する制御命令の実行中に所定のイベントが発生したとき、または外部からの指令が入力されたときに、対応情報145において、演算対象である1つ以上の軸のそれぞれに対応する出力先を変更するため、対応情報の内容を動的に変更することができる。
【0157】
<H.付記>
以上のように、本実施の形態では以下のような開示を含む。
【0158】
(構成1)
複数のモータ(522_1,522_2,522_3,522_4)を制御する制御装置(100)であって、
座標系を構成する複数の軸(X軸,Y軸,Z軸,X’軸,X”軸)のうちの少なくとも1つ以上の軸について指令値を演算する演算部(159)と、
前記複数のモータのそれぞれに対応する出力先(520_1,520_2,520_3,520_4)のうち、前記演算部における演算対象である前記1つ以上の軸のそれぞれに対応する前記出力先を特定するための対応情報(145)を記憶する記憶部(195)と、
前記記憶部によって記憶された前記対応情報に基づいて、前記演算部によって演算された前記指令値の前記出力先を特定する特定部(158)と、
所定条件が成立したときに、前記記憶部によって記憶された前記対応情報において、前記演算部における演算対象である前記1つ以上の軸のそれぞれに対応する前記出力先を変更する変更部(156)とを備える、制御装置。
【0159】
(構成2)
前記演算部(159)、前記特定部(158)、および前記変更部(156)は、ファンクションブロックの形で規定される制御命令に従って動作する、構成1に記載の制御装置。
【0160】
(構成3)
前記変更部(156)は、前記特定部(158)によって前記対応情報(145)に基づいて前記出力先が特定されている間、当該対応情報を変更しない、構成1または構成2に記載の制御装置。
【0161】
(構成4)
前記対応情報(145)に基づいて特定することができない前記出力先に対応する前記軸について前記演算部(159)によって前記指令値が演算された場合、異常であると判断する第1異常判断部(191)をさらに備える、構成1~構成3のいずれかに記載の制御装置。
【0162】
(構成5)
前記対応情報(145)において、一の前記出力先に対して前記複数の軸が対応する場合、異常であると判断する第2異常判断部(192)をさらに備える、構成1~構成4のいずれかに記載の制御装置。
【0163】
(構成6)
前記所定条件は、前記演算部(159)、前記特定部(158)、および前記変更部(156)に対する制御命令の実行中に所定のイベントが発生したとき、または外部からの指令が入力されたときに成立する、構成1~構成5のいずれかに記載の制御装置。
【0164】
(構成7)
複数のモータ(522_1,522_2,522_3,522_4)を制御する制御装置(100)における制御方法(制御プログラム30で規定される制御方法)であって、
座標系を構成する複数の軸(X軸,Y軸,Z軸,X’軸,X”軸)のうちの少なくとも1つ以上の軸について指令値を演算するステップと、
前記複数のモータのそれぞれに対応する出力先(520_1,520_2,520_3,520_4)のうち、前記演算するステップにおける演算対象である前記1つ以上の軸のそれぞれに対応する前記出力先を特定するための対応情報(145)を記憶するステップと、
前記記憶するステップによって記憶された前記対応情報に基づいて、前記演算するステップによって演算された前記指令値の前記出力先を特定するステップと、
所定条件が成立したときに、前記記憶するステップによって記憶された前記対応情報において、前記演算するステップにおける演算対象である前記1つ以上の軸のそれぞれに対応する前記出力先を変更するステップとを含む、制御方法。
【0165】
(構成8)
複数のモータ(522_1,522_2,522_3,522_4)を制御する制御装置(100)が実行する制御プログラム(30)であって、
座標系を構成する複数の軸(X軸,Y軸,Z軸,X’軸,X”軸)のうちの少なくとも1つ以上の軸について指令値を演算するステップと、
前記複数のモータのそれぞれに対応する出力先(520_1,520_2,520_3,520_4)のうち、前記演算するステップにおける演算対象である前記1つ以上の軸のそれぞれに対応する前記出力先を特定するための対応情報(145)に基づいて、前記演算するステップによって演算された前記指令値の前記出力先を特定するステップと、
所定条件が成立したときに、前記対応情報において、前記演算するステップにおける演算対象である前記1つ以上の軸のそれぞれに対応する前記出力先を変更するステップとを含む、制御プログラム。
【0166】
今回開示された各実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。また、実施の形態および各変形例において説明された発明は、可能な限り、単独でも、組み合わせても、実施することが意図される。
【符号の説明】
【0167】
1 制御システム、2 フィールドネットワーク、6 上位ネットワーク、30 制御プログラム、34 システムプログラム、100 制御装置、102 プロセッサ、104 チップセット、106 主メモリ、108 ストレージ、110 上位ネットワークコントローラ、112 コントローラ、114 メモリカードインターフェイス、116 メモリカード、120 内部バスコントローラ、122 ユニット、130 フィールドネットワークコントローラ、140 軸グループ構造体、141,142,146,147 指令値、143 パラメータ、144 ステータス、145 対応情報、150 プログラム実行部、152 制御命令解釈部、154 ライブラリ、156 変更部、158 特定部、159 演算部、180 入出力リフレッシュ部、191 第1異常判断部、192 第2異常判断部、195 記憶部、200 サポート装置、300 サーバ装置、400 表示装置、500 フィールドデバイス、510 リモートI/O装置、520,530 サーボドライバ、522,532 サーボモータ、540 工作機械、541,542 アーム、543 前部、544 本体、545 土台、550 搬送装置、554 作業台、600,650,700,750 ファンクションブロック。