(57)【要約】【課題】  予め出力信号に対する入力信号や一時変数の依存性を判定して、同じ依存性のあるソースコードを纏めて分割し、制御プログラムの実行時間を短縮するようにした制御プログラム分割装置を提供することを目的とする。【解決手段】  ソースコードの記号列を読み取る入力処理部１０と、記号列を入力し、トークン列を生成する字句解析処理部１１と、トークン列を入力し、トークン列から入出力信号テーブルと、依存性テーブルと、構文木と、を生成する構文解析処理部１２と、入出力信号テーブルと、依存性テーブルと、及び構文木と、に記述された構文規則定義の意味から、出力信号に依存性のある複数の分割されたソースコードに纏めて分割する分割処理部１３と、分割されたソースコードを記号列として出力する出力処理部１４と、を備え、制御プログラムのソースコードを、出力信号に同じ依存性があるソースコード同士に纏めて分割することを特徴とする。【選択図】  図１
2015035174.tif 000002
【特許請求の範囲】
【請求項１】
制御対象である現場機器の制御プログラムを遠隔地に備える複数のサーバで制御するクラウド制御システムにおいて、当該制御プログラムを当該複数のサーバに予め分割して並列に実行させるプリコンパイラとしての制御プログラムの分割装置であって、
予め定めるプログラミング言語で生成される前記制御プログラムのソースコードを入力し、当該ソースコードの記号列を読み取る入力処理部と、
読み取った前記記号列を入力し、機械可読にした前記プログラミング言語の規則定義を、プログラムLexを介して与え、前記ソースコードのトークン列（語彙列）を生成する字句解析処理部と、
前記字句解析処理部で解析したトークン列を入力し、前記プログラミング言語の前記トークン列の構文規則定義を、プログラムYaccを介して与え、前記ソースコードの構文規則定義に一致する前記トークン列から当該ソースコードの信号名と前記現場機器との入力信号、一次変数、及び出力信号の種類を判定して記述した入出力信号テーブルと、どの前記出力信号がどの前記入力信号及び前記一次変数に依存しているかを判定して記述した依存性テーブルと、前記ソースコードの構造を判定して記述した構文木と、を生成する構文解析処理部と、
前記入出力信号テーブルと、前記依存性テーブルと、及び前記構文木と、に記述された前記構文規則定義の意味から、前記出力信号に依存性のある複数の分割された前記ソースコード毎に分割する分割処理部と、
分割された前記ソースコードを前記記号列として出力する出力処理部と、
を備え、
前記制御プログラムの前記ソースコードを、前記出力信号に同じ依存性のあるソースコード同士に纏めて分割することを特徴とする制御プログラム分割装置。
【請求項２】
前記依存性テーブルは、予め与えられた前記トークン列の前記構文規則定義に基づいて判定され、前記出力信号に対する前記入力信号、及び前記一次変数の直接依存性と、
予め与えられた前記トークン列の前記構文規則定義に基づいて判定され、前記制御プログラムの全ての前記ソースコードの前記直接依存性から記述される間接的な依存性を示す間接依存性と、
をテーブル化して記述し、
前記出力信号に対する前記入力信号及び前記一次変数の依存性を参照可能となるようにしたことを特徴とする請求項１記載の制御プログラム分割装置。
【請求項３】
前記構文木は、予め与えられた前記トークン列の前記構文規則定義に基づいて判定され、前記制御プログラムの前記ソースコード１行をノードとして記述し、ある行に従属する行をそのノードの下位のノードとして記述した木構造で前記ソースコードを記述し、
前記ソースコードを木構造で出力できるようにしたことを特徴とする請求項１記載の制御プログラム分割装置。
【請求項４】
前記出力処理部は、前記分割処理部で分割された複数の前記ソースコードについて、前記依存性テーブルから前記信号名を取得する信号名取得部、当該分割された前記ソースコードのファイル名を設定するファイル名設定部、及びそのファイル書出力するテキスト出力部、
を備え、
分割された前記ソースコードのファイル名からどの前記出力信号を演算するためのプログラムかを知ことが可能となるようにしたことを特徴とする請求項１記載の制御プログラム分割装置。
【請求項５】
前記出力処理部は、前記分割処理部で分割された複数の分割された前記ソースコードの連番を生成する連番生成部と、連番を付与された当該ソースコードのファイル名を設定するファイル名設定部、及びそのファイルを出力するテキスト出力部、
を備え、
分割された前記ソースコードのファイル名から前記出力信号の数を知ることが可能となるようにしたことを特徴とする請求項１記載の制御プログラム分割装置。
【請求項６】
更に、複数の分割された前記ソースコードを、実行可能な制御プログラムのソースコードをオブジェクトコードに変換するコンパイラを備える請求項１に記載の制御プログラム分割装置。
【請求項７】
制御対象である現場機器の制御プログラムを遠隔地に備える複数のサーバで制御するクラウド制御システムにおいて、当該制御プログラムを当該複数のサーバに予め分割して並列に実行させるプリコンパイラとしての制御プログラムの分割方法であって、
前記プリコンパイラとしてのプロセッサは、
予め定めるプログラミング言語で生成される前記制御プログラムのソースコードを入力し、当該ソースコードの記号列を読み取る入力処理ステップと、
読み取った前記記号列を入力し、機械可読にした前記プログラミング言語の規則定義を、プログラムLexを介して与え、前記ソースコードのトークン列（語彙列）を生成する字句解析処理ステップと、
前記字句解析処理部で解析したトークン列を入力し、前記プログラミング言語の前記トークン列の構文規則定義を、プログラムYaccを介して与え、前記ソースコードの構文規則定義に一致する前記トークン列から当該ソースコードの信号名と前記現場機器との入力信号、一次変数、及び出力信号の種類を判定して記述した入出力信号テーブルと、どの前記出力信号がどの前記入力信号及び前記一次変数に依存しているかを判定して記述した依存性テーブルと、前記ソースコードの構造を判定して記述した構文木と、を生成する構文解析処理ステップと、
前記入出力信号テーブルと、前記依存性テーブルと、及び前記構文木と、に記述された前記構文規則定義の意味から、前記出力信号に依存性のある複数の分割された前記ソースコード毎に分割する分割処理ステップと、
分割された前記ソースコードを前記トークン列として出力する出力処理ステップと、
を備え、
前記制御プログラムの前記ソースコードを、前記出力信号に同じ依存性があるソースコード同士に纏めて分割することを特徴とする制御プログラムの分割方法。
【請求項８】
前記構文解析処理ステップにおける前記依存性テーブルの生成は、予め与えられた前記トークン列の前記構文規則定義に基づいて判定され、前記出力信号に対する前記入力信号、及び前記一次変数の直接依存性と、予め与えられた前記トークン列の前記構文規則定義に基づいて判定され、前記制御プログラムの全ての前記ソースコードの前記直接依存性から記述される間接的な依存性を示す間接依存性と、をテーブル化して記述するようにし、
前記出力信号に対する前記入力信号及び前記一次変数の依存性を参照可能となるようにしたことを特徴とする請求項７記載の制御プログラム分割方法。
【請求項９】
前前記構文解析処理ステップにおける記構文木の生成は、予め与えられた前記トークン列の前記構文規則定義に基づいて判定され、前記制御プログラムの前記ソースコード１行をノードとして記述し、ある行に従属する行をそのノードの下位のノードとして記述した木構造で前記ソースコードを記述するようにし、
前記ソースコードを木構造で出力できるようにしたことを特徴とする請求項７記載の制御プログラム分割方法。
【請求項１０】
前記出力処理ステップは、前記分割処理部で分割された複数の前記ソースコードについて、前記依存性テーブルから前記信号名を取得し、当該分割された前記ソースコードのファイル名を名設し、及びそのファイル書出力するテキスト出力し、
分割された前記ソースコードのファイル名からどの前記出力信号を演算するためのプログラムかを知ことが可能となるようにしたことを特徴とする請求項７記載の制御プログラム分割装置。
【請求項１１】
前記出力処理ステップは、記分割処理部で分割された複数の分割された前記ソースコードの連番を生成し、連番を付与された当該ソースコードのファイル名を設定し、及びそのファイルを出力し、
分割された前記ソースコードのファイル名から前記出力信号の数を知ることが可能となるようにしたことを特徴とする請求項７記載の制御プログラム分割方法。
【請求項１２】
更に、複数の分割された前記ソースコードを、実行可能な制御プログラムのソースコードをオブジェクトコードに変換するステップと、を備える請求項７に記載の制御プログラム分割方法。
【請求項１３】
請求項７乃至請求項１２に記載の制御プログラムのソースコードの分割方法を実現するプリコンパイラを記憶したことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、クラウド制御システムにおいて使用される制御プログラム分割装置、制御プログラムの分割方法及びその記録媒体に関する。
【背景技術】
【０００２】
災害復旧を容易にするため、遠隔からネットワークを介して現場機器を制御する遠隔制御技術に注目が集まっている。遠隔に配置された複数のクラウドサーバから制御を行うシステムを、ここではクラウド制御システムと呼ぶ。
【０００３】
クラウド制御システムでは、制御プログラムを物理的に離れた複数のサーバに保持するので、被災時において、全ての制御プログラムが失われる恐れがない。また、災害からの復旧の際、制御プログラムの再構築および制御サーバの交換にかかる時間を短縮することもできる。
【０００４】
このような背景から、クラウド制御システムにおいては、制御プログラムを複数のサーバで並列実行できるように分割するプリコンパイラが求められている。
【０００５】
ところで、一般的なマルチプロセッサ向けのコンパイラでは、ループ処理を並列実行可能なように分割する手法がある（例えば、特許文献１参照）。
【０００６】
また、従来から多くのプログラミング言語のコンパイラ開発のために、字句解析器（レキシカルアナライザ）を生成するためのプログラムとしてLexが、また、構文解析器（パーサジェネレータ）を生成するためのプログラムとしてYaccがある（例えば、非特許文献1参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第３７２９６４４号公報
【非特許文献】
【０００８】
【非特許文献１】著者 John R Levine, Tony Mason, Doug Brown 、   書名 Lex & Yacc、Paperback-306 pages 2nd/updated edition、   発行所 O’Reilly & Associates、   発行年月日 October 1992、   国際標準図書番号：ISBN 1565920007
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述した特許文献１のコンパイラにおいては、プログラムのデータの依存性を判定して、ループ処理を並列実行するため、ループの分割を行った後、ループ毎に異なる複数のサーバで演算して１つの出力を求める。
【００１０】
そのため、複数のデータを交換しながら１つの出力を演算するため、サーバ間の通信が多くなるので、サーバ間のネットワークは超高速ネットワークとしている。
【００１１】
即ち、特許文献１のコンパイラは、１つの出力を求めるための演算時間が１日もかかり、演算時間が通信時間に比べて極端にかかるデータ依存性が存在する多重ループを含む科学技術計算などのプログラムの場合に適用されるもので、１つの出力の処理時間を短くできる効果が有る。
【００１２】
しかしながら、多数の入出力点数を備え、夫々の演算時間と通信時間の比率が同等で、演算時間がミリ秒単位であるようなクラウド制御システムとは、対象とするプログラムの構造もネットワークも異なるので、制御プログラムを高速処理するコンパイラとしては適用することが出来ない。
【００１３】
本願は、インターネットを使用したネットワークで構成されるクラウド制御システムにおいて、多数の入出力信号の処理を要求される制御プログラムを、予め出力信号に対する入力信号や一時変数の依存性を判定して、同じ依存性があるソースコード同士に纏めて分割し、分割された制御プログラムを並列に実行して、制御プログラムの実行時間を短縮するようにした制御プログラム分割装置、制御プログラムの分割方法及びその記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本実施の形態の制御プログラムの分割装置は、制御対象である現場機器の制御プログラムを遠隔地に備える複数のサーバで制御するクラウド制御システムにおいて、当該制御プログラムを当該複数のサーバに予め分割して並列に実行させるプリコンパイラとしての制御プログラムの分割装置であって、予め定めるプログラミング言語で生成される前記制御プログラムのソースコードを入力し、当該ソースコードの記号列を読み取る入力処理部と、読み取った前記記号列を入力し、機械可読にした前記プログラミング言語の規則定義を、プログラムLexを介して与え、前記ソースコードのトークン列（語彙列）を生成する字句解析処理部と、前記字句解析処理部で解析したトークン列を入力し、前記プログラミング言語の前記トークン列の構文規則定義を、プログラムYaccを介して与え、前記ソースコードの構文規則定義に一致する前記トークン列から当該ソースコードの信号名と前記現場機器との入力信号、一次変数、及び出力信号の種類を判定して記述した入出力信号テーブルと、どの前記出力信号がどの前記入力信号及び前記一次変数に依存しているかを判定して記述した依存性テーブルと、前記ソースコードの構造を判定して記述した構文木と、を生成する構文解析処理部と、前記入出力信号テーブルと、前記依存性テーブルと、及び前記構文木と、に記述された前記構文規則定義の意味から、前記出力信号に依存性のある複数の分割された前記ソースコード毎に分割する分割処理部と、分割された前記ソースコードを前記記号列として出力する出力処理部と、を備え、前記制御プログラムの前記ソースコードを、前記出力信号に同じ依存性のあるソースコード同士に纏めて分割することを特徴とする。
【００１５】
上記目的を達成するために、本実施の形態の制御プログラムの分割方法は、制御対象である現場機器の制御プログラムを遠隔地に備える複数のサーバで制御するクラウド制御システムにおいて、当該制御プログラムを当該複数のサーバに予め分割して並列に実行させるプリコンパイラとしての制御プログラムの分割方法であって、前記プリコンパイラとしてのプロセッサは、予め定めるプログラミング言語で生成される前記制御プログラムのソースコードを入力し、当該ソースコードの記号列を読み取る入力処理ステップと、読み取った前記記号列を入力し、機械可読にした前記プログラミング言語の規則定義を、プログラムLexを介して与え、前記ソースコードのトークン列（語彙列）を生成する字句解析処理ステップと、前記字句解析処理部で解析したトークン列を入力し、前記プログラミング言語の前記トークン列の構文規則定義を、プログラムYaccを介して与え、前記ソースコードの構文規則定義に一致する前記トークン列から当該ソースコードの信号名と前記現場機器との入力信号、一次変数、及び出力信号の種類を判定して記述した入出力信号テーブルと、どの前記出力信号がどの前記入力信号及び前記一次変数に依存しているかを判定して記述した依存性テーブルと、前記ソースコードの構造を判定して記述した構文木と、を生成する構文解析処理ステップと、前記入出力信号テーブルと、前記依存性テーブルと、及び前記構文木と、に記述された前記構文規則定義の意味から、前記出力信号に依存性のある複数の分割された前記ソースコード毎に分割する分割処理ステップと、分割された前記ソースコードを前記トークン列として出力する出力処理ステップと、を備え、前記制御プログラムの前記ソースコードを、前記出力信号に同じ依存性があるソースコード同士に纏めて分割することを特徴とする。
【図面の簡単な説明】
【００１６】
【図１】実施の形態の制御プログラム分割装置のブロック構成図。
【図２】制御プログラムの分割前のソースコードの例。
【図３】入出力信号テーブルの例。
【図４】入出力信号の依存性テーブルの例。
【図５】構文木の例。
【図６】分割された制御プログラムのソースコードの例。
【図７】出力処理部の詳細構成図。
【図８】出力処理部の他の詳細構成図。
【図９】分割後のソースコードをコンパイルする制御プログラム分割装置の構成図。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について図面を参照して説明する。本実施の形態に示す制御プログラム分割装置１は、制御対象である現場機器の制御プログラムを遠隔地に備える複数のサーバで制御するクラウド制御システムにおいて使用される制御プログラムが、複数のサーバで並列に実行できるように、予め制御プログラムを分割するためプリコンパイラである。
【００１８】
制御プログラム分割装置１は、それ自身を専用の装置で構成しても良いし、ネットワークに接続される何れかのサーバが制御プログラムを実行する前にプリコンパイラとなるように構成しても良い。
【００１９】
先ず、図１を参照して、制御プログラム分割装置１の構成について説明する。制御プログラム分割装置１の構成は、予め定めるプログラミング言語で生成される前記制御プログラムのソースコードを入力し、当該ソースコードの記号列を読み取る入力処理部１０と、入力処理部１０で読み取った記号列を入力し、機械可読にした前記プログラミング言語の規則定義を、プログラムLex（非特許文献１参照）を介して与え、ソースコードのトークン列（語彙列）を生成する字句解析処理部１１と、を備える。
【００２０】
更に、字句解析処理部１１で解析したトークン列を入力し、プログラミング言語のトークン列の構文規則定義を、プログラムYacc（非特許文献１参照）を介して与え、前記ソースコードの構文規則定義に一致する前記トークン列から当該ソースコードの信号名と前記現場機器との入力信号、一次変数、及び出力信号の種類を判定して記述した入出力信号テーブル２０と、どの出力信号がどの入力信号及び一次変数に依存しているかを判定して記述した依存性テーブル２１と、ソースコードの構造を判定して記述した構文木２２と、を生成する構文解析処理部１２と、を備える。
【００２１】
更に、入出力信号テーブル２０と、依存性テーブル２１と、及び構文木２２と、に記述された構文規則定義の意味から、出力信号に依存性のある複数の分割されたソースコード毎に分割する分割処理部１３と、分割されたソースコードをトークン列として出力する出力処理部１４と、を備える。
【００２２】
ここで、制御プログラムのプログラミング言語は、国際規格ＩＥＣ６１１３１−３に規定するプログラミング言語、及びこの既存のＩＥＣ６１１３１−３を想定して、説明するが、拡張された国際規格ＩＥＣ６１４９９を含んでも良いし、その他のプログラミング高級言語、FORTRANなどであっても良い。
【００２３】
また、ここで言うクラウド制御システムのネットワークは、汎用のインターネットと、このネットワークに接続された複数のサーバ及び現場機器とで構成されるが、現場機器とこのネットワークとは専用のネットワークで接続されるように構成しても良い。
【００２４】
次に、各部の構成を説明する前に、本実施の形態を説明するための制御プログラムのソースコード３０について、図２を参照して説明しておく。
【００２５】
図２に示す制御プログラムのソースコード３０は、ＩＥＣ６１１３１−３に基づいた分割前の宣言部と命令部とから成るソースコード３０を示す。宣言部は、入出力信号の変数、一次変数、ファンクションPOU1〜POU4を記述し、命令部はその関数POU1〜POU4が記述されている。個々のトークン列の意味は、衆知の内容であるので割愛する。
【００２６】
次に、各部の詳細構成について説明する。入力処理部１０は、分割前のソースコード３０から記述された記号列を読み取り、読み取った記号列を字句解析処理部１１に送る。
【００２７】
また、字句解析処理部１１は、入力処理部１０で読み取った記号列を入力し、機械可読にしたプログラミング言語の規則定義を、プログラムLex（非特許文献１参照）を介して与え、ソースコードのトークン列（語彙列）を生成する。
【００２８】
ここで、制御プログラムのソースコード３０のトークン列とは、プログラミング言語で定義された制御構文を示す単語や信号名、また、ユーザが任意に記述する信号名、信号の型などである。
【００２９】
例えば、図２に示す制御プログラム言語ＩＥＣ６１１３１−３で記述された制御プログラムのソースコード３０の場合では、プログラムの開始を示す「PROGRAM」、プログラム名を示す「POU0」、信号定義の開始を示す「VAR」、信号名を示す「X1」、信号の型を示す「INT」などがプログラムソースコードのトークン列である。
【００３０】
このような字句解析処理部１１での処理は、字句解析器生成ツールであるLex、または、Flex等のプログラムを用いて、予め機械可読にした予め設定されるプログラミング言語の構文規則定義を与えることで、入力される記号列に対して字句解析が実行され、トークン列が生成される。
【００３１】
次に、構文解析処理部１２は、字句解析処理部１１で解析したトークン列の構文規則定義を予めプログラムYaccを介して与えておき、入力されたトークン列が予め与えられた構文規則定義と照合してどの構文規則と一致するかを判定して、制御プログラムのソースコード３０の意味をテーブルや構造図として記述する。
【００３２】
例えば、ソースコード３０の信号名と現場機器との入力信号、一時変数、及び出力信号の種類を記述した入出力信号テーブル２０に記述し、また、どの出力信号がどの入力信号及び一時変数に依存しているかを記述した依存性テーブル２１に記述し、ソースコード３０の構造は後述する構文木２２として記述する。
【００３３】
また、図２に示す例では、「PROGRAM〜END_PROGRAM」が１つのソースコード３０であること、「VAR〜END_VAR」が信号名の定義を記述する部分であることも与えられた構文規則定義と照合して判定される。
【００３４】
また、同様に、「X1 AT %IW61.1: INT;」は、整数型変数の入力信号X1がメモリアドレス61.1に記憶されることも判定される。
【００３５】
このようなソースコード３０のトークン列の判定情報をもとに、入出力信号テーブル２０、依存性テーブル２１、構文木２２が生成される。
【００３６】
生成される入出力信号テーブル２０には、図３に示すように、信号名２３と入出力信号の種類２４が記述されている。
【００３７】
ソースコード３０中にどの程度の数の入出力信号があるかは、ソースコード３０を読み込まないと不明なため、動的にデータの数を追加可能なテーブル構造で入出力信号テーブル２０を保持するようにしても良い。
【００３８】
また、依存性テーブル２１には、図４に示すように、信号名２５と入出力信号の種類２６と直接依存性２７と間接依存性２８が記述される。
【００３９】
この依存性テーブル２１は、図２のソースコード３０の場合、構文解析処理部１２に設定した依存性に関する構文規則定義と照合して、「POU1(X:=X1, Y=>T1);」という行の記述は、POU1という関数はX1を入力とし、T1を出力することが判定できるので、T1はX1に依存していると判定し、この判定が信号名T1の直性依存性２７の欄にX1が記述される。
【００４０】
同様に、Y1はT1に依存し、Y2はT2とX2に依存し、T2はX3に依存していると判定し、この判定が直接依存性２７として依存性テーブル２１に記述される。
【００４１】
更に、各信号名に対する直接依存性２７から、間接依存性２８を生成することが出来る。
【００４２】
例えば、Y1はT1に依存し、T1はX1に依存していることから、Y1はX1にも依存していることが、間接依存性２８として依存性テーブル２１に記述される。したがって、信号名Y1の間接依存性２８の欄にはX1が記述される。同様にY2の間接依存性２８の欄にはX3が記述される。
【００４３】
即ち、依存性は、該当する出力を求めるために直接的に使用されている変数は、直接依存性あり、直接依存性のある変数が、その他の変数により求められる場合には、このその他の変数は間接依存性ありと判定する。
【００４４】
このような依存性テーブル２１をテーブルに記述しておくことで、出力信号に対する入力信号や一時変数の依存性を短時間で参照することが出来る。        
また、構文木２２は、プログラム構造に関する構文規則定義と照合して、ソースコード３０の構造をグラフィックに記述するものである。構文解析処理部１２は、ソースコード３０の１行をノードとし、ある行に従属する行をそのノードの下位のノードとする木構造を記述する。
【００４５】
例えば、図２に示すソースコード３０に対しては、図５に示すような木構造のグラフィックデータを記述する。
【００４６】
このようにソースコード３０の構造を木構造でグラフ化することで、出力されるソースコード３０のインデントを設定可能とし、視認性が良いソースコード３０を出力することが可能となる。
【００４７】
次に、分割処理部１３は、入出力信号テーブル２０と依存性テーブル２１と構文木２２を読み込み、構文木２２の各ノードがどの出力信号に依存しているかをプログラム構造に関する構文規則定義と照合して判定する。
【００４８】
例えば、図５の例では、「PROGRAM POU0」や「VAR」というノードは出力信号によらず、プログラムを構成するために必要なノードである。また、「POU1(X:=X1, Y=>T1);」というノードは、依存性テーブル２１によると出力信号Y1に依存している。
【００４９】
したがって、「POU1(X:=X1, Y=>T1);」はY1を出力するプログラムにのみ必要なノードである。
【００５０】
同様に、「POU2(X:=T1, Y=>Y1);」というノードも、依存性テーブル２１によると出力信号Y1に依存している。
【００５１】
したがって、「POU2(X:=T1, Y=>Y1);」はY1を出力するプログラムにのみ必要なノードで、POU1とPOU2とは、同じ依存性であると判定される。
【００５２】
他方、「POU3(X:=T2, X2=X2 Y=>Y2);は、Y=>Y2;」というノードは、依存性テーブル２１によると出力信号Y2依存している。
【００５３】
したがって、「POU３(X:=T2, Y=>Y2);」というノードは、Y2を出力するプログラムにのみ必要なノードである。
【００５４】
同様に、「POU4(X:=X3, Y=>T2);」というノードも、依存性テーブル２１によると出力信号Y2に依存している。
【００５５】
したがって、「POU4(X:=X3, Y=>T2);」はY2を出力するプログラムにのみ必要なノードで、POU3とPOU4とは、同じ依存性であると判定される。
【００５６】
その結果、図２に示したソースコード３０は、図６（a）に示すように、命令部が同じ依存性である分割されたソースコード３１と、図６（ｂ）に示すように、命令部が同じ依存性である分割されたソースコード３２と、に分割して出力される。
【００５７】
即ち、分割は、出力信号の数分のソースコードに分割する。
【００５８】
また、出力処理部１４は、生成された構文木２２を走査し、各出力信号が関係するノードを分割されたソースコード４１、４２として出力するもので、図7に示すように、依存性テーブル２１から信号名を取得する信号名取得部１５と、分割されたソースコード４１、４２を出力するファイル名を設定するファイル名設定部１６と、分割されたソースコード４１、４２をテキストPOU＿Y1、POU＿Y2として出力するテキスト出力部１７を備えても良い。
【００５９】
この信号名取得部１５とファイル名設定部１６を備えることで、出力信号の名前がついた分割されたソースコード４１、４２のファイルを出力することができ、分割されたソースコード４１、４２のファイル名からどの出力信号を演算するためのプログラムかを判断することが可能となる。
【００６０】
また、図８に示すように、出力処理部１４は、1〜Nまでの連番を生成する連番生成部１８と、出力するファイル名を設定するファイル名設定部１６ａと、分割されたソースコードをテキストとして出力するテキスト出力部１７ａとを備える用に構成することも出来る。
【００６１】
この連番生成部１８とファイル名設定部１６ａ、及びテキスト出力部１７ａを備えることで、連番を付けたファイル５１、５２を出力することができ、どの程度の数の出力信号があるかをファイル名からのみで判断することが可能となる。
【００６２】
また、図９に示すように、制御プログラム分割装置１には、更に、制御プログラムのソースコード３０を、分割されたソースコードをオブジェクトプログラムに変換するコンパイラ１９を備え、分割された制御プログラム３４〜３６を出力するように構成することも出来る。
【００６３】
この場合にも、同様に、分割された制御プログラム３４〜３６のファイル名に出力信号名を付加しても良いし、連番を付加しても良い。
【００６４】
本実施の形態によれば、複数の入出力信号を持つ制御プログラムのソースコードを、出力信号に同じ依存性があるソースコード同士に纏めて分割し、並列実行可能な分割された複数の制御プログラムに分割することができる。
【００６５】
したがって、本実施の形態によれば、インターネットを使用したネットワークで構成されるクラウド制御システムにおいて、複数の入出力信号の処理を要求される制御プログラムを、予め出力信号に対する入力信号や一時変数に同じ依存性があるソースコード同士に纏めて分割し、複数のサーバで制御プログラムの実行時間を短縮するようにした制御プログラム分割装置、制御プログラムの分割方法及びその記録媒体を提供することが出来る。
【００６６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６７】
１  制御プログラム分割装置
１０  入力処理部
１１  字句解析処理部
１２  構文解析処理部
１３  分割処理部
１４  出力処理部
１５  信号名取得部
１６  ファイル名設定部
１７  テキスト出力部
１８  連番生成部
１９  コンパイラ
２０  入出力信号テーブル
２１  依存性テーブル
２２  構文木
２３、２５  信号名
２４、２６  入出力
２７  直接依存性
２８  間接依存性
３０  分割前のソースコード
３１、３２、３３  分割後のソースコード
３４、３５、３６  分割後のソースプログラム
【図１】
2015035174.tif 000003
【図２】
2015035174.tif 000004
【図３】
2015035174.tif 000005
【図４】
2015035174.tif 000006
【図５】
2015035174.tif 000007
【図６】
2015035174.tif 000008
【図７】
2015035174.tif 000009
【図８】
2015035174.tif 000010
【図９】
2015035174.tif 000011