[1.第1実施形態]
本開示に係る生産システムの実施形態の一例である第1実施形態を説明する。
[1-1.生産システムの全体構成]
図1は、生産システムの全体構成の一例を示す図である。例えば、生産システムSは、プログラム作成装置10、コントローラ20、モータ制御装置30、及びモータ40を含む。プログラム作成装置10、コントローラ20、及びモータ制御装置30は、産業用ネットワーク又はLAN等のネットワークにより、互いに通信可能に接続される。
プログラム作成装置10は、コントローラ20がモータ制御装置30を制御するためのプログラムを作成する装置である。第1実施形態では、ユーザが操作するパーソナルコンピュータがプログラム作成装置10に相当する場合を説明するが、プログラム作成装置10は、他の装置であってもよい。例えば、プログラム作成装置10は、タブレット端末、スマートフォン、又はサーバコンピュータであってもよい。
例えば、プログラム作成装置10は、CPU11、記憶部12、通信部13、操作部14、及び表示部15を含む。CPU11は、1以上のプロセッサコアを含むプロセッサである。記憶部12は、揮発性メモリと、不揮発性メモリと、の少なくとも一方を含む。通信部13は、有線通信用の通信インタフェースと、無線通信用の通信インタフェースと、の少なくとも一方を含む。操作部14は、マウス又はキーボード等の入力デバイスである。表示部15は、液晶ディスプレイ又は有機ELディスプレイである。
コントローラ20は、1以上のモータ制御装置30を制御する装置である。例えば、コントローラ20は、マシンコントローラである。コントローラ20は、モータ又はベルトといった物理的な機構を直接的又は間接的に制御可能な装置であればよく、マシンコントローラに限られない。例えば、コントローラ20は、PLC、ロボットコントローラ、ラインを管理するラインコントローラ、又はラインよりも小さなセルと呼ばれる単位を管理するセルコントローラであってもよい。モータ制御装置30が、本開示に係るコントローラに相当してもよい。
例えば、コントローラ20は、CPU21A,CPU21B、記憶部22、及び通信部23を含む。第1実施形態では、CPU21A,21Bがシングルコア(プロセッサコアの数が1のプロセッサ)である場合を例に挙げる。このため、第1実施形態のコントローラ20は、合計2つのプロセッサコアを含む。以降、CPU21A,21Bを区別しない時は、単にCPU21と記載する。CPU21は、circuitryの一種である。記憶部22及び通信部23の物理的構成は、それぞれ記憶部12及び通信部13と同様であってもよい。
なお、コントローラ20は、2以上のプロセッサコアを含めばよく、3以上のプロセッサコアを含んでもよい。個々のCPU21は、1以上のプロセッサコアを含めばよく、マルチコア(プロセッサコアの数が2以上のプロセッサ)であってもよい。コントローラ20は、1以上のCPU21を含めばよく、マルチコアのCPU21を1つだけ含んでもよいし、3つ以上のCPU21を含んでもよい。即ち、コントローラ20に含まれる2以上のプロセッサコアは、回路として別々に分かれている必要はない。
また、コントローラ20に複数のCPU21が含まれる場合に、複数のCPU21のプロセッサコア数が互いに異なってもよい。例えば、あるCPU21は1コアであり、他のCPU21は3コアであってもよい。コントローラ20は、シングルコアのCPU21と、マルチコアのCPU21と、の両方を含んでもよい。プロセッサコアは、CPU以外の名称で呼ばれるプロセッサ(例えば、MPU)に含まれてもよい。
モータ制御装置30は、電力線で接続されたモータ40に対する電圧を制御する装置である。モータ制御装置30は、サーボパック(登録商標)又はサーボアンプと呼ばれることもある。モータ制御装置30は、コントローラ20と通信可能である。コントローラ20とモータ制御装置30との間の通信は、定周期通信であってもよいし、非定周期通信であってもよい。モータ制御装置30には、モータエンコーダ又はトルクセンサといったセンサが接続されていてもよい。センサは、コントローラ20に接続されてもよい。
なお、各装置に記憶されるプログラム及びデータの少なくとも一方は、ネットワークを介して供給されてもよい。また、各装置のハードウェア構成は、上記の例に限られず、種々のハードウェアを適用可能である。例えば、コンピュータ読み取り可能な情報記憶媒体を読み取る読取部(例えば、メモリカードスロット)や外部機器と接続するための入出力部(例えば、USB端子)が含まれてもよい。この場合、情報記憶媒体に記憶されたプログラム及びデータの少なくとも一方が、読取部又は入出力部を介して供給されてもよい。他にも例えば、FPGA又はASICと呼ばれる回路が含まれてもよい。
[1-2.第1実施形態の概要]
第1実施形態では、コントローラ20は、ラダープログラムに基づいて動作可能である。ラダープログラムは、ラダー言語で作成されたプログラムである。例えば、ユーザは、プログラム作成装置10にインストールされたエンジニアリングツールを利用して、ラダープログラムを作成する。第1実施形態では、コンパイル前のプログラム(ユーザが目で見て理解できるラダー図)のことをラダープログラムと呼ぶが、コンパイル後のプログラム(機械語に変換されたプログラム)のことをラダープログラムと呼んでもよい。
図2は、ラダープログラムの一例を示す図である。例えば、ラダープログラムP1は、1以上のラングを含む。ラングは、ラダープログラムP1における行である。ユーザは、ラングにコイル等の図形、命令を示す文字列、及びコメントを示す文字列を配置することによって、ラダープログラムP1を作成する。ラダープログラムP1の作成方法自体は、公知の種々の手法を利用可能である。ユーザは、メインルーチンに相当するラダープログラムP1だけではなく、サブルーチンに相当するラダープログラムP1も作成可能である。
例えば、ラダープログラムP1は、コントローラ20のレジスタに対する処理を含む。このため、個々のラングは、コントローラ20のレジスタに対する処理を含むことがある。レジスタは、コントローラ20の記憶領域である。レジスタに対する処理は、レジスタへの書込処理及び参照処理を含む。書込処理は、レジスタに値を書き込む処理である。参照処理は、レジスタに保持された値を参照する処理である。レジスタに対する処理自体は、公知のラダー言語で定義された図形や命令によって表現されるようにすればよい。
仮に、CPU21AだけでラダープログラムP1の全ての処理を順番に実行しようとすると、1つのプロセッサコアで全ての処理を実行しなければならないので、処理に時間がかかる。CPU21A,21Bで処理を分散できれば、処理に要する時間を短縮できる。そこで、第1実施形態では、ユーザは、分散処理を実行するためのプログラミングを行う。例えば、プログラム作成装置10にインストールされたエンジニアリングツールが起動すると、プログラム作成画面が表示部15に表示される。
図3は、プログラム作成画面の一例を示す図である。例えば、プログラム作成画面SC1は、プログラミングの導線を提示するためのナビゲーションウィンドウW10と、ユーザが作業を行うための作業ウィンドウW11と、を含む。ユーザは、ナビゲーションウィンドウW10を基点として、(手順1)モジュール構成の作成、(手順2)スキャングループの作成、(手順3)変数とコメントの設定、(手順4)ラダープログラムP1の作成、(手順5)スキャングループの設定、の順序でプログラミングを行う。
[手順1:モジュール構成の作成]
例えば、ユーザは、ナビゲーションウィンドウW10の「システム構成」を選択し、モジュール構成を作成する。モジュール構成は、生産システムSにおける物理的な構成である。例えば、ユーザは、コントローラ20、モータ制御装置30、モータ40、I/O機器、及びその他の周辺機器といった物理的な構成に関する情報を入力する。以降、モータ40を軸と呼ぶことがある。ユーザは、CPU21の名称と、プロセッサコアの名称と、をモジュール構成として入力する。
[手順2:スキャングループの作成]
例えば、ユーザは、ナビゲーションウィンドウW10の「プログラム」のツリーの中から「スキャングループ」を選択し、スキャングループを作成する。スキャングループは、所定の実行周期で実行されるプログラム(アプリケーション)の集まりである。例えば、スキャングループには、1以上のラダープログラムP1が関連付けられる。スキャングループには、ラダープログラムP1以外の他のプログラムが関連付けられてもよい。例えば、ユーザが手順2を開始すると、スキャングループを作成するための新規作成画面が表示部15に表示される。
図4は、新規作成画面の一例である。例えば、ユーザが、入力フォームF20,F21に対し、スキャングループの名称及び種類を入力してボタンB22を選択すると、スキャングループを新規作成できる。ユーザがボタンB23を選択すると、スキャングループの新規作成をキャンセルできる。ユーザは、スキャングループの作成を保留したまま、ラダープログラムP1を作成することもできる。この場合、ラダープログラムP1は、スキャングループに関連付けられなくてもよい。
第1実施形態では、ユーザは、スキャングループとは別に、制御グループを指定できるようになっている。制御グループは、互いに同期する物理的な構成の集まりである。第1実施形態では、互いに同期する軸の集まりが制御グループに相当する場合を説明するが、制御グループは、I/O機器等の他の構成の集まりであってもよい。例えば、ユーザがプログラム作成画面SC1から制御グループを定義するための操作を行うと、制御グループ定義画面が表示部15に表示される。
図5は、制御グループ定義画面の一例を示す図である。例えば、ユーザは、入力フォームF30に対し、生産システムSにおける制御グループの数を入力する。表示領域A31には、制御グループの一覧が表示される。ユーザは、表示領域A31に対し、制御グループの名前を入力する。ユーザが表示領域A31の中から制御グループを指定すると、当該指定された制御グループに属する軸を、表示領域A32から定義できるようになる。
例えば、ユーザは、入力フォームF33に対し、制御グループに属する軸の数を入力する。表示領域A32には、制御グループに属する軸の一覧が表示される。ユーザは、表示領域A32に対し、個々の軸を識別可能な軸情報(図4の例では、回線、軸番号、及び論理軸名)を入力する。ユーザは、複数の制御グループを作成する場合、個々の制御グループに対し、同様の手順で軸情報を入力する。制御グループの定義は、手順2の中で実行されてもよいし、手順2とは異なる別の手順として実行されてもよい。
[手順3:変数とコメントの設定]
例えば、ユーザは、ナビゲーションウィンドウW10の「プログラム」のツリーの中から「変数とコメントの設定」を選択し、変数とコメントを設定する。変数は、ラダープログラムP1による書込処理又は参照処理が実行される情報である。例えば、ユーザは、軸を制御するための変数、又は、トルクセンサ等により検出された物理量を示す変数といった種々の変数を設定する。変数とコメントの設定方法自体は、公知の方法を利用可能である。
[手順4:ラダープログラムの作成]
例えば、ユーザは、作業ウィンドウW11からラダープログラムP1を作成する。ラダープログラムP1の作成方法自体は、公知の方法を利用可能である。例えば、ユーザは、作業ウィンドウW11上で、1以上のラングを作成する。ユーザは、個々のラングに対し、コイル等の図形やコメントといった要素を配置する。ユーザは、階層構造を有するラダープログラムP1を作成可能である。
[手順5:スキャングループの設定]
例えば、ユーザは、プログラム作成画面SC1のナビゲーションウィンドウW10の中から、スキャングループの詳細な設定を行う。ユーザは、手順5の中で、スキャングループの実行周期の指定、スキャングループと制御グループの関連付けの指定、スキャングループとラダープログラムP1の関連付けの指定、及びスキャングループとプロセッサコアの割り当ての指定といった種々の設定を行う。第1実施形態では、手順5の支援として、処理時間画面及び関連ラング画面が用意されている。
図6は、処理時間画面の一例を示す図である。例えば、処理時間画面SC4の表示領域A40には、作成済みのスキャングループが表示される。図6の例では、3つのスキャングループが作成されている。ユーザは、表示領域A40から、スキャングループの実行周期を指定する。第1実施形態では、ユーザは、実行周期として、任意の数値を指定できるものとする。実行周期として指定可能な数値の上限値及び下限値の少なくとも一方が定められていていてもよい。
例えば、ユーザは、表示領域A40から、スキャングループを割り当てるプロセッサコアを指定する。ここでの割り当てとは、スキャングループに関連付けられたラダープログラムP1を実行するプロセッサコアを指定することである。ユーザは、手順1のモジュール構成で定義したプロセッサコアの中から、スキャングループを割り当てるプロセッサコアを指定する。ユーザは、表示領域A40から、スキャングループの種類を変更することもできる。例えば、ユーザは、定周期のスキャングループを、非定周期に変更できる。
図6の例では、ユーザは、スキャングループAに対し、実行周期「0.125ms」と、CPI21Aのプロセッサコアと、を指定する。ユーザは、スキャングループBに対し、実行周期「0.250ms」と、CPI21Aのプロセッサコアと、を指定する。ユーザは、「スキャングループC」に対し、実行周期「0.250ms」と、CPI21Bのプロセッサコアと、を指定する。
例えば、表示領域A40には、スキャングループの処理時間の予測値が表示される。複数のラダープログラムP1がスキャングループに関連付けられている場合、複数のラダープログラムP1全体の処理時間の予測値が表示領域A40に表示される。例えば、ユーザがボタンB400を選択すると、表示領域A40の表示が切り替わり、スキャングループに関連付けられたラダープログラムP1ごとの処理時間が表示される。
図7は、ラダープログラムP1ごとの処理時間が表示された処理時間画面SC4の一例を示す図である。例えば、処理時間画面SC4には、スキャングループに関連付けられたラダープログラムP1ごとに、当該ラダープログラムP1の処理時間の予測値が表示される。ユーザは、表示領域A40のスキャングループのツリーを開くと、当該スキャングループに関連付けられたラダープログラムP1の処理時間が表示される。
図7の例では、スキャングループAには、「図面A」、「図面A01」、及び「図面A01.01」といった3つのラダープログラムP1が関連付けられている。「図面A01.01」の処理時間の予測値「0.067ms」は、実行周期「0.125ms」の半分以上を占めているので、強調表示されている。ユーザは、図7のような強調表示によって、処理時間が長いラダープログラムP1に気付きやすくなる。ユーザがボタンB42を選択すると、図6の処理時間画面SC4に戻る。
図6のように、表示領域A41には、スキャングループごとの処理時間がタイムチャート形式で表示される。例えば、表示領域A41の横方向には、時間軸が設定される。表示領域A41の縦方向には、プロセッサコアと、スキャングループと、が並べられる。図6の例では、CPU21Aのプロセッサコアに割り当てられたスキャングループAとスキャングループBの処理時間が表示されている。
例えば、スキャングループは、実行周期の冒頭に、スキャングループ間のデータをコピーするためのデータコピー処理が実行される。その後に、スキャングループに関連付けられたラダープログラムP1が実行される。このため、図6のように、データコピー処理の処理時間を示す白抜きの矩形の後に、ラダープログラムP1の処理時間を示す模様付きの矩形が表示される。図6の例では、矩形の横幅が処理時間に対応する。処理時間が長いほど、矩形の横幅が長くなる。
例えば、1つのプロセッサコアに複数のスキャングループが割り当てられている場合には、実行周期が短い順に、スキャングループのラダープログラムP1が実行される。図6の例では、スキャングループAの実行周期は、スキャングループBの実行周期よりも短いので、スキャングループAのデータコピー処理が実行された後に、スキャングループBのデータコピー処理が実行される。その後に、スキャングループAのラダープログラムP1が実行される。その後に、スキャングループBのラダープログラムP1が実行される。
例えば、ユーザは、処理時間画面SC4を参考にして、スキャングループの設定を行う。時間的な余裕がないスキャングループが存在する場合、ユーザは、ラダープログラムP1を大幅に変更しなければならないことがある。この場合、ユーザが、ラダープログラムP1を最初から作り直すと、非常に手間がかかる。そこで、第1実施形態では、ユーザが、ラダープログラムP1の一部を分割できるようになっている。更に、後述の関連ラング画面によって、ラダープログラムP1の分割作業を支援できるようになっている。
図8は、関連ラング画面SC5の一例を示す図である。例えば、ユーザが、プログラム作成画面SC1から関連ラング画面SC5を表示させるための操作を行うと、関連ラング画面SC5が表示部15に表示される。関連ラング画面SC5が表示される前に、表示対象となる軸の選択と、スキャングループの新規作成と、が行われてもよい。例えば、関連ラング画面SC5の表示領域A50には、ユーザが選択した軸に関連性のある関連ラングの一覧が表示される。
図8には、「図面A01.01」に含まれるラングA~Fの関係が示されている。例えば、データコピー処理(図8では、「I/O(Sync)」)が実行されると、ラングA,B,D,E,Fは、データコピー処理が完了したレジスタを参照する。ラングA,Bは、互いに同じレジスタに対する書込処理を含む。ラングCは、このレジスタの参照処理を含む。このため、ラングA~Cは、互いに関連性のある関連ラングとして特定される。ラングCは、軸1に対応するレジスタの書込処理を含む。軸1の制御に直接的に関連するラングは、ラングA~Cとなる。
例えば、ラングB,Dは、同じ表データに対する出力処理を含む。このため、ラングB,Dは、互いに関連性のある関連ラングとして特定される。ラングE,Fは、他のラングとの関連性はない。表示領域A50には、他のラングと何らかの関連性があるラングA~Dが表示される。ユーザが表示領域A50の中からラングを選択すると、当該選択されたラングと関連性がある他のラングが表示領域A51~A53に表示される。
例えば、ユーザが表示領域A50の中からラングBを選択すると、表示領域A51には、ラングBと同じレジスタに対する書込処理を含むラングAが、ラングBの関連ラングとして表示される。表示領域A52には、ラングBの書込処理により書き込まれるレジスタの参照処理を含むラングCが、ラングBの関連ラングとして表示される。表示領域A53には、ラングBと同じ表データに対する出力処理を含むラングDが表示される。ユーザは、関連ラング画面SC5を参考にして、「図面A01.01」を分割する。
図9は、「図面A01.01」を分割する処理の一例を示す図である。例えば、ユーザは、互いに関連性のある関連ラング同士が同じスキャングループに関連付けられるように、「図面A01.01」を分割する。図9の例では、ラングA~Dが互いに何らかの関連性があるので、ユーザは、新たに作成したスキャングループDの「図面D」に、ラングA~Dをコピーする。なお、コピー元の「図面A01.01」には、ラングA~Dが残ってもよい。
例えば、ユーザは、スキャングループDを、CPU21Bのプロセッサコアに割り当てる。これにより、処理時間がかかっていた「図面A01.01」の一部のラングA~Dを、他のプロセッサコアに割り当てることができる。「図面A01.01」の処理時間が短くなるので、スキャングループAの処理を、実行時間内に確実に終えられるようになる。更に、互いに関連性のあるラングA~Dを同じプロセッサコアに処理させることによって、ラングA~Dの処理を正確に実行できる。
例えば、ユーザは、スキャングループB,Cについても同様に、必要に応じてラダープログラムP1を分割できる。ユーザは、スキャングループに関連付けられていないラダープログラムP1を分割し、スキャングループに関連付けることもできる。第1実施形態では、ラダープログラムP1の分割が実行される場合に、ユーザが指定した置換設定に基づいて、分割元のレジスタが分割先に応じたものとなるように、自動的に置換されるようになっている。
図10は、置換設定画面の一例を示す図である。例えば、ユーザが、プログラム作成画面SC1から置換設定をするための操作をすると、置換設定画面SC6が表示部15に表示される。例えば、ユーザは、置換設定画面SC6から、分割元のレジスタと、分割先のレジスタ(図10の例では、変数名)と、の関係を指定できる。ユーザがラダープログラムP1を分割すると、図10で指定された置換設定に基づいて、レジスタが置換される。
第1実施形態では、ユーザは、エンジニアリングツールから、ラダープログラムP1だけではなく、モーションプログラムを作成することもできる。モーションプログラムは、ラダー言語以外の他の言語で作成されるプログラムである。スキャングループに関連付けられてもよい。例えば、ユーザが、プログラム作成画面SC1からモーションプログラムを作成するための操作をすると、モーションプログラムの中の関連部分を表示するための関連部分画面が表示部15に表示される。
図11は、関連部分画面の一例を示す図である。例えば、関連部分画面SC7には、モーションプログラムのコードが表示される。モーションプログラムのコードは、文字列で入力される。第1実施形態では、モーションプログラムのうち、互いに関連性のある関連コードが、強調表示される。図11の例では、軸の制御に関係するコードと、その前にある時間的な処理が発生するコードと、が強調表示される。ユーザは、関連部分画面SC7から、時間的な関係を確認しやすくなる。
以上のように、第1実施形態の生産システムSは、エンジニアリングツールによって、ユーザによるプログラミングを効果的に支援し、プログラミングの手間を軽減できるようになっている。以降、第1実施形態の生産システムSの詳細を説明する。
[1-3.第1実施形態で実現される機能]
図12は、生産システムSが有する機能の一例を示す機能ブロック図である。
[1-3-1.プログラム作成装置が有する機能]
プログラム作成装置10は、データ記憶部100、プログラム作成部101、第1特定部102、関連ラング画面制御部103、予測部104、処理時間画面制御部105、第2特定部106、関連部分表示制御部107、関連付け部108、置換部109、及び割当部110を含む。データ記憶部100は、記憶部12により実現される。他の各機能は、CPU11により実現される。
[データ記憶部]
データ記憶部100は、プログラムの作成に必要なデータを記憶する。例えば、データ記憶部100は、エンジニアリングツールT、ラダープログラムP1、及びモーションプログラムP2、制御グループデータD1、処理時間データD2、及びスキャングループデータD3を記憶する。エンジニアリングツールT、ラダープログラムP1、及びモーションプログラムP2の詳細は、先述した通りである。
図13は、制御グループデータD1の一例を示す図である。制御グループデータD1は、制御グループを定義するデータである。先述したように、第1実施形態では、制御グループは、同期させる軸の集合である。コントローラ20には、軸ごとに、出力に関する値を格納するためのレジスタ(以降、出力レジスタ)が用意されているので、制御グループは、同期が必要な出力レジスタの集合ということもできる。以降、各軸に対応する出力レジスタを軸出力という。
第1実施形態では、ユーザがエンジニアリングツールTから同期対象の軸を指定する場合を説明するが、同期対象の軸は、ユーザが指定しなくてもよい。例えば、軸ごとに設定された制御周期に基づいて、同じ制御周期の軸同士が同じ制御グループに属するように、同期対象の軸が自動的に設定されてもよい。他にも例えば、エンジニアリングツールTを操作するユーザ以外の者が同期対象の軸を指定してもよい。
図13の例では、制御グループ1~3が存在する。制御グループ1には、軸1~3が属する。制御グループ2には、軸4~7が属する。制御グループ3には、軸8~軸10が属する。制御グループデータD1は、制御グループ1に属する軸1~3の軸出力を識別可能なレジスタ識別情報、制御グループ2に属する軸4~7の軸出力を識別可能なレジスタ識別情報、及び制御グループ3に属する軸8~10の軸出力を識別可能なレジスタ識別情報を含む。例えば、レジスタ識別情報は、レジスタのアドレス(レジスタ番号)又はレジスタの名前である。
なお、制御グループデータD1に含まれる情報は、図13の例に限られない。制御グループデータD1は、制御グループに関する情報を含めばよい。例えば、軸出力以外の他の出力レジスタ(例えば、I/O出力の出力レジスタ)が制御グループの基準になる場合、他の出力レジスタのレジスタ識別情報が制御グループデータD1に含まれるようにすればよい。また、制御グループは、1つであってもよいし、3つ以上であってもよい。個々の制御グループに含まれる軸の数も、任意の数であってよい。
図14は、処理時間データD2の一例を示す図である。処理時間データD2は、ラダー言語で実行可能な処理に要する標準的な処理時間を定義するデータである。例えば、処理時間データD2には、ラダー図の図形や命令といった要素ごとに、標準的な処理時間が定義されている。即ち、個々のラングに含まれうる要素ごとに、処理時間が定義されている。処理時間は、実測値であってもよいし、シミュレーションから計算された値であってもよい。処理時間は、ユーザが指定してもよいし、エンジニアリングツールTの作成者が指定してもよい。処理時間は、CPU21A,21Bの性能を考慮した値であってもよいし、一般的な性能に基づく値であってもよい。
図15は、スキャングループデータD3の一例を示す図である。スキャングループデータD3は、スキャングループを定義するデータである。例えば、スキャングループデータD3には、スキャングループの名称、スキャングループの種類、スキャングループに関連付けられた制御グループの名称、スキャングループの実行周期、スキャングループが割り当てられたプロセッサコア、及びスキャングループに関連付けられたラダープログラムP1の名称が格納される。
例えば、ユーザが、エンジニアリングツールTからスキャングループを新規作成すると、当該新規作成されたスキャングループのデータがスキャングループデータD3に追加される。ユーザがスキャングループの種類又は実行周期を変更した場合には、当該変更された種類又は実行周期がスキャングループデータD3に格納される。スキャングループにモーションプログラムP2が関連付けられている場合には、当該モーションプログラムP2の名称がスキャングループデータD3に格納される。
第1実施形態では、説明の簡略化のために、1つのスキャングループに1つの制御グループが属する場合を説明するが、1つのスキャングループには、複数の制御グループが属してもよい。逆に、1つの制御グループが複数のスキャングループに属してもよい。更に、特に制御グループの概念がなく、スキャングループの概念だけが存在してもよい。
なお、データ記憶部100が記憶するデータは、上記の例に限られない。例えば、データ記憶部100は、コントローラ20のレジスタの定義を示すレジスタ定義データ、及び、コントローラ20とモータ制御装置30との通信設定を示す通信設定データといった他のデータを記憶してもよい。軸出力や他のレジスタの体系は、レジスタ定義データに定義されているものとする。ユーザは、エンジニアリングツールからレジスタの定義や通信設定も行うことができる。
[プログラム作成部]
プログラム作成部101は、コントローラ20に実行させるプログラムを作成する。例えば、プログラム作成部101は、ラダープログラムP1を作成する。プログラム作成部101は、プログラム作成画面SC1の作業ウィンドウW11に対して入力されたコイル等の図形に基づいて、ラダープログラムP1を作成してデータ記憶部100に記録する。プログラム作成部101は、ラダープログラムP1のコンパイルを実行し、コンパイル後のラダープログラムP1をデータ記憶部100に記録してもよい。プログラム作成部101は、ラダープログラムP1以外にも、モーションプログラムP2等の他のプログラムも作成する。
[第1特定部]
第1特定部102は、ラダープログラムP1を解析することによって、互いに関連性のある複数の関連ラングを特定する。ラングは、1以上の処理を含む。例えば、ランクに記述されたコイル等の要素の1つ1つが処理に相当する。ラングの少なくとも一部の処理が、第1特定部102による解析対象となる。第1特定部102は、個々のラングに含まれる要素を解析し、関連ラングを特定する。
関係性とは、あるラングの処理と、他のラングの処理と、の内容が互いに関連することである。例えば、あるラングの処理を実行するために、他のラングの処理の実行が完了している必要がある場合に、これらのラングは、関係性を有する。例えば、あるラングの処理が、他のラングの処理の実行結果を参照する場合に、これらのラングは、関係性を有する。例えば、あるラングの処理と、他のラングの処理と、を同じプロセッサコアで実行した方が効率的な場合、これらのラングは関係性を有する。
図8の例では、ラングAは、レジスタ1の参照処理と、レジスタ2の書込処理と、を含む。ラングBは、レジスタ3の参照処理、レジスタ2の書込処理、及び表データに対する出力処理を含む。ラングCは、レジスタ2の参照処理と、レジスタ4の書込処理と、を含む。レジスタ4は、軸1の軸出力とする。例えば、ラングDは、レジスタ5の参照処理と、表データに対する出力処理を含む。ラングEは、レジスタ6の参照処理を含む。ラングFは、レジスタ7の参照処理を含む。
第1実施形態では、第1特定部102は、同じレジスタの処理が発生する複数のラングを、互いに関連性がある複数の関連ラングとして特定する。例えば、第1特定部102は、ある第1ラングがあるレジスタに対する処理を含み、かつ、他の第2ラングが同じレジスタに対する処理を含む場合に、第1ラング及び第2ラングが互いに関連性があることを特定する。第1特定部102は、第1ラング及び第2ラングを、複数の関連ラングとして特定する。
例えば、第1特定部102は、同じレジスタの書込処理が発生する複数のラングを、複数の関連ラングとして特定してもよい。図8の例では、ラングAと、ラングBと、が同じレジスタ2の書込処理を含む。このため、第1特定部102は、ラングAと、ラングBと、を複数の関連ラングとして特定する。
例えば、第1特定部102は、同じレジスタの書込処理及び参照処理が発生する複数のラングを、複数の関連ラングとして特定してもよい。図8の例では、ラングA,Bは、レジスタ2に対する書込処理を含み、ラングCは、同じレジスタ2の参照処理を含む。このため、第1特定部102は、ラングA,Bと、ラングCと、を複数の関連ラングとして特定する。
例えば、第1特定部102は、同じデータに対する処理が発生する複数のラングを、複数の関連ラングとして特定してもよい。図8の例では、ラングB,Dは、互いに同じ表データに対する出力処理を含む。このため、第1特定部102は、ラングBと、ラングDと、を複数の関連ラングとして特定する。第1特定部102は、表データ以外の他のデータに対する処理が発生する複数のラングを、複数の関連ラングとして特定してもよい。
例えば、第1特定部102は、コントローラ20が制御する複数の軸の中からユーザが選択した1以上の軸に関連性のある複数の関連ラングを特定してもよい。図8の例において、ユーザが軸1を選択したとすると、軸1に対応するレジスタ(軸出力)の書込処理及び参照処理が直接的に関係するラング同士が関連性のある複数のラングとして特定する。軸とレジスタの対応関係は、手順3で設定されるものとする。
例えば、第1特定部102は、関連性として、少なくとも、1以上の軸への出力につながるレジスタに対する書込処理で遡れる書込処理を、複数の関連ラングとして特定してもよい。図8の例であれば、ユーザが軸1を選択しているので、最終的に軸1に対応するレジスタ(軸出力)への出力につながるレジスタに対する書込処理を遡るようにして、複数の関連ラングを特定する。第1特定部102は、軸1に対応するレジスタに対する直接的に処理が発生するラングCと、ラングCと関連性のあるラングA,Bと、を複数の関連ラングとして特定する。第1特定部102は、ラングBと関連性のあるラングDも合わせて特定してもよい。
例えば、第1特定部102は、特定した複数の関連ラングのうちの1の関連ラングに対し、当該1の関連ラングと処理対象のレジスタ又はデータが共通する1以上の関連ラングを、更に特定してもよい。図8のラングBが、ラングDと同じ表データに対する出力処理を含むので、第1特定部102は、ラングBと、ラングDと、を複数の関連ラングとして特定する。この場合、ラングA,Bと、ラングCと、は互いに関連性があるので、第1特定部102は、ラングA~Dの全てが互いに関連性があるものとして、これら4つを関連ラングとして特定してもよい。
なお、第1特定部102は、レジスタ又はデータに対する処理以外の情報を利用して、ラング同士の関係性を特定してもよい。ラング同士の関係性は、予め定められた方法に基づいて判定されるようにすればよい。例えば、第1特定部102は、あるラングに、他のラング又は図面を呼び出すだめの命令が含まれる場合に、これらのラングに関係性があると判定してもよい。
[関連ラング画面制御部]
関連ラング画面制御部103は、複数の関連ラングを示す関連ラング画面SC5を表示させる。例えば、関連ラング画面制御部103は、何らかの関連性がある関連ラングを、表示領域A50に表示させる。図8の例であれば、ラングA~Dに何らかの関連性があるので、関連ラング画面制御部103は、ラングA~Dを表示領域A50に表示させる。
第1実施形態では、同じレジスタの書込処理が発生することを示す関連性、同じレジスタの書込処理及び参照処理が発生することを示す関連性、及び同じデータに対する処理が発生することを示す関連性といった3種類の関連性が存在する。このため、関連ラング画面制御部103は、関連性の種類ごとに、表示領域A51~A53の表示を制御する。
例えば、関連ラング画面制御部103は、表示領域A50の中からユーザが関連ラングを選択すると、当該選択された関連ラングと同じレジスタの書込処理を含む他の関連ラングを、表示領域A51に表示させる。図8の例であれば、関連ラング画面制御部103は、表示領域A50の中からユーザがラングBを選択すると、ラングBと同じレジスタの書込処理を含むラングAを、表示領域A51に表示させる。
例えば、関連ラング画面制御部103は、表示領域A50の中からユーザが関連ラングを選択すると、当該選択された関連ラングに含まれる書込処理のレジスタの参照処理を含む他の関連ラングと、当該選択された関連ラングに含まれる参照処理のレジスタの書込処理を含む他の関連ラングと、を表示領域A52に表示させる。図8の例であれば、関連ラング画面制御部103は、表示領域A50の中からユーザがラングBを選択すると、ラングBの書込処理と同じレジスタの参照処理を含むラングCを、表示領域A52に表示させる。
例えば、関連ラング画面制御部103は、表示領域A50の中からユーザが関連ラングを選択すると、当該選択された関連ラングと同じデータの処理を含む他の関連ラングを表示領域A53に表示させる。図8の例であれば、関連ラング画面制御部103は、表示領域A50の中からユーザがラングBを選択すると、ラングBと同じデータの処理を含むラングDを、表示領域A53に表示させる。
[予測部]
予測部104は、複数のプロセッサコアの各々に割り当てられたスキャングループに関する処理時間を予測する。例えば、予測部104は、スキャングループ全体の処理時間と、スキャングループに関連付けられたラダープログラムP1の処理時間と、の少なくとも一方を予測する。第1実施形態では、予測部104がこれらの両方の処理時間を予測する場合を説明するが、予測部104は、これらの何れかの処理時間のみを予測してもよい。
例えば、予測部104は、処理時間データD2と、スキャングループデータD3と、に基づいて、処理時間を予測する。予測部104は、スキャングループデータD3を参照し、個々のスキャングループに関連付けられたラダープログラムP1を特定する。予測部104は、処理時間データD2を参照し、ラダープログラムP1に要素に関連付けられた処理時間の予測値を取得する。予測部104は、処理時間の予測値の合計を計算し、ラダープログラムP1の処理時間として予測する。予測部104は、スキャングループに関連付けられたラダープログラムP1の処理時間の合計を計算し、スキャングループの処理時間として予測する。
なお、処理時間の予測方法は、上記の例に限られない。例えば、予測部104は、シミュレータに基づいて、スキャングループに関連付けられたラダープログラムP1のシミュレーションを実行することによって、処理時間を予測してもよい。シミュレータ自体は、公知のものを利用可能である。例えば、予測部104は、仮想的なコントローラ20を仮想空間に配置し、仮想的なコントローラ20をシミュレータ上で動作させることによって、処理時間を予測してもよい。
例えば、予測部104は、一のスキャングループに含まれる要素から、他の要素に比べて処理時間を必要とする要素を特定してもよい。要素は、ラダープログラムP1自体であってもよいし、ラング単位であってもよい。更に、要素は、ラングの中の一部であってもよい。予測部104は、あるスキャングループの中から、相対的に処理時間を必要とする要素を特定する。例えば、予測部104は、処理時間が閾値以上の要素を特定してもよい。予測部104は、処理時間の降順に要素をソートし、所定順位までの要素を特定してもよい。図7の例では、予測部104は、「図面A01.01」の処理時間が閾値以上であり、「図面A01.01」を要素として特定する。
[処理時間画面制御部]
処理時間画面制御部105は、複数のスキャングループの各々の実行周期と処理時間の関係を示す処理時間画面SC4を表示させる。図6の例では、処理時間画面制御部105は、スキャングループの実行周期と、スキャングループ全体の処理時間と、を示す処理時間画面SC4を表示させる。図7の例では、処理時間画面制御部105は、スキャングループの実行周期と、スキャングループに関連付けられたラダープログラムP1ごとの処理時間と、を示す処理時間画面SC4を表示させる。
例えば、処理時間画面制御部105は、予測部104が特定した要素を表す処理時間画面SC4を表示させてもよい。図7の処理時間画面SC4は、負荷要素表示画面の一例である。このため、図7の処理時間画面SC4は、付加要素表示画面と読み替えることができる。図7の例では、「図面A01.01」が要素として特定されているので、処理時間画面制御部105は、当該特定された要素である「図面A01.01」を識別可能な処理時間画面SC4を、付加要素表示画面として特定する。
なお、図7の例では、処理時間を要する要素である「図面A01.01」に下線が引かれることによって、当該要素を識別可能にする場合を説明したが、処理時間画面制御部105は、予測部104が特定した要素の表示態様を、他の要素の表示態様と異ならせることによって、当該要素を識別可能にすればよい。例えば、処理時間画面制御部105は、予測部104が特定した要素を他の要素と異なる色で表示させてもよいし、予測部104が特定した要素のみを表示させてもよい。
[第2特定部]
第2特定部106は、コントローラ20に軸を制御させるためのモーションプログラムを解析することによって、互いに関連性のある複数の関連部分を特定する。例えば、第2特定部106は、モーションプログラムの中から、ユーザが選択した軸を制御するための軸命令を特定する。第2特定部106は、当該特定された軸命令と、当該軸命令と関連性のある他の命令と、を複数の関連部分として特定する。関連性のある命令の組み合わせは、データ記憶部100に予め記憶されているものとする。第2特定部106は、モーションプログラムの中に、この組み合わせの命令が含まれている場合に、関連部分として特定する。
図11の例では、第2特定部106は、まず、MVSから始まる軸制御のための命令を特定する。この命令は、ユーザが選択した軸と、ユーザが選択しなかった軸と、の両方の命令であってもよい。第2特定部106は、当該特定された命令が含まれる制御ブロック(例えば、IF文又はWHILE文等)を特定する。第2特定部106は、これら特定された直前に記述された所定の命令を特定する。この所定の命令は、時間的な処理が発生する命令である。例えば、ある変数が特定の値になるまで待機する命令(図11のIOWから始まる命令)、一定の実行周期だけ待機する命令、又は複数の実行周期にまたがる処理が発生する命令であってもよい。第2特定部106は、これら一連の命令を関連部分として特定する。
[関連部分表示制御部]
関連部分表示制御部107は、複数の関連部分を示す関連部分画面SC7を表示させる。例えば、関連部分表示制御部107は、モーションプログラムのうち、複数の関連部分を識別可能な状態の関連部分画面SC7を表示させる。図11の例では、関連部分に色が付与される場合を説明したが、関連部分は、下線又はイタリックといったように他の方法で識別可能にしてもよい。例えば、関連部分表示制御部107は、図11のモーションプログラムのうち、互いに関連性のあるIOWから始まる命令とMVSから始まる命令を、他の部分と異ならせることによって、関連部分を表示させる。
[関連付け部]
関連付け部108は、ラダープログラムP1に含まれる複数のラングを、それぞれ実行周期が指定可能な複数のスキャングループの何れかに関連付ける。第1実施形態では、関連付け部108が、一のスキャングループに関連付けられた複数のラングを、他のスキャングループに関連付ける場合を説明するが、関連付け部108は、スキャングループに関連付けられていないラダープログラムP1に含まれる複数のラングを、スキャングループに関連付けてもよい。
ラングをスキャングループに関連付けるとは、スキャングループの実行周期でラングを実行できるように設定することである。第1実施形態では、スキャングループデータD3に、スキャングループと、ラングを含むラダープログラムP1と、を格納することが、ラングをスキャングループに関連付けることに相当する。即ち、ラングを含むラダープログラムP1をスキャングループに所属させることが、ラングをスキャングループに関連付けることに相当する。
図9の例であれば、ユーザが、「図面A01.01」を作業ウィンドウW11で開いてラングA~Dを選択し、新たなラダープログラムP1の作業ウィンドウW11に貼り付ける。ユーザは、ラングA~Dを含む新たなラダープログラムP1を、スキャングループDに関連付ける操作を行う。関連付け部108は、ラングA~Dを含む新たなラダープログラムP1と、スキャングループDと、を関連付ける。ラングA~Dは、新たなラダープログラムP1ではなく、作成済みのラダープログラムP1に貼り付けられてもよい。ラングの選択や貼り付けは、コピーアンドペーストで利用されている操作により行われるようにすればよい。
例えば、関連付け部108は、関連ラング画面SC5が表示された後に選択された複数のラングを、複数のスキャングループの何れかに関連付ける。第1実施形態では、関連ラングSC5が表示された後に、プログラム作成画面SC1のウィンドウW11から複数のラングが選択される。関連付け部108は、当該選択された複数のラングを、スキャングループに関連付ける。関連ラング画面SC5が表示される前に、ラングがスキャングループに関連付けられてもよい。
[置換部]
置換部109は、複数のラングで処理が発生するレジスタを、関連付け部108による関連付け先のスキャングループに応じたレジスタに置換する。例えば、置換部109は、ユーザが置換設定画面SC6で指定した置換設定に基づいて、あるレジスタを他のレジスタに変換する。置換設定には、レジスタの変換ルールが示されている。この変換ルールは、レジスタのアドレスから変数名に変換するルールであってもよいし、レジスタのアドレスを変換するルールであってもよい。
例えば、置換設定は、データ記憶部100に記録されてもよいし、ユーザがラングを分割する時にその場で指定されてもよい。置換設定には、変換前のレジスタと、変換後のレジスタと、の関係が示されているので、置換部109は、変換前のレジスタに関連付けられた変換後のレジスタに対する参照処理又は書込処理が実行されるように、貼り付け先のラダープログラムP1に含まれるレジスタ情報を設定する。
図9の例であれば、ラングA~DがスキャングループDの図面Dに貼り付けられるので、ユーザは、スキャングループAに対応するレジスタと、スキャングループDに対応するレジスタと、の関係を置換設定として指定する。置換部109は、ラングA~Dに含まれるスキャングループAに対応する変数名やレジスタアドレスを、スキャングループDに対応する変数名やレジスタアドレスに置換する。
[割当部]
割当部110は、複数のスキャングループの各々が分散するように、複数のスキャングループの各々を、コントローラ20が有する複数のプロセッサコアの何れかに割り当てる。第1実施形態では、ユーザが手動で割り当てを行うので、割当部110は、ユーザが指定したスキャングループを、ユーザが指定したプロセッサコアに割り当てる。第2実施形態のように、ラダープログラムP1が解析されることによって、自動的な割り当てが実行されてもよい。
例えば、割当部110は、ユーザが指定したラダープログラムP1を、ユーザが指定したスキャングループに割り当てる。第1実施形態では、スキャングループデータD3に、ラダープログラムP1の名称と、スキャングループの名称と、を格納することが割り当てに相当する。これらの割り当ては、プログラム作成画面SC1又は他の画面から行われる。例えば、ユーザが、作成済みのラダープログラムP1の何れかと、作成済みのスキャングループの何れかと、を指定すると、割当部110は、当該指定されたラダープログラムP1を、当該指定されたスキャングループに割り当てる。
例えば、割当部110は、第1のスキャングループを第1のプロセッサコアに割り当て、かつ、第2のスキャングループを第2のプロセッサコアに割り当てる。図6の例であれば、割当部110は、スキャングループA,BをCPU21Aのプロセッサコアに割り当て、かつ、スキャングループCをCPU21Bのプロセッサコアに割り当てる。その後、図9のようにスキャングループDが作成されると、割当部110は、スキャングループDをCPU21Bに割り当てる。
[1-3-2.コントローラで実現される機能]
例えば、コントローラ20は、データ記憶部200及び実行部201を含む。データ記憶部200は、記憶部22により実現される。実行部201は、CPU21により実現される。
[データ記憶部]
データ記憶部200は、モータ制御装置30を制御するために必要なデータを記憶する。例えば、データ記憶部200は、ラダープログラムP1及びモーションプログラムP2を記憶する。データ記憶部200は、プロセッサコアと、スキャングループと、の関係も記憶する。例えば、データ記憶部200は、スキャングループデータD3と同様のデータを記憶してもよい。なお、データ記憶部200が記憶するデータは、上記の例に限られない。例えば、データ記憶部200は、コントローラ20又は他の装置による参照及び書込の少なくとも一方が可能な複数の変数を記憶する。個々の変数が格納されるレジスタは、予め定められている。
[実行部]
実行部201は、複数のプロセッサコアの各々に割り当てられた1又は2以上のスキャングループに関連付けられた1又は2以上のラングを、それぞれの実行周期で並列して実行させる。例えば、実行部201は、コントローラ20に含まれるプロセッサコアごとに、当該プロセッサコアに割り当てられたスキャングループのラダープログラムP1を実行する。即ち、割当部110による割り当てが行われた2以上のプロセッサコアは、自身に割り当てられたスキャングループのラダープログラムP1を実行する。
図6の例であれば、CPU21Aのプロセッサコアにより実現される実行部201は、スキャングループAに関連付けられたラダープログラムP1と、スキャングループBに関連付けられたラダープログラムP1と、を実行する。CPU21Bのプロセッサコアにより実現される実行部201は、スキャングループCに関連付けられたラダープログラムP1を実行する。図9の例であれば、CPU21Bのプロセッサコアにより実現される実行部201は、スキャングループDに関連付けられたラダープログラムP1を実行する。
[1-4.第1実施形態で実行される処理]
図16は、第1実施形態で実行される処理の一例を示すフロー図である。図16では、ユーザがラダープログラムP1を作成して分割する流れが示されている。図16に示すように、プログラム作成装置10は、エンジニアリングツールを起動し、プログラム作成画面SC1を表示部15に表示させる(S1)。プログラム作成装置10は、ユーザの操作に基づいて、モジュール構成を作成する(S2)。
プログラム作成装置10は、新規作成画面SC2を表示部15に表示させ、ユーザの操作に基づいて、スキャングループを作成する(S3)。プログラム作成装置10は、制御グループ定義画面SC3を表示部15に表示させ、制御グループを作成する(S4)。プログラム作成装置10は、変数とコメントを設定する(S5)。プログラム作成装置10は、ラダープログラムP1を作成する(S6)。
プログラム作成装置10は、処理時間画面SC4を表示部15に表示させ、スキャングループを設定する(S7)。S7では、プログラム作成装置10は、ユーザが指定したラダープログラムP1を、ユーザが指定したスキャングループに関連付ける。プログラム作成装置10は、ユーザが指定したスキャングループを、ユーザが指定したプロセッサコアに割り当てる。その他にも、実行周期の指定等の設定が行われる。プログラム作成装置10は、ラダープログラムP1を解析して関連ラングを特定し、関連ラング画面SC5を表示部15に表示させる(S8)。S8では、ユーザが選択した軸に関連性のある関連ラングが特定されてもよいし、ユーザが指定したスキャングループ又はラダープログラムP1の中で関連ラングが特定されてもよい。
プログラム作成装置10は、置換設定画面SC6を表示部15に表示させ、ユーザによる置換設定の指定を受け付ける(S9)。プログラム作成装置10は、モーションプログラムP2を解析して関連部分を特定し、関連部分画面SC7を表示部15に表示させる(S10)。S9及びS10の処理は、必要に応じて実行される。プログラム作成装置10は、ユーザの操作に基づいて、ラダープログラムP1を分割する(S11)。S11では、プログラム作成装置10は、ラダープログラムP1の中から選択された複数のラングを、新たなスキャングループに関連付ける。
プログラム作成装置10は、スキャングループに関連付けられたラダープログラムP1をコンパイルしてコントローラ20に記録する(S12)。コントローラ20は、コンパイル後のラダープログラムP1を実行する(S13)。S13では、コントローラ20は、CPU21のプロセッサコアごとに、当該プロセッサコアに割り当てられたスキャングループの実行周期に基づいて、当該スキャングループに関連付けられたラダープログラムP1を周期的に実行する。
第1実施形態の生産システムSは、ラダープログラムP1に含まれる複数のラングを、それぞれ実行周期が指定可能な複数のスキャングループの何れかに関連付ける。生産システムSは、複数のスキャングループの各々が分散するように、複数のスキャングループの各々を、コントローラが有する複数のプロセッサコアの何れかに割り当てる。生産システムSは、複数のプロセッサコアの各々に割り当てられた1又は2以上のスキャングループに関連付けられた1又は2以上のラングを、それぞれの実行周期で並列して実行させる。これにより、複数のプロセッサコアで並列処理を実現する場合のプログラミングの手間を軽減できる。例えば、あるラダープログラムP1に含まれる一部のラングを抜き出したい場合に、抜き出すラングを新たなスキャングループに関連付けるといったことができるので、新たにラダープログラムP1を作成して新たなスキャングループに関連付けるといった手間を省ける。スキャングループごとに実行周期を指定できるので、コントローラ20が実行する処理の柔軟性が高まる。複数のプロセッサコアでスキャンの並列処理を実行することによって、処理速度の向上と、処理負荷の分散と、を実現できる。
また、生産システムSは、ラダープログラムP1を解析することによって、互いに関連性のある複数の関連ラングを特定する。これにより、互いに関連性のある複数の関連ラングを特定できる。例えば、複数の関連ラングを表示したり、複数の関連ラングをまとめて割り当てたりできるので、プログラミングの手間を軽減できる。
また、生産システムSは、複数の関連ラングを示す関連ラング画面を表示させる。生産システムSは、関連ラング画面が表示された後に選択された複数のラングを、複数のスキャングループの何れかに関連付ける。これにより、関連ラングをユーザに確認させたうえで、スキャングループに関連付ける複数のラングをユーザに選択させることができるので、複数の関連ラングをまとめて選択するといった判断をユーザがしやすくなる。
また、生産システムSは、コントローラが制御する複数の軸の中からユーザが選択した1以上の軸に関連性のある複数の関連ラングを特定する。これにより、ユーザが選択した軸に関連性のある複数の関連ラングをユーザに確認させることができる。ある軸に関連性のある複数の関連ラングをまとめて選択するといった判断をユーザがしやすくなる。
また、生産システムSは、関連性として、少なくとも、1以上の軸への出力につながるレジスタに対する書込処理で遡れる書込処理を、複数の関連ラングとして特定する。これにより、ユーザが選択した1以上の軸への出力につながるレジスタに対する書込処理についての関連性がある複数の関連ラングを特定できる。例えば、ある特定の軸への出力に関連するラングをまとめて分割するか否かをユーザが判断しやすくなる。
また、生産システムSは、特定した複数の関連ラングのうちの1の関連ラングに対し、当該1の関連ラングと処理対象のレジスタ又はデータが共通する1以上の関連ラングを、更に特定する。処理対象のレジスタ又はデータが共通する1以上の関連ラングを特定することによって、プログラミングの手間を軽減できる。
また、生産システムSは、複数のプロセッサコアの各々に割り当てられたスキャングループに関する処理時間を予測する。生産システムSは、複数のスキャングループの各々の実行周期と処理時間の関係を示す処理時間画面SC4を表示させる。これにより、ひとまずラングを割り当てたスキャングループの処理時間の予測結果をユーザに確認させたうえで、スキャングループに関連付ける複数のラングをユーザに選択させることができる。
また、生産システムSは、一のスキャングループに含まれる要素から、他の要素に比べて処理時間を必要とする要素を特定する。生産システムSは、当該特定された要素を表示させる。これにより、他の要素に比べて処理時間を必要とする要素をユーザに確認させ、プログラミングの支援を効果的に行うことができる。
また、生産システムSは、コントローラに軸を制御させるためのモーションプログラムを解析することによって、互いに関連性のある複数の関連部分を特定する。生産システムSは、複数の関連部分を示す関連部分画面SC7を表示させる。これにより、モーションプログラムの中で互いに関連性がある部分をユーザに確認させることができるので、プログラミングの手間を軽減できる。
また、生産システムSは、一のスキャングループに関連付けられた複数のラングを、他のスキャングループに関連付ける。これにより、スキャングループ間のラングの移動が可能になるので、プログラミングの手間を軽減できる。例えば、あるスキャングループに関連付けられた一部のラングだけを抜き出して新たなスキャングループを作成するといったことが可能になる。
また、生産システムSは、複数のラングで処理が発生するレジスタを、関連付け先のスキャングループに応じたレジスタに置換する。これにより、レジスタが自動的に置換されるので、ユーザの利便性が高まる。関連付け先のスキャングループにより、誤ったレジスタに対する処理が発生することを防止できる。
[2.第2実施形態]
次に、生産システムSの別実施形態である第2実施形態を説明する。第2実施形態では、スキャングループの概念を利用せずに、生産システムSで分散処理を実現する場合を例に挙げる。第2実施形態では、第1実施形態と同様の部分は、説明を省略する。
第1実施形態で説明したように、CPU21AだけでラダープログラムP1の全ての処理を順番に実行しようとすると、1つのプロセッサコアで全ての処理を実行しなければならないので、処理に時間がかかる。CPU21A,21Bに処理を分散できれば、処理に要する時間を短縮できる。しかしながら、ユーザが、CPU21A用のラダープログラムP1と、CPU21B用のラダープログラムP1と、を別々に作成しようとすると、非常に手間がかかる。例えば、ユーザが、シングルコアの前提でラダープログラムP1を作成済みだったとしても、分散処理用のラダープログラムP1を作り直す必要がある。
そこで、第2実施形態の生産システムSは、ラダープログラムP1をラング単位で分割し、CPU21A,21Bで、複数のラングの少なくとも一部による処理を分散して実行することによって、処理に要する時間を短縮する。例えば、ユーザが、シングルコアの前提でラダープログラムP1を作成済みだったとしても、既存のラダープログラムP1を流用して分散処理を実現できるので、ユーザの手間も軽減する。以降、第2実施形態の詳細を説明する。
[2-1.第2実施形態で実現される機能]
図17は、生産システムSが有する機能の一例を示す機能ブロック図である。
[2-1-1.プログラム作成装置が有する機能]
第2実施形態のプログラム作成装置10は、データ記憶部、同期対象設定部111、取得部112、及び分割部113を含む。同期対象設定部111、取得部112、及び分割部113は、CPU11を主として実現される。
[データ記憶部]
データ記憶部100は、コントローラ20の複数のプロセッサコアによる分散処理を実現するために必要なデータを記憶する。例えば、データ記憶部100は、エンジニアリングツールT、制御グループデータD1、及び処理時間データD2を記憶する。エンジニアリングツールTは、ユーザがコントローラ20及びモータ制御装置30の設定を行うためのプログラムである。第2実施形態では、エンジニアリングツールTの機能として、ラダープログラムP1の分割が実行される場合を説明するが、ラダープログラムP1の分割は、エンジニアリングツールT以外のツールによって実現されてもよい。
図18は、制御グループデータD1の一例を示す図である。制御グループデータD1は、制御グループを定義するデータである。制御グループとは、同じ制御周期で同期させる軸の集合である。コントローラ20には、軸ごとに、出力に関する値を格納するためのレジスタ(以降、出力レジスタ)が用意されているので、制御グループは、同じ制御周期で同期が必要な出力レジスタの集合ということもできる。以降、各軸に対応する出力レジスタを軸出力という。
第2実施形態では、ユーザがエンジニアリングツールTから同期対象の軸を指定する場合を説明するが、同期対象の軸は、ユーザが指定しなくてもよい。例えば、軸ごとに設定された制御周期に基づいて、同じ制御周期の軸同士が同じ制御グループに属するように、同期対象の軸が自動的に設定されてもよい。他にも例えば、エンジニアリングツールTを操作するユーザ以外の者が同期対象の軸を指定してもよい。
図18の例では、制御グループ1,2が存在する。制御グループ1には、所定の制御周期(例えば、1ms)が設定されている。第2実施形態では、制御グループ2に、制御グループ1と同じ制御周期が設定される(ただし、同期対象の軸は異なる)場合を説明するが、後述の変形例のように、制御グループ1の制御周期と、制御グループ2の制御周期と、は異なってもよい。同期対象の軸を同期させるためには、軸出力に対する書込処理のタイミングも合わせる必要がある。
例えば、制御グループ1には、軸1~6が属する。制御グループ2には、軸7~10が属する。制御グループデータD1は、制御グループ1に属する軸1~6の軸出力を識別可能なレジスタ識別情報と、制御グループ2に属する軸7~10の軸出力を識別可能なレジスタ識別情報と、を含む。第2実施形態では、レジスタのアドレス(レジスタ番号)がレジスタ識別情報に相当する場合を説明するが、レジスタ識別情報は、レジスタを識別可能な情報であればよい。例えば、レジスタ識別情報は、レジスタの名前であってもよい、レジスタの開始アドレスとそこからのオフセットの組み合わせであってもよい。
なお、制御グループデータD1に含まれる情報は、図18の例に限られない。制御グループデータD1は、制御グループに関する情報を含めばよい。例えば、軸出力以外の他の出力レジスタ(例えば、I/O出力の出力レジスタ)が制御グループの基準になる場合、他の出力レジスタのレジスタ識別情報が制御グループデータD1に含まれるようにすればよい。また、制御グループは、1つであってもよいし、3つ以上であってもよい。個々の制御グループに含まれる軸の数も、任意の数であってよい。処理時間データD2は、第1実施形態と同様であってよい。
なお、データ記憶部100が記憶するデータは、上記の例に限られない。例えば、データ記憶部100は、分割前のラダープログラムP1と、分割後のラダープログラムP11と、を記憶する。分割前のラダープログラムP1のデータ構造は、図2で説明した通りである。例えば、分割前のラダープログラムP1は、シングルコアで実行することを想定して作成されたものである。以降、分割前のラダープログラムP1を、単にラダープログラムP1と記載し、分割後のラダープログラムP11を、分割プログラムp1と記載する。
分割プログラムp1は、後述の分割部113により作成される。1つのラダープログラムP1から、複数の分割プログラムp1が作成される。第2実施形態では、CPU21A用の分割プログラムp1と、CPU21B用の分割プログラムp1と、が作成される。個々の分割プログラムp1は、コンパイルされて機械語に変換されて、コンパイル後の分割プログラムp2が作成される。データ記憶部100は、コンパイル後の分割プログラムp2を記憶してもよい。第2実施形態では、CPU21A用のコンパイル後の分割プログラムp2と、CPU21B用のコンパイル後の分割プログラムp2と、が作成される。
他にも例えば、データ記憶部100は、コントローラ20のレジスタの定義を示すレジスタ定義データ、及び、コントローラ20とモータ制御装置30との通信設定を示す通信設定データといった他のデータを記憶してもよい。軸出力や他のレジスタの体系は、レジスタ定義データに定義されているものとする。ユーザは、エンジニアリングツールからレジスタの定義や通信設定も行うことができる。
[同期対象設定部]
同期対象設定部111は、コントローラ20の複数の軸を同期対象として設定する。コントローラ20の軸とは、コントローラ20の制御対象となる軸である。この軸は、コントローラ20が直接的に制御する軸だけでなく、コントローラ20が他の装置(第2実施形態では、モータ制御装置30)を介して間接的に制御する軸も含む意味である。第2実施形態では、同期対象設定部111は、ユーザが指定した複数の軸を同期対象として設定するが、先述したように、同期対象の軸は、ユーザが指定するのではなく、自動的に設定されてもよい。同期対象設定部111は、同期対象の軸を示す制御グループデータD1をデータ記憶部100に記録することによって、同期対象の軸を設定する。
[取得部]
取得部112は、コントローラ20の動作を示すラダープログラムP1を取得する。例えば、取得部112は、データ記憶部100からラダープログラムP1を取得する。取得部112は、コントローラ20のデータ記憶部200、他の装置、又は外部の情報記憶媒体からラダープログラムP1を取得してもよい。複数のラダープログラムP1が存在する場合、取得部112は、複数のラダープログラムP1を取得してもよい。この場合、ラダープログラムP1ごとに、分割プログラムp1が作成される。
[分割部]
分割部113は、ラダープログラムP1を複数のラングに分割し、複数のラングの少なくとも一部による処理が複数のプロセッサコアのうち異なる2以上のプロセッサコアに分散されるように、2以上のプロセッサコアに、1以上のラングを割り当てる。
第2実施形態では、分割部113は、ラング単位でラダープログラムP1を分割する。ラングは、プログラム部分の一例である。このため、ラングと記載した箇所は、プログラム部分と読み替えることができる。ラダープログラムP1に含まれるラングがn個(nは2以上の整数)だったとすると、分割部113は、ラダープログラムP1を、n個のプログラム部分に分割する。以降の説明では、分割部113が、ラングA~Nの合計14個のラングを含むラダープログラムP1を、14個のプログラム部分に分割する場合を例に挙げる。
なお、分割部113は、あるプログラム部分に含まれるラングの数と、他のプログラム部分に含まれるラングの数と、が異なるように、ラダープログラムP1を分割してもよい。例えば、分割部113は、あるプログラム部分は2つのラングを含み、他のプログラム部分は1つのラングだけを含むといったように、ラダープログラムP1を分割してもよい。1つのプログラム部分に含まれる複数のラングは、後述する関係性があるものとする。分割部113は、ラダープログラムP1に含まれる図形や命令等によって、ラング間の関係性を特定し、関係性のある複数のラングを1つのプログラム部分として分割してもよい。
また、ラダープログラムP1の分割単位は、ラングに限られない。例えば、分割部113は、ラダープログラムP1をラングの途中で分割し、ラングの途中までがプログラム部分に含まれるようにしてもよい。例えば、分割部113は、ラダープログラムP1を、コイル等の図形単位で分割してもよいし、特定の図形が配置された部分で分割してもよい。例えば、分割部113は、ユーザのコメントがラダープログラムP1に含まれる場合には、あるコメントから次のコメントまでが1つのプログラム部分となるように、ラダープログラムP1を分割してもよい。分割部113は、所定の分割方法に基づいて、ラダープログラムP1を分割すればよい。
分割部113は、ラダープログラムP1から分割された複数のラングの中から、CPU21Aのプロセッサコアに割り当てるラングと、CPU21Bのプロセッサコアに割り当てるラングと、を決定する。第2実施形態では、個々のラングは、CPU21Aのプロセッサコア又はCPU21Bのプロセッサコアの何れか一方のみに割り当てられる場合を説明するが、これら両方のプロセッサコアに割り当てられるラングが存在してもよい(例えば、後述の変形例2-1におけるラングA~D)。即ち、上記の「複数のラングの少なくとも一部による処理」は、全てのラングの処理だけでなく、一部だけのラングの処理だけをも含む意味である。
また、第2実施形態では、分割部113が、コントローラ20に含まれる全てのプロセッサコアに、何らかのラングを割り当てる場合を説明するが、ラングが割り当てられないプロセッサコアが存在してもよい。即ち、上記の「複数のプロセッサコアのうち異なる2以上のプロセッサコア」の記載における「複数プロセッサコア」と「2以上のプロセッサコア」の数は、一致していなくてもよい。例えば、コントローラ20が、CPU21Aのプロセッサコア及びCPU21Bのプロセッサコアとは異なる他のプロセッサコアを含む場合に、他のプロセッサコアにラングが割り当てられなくてもよい。例えば、他のプロセッサコアは、ラダープログラムP1の実行ではなく、外部との通信等の他の目的で利用される。また、ラングの中には、CPU21Aのプロセッサコア又はCPU21Bのプロセッサコアの何れにも割り当てられないラングが存在してもよい。
なお、プロセッサコアにラングを割り当てるとは、ラングの処理の実行主体となるプロセッサコアを決定することである。別の言い方をすれば、個々のプロセッサコアが処理すべきラングを決定することは、プロセッサコアにラングを割り当てることに相当する。個々のプロセッサコアに割り当てられるラングの数は、任意の数であってよい。第2実施形態のように、制御周期が定められる場合には、個々の制御周期に処理が完了する程度の数のラングがプロセッサコアに割り当てられるようにすればよい。
第2実施形態では、分割部113は、関係性特定処理、グループ化処理、及び割り当て処理といった3つの処理を実行することによって、CPU21Aのプロセッサコア及びCPU21Bのプロセッサコアに、1以上のラングを割り当てる。以降、これら3つの処理の詳細を説明する。
[関係性特定処理]
関係性特定処理は、ラングの処理を解析し、ラング間の関係性を特定する処理である。ラングの処理は、ラングに含まれるコイル等の要素により示される処理である。ラングは、1以上の処理を含む。ラングの少なくとも一部の処理が、関係性特定処理における解析対象となる。関係性特定処理は、個々のラングに含まれる要素を解析し、互いに関係性があるラングを特定する。
ラング間の関係性とは、あるラングの処理と、他のラングの処理と、の内容が互いに関連するか否かである。例えば、あるラングの処理を実行するために、他のラングの処理の実行が完了している必要がある場合に、これらのラングは、関係性を有する。別の言い方をすれば、あるラングの処理が、他のラングの処理の実行結果を参照する場合に、これらのラングは、関係性を有する。他にも例えば、あるラングの処理と、他のラングの処理と、を同じプロセッサコアで実行した方が効率的な場合、これらのラングは関係性を有する。
第2実施形態では、分割部113は、コントローラ20のレジスタに対する書込処理及び参照処理に基づいて、複数のラングの関係性を特定する。分割部113は、同じレジスタに対して書込処理及び参照処理の少なくとも一方をするラング同士を、関係性があるラングとして特定する。分割部113は、あるレジスタの書込処理を含むラングと、このレジスタの参照処理を含むラングと、を関係性があるラングとして特定する。
図19は、レジスタに対する書込処理及び参照処理を含むラングの一例を示す図である。図19の「A」~「N」は、ラングの名前である。「reg1」~「reg13」は、レジスタの名前である。「w」は、書込処理を意味する。あるラングに、あるレジスタに対する書込処理が含まれる場合に、図19のテーブルのうち、このラング及びこのレジスタのセルに「w」が示される。「r」は、参照処理を意味する。あるラングに、あるレジスタに対する参照処理が含まれる場合に、図19のテーブルのうち、このラング及びこのレジスタのセルに「r」が示される。なお、「Gr1」及び「Gr2」は、図18で説明した軸出力の名前であるが、関連性特定処理では用いられないものとする。
例えば、ラングAは、レジスタreg1に対する書込処理を含む。より具体的には、ラングAは、書込処理を示す処理識別情報と、書込処理の対象となるレジスタreg1を示すレジスタ識別情報と、を含む。処理識別情報は、処理内容を識別可能な情報である。例えば、処理識別情報は、処理を示す図形、又は、命令を示す文字列である。レジスタ識別情報は、レジスタを識別可能な情報である。例えば、レジスタ識別情報は、レジスタのアドレス、又は、レジスタの名前である。なお、書込処理で書き込まれる値は、ラング内で指定されていてもよいし、何らかの計算によって取得されてもよい。
ラングBは、レジスタreg1に対する参照処理と、レジスタreg2に対する書込処理と、を含む。より具体的には、ラングBは、参照処理を示す処理識別情報、参照処理の対象となるレジスタreg1を示すレジスタ識別情報、書込処理を示す処理識別情報、及び書込処理の対象となるレジスタreg2を示すレジスタ識別情報を含む。分割部113は、ラングAのレジスタ識別情報と、ラングBのレジスタ識別情報と、がともにレジスタreg1を示すので、ラングA,Bが互いに関係性があることを特定する。更に、分割部113は、ラングAの処理識別情報が書込処理を示し、ラングBの処理識別情報が参照処理を示すので、ラングAの方がラングBよりも実行順序が先であることを特定する。
分割部113は、他のラングC~Nも同様にして、個々のラングに含まれる処理識別情報及びレジスタ識別情報を比較して、ラング間の関係性を特定する。例えば、分割部113は、あるラングのレジスタ識別情報と、他のラングのレジスタ識別情報と、がともに同じレジスタを示す場合に、これらのラングに関係性があることを特定する。分割部113は、これらのラングのうち、処理識別情報が書込処理を示すラングを、処理識別情報が参照情報を示すラングよりも実行順序が先であることを特定する。
図20は、関係性特定処理によって特定されたラングの関係性の一例を示す図である。図20の「I/O(Sync)」は、コントローラ20のレジスタのデータ同期を意味する。データ同期自体は、任意の方法によって実行可能であり、例えば、バス接続又はネットワーク接続によるデータ同期が可能である。データ同期は、周期的に実行されてもよいし、非周期的に実行されてもよい。例えば、制御周期ごとに、データ同期が実行される。複数の制御周期が混在する場合には、最も短い制御周期に合わせてデータ同期が実行されてもよい。コントローラ20のレジスタ間のデータ同期と、コントローラ20及びモータ制御装置30の間でのデータ同期と、の少なくとも一方が実行される。
ある制御周期が訪れると、データ同期が実行された後に、個々のラングの処理が実行される。図20では、ラングA~Nの関係性を矢印で示す。矢印は、実行順序を示す。第2実施形態では、あるレジスタに書込処理が実行された後に、このレジスタに参照処理が実行されるので、書込処理を含むラングから参照処理を含むラングに矢印が伸びる。
例えば、ラングJは、ラングIの書込処理が実行されたレジスタreg9の参照処理を含むので、図20では、ラングIからラングJに矢印が伸びる。ラングIは、他のラングの書込処理が実行されたレジスタの参照処理を含むわけではないので、図20では、「I/O(Sync)」の枠からラングIに矢印が伸びる。ラングJは、他のラングの参照処理で参照されるレジスタへの書込処理を含まないので、ラングJから伸びる矢印はない。
図20では、他のラングの関係性も同様の矢印で示されている。例えば、ラングE,A,C,Gは、他のラングの書込処理が実行されたレジスタの参照処理を含むわけではないので、「I/O(Sync)」からラングE,A,C,Gに矢印が伸びる。ラングF,B,D,Hは、それぞれラングE,A,C,Gの書込処理が実行されたレジスタの参照処理を含むので、ラングE,A,C,GからラングF,B,D,Hに矢印が伸びる。
ラングFの書込処理が実行されたレジスタreg6は、ラングK,L,Nの参照処理で参照されるので、ラングFからラングK,L,Nに矢印が伸びる。同様に、ラングB,Dの書込処理が実行されたレジスタは、ラングL,Mの参照処理で参照されるので、ラングB,DからラングL,Mに矢印が伸びる。ラングHの書込処理が実行されたレジスタは、ラングMの参照処理で参照されるので、ラングHからラングMに矢印が伸びる。
図20の例では、ラングI,J、ラングE,F、ラングA,B、ラングC,D、及びラングG,Hは、互いに関連性がないので、並列処理が可能である。例えば、ラングI,Jの処理と、ラングE,Fの処理と、が互いに異なるプロセッサコアで同時に実行されても、何れかの処理の実行待ちになるといったことが発生しないので、並列処理が可能である。
一方で、ラングK,L,Nの参照処理の実行には、ラングFの書込処理の完了が必要である。ラングL,Mの参照処理の実行には、ラングBの書込処理の完了が必要である。ラングMの参照処理の実行には、ラングB,D,Hの書込処理の完了が必要である。このように、1以上の他のラングの書込処理の完了が実行条件になるラングも存在する。このようなラングは、並列処理は可能ではなく、処理順序に制約も発生する。
第2実施形態では、レジスタに対する書込処理及び参照処理が直接的に関係する場合だけではなく、間接的に関係する場合も、関係性を有することに含まれるものとする。図20の例であれば、上から下への矢印で直接的につながっている場合だけでなく、他のラングを介してつながっていることも、関係性を有することに含まれる。例えば、ラングEとラングK,L,Nとは、ラングFを介して、上から下への矢印でつながっているため、これらラングE,F,K,L,Nは、関係性を有する。一方、ラングFとラングBとは、ラングLを介して矢印でつながっているが、上から下への矢印だけでつながっているわけではないため、ラングFとラングBは、関係性を有さない。
なお、分割部113は、レジスタに対する処理以外の情報を利用して、ラング同士の関係性を特定してもよい。ラング同士の関係性は、予め定められた方法に基づいて判定されるようにすればよい。例えば、分割部113は、あるラングに、他のラング又は図面を呼び出すだめの命令が含まれる場合に、これらのラングに関係性があると判定してもよい。他にも例えば、分割部113は、レジスタではなく、所定のファイルに対する処理の情報を利用して、ラング同士の関係性を特定してもよい。この処理は、ファイルに対する書込処理又は参照処理である。例えば、分割部113は、あるラングの処理対象となるファイルと、他のラングの処理対象となるファイルと、が同じであれば、これらのラングに関係性があると判定する。
[グループ化処理]
グループ化処理は、ラングをグループ化する処理である。関係性処理で特定された関係性を有するラングの集まりは、何らかのグループを意味するものではあるが、グループ化処理のグループは、具体的な処理内容の分類を意味する。同じグループに属する複数のラングは、原則として同じプロセッサコアに割り当てられる。1つのプロセッサコアには、1つのグループしか割り当てられないわけではなく、あるグループと、他のグループと、が同じプロセッサコアに割り当てられてもよい。
第2実施形態では、下記の5つのグループが存在する場合を例に挙げる。ラングは、5つのグループのうちの1以上のグループに属する。以降、下記の5つのグループを区別しない時は、単にグループと記載することがある。(1)制御グループ:図18で説明した通りであり、グループ化処理では、軸出力に対応する処理を含むラングと、このラングと関係性のある他のラングと、の集合を意味する。(2)固有グループ:1の制御グループだけに属するラング(制御グループに固有の処理を含むラング)の集合を意味する。(3)共通グループ:複数の制御グループに属するラング(制御グループ間で共通の処理を含むラング)の集合を意味する。(4)派生グループ:制御グループには属さないが、制御グループに属するラングと関係性のあるラング(制御グループに固有の処理から派生した処理を含むラング)の集合を意味する。(5)その他グループ:上記の何れにも属さないラング(制御グループには属さないその他の処理を含むラング)の集合を意味する。
図21は、グループ化処理の手順の一例を示す図である。図22は、グループ化処理によってグループ化されたラングの一例を示す図である。第2実施形態では、分割部113は、同期対象として設定された複数の軸の各々に対応するラングが同じグループに属するように、グループ化を行う。第2実施形態では、グループ化処理は、図21のステップST1~ST3を含む。ステップST3まで実行されると、図22のようなグループに分類される。
第2実施形態では、図18の制御グループデータD1に、2つの制御グループ1,2が定義されている。ここでは、ラングN,Lが、制御グループ1の軸出力(図18では、レジスタ識別情報1~6が示すレジスタ)への書込処理を含むものとする。この軸出力は、図19、図21、及び図22では、Gr1の記号で示す。また、ラングMが、制御グループ2の軸出力(図18では、レジスタ識別情報7~10が示すレジスタ)への書込処理を含むものとする。この軸出力は、図19、図21、及び図22では、Gr2の記号で示す。
図21のステップST1のように、まず、分割部113は、個々のラングを解析し、制御グループデータD1に定義された軸出力Gr1に対応する処理(軸出力Gr1への書込処理)を含むラングとして、ラングN,Lを特定する。同様に、分割部113は、個々のラングを解析し、制御グループデータD1に定義された軸出力Gr2に対応する処理(軸出力Gr2への書込処理)を含むラングとして、ラングMを特定する。
次に、ステップST2のように、分割部113は、軸出力Gr1に対応する処理を含むラングL,Nと、ラングL,Nと関係性のあるラングA,B,C,D,E,Fと、が同じ制御グループ1に属するように、グループ化を行う。分割部113は、制御グループ2の軸出力Gr2に対応する処理を含むラングMと、ラングMと関係性のあるラングA,B,C,D,G,Hと、が同じ制御グループ2とに属するように、グループ化を行う。
最後のステップST3は、ステップST3-1~ST3-4を含む。ステップST3-1のように、分割部113は、制御グループ1,2に固有の処理を含むラングを、固有グループ1,2にする。例えば、分割部113は、制御グループ1とは異なる他の制御グループ2の軸出力Gr2に対応する処理を含むラングMと関係性のないラングE,F,L,Nが、当該制御グループ1に対応する固有グループ1に属するように、グループ化を行う。同様に、分割部113は、制御グループ2とは異なる他の制御グループ1の軸出力Gr1に対応する処理を含むラングL,Nと関係性のないラングG,H,Mが、当該制御グループ2に対応する固有グループ2に属するように、グループ化を行う。
ステップST3-2のように、分割部113は、制御グループ間で共通の処理を含むラングを、共通グループにする。例えば、分割部113は、複数の制御グループ1,2に属するラングA,B,C,Dが、複数の制御グループ1,2に対応する共通グループに属するように、グループ化を行う。なお、ラングA,BとラングC,Dは関係性がないので、分割部113は、ラングA,Bを1つ目の共通グループに属するようにグループ化を行い、ラングC,Dを2つ目の共通グループに属するようにグループ化を行ってもよい。
ステップST3-3のように、分割部113は、固有グループ1,2から派生した処理を含むラングを、派生グループにする。例えば、分割部113は、制御グループ1に対応する固有グループ1に属するラングFと関係性があるが、制御グループ1,2の何れにも属さないラングKを、派生グループとする。制御グループ2は、該当するラングがないので、派生グループは存在しない。なお、ラングKは、派生グループではなく、固有グループ1に属するものとして扱ってもよい。分割部113は、共有グループから派生した処理を含むラングを、派生グループにしてもよい。
ステップST3-4のように、分割部113は、制御グループ1,2に属さないその他の処理を含むラングを、その他グループにする。例えば、分割部113は、制御グループ1,2に属さないラングI,Jがその他グループに属するように、グループ化を行う。ラングKもその他グループに分類してもよいが、第2実施形態では、その他グループは、派生グループにも属さないラングI,Jであるものとする。
以上のように、分割部113は、コントローラ20のレジスタに対する処理に基づいて、複数のラングのグループ化を行う。第2実施形態では、レジスタに対する処理に基づいて関係性が特定されるので、分割部113は、互いに関係性のあるラング同士が同じグループに属するように、グループ化を行う。分割部113は、関係性特定処理で特定した関係性を、そのままグループとして用いてもよい。この場合、関係性特定処理は、グループ化処理を兼ねることになる。
なお、分割部113が、複数のラングを複数のグループにグループ化する処理は、上記の例に限られない。分割部113は、複数のラングを解析し、同じプロセッサコアに割り当てるべきラング同士が同じグループに属するように、グループ化をすればよい。例えば、分割部113は、図20に示す関係性をそのままグループとして扱ってもよい。他にも例えば、分割部113は、図21の制御グループ1,2だけのグループ化を行ってもよい。この場合、固有グループ1,2、共通グループ、派生グループ、及びその他グループのグループ化は行われない。
[割り当て処理]
割り当て処理は、CPU21Aのプロセッサコア及びCPU21Bのプロセッサコアに、1以上のラングを割り当てる処理である。分割部113は、複数のグループの少なくとも一部が2以上のプロセッサコアに分散されるように、割り当てを行う。第2実施形態では、割り当ての対象となる2以上のプロセッサコアは、コントローラ20に含まれる複数のプロセッサコアの全部である場合を説明する。即ち、コントローラ20に含まれる2つのプロセッサコア(CPU21Aのプロセッサコア及びCPU21Bのプロセッサコア)の全てが、割り当て対象となる2以上のプロセッサコアに相当する。
なお、割り当ての対象となる2以上のプロセッサコアは、コントローラ20に含まれる複数のプロセッサコアの一部だけであってもよい。例えば、コントローラ20に3つのプロセッサコアが含まれている場合に、3つのプロセッサコアのうちの2つだけに、割り当てが行われてもよい。この場合、割り当ての対象にならなかったプロセッサコアは、ラングA~Nを含むラダープログラムP1とは別の他のラダープログラムP1の実行のために利用されてもよいし、外部との通信用のようにモータ制御装置30の制御以外の目的で利用されてもよい。
図23は、割り当て処理によってプロセッサコアに割り当てられたラングの一例を示す図である。第2実施形態では、分割部113は、共通グループに属する複数のラングA,B,C,DがCPU21A,21Bのプロセッサコアに分散されるように、割り当てを行う。例えば、分割部113は、CPU21Aのプロセッサコアに、共通グループに属するラングA,Bを割り当てる。分割部113は、CPU21Bのプロセッサコアに、共通グループに属するラングC,Dを割り当てる。共通グループに属するラングA,B,C,Dの処理は、複数の制御グループ1,2に関係するので、図23の例では、相対的に先の順番に実行されるように割り当てられる。
分割部113は、複数の固有グループ1,2がCPU21A,21Bのプロセッサコアに分散されるように、割り当てを行う。例えば、分割部113は、CPU21Aのプロセッサコアに、固有グループ1に属するラングE,F,L,Nを割り当てる。分割部113は、CPU21Bのプロセッサコアに、固有グループ2に属するラングG,H,Mを割り当てる。
例えば、分割部113は、コントローラ20のレジスタに対する処理に応じた実行順序が維持されるように、割り当てを行う。CPU21Aのプロセッサコアであれば、分割部113は、図19に示すレジスタに対する書込処理及び参照処理の実行順序(即ち、図23等における矢印の向きで示される実行順序)が維持されるように、ラングE,Fの後にラングN,Lが実行されるように、割り当てを行う。ラングN,Lは、何れが先になってもよい。図23の例では、分割部113は、CPU21Bのプロセッサコアの処理(ラングDの処理)が影響するラングLが後になるように、ラングN,Lの順序を決定する。ラングLの処理までに、ラングDの処理が完了していなければ、ラングLの処理の実行待ちが発生する。
同様に、CPU21Bのプロセッサコアであれば、分割部113は、ラングG,Hの後にラングMが実行されるように、割り当てを行う。図23の例では、分割部113は、CPU21Bのプロセッサコアの処理(ラングDの処理)が影響するラングLが後になるように、ラングN,Lの順序を決定する。ラングMの処理までに、ラングBの処理が完了していなければ、ラングMの処理の実行待ちが発生する。なお、実行順序の全てが維持される必要はなく、並列して実行可能なものについては、実行順序は維持されなくてもよい。少なくとも、図23等の矢印で示される実行順序が維持されるようにすればよい。
分割部113は、派生グループに属するラングKを、派生グループの派生元である固有グループ1と同じプロセッサコアが割り当てられるように、割り当てを行う。図23の例では、固有グループ1はCPU21Aのプロセッサコアに割り当てられるので、分割部113は、同じCPU21Aのプロセッサコアに、ラングKを割り当てる。ラングKと、ラングL,Nと、は関係性がないので、ラングKは、ラングL,Nよりも後に割り当てられてもよい。
分割部113は、その他グループに属するラングI,Jを、CPU21A,21Bの何れかのプロセッサコアに割り当てる。例えば、分割部113は、CPU21A,21Bのプロセッサコアのうち、相対的に空いているプロセッサコアに、ラングI,Jを割り当てる。相対的に空いているとは、合計の処理時間の見積もりが相対的少ないこと、割り当てられたラングの数が少ないこと、又は割り当てられたグループの数が少ないことである。分割部113は、ラングI,Jを割り当てるプロセッサコアをランダムに決定してもよい。その他グループに属するラングを割り当てるプロセッサコアは、予め固定されていてもよいし、性能が高いプロセッサコアが自動的に選択されてもよい。
なお、分割部113は、2のプロセッサコアに分散された2のラングのそれぞれにおいて、コントローラ20の共通のレジスタに対する書込処理及び参照処理が発生する場合には、書込処理を行うプロセッサコアの当該書込処理のラングの後及び参照処理を行うプロセッサコアの当該参照処理のラングの前に、プロセッサコア間の通信処理を挿入してもよい。分割部113は、通信処理として、バス接続における通信処理、又は、ネットワーク接続における通信処理を挿入可能である。プロセッサコア間の通信処理自体は、公知の種々の方法を適用可能である。
図23の例であれば、分割部113は、ラングDの完了後に、CPU21BのプロセッサコアからCPU21Aのプロセッサコアに対し、ラングDが完了したことを示す通知を送信する処理を挿入する。分割部113は、ラングBの完了後に、CPU21AのプロセッサコアからCPU21Bのプロセッサコアに対し、ラングBが完了したことを示す通知を送信する処理を挿入する。分割部113は、ラングNの後に、ラングDの完了を受信する処理を挿入する。この処理により、ラングDの完了が検知されると、ラングLの処理が実行される。分割部113は、ラングJの後に、ラングBの完了を受信する処理を挿入する。この処理により、ラングBの完了が検知されると、ラングMの処理が実行される。
また、分割部113は、所定の制御周期内で、2以上のプロセッサコアに割り当てられた1以上のラングの処理の実行が全て完了するように、割り当てを行ってもよい。分割部113は、制御グループデータD1を参照し、制御グループ1,2の制御周期を取得する。分割部113は、処理時間データD2に基づいて、個々のラングに要する処理時間を見積もる。分割部113は、1つのプロセッサコアが実行するラングの処理の処理時間の合計値が制御周期を超えないように、プロセッサコアにラングを割り当てる。
図23の例であれば、分割部113は、ラングA,B,E,F,K,N,Lの処理時間の合計値が、制御グループ1の制御周期を超えないように、CPU21Aのプロセッサコアへの割当を行う。分割部113は、ラングC,D,G,H,I,J,Mの処理時間の合計値が、制御グループ2の制御周期を超えないように、CPU21Bのプロセッサコアへの割当を行う。分割部113は、先述したラング間に挿入される通信処理に要する時間も処理時間の合計値に含めてもよい。
分割部113は、プロセッサコアに割り当てたラングに基づいて、分割プログラムp1を作成する。例えば、分割部113は、CPU21Aに割り当てたラングA,B,E,F,K,N,Lを含む分割プログラムp1を作成する。この分割プログラムp1は、ラングA,B,E,F,K,N,Lの順で並べられており、先述した通信処理も含む。分割部113は、CPU21Aに割り当てたラングC,D,G,H,I,J,Mを含む分割プログラムp1を作成する。この分割プログラムp1は、ラングC,D,G,H,I,J,Mの順で並べられており、先述した通信処理も含む。
分割部113は、プロセッサコアごとに、分割プログラムp1をコンパイルし、機械語に変換された分割プログラムp2を作成する。例えば、分割部113は、CPU21Aの分割プログラムp1をコンパイルし、CPU21Aに実行させる分割プログラムp2を作成する。分割部113は、CPU21Bの分割プログラムp1をコンパイルし、CPU21Bに実行させる分割プログラムp2を作成する。分割部113は、コンパイル後の分割プログラムp2を、データ記憶部100及びコントローラ20に記録する。コンパイラ自体は、公知の種々のものを利用可能である。上記説明した関係性処理、グループ化処理、及び割り当て処理を実行するようなコンパイラを用意し、これらの処理がコンパイラにより実行されてもよい。
[2-1-2.コントローラで実現される機能]
データ記憶部200は、記憶部22を主として実現される。データ記憶部200は、モータ制御装置30を制御するために必要なデータを記憶する。例えば、データ記憶部200は、ラダープログラムP1、分割プログラムp1、及びコンパイル後の分割プログラムp2がコンパイルされて機械語に変換されたプログラムを記憶する。データ記憶部200は、ラダープログラムP1及び分割プログラムp1は記憶しなくてもよい。分割部113による割り当てが行われた2以上のプロセッサコアは、自身に割り当てられた1以上のラングの処理を実行する。即ち、2以上のプロセッサコアは、コンパイル後の分割プログラムp2を実行する。
なお、データ記憶部200が記憶するデータは、上記の例に限られない。例えば、データ記憶部200は、コントローラ20又は他の装置による参照及び書込の少なくとも一方が可能な複数の変数を記憶する。個々の変数が格納されるレジスタは、予め定められている。例えば、ユーザは、プログラム作成装置10のエンジニアリングツールTを利用して、モータ制御装置30の制御で利用するレジスタを定義する。ユーザは、エンジニアリングツールTから、制御対象のモータ制御装置30の設定やネットワークの通信設定といった種々の設定が可能である。データ記憶部200は、エンジニアリングツールTから行われた設定内容を示すファイルを記憶してもよい。
[2-2.第2実施形態で実行される処理]
図24は、生産システムSで実行される処理の一例を示すフロー図である。図24に示すように、プログラム作成装置10は、エンジニアリングツールTを起動し、ユーザが指定した複数の軸を同期対象として設定する(S100)。S100では、プログラム作成装置10は、制御グループデータD1を生成して記憶部12に記録する。
プログラム作成装置10は、コントローラ20に記憶されたラダープログラムP1を取得する(S101)。S101では、プログラム作成装置10は、ラダープログラムP1を表示部15に表示させる。プログラム作成装置10は、ユーザが所定の操作をした場合に、ラダープログラムP1を複数のラングに分割する(S102)。プログラム作成装置10は、先述した関係性特定処理、グループ化処理、及び割り当て処理を実行する(S103~S105)。プログラム作成装置10は、割り当て処理に基づいて、分割プログラムp1を作成してコンパイルし(S106)、コントローラ20に、コンパイル後の分割プログラムp2を記録する(S107)。
コントローラ20は、コンパイル後の分割プログラムp2を実行し、モータ制御装置30との間で通信を行うことによって、モータ40を制御する(S108)。S108では、CPU21Aのプロセッサコアは、自身に対応する分割プログラムp2を実行し、自身に割り当てられたラングの処理を実行する。CPU21Bのプロセッサコアは、自身に対応する分割プログラムp2を実行し、自身に割り当てられたラングの処理を実行する。コントローラ20は、CPU21A,21Bのプロセッサコアによる処理結果に基づいて、モータ制御装置30に指令を送信する。モータ制御装置30は、指令に応じた処理を実行してモータ40を制御する。モータ制御装置30は、コントローラ20に、処理結果に基づく応答を送信する。
第2実施形態の生産システムSは、複数のラングの少なくとも一部による処理を複数のプロセッサコアのうち異なる2以上のプロセッサコアに分散して実行することにより、処理に要する時間が短くなる。個々のプロセッサコアが実行する処理が減るので、プロセッサコアの処理負荷を軽減できる。その結果、処理が遅れて生産システムSに異常が発生することを防止できる。異常の発生を防止することで、生産システムSにおける生産効率も上がる。また、コントローラ20が、ラダープログラムP1自体を記憶しつつ、このラダープログラムP1が分割されてコンパイルされた分割プログラムp2を記憶して実行することによって、処理に要する時間が短くなる。その一方で、これらを1つのプログラムとして呼び出すことができ、プログラムの取り違えを起こさずに、ユーザによる確認や編集が可能になる。
また、生産システムSは、所定の制御周期内で、2以上のプロセッサコアに割り当てられた1以上のラングの実行が全て完了するので、制御周期内で処理が完了せずに生産システムSに異常が発生することを防止できる。異常の発生を防止することで、生産システムSにおける生産効率も上がる。例えば、プロセッサコア間で制御周期が異なっていたとしても、個々のプロセッサコアに応じた制御周期内で処理を間に合わせることができる。
また、生産システムSは、コントローラ20のレジスタに対する処理に応じた実行順序が維持されるように割り当てが行われるので、ラダープログラムP1の作成者が意図した実行順序で処理を実行できる。その結果、生産システムSにおける異常の発生を防止し、生産効率が上がる。
また、生産システムSは、複数のラングの各々を複数のグループにグループ化し、複数のグループがそれぞれ複数のプロセッサコアに分散されるように割り当てを行うことによって、効率的な分散処理が可能になる。例えば、プロセッサコアXにグループ1の処理を実行させ、プロセッサコアYにグループ2の処理を実行させるといったことが可能になり、グループごとに実行するプロセッサコアを分けて効率的に処理できる。例えば、あるグループを複数のプロセッサコアで実行しようとするとプロセッサコア間の通信が発生するが、あるグループを1つのプロセッサコアで実行することで、プロセッサコア間の通信の発生を防止し、処理をより早めることができる。
また、生産システムSは、コントローラ20のレジスタに対する処理に基づいてグループ化を行うことによって、レジスタに対する処理の関係性を考慮してグループ化を正確に行うことができる。正確なグループ化を行うことで、より効率的な分散処理が可能になる。
また、生産システムSは、レジスタに対する書込処理及び参照処理に基づいて、複数のラングの関係性を特定することによって、ラング同士の関係性をより正確に特定できる。関係性を正確に特定したラング同士が同じグループに属するようにグループ化を行うことによって、グループ化を正確に行うことができる。正確なグループ化を行うことで、より効率的な分散処理が可能になる。
また、生産システムSは、軸出力に対応する処理を含むラングと、当該ラングと関係性のある他のラングと、が同じ制御グループに属するように、グループ化を行うことによって、軸出力を考慮してグループ化を正確に行うことができる。正確なグループ化を行うことで、より効率的な分散処理が可能になる。
また、生産システムSは、他の制御グループの軸出力に対応する処理を含むラングと関係性のないラングが、固有グループに属するように、グループ化を行うことによって、グループ化を正確に行うことができる。正確なグループ化を行うことで、より効率的な分散処理が可能になる。
また、生産システムSは、複数の制御グループに属するラングが共通グループに属するように、グループ化を行うことによって、複数の軸出力に関係するラングを別のグループに分類し、より効率的な分散処理が可能になる。
また、生産システムSは、制御グループに属さないラングがその他グループに属するようにグループ化を行うことによって、その他グループに属するラングを空いているプロセッサコアに割り当てて効率よく処理できる。
また、生産システムSは、同期対象として設定された複数の軸の各々に対応するラングが同じグループに属するようにグループ化を行うことによって、同期対象として設定された複数の軸を同期させる場合に効率的な分散処理を実現できる。
また、生産システムSは、ユーザが指定した複数の軸を同期対象として設定することによって、ユーザが指定した複数の軸を同期させるように動作させることができる。
また、生産システムSは、2のプロセッサコアに分散された2のラングのそれぞれにおいて、コントローラ20のレジスタに対する書込処理及び参照処理が発生する場合には、書込処理のラングの後及び参照処理のラングの前に、プロセッサコア間の通信処理を挿入することによって、プロセッサコア間の通信処理を実行して複数のプロセッサコアの分散処理を実現できる。
また、生産システムSは、コントローラ20がラダープログラムP1を記憶することによって、例えば、エンジニアリングツールTをコントローラ20に接続した場合にラダープログラムP1の内容を表示させたり、ラダープログラムP1の分割を実行したりすることができる。
[3.変形例]
なお、本開示は、以上に説明した実施形態に限定されるものではない。本開示の趣旨を逸脱しない範囲で、適宜変更可能である。
[3-1.第1実施形態の変形例]
例えば、第1実施形態及び第2実施形態を組み合わせてもよい。即ち、第1実施形態でも、生産システムSは、ラダープログラムP1を複数のラングに分割し、当該複数のラングが分散するように、当該複数のラングの各々を複数のプロセッサコアの何れかに割り当てる分割部113を更に有してもよい。分割部113の処理は、第2実施形態で説明した通りである。これにより、第2実施形態で説明したように、ラダープログラムP1の処理に要する時間が短くなる。
[3-2.第2実施形態の変形例]
次に、第2実施形態の変形例を説明する。
[変形例2-1]
例えば、分割部113は、共通グループに属するラングA,B,C,Dが、複数の制御グループ1,2のそれぞれが割り当てられた2以上のプロセッサコアで並列して実行されるように、割り当てを行ってもよい。実施形態と同様に、この2以上のプロセッサコアは、CPU21Aのプロセッサコアと、CPU21Bのプロセッサコアと、の両方である場合を説明する。
図25は、変形例2-1における割り当ての一例を示す図である。分割部113は、CPU21Aのプロセッサコアに、共通グループに属するラングA,B,C,Dを割り当てる。分割部113は、CPU21Bのプロセッサコアにも、共通グループに属するラングA,B,C,Dを割り当てる。他のグループの割り当ては、実施形態と同様であってもよいが、変形例2-1では、CPU21AのプロセッサコアとCPU21Bのプロセッサコアの両方に共通グループが割り当てられているので、第2実施形態の図23で説明したようなラングB,Dの完了待ちは発生しない。このため、変形例2-1では、プロセッサコア間の通信処理を挿入する処理は行われない。
また、変形例2-1では、ラングB,Dの完了待ちが発生しないため、分割部113は、ラングLがラングNよりも先になるように、割り当てを行ってもよい。同様に、第2実施形態の例では、ラングLの前にラングDの完了待ちが発生する可能性があるので、派生グループに属するラングKをラングLよりも先の順序にしたが、変形例2-1では、ラングDの完了待ちが発生しないため、分割部113は、ラングKをラングL,Nよりも後になるように、割り当てを行ってもよい。
なお、分割部113は、少なくとも、共通グループに属するラングA,B,C,Dが利用するレジスタに、コントローラ20の仮想レジスタを割り当て、2以上のプロセッサコアは、仮想レジスタに基づいて、共通グループに属するラングA,B,C,Dを並列して実行してもよい。仮想レジスタは、コントローラ20にもともと割り当てられていたレジスタとは異なるレジスタである。以降、コントローラ20にもともと割り当てられていたレジスタを実レジスタと記載する。
変形例2-1では、分割部113は、全てのラングの処理に関係する実レジスタに、仮想レジスタを割り当てる場合を説明するが、共通グループに属するラングA,B,C,Dの処理に関係する実レジスタだけに仮想レジスタを割り当ててもよい。他にも例えば、分割部113は、共通グループに属するラングA,B,C,Dの処理に関係する実レジスタと、他の一部のラングの処理に関係する実レジスタと、に仮想レジスタを割り当ててもよい。図19のレジスタの例であれば、ラングA~Nの処理に関係する実レジスタとして、実レジスタreg1~reg13が存在する。軸出力Gr1,Gr2もラングL,M,Nに関係する実レジスタなので、軸出力Gr1,Gr2に対応する仮想レジスタが設定されてもよい。仮想レジスタは、コントローラ20上の空いているレジスタを利用すればよい。
例えば、CPU21Aに割り当てられたラングA,B,C,D,E,F,K,L,Nは、実レジスタreg1,reg2,reg3,reg4,reg5,reg6,reg11,Gr1を利用する。このため、分割部113は、CPU21A用の仮想レジスタとして、これらに対応する仮想レジスタreg1A,reg2A,reg3A,reg4A,reg5A,reg6A,reg11A,Gr1Aを設定する。分割部113は、これらの実レジスタと仮想レジスタの関係を、データ記憶部100に記録する。
例えば、CPU21Bに割り当てられたラングA,B,C,D,G,H,M,I,Jは、実レジスタreg1,reg2,reg3,reg4,reg7,reg8,reg9,reg10,reg13,Gr2を利用する。このため、分割部113は、CPU21B用の仮想レジスタとして、これらに対応する仮想レジスタreg1B,reg2B,reg3B,reg4B,reg7B,reg8B,reg9B,reg10B,reg13B,Gr2Bを設定する。分割部113は、これらの実レジスタと仮想レジスタの関係を、データ記憶部100に記録する。
分割前のラダープログラムP1には、実レジスタのレジスタ識別情報が含まれているので、分割部113は、分割プログラムp1を作成する場合に、個々の実レジスタのレジスタ識別情報を、対応する仮想レジスタのレジスタ識別情報に置き換える。これにより、仮想レジスタへの書込処理及び参照処理が可能になる。分割部113の他の処理は、実施形態と同様である。
例えば、分割部113は、2以上のプロセッサコアのうちの何れかの仮想レジスタの値が、コントローラ20の実レジスタである軸出力Gr1,Gr2に書き込まれるように、仮想レジスタを割り当て、2以上のプロセッサコアの何れかは、仮想レジスタの値を、レジスタに書き込む。即ち、最終的な出力に関係する値は、実レジスタGr1,Gr2に書き込まなければならないので、仮想レジスタGr1Aの値が実レジスタである軸出力Gr1に書き込まれる。仮想レジスタGr2Bの値が実レジスタである軸出力Gr2に書き込まれる。分割部113は、このような書き込みをするように、ラングN,L,Mの内容を変更すればよい。
以上説明した変形例2-1によれば、共通グループに属するラングA,B,C,Dが複数のプロセッサコアで並列して実行されるように、割り当てを行うことによって、あるプロセッサコアが他のプロセッサコアの処理待ちになるといったことを防止し、処理に要する時間が短くなる。
また、共通グループに属するラングA,B,C,Dが利用するレジスタに割り当てた仮想レジスタに基づいて、共通グループに属するラングA,B,C,Dが並列して実行されることによって、複数のプロセッサコアで並列した処理を確実に実行できる。例えば、あるプロセッサコアAがあるレジスタの書き込みを行おうとした場合に、他のプロセッサコアBが当該レジスタの書き込み中だったとすると、プロセッサコアAはレジスタの書き込みを行うことができない可能性があるが、仮想レジスタを利用することで、レジスタの書き込みができないといったことを防止できる。
また、2以上のプロセッサコアの何れかが仮想レジスタの値をレジスタに書き込むことによって、仮想レジスタの値を本当のレジスタに戻すことができる。
[変形例2-2]
例えば、分割部113は、制御周期が異なるラングが互いに異なるグループに属するように、グループ化を行ってもよい。変形例2-2では、制御グループ1の制御周期と、制御グループ2の制御周期と、が異なるものとする。個々のラングに制御周期が指定されていてもよい。分割部113は、実施形態と同様のグループ化をすることによって、互いに制御周期が異なるラングを互いに異なる制御グループ1,2に属するように、グループ化を行うことができる。例えば、制御グループ1の制御周期を1msとし、制御グループ2の制御周期を2msとすると、分割部113は、制御周期が1msのラングが制御グループ1に属し、かつ、制御周期が2msのラングが制御グループ2に属するようにグループ化を行う。
分割部113は、制御周期が相対的に遅いグループに対応するプロセッサコアに、制御周期が相対的に早いグループに対応するプロセッサコアにも関係するラングを割り当てる場合に、当該ラングが相対的に早く実行されるように、割り当てを行ってもよい。例えば、共通グループは、制御周期が1msの制御グループ1にも関係し、かつ、制御周期が2msの制御グループ2にも関係する。この場合に、分割部113は、共通グループに属するラングの実行順序が他のラングの実行順序よりも早くなるように(例えば、最初に実行されるように)、割り当てを行う。
変形例2-2によれば、制御周期が異なるラングが互いに異なるグループに属するように、グループ化を行うことによって、異なる制御周期の制御を実行できる。
また、制御周期が相対的に遅いグループに対応するプロセッサコアに、制御周期が相対的に早いグループに対応するプロセッサコアにも関係するラングを割り当てる場合に、プロセッサコア間で共通するラングが相対的に早く実行されるように割り当てを行うことによって、当該ラングを早い段階で実行し、このラングの実行待ちが発生するといったことを防止できる。
例えば、コントローラ20は、分割部113による割り当てが行われていないプロセッサコアを含んでもよい。例えば、コントローラ20は、3つのCPU21を含み、このうちの2つのCPU21に対し、分割部113による割り当てが行われて、残りの1つのCPU21には、分割部113による割り当ては行われなくてもよい。上記複数のプロセッサコアの各々は、自身に割り当てられた1以上のラングを実行する。
[3-3.その他の変形例]
例えば、各機能は、生産システムSにおける任意の装置で実現されるようにすればよい。プログラム作成装置10で実現されるものとして説明した機能の一部又は全部は、複数の装置で分担されてもよい。コントローラ20で実現されるものとして説明した機能の一部又は全部は、プログラム作成装置10、モータ制御装置30、又は他の装置によって実現されてもよい。