(57)【特許請求の範囲】
【請求項１】
制御対象の機器が設置された環境に関する情報を示す環境情報と、前記機器の状態を示す状態情報とのいずれかを含む検知信号に基づいて前記機器を制御するための制御信号を複数生成する制御処理を実現する制御プログラムのソースコードから、前記ソースコードにおいて意味を持つ最小の単位の文字列であるトークンを抽出する字句解析部と、
前記字句解析部によって抽出されたトークンの構文を解析し、前記ソースコードの意味を示す構文情報を生成する構文解析部と、
前記構文解析部によって生成された構文情報と前記ソースコードとに基づいて、前記制御信号を生成する複数の分割ソースコードを生成する分割部と、
前記分割ソースコードから生成される制御プログラムが実行された際の入力となる入力信号の依存関係に基づいて、前記制御プログラムの実行主体を判定する実行主体判定部と、
を備える制御プログラム分割装置。
【請求項２】
前記構文解析部は、前記トークンのツリー構造を示すツリー情報と、前記ソースコードの入力信号と他の信号との依存関係を示す依存性情報と、を含む構文情報を生成し、
前記分割部は、前記依存性情報に基づいて、前記ツリー情報から各制御信号の生成に必要なトークンを抽出することで、前記分割ソースコードを生成する、
請求項１に記載の制御プログラム分割装置。
【請求項３】
前記分割部は、前記分割ソースコードが表示される際、前記分割ソースコードに含まれるトークンが前記ツリー構造に応じた位置に表示されるように前記分割ソースコードを生成する、
請求項２に記載の制御プログラム分割装置。
【請求項４】
前記実行主体判定部は、前記分割ソースコードの入力信号の依存関係が１つの装置に閉じた関係である場合、前記装置を前記分割ソースコードの実行主体と判定し、前記分割ソースコードの入力信号の依存関係が複数の装置に関係する場合、前記複数の装置と通信可能な他の装置を前記分割ソースコードの実行主体として判定する、
請求項１から３のいずれか一項に記載の制御プログラム分割装置。
【請求項５】
前記分割プログラムにより生成される制御信号の識別情報と、分割前の前記ソースコードの識別情報とに基づいて、各分割ソースコードのファイル名を決定し、決定した前記ファイル名で各分割ソースコードをファイル出力する分割プログラム出力部をさらに備える、
請求項１から４のいずれか一項に記載の制御プログラム分割装置。
【請求項６】
前記分割ソースコードをコンパイルし、実行可能な制御プログラムを生成するコンパイル部をさらに備える、
請求項１から５のいずれか一項に記載の制御プログラム分割装置。
【請求項７】
前記コンパイル部は、制御プログラムの実行主体となる装置のオペレーティングシステム又はＣＰＵの種別に応じた複数のコンパイラを有し、
制御プログラムの実行主体となる装置のオペレーティングシステム又はＣＰＵに関する情報に基づいて、前記コンパイル部が使用するコンパイラを、制御プログラムの実行主体となる装置のオペレーティングシステム又はＣＰＵに応じたコンパイラに切り替えるコンパイラ制御部をさらに備える、
請求項６に記載の制御プログラム分割装置。
【請求項８】
前記コンパイラ制御部は、制御プログラムの実行主体となる装置のオペレーティングシステム又はＣＰＵに関する情報に基づいて、前記コンパイル部が使用するコンパイラのコンパイラオプションを、制御プログラムの実行主体となる装置のオペレーティングシステム又はＣＰＵに応じたコンパイラオプションに切り替える、
請求項７に記載の制御プログラム分割装置。
【請求項９】
制御対象の機器が設置された環境に関する情報を示す環境情報と、前記機器の状態を示す状態情報とのいずれかを含む検知信号に基づいて前記機器を制御するための制御信号を複数生成する制御処理を実現する制御プログラムのソースコードから、前記ソースコードにおいて意味を持つ最小の単位の文字列であるトークンを抽出する字句解析ステップと、
前記字句解析ステップにおいて抽出されたトークンの構文を解析し、前記ソースコードの意味を示す構文情報を生成する構文解析ステップと、
前記構文解析ステップにおいて生成された構文情報と前記ソースコードとに基づいて、前記制御信号を生成する複数の分割ソースコードを生成する分割ステップと、
前記分割ソースコードから生成される制御プログラムが実行された際の入力となる入力信号の依存関係に基づいて、前記制御プログラムの実行主体を判定する実行主体判定ステップと、
を有する制御プログラム分割方法。
【請求項１０】
制御対象の機器が設置された環境に関する情報を示す環境情報と、前記機器の状態を示す状態情報とのいずれかを含む検知信号に基づいて前記機器を制御するための制御信号を複数生成する制御処理を実現する制御プログラムのソースコードから、前記ソースコードにおいて意味を持つ最小の単位の文字列であるトークンを抽出する字句解析ステップと、
前記字句解析ステップにおいて抽出されたトークンの構文を解析し、前記ソースコードの意味を示す構文情報を生成する構文解析ステップと、
前記構文解析ステップにおいて生成された構文情報と前記ソースコードとに基づいて、前記制御信号を生成する複数の分割ソースコードを生成する分割ステップと、
前記分割ソースコードから生成される制御プログラムが実行された際の入力となる入力信号の依存関係に基づいて、前記制御プログラムの実行主体を判定する実行主体判定ステップと、
をコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、制御プログラム分割装置、制御プログラム分割方法、コンピュータプログラム及び分割ソースコード生産方法に関する。
【背景技術】
【０００２】
災害復旧を容易にするため、ネットワークを介して機器を遠隔制御する遠隔制御技術が注目されている。このような遠隔制御をクラウドサーバで実行する形態の遠隔制御システムは、クラウド制御システムと呼ばれる。クラウド制御システムでは、遠隔制御を実現するための制御プログラムが物理的に離れた複数のクラウドサーバに保持される。このようなクラウド制御システムでは、仮に１つの拠点が被災した場合であっても、他の拠点のクラウドサーバに制御プログラムが保持されているため、制御プログラムを消失することがない。そのため、被災時のシステム復旧作業に要する時間を短縮することができる。
【０００３】
ところで、遠隔制御システムは、制御対象の機器に関する情報をセンサ等の検知装置を用いて取得する。検知装置は、制御対象の機器に関する事象を計測し、計測値を示す検知信号を遠隔制御システムに送信する。遠隔制御システムは、検知信号を入力情報として、制御対象の機器を制御する制御信号を生成する。生成された制御信号に基づいて、制御対象の機器が動作することによって、機器の遠隔制御が実現される。このような遠隔制御システムをクラウド制御システムとして構成した場合、検知信号及び制御信号の送受信にはインターネットなどの広域ネットワークが用いられる可能性がある。この場合、広域ネットワークにおいて通信遅延が発生した場合、クラウド制御システムは、検知信号に対する制御信号の応答を要求される応答時間内に行うことができず、システムの応答性が低下する可能性がある。
【０００４】
このような背景により、制御プログラムを複数の装置で並列実行することができるように分割するプリコンパイラが求められている。このようなプリコンパイラが実現されれば、クラウド制御システムは、広域ネットワークの状況に応じて制御プログラムを分割することでシステムの応答時間を保証することができる。例えば、検知装置側のネットワークに位置する装置と、広域ネットワーク側に位置するクラウドサーバとに制御プログラムを分割することができる。
【０００５】
このようなプログラムの分割を行う手法として、従来、一般的なマルチプロセッサ向けのコンパイラにおいて、ループ処理を並列実行可能に分割する手法があった。しかしながら、従来手法では、データ依存性の整合をとるため、分割されたループごとにサーバ間通信を行う必要がある。そのため、分割するプログラムの処理内容や処理量によっては、分割したことによる通信量のオーバーヘッドが大きくなり、必ずしも処理時間の短縮につながらない可能性があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第３７２９６４４号公報
【非特許文献】
【０００７】
【非特許文献１】Lex & Yacc, O’Reilly & Associates (1992) ISBN 1565920007
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、通信量の増大を抑制しつつ制御プログラムの並列処理を可能にする制御プログラム分割装置、制御プログラム分割方法、コンピュータプログラム及び分割ソースコード生産方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態の制御プログラム分割装置は、字句解析部と、構文解析部と、分割部と、実行主体判定部と、を持つ。字句解析部は、制御対象の機器が設置された環境に関する情報を示す環境情報と、前記機器の状態を示す状態情報とのいずれかを含む検知信号に基づいて前記機器を制御するための制御信号を複数生成する制御処理を実現する制御プログラムのソースコードから、前記ソースコードにおいて意味を持つ最小の単位の文字列であるトークンを抽出する。構文解析部は、前記字句解析部によって抽出されたトークンの構文を解析し、前記ソースコードの意味を示す構文情報を生成する。分割部は、前記構文解析部によって生成された構文情報と前記ソースコードとに基づいて、前記制御信号を生成する複数の分割ソースコードを生成する。実行主体判定部は、前記分割ソースコードから生成される制御プログラムが実行された際の入力となる入力信号の依存関係に基づいて、前記制御プログラムの実行主体を判定する。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態の制御プログラム分割装置１の機能構成を示す機能ブロック図。
【図２】クラウド制御システム１０のシステム構成を示すシステム構成図。
【図３】制御プログラムを分割する処理の流れを示すフローチャート。
【図４】分割対象のソースコードの具体例を示す図。
【図５】アドレス情報テーブル１４１の具体例を示す図。
【図６】入出力信号テーブル１４２の具体例を示す図。
【図７】依存性テーブル１４３の具体例を示す図。
【図８】ツリー情報１４４の具体例を示す図。
【図９】分割されたソースコードの具体例を示す図。
【図１０】対応情報テーブル１４５の具体例を示す図。
【図１１】第２の実施形態の制御プログラム分割装置１ａの機能構成を示す機能ブロック図。
【図１２】変形例の制御プログラム分割装置１ｂの機能構成を示す機能ブロック図。
【図１３】変形例の制御プログラム分割装置１ｃの機能構成を示す機能ブロック図。
【発明を実施するための形態】
【００１１】
以下、実施形態の制御プログラム分割装置、制御プログラム分割方法、コンピュータプログラム及び分割ソースコード生産方法を、図面を参照して説明する。
【００１２】
（第１の実施形態）
図１は、第１の実施形態の制御プログラム分割装置１の機能構成を示す機能ブロック図である。
制御プログラム分割装置１は、バスで接続されたＣＰＵ（Central Processing Unit）やメモリや補助記憶装置などを備え、分割プログラムを実行する。制御プログラム分割装置１は、分割プログラムの実行によって入力部１１、字句解析部１２、構文解析部１３、記憶部１４、分割部１５及び分割プログラム出力部１６を備える装置として機能する。なお、制御プログラム分割装置１の各機能の全て又は一部は、ＡＳＩＣ（Application Specific Integrated Circuit）やＰＬＤ（Programmable Logic Device）やＦＰＧＡ（Field Programmable Gate Array）等のハードウェアを用いて実現されてもよい。分割プログラムは、コンピュータ読み取り可能な記録媒体に記録されてもよい。コンピュータ読み取り可能な記録媒体とは、例えばフレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置である。分割プログラムは、電気通信回線を介して送信されてもよい。
【００１３】
入力部１１は、分割対象のプログラムのソースコードを自装置に入力する。例えば、入力部１１は、ＬＡＮ等のネットワークに接続するための通信インターフェースを含んで構成され、他の装置からソースコードが記載されたファイルを取得するように構成されてもよい。また、例えば、入力部１１は、ＣＤ−ＲＯＭやフラッシュメモリなどの記録媒体から情報を読み出す装置を含んで構成され、これらの記録媒体からソースコードが記載されたファイルを取得するように構成されてもよい。また、例えば、入力部１１は、キーボードやマウスなどの入力装置を含んで構成され、これらの入力装置を用いて入力された文字をソースコードとして取得するように構成されてもよい。入力部１１は、取得したソースコードを字句解析部１２に出力する。
【００１４】
字句解析部１２は、入力部１１からソースコードを取得する。字句解析部１２は、ソースコードを解析してトークン列を取得する。トークン列とは、ソースコードにおいて意味を持つ最小単位の文字列のことである。このような字句解析を行うプログラムは、一般にレキシカルアナライザ（lexical analyzer）と呼ばれる。非特許文献１に記載のプログラムＬｅｘは、プログラミング言語（以下、単純に「言語」という。）のトークンの規則に基づいて、レキシカルアナライザを自動生成するプログラムである。例えば、字句解析部１２は、取得したソースコードの言語におけるトークンの規則が定義されたファイルをプログラムＬｅｘに入力し、解析対象のソースコードのレキシカルアナライザを生成する。字句解析部１２は、取得したソースコードを入力として生成されたレキシカルアナライザを実行することで、ソースコードからトークン列を取得する。字句解析部１２は、取得したトークン列を構文解析部１３に出力する。
【００１５】
構文解析部１３は、字句解析部１２から出力されるトークン列に基づいて、ソースコードの構文解析を行う。このような構文解析を行うプログラムは一般にパーサ（Parser）と呼ばれる。非特許文献１に記載のプログラムＹａｃｃは、言語の構文規則に基づいて、パーサを自動生成するプログラムである。例えば、構文解析部１３は、取得されたソースコードの言語における構文規則が定義されたファイルをプログラムＹａｃｃに入力し、解析対象のソースコードのパーサを生成する。構文解析部１３は、取得したトークン列を入力として生成されたパーサを実行することで、トークン列の構文解析を行う。
【００１６】
一般に、ソースコードは、宣言部と命令部とに分類される。宣言部は、取り扱う変数や関数の定義に関する記述であり、命令部は、宣言部で定義された変数や関数を用いた具体的な処理に関する記述である。構文解析部１３は、構文解析を行うことにより、このようなソースコードの構成を示す情報を解析結果として取得する。構文解析部１３は、取得した解析結果を記憶部１４に保存する。
【００１７】
記憶部１４は、磁気ハードディスク装置や半導体記憶装置などの記憶装置を用いて構成される。記憶部１４は、構文解析部１３によって取得されたソースコードの解析結果（構文情報）を記憶する。
【００１８】
分割部１５は、構文解析部１３の解析結果に基づいてソースコードを、個々の制御信号を生成するソースコードに分割する。分割部１５は、分割したソースコードを分割プログラム出力部１６に出力する。
【００１９】
分割プログラム出力部１６は、分割部１５から出力された分割後の各ソースコードを、それぞれ別々のテキストファイルとして出力する。
【００２０】
以下、実施形態の制御プログラム分割装置１が制御プログラムのソースコードを分割する処理について詳細に説明する。まず、制御プログラムを実行するクラウド制御システムの構成について説明する。
【００２１】
図２は、クラウド制御システム１０のシステム構成を示すシステム構成図である。
クラウド制御システム１０は、検知装置２０−１〜２０−３、被制御装置３０−１及び３０−２、通信装置４０−１及び４０−２、サーバ５０を備える。通信装置４０−１及び４０−２は、広域ネットワーク６０を介してサーバ５０と通信する。
【００２２】
検知装置２０−１及び２０−２は、被制御装置３０−１に関する検知信号を取得する。検知装置２０−１及び２０−２は、取得した検知信号を通信装置４０−１に送信する。同様に、検知装置２０−３は、被制御装置３０−２に関する検知信号を取得する。検知装置２０−３は、取得した検知信号を通信装置４０−２に送信する。
【００２３】
被制御装置３０−１は、通信装置４０−１から制御信号を取得する。被制御装置３０−１は、取得した制御信号に基づいて自装置を動作させる。同様に、被制御装置３０−２は、通信装置４０−２から制御信号を取得する。被制御装置３０−２は、取得した制御信号に基づいて自装置を動作させる。
【００２４】
通信装置４０−１は、検知装置２０−１及び２０−２から検知信号を取得する。通信装置４０−１は、取得した検知信号をサーバ５０に送信する。また、通信装置４０−１は、送信した検知信号に基づいて生成された制御信号をサーバ５０から取得する。通信装置４０−１は、取得した制御信号を被制御装置３０−１に送信する。
【００２５】
同様に、通信装置４０−２は、検知装置２０−３から検知信号を取得する。通信装置４０−２は、取得した検知信号をサーバ５０に送信する。また、通信装置４０−２は、送信した検知信号に基づいて生成された制御信号をサーバ５０から取得する。通信装置４０−２は、取得した制御信号を被制御装置３０−２に送信する。
【００２６】
サーバ５０は、制御処理を実行可能なクラウドサーバである。制御処理とは、検知信号に基づいて制御信号を生成する処理である。制御処理は、制御プログラムの実行により実現される。サーバ５０は、通信装置４０−１及び４０−２から検知信号を取得する。サーバ５０は、取得した検知信号のそれぞれに応じた処理を行って、それぞれの検知信号に応じた制御信号を生成する。サーバ５０は、生成した制御信号を対応する通信装置４０−１又は４０−２に送信する。
【００２７】
サーバ５０は、制御処理の主たる実行主体であるが、この制御処理は通信装置４０−１及び４０−２においても実行可能である。通常、通信装置４０−１及び４０−２は、検知信号をサーバ５０に送信し、サーバ５０が制御処理を実行する。その一方で、通信装置４０−１及び４０−２は、必要に応じて自装置で制御処理を実行することによって、システムの応答性の低下を抑制する。この場合、通信装置４０−１及び４０−２は、サーバ５０に検知信号を送信しない。
【００２８】
以下、説明を簡単にするために、特に区別しない限り、検知装置２０−１〜２０−３を検知装置２０と記載する。同様に、被制御装置３０−１及び３０−２を被制御装置３０と記載する。同様に、通信装置４０−１及び４０−２を通信装置４０と記載する。
【００２９】
このようなクラウド制御システム１０において、検知装置２０は、対応する被制御装置３０について環境情報又は状態情報を取得する。環境情報は、被制御装置３０が設置された環境に関する情報であり、例えば、明るさ、温度、人の有無、人の数などを示す情報である。また、状態情報は、被制御装置３０の状態に関する情報であり、例えば、スイッチのＯＮ又はＯＦＦ、電流、電圧、圧力、流量、重量、速度などを示す情報である。検知装置２０は、取得したこれらの情報を示す検知信号を通信装置４０に送信する。なお、環境情報や状態情報は、被制御装置３０の制御に用いることができる情報であれば、他のどのような情報であってもよい。
【００３０】
また、クラウド制御システム１０の制御対象となる被制御装置３０はどのような装置であってもよい。例えば、被制御装置３０は、製造工場やプラントを自動制御する機器であってもよい。また、被制御装置３０は、住宅や施設等の屋内に設置される機器であってもよいし、道路や公園等の屋外に設置される機器であってもよい。また、被制御装置３０は、所定の場所に固定して設置される機器であってもよいし、飛行機や自動車等の移動体に設置される機器であってもよい。このような被制御装置３０となり得る機器の具体例として、モータ、バルブ、ポンプ、照明機器、空調機器、信号機などが挙げられる。
【００３１】
図２の例のクラウド制御システム１０の場合、被制御装置３０−１の制御信号は、検知装置２０−１及び２０−２によって取得された検知信号に基づいて生成される。通常、この２つの検知信号に基づく制御処理はサーバ５０によって実行されるが、この制御処理を通信装置４０−１とサーバ５０とに分割して並列処理することができれば、検知信号の入力に対する制御信号の出力に要する応答時間を短縮することができる。このような応答時間の短縮を目的として、実施形態の制御プログラム分割装置１は、以下のような方法で制御プログラムを分割する。
【００３２】
図３は、制御プログラムを分割する処理の流れを示すフローチャートである。
まず、入力部１１は、分割する対象の制御プログラムのソースコードを取得する（ステップＳ１０１）。入力部１１は、取得したソースコードを字句解析部１２に出力する。例えば、入力部１１は、次の図４に示すソースコードを取得する。
【００３３】
図４は、分割対象のソースコードの具体例を示す図である。
図４のソースコード１００において、符号１１０が示す範囲の記述が宣言部であり、符号１２０が示す範囲の記述が命令部である。さらに宣言部１１０のうち、符号１１１が示す範囲には入出力信号の変数が、符号１１２が示す範囲には一時変数が、符号１１３が示す範囲には関数名が、それぞれ宣言されている。また、命令部１２０には、宣言部１１３に宣言された各関数の入出力が記載されている。図４では、説明を簡単にするために、各関数の詳細な処理の記載を省略している。また、各関数のソースコードはソースコード１００と異なるファイルに記載されてもよい。
【００３４】
ソースコード１００における、“Ｘ１”、“Ｘ２”及び“Ｘ３”は入力信号、すなわち検知信号を示す変数であり、“Ｙ１”及び“Ｙ２”は出力信号、すなわち制御信号を示す変数である。“Ｔ１”及び“Ｔ２”は、一時変数である。また、関数“ＰＯＵ１”は検知信号“Ｘ１”を入力として一時変数“Ｔ１”を出力する関数である。関数“ＰＯＵ２”は一時変数“Ｔ１”を入力として制御信号“Ｙ１”を出力する関数である。関数“ＰＯＵ３”は検知信号“Ｘ３”を入力として一時変数“Ｔ２”を出力する関数である。関数“ＰＯＵ４”は一時変数“Ｔ２”及び検知信号“Ｘ２”を入力として制御信号“Ｙ２”を出力する関数である。
【００３５】
図３の説明に戻る。
字句解析部１２は、入力部１１からソースコードを取得する。字句解析部１２は、取得したソースコードの字句解析を行う（ステップＳ１０２）。字句解析部１２は、字句解析によって取得されたトークン列を構文解析部１３に保存する。構文解析部１３は、字句解析部１２からトークン列を取得する。構文解析部１３は、取得したトークン列について構文解析を行う（ステップＳ１０３）。構文解析部１３は、解析結果を記憶部１４に保存する。具体的には、構文解析部１３は、解析結果を、アドレス情報テーブル１４１、入出力信号テーブル１４２、依存性テーブル１４３（依存性情報）及びツリー情報１４４として保存する。
【００３６】
図５は、アドレス情報テーブル１４１の具体例を示す図である。
アドレス情報テーブル１４１は、変数名ごとにアドレス情報レコードを有する。アドレス情報レコードは、変数名及びアドレス情報の各項目を有する。変数名は、検知信号及び制御信号に対応する変数名を表す。アドレス情報は、変数名が示す変数の値が保持される装置の識別情報である。アドレス情報レコードは、宣言部１１１の内容に基づいて生成される。宣言部１１１には、各変数のアドレス情報が記載されている。例えば、変数“Ｘ１”の場合、アドレス情報は“％ＩＷ６０．１”である。アドレス情報は、“．”（以下、「ドット」という。）で区切られ、ドットより前の値は、変数の種別と、変数の値を保持する通信装置４０の種別とを表す。ドットより後の値は、１台の通信装置４０におけるメモリアドレスを表す。図３の例の場合、“％ＩＷ”及び“％ＱＷ”が変数の種別を表し、“％ＩＷ”は検知信号を、“％ＱＷ”は制御信号を示している。また、変数の種別とドットとの間の数値が通信装置４０の種別を表し、“６０”は通信装置４０−１を、“７０”は通信装置４０−２を示している。構文解析部１３は、変数名と通信装置４０の種別とに基づいてアドレス情報レコードを生成し、アドレス情報テーブル１４１に登録する。
【００３７】
図６は、入出力信号テーブル１４２の具体例を示す図である。
入出力信号テーブル１４２は、変数名ごとに入出力信号レコードを有する。入出力信号レコードは、変数名及び信号種別の各項目を有する。変数名は、検知信号、制御信号及び一時変数に対応する変数名を表す。変数名が示す変数に対応する信号の種別を表す。図５でも説明したように、宣言部１１１には、検知信号及び制御信号に対応する各変数のアドレス情報が定義されている。このアドレス情報により、各変数に対応する信号の種別が識別される。また、宣言部１１２には、一時変数が定義されている。構文解析部１３は、宣言部１１１及び宣言部１１２の内容に基づいて入出力信号レコードを生成し、入出力信号テーブル１４２に登録する。
【００３８】
図７は、依存性テーブル１４３の具体例を示す図である。
依存性テーブル１４３は、変数名ごとに依存性レコードを有する。依存性レコードは、変数名、信号種別、直接依存性、間接依存性及び連携要否の各項目を有する。変数名は、制御信号及び一時変数に対応する変数名を表す。信号種別は、変数名が示す変数に対応する信号の種別を表す。直接依存性は、変数名が示す変数の値を出力する関数に入力される変数を表す。一方、間接依存性は、直接依存性が示す変数を取得するために用いられた変数を表す。直接依存性が示す変数が、複数の関数の入出力を経て取得される場合もあるが、ここでは、説明を簡単にするために、間接依存性が示す変数は、直接依存性が示す変数を出力する関数に入力される変数を表すものと仮定する。連携要否は、変数名が示す変数の取得に、他の装置との連携を必要とするか否かを表す。このような依存性テーブル１４３を保持することによりで、制御信号に対する検知信号や一時変数の依存性を短時間で参照することが可能となる。
【００３９】
構文解析部１３は、命令部１２０の内容に基づいて、まず、連携要否の項目以外の値を持つ依存性レコードを生成し、依存性テーブル１４３に登録する。連携要否の項目は、後段の分割部１５によって登録される。
【００４０】
図８は、ツリー情報１４４の具体例を示す図である。
ツリー情報１４４は、ソースコードのツリー構造を示す情報である。ソースコードのツリー構造とは、ソースコード内のトークンの従属関係を木構造で表したものである。構文解析部１３は、ソースコードにおける各セクションの開始及び終了を示すトークンに基づいて、トークンの木構造を生成する。例えば、図４の例のソースコード１００の場合、ソースコードの開始を示すトークンは“ＰＲＯＧＲＡＭ  ＰＯＵ０”であり、終了を示すトークンは“ＥＮＤ＿ＰＲＯＧＲＡＭ”である。また、宣言部１１１の開始を示すトークンは“ＶＡＲ”であり、終了を示すトークンは“ＥＮＤ＿ＶＡＲ”である。宣言部１１２及び１１３の開始及び終了を表すトークンも同様である。このようなセクションの開始及び終了を表すトークンに基づけば、ソースコード１００のツリー構造は図８のように表される。
【００４１】
図３の説明に戻る。
構文解析部１３によるソースコードの構文解析が行われると、分割部１５は、構文解析部１３の解析結果に基づいて、分割対象のソースコードを個々の制御信号を生成するソースコードに分割する（ステップＳ１０４）。具体的には、分割部１５は、ツリー情報１４４を参照し、ツリー構造を構成するトークンから、個々の制御信号の生成に必要なトークンを抽出することで、ソースコードを分割する。このとき、分割部１５は、依存性テーブル１４３を参照し、直接依存性及び間接依存性が示す変数に関するトークンを抽出する。このように、制御信号の生成に必要なトークンを、制御信号ごとに抽出することによって、分割対象のソースコードを個々の制御信号を生成するソースコードに分割することができる。このような分割によって、図４の例のソースコード１００は、例えば、次の図９のような２つのソースコードに分割される。
【００４２】
図９は、分割されたソースコードの具体例を示す図である。
ソースコード１００−１及び１００−２は、各制御信号の生成に必要となる各変数が、図７の例の依存性テーブル１４３が示す依存関係を持つ場合において分割されたソースコード１００である。ソースコード１００−１は、制御信号“Ｙ１”を生成するソースコードである。依存性テーブル１４３が示す依存関係により、制御信号“Ｙ１”の生成には、関数“ＰＯＵ３”及び“ＰＯＵ４”は不要である。そのため、分割部１５は、ツリー情報１４４が示すツリー構造から、トークン１４４１及び１４４２以外のトークンを抽出することによりソースコード１００−１を生成する。また、ソースコード１００−２は、制御信号“Ｙ２”を生成するソースコードである。依存性テーブル１４３が示す依存関係により、制御信号“Ｙ２”の生成には、関数“ＰＯＵ１”及び“ＰＯＵ２”は不要である。そのため、分割部１５は、ツリー情報１４４が示すツリー構造から、トークン１４４３及び１４４４以外のトークンを抽出することによりソースコード１００−２を生成する。
【００４３】
図３の説明に戻る。
分割部１５（分割部及び実行主体判定部）は、ソースコードを分割した後、分割されたソースコード（以下、「分割ソースコード」という。）に基づいて生成される制御プログラム（以下、「分割プログラム」という。）の実行主体となる装置を決定する（ステップＳ１０５）。具体的には、分割部１５は、依存性テーブル１４３の各依存性レコードについて連携要否を判定することで、通信装置４０又はサーバ５０のいずれかを分割プログラムの実行主体として決定する。分割プログラムの実行主体を決定する処理の詳細は次のとおりである。
【００４４】
分割部１５は、アドレス情報テーブル１４１及び依存性テーブル１４３を参照し、各依存性レコードの変数名、直接依存性及び間接依存性が示す変数のアドレス情報を取得する。分割部１５は、取得した全てのアドレス情報が同じである場合、その変数名が示す制御信号を生成する処理において、他の装置との連携が“不要”であると判定する。一方、分割部１５は、取得したアドレス情報に複数のアドレス情報が含まれる場合、その変数名が示す制御信号を生成する処理において、他の装置との連携が“必要”であると判定する。
【００４５】
例えば、図７の例の依存性テーブル１４３において、制御信号“Ｙ１”の生成は、一時変数“Ｔ１”及び検知信号“Ｘ１”に依存している。また、変数“Ｔ１”は検知信号“Ｘ１”に依存している。この場合、図５の例のアドレス情報テーブル１４１によれば、検知信号“Ｘ１”及び制御信号“Ｙ１”のアドレス情報はともに“６０”である。そのため、この場合、分割部１５は、制御信号“Ｙ１”を生成する制御処理の連携要否を“不要”と判断する。
【００４６】
また、例えば、図７の例の依存性テーブル１４３において、制御信号“Ｙ２”の生成は、一時変数“Ｔ２”、検知信号“Ｘ２”及び“Ｘ３”に依存している。また、変数“Ｔ２”は検知信号“Ｘ３”に依存している。この場合、図５の例のアドレス情報テーブル１４１によれば、検知信号“Ｘ２”のアドレス情報は“６０”であり、検知信号“Ｘ３”及び制御信号“Ｙ２”のアドレス情報はともに“７０”である。そのため、この場合、分割部１５は、制御信号“Ｙ２”を生成する制御処理の連携要否を“必要”と判断する。
分割部１５は、このように判断した連携要否を各依存性レコードに登録する。
【００４７】
分割部１５は、このように判断した連携要否に基づいて分割プログラムの実行主体を決定する。例えば、連携要否が図７の例の依存性テーブル１４３のように判定された場合、分割部１５は、連携が“必要”な分割プログラムの実行主体をサーバ５０に決定する。この場合の分割プログラムは、ソースコード１００−２に基づいて生成された制御プログラムである。また、分割部１５は、連携が“不要”な分割プログラムの実行主体を通信装置４０−１に決定する。この場合の分割プログラムは、ソースコード１００−１に基づいて生成された制御プログラムである。分割部１５は、このように決定された分割プログラムの実行主体と、分割ソースコードとの対応を示す情報（以下、「対応情報」という。）を記憶部１４に保存する。例えば、図９の例のようにソースコード１００が分割された場合、分割部１５は、図１０の例のような対応情報テーブル１４５として対応情報を保存する。このような対応情報を記憶しておくことにより、制御プログラム分割装置１は、制御プログラムを複数の装置で自動的に並列実行させることができる。
【００４８】
続いて、分割プログラム出力部１６は、分割部１５によって分割された各分割ソースコードのファイル名を決定し、決定したファイル名で各分割ソースコードをファイル出力する。例えば、分割プログラム出力部１６は、分割元のソースコードのプログラム名（図４の例では“ＰＯＵ０”）と、各分割ソースコードにより生成される制御信号の変数名とを組み合わせて、各分割ソースコードのファイル名を決定する。例えば、ソースコード１００−１のファイル名を決定する場合、分割プログラム出力部１６は、依存性テーブル１４３を参照し、制御信号の変数名“Ｙ１”を取得する（ステップＳ１０６）。分割プログラム出力部１６は、分割元のソースコード名“ＰＯＵ０”と制御信号の変数名“Ｙ１”とを組み合わせ、例えば、“ＰＯＵ０＿Ｙ１”というファイル名をソースコード１００−１のファイル名として決定する（ステップＳ１０７）。分割プログラム出力部１６は、決定した“ＰＯＵ０＿Ｙ１”というファイル名でソースコード１００−１をテキスト出力する（ステップＳ１０８）。同様に、分割プログラム出力部１６は、ソースコード１００−２を、“ＰＯＵ０＿Ｙ２”というファイル名でテキスト出力する。
【００４９】
分割プログラム出力部１６がこのようなファイル出力を行うことにより、分割ソースコードのファイル名から、その分割ソースコードがどの制御信号を生成するソースコードであるかを判断することが可能となる。
【００５０】
このように構成された第１の実施形態の制御プログラム分割装置１は、制御処理を、１台の通信装置４０で実行可能な制御処理と、複数台の通信装置４０とで連携して実行する制御処理とに分類して制御プログラムを分割する。このように制御プログラムを分割すれば、１台の通信装置４０で実行可能な制御処理を通信装置４０に実行させ、複数台の通信装置４０が連携して実行する制御処理をサーバ５０に実行させることができる。このような制御プログラムの分割により、クラウド制御システムは、制御処理における通信量の増大を抑制しつつ、制御プログラムを並列処理することが可能となる。
【００５１】
以下、第１の実施形態の制御プログラム分割装置１の変形例について説明する。
【００５２】
制御プログラム分割装置１が備える機能部は、通信装置４０及びサーバ５０を含む制御処理が実行可能ないずれかの制御装置に実装されてもよい。この場合、これらの機能部は、制御装置が制御プログラムを実行する前に動作するプリコンパイラとして構成されてもよい。
【００５３】
上記の実施形態では、制御プログラムのプログラミング言語に、国際規格ＩＥＣ６１１３１−３に準拠するプログラミング言語を想定しているが、制御プログラムのプログラミング言語は、上記の字句解析や構文解析と同等の解析が可能であれば、他のどのようなプログラミング言語であってもよい。例えば、上記規格が拡張された国際規格ＩＥＣ６１４９９に準拠するものであってもよいし、ＣやＣＯＢＯＬ、ＦＯＲＴＲＡＮなどの高級言語であっても良い。
【００５４】
ソースコード内にどの程度の数の入出力信号があるかは、ソースコードの読み込みが完了するまで不明である。そのため、構文解析部１３が解析結果を出力する各種テーブルは、動的にレコードを追加することが可能なテーブルであってもよい。
【００５５】
分割部１５は、ソースコードを分割する際、ツリー情報１４４に基づいて、ツリー構造が示す従属関係に対応する位置にトークンが表示されるように、トークンの出力を調整してもよい。例えば、分割部１５は、分割ソースコードに、ツリー構造に対応するインデントを設定してもよい。分割部１５がインデントを設定した分割ソースコードを出力することにより、ユーザは視認性のよい分割ソースコードを取得することができる。
【００５６】
（第２の実施形態）
図１１は、第２の実施形態の制御プログラム分割装置１ａの機能構成を示す機能ブロック図である。
第２の実施形態の制御プログラム分割装置１ａは、コンパイラ１７をさらに備える点で、第１の実施形態の制御プログラム分割装置１と異なる。コンパイラ１７以外の制御プログラム分割装置１ａの各機能部は、制御プログラム分割装置１と同様である。そのため、図１１では、コンパイラ１７以外の各機能部については、図１と同じ符号を付すことにより説明を省略する。
【００５７】
コンパイラ１７（コンパイル部）は、ソースコードから実行モジュールを生成するコンパイラである。コンパイラ１７は、分割プログラム出力部１６から分割ソースコードのファイルを取得する。コンパイラ１７は、取得した分割ソースコードをコンパイルし、分割プログラムを生成する。なお、コンパイラ１７は、ｇｃｃやｇ＋＋、ｃｃ、ＭｉｎＧＷなどのコンパイラであってもよいし、組み込み機器専用のコンパイラであってもよい。
【００５８】
以下、第２の実施形態の制御プログラム分割装置１ａの変形例について説明する。
【００５９】
［第１の変形例］
通信装置４０とサーバ５０とが同じＯＳ（Operating System：オペレーティングシステム）やＣＰＵで動作する場合、制御プログラム分割装置１ａは、その環境に対応したコンパイラ１７を備えればよいが、通信装置４０とサーバ５０とが異なるＯＳやＣＰＵで動作する場合や、複数の通信装置４０の間でＯＳやＣＰＵが異なる場合、それら複数の環境に対応したコンパイラ１７が必要になる。このような場合、制御プログラム分割装置１ａは、複数の環境に対応するコンパイラ１７を備えてもよい。
【００６０】
図１２は、変形例の制御プログラム分割装置１ｂの機能構成を示す機能ブロック図である。
変形例の制御プログラム分割装置１ｂは、環境判別部１７１及びコンパイラ切り替え部１７２をさらに備える点で、第２の実施形態の制御プログラム分割装置１ａと異なる。
環境判別部１７１は、通信装置４０及びサーバ５０からＯＳの種別やＣＰＵの種別などのシステム環境を示すシステム情報を取得する。環境判別部１７１は、システム情報に基づいて、制御プログラムを実行主体となる通信装置４０又はサーバ５０のシステム環境を判別する。環境判別部１７１は、判別結果をコンパイラ切り替え部１７２に通知する。
【００６１】
コンパイラ切り替え部１７２（コンパイラ制御部）は、環境判別部１７１から通知された判別結果に基づいて、コンパイラ１７を、制御プログラムの実行主体のシステム環境に対応したコンパイラに変更する。
【００６２】
［第２の変形例］
一般に、コンパイラには、ＯＳの種別やＣＰＵの種別に応じて実行モジュールを最適化するコンパイラオプションが用意されている。そのため、変形例の制御プログラム分割装置１ｂは、ＯＳの種別やＣＰＵの種別に応じてコンパイラオプションを切り換えるように構成されてもよい。
【００６３】
図１３は、変形例の制御プログラム分割装置１ｃの機能構成を示す機能ブロック図である。
変形例の制御プログラム分割装置１ｃは、環境判別部１７１に代えて環境判別部１７１ｃを備える点、コンパイラオプション切り替え部１７３をさらに備える点で、変形例の制御プログラム分割装置１ｂと異なる。
環境判別部１７１ｃは、システム環境の判別結果を、コンパイラ切り替え部１７２及びコンパイラオプション切り替え部１７３に通知する。
【００６４】
コンパイラオプション切り替え部１７３（コンパイラ制御部）は、環境判別部１７１ｃから通知された判別結果に基づいて、コンパイラ１７のコンパイラオプションを、制御プログラムの実行主体のシステム環境に対応したコンパイラオプションに変更する。
【００６５】
例えば、コンパイラオプション切り替え部１７３は、システム環境の判別結果に基づいて、ＣＰＵの種別を指定するオプションや、浮動小数点レジスタを使用しないオプションを自動的に追加するように構成されてもよい。また、コンパイラオプション切り替え部１７３は、ＣＰＵの種別に応じてエンディアンを切り替えるオプションを追加してもよい。また、コンパイラオプション切り替え部１７３は、性能が低いＣＰＵに対しては実行速度を優先し、メモリキャッシュの少ないＣＰＵに対してはファイルサイズを優先するように、実行モジュールを最適化するオプションを追加してもよい。なお、上述したコンパイラの切り替えやコンパイラオプションの切り替えは一例を示したものであり、実施形態の校正をここに示す範囲に限定するものではない。このような、コンパイラの切り替えやコンパイラオプションの切り替えは、一般的に使用可能な他のコンパイラやコンパイラオプションの切り替えに適用されてもよい。
【００６６】
このようなコンパイラの切り替えやコンパイラオプションの切り替えを行うことによって、制御プログラム分割装置１ｃは、制御プログラムの実行主体となる装置の様々なアーキテクチャに対応した制御プログラムを生成することが可能となる。
【００６７】
以上説明した少なくともひとつの実施形態によれば、制御プログラムのソースコードからトークンを抽出する字句解析部と、抽出されたトークンの構文を解析し、ソースコードの意味を示す構文情報を生成する構文解析部と、構文情報とソースコードとに基づいて、個々の制御信号を生成する複数の分割ソースコードを生成する分割部と、入力信号の依存関係に基づいて、制御プログラムの実行主体を判定する実行主体判定部と、を持つことにより、通信量の増大を抑制しつつ制御プログラムの並列処理を可能にすることができる。
【００６８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００６９】
１、１ａ、１ｂ、１ｃ…制御プログラム分割装置，１０…クラウド制御システム，１１…入力部，１２…字句解析部，１３…構文解析部，１４…記憶部，１４１…アドレス情報テーブル，１４２…入出力信号テーブル，１４３…依存性テーブル，１４４…ツリー情報，１４４１〜１４４４…トークン，１４５…対応情報テーブル，１５…分割部，１６…分割プログラム出力部，１７…コンパイラ，１７１、１７１ｃ…環境判別部，１７２…コンパイラ切り替え部，１７３…コンパイラオプション切り替え部，２０、２０−１〜２０−３…検知装置，３０、３０−１、３０−２…被制御装置，４０、４０−１、４０−２…通信装置，５０…サーバ，６０…広域ネットワーク，１００、１００−１、１００−２…ソースコード，１１０、１１１、１１２、１１３…宣言部，１２０…命令部 
【図１】
0006404751.tif 000002
【図２】
0006404751.tif 000003
【図３】
0006404751.tif 000004
【図４】
0006404751.tif 000005
【図５】
0006404751.tif 000006
【図６】
0006404751.tif 000007
【図７】
0006404751.tif 000008
【図８】
0006404751.tif 000009
【図９】
0006404751.tif 000010
【図１０】
0006404751.tif 000011
【図１１】
0006404751.tif 000012
【図１２】
0006404751.tif 000013
【図１３】
0006404751.tif 000014