以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
≪第1の実施の形態≫
<A.適用例>
図1を参照して、本発明の適用例について説明する。図1は、第1の実施の形態に従う制御システム10の構成例を示す図である。
制御システム10は、生産工程を自動化するためのFAシステムである。図1の例では、制御システム10は、1つ以上の開発支援装置100と、1つ以上のコントローラ200と、1つ以上の駆動機器300と、1つ以上の外部機器400とで構成されている。
開発支援装置100、コントローラ200、および外部機器400は、ネットワークNW1に接続されている。ネットワークNW1には、EtherNET(登録商標)やOPC−UA(Object Linking and Embedding for Process Control Unified Architecture)などが採用される。OPC−UAは、ベンダーやOS(Operating System)の種類などに依存することなくデータ交換を実現するために定められた通信の標準規格である。
開発支援装置100は、たとえば、ノート型またはデスクトップ型のPC(Personal Computer)、タブレット端末、スマートフォン、または、コントローラ200用の制御プログラムを開発することが可能なその他の情報処理装置である。外部機器400は、データーベース機能を有するその他のDBMS(Database Management System)である。外部機器400は、たとえば、ノート型またはデスクトップ型のPCまたはサーバである。
コントローラ200および駆動機器300は、ネットワークNW2に接続されている。ネットワークNW2には、データの到達時間が保証される、定周期通信を行うフィールドネットワークを採用することが好ましい。このような定周期通信を行うフィールドネットワークとしては、EtherCAT(登録商標)、EtherNet/IP(登録商標)、登録商標)、CompoNet(登録商標)などが知られている。
駆動機器300は、生産工程を自動化するための種々の産業用機器を含む。一例として、駆動機器300は、ロボットコントローラ300Aや、サーボドライバ300Bや、ロボットコントローラ300Aに制御されるアームロボット301Aや、サーボドライバ300Bによって制御されるサーボモータ301Bなどを含む。また、駆動機器300は、ワークを撮影するための視覚センサや、生産工程で利用されるその他の機器などを含んでもよい。
開発支援装置100には、開発ツール30がインストールされ得る。開発ツール30は、コントローラ200用の制御プログラムの開発を支援するためのアプリケーションである。一例として、開発ツール30は、オムロン社製の「Sysmac Studio」である。ユーザは、開発ツール30上でコントローラ200用の制御プログラムを設計し、設計した制御プログラムをユーザプログラム210としてコントローラ200にインストールすることができる。ユーザプログラム210は、開発支援装置100によってコンパイルされた実行形式のファイルとしてコントローラ200に送られる。
開発ツール30は、ユーザプログラム210に含まれる変数の内から収集対象の変数を選択するための選択操作を受け付ける。「変数」とは、ユーザプログラム210のソースコードにおいて扱われるデータに与えられた識別子である。典型的には、「変数」は、コントローラ200や駆動機器300の状態を表わすデータである。異なる言い方をすれば、「変数」とは、コントローラ200や駆動機器300の各構成の状態に連動して値が変化するデータのことをいう。「変数」との概念は、一つの値を表わすデータ、配列として表されるデータ、構造体として表されるデータ、ユーザプログラム210に規定され得る種々のデータを含み得る。
収集対象として選択された変数は、ユーザプログラム210の実行中に収集され、外部機器400のデーターベース430に定期的にアップロードされる。データーベース430にデータをアップロードするためには、データーベース430上に予めテーブル432を登録しておく必要がある。テーブル432とは、データ管理のためのモデルである。テーブル432は、列を示すカラムと行を示すレコードとで表される。各カラムにデータがセットされた上で、データは、レコード単位でテーブル432にアップロードされる。
本実施の形態においては、設計者は、テーブル432を生成するための操作を開発ツール30に対して行うことができる。より具体的には、開発ツール30は、ユーザプログラム210に含まれる変数の内から収集対象の変数を指定するための設定を受け付けるように構成されている。また、開発ツール30は、収集対象の各変数のデータ型に対応するデーターベース430上でのデータ型を指定するための設定を受け付けるように構成されている。また、開発ツール30は、収集対象の各変数についてデーターベース430上での識別名を指定するための設定を受け付けるように構成されている。これらの設定は、たとえば、後述のテーブル設定画面33(図4参照)に対して行われる。テーブル設定画面33の詳細については後述する。
図1の例では、ユーザプログラム210に含まれる変数「A」,「B」が収集対象として指定されている。変数「A」は、「Int」型の変数である。変数「B」は、「bool」型の変数である。また、変数「A」に対応するデーターベース430での識別名としてカラム名「A’」が指定されている。変数「B」に対応するデーターベース430での識別名としてカラム名「B’」が指定されている。また、変数「A」のデータ型「Int」に対応するデーターベース430上でのデータ型として「Number(10)」が指定されている。また、変数「B」のデータ型「bool」に対応するデーターベース430上でのデータ型として「Number(1)」が指定されている。
これらの対応関係は、設定情報212としてコントローラ200に送られる。コントローラ200は、制御装置202と、記憶装置208とを含む。制御装置202は、機能構成として、生成モジュール250と、プログラム実行モジュール252とを含む。記憶装置208は、開発支援装置100から受信したユーザプログラム210と設定情報212とを格納している。
プログラム実行モジュール252は、ユーザプログラム210の実行開始命令を受け付けたことに基づいて、ユーザプログラム210の実行を開始する。その後、プログラム実行モジュール252は、ユーザプログラム210に規定される制御命令に従って駆動機器300を制御する。プログラム実行モジュール252は、ユーザプログラム210の実行結果に従って変数の値を逐次更新する。
生成モジュール250は、設定情報212に規定されるデーターベース430上での識別名と、当該識別名に対応するデーターベース430上でのデータ型とに基づいて、収集対象の変数の格納先となるテーブル432をデーターベース430上に生成するためのSQL文230を出力する。図1の例では、SQL文230は、「Number(10)」型のカラム「A’」と「Number(1)」型のカラム「B’」とを含むテーブル432を構成するように規定されている。
生成されたSQL文230は、外部機器400に転送される。DBMSとしての外部機器400は、コントローラ200から受信したSQL文230を解釈し、SQL文230に従ってデーターベース430上にテーブル432を生成する。図1の例では、カラム「A’」,「B’」を含むテーブル432がデーターベース430上に生成される。
以上のようにして、開発支援装置100は、収集対象の変数を指定するための設定と、収集対象の各変数のデータ型に対応するデーターベース430上でのデータ型を指定するための設定と、収集対象の各変数についてデーターベース430上での識別名を指定するための設定とを受け付けるように構成されている。コントローラ200は、これらの設定に基づいて、データーベース430上にテーブル432を生成するためのSQL文230を外部機器400に出力する。これにより、外部機器400のデーターベース430上にテーブル432が生成される。このように、ユーザは、テーブル432を生成するにあたってSQL文230を記述する必要がない。そのため、SQLの知識がないユーザであってもデーターベース430を容易に構築することできる。
なお、上述では、ユーザプログラム210に含まれる変数を元にテーブル432を生成する例について説明を行ったが、生成モジュール250は、ユーザプログラム210に含まれる変数以外にも、コントローラ200内の各種制御プログラムに含まれる変数を元にテーブル432を生成してもよい。
また、図1には、ユーザプログラム210および設定情報212が別個のデータとしてコントローラ200に転送されている例が示されているが、ユーザプログラム210および設定情報212は、一体的なデータとして転送されてもよい。また、設定情報212は、ユーザプログラム210と同一のタイミングで転送されてもよいし異なるタイミングで転送されてもよい。
また、図1の例では、データーベース430が外部機器400に存在する例について説明を行ったが、データーベース430は、必ずしも、外部機器400に存在する必要はない。たとえば、データーベース430は、コントローラ200の内部に存在していてもよい。あるいは、データーベース430は、コントローラ200の内部バスに繋がれた別ユニットの内部に存在していてもよい。
<B.シーケンスフロー>
図2〜図6を参照して、テーブル432の生成処理に係る処理フローについて説明する。図2は、開発支援装置100とコントローラ200と駆動機器300と外部機器400との間のデータの流れを示すシーケンス図である。
ステップS10において、開発支援装置100は、開発ツール30の起動命令を受け付けたとする。このことに基づいて、開発支援装置100は、プログラム設計画面を表示する。図3は、開発ツール30が提供するユーザインターフェイスの一例であるプログラム設計画面31を示す図である。プログラム設計画面31は、たとえば、開発支援装置100の表示部121に表示される。
ユーザプログラム210は、任意のプログラミング言語で記述され得る。一例として、ユーザプログラム210は、ラダーダイアグラム(LD:Ladder Diagram)で規定されてもよいし、命令リスト(IL:Instruction List)、構造化テキスト(ST:Structured Text)、および、シーケンシャルファンクションチャート(SFC:Sequential Function Chart)のいずれか、あるいは、これらの組み合わせで規定される。あるいは、ユーザプログラム210は、JavaScript(登録商標)やC言語のような汎用的なプログラミング言語で規定されていてもよい。
図3の例では、ユーザプログラム210は、ラダーダイアグラムで記述されている。設計者は、プログラム設計画面31上で、任意のファンクションブロックを組み合わせたり、変数やファンクションブロックの入出力関係を規定することで、制御対象の駆動機器300に合わせたユーザプログラム210を設計することができる。ファンクションブロックとは、ユーザプログラム210内で繰り返し使用される機能が部品化されたものである。
図3の例では、ユーザプログラム210は、変数A〜Cと、ファンクションブロックFB1,FB2とを含む。ファンクションブロックFA1は、その入力部に関連付けられている変数Aの値に基づいて、ファンクションブロックFB1に規定されている予め定められた機能を実行する。当該実行結果は、ファンクションブロックFA1の出力部に関連付けられている変数Bに反映される。ファンクションブロックFB2は、その入力部に関連付けられている変数Bの値に基づいて、ファンクションブロックFB2に規定されている予め定められた機能を実行する。当該実行結果は、ファンクションブロックFA2の出力部に関連付けられている変数Cに反映される。このように、設計者は、プログラム設計画面31上で、変数やファンクションブロックを組み合わせることで、任意のユーザプログラム210を設計することができる。
再び図2を参照して、ステップS14において、開発ツール30は、テーブル生成に関するテーブル設定画面の呼び出し操作を受け付けたとする。このことに基づいて、開発ツール30は、テーブル設定画面を表示する。
図4は、開発ツール30が提供するユーザインターフェイスの一例であるテーブル設定画面33を示す図である。テーブル設定画面33は、テーブル生成のための各種設定を受け付ける。
より具体的には、テーブル設定画面33は、データーベースへの接続情報の設定欄35と、テーブル名の設定欄36と、収集対象の変数を指定するための設定欄41と、収取対象の変数のデータ型を表示するための表示欄42と、データーベース上でのデータの識別名を指定するための設定欄45と、データーベース上でのデータ型を指定するための設定欄46と、主キーを指定するための設定欄50と、null指定の許可/禁止を指定するための設定欄51を含む。
設定欄35は、データーベースへの接続情報の指定を受け付ける。各コネクション情報は、ユーザなどによって予め設定されている。コネクション情報には、コネクション名、接続対象のデーターベースタイプ、接続先アドレスデータベース名、ユーザ名、パスワードなどが規定されている。ユーザがボタン35Aを押下することで、各コネクション情報に規定されているデーターベースタイプが一覧表示される。データーベースタイプの種類としては、たとえば、「Oracle Database」、「SQL Server」、「MySQL(登録商標)」、「Firebird」、「DB2(登録商標)」、「PostgreSQL」などが挙げられる。ユーザは、データーベースタイプの一覧から一のデーターベースタイプを選択することでデーターベースへの接続情報を指定することができる。
設定欄36は、生成対象のテーブル432についてのテーブル名の入力を受け付ける。設定欄36は、たとえば、テキストボックスであり、テーブル名は、文字入力により設定される。図4の例では、テーブル名として「TABLE1」が設定されている。
設定欄41は、収集対象の変数の指定を受け付ける。典型的には、ユーザがボタン41Aを押下することで、ユーザプログラム210で定義さている構造体名(変数名)が一覧表示される。一覧表示される構造体名は、ユーザによって予め登録されていてもよいし、ユーザプログラム210から自動で抽出されてもよい。ユーザは、構造体名の一覧から一の構造体名を選択することで構造体に含まれる変数を収集対象として指定することができる。
表示欄42は、設定欄41で設定された収集対象の各変数のデータ型を表示する。各変数に対応するデータ型は、たとえば、上述のプログラム設計画面31(図3参照)において変数を登録するときなどに設定され、この設定時におて、変数とデータ型との対応関係が保存される。開発ツール30は、収集対象の変数が設定欄41で選択されたことに基づいて、変数とデータ型との対応関係から当該選択された変数に対応するデータ型を特定し、当該データ型を当該変数に並べて表示する。
設定欄45は、設定欄41で設定された収集対象の各変数について、データーベース430上での識別名を指定するための設定を受け付ける。設定欄45に設定された識別名は、テーブルのカラム名となる。設定欄45は、たとえば、テキストボックスであり、ユーザは、各テキストボックスに文字入力を行うことで各変数に対応するカラム名を設定することができる。
好ましくは、テーブルのカラム名は、自動で決定される。一例として、カラム名は、変数名と同じになるように決定される。あるいは、変数名に予め定められたキーワードを付加したものがカラム名として決定される。カラム名が自動で設定される場合には、ユーザは、設定欄45にカラム名を設定する必要はない。
設定欄46は、設定欄41で設定された各変数についてデーターベース430上でのデータ型を指定するための設定を受け付ける。一例として、ユーザがボタン46Aを押下することで、設定可能なデータ型が一覧表示される。ユーザは、データ型の一覧から一のデータ型を選択することでデーターベース430上でのデータ型を指定することができる。
好ましくは、データーベース430上でのデータ型は、自動で決定される。より具体的には、ユーザプログラム210で利用され得る各データ型と、データーベース430上でのデータ型との対応関係が予め規定されている。開発ツール30は、当該対応関係に基づいて、収集対象の各変数のデータ型に対応するデーターベース430上でのデータ型を特定し、当該データ型を設定欄46に表示する。この場合には、ユーザは、設定欄46にデータ型を設定する必要はない。
設定欄50は、テーブル432上で主キーとしてみなす変数を指定するための設定を受け付ける。主キーとは、テーブル432内のレコードを一意に識別するためのものである。主キーとして設定された変数については、データの重複が許されない。主キーの設定態様の一例として、ユーザがボタン50Aを押下することで、「YES」および「NO」が表示される。「YES」が選択されたカラムは、主キーとして設定される。「NO」が選択されたカラムは、主キーとして設定されない。
設定欄51は、各カラムに対してNULLの入力を許容するか否かの設定を受け付ける。設定態様の一例として、ユーザがボタン51Aを押下することで、「YES」および「NO」が表示される。「YES」が選択されたカラムについては、NULLの入力が禁止される。「NO」が選択されたカラムについては、NULLの入力が許容される。
テーブル生成ボタン58が押下された場合には、開発支援装置100は、テーブル設定画面33に対して行われたテーブル設定を設定情報212としてコントローラ200に転送する。テーブル設定画面33のキャンセルボタン59が押下された場合には、開発支援装置100は、テーブル設定画面33に設定されたテーブル設定を転送せずにテーブル設定画面33を閉じる。
再び図2を参照して、ステップS20において、テーブル生成ボタン58が押下されたとする。このことに基づいて、開発支援装置100は、テーブル設定画面33に対して行われたテーブル設定を設定情報212としてコントローラ200に転送する。
ステップS22において、コントローラ200の生成モジュール250は、開発支援装置100から設定情報212を受信したことに基づいて、テーブル生成のためのSQL文230(図1参照)を生成する。なお、ステップS22では、SQL文230がコントローラ200によって生成される例について示されているが、SQL文230は、開発ツール30によって生成されてもよい。
図5を参照して、生成モジュール250によるSQL文230の生成処理について説明する。図5は、SQL文230の生成処理を概略的に示す図である。
図5に示されるように、生成モジュール250は、設定情報212を入力として、SQL文230を生成する。より具体的には、生成モジュール250は、設定情報212に含まれるテーブル名「TABLE1」を参照して、「Create Table TABLE1」との記述をSQL文230に反映する。この記述により、生成されるテーブル432のテーブル名が「TABLE1」となる。
次に、生成モジュール250は、設定情報212に含まれる識別名「A’」と、識別名「A’」に対応付けられているデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230に反映する。この記述により、識別名「A’」のカラムがテーブル432に追加される。また、識別名「A’」については、NULL指定が禁止されているので、「NOT NULL」との記述をSQL文230に反映する。同様に、生成モジュール250は、識別名「B’」〜「F’」のカラムを追加するための記述をSQL文230に反映する。
次に、設定情報212において識別名「A’」、「B’」のカラムを主キーとして設定することが規定されているので、生成モジュール250は、「PRIMARY KEY (A’、B’)」との記述をSQL文230に追加する。この記述により、識別名「A’」、「B’」のカラムが主キーとして設定される。
生成されたSQL文230は、外部機器400に送信される。再び図2を参照して、ステップS24において、外部機器400は、コントローラ200から受信したSQL文230に従ってテーブル432を生成する。
図6は、図5に示されるSQL文230に従って生成されたテーブル432のデータ構造を示す図である。図6に示されるように、テーブル432は、識別名「A’」〜「F’」のカラムで構成されている。「*」印は、主キーを表わす。図6の例では、カラム「A’」,「B’」が主キーとして示されている。
再び図2を参照して、ステップS30において、開発ツール30は、コンパイル操作を受け付けたとする。このことに基づいて、開発ツール30は、プログラム設計画面31上で設計されたユーザプログラム210をコンパイルする。その後、開発ツール30は、コンパイル結果のダウンロード操作を受け付けたとする。このことに基づいて、開発ツール30は、コンパイルされたユーザプログラム210をコントローラ200に転送する。コントローラ200は、受信したユーザプログラム210を記憶装置208(図1参照)に保存する。
ステップS32において、コントローラ200は、ユーザプログラム210の実行命令を受け付けたとする。このことに基づいて、コントローラ200は、ユーザプログラム210の実行を開始する。ユーザプログラム210がサイクリック実行型のプログラムである場合、コントローラ200は、予め定められた制御周期ごとにユーザプログラム210に含まれる命令群を繰り返し実行する。より具体的には、コントローラ200は、ユーザプログラム210の先頭行から最終行までを1制御周期で実行する。その次の制御周期では、コントローラ200は、再び、ユーザプログラム210の先頭行から最終行までを実行する。コントローラ200は、制御周期ごとに指令値を生成し、当該指令値を駆動機器300に出力する。
ステップS50において、コントローラ200は、ユーザプログラム210に規定される指令値の生成処理の実行命令を受け付けたか否かを判断する。コントローラ200は、当該実行命令を受け付けたと判断した場合(ステップS50においてYES)、規定されている命令に従って指令値を生成し、当該指令値を駆動機器300に送る(ステップS52)。駆動機器300は、コントローラ200から受信した指令値に従って制御対象を駆動する。コントローラ200は、指令値の生成処理の実行命令を受け付けたと判断しなかった場合(ステップS50においてNO)、コントローラ200は、ステップS52の処理を実行せずに、制御をステップS60に切り替える。
ステップS60において、コントローラ200は、収集対象の変数のアップロード処理の実行命令を受け付けたか否かを判断する。コントローラ200は、当該実行命令を受け付けたと判断した場合(ステップS60においてYES)、INSERT命令を実行するためのSQL文を生成する。当該SQL文には、追加先のテーブルを指定するための情報(たとえば、テーブル名)や、各カラムにアップロードするデータの値などが規定される。
ステップS62において、コントローラ200は、生成したSQL文を外部機器400に送る。外部機器400は、コントローラ200から受信したSQL文に従って各カラムに変数値を反映したレコードを生成し、ステップS24で生成されたテーブル432に生成したレコードを追加する。これにより、収集対象の変数がテーブル432に反映される。その後、外部機器400は、正常終了または異常終了を示すアップロード結果をコントローラ200に送信する。
コントローラ200は、収集対象の変数のアップロード処理の実行命令を受けていない場合(ステップS60においてNO)、ステップS62の処理を実行せずに、処理をステップS70に切り替える。
ステップS70において、コントローラ200は、ユーザプログラム210の実行を終了するか否かを判断する。当該終了命令は、たとえば、ユーザから終了操作を受け付けたことに基づいて発せられる。コントローラ200は、ユーザから終了操作を受け付けたと判断した場合(ステップS70においてYES)、ユーザプログラム210の実行を終了する。そうでない場合には(ステップS70においてNO)、コントローラ200は、制御をステップS50に戻す。
なお、上述では、ステップS62において、INSERT命令のSQL文がコントローラ200から外部機器400のデーターベース430に送信される例について説明を行ったが、INSERTする値のみが外部機器400のデーターベース430に送られてもよい。この場合、外部機器400は、INSERTする値を受信したことに基づいて、INSERT命令のSQL文を生成し、当該SQL文に基づいて受信した値のINSERT処理を実行する。
<C.生成モジュール250による生成パターン>
収集対象の変数には、構造体が含まれる場合がある。生成モジュール250は、収集対象の変数に構造体が含まれる場合には、そうではない場合と異なる態様でテーブル生成のためのSQL文230を生成する。収集対象の変数に構造体が含まれる場合におけるテーブル432の生成処理として、たとえば、2つの生成パターン(生成パターン1,2)が考えられる。
生成パターン1においては、生成モジュール250は、構造体ではない変数を管理するためのテーブルと、構造体に含まれるメンバ変数を管理するためのテーブルとを別々に生成する。生成パターン2においては、生成モジュール250は、構造体ではない変数と構造体に含まれるメンバ変数とを共通に管理するための1つのテーブルを生成する。
以下では、図7〜図10を参照して、第1の実施の形態における生成パターン1,2について順に説明する。
(C1.テーブルの生成パターン1)
まず、第1の実施の形態に従うテーブルの生成パターン1について説明する。図7は、第1の実施の形態に従うテーブルの生成パターン1を概略的に示す図である。
上述の開発ツール30(図4参照)は、収集対象として指定された変数に構造体が含まれている場合には、構造体ではない変数だけでなく構造体に含まれる各メンバについても、データーベース430上でのデータ型の指定と、データーベース430上での識別名の指定とを受け付ける。
たとえば、上述のテーブル設定画面33(図4参照)において、構造体「C」が収集対象として指定されたとする。構造体「C」がメンバ変数「α」,「β」,「γ」を含む場合、ユーザは、メンバ変数「α」,「β」,「γ」についても、データーベース430上でのデータ型の指定と、データーベース430上での識別名(カラム名)の指定とを受け付ける。一例として、メンバ変数「α」に対してはデータ型「Number(5)」のカラム「α’」が設定され、メンバ変数「β」に対してはデータ型「Number(5)」のカラム「β’」が設定され、メンバ変数「γ」に対してはデータ型「Number(5)」のカラム「γ’」が設定されたとする。これらの設定の結果、図7に示される設定情報212が生成される。
本生成例においては、図7に示されるように、コントローラ200の生成モジュール250は、設定情報212を入力として、構造体の各メンバについて決定された識別名を別のテーブルに登録するようにSQL文を生成する。図7の例では、生成モジュール250は、設定情報212を入力として、「TABLE1」を生成するためのSQL文230Aと、「TABLE2」を生成するためのSQL文230Bとを生成している。
より具体的には、生成モジュール250は、設定情報212に含まれる識別名「A’」と、識別名「A’」に対応付けられているデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230Aに反映する。この記述により、識別名「A’」のカラムがテーブルに追加される。また、識別名「A’」については、NULL指定が禁止されているので、「NOT NULL」との記述をSQL文230Aに反映する。同様に、生成モジュール250は、識別名「B’」のカラムを追加するための記述をSQL文230Aに反映する。
構造体「C」については、生成モジュール250は、構造体名に対応するカラム名「C’」を新たに生成する。カラム名「C’」は、構造体名と同じであってもよいし、異なっていてもよい。その後、生成モジュール250は、「C’ Number(5)」との記述をSQL文230Aに反映する。これにより、識別名「C’」のカラムがテーブルに追加される。
また、生成モジュール250は、構造体のカラム名を外部キーとしてテーブルに登録するための命令コードをSQL文230Aに含める。図7の例では、「FOREIGN KEY(C’) REFERENCES TABLE2」との記述がSQL文230Aに追加されている。この記述により、カラム「C’」が「TABLE2」を参照する外部キーとして規定される。
続いて、生成モジュール250は、構造体「C」に含まれるメンバ変数「α」,「β」,「γ」については、カラム「C’」,「α’」,「β’」,「γ’」を追加するための記述をSQL文230Aとは別のSQL文230Bに反映する。図7の例では、「C’ Number(5)」との記述と、「α’ Number(5)」との記述と、「β’ Number(5)」との記述と、「γ’ Number(5)」との記述とがSQL文230Bに反映されている。これらの記述により、識別名「C’」,「α’」,「β’」,「γ’」のカラムが別テーブルに追加される。このとき、構造体名「C」に付けられたカラム名「C’」については、「PRIMARY KEY (C’)」との記述をSQL文230Bに追加する。この記述により、識別名「C’」のカラムが主キーとして設定される。
図8は、図7に示されるSQL文230Aに従って生成されたテーブル432Aと、図7に示されるSQL文230Bに従って生成されたテーブル432Bとのデータ構造を示す図である。
テーブル432Aは、識別名「A’」,「B’」,「C’」のカラムで構成されている。「*」印は、主キーを表わす。図8の例では、カラム「A’」,「B’」が主キーとして示されている。また、カラム「C’」は、外部の「TABLE2」を参照している。
テーブル432Bは、識別名「C’」,「α’」,「β’」,「γ’」のカラムで構成されている。「*」印は、主キーを表わす。図8の例では、カラム「C’」が主キーとして示されている。
このように、本生成例においては、生成モジュール250は、構造体ではない変数を管理するためのテーブル432Aと、構造体に含まれるメンバ変数を管理するためのテーブル432Bとを別々に生成する。
なお、図7および図8では、収集対象の変数に1つの構造体が含まれている例について説明を行ったが、収集対象の変数に複数の構造体が含まれている場合には、構造体の数に応じてテーブルが生成されるようにSQL文が生成される。また、構造体のメンバに構造体が含まれている場合には、各構造体についてテーブルが生成されるようにSQL文が生成される。
また、上述の図7および図8の例では、収集対象の変数に構造体が含まれている場合に、当該構造体の名前がテーブル432Aの外部キーおよびテーブル432Bの主キーとして登録される例について説明を行ったが、当該構造体の名前がテーブル432Aの外部キーおよびテーブル432Bの主キーとして必ずしも登録される必要はない。一例として、当該構造体の1つ以上のメンバがテーブル432Aの外部キーおよびテーブル432Bの主キーとして登録されてもよい。一例として、構造体「C」のメンバ「C.α」が、テーブル432Aの外部キーとして登録されるとともに、テーブル432Bの主キーとして登録される。この場合には、構造体「C」自体がテーブル432A,432Bのカラムとして登録される必要はない。
(C2.テーブルの生成パターン2)
次に、図9および図10を参照して、収集対象の変数に構造体が含まれている場合におけるテーブル432の生成パターン2について説明する。
図9は、第1の実施の形態に従うテーブルの生成パターン2を概略的に示す図である。図9に示されるように、コントローラ200の生成モジュール250は、設定情報212を入力としてSQL文230を生成する。
設定情報212には、構造体「C」が収集対象の変数として規定されているとする。構造体「C」は、メンバ変数として、変数「α」,「β」,「γ」を含む。本生成例においては、生成モジュール250は、構造体ではない変数と、構造体に含まれるメンバ変数とを共通に管理するための1つのテーブル432を生成する。
より具体的には、生成モジュール250は、設定情報212に含まれる識別名「A’」と、識別名「A’」に対応付けられているデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230に反映する。この記述により、識別名「A’」のカラムがテーブル432に追加される。また、識別名「A’」については、NULL指定が禁止されているので、「NOT NULL」との記述をSQL文230に反映する。同様に、生成モジュール250は、識別名「B’」のカラムを追加するための記述をSQL文230に反映する。また、構造体「C」のメンバ変数「α」,「β」,「γ」については、生成モジュール250は、変数「A」,「B」と同様に、識別名「α’」,「β’」,「γ’」のカラムを追加するための記述をSQL文230に反映する。
図10は、図9に示されるSQL文230から生成されたテーブル432のデータ構造を示す図である。
テーブル432は、識別名「A’」,「B’」,「C’」,「α’」,「β’」,「γ’」のカラムで構成されている。「*」印は、主キーを表わす。図10の例では、カラム「A’」,「B’」が主キーとして示されている。
このように、本生成例においては、生成モジュール250は、構造体ではない変数と、構造体に含まれるメンバ変数とを共通に管理するための1つのテーブル432を生成する。
<D.ハードウェア構成>
図11〜図13を参照して、開発支援装置100、コントローラ200、および外部機器400のハードウェア構成について順に説明する。
(D1.開発支援装置100のハードウェア構成)
まず、図11を参照して、開発支援装置100のハードウェア構成について説明する。図11は、開発支援装置100のハードウェア構成を示す模式図である。
開発支援装置100は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。開発支援装置100は、CPU(Central Processing Unit)やMPU(Micro-Processing Unit)などの制御装置102と、主メモリ104と、不揮発性の記憶装置110と、通信インターフェイス111と、I/O(Input/Output)インターフェイス114と、表示インターフェイス120とを含む。これらのコンポーネントは、内部バス125を介して互いに通信可能に接続されている。
制御装置102は、記憶装置110に格納されている開発支援プログラム110Aを主メモリ104に展開して実行することで、開発ツール30における各種処理を実現する。開発支援プログラム110Aは、ユーザプログラム210の開発環境を提供するためのプログラムである。記憶装置110は、開発支援プログラム110Aの他にも、開発ツール30で生成された各種データなどを格納する。当該データは、たとえば、開発ツール30上で設計された上述のユーザプログラム210や、上述の設定情報212などを含む。
通信インターフェイス111は、他の通信機器との間でネットワークを介してデータを遣り取りする。当該他の通信機器は、たとえば、コントローラ200、外部機器400、サーバなどを含む。開発支援装置100は、通信インターフェイス111を介して、当該他の通信機器から、開発支援プログラム110Aなどの各種プログラムをダウンロード可能なように構成されてもよい。
I/Oインターフェイス114は、操作部115に接続され、操作部115からのユーザ操作を示す信号を取り込む。操作部115は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。
表示インターフェイス120は、表示部121と接続され、制御装置102などからの指令に従って、表示部121に対して、画像を表示するための画像信号を送出する。表示部121は、LCD(Liquid Crystal Display)や有機EL(Electro Luminescence)ディスプレイなどからなり、ユーザに対して各種情報を提示する。表示部121には、開発ツール30によって提供される各種画面(たとえば、上述のプログラム設計画面31や上述のテーブル設定画面33)が表示され得る。図11の例では、開発支援装置100および表示部121が別体として示されているが、開発支援装置100および表示部121は、一体的に構成されてもよい。
(D2.コントローラ200のハードウェア構成)
次に、図12を参照して、コントローラ200のハードウェア構成について説明する。図12は、コントローラ200のハードウェア構成の一例を示す模式図である。
コントローラ200は、通信インターフェイス201と、CPUやMPUなどの制御装置202と、チップセット204と、主メモリ206と、不揮発性の記憶装置208と、内部バスコントローラ222と、フィールドバスコントローラ224と、メモリカードインターフェイス239とを含む。
制御装置202は、記憶装置208に格納された制御プログラム211を読み出して、主メモリ206に展開して実行することで、ロボットコントローラ300Aやサーボドライバ300Bなどに対する任意の制御を実現する。制御プログラム211は、コントローラ200を制御するための各種プログラムを含む。一例として、制御プログラム211は、システムプログラム209およびユーザプログラム210などを含む。システムプログラム209は、データの入出力処理や実行タイミング制御などの、コントローラ200の基本的な機能を提供するための命令コードを含む。ユーザプログラム210は、開発支援装置100からダウンロードされたものである。ユーザプログラム210は、制御対象に応じて任意に設計され、シーケンス制御を実行するためのシーケンスプログラム210Aおよびモーション制御を実行するためのモーションプログラム210Bとを含む。
チップセット204は、各コンポーネントを制御することで、コントローラ200全体としての処理を実現する。
記憶装置208は、制御プログラム211の他にも種々のデータを格納する。一例として、記憶装置208は、上述の設定情報212やデータ型の対応関係213などを格納する。データ型の対応関係213の詳細については後述の「第2の実施の形態」で説明する。
内部バスコントローラ222は、コントローラ200と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、I/Oユニット226が接続されている。
フィールドバスコントローラ224は、コントローラ200とフィールドバスを通じて連結される各種の駆動機器300とデータを遣り取りするインターフェイスである。このようなデバイスの一例として、ロボットコントローラ300Aやサーボドライバ300Bが接続されている。他にも、視覚センサなどの駆動機器が接続されてもよい。
内部バスコントローラ222およびフィールドバスコントローラ224は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータを取得することができる。また、内部バスコントローラ222および/またはフィールドバスコントローラ224は、ロボットコントローラ300Aやサーボドライバ300Bとの間でデータを遣り取りするためのインターフェイスとしても機能する。
通信インターフェイス201(通信部)は、各種の有線/無線ネットワークを通じたデータの遣り取りを制御する。コントローラ200は、通信インターフェイス201を介して、開発支援装置100や外部機器400と通信を行う。また、コントローラ200は、通信インターフェイス201を介して、外部機器400上のデーターベース430にアクセスすることができる。
メモリカードインターフェイス239は、外部記憶媒体の一例であるメモリカード240(たとえば、SDカード)を着脱可能に構成されており、メモリカード240に対してデータを書き込み、メモリカード240からデータを読出すことが可能になっている。
(D3.外部機器400のハードウェア構成)
次に、図13を参照して、外部機器400のハードウェア構成について説明する。図13は、外部機器400のハードウェア構成を示すブロック図である。
外部機器400は、汎用的なアーキテクチャを有するハードウェア構成を有している。すなわち、外部機器400は、一種のパーソナルコンピュータとして実装される。但し、外部機器400を汎用的なハードウェアではなく、専用ハードウェアを用いて実装してもよい。
より具体的には、外部機器400は、CPUやMPUなどの制御装置402と、主メモリ404と、不揮発性の記憶装置410と、通信インターフェイス412と、I/Oインターフェイス414と、表示インターフェイス420とを含む。これらのコンポーネントは、内部バス425を介して、互いにデータ通信可能に接続されている。
制御装置402は、記憶装置410に格納された制御プログラム(図示しない)を読み出して、主メモリ404に展開して実行することで、外部機器400を制御する。すなわち、制御装置402は、主メモリ404および記憶装置410と連係することで、制御演算を実行する制御部を実現する。
通信インターフェイス412、I/Oインターフェイス414、および、フィールドバスインターフェイス416は、外部機器400と他の通信機器とのデータの遣り取りを仲介する。
より具体的には、通信インターフェイス412は、ネットワークNW1(図1参照)などを介した、コントローラ200との通信を仲介する。通信インターフェイス412には、たとえば、EtherNETに従う通信が可能なコンポーネントが採用され得る。
I/Oインターフェイス414は、操作部415に接続され、操作部415からのユーザ操作を示す信号を取り込む。操作部415は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。
表示インターフェイス420は、表示部421と接続され、制御装置402などからの指令に従って、表示部421に対して、画像を表示するための画像信号を送出する。表示部421は、LCDや有機ELディスプレイなどからなり、ユーザに対して各種情報を提示する。図13の例では、外部機器400および表示部421が別体として示されているが、外部機器400および表示部421は、一体的に構成されてもよい。
<E.第1の実施の形態のまとめ>
以上のようにして、本実施の形態に従う開発支援装置100は、収集対象の変数を指定するための設定と、収集対象の各変数のデータ型に対応するデーターベース430上でのデータ型を指定するための設定と、収集対象の各変数についてデーターベース430上での識別名を指定するための設定とを受け付けるように構成されている。これらの設定は、設定情報212として開発支援装置100からコントローラ200に転送される。
コントローラ200は、開発支援装置100から受信した設定情報212に規定されるデーターベース430上での識別名と、当該識別名に対応するデーターベース430上でのデータ型とに基づいて、テーブル432をデーターベース430上に生成するためのSQL文230を外部機器400に出力する。これにより、外部機器400のデーターベース430上にテーブル432が自動で生成される。
このように、ユーザは、収集対象の変数と、各変数のデータ型に対応するデーターベース430上でのデータ型とを指定すれば、データーベース430上にテーブル432を生成することができる。そのため、ユーザは、テーブル432を生成するにあたってSQL文230を記述する必要がない。したがって、SQLの知識がないユーザであってもデーターベース430を容易に構築することできる。
<F.付記>
以上のように、本実施形態は以下のような開示を含む。
[構成1]
データーベース(430)にアクセスすることが可能なコントローラ(200)と、
前記コントローラ(200)と通信可能に構成されている開発支援装置(100)とを備え、
前記開発支援装置(100)には、前記コントローラ(200)の制御プログラムの開発を支援するための開発ツール(30)がインストールされ得、
前記開発ツール(30)は、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース(430)上での識別名を指定するための設定とを設定情報(212)として受け付けるように構成されており、
前記コントローラ(200)または前記開発ツール(30)は、前記開発支援装置(100)から受信した前記設定情報(212)に規定される前記データーベース(430)上での識別名と、当該識別名に対応する前記データーベース(430)上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブル(432)を前記データーベース(430)上に生成するためのSQL文を出力するための生成モジュール(250)を含む、制御システム。
[構成2]
前記開発ツール(30)は、前記収集対象の各変数が設定されたことに基づいて、当該変数のデータ型を表示するように構成されている、構成1に記載の制御システム。
[構成3]
前記開発ツール(30)は、前記収集対象として指定された変数の内から主キーを指定するための設定をさらに受け付けるように構成されている、構成1または2に記載の制御システム。
[構成4]
前記開発ツール(30)は、前記収集対象として指定された変数に構造体が含まれている場合、当該構造体に含まれる各メンバについて、前記データーベース(430)上での識別名の指定とを受け付けるように構成されている、構成1〜3のいずれか1項に記載の制御システム。
[構成5]
前記生成モジュール(250)は、前記構造体の各メンバについて決定された前記識別名を前記テーブル(432)とは別のテーブルに登録するように前記SQL文を生成する、構成4に記載の制御システム。
[構成6]
前記生成モジュール(250)は、前記構造体の識別名を外部キーとして前記テーブル(432)に登録するための命令コードを前記SQL文に含める、構成5に記載の制御システム。
[構成7]
制御プログラムの開発を支援するための開発支援装置(100)と通信可能に構成されており、データーベース(430)にアクセスすることが可能なコントローラ(200)であって、
前記開発支援装置(100)には、前記制御プログラムの開発を支援するための開発ツール(30)がインストールされ得、
前記開発ツール(30)は、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース(430)上での識別名を指定するための設定とを設定情報(212)として受け付けるように構成されており、
前記コントローラ(200)は、
前記設定情報(212)および前記制御プログラムを前記開発支援装置(100)から受信するための通信部と、
前記開発支援装置(100)から受信した前記制御プログラムに従って制御対象の駆動機器を制御するためのプログラム実行モジュールと、
前記開発支援装置(100)から受信した前記設定情報(212)に規定される前記データーベース(430)上での識別名と、当該識別名に対応する前記データーベース(430)上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブル(432)を前記データーベース(430)上に生成するためのSQL文を出力するための生成モジュール(250)とを備える、コントローラ。
[構成8]
制御プログラムの開発を支援するための開発支援装置(100)と通信可能に構成されており、データーベース(430)にアクセスすることが可能なコントローラ(200)の制御方法であって、
前記開発支援装置(100)には、前記制御プログラムの開発を支援するための開発ツール(30)がインストールされ得、
前記開発ツール(30)は、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース(430)上での識別名を指定するための設定とを設定情報(212)として受け付けるように構成されており、
前記制御方法は、
前記設定情報(212)および前記制御プログラムを前記開発支援装置(100)から受信するステップと、
前記開発支援装置(100)から受信した前記制御プログラムに従って制御対象の駆動機器を制御するステップと、
前記開発支援装置(100)から受信した前記設定情報(212)に規定される前記データーベース(430)上での識別名と、当該識別名に対応する前記データーベース(430)上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブル(432)を前記データーベース(430)上に生成するためのSQL文を出力するステップとを備える、制御方法。
≪第2の実施の形態≫
<G.概要>
第1の実施の形態においては、ユーザは、テーブル432を生成するための設定をテーブル設定画面33に対して行い、その設定に従って、テーブル生成用のSQL文230が生成されていた。これに対して、第2の実施の形態においては、SQL文230を生成するための機能がユーザプログラム210に組み込むことができる機能モジュールとして提供される。すなわち、ユーザは、プログラム設計画面31(図3参照)上において、当該機能モジュールを他の機能モジュールと組み合わせて利用することができる。
第2の実施の形態に従う制御システム10のハードウェア構成などその他の点については第1の実施の形態に従う制御システム10と同じであるので、以下ではそれらの説明については繰り返さない。
<H.適用例>
図14および図15を参照して、本発明の他の適用例について説明する。図14は、第2の実施の形態に従う制御システム10の構成例を示す図である。
図14に示されるように、制御システム10は、1つ以上の開発支援装置100と、1つ以上のコントローラ200と、1つ以上の駆動機器300と、1つ以上の外部機器400とで構成されている。コントローラ200は、ハードウェア構成として、制御装置202と、記憶装置208とを含む。制御装置202は、機能構成として、プログラム実行モジュール252を含む。
本実施の形態に従う開発支援装置100は、SQL文230を生成するための機能がファンクションブロックなどの機能モジュールとして提供される。図14の例では、当該機能モジュールが生成モジュール250として示されている。ユーザは、上述のプログラム設計画面31(図3参照)上において、生成モジュール250を他の機能モジュールと組み合わせて利用することができる。
開発支援装置100は、ダウンロード操作を受け付けたことに基づいて、生成モジュール250が組み込まれたユーザプログラム210をコントローラ200に転送する。コントローラ200は、開発支援装置100から受信したユーザプログラム210を記憶装置208に保存する。
プログラム実行モジュール252は、ユーザプログラム210の実行開始命令を受け付けたことに基づいて、ユーザプログラム210の実行を開始する。プログラム実行モジュール252は、生成モジュール250の実行タイミングが到来したことに基づいて、生成モジュール250によるSQL文230の生成機能を実行する。
図15を参照して、生成モジュール250によるSQL文230の生成機能について説明する。図15は、生成モジュール250によるSQL文230の生成処理を概略的に示す図である。
生成モジュール250は、記憶装置208に格納されている対応関係213と、収集対象変数229とを入力として、SQL文230を生成する。
対応関係213は、ユーザプログラム210で利用され得るデータ型と、データーベース430で利用され得るデータ型との対応関係を規定している。対応関係213は、予め規定されていてもよいし、ユーザによって任意に編集されてもよい。典型的には、対応関係213は、必要に応じてサーバからダウンロードされる。
収集対象変数229は、上述のプログラム設計画面31(図3参照)で設計されているユーザプログラム210上において収集対象として指定されたものである。図15の例では、変数「A」〜「F」が収集対象として指定されている。
生成モジュール250は、収集対象の各変数についてデーターベース430上での識別名を決定する。ある局面において、生成モジュール250は、変数名と同じになるように識別名を決定する。他の局面において、生成モジュール250は、変数名に予め定められたキーワードを付加したものを識別名として決定する。一例として、変数「A」〜「F」に対するデーターベース430上での識別名は、カラム名「A’」〜「F’」に決定されたとする。なお、カラム名の決定方法は、これらに限定されず任意の決定方法が採用され得る。
次に、生成モジュール250は、対応関係213に基づいて、収集対象の各変数について、当該変数のデータ型に対応するデーターベース430上でのデータ型を特定する。その結果、「DINT」型の変数「A」については、「Number(10)」型が対応するデータ型として特定される。「String(128)」型の変数「B」については、「nchar(127)」型が対応するデータ型として特定される。「Int」型の変数「C」については、「Number(5)」型が対応するデータ型として特定される。「String(20)」型の変数「D」については、「nchar(19)」型が対応するデータ型として特定される。「bool」型の変数「E」については、「Number(1)」型が対応するデータ型として特定される。「DATE_AND_TIME」型の変数「F」については、「TIMESTAMP」型が対応するデータ型として特定される。
続いて、生成モジュール250は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース430上でのデータ型とに基づいて、SQL文230を生成する。より具体的には、生成モジュール250は、変数「A」について特定された識別名「A’」と、変数「A」について特定されたデーターベース430上でのデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230に反映する。この記述により、識別名「A’」のカラムがテーブル432に追加される。同様に、生成モジュール250は、識別名「B’」〜「F’」のカラムを追加するための記述をSQL文230に反映する。
生成されたSQL文230は、外部機器400に転送される。DBMSとしての外部機器400は、コントローラ200から受信したSQL文230を解釈し、SQL文230に従ってデーターベース430上にテーブル432を生成する。
以上のようにして、テーブル生成用のSQL文230が自動生成される。ユーザは、収集対象の変数を生成モジュール250の入力とするようにユーザプログラム210を組むだけで収集対象の変数を要素とするテーブル432を生成することができる。このように、ユーザは、SQL文を記述せずにデーターベース430上にテーブル432を生成することができる。
なお、上述では、ユーザプログラム210に含まれる変数を元にテーブル432を生成する例について説明を行ったが、ユーザプログラム210以外にも、コントローラ200内の各種制御プログラムに含まれる変数を元にテーブル432が生成されてもよい。
また、図14の例では、データーベース430が外部機器400に存在する例について説明を行ったが、データーベース430は、必ずしも、外部機器400に存在する必要はない。たとえば、データーベース430は、コントローラ200の内部に存在していてもよい。あるいは、データーベース430は、コントローラ200の内部バスに繋がれた別ユニットの内部に存在していてもよい。
また、図15に示される対応関係213においては、ユーザプログラム210上のデータ型とデーターベース430上のデータ型とが1対1で対応付けられている例について説明を行ったが、複数種類のデーターベース430に対応させる場合には、ユーザプログラム210上のデータ型とデーターベース430上のデータ型とが1対N(≧2)で対応付けられてもよい。
<I.シーケンスフロー>
図16および図17を参照して、テーブル432の生成処理に係る処理フローについて説明する。図16は、第2の実施の形態における、開発支援装置100とコントローラ200と駆動機器300と外部機器400との間のデータの流れを示すシーケンス図である。
ステップS10において、開発支援装置100は、開発ツール30の起動命令を受け付けたとする。このことに基づいて、開発支援装置100は、上述のプログラム設計画面31(図3参照)を表示する。プログラム設計画面31については図3で説明した通りであるので、その説明については繰り返さない。設計者は、プログラム設計画面31上において、テーブル生成のための生成モジュール250をユーザプログラム210に組み込むことができる。
ステップS30において、開発ツール30は、コンパイル操作を受け付けたとする。このことに基づいて、開発ツール30は、プログラム設計画面31上で設計されたユーザプログラム210をコンパイルする。その後、開発ツール30は、コンパイル結果のダウンロード操作を受け付けたとする。このことに基づいて、開発ツール30は、コンパイルされたユーザプログラム210をコントローラ200に転送する。コントローラ200は、受信したユーザプログラム210を記憶装置208(図14参照)に保存する。
ステップS32において、コントローラ200は、ユーザプログラム210の実行命令を受け付けたとする。このことに基づいて、コントローラ200は、ユーザプログラム210の実行を開始する。ユーザプログラム210がサイクリック実行型のプログラムである場合、コントローラ200は、予め定められた制御周期ごとにユーザプログラム210に含まれる命令群を繰り返し実行する。より具体的には、コントローラ200は、ユーザプログラム210の先頭行から最終行までを1制御周期で実行する。その次の制御周期では、コントローラ200は、再び、ユーザプログラム210の先頭行から最終行までを実行する。コントローラ200は、制御周期ごとに指令値を生成し、当該指令値を駆動機器300に出力する。
ステップS40において、コントローラ200は、テーブル生成処理の実行命令を受け付けたか否かを判断する。コントローラ200は、ユーザプログラム210に規定されている生成モジュール250が実行された場合に、テーブル生成処理の実行命令を受け付けたと判断する。コントローラ200は、生成モジュール250が実行されたと判断した場合(ステップS40においてYES)、制御をステップS42に切り替える。そうでない場合には(ステップS40においてNO)、コントローラ200は、制御をステップS50に切り替える。
ステップS42において、コントローラ200の生成モジュール250は、テーブル生成のためのSQL文230を生成する。なお、ステップS42では、SQL文230がコントローラ200によって生成される例について示されているが、SQL文230は、開発ツール30によって生成されてもよい。図17は、第2の実施の形態におけるSQL文230の生成処理を概略的に示す図である。
図17に示されるように、コントローラ200の生成モジュール250は、上述の対応関係213(図15参照)と、上述の収集対象変数229(図15参照)と、その他の各種設定とを入力として、SQL文230を生成する。
より具体的には、生成モジュール250は、収集対象の各変数についてデーターベース430上での識別名を決定する。生成モジュール250は、たとえば、変数「A」〜「F」に対するデーターベース430上での識別名をカラム名「A’」〜「F’」に決定したとする。ある局面において、生成モジュール250は、収集対象の各変数の変数名と同一の名前をデーターベース430上での識別名として決定する。この場合、カラム名「A’」〜「F’」は、それぞれ、変数名「A」〜「F」と同じになる。他の局面において、生成モジュール250は、収集対象の各変数の変数名を含む名前をデーターベース430上での前記識別名として決定する。この場合、それぞれ、変数名「A」〜「F」のそれぞれに所定のキーワードを付加したものがカラム名「A’」〜「F’」となる。変数名がデーターベース430上の識別名に表わされることで、ユーザは、各変数に対応するカラムを容易に把握することができる。
次に、生成モジュール250は、対応関係213に基づいて、収集対象の各変数について、データーベース430上での対応するデータ型を特定する。
続いて、生成モジュール250は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース430上でのデータ型とに基づいて、SQL文230を生成する。より具体的には、生成モジュール250は、変数「A」について特定された識別名「A’」と、変数「A」について特定されたデーターベース430上でのデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230に反映する。この記述により、識別名「A’」のカラムがテーブル432に追加される。同様に、生成モジュール250は、識別名「B’」〜「F’」のカラムを追加するための記述をSQL文230に反映する。
また、生成モジュール250は、入力される各種設定をSQL文230に反映する。一例として、当該各種設定は、生成されるテーブルに付与されるテーブル名の設定や、主キーとして指定するカラムの設定や、各カラムに対してNULLの入力を許容するか否かの設定を含む。
たとえば、テーブル名として「TABLE1」が指定されたとする。この場合、生成モジュール250は、「Create Table TABLE1」との記述をSQL文230に反映する。この記述により、生成されるテーブル432のテーブル名が「TABLE1」となる。
また、主キーとして変数「A」,「B」が設定されたとする。この場合、生成モジュール250は、「PRIMARY KEY (A’、B’)」との記述をSQL文230に追加する。この記述により、変数「A」に対応するカラム「A’」と、変数「B」に対応するカラム「B’」が主キーとして設定される。このように、SQL文230は、指定された変数に対応するデーターベースでの識別名を主キーにとしてテーブルに登録するための命令文を含む。
また、変数「A」,「B」についてはNULL禁止が設定されたとする。この場合、生成モジュール250は、カラム「A’」,「B’」について「NOT NULL」との記述を付す。これにより、変数「A」,「B」に対応するカラム「A’」,「B’」についてはNULL指定が禁止される。
以上により、生成モジュール250は、テーブル生成のためのSQL文230を自動生成する。好ましくは、生成モジュール250は、SQL文230の他に、対応付け結果であるマッピングテーブル232をさらに出力する。
マッピングテーブル232は、収集対象の各変数について、変数のデータ型と、データーベース430上での識別名と、データーベース430上のデータ型との対応付け結果を示す。好ましくは、マッピングテーブル232は、いずれのカラムが主キーとして設定されているか否かを示すフラグと、各カラムに対するNULL指定が禁止されているか否かを示すフラグとをさらに含む。このようなマッピングテーブル232が出力されることで、ユーザは、収集対象の各変数について対応付けられたカラム名や、収集対象の各変数のデータ型などを容易に把握することができる。
生成されたSQL文230は、外部機器400に送信される。再び図16を参照して、ステップS44において、外部機器400は、コントローラ200からSQL文230を受信したことに基づいて、当該SQL文230に従ってテーブル432を生成する。その結果、上述の図6に示される空のテーブル432がデーターベース430上に生成される。
ステップS50において、コントローラ200は、ユーザプログラム210に規定される指令値の生成処理の実行命令を受け付けたか否かを判断する。コントローラ200は、当該実行命令を受け付けたと判断した場合(ステップS50においてYES)、規定されている命令に従って指令値を生成し、当該指令値を駆動機器300に送る(ステップS52)。駆動機器300は、コントローラ200から受信した指令値に従って制御対象を駆動する。コントローラ200は、指令値の生成処理の実行命令を受け付けたと判断しなかった場合(ステップS50においてNO)、コントローラ200は、ステップS52の処理を実行せずに、制御をステップS60に切り替える。
ステップS60において、コントローラ200は、収集対象の変数のアップロード処理の実行命令を受け付けたか否かを判断する。コントローラ200は、当該実行命令を受け付けたと判断した場合(ステップS60においてYES)、INSERT命令を実行するためのSQL文を生成する。当該SQL文には、追加先のテーブルを指定するための情報(たとえば、テーブル名)や、各カラムにアップロードするデータの値などが規定される。
ステップS62において、コントローラ200は、生成したSQL文を外部機器400に送る。外部機器400は、コントローラ200から受信したSQL文に従って各カラムに変数値を反映したレコードを生成し、ステップS24で生成されたテーブル432に生成したレコードを追加する。これにより、収集対象の変数がテーブル432に反映される。その後、外部機器400は、正常終了または異常終了を示すアップロード結果をコントローラ200に送信する。
コントローラ200は、収集対象の変数のアップロード処理の実行命令を受けていない場合(ステップS60においてNO)、ステップS62の処理を実行せずに、処理をステップS70に切り替える。
ステップS70において、コントローラ200は、ユーザプログラム210の実行を終了するか否かを判断する。当該終了命令は、たとえば、ユーザから終了操作を受け付けたことに基づいて発せられる。コントローラ200は、ユーザから終了操作を受け付けたと判断した場合(ステップS70においてYES)、ユーザプログラム210の実行を終了する。そうでない場合には(ステップS70においてNO)、コントローラ200は、制御をステップS40に戻す。
なお、上述では、ステップS62において、INSERT命令のSQL文がコントローラ200から外部機器400のデーターベース430に送信される例について説明を行ったが、INSERTする値のみが外部機器400のデーターベース430に送られてもよい。この場合、外部機器400は、INSERTする値を受信したことに基づいて、INSERT命令のSQL文を生成し、当該SQL文に基づいて受信した値のINSERT処理を実行する。
<J.テーブル生成FB>
上述のように、開発支援装置100は、テーブル生成のためのSQL文230を生成する機能を生成モジュール250として提供する。生成モジュール250は、たとえば、ファンクションブロック(FB:Function Black)で提供される。
図18を参照して、ファンクションブロックとして提供される生成モジュール250について説明する。図18は、生成モジュール250の一例であるテーブル生成FB251を示す図である。
なお、生成モジュール250は、ファンクションブロック以外で規定されてもよい。たとえば、生成モジュール250は、ラダーダイアグラムで規定されるもの、命令リスト、構造化テキスト、および、シーケンシャルファンクションチャートのいずれか、あるいは、これらの組み合わせで規定されるものも含み得る。また、生成モジュール250は、JavaScriptやC言語のような汎用的なプログラミング言語で規定されるものも含み得る。
テーブル生成FB251は、SQL文230の生成に関する設定を受け付ける入力部255A〜255Eと、SQL文230の生成結果を出力するための出力部256A〜256Fとを含む。
「Excute」として示される入力部255Aは、SQL文の生成処理を実行するか否かを指定するための設定を受け付ける。一例として、入力部255Aは、「BOOL」型の入力を受け付けるように規定されている。入力部255Aに「FALSE」が入力されている限り、SQL文の生成処理は、実行されない。一方で、入力部255Aに「TRUE」が入力された場合には、SQL文の生成処理が実行される。
「DBConnection」として示される入力部255Bは、データーベース430に接続するためのファンクションブロックを実行して得られる接続結果を受け付ける。当該接続結果には、データーベース430のアクセスするための情報(たとえば、データーベース名など)が含まれている。
「TableName」として示される入力部255Cは、テーブル名の設定を受け付ける。入力部255Eは、たとえば、「DWORD」型の変数を受け付けるように規定されている。
「MappingVariableList」として示される入力部255Dは、収集対象の変数の入力を受け付ける。入力部255Dは、予め定義された構造体を受け付けるように規定されている。入力部255Dには、上述の収集対象変数229(図17参照)が入力される。
「PrimaryKey」として示される入力部255Eは、主キーを設定するための入力を受け付ける。入力部255Eは、たとえば、「String」型の変数を受け付けるように規定されている。このように、テーブル生成FB251は、収集対象の変数の内のいずれかを主キーとして指定するための入力を受け付けるように規定されている。
SQL文230が正常に生成された場合には、正常終了を示す信号が、「Done」として示される出力部256Aから出力される。SQL文230の生成中には、生成処理中を示す信号が、「Busy」として示される出力部256Bから出力される。SQL文230が正常に生成されなかった場合には、異常終了を示す信号が、「Error」として示される出力部256Cから出力される。この場合には、さらに、エラーの内容を識別するためのエラーIDが、「ErrorID」として示される出力部256Dから出力される。「SQLStatement」として示される出力部256Eからは、テーブル生成FB251の実行によって生成されたSQL文230(図17参照)が出力される。「MappingTable」として示される出力部256Fからは、テーブル生成FB251の実行によって生成されたマッピングテーブル232(図17参照)が出力される。
<K.テーブル生成パターンの変形例>
図19を参照して、SQL文230の生成パターンの変形例について説明する。図19は、変形例におけるSQL文230の生成処理を概略的に示す図である。
上述の図17では、生成モジュール250は、対応関係213と、収集対象変数229とを入力として、テーブル生成のためのSQL文230と、マッピングテーブル232とを生成していた。これに対して、変形例に従う生成パターンでは、生成モジュール250Aは、マッピングモジュール248によって生成されたマッピングテーブル232を入力としてSQL文230を出力する。その他の点については上述の通りであるので、以下では、それらの説明については繰り返さない。
マッピングモジュール248は、ユーザプログラム210に組み込まれ得るプログラムモジュールである。マッピングモジュール248は、対応関係213と、収集対象変数229とを入力として、マッピングテーブル214を生成する。
より具体的には、マッピングモジュール248は、収集対象の各変数についてデーターベース430上での識別名を決定する。マッピングモジュール248は、変数「A」〜「F」に対するデーターベース430上での識別名をカラム名「A’」〜「F’」に決定したとする。ある局面において、マッピングモジュール248は、収集対象の各変数の変数名と同一の名前をデーターベース430上での識別名として決定する。この場合、カラム名「A’」〜「F’」は、それぞれ、変数名「A」〜「F」と同じになる。他の局面において、マッピングモジュール248は、収集対象の各変数の変数名を含む名前をデーターベース430上での前記識別名として決定する。この場合、それぞれ、変数名「A」〜「F」のそれぞれに所定のキーワードを付加したものがカラム名「A’」〜「F’」となる。
続いて、マッピングモジュール248は、対応関係213に基づいて、収集対象の各変数について、当該変数のデータ型に対応するデーターベース430上でのデータ型を特定する。
次に、マッピングモジュール248は、変数名「A」〜「F」と、変数「A」〜「F」のデータ型と、変数「A」〜「F」のデーターベース上での識別名と、変数名「A」〜「F」のデーターベース上でのデータ型との対応関係をマッピングテーブル214として生成モジュール250Aに出力する。
生成モジュール250Aは、マッピングテーブル232に規定されるデーターベース上での識別名と、当該識別名に対応するデーターベース上でのデータ型とに基づいて、SQL文230を生成する。生成モジュール250AによるSQL文230の生成方法については上述の通りであるので、その説明については繰り返さない。
<L.マッピングFB>
図19に示されるマッピングモジュール248は、たとえば、ファンクションブロック(FB)で提供される。以下では、図20を参照して、ファンクションブロックとして提供されるマッピングモジュール248について説明する。図20は、マッピングモジュール248の一例であるマッピングFB249を示す図である。
なお、マッピングモジュール248は、ファンクションブロック以外で規定されてもよい。たとえば、マッピングモジュール248は、ラダーダイアグラムで規定されるもの、命令リスト、構造化テキスト、および、シーケンシャルファンクションチャートのいずれか、あるいは、これらの組み合わせで規定されるものも含み得る。また、マッピングモジュール248は、JavaScriptやC言語のような汎用的なプログラミング言語で規定されるものも含み得る。
マッピングFB249は、マッピングテーブル214の生成に関する設定を受け付ける入力部258A,258Bと、マッピングテーブル214の生成結果を出力するための出力部259A〜259Eとを含む。
「Excute」として示される入力部258Aは、マッピングテーブル214の生成処理を実行するか否かを指定するための設定を受け付ける。一例として、入力部258Aは、「BOOL」型の入力を受け付けるように規定されている。入力部258Aに「FALSE」が入力されている限り、マッピングテーブル214の生成処理は、実行されない。一方で、入力部258Aに「TRUE」が入力された場合には、マッピングテーブル214の生成処理が実行される。
「MappingVariableList」として示される入力部258Bは、収集対象の変数の入力を受け付ける。入力部258Bは、予め定義された構造体を受け付けるように規定されている。入力部258Bには、構造体として定義される収集対象変数229(図19参照)が入力される。
マッピングテーブル214が正常に生成された場合には、正常終了を示す信号が、「Done」として示される出力部259Aから出力される。マッピングテーブル214の生成中には、生成処理中を示す信号が、「Busy」として示される出力部259Bから出力される。マッピングテーブル214が正常に生成されなかった場合には、異常終了を示す信号が、「Error」として示される出力部259Cから出力される。この場合には、さらに、エラーの内容を識別するためのエラーIDが、「ErrorID」として示される出力部259Dから出力される。「MappingTable」として示される出力部259Eからは、マッピングFB249の実行によって生成されたマッピングテーブル232(図19参照)が出力される。
<M.テーブル生成FBの変形例>
図19に示される生成モジュール250Aは、たとえば、ファンクションブロック(FB)で提供される。以下では、図21を参照して、ファンクションブロックとして提供される生成モジュール250Aについて説明する。図21は、生成モジュール250Aの一例であるテーブル生成FB251Aを示す図である。
テーブル生成FB251Aは、SQL文230の生成に関する設定を受け付ける入力部255A〜255C,255D2,255Eと、SQL文230の生成結果を出力するための出力部256A〜256Fとを含む。入力部255D2以外の構成については、図18に示されるテーブル生成FB251と同じであるので、以下では、入力部255D2以外の説明については繰り返さない。
「MappingValue」として示される入力部255D2は、上述のマッピングFB249(図20参照)によって生成されるマッピングテーブル232を入力として受け付ける。
テーブル生成FB251Aは、入力部255A〜255C,255D2,255Eに入力された情報に従ってSQL文230を生成する。テーブル生成FB251AによるSQL文230の生成方法については図19で説明した通りであるので、その説明については繰り返さない。
<N.生成モジュール250による生成パターン>
収集対象の変数には、構造体が含まれる場合がある。生成モジュール250は、収集対象の変数に構造体が含まれる場合には、そうではない場合と異なる態様でテーブル生成のためのSQL文230を生成する。収集対象の変数に構造体が含まれる場合におけるテーブル432の生成処理として、たとえば、2つの生成パターン(生成パターン3,4)が考えられる。
生成パターン3においては、生成モジュール250は、構造体ではない変数を管理するためのテーブルと、構造体に含まれるメンバ変数を管理するためのテーブルとを別々に生成する。生成パターン4においては、生成モジュール250は、構造体ではない変数と構造体に含まれるメンバ変数とを共通に管理するための1つのテーブルを生成する。
以下では、図22および図23を参照して、第2の実施の形態における生成パターン3,4について順に説明する。
(M1.テーブルの生成パターン3)
まず、第2の実施の形態における生成パターン3について説明する。図22は、第2の実施の形態に従うテーブルの生成パターン3を概略的に示す図である。
生成モジュール250は、データ型の対応関係213と収集対象変数229とを入力として、「TABLE1」を生成するためのSQL文230Aと、「TABLE2」を生成するためのSQL文230Bとを生成している。
より具体的には、生成モジュール250は、収集対象の各変数についてデーターベース430上での識別名を決定する。このとき、生成モジュール250は、収集対象の変数に構造体が含まれている場合には、構造体名についてデーターベース430上での識別名を決定するとともに、構造体の各メンバについてデーターベース430上での識別名を決定する。その結果、収集対象の変数「A」,「B」に対するデーターベース430上での識別名は、カラム名「A’」,「B’」に決定されたとする。また、構造体「C」に対するデーターベース430上での識別名は、カラム「C’」に決定されたとする。また、収集対象の構造体「C」のメンバ変数「α」〜「γ」に対するデーターベース430上での識別名は、カラム名「α’」〜「γ’」に決定されたとする。
次に、生成モジュール250は、対応関係213に基づいて、収集対象の各変数について、当該変数のデータ型に対応するデーターベース430上でのデータ型を特定する。
続いて、生成モジュール250は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース430上でのデータ型とに基づいて、SQL文230を生成する。このとき、生成モジュール250は、収集対象の変数名について決定された識別名「A’」,「B’」と、構造体名について決定された識別名「C’」とをテーブル「TABLE1」に登録するようにSQL文230Aを生成する。また、生成モジュール250は、構造体の各メンバ変数について決定された識別名「α’」〜「γ’」をテーブル「TABLE1」とは別のテーブル「TABLE2」に登録するようにSQL文230Bを生成する。
より具体的には、生成モジュール250は、変数「A」について決定された識別名「A’」と、変数「A」に対応するデーターベース上でのデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230Aに反映する。この記述により、識別名「A’」のカラムがテーブルに追加される。同様に、生成モジュール250は、識別名「B’」,「C’」のカラムを追加するための記述をSQL文230Aに反映する。
また、生成モジュール250は、構造体名について決定されたカラム名「C’」を外部キーとしてテーブル「TABLE2」に登録するための命令コードをSQL文230Aに含める。図22の例では、「FOREIGN KEY(C’) REFERENCES TABLE2」との記述がSQL文230Aに追加されている。この記述により、カラム「C’」が「TABLE2」を参照する外部キーとして規定される。
続いて、生成モジュール250は、構造体「C」に含まれるメンバ変数「α」,「β」,「γ」については、カラム「C’」,「α’」,「β’」,「γ’」を追加するための記述をSQL文230Aとは別のSQL文230Bに反映する。図22の例では、「C’ Number(5)」との記述と、「α’ Number(5)」との記述と、「β’ Number(5)」との記述と、「γ’ Number(5)」との記述とがSQL文230Bに反映されている。これらの記述により、この記述により、識別名「C’」,「α’」,「β’」,「γ’」のカラムが別テーブルに追加される。このとき、構造体名「C」に付けられたカラム名「C’」については、「PRIMARY KEY (C’)」との記述をSQL文230Bに追加する。この記述により、識別名「C’」のカラムが主キーとして設定される。
以上により、生成モジュール250は、テーブル生成のためのSQL文230A,230Bを自動生成する。なお、図22では、収集対象の変数に1つの構造体が含まれている例について説明を行ったが、収集対象の変数に複数の構造体が含まれている場合には、構造体の数に応じてテーブルが生成されるようにSQL文が生成される。また、構造体のメンバに構造体が含まれている場合には、各構造体についてテーブルが生成されるようにSQL文が生成される。
好ましくは、生成モジュール250は、SQL文230A,230Bの他に、対応付け結果であるマッピングテーブル232A,232Bをさらに出力する。
マッピングテーブル232Aは、SQL文230Aの生成結果として生成される。マッピングテーブル232Aは、SQL文230Aで規定されたカラムに対応する変数名と、当該変数のデータ型と、当該カラムの識別名と、当該カラムのデータ型との対応付け結果を示す。また、マッピングテーブル232Aに規定される収集対象の各変数には、主キーであるか否かを示すフラグと、NULL指定が禁止されているか否かを示すフラグとが対応付けられている。
マッピングテーブル232Bは、SQL文230Bの生成結果として生成される。マッピングテーブル232Bは、SQL文230Bで規定されたカラムに対応する変数名と、当該変数のデータ型と、当該カラムの識別名と、当該カラムのデータ型との対応付け結果を示す。また、マッピングテーブル232Bに規定される収集対象の各変数には、主キーであるか否かを示すフラグと、NULL指定が禁止されているか否かを示すフラグとが対応付けられている。
マッピングテーブル232A,232Bが出力されることで、ユーザは、収集対象の各変数について対応付けられたカラム名や、収集対象の各変数のデータ型に対応するデーターベース上でのデータ型などを容易に把握することができる。
(M2.テーブルの生成パターン4)
次に、図23を参照して、収集対象の変数に構造体が含まれている場合におけるテーブル432の生成パターン4について説明する。図23は、第2の実施の形態に従うテーブルの生成パターン4を概略的に示す図である。
収集対象変数229において、構造体「C」が収集対象の変数として指定されているとする。構造体「C」は、メンバ変数として、変数「α」,「β」,「γ」を含む。本生成例においては、生成モジュール250は、構造体ではない変数と、構造体に含まれるメンバ変数とを要素とする1つのテーブルを生成する。
より具体的には、生成モジュール250は、収集対象の各変数についてデーターベース430上での識別名を決定する。このとき、生成モジュール250は、収集対象の変数に構造体が含まれている場合には、構造体ではない各変数と、構造体に含まれる各メンバ変数とについてデーターベース430上での識別名を決定する。その結果、収集対象の変数「A」,「B」に対するデーターベース430上での識別名は、カラム名「A’」,「B’」に決定されたとする。また、収集対象の構造体「C」のメンバ変数「α」〜「γ」に対するデーターベース430上での識別名は、カラム名「α’」〜「γ’」に決定されたとする。
次に、生成モジュール250は、対応関係213に基づいて、構造体ではない各変数と、構造体に含まれる各メンバ変数とについて、データーベース430上での対応するデータ型を特定する。
続いて、生成モジュール250は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース430上でのデータ型とに基づいて、SQL文230を生成する。このとき、収集対象の変数名について決定された識別名「A’」,「B’」,「α’」〜「γ’」をテーブル「TABLE1」に登録するようにSQL文230Aを生成する。
より具体的には、生成モジュール250は、変数「A」について決定された識別名「A’」と、変数「A」に対応するデーターベース上でのデータ型「Number(10)」とに基づいて、「A’ Number(10)」との記述をSQL文230Aに反映する。この記述により、識別名「A’」のカラムがテーブルに追加される。同様に、生成モジュール250は、識別名「B’」,「α’」〜「γ’」のカラムを追加するための記述をSQL文230Aに反映する。
以上により、生成モジュール250は、テーブル生成のためのSQL文230を自動生成する。好ましくは、生成モジュール250は、SQL文230の他に、対応付け結果であるマッピングテーブル232をさらに出力する。
マッピングテーブル232は、SQL文230の生成結果として生成される。マッピングテーブル232は、SQL文230で規定されたカラムに対応する変数名と、当該変数のデータ型と、当該カラムの識別名と、当該カラムのデータ型との対応付け結果を示す。また、マッピングテーブル232に規定される収集対象の各変数には、主キーであるか否かを示すフラグと、NULL指定が禁止されているか否かを示すフラグとが対応付けられている。
マッピングテーブル232が出力されることで、ユーザは、収集対象の各変数について対応付けられたカラム名や、収集対象の各変数のデータ型に対応するデーターベース上でのデータ型などを容易に把握することができる。
<O.利点>
図24および図25を参照して、比較例に従う制御システム10Xと比較することで、第2の実施の形態に従う制御システム10の利点について説明する。図24は、比較例に従う制御システム10Xによるテーブル生成に係る処理フローを示す図である。図25は、第2の実施の形態に従う制御システム10によるテーブル生成に係る処理フローを示す図である。
比較例に従う制御システム10Xには、テーブルを自動生成するための生成モジュール250が搭載されていない。制御システム10Xにテーブルを登録し、収集対象のデータをテーブルにアップロードするためには、ユーザは、以下のステップS1〜S6の操作を行う必要がある。
(ステップS1)外部機器400上でテーブル生成のためのSQL文を記述し、データーベース430上に予めテーブルを登録する。
(ステップS2)ステップS1でデーターベース430に登録したテーブルのデータ構造に合わせて、開発支援装置100の開発ツール30上で構造体変数を定義する。
(ステップS3)ステップS2で定義した構造体変数を開発支援装置100に登録する。
(ステップS4)上記ステップS2で定義した構造体変数の各メンバと、ステップS1でデーターベース430に登録したテーブルの各カラムとの対応関係をユーザプログラム210上で規定する。
(ステップS5)ステップS3で登録した構造体変数に収集対象の変数をセットするようにユーザプログラム210を設計する。
(ステップS6)ステップS5で収集対象の変数がセットされた構造体変数をデーターベース430にアップロードするようにユーザプログラム210を設計する。
これに対して、本実施の形態に従う制御システム10においては、収集対象の変数を生成モジュール250に入力するようにユーザプログラム210が設計されば、データーベース430上にテーブルが自動で生成される。そのため、本実施の形態に従う制御システム10においては、図25に示されるように、上記ステップS1,S2,S3,S5の操作が必要なくなる。その結果、データーベース430に対する操作が容易になり、専門知識がないユーザであってもデーターベース430を設計することが可能になる。
<P.第2の実施の形態のまとめ>
以上のようにして、開発支援装置100は、テーブルを自動生成する機能を生成モジュール250として提供する。生成モジュール250は、収集対象の各変数についてデーターベース430上での識別名を決定する。また、生成モジュール250は、ユーザプログラム210ユーザプログラム210で利用され得るデータ型と、データーベース430で利用され得るデータ型との予め定められた対応関係213に基づいて、ユーザプログラム210に含まれる収集対象の各変数について、当該変数のデータ型に対応するデーターベース430上でのデータ型を特定する。次に、生成モジュール250は、収集対象の各変数について決定されたデーターベース430での識別名と、収集対象の各変数について特定されたデーターベース430でのデータ型とに基づいて、テーブル生成のためのSQL文を生成する。
このように、ユーザは、データーベース430にテーブルを生成するにあたってSQL文230を記述する必要がない。そのため、SQLの知識がないユーザであってもデーターベース430を容易に構築することできる。
<Q.付記>
以上のように、本実施形態は以下のような開示を含む。
[構成1]
制御対象を制御するためのコントローラ(200)であって、
データーベース(430)にアクセスするための通信部(201)と、
前記制御対象を制御するための制御プログラムを格納する記憶装置(208)とを備え、
前記制御プログラムは、当該制御プログラムに含まれる収集対象の変数の格納先となるテーブル(432)を前記データーベース(430)上に生成するためのSQL文(230)を出力する生成モジュール(250)を含み、
前記生成モジュール(250)は、
前記収集対象の各変数について前記データーベース(430)上での識別名を決定し、
前記制御プログラムで利用され得るデータ型と、前記データーベース(430)で利用され得るデータ型との予め定められた対応関係(212)に基づいて、前記収集対象の各変数について、当該変数のデータ型に対応する前記データーベース(430)上でのデータ型を特定し、
前記収集対象の各変数について決定された前記識別名と、前記収集対象の各変数について特定された前記データ型とに基づいて、前記SQL文(230)を生成する、コントローラ。
[構成2]
前記コントローラ(200)は、前記収集対象の各変数と、当該各変数のデータ型と、当該各変数についての前記データーベース(430)上での識別名と、当該各変数についての前記データーベース(430)上のデータ型との対応付け結果をさらに出力する、構成1に記載のコントローラ。
[構成3]
前記生成モジュール(250)は、前記収集対象の各変数の変数名と同一の名前、または、前記収集対象の各変数の変数名を含む名前を、前記データーベース(430)上での前記識別名として決定する、構成1または2に記載のコントローラ。
[構成4]
前記生成モジュール(250)は、
前記収集対象の変数に構造体が含まれている場合、構造体名について前記識別名を決定するとともに、前記構造体の各メンバについて前記識別名を決定し、
前記構造体名について決定された前記識別名を前記テーブル(432)に登録するように前記SQL文(230)を生成し、
前記構造体の各メンバについて決定された前記識別名を前記テーブル(432)とは別のテーブル(432)に登録するように前記SQL文(230)を生成する、構成1〜3のいずれか1項に記載のコントローラ。
[構成5]
前記SQL文(230)は、前記構造体名について決定された前記識別名を外部キーとして前記テーブル(432)に登録するための命令文を含む、構成4に記載のコントローラ。
[構成6]
前記生成モジュール(250)は、前記収集対象の変数の内のいずれかを主キーとして指定するための入力を受け付けるように規定されており、
前記SQL文(230)は、指定された変数に対応する識別名を主キーにとして前記テーブル(432)に登録するための命令文を含む、構成1〜5のいずれか1項に記載のコントローラ。
[構成7]
データーベース(430)にアクセスすることが可能なコントローラ(200)の制御方法であって、
前記コントローラ(200)の制御プログラムを受信するステップと、
前記制御プログラムに含まれる収集対象の各変数について前記データーベース(430)上での識別名を決定するステップと、
前記制御プログラムで利用され得るデータ型と、前記データーベース(430)で利用され得るデータ型との予め定められた対応関係(212)に基づいて、前記収集対象の各変数について、当該変数のデータ型に対応する前記データーベース(430)上でのデータ型を特定するステップと、
前記収集対象の各変数について決定された前記識別名と、前記収集対象の各変数について特定された前記データ型とに基づいて、前記収集対象の変数の格納先となるテーブル(432)を前記データーベース(430)に生成するためのSQL文(230)を出力するステップとを含む、制御方法。
[構成8]
データーベース(430)にアクセスすることが可能なコントローラ(200)の制御プログラムであって、
前記制御プログラムは、前記コントローラ(200)に、
前記制御プログラムに含まれる収集対象の各変数について前記データーベース(430)上での識別名を決定するステップと、
前記制御プログラムで利用され得るデータ型と、前記データーベース(430)で利用され得るデータ型との予め定められた対応関係(212)に基づいて、前記収集対象の各変数について、当該変数のデータ型に対応する前記データーベース(430)上でのデータ型を特定するステップと、
前記収集対象の各変数について決定された前記識別名と、前記収集対象の各変数について特定された前記データ型とに基づいて、前記収集対象の変数の格納先となるテーブル(432)を前記データーベース(430)に生成するためのSQL文(230)を出力するステップとを実行させる、制御プログラム。
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。