JP5655448B2 - Plcシステム、その開発支援装置 - Google Patents

Plcシステム、その開発支援装置 Download PDF

Info

Publication number
JP5655448B2
JP5655448B2 JP2010202481A JP2010202481A JP5655448B2 JP 5655448 B2 JP5655448 B2 JP 5655448B2 JP 2010202481 A JP2010202481 A JP 2010202481A JP 2010202481 A JP2010202481 A JP 2010202481A JP 5655448 B2 JP5655448 B2 JP 5655448B2
Authority
JP
Japan
Prior art keywords
object code
size
pou
execution object
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2010202481A
Other languages
English (en)
Other versions
JP2012059078A (ja
Inventor
恵美 横田
恵美 横田
吉原 大助
大助 吉原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2010202481A priority Critical patent/JP5655448B2/ja
Publication of JP2012059078A publication Critical patent/JP2012059078A/ja
Application granted granted Critical
Publication of JP5655448B2 publication Critical patent/JP5655448B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Description

本発明は、プログラマブルコントローラの開発支援装置に関する。
近年、マイクロコントローラやLSIを使用した組込システムにおいては、ハードウェアでのクロック周波数の向上などによる実行速度の改善は、限界に近づきつつあり、その為、複数のCPUを並列実行することで全体の実行速度を上げるマルチコア方式が用いられるようになってきている。その際、ユーザは複数の演算処理部(CPU)から成るシステムを効率的に利用するために、各CPUに掛かる負荷を調整することが求められる場合がある。
しかしながら、シーケンシャルな処理が多く、且つリアルタイム性能を要求されることが多いPLCにおいては、負荷の調整には、入出力機器等を含めたシステム構成に依存した処理のノウハウが必要で難易度が高く、システム規模の増大に伴い、調整工数も増大傾向にある。この工数を削減するために考案された負荷の自動分散方式については、従来技術文献として以下の特許文献1,2が存在する。
特許文献1;システム稼動時(動的)に負荷分散する方式。システム稼動時、各PLCが自己の負荷をそれぞれ算出し、算出した負荷に対応して自己の処理の少なくとも一部を他のPLCに依頼することで、負荷の自動配分を実現している。
特許文献2;システムの非稼動時(静的)に負荷分散する方式。PLCの国際規格化言語(IEC61131-3)の1つであるSFCに特化しつつ、その特徴を利用した自動配分方式を実現している。
特開平9−91011号公報 特開平7−28390号公報
プログラマブルコントローラのアプリケーションは、近年、複雑化、大容量化してきており、複数のCPUに負荷を分散して処理効率を向上させようとしても、その配分を決定することが難しい。また、試行錯誤的に負荷の配分を行った場合、多大な時間が掛かる為、ユーザの負担になってきている。
また、試行錯誤的に負荷の配分を行った場合、多大な時間が掛かる為、ユーザの負担となり、アプリケーションプログラムの開発難易度が増大するだけでなく、開発効率が低下する。
また、近年、PLCのアプリケーションは、従来のラダー言語などによる処理単位で記述された単純構造のプログラムではなく、IEC61131-3のような多言語を駆使した機能単位の構造化設計が行われるようになってきており、ユーザが処理全体の流れを把握することが困難になってきている。構造化設計の場合、同一の機能単位、関数等が別々のプログラムから呼び出されることが多く、プログラム作成者が複数にわたる開発も多くなってきている。
このような状況では、複数のCPUリソースを持つシステムであっても、アプリケーションプログラム作成者が自力で負荷配分を行うことは難易度が高く、結果的に処理負荷のアンバランスによるトータルシステム処理性能の低下、またシステム立ち上げ工数の増加が考えられる。
本発明の課題は、複数の演算処理部を有し、任意のアプリケーション実行に係わる負荷を複数の演算処理部に分散させるPLCシステムにおいて、開発支援装置で自動的にほぼ最適な負荷配分を行え、以ってユーザのシステム開発効率を向上させることができ、システム立ち上げ時の工数削減を図ることができるPLCシステム、その開発支援装置等を提供することである。
本発明のPLCシステムは、開発支援装置と複数の演算処理部を有し、複数のプログラムと該プログラムから呼び出される各種POUより構成される任意のアプリケーションの実行に係わる負荷を該複数の演算処理部に分散させ実行するPLCシステムであって、前記開発支援装置は、前記アプリケーションをコンパイルすることで実行オブジェクトコードを生成するコンパイル手段と、前記POUそれぞれの前記実行オブジェクトコードのサイズを求めるPOUサイズ算出手段と、前記コンパイル時に前記POUの呼び出し情報を求める呼出情報生成手段と、前記POUそれぞれの前記実行オブジェクトコードのサイズと、前記POUの呼び出し情報とに基づいて、前記アプリケーションを構成するプログラム毎に、そのプログラムに係わる各POUの前記実行オブジェクトコードのサイズと実行回数に応じた実行オブジェクトコードサイズ総数を算出する総実行オブジェクトコードサイズ算出手段と、前記各プログラムを前記複数の演算処理部に配分する手段であって、前記総実行オブジェクトコードサイズ算出手段によって算出される前記プログラムそれぞれの実行オブジェクトコードサイズ総数に基づいて、前記複数の演算処理部の負荷が略均等となるように前記各プログラムを前記各演算処理部に配分する負荷配分手段とを有する。
構造化設計の場合、同一の機能単位、関数等が別々のプログラムから呼び出されることが多く、人間が負荷配分を行うには難易度が高いが、上記PLCシステムでは各POU毎の実行オブジェクトコードのサイズとPOUの呼び出し情報とに基づいて、自動的に適切な負荷配分が行える。
本発明のPLCシステム、その開発支援装置等によれば、開発支援装置で自動的にほぼ最適な負荷配分を行え、以ってユーザのシステム開発効率を向上させることができ、システム立ち上げにかかる工数を削減することができる。これは、IEC61131-3のような構造化設計の場合に、特に顕著な効果を奏する。また、実行オブジェクトコードサイズを用いるので、PLC言語が何であっても関係なく適用可能である。
(a),(b)は、本例のPLCシステムのシステム構成例(その1)、(その2)である。 開発支援装置の処理フローチャート図である。 (a)、(b)は「POUの呼び出し情報」の一例を示す図である。 (a)は実行オブジェクトコードサイズの一例、(b)は総実行オブジェクトコードサイズの一例を一覧で示す図である。 複数のCPUへの負荷配分結果の一例である。 (a)、(b)はオブジェクトコードのステップ数について説明する為の図である。 開発支援装置のハードウェア構成例である。
以下、図面を参照して、本発明の実施の形態について説明する。
図1(a),(b)は、本例のPLC(プログラマブルコントローラ)システムのシステム構成例(その1)、(その2)である。
図1(a)、(b)のPLCシステムは、何れも、複数の演算処理部(CPU)と、開発支援装置10を有する。但し、図1(a)ではそれぞれが演算処理部(CPU)を有する複数の演算モジュールより成る構成であり、図1(b)は1つの演算モジュール内に複数の演算処理部(CPU)がある構成となっている。何れにしても、演算処理部が複数存在するPLCシステムであり、任意のアプリケーションプログラムを実行する場合には、複数の演算処理部(CPU)に負荷を分散させて処理効率を向上させる為に、複数のCPUへの負荷配分を行うものであることを前提とする。
本例のPLCシステム(その開発支援装置)は、上記特許文献1のような運用中に動的に負荷配分を行うものではなく、運用前に静的に負荷配分を行うものである。
図1(a)のPLCシステムでは、開発支援装置10(10A)と複数のPLCモジュール2(演算モジュール)がネットワーク1に接続しており、ネットワーク1を介して相互に通信可能となっている。各PLCモジュール2がそれぞれ1つのCPU2a、CPU2bを有することで、複数の演算処理部(CPU)がある構成となっている。
一方、図1(b)のPLCシステムは、開発支援装置10(10B)と1つのPLCモジュール4がネットワーク1に接続しており、ネットワーク1を介して相互に通信可能となっている。このPLCモジュール4が複数のCPU4a,4bを有することで、複数の演算処理部(CPU)がある構成となっている。
尚、各PLCモジュール(2or4)は、I/Oモジュール3に接続している。
図1(a)、(b)の開発支援装置10(10A、10B)は、ユーザ等に任意のアプリケーションプログラムを作成させ、これをコンパイルして実行オブジェクトコードを生成した後、ネットワーク1を介して実行オブジェクトコードをPLCモジュール2又は4に転送する。この転送処理は、予め登録されるシステム定義に従って行われるが、これについては特に説明しない。
図1(a)、(b)の開発支援装置10(10A、10B)は、上記転送に係わる処理に関しては多少の違いがあるが、本手法に係わる機能は略同一であるので、同一符号を付してあり、以後、特に区別せずに説明するものとする。
図1(a)、(b)に示す開発支援装置10は、コンパイラ11、リンカ12、POUサイズ算出機能部13、呼出情報生成機能部14、最適負荷配分機能部15を有する。
コンパイラ11とリンカ12は、従来の開発支援装置でも備えられている一般的な機能であり、ここでは特に説明しない。また、特に図示・説明しないが、従来の開発支援装置でも備えられている一般的な機能として、更に、ユーザに任意のアプリケーションを作成させる機能を有するものであってもよい。本例の開発支援装置10は、更に上記POUサイズ算出機能部13、呼出情報生成機能部14、最適負荷配分機能部15を有することを特徴としている。
ユーザにより任意のアプリケーションプログラムが作成された後、コンパイラ11等によりこのアプリケーションが実行オブジェクトコードに変換される。実行オブジェクトコードのサイズは、RISC型のCPUにおいて、ほぼコードステップ数と同等であると考えられる。これより、本手法では、実行オブジェクトコードのサイズに基づいて、CPUにおけるプログラムの実行時間を推定し、負荷の大きさを算出する。
呼出情報生成機能部14は、コンパイラ11による上記アプリケーションプログラムのコンパイル時に「POUの呼び出し情報(相関ツリー)」を生成してメモリ等に保存する。この呼出情報生成機能部14の機能は、既存技術であるので、ここでは詳細には説明しないが、「POUの呼び出し情報(相関ツリー)」の一例を図3(a)、(b)に示す。
図3(a)は「POUの呼び出し情報」を分かり易く示す為のイメージ図であり、実際のデータ格納形式は図3(b)に示す。
ここで、本例では、IEC61131-3のような機能単位の構造化設計を例にする。上述してあるように、構造化設計の場合、同一の機能単位、関数等が別々のプログラムから呼び出されることが多い。
ここで、上記POUとは、IEC61131-3に規定されている、プログラムの最小単位であり、プログラム(PG)、ファンクション(FCT)、ファンクションブロック(FB)の総称である。そして、本例では、上記アプリケーションプログラムは、複数のプログラム(PG)より成り、図3(a)、(b)に示す一例ではPG1、PG2、PG3、PG4、PG5の5つのプログラム(PG)より成るものとする。
そして、通常、図3(a)、(b)に示すように、各プログラム(PG)は、1以上のファンクション(FCT)または/及び1以上のファンクションブロック(FB)を呼び出す構造となっている。また、プログラム(PG)から呼び出されたファンクションブロック(FB)が、更に他のファンクションブロック(FB)を呼び出し、または/及び、1以上のファンクション(FCT)を呼び出す場合もある。
何れにしても本例では上記PG1、PG2、PG3、PG4、PG5の各プログラム(PG)を、1つの「処理単位」(1つのまとまった処理)としてアプリケーション処理が実行されるものであり、この様な「処理単位」を更に分割して複数のCPUに分配・実行させることは困難である。従って、上記PG1〜PG5のような複数の「処理単位」から成るアプリケーションを、複数のCPUで実行させる場合には、「処理単位」毎にCPUに分配する必要がある(例えば後に図5に示す例の様に分配する)。尚、本例では上記PG1〜PG5の各プログラム(PG)を「処理単位」としたが、この例に限るものではない。
尚、上記「処理単位」とは、広義には例えば後述するようにアプリケーションを任意の複数のグループに分割して、各グループを「処理単位」とするようにしてもよいが、狭義には、上記PG1〜PG5の例のようにそれ以上分割することが困難である(CPU側で正常に実行できなくなる)ようにグループ分けしたものを「処理単位」と呼んでも良い。
各プログラム(PG)が、ファンクション(FCT)、ファンクションブロック(FB)等の各種POUを呼び出すことで、そのプログラム(PG)の処理が実行される。
尚、図3(b)には、図3(a)に示す各プログラムPG1〜PG5のうち一例としてプログラムPG1についてのみ「POUの呼び出し情報」のデータ格納例を示す。
これより、図3(b)も参照してプログラムPG1を例にして詳細に説明するならば、プログラムPG1は、ファンクションFCT1、ファンクションFCT1、ファンクションFCT2、ファンクションブロックFB1、ファンクションブロックFB1を順次呼び出す。尚、ファンクションFCT1が最初に2回連続して呼び出されているように、同一のファンクション/ファンクションブロックが複数回呼び出される場合もある。
図3(b)に示すように、プログラム(PG)から呼び出されるPOUは、階層1のPOUとして規定される。階層1のPOUから呼び出されるPOUは、階層2のPOUとして規定される。階層2のPOUから呼び出されるPOUは、階層3のPOUとして規定される。
尚、プログラム(PG)が呼び出されることはないので、“呼び出されるPOU”とは、PGを除くPOUを意味し、よってFBまたはFCTを意味する。これは、換言すれば、上記各階層1〜3のPOUは、全て、FBまたはFCTであることを意味する。
図3(b)に示すように、階層1の各POUのうち、ファンクションブロックFB1とFB2は、更にPOUを呼び出す。呼び出されるPOUは階層2のPOUと規定されることになる。すなわち、階層1のファンクションブロックFB1は、階層2のファンクションFCT1,FCT2を呼び出し、階層1のファンクションブロックFB2は、階層2のファンクションFCT1とファンクションブロックFB3を呼び出す。
呼び出された(階層2の)ファンクションブロックFB3は、ファンクションFCT1,FCT2と,ファンクションブロックFB4(何れも階層3)を呼び出す。
上記の例では、例えば、ファンクションFCT1は全部で5回呼び出されることになり、呼び出される毎にファンクションFCT1が実行されるので、ファンクションFCT1の実行時間を仮にt1とするならば、プログラムPG1に係わるファンクションFCT1の全実行時間は「5×t1」となることになる。
ここで、上記ファンクションFCT1の実行時間t1は、ファンクションFCT1の実行オブジェクトコードのサイズ(上記の通り、ほぼコードステップ数と同等)によって決まるものと見做してよい。例えば、仮に1ステップ当たりの処理実行に掛かる時間をt2とした場合、FCT1のステップ数が後述する例の様に‘3’であるならば、t1=3×t2ということになる。
このように、実行オブジェクトコードのサイズ(ステップ数)と実行時間とは、単純な計算式により相関関係が記述できると考えられることから、実行オブジェクトコード・サイズ(コードステップ数)を算出することにより、ユーザが作成したアプリケーションプログラムの各「処理単位」毎の(例えば各プログラム(PG)毎の)実行時間を推定することができる。各CPUの負荷の大きさを、処理時間(割り当てられた全てのPGの実行時間)として見積もることができる。
上記POUサイズ算出機能部13は、アプリケーションの各POU(PG/FB/FCT)それぞれの実行オブジェクトコードのサイズ(≒コードステップ数)を求めて記憶する。図3(a)に示すアプリケーションの例の場合、図4(a)に示すように、各プログラムPG1〜PG5それぞれのサイズ、各ファンクションブロックFB1、FB2,FB3,FB4それぞれのサイズ、各ファンクションFCT1,FCT2,FCT3それぞれのサイズが、求められることになる。
尚、POUサイズ算出機能部13自体は、一般的なコンパイラに備えられている既存の機能であり、これ以上詳細には説明しないが、
ここで、図2に、開発支援装置10の処理フローチャート図を示す。
開発支援装置10は、任意のアプリケーションプログラムが生成された後、任意のときにまず、その実行オブジェクトコード生成処理を実行する(ステップS11)。この実行オブジェクトコード生成時に、上記の通り、POUサイズ算出機能部13が、各POU(PG/FB/FCT)それぞれの実行オブジェクトコードのサイズ(≒コードステップ数)を求めて記憶し、呼出情報生成機能部14が、「POUの呼び出し情報(相関ツリー)」を生成して保存する。この「POUの呼び出し情報(相関ツリー)」の生成機能も、一般的なコンパイラに備えられている既存の機能であり、これ以上詳細には説明しない。
このように、このステップS11の処理(コンパイルによる実行オブジェクトコード生成と実行オブジェクトコードサイズの生成・記憶と「POUの呼び出し情報(相関ツリー)」の生成・保存)は、一般的なコンパイラが実行する既存の処理と考えて良い。
本手法の特徴的な機能は、次のステップS12とステップS13の処理にある。上記最適負荷配分機能部15が、ステップS12、S13の処理を実行する。
まず、ステップS12では、各プログラム(PG)毎に、そのPGの総実行オブジェクトコードサイズ(実行オブジェクトコードサイズ総数)を、以下の(1)式によって求める。
尚、上記(1)式における「呼び出し回数」は、例えば「実行回数」に置き換えてもよい。上記(1)式による総実行オブジェクトコードサイズにはプログラム(PG)自体のサイズも含まれるが、上記の通りプログラム(PG)自体は呼び出されるものではないからである。
既に例えばプログラムPG1に係わるファンクションFCT1の全実行時間は「5×t1」である旨説明したが、上記(1)式ではt1の代わりにファンクションFCT1の実行オブジェクトコードのサイズ(≒コードステップ数)を用いるものと考えてよい。各POUの実行オブジェクトコードのサイズ(≒コードステップ数)は、POUサイズ算出機能部13が求めて記憶してあるので(図4(a))、これを参照すればよい。
図3(b)に示す例では、プログラムPG1に関して呼び出されるPOUは、ファンクションブロックFB1,FB2,FB3、ファンクションFCT1,FCT2,FCT4であり、これら各POUの呼び出し回数(実行回数)は、FB1が1回、FB2が1回、FB3が1回、FCT1が5回、FCT2が3回、FCT4が1回であり、これにプログラムPG1自体の実行回数(1回)が加わる。
ここで、仮に、「<POU>;POUのオブジェクトコードサイズを表すもの」とする。すなわち、各POUの実行オブジェクトコードのサイズ(≒コードステップ数)を、例えばPG1は<PG1>、FB1は<FB1>、FCT1は<FCT1>等と表記するものとする。そして、各POU(PG/FB/FCT)それぞれの実行オブジェクトコードのサイズ(≒コードステップ数)が仮に図4(a)に示す通りとするならば、上記(1)式による上記プログラムPG1の総実行オブジェクトコードサイズ(実行オブジェクトコードサイズ総数)は、以下のように算出される。
プログラムPG1の総実行オブジェクトコードサイズ
=<PG1>×1+<FB1>×1+<FB2>×1+<FB3>×1+<FB4>×1+<FCT1>×5+<FCT2>×3
=10×1+6×1+7×1+8×1+3×5+1×3+6×1
=55
他の各プログラムPG2、PG3、PG4、PG5についても、同様にして、図3(a)に示す「POUの呼び出し情報」と、図4(a)に示す各POUの実行オブジェクトコードのサイズとを用いて、上記(1)式によって総実行オブジェクトコードサイズを算出すると、その結果は図4(b)に示す通りとなる。
最適負荷配分機能部15は、図4(b)に示す情報(アプリケーションプログラムを構成する各プログラム(PG)毎の実行オブジェクトコードサイズ総数)が得られたら、このサイズ総数情報に基づいて複数のCPUに対して処理負荷が略均等になるようにして各プログラム(PG1〜PG5)を割り当てる(ステップS13)。割り当て結果の一例を図5に示す。
図5に示す例では、CPU1に対してはプログラムPG1とPG5を割り当て、CPU2に対してはプログラムPG2とPG3とPG4を割り当てている。各プログラムPG1〜PG5の総実行オブジェクトコードサイズは図4(b)に示す通りであるので、CPU1に割り当てられる実行オブジェクトコードサイズはトータルで55+7=62となり、CPU2に割り当てられる実行オブジェクトコードサイズはトータルで25+18+16=59となり、CPU1の処理負荷とCPU2の処理負荷は殆ど同じ(略均等)であると見做すことができる。つまり、ほぼ最適な負荷配分が行えたと見做すことができる。
そして、上記ステップS13で決定した各CPUに対する各プログラム(PG1〜PG5)の割り当て結果に応じて、各プログラム(PG1〜PG5)のメモリ振分けを行う(ステップS14)。これは例えば、図5の例の場合、プログラムPG1とPG5をCPU1に送信してそのメモリ等に格納させ、プログラムPG2とPG3とPG4をCPU2に送信してそのメモリ等に格納させるものである。尚、ステップS14の処理も最適負荷配分機能部15が実行するものであってもよいし、ステップS14の処理は不図示の他の機能部(各CPUへのプログラム振分け自体は既存機能であり特に説明しない)が実行するものであってもよい。
尚、CPU1とCPU2は、例えば図1(a)に示す例のCPU2aとCPU2bに相当すると考えても良い。あるいは、CPU1とCPU2は、例えば図1(b)に示す例のCPU4aとCPU4bに相当すると考えても良い。
また、尚、上記各プログラム(PG1〜PG5)の実行順番が決まっている場合には、従来より例えば開発支援装置10側にPG実行順番を示す情報(実行順番テーブルというものとする;不図示)が格納されているので、例えば上記ステップS14の処理の際にこの実行順番テーブルもCPU1のメモリ、CPU2のメモリに記憶させるようにしてもよい。それによって、例えばCPU1において、PG5を先に実行して、後にPG1を実行するようなことも起こり得る。
上記各プログラム(PG)毎の総実行オブジェクトコードサイズに基づく複数のCPUへの各プログラムの割り当て方法は、様々な方法であってよく、一例を以下に説明するが、これらの例に限るものではない。
すなわち、例えば、
(1)負荷(サイズ)が大きいプログラム(PG)から順に各CPUへ順次割り当てていく方法。
例えば、図4(b)に示す例では、負荷(サイズ)が大きいプログラム(PG)から順次割り当てると、PG1→PG2→PG3→PG4→PG5の順番で各プログラム(PG)を順次割り当ることになる。
ここで、例えば一例としては、最初は各CPUにPGを負荷(サイズ)が大きいものから順に1つずつ割り当て、その後は現在の負荷(サイズ)の割り当て総量が最も小さいCPUへ次のPG(残っているなかで最もサイズが大きいPG)を割り当てる方法が考えられる。
この方法によれば、図4(b)に示す例では、最初はPG1をCPU1に割り当て、PG2をCPU2に割り当てることになる。その後は、PG3はCPU2に割り当て、続くPG4もCPU2に割り当てることになる(何れも、その時点の負荷の割り当て総量が、CPU1>CPU2であるので)。最後に、PG5は、CPU1に割り当てることになる(その時点の負荷の割り当て総量が、CPU1(=55)<CPU2(=25+18+16=59)であるので)。
この様な割り当て処理によって、図5に示す結果となる。
この様にして、例えば図5に示すように、CPU1の処理負荷とCPU2の処理負荷が殆ど同じ(略均等)となるように、アプリケーションプログラムを構成する各プログラム(PG)を、複数のCPUに割り当てることが出来る。
(2)割り当て負荷総量の平均値(平均の負荷配分値)を求めて、各CPU毎に平均値を越えるまで各プログラム(PG)を割り当てていく方法。
これは、例えば、まず、各CPUへ割り当てる負荷総量の平均値を算出する。これは、上記全てのプログラムPG1〜PG5の総実行オブジェクトコードサイズの総和を求める。図4(b)の例では、総和=55+25+18+16+7=121となる。
この総和をCPU数で割ることで、各CPUへ割り当てる負荷総量の平均値を算出する。仮に図5の例と同様にCPU1、CPU2の2つのCPUに割り当てる場合、平均値=121÷2=60.5となる。
そして、例えばまずCPU1に対して、平均値(=60.5)を越えるまでプログラム(PG)を割り当てていく。これは、一例としては、各プログラム(PG)をランダムに割り当てていく。但し、この例に限らず、例えば以下に説明するようにしてもよい。
すなわち、負荷(サイズ)が大きいプログラム(PG)から順次割り当てるようにする。但し、上記(1)とは異なり、1つのCPUに対して上記平均値を越えるまで集中的に割り当てる。更に、平均値を越えた時点で完了とせずに、平均値を越えたときに割り当てたプログラム(PG)を、未だ割り当てていない他のプログラム(PG)と置き換えて、合計サイズが最も平均値に近いものに決定する。
すなわち、CPU1に対してまずPG1を割り当て、次にPG2を割り当てると、合計サイズ=55+25=80なので平均値(=60.5)を越えたことになる。ここで、PG2の代わりに未だ割り当てていない他のプログラムPG3,PG4,PG5を順次割り当てると、PG3の場合の合計サイズ=55+18=73、PG4の場合の合計サイズ=55+16=71、PG5の場合の合計サイズ=55+7=62となり、PG5の場合が最も平均値に近いので、CPU1に対してはPG1とPG5を割り当てることになる。
(3)組み合せ最適化問題として定義し、最適化手法(経験的手法・メタヒューリスティック等)を用いて解く方法。
この最適化手法自体は、既存の一般的な手法であり、ここでは特に説明しないが、この方法によれば、負荷の大きさにバラツキがあった場合や負荷の数が膨大になるような複雑な場合においても、最適な負荷配分を求めることができる。
また、上記(1)、(2)、(3)の3つの方法を組み合わせて、複数のCPUにプログラム(PG)を割り当てるようにしてもよい。例えば、図4(b)の例において、まず最初は、(1)の方法により最もサイズが大きいPG1をCPU1に割り当て、2番目にサイズが大きいPG2をCPU2に割り当てる。その後は、残りのPG3、PG4,PG5を1つ以上、PG1またはPG2と適宜組み合わせることで、様々な組み合わせを作成すると共に作成した組み合わせによる合計サイズ(例えば、PG1とPG3の組み合わせでは合計サイズは55+18=73となる)を求める。そして、合計サイズと上記平均の負荷配分値(=60.5)との差異が最も小さくなるような組み合わせを求める。
尚、負荷の数が膨大となる場合での負荷配分では、1つの負荷が全体の負荷に与える影響が軽減されるため、(1)や(2)の方法を単独で行うことも有効であると考えられる。
尚、本例では「POUの呼び出し情報」を用いているが、“どのPOUがどのPOUを呼び出したか”を知る必要はなく、上記のように単に各プログラム(PG)毎に、そのPGに係わる各POUの実行回数が分かればよいのである。本例では既存機能である呼出情報生成機能部14によって生成される「POUの呼び出し情報」を利用しているのであるが、この様な例に限らない。何れにしても必ずしも「POUの呼び出し情報」である必要はなく、単に各POUの実行回数が分かる様な情報であればなんでもよい。
IEC-61131-3では、1つのアプリケーションを実行する処理実行部をリソースと呼んで一元管理する概念を持っている。アプリケーションの負荷を配分する対象が、図1(a)のように複数のCPUモジュール2に該当する場合は、一旦1つの実行処理部であると仮定して上記の様に実行オブジェクトコードサイズを算出し、その後、各CPUモジュール2に実行オブジェクトを割り付ける方法によって負荷配分を行う。
これは、図1(b)のCPUモジュール4のような例えばマルチコアマイクロプロセッサやコプロセッサを備えた演算装置に負荷を配分する場合も、同様の考え方で負荷配分を行うことが出来る。但し、図1(b)の1つのCPUモジュール4内の複数のCPU4a,4bは、同一の実行コードを実行する同一性能のマイクロプロセッサもしくは演算LSIなどであるものとし、コンパイル対象のユーザアプリケーションは、各機能の実行結果を相互に参照しないこと前提とする。
ここで上記オブジェクトコードのステップ数について、具体例を図6に示して説明する。図6において、図6(a)はプログラミング画面を示し、任意のプログラム部品(ここではADD関数)を示している。このプログラム部品をコンパイルすることで、図6(b)に示す実行オブジェクトコード(点線で囲った部分)が生成される。図示の通り、この実行オブジェクトコードのステップ数は‘9’である(9行;9ステップ)。
また、本例の開発支援装置10は、ハードウェア的には例えばパソコン等の汎用のコンピュータ装置により実現できる。
図7は、開発支援装置のハードウェア構成の具体例を示す図であり、これはパソコン等の汎用のコンピュータの構成であると考えてよい。
図7において、コンピュータ30は、CPU31、メモリ32、入力部33、出力部34、記憶部35、記録媒体駆動部36、及びネットワーク接続部37を有し、これらがバス38に接続された構成となっている。
CPU31は、当該コンピュータ30全体を制御する中央処理装置である。
メモリ32は、任意の処理実行の際に、記憶部35(あるいは可搬型記録媒体39)に記憶されているプログラムあるいはデータを一時的に格納するRAM等のメモリである。CPU31は、メモリ32に読み出したプログラム/データを用いて、上述した各種処理を実行する。
出力部34は、例えばディスプレイ等であり、入力部33は、例えば、キーボード、マウス等である。
ネットワーク接続部37は、例えば上記ネットワーク1等に接続して、他の情報処理装置(CPUモジュール2,4等)との通信(コマンド/データ送受信等)を行う為の通信モジュールである。
記憶部35は、例えばハードディスク等であり、上述した開発支援装置10の各種処理機能をCPU31により実現させる為のアプリケーションプログラムが格納されている。すなわち、上記コンパイラ11、リンカ12、POUサイズ算出機能部13、呼出情報生成機能部14、最適負荷配分機能部15の各種処理機能部の処理機能を、CPU31により実現させる為のアプリケーションプログラムが格納されている。
CPU31は、上記記憶部35に格納されている各種プログラムを読み出し・実行することにより、上述した各種処理を実現する。
また、上記図3(b)や図4(a),(b)に示す各種情報は、記憶部35やメモリ32等に記憶されるものである。
上記記憶部35に格納される各種プログラム/データは、可搬型記録媒体39に記憶されているものであってもよい。この場合、可搬型記録媒体39に記憶されているプログラム/データは、記録媒体駆動部36によって読み出される。可搬型記録媒体39とは、例えば、FD(フレキシブル・ディスク)39a、CD−ROM39b、その他、DVD、光磁気ディスク等である。
あるいは、また、上記プログラム/データは、ネットワーク接続部37により接続しているネットワークを介して、他の装置内に記憶されているものをダウンロードするものであってもよい。あるいは、更に、インターネットを介して、外部の他の装置内に記憶されているものをダウンロードするものであってもよい。
また、本発明は、上記本発明の各種処理をコンピュータ上で実現するプログラムを記録した可搬型記憶媒体として構成できるだけでなく、当該プログラム自体として構成することもできる。
尚、上述した説明は一例であり、この例に限らない。ユーザが作成するアプリケーションが、例えばラダー図を用いるプログラムであっても構わない。本手法ではコンパイル後のプログラム(実行オブジェクトコード;機械語)を用いるので、ユーザが使用するPLC言語が何であっても関係ないからである。そして、実行オブジェクトコードのサイズ(ステップ数)を用いることで、的確に負荷を推定でき、それによってほぼ最適な負荷配分を実現できる。
PLC言語に関係なく本例の開発支援装置10の機能を概略的に説明するならば、特に図示等しないが本例の開発支援装置10は以下の各種機能部を有するものと言うことができる。
まず、複数の演算処理部(CPU)で演算させるべき任意のアプリケーションプログラムをコンパイルすることで実行オブジェクトコードを生成するコンパイル機能部(不図示)を備える。
また、例えば、上記アプリケーションプログラムを複数のグループ(ここでは一例として特に上記「処理単位」)に分割しておく。これは、例えば開発者等が決めて設定しておく。
そして、開発支援装置10は、更に、これら複数の「処理単位」毎に、その「処理単位」に係わる実行オブジェクトコードのサイズの総数を求める総実行オブジェクトコードサイズ算出機能部(不図示)を備える。更に、上記アプリケーションプログラムの処理を上記各「処理単位」で複数の演算処理部(CPU)に配分する機能部であって、上記各「処理単位」毎の実行オブジェクトコードサイズ総数(全ステップ数など)に基づいて、複数の演算処理部の負荷が略均等となるように上記アプリケーションプログラムの処理を各演算処理部に配分する負荷配分機能部(不図示)を備える。
この様に、本例の開発支援装置10は、概略的には上記各種不図示の機能部を備えるものであるということもできる。
上記特許文献1に記載の従来技術は、システムの稼動時に行う動的な負荷配分方式であるため、初期の負荷配分が不適切であった場合には、システム始動時には、CPUの負荷が偏り、PLCシステムで要求される定時性を損う可能性がある。その点、静的な負荷配分方式である本手法では、システム始動時から信頼性の高い運用を行うことが出来る。
また、上記特許文献2記載の従来技術は、システムの非稼動時に行う静的な負荷配分方式でありこの点では本手法と同類であるが、特許文献2ではSFCの特徴を利用しているため、他の言語に関しては適用することができず、特にPLCの分野で最もよく利用されている言語であるラダー言語に対応できないという大きな問題が生じる。
これに対して、本手法では、SFCやラダー言語等のプログラマが用いるPLC言語には関係なく、何らかのPLC言語で記述されたプログラムをコンパイルすることで生成される実行オブジェクトコード(機械語等)を用いて負荷配分を行うので、PLC言語が何であっても関係なく適用可能である。つまり、本手法では、特許文献2記載の従来技術に比べて汎用性が高いことになる。
このように、本手法によれば、複数のCPUを有するPLCシステムにおいて、システム始動時から最適な負荷配分でアプリケーション実行させることができることや、PLC言語に依存せずに適用可能である等の様々なメリットが得られる。
上記本手法を適用したPLCシステムによれば、複数のCPUに対して自動的に(運用初期から)ほぼ最適な負荷配分を行えることで、システムの大規模化・複雑化による増大する「ユーザのシステム開発時間」を短縮することができる。また、コンパイル時に自動的にほぼ最適な負荷配分を行えることで、ユーザのノウハウに依存しない、安定した運用を可能にし、システムの信頼性を向上させることができる。
また、既に述べたように、PLCのアプリケーションは、従来のラダー言語などによる処理単位で記述された単純構造のプログラムではなく、IEC61131-3のような多言語を駆使した機能単位の構造化設計が行われるようになってきており、ユーザが処理全体の流れを把握することが困難に成ってきている。構造化設計の場合、同一の機能単位、関数等が別々のプログラムから呼び出されることが多く、プログラム作成者が複数にわたる開発も多くなってきている。
このような状況では、複数のCPUに対してアプリケーションプログラム作成者等が自力で負荷配分を行うことは難易度が高く、結果的に処理負荷のアンバランスによるトータルシステム処理性能の低下、またシステム立ち上げ時の工数の増加が考えられる。これに対して、本手法では、このような難易度が高いものに対しても、自動的にほぼ最適な負荷配分を行えるので、この様な問題も解決できる。
尚、「システム立ち上げ時の工数」とは、アプリケーションを複数の演算処理部(CPU等)に配分するユーザの手間を意味する。本手法では、この様なシステム立ち上げに掛かる工数を削減することができる。
1 ネットワーク
2 PLCモジュール
2a、2b CPU
3 I/Oモジュール
4 PLCモジュール
4a,4b CPU
10 開発支援装置
11 コンパイラ
12 リンカ
13 POUサイズ算出機能部
14 呼出情報生成機能部
15 最適負荷配分機能部
30 コンピュータ
31 CPU
32 メモリ
33 入力部
34 出力部
35 記憶部
36 記録媒体駆動部
37 ネットワーク接続部
38 バス
39 可搬型記録媒体
39a FD(フレキシブル・ディスク)
39b CD−ROM

Claims (3)

  1. 開発支援装置と複数の演算処理部を有し、複数のプログラムと該プログラムから呼び出される各種POUより構成される任意のアプリケーションの実行に係わる負荷を該複数の演算処理部に分散させ実行するPLCシステムであって、
    前記開発支援装置は、
    前記アプリケーションをコンパイルすることで実行オブジェクトコードを生成するコンパイル手段と、
    前記POUそれぞれの前記実行オブジェクトコードのサイズを求めるPOUサイズ算出手段と、
    前記コンパイル時に前記POUの呼び出し情報を求める呼出情報生成手段と、
    前記POUそれぞれの前記実行オブジェクトコードのサイズと、前記POUの呼び出し情報とに基づいて、前記アプリケーションを構成するプログラム毎に、そのプログラムに係わる各POUの前記実行オブジェクトコードのサイズと実行回数に応じた実行オブジェクトコードサイズ総数を算出する総実行オブジェクトコードサイズ算出手段と、
    前記各プログラムを前記複数の演算処理部に配分する手段であって、前記総実行オブジェクトコードサイズ算出手段によって算出される前記プログラムそれぞれの実行オブジェクトコードサイズ総数に基づいて、前記複数の演算処理部の負荷が略均等となるように前記各プログラムを前記各演算処理部に配分する負荷配分手段と、
    を有することを特徴とするPLCシステム。
  2. 前記実行オブジェクトコードのサイズは、実行オブジェクトコードのステップ数であることを特徴とする請求項1記載の開発支援装置。
  3. 開発支援装置と複数の演算処理部を有し、複数のプログラムと該プログラムから呼び出される各種POUより構成される任意のアプリケーションの実行に係わる負荷を該複数の演算処理部に分散させるPLCシステムにおける前記開発支援装置であって、
    前記アプリケーションをコンパイルすることで実行オブジェクトコードを生成するコンパイル手段と、
    前記POUそれぞれの前記実行オブジェクトコードのサイズを求めるPOUサイズ算出手段と、
    前記コンパイル時に前記POUの呼び出し情報を求める呼出情報生成手段と、
    前記POUそれぞれの前記実行オブジェクトコードのサイズと、前記POUの呼び出し情報とに基づいて、前記アプリケーションを構成するプログラム毎に、そのプログラムに係わる各POUの前記実行オブジェクトコードサイズと実行回数に応じた実行オブジェクトコードサイズ総数を算出する総実行オブジェクトコードサイズ算出手段と、
    前記各プログラムを前記複数の演算処理部に配分する手段であって、前記総実行オブジェクトコードサイズ算出手段によって算出される前記プログラムそれぞれの実行オブジェクトコードサイズ総数に基づいて、前記複数の演算処理部の負荷が略均等となるように前記各プログラムを前記各演算処理部に配分する負荷配分手段と、
    を有することを特徴とするPLCシステムにおける開発支援装置。
JP2010202481A 2010-09-09 2010-09-09 Plcシステム、その開発支援装置 Active JP5655448B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010202481A JP5655448B2 (ja) 2010-09-09 2010-09-09 Plcシステム、その開発支援装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010202481A JP5655448B2 (ja) 2010-09-09 2010-09-09 Plcシステム、その開発支援装置

Publications (2)

Publication Number Publication Date
JP2012059078A JP2012059078A (ja) 2012-03-22
JP5655448B2 true JP5655448B2 (ja) 2015-01-21

Family

ID=46056083

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010202481A Active JP5655448B2 (ja) 2010-09-09 2010-09-09 Plcシステム、その開発支援装置

Country Status (1)

Country Link
JP (1) JP5655448B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10990073B2 (en) 2016-08-30 2021-04-27 Mitsubishi Electric Corporation Program editing device, program editing method, and computer readable medium

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6563187B2 (ja) * 2014-11-12 2019-08-21 株式会社東芝 分散制御システム、制御装置及び制御方法
WO2017141332A1 (ja) * 2016-02-15 2017-08-24 三菱電機株式会社 負荷分散装置
JP2018041373A (ja) * 2016-09-09 2018-03-15 オムロン株式会社 実行可能プログラム作成装置、実行可能プログラム作成方法、および、実行可能プログラム作成プログラム
JP2022099958A (ja) * 2020-12-23 2022-07-05 オムロン株式会社 制御装置、制御方法および制御プログラム
CN114326560B (zh) * 2021-11-18 2024-02-09 北京华能新锐控制技术有限公司 降低风电机组国产化plc的cpu负荷的方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2553055B2 (ja) * 1986-11-17 1996-11-13 株式会社東芝 プログラマブルコントロ−ラ
JPH0695713A (ja) * 1992-09-14 1994-04-08 Hitachi Ltd プログラマブルコントローラとそのプログラミング方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10990073B2 (en) 2016-08-30 2021-04-27 Mitsubishi Electric Corporation Program editing device, program editing method, and computer readable medium

Also Published As

Publication number Publication date
JP2012059078A (ja) 2012-03-22

Similar Documents

Publication Publication Date Title
JP2012118715A (ja) Plcシステム、その開発支援装置、プログラム
JP6939132B2 (ja) アプリケーション・プロファイリング・ジョブ管理システム、プログラム、及び方法
CN102576314B (zh) 具有横跨多个处理器的数据并行线程之映射处理逻辑
JP5655448B2 (ja) Plcシステム、その開発支援装置
US20130298112A1 (en) Control Flow Graph Application Configuration
US8677334B2 (en) Parallelization method, system and program
CN105242962B (zh) 基于异构众核的轻量级线程快速触发方法
CN103218245A (zh) 选择要在计算系统中执行的优化代码的方法和系统
KR20140054948A (ko) 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법
JP2015509249A5 (ja)
JP2019049843A (ja) 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置
JP2004220583A (ja) アセンブラにおいて大域的プロセッサ資源割当てを実行するための方法およびシステム
EP1993038A1 (en) Data processing system and data processing method
US20160147559A1 (en) Modification of context saving functions
JP6953768B2 (ja) 支援装置、プログラム
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
JP5360506B2 (ja) マルチコアにおけるプログラミングシステム、その方法及びそのプログラム
Peccerillo et al. Task-dag support in single-source PHAST library: Enabling flexible assignment of tasks to cpus and gpus in heterogeneous architectures
US20120137300A1 (en) Information Processor and Information Processing Method
JP6295914B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
KR102512704B1 (ko) 매트릭스 연산 방법 및 그 장치
US20090187895A1 (en) Device, method, program, and recording medium for converting program
Tulika et al. Using choreography of actors and rewriting rules to adapt legacy Fortran programs to cloud computing
JP5845788B2 (ja) 実行制御プログラム、実行制御装置および実行制御方法
KR102213046B1 (ko) 설계 지원 장치, 설계 지원 방법 및 기록 매체에 저장된 프로그램

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130813

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140520

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140718

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141028

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141110

R150 Certificate of patent or registration of utility model

Ref document number: 5655448

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250