(57)【要約】      （修正有）【課題】ＳＱＬ文を記述せずにデータベース上にテーブルを生成するための技術を提供する。【解決手段】制御システム１０は、開発支援装置１００とコントローラ２００とを備える。開発支援装置１００の開発ツール３０は、制御プログラム２１０に含まれる変数の内から収集対象の変数を指定する設定と、収集対象の各変数についてデータベース上での識別名を指定する設定とを設定情報２１２として受け付ける。コントローラ２００は、設定情報２１２に規定されるデータベース４３０上での識別名とデータ型とに基づいて、テーブル４３２をデータベース４３０上に生成するためのＳＱＬ文２３０を出力する生成モジュール２５０を含む。【選択図】図１
2019159995.tif 000002
【特許請求の範囲】
【請求項１】
データーベースにアクセスすることが可能なコントローラと、
前記コントローラと通信可能に構成されている開発支援装置とを備え、
前記開発支援装置には、前記コントローラの制御プログラムの開発を支援するための開発ツールがインストールされ得、
前記開発ツールは、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース上での識別名を指定するための設定とを設定情報として受け付けるように構成されており、
前記コントローラまたは前記開発ツールは、前記設定情報に規定される前記データーベース上での識別名と、当該識別名に対応する前記データーベース上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブルを前記データーベース上に生成するためのＳＱＬ文を出力するための生成モジュールを含む、制御システム。
【請求項２】
前記開発ツールは、前記収集対象の各変数が設定されたことに基づいて、当該変数のデータ型を表示するように構成されている、請求項１に記載の制御システム。
【請求項３】
前記開発ツールは、前記収集対象として指定された変数の内から主キーを指定するための設定をさらに受け付けるように構成されている、請求項１または２に記載の制御システム。
【請求項４】
前記開発ツールは、前記収集対象として指定された変数に構造体が含まれている場合、当該構造体に含まれる各メンバについて、前記データーベース上での識別名の指定を受け付けるように構成されている、請求項１〜３のいずれか１項に記載の制御システム。
【請求項５】
前記生成モジュールは、前記構造体の各メンバについて決定された前記識別名を前記テーブルとは別のテーブルに登録するように前記ＳＱＬ文を生成する、請求項４に記載の制御システム。
【請求項６】
前記生成モジュールは、前記構造体の識別名を外部キーとして前記テーブルに登録するための命令コードを前記ＳＱＬ文に含める、請求項５に記載の制御システム。
【請求項７】
制御プログラムの開発を支援するための開発支援装置と通信可能に構成されており、データーベースにアクセスすることが可能なコントローラであって、
前記開発支援装置には、前記制御プログラムの開発を支援するための開発ツールがインストールされ得、
前記開発ツールは、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース上での識別名を指定するための設定とを設定情報として受け付けるように構成されており、
前記コントローラは、
前記設定情報および前記制御プログラムを前記開発支援装置から受信するための通信部と、
前記開発支援装置から受信した前記制御プログラムに従って制御対象の駆動機器を制御するためのプログラム実行モジュールと、
前記開発支援装置から受信した前記設定情報に規定される前記データーベース上での識別名と、当該識別名に対応する前記データーベース上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブルを前記データーベース上に生成するためのＳＱＬ文を出力するための生成モジュールとを備える、コントローラ。
【請求項８】
制御プログラムの開発を支援するための開発支援装置と通信可能に構成されており、データーベースにアクセスすることが可能なコントローラの制御方法であって、
前記開発支援装置には、前記制御プログラムの開発を支援するための開発ツールがインストールされ得、
前記開発ツールは、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース上での識別名を指定するための設定とを設定情報として受け付けるように構成されており、
前記制御方法は、
前記設定情報および前記制御プログラムを前記開発支援装置から受信するステップと、
前記開発支援装置から受信した前記制御プログラムに従って制御対象の駆動機器を制御するステップと、
前記開発支援装置から受信した前記設定情報に規定される前記データーベース上での識別名と、当該識別名に対応する前記データーベース上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブルを前記データーベース上に生成するためのＳＱＬ文を出力するステップとを備える、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コントローラによってアクセスされるデーターベース上にテーブルを生成するための技術に関する。
【背景技術】
【０００２】
様々な生産現場において、生産工程を自動化するＦＡ（Factory  Automation）システムが普及している。ＦＡシステムは、種々の産業用の駆動機器によって構成される。産業用の駆動機器は、たとえば、ワークを移動するための移動テーブルや、ワークを搬送するためのコンベアや、予め定められた目的の場所までワーク移動するためのアームロボットなどを含む。これらの駆動機器は、ＰＬＣ（Programmable Logic Controller）やロボットコントローラなどの産業用の制御装置（以下、「コントローラ」ともいう。）によって制御される。
【０００３】
近年、外部機器のデーターベースにアクセスすることができるコントローラが普及している。このようなコントローラに関し、特開２０１６−１９４８０８号公報（特許文献１）は、「ＳＱＬの記述なしにデータベースを操作する技術において、簡易な仕組みで、複数のレコードをまとめて操作する」ことができるコントローラを開示している。国際公開第２０１４／１８４９６２号（特許文献２）は、「データベースからデータを読出す際に、従来に比してデータベースからの読出しの工程数を少なくすることができる」コントローラを開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−１９４８０８号公報
【特許文献２】国際公開第２０１４／１８４９６２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、コントローラ内の収集対象のデータをデーターベースにアップロードするためには、データーベース上に予めテーブルを登録しておく必要がある。テーブルとは、データ管理のためのモデルである。テーブルは、列を示すカラムと、行を示すレコードとで構成される。
【０００６】
ユーザは、データーベース上にテーブルを生成するためには、各カラムの属性を予め定義する必要がある。一例として、ユーザは、各カラムの識別名（カラム名）や各カラムに追加可能なデータ型などを定義する必要がある。その上で、コントローラ内における収集対象のデータをテーブルに追加するための事前準備として、ユーザは、コントローラ内の収集対象のデータをテーブル上の各カラム名と対応付けたり、各カラムで登録されているデータ型に合わせて収集対象のデータの型を変換する必要がある。
【０００７】
このような事前設定には、ＳＱＬの知識など専門知識が必要となる。そのため、専門知識に乏しいユーザは、データーベースを構築することが非常に困難となる。したがって、ＳＱＬ文を記述せずにデーターベース上にテーブルを生成することが可能な技術が望まれている。
【課題を解決するための手段】
【０００８】
本開示の一例では、データーベースにアクセスすることが可能なコントローラと、上記コントローラと通信可能に構成されている開発支援装置とを備える。上記開発支援装置には、上記コントローラの制御プログラムの開発を支援するための開発ツールがインストールされ得る。上記開発ツールは、上記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について上記データーベース上での識別名を指定するための設定とを設定情報として受け付けるように構成されている。上記コントローラまたは上記開発ツールは、上記開発支援装置から受信した上記設定情報に規定される上記データーベース上での識別名と、当該識別名に対応する上記データーベース上でのデータ型とに基づいて、上記収集対象の変数の格納先となるテーブルを上記データーベース上に生成するためのＳＱＬ文を出力するための生成モジュールを含む。
【０００９】
この開示によれば、ユーザは、ＳＱＬ文を記述せずにデーターベース上にテーブルを生成することができる。
【００１０】
本開示の一例では、上記開発ツールは、上記収集対象の各変数が設定されたことに基づいて、当該変数のデータ型を表示する。
【００１１】
この開示によれば、ユーザは、収集対象の変数のデータ型を容易に確認することができる。
【００１２】
本開示の一例では、上記開発ツールは、上記収集対象として指定された変数の内から主キーを指定するための設定をさらに受け付けるように構成されている。
【００１３】
この開示によれば、ユーザは、ＳＱＬ文を記述せずに主キーの設定を行うことができる。
【００１４】
本開示の一例では、上記開発ツールは、上記収集対象として指定された変数に構造体が含まれている場合、当該構造体に含まれる各メンバについて、上記データーベース上での識別名の指定を受け付けるように構成されている。
【００１５】
この開示によれば、ユーザは、構造体に含まれているメンバ変数についても収集対象として設定することができる。
【００１６】
本開示の一例では、上記生成モジュールは、上記構造体の各メンバについて決定された上記識別名を上記テーブルとは別のテーブルに登録するように上記ＳＱＬ文を生成する。
【００１７】
この開示によれば、ユーザは、構造体に含まれるメンバ変数を他の収集対象の変数とは別のテーブルとして管理することができる。
【００１８】
本開示の一例では、上記生成モジュールは、上記構造体の識別名を外部キーとして上記テーブルに登録するための命令コードを上記ＳＱＬ文に含める。
【００１９】
この開示によれば、ユーザは、ＳＱＬ文を記述せずに、構造体に対応するデーターベース上での識別名を外部キーとして登録することができる。
【００２０】
本開示の他の例では、制御プログラムの開発を支援するための開発支援装置と通信可能に構成されており、データーベースにアクセスすることが可能なコントローラが提供される。上記開発支援装置には、上記制御プログラムの開発を支援するための開発ツールがインストールされ得る。上記開発ツールは、上記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について上記データーベース上での識別名を指定するための設定とを設定情報として受け付けるように構成されている。上記コントローラは、上記設定情報および上記制御プログラムを上記開発支援装置から受信するための通信部と、上記開発支援装置から受信した上記制御プログラムに従って制御対象の駆動機器を制御するためのプログラム実行モジュールと、上記開発支援装置から受信した上記設定情報に規定される上記データーベース上での識別名と、当該識別名に対応する上記データーベース上でのデータ型とに基づいて、上記収集対象の変数の格納先となるテーブルを上記データーベース上に生成するためのＳＱＬ文を出力するための生成モジュールとを備える。
【００２１】
この開示によれば、ユーザは、ＳＱＬ文を記述せずにデーターベース上にテーブルを生成することができる。
【００２２】
本開示の他の例では、制御プログラムの開発を支援するための開発支援装置と通信可能に構成されており、データーベースにアクセスすることが可能なコントローラの制御方法が提供される。上記開発支援装置には、上記制御プログラムの開発を支援するための開発ツールがインストールされ得る。上記開発ツールは、上記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について上記データーベース上での識別名を指定するための設定とを設定情報として受け付けるように構成されている。上記制御方法は、上記設定情報および上記制御プログラムを上記開発支援装置から受信するステップと、上記開発支援装置から受信した上記制御プログラムに従って制御対象の駆動機器を制御するステップと、上記開発支援装置から受信した上記設定情報に規定される上記データーベース上での識別名と、当該識別名に対応する上記データーベース上でのデータ型とに基づいて、上記収集対象の変数の格納先となるテーブルを上記データーベース上に生成するためのＳＱＬ文を出力するステップとを備える。
【００２３】
この開示によれば、ユーザは、ＳＱＬ文を記述せずにデーターベース上にテーブルを生成することができる。
【発明の効果】
【００２４】
ある局面において、ＳＱＬ文を記述せずにデーターベース上にテーブルを生成することができる。
【図面の簡単な説明】
【００２５】
【図１】第１の実施の形態に従う制御システムの構成例を示す図である。
【図２】第１の実施の形態における、開発支援装置とコントローラと駆動機器と外部機器との間のデータの流れを示すシーケンス図である。
【図３】第１の実施の形態に従う開発ツールが提供するユーザインターフェイスの一例であるプログラム設計画面を示す図である。
【図４】第１の実施の形態に従う開発ツールが提供するユーザインターフェイスの一例であるテーブル設定画面を示す図である。
【図５】第１の実施の形態におけるＳＱＬ文の生成処理を概略的に示す図である。
【図６】図５に示されるＳＱＬ文に従って生成されたテーブルのデータ構造を示す図である。
【図７】第１の実施の形態に従うテーブルの生成パターン１を概略的に示す図である。
【図８】図７に示されるＳＱＬ文に従って生成されたテーブルのデータ構造を示す図である。
【図９】第１の実施の形態に従うテーブルの生成パターン２を概略的に示す図である。
【図１０】図９に示されるＳＱＬ文から生成されたテーブルのデータ構造を示す図である。
【図１１】第１の実施の形態に従う開発支援装置のハードウェア構成を示す模式図である。
【図１２】第１の実施の形態に従うコントローラのハードウェア構成の一例を示す模式図である。
【図１３】第１の実施の形態に従う外部機器のハードウェア構成を示すブロック図である。
【図１４】第２の実施の形態に従う制御システムの構成例を示す図である。
【図１５】第２の実施の形態に従う生成モジュールによるＳＱＬ文の生成処理を概略的に示す図である。
【図１６】第２の実施の形態における、開発支援装置とコントローラと駆動機器と外部機器との間のデータの流れを示すシーケンス図である。
【図１７】第２の実施の形態におけるＳＱＬ文の生成処理を概略的に示す図である。
【図１８】第２の実施の形態に従う生成モジュールの一例であるテーブル生成ＦＢを示す図である。
【図１９】変形例におけるＳＱＬ文の生成処理を概略的に示す図である。
【図２０】第２の実施の形態に従うマッピングモジュールの一例であるマッピングＦＢを示す図である。
【図２１】第２の実施の形態に従う生成モジュールの一例であるテーブル生成ＦＢを示す図である。
【図２２】第２の実施の形態における生成パターン３を概略的に示す図である。
【図２３】第２の実施の形態における生成パターン４を概略的に示す図である。
【図２４】比較例に従う制御システムによるテーブル生成に係る処理フローを示す図である。
【図２５】第２の実施の形態に従う制御システムによるテーブル生成に係る処理フローを示す図である。
【発明を実施するための形態】
【００２６】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【００２７】
≪第１の実施の形態≫
＜Ａ．適用例＞
図１を参照して、本発明の適用例について説明する。図１は、第１の実施の形態に従う制御システム１０の構成例を示す図である。
【００２８】
制御システム１０は、生産工程を自動化するためのＦＡシステムである。図１の例では、制御システム１０は、１つ以上の開発支援装置１００と、１つ以上のコントローラ２００と、１つ以上の駆動機器３００と、１つ以上の外部機器４００とで構成されている。
【００２９】
開発支援装置１００、コントローラ２００、および外部機器４００は、ネットワークＮＷ１に接続されている。ネットワークＮＷ１には、ＥｔｈｅｒＮＥＴ（登録商標）やＯＰＣ−ＵＡ（Object Linking and Embedding for Process Control Unified Architecture）などが採用される。ＯＰＣ−ＵＡは、ベンダーやＯＳ（Operating System）の種類などに依存することなくデータ交換を実現するために定められた通信の標準規格である。
【００３０】
開発支援装置１００は、たとえば、ノート型またはデスクトップ型のＰＣ（Personal Computer）、タブレット端末、スマートフォン、または、コントローラ２００用の制御プログラムを開発することが可能なその他の情報処理装置である。外部機器４００は、データーベース機能を有するその他のＤＢＭＳ（Database Management System）である。外部機器４００は、たとえば、ノート型またはデスクトップ型のＰＣまたはサーバである。
【００３１】
コントローラ２００および駆動機器３００は、ネットワークＮＷ２に接続されている。ネットワークＮＷ２には、データの到達時間が保証される、定周期通信を行うフィールドネットワークを採用することが好ましい。このような定周期通信を行うフィールドネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００３２】
駆動機器３００は、生産工程を自動化するための種々の産業用機器を含む。一例として、駆動機器３００は、ロボットコントローラ３００Ａや、サーボドライバ３００Ｂや、ロボットコントローラ３００Ａに制御されるアームロボット３０１Ａや、サーボドライバ３００Ｂによって制御されるサーボモータ３０１Ｂなどを含む。また、駆動機器３００は、ワークを撮影するための視覚センサや、生産工程で利用されるその他の機器などを含んでもよい。
【００３３】
開発支援装置１００には、開発ツール３０がインストールされ得る。開発ツール３０は、コントローラ２００用の制御プログラムの開発を支援するためのアプリケーションである。一例として、開発ツール３０は、オムロン社製の「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」である。ユーザは、開発ツール３０上でコントローラ２００用の制御プログラムを設計し、設計した制御プログラムをユーザプログラム２１０としてコントローラ２００にインストールすることができる。ユーザプログラム２１０は、開発支援装置１００によってコンパイルされた実行形式のファイルとしてコントローラ２００に送られる。
【００３４】
開発ツール３０は、ユーザプログラム２１０に含まれる変数の内から収集対象の変数を選択するための選択操作を受け付ける。「変数」とは、ユーザプログラム２１０のソースコードにおいて扱われるデータに与えられた識別子である。典型的には、「変数」は、コントローラ２００や駆動機器３００の状態を表わすデータである。異なる言い方をすれば、「変数」とは、コントローラ２００や駆動機器３００の各構成の状態に連動して値が変化するデータのことをいう。「変数」との概念は、一つの値を表わすデータ、配列として表されるデータ、構造体として表されるデータ、ユーザプログラム２１０に規定され得る種々のデータを含み得る。
【００３５】
収集対象として選択された変数は、ユーザプログラム２１０の実行中に収集され、外部機器４００のデーターベース４３０に定期的にアップロードされる。データーベース４３０にデータをアップロードするためには、データーベース４３０上に予めテーブル４３２を登録しておく必要がある。テーブル４３２とは、データ管理のためのモデルである。テーブル４３２は、列を示すカラムと行を示すレコードとで表される。各カラムにデータがセットされた上で、データは、レコード単位でテーブル４３２にアップロードされる。
【００３６】
本実施の形態においては、設計者は、テーブル４３２を生成するための操作を開発ツール３０に対して行うことができる。より具体的には、開発ツール３０は、ユーザプログラム２１０に含まれる変数の内から収集対象の変数を指定するための設定を受け付けるように構成されている。また、開発ツール３０は、収集対象の各変数のデータ型に対応するデーターベース４３０上でのデータ型を指定するための設定を受け付けるように構成されている。また、開発ツール３０は、収集対象の各変数についてデーターベース４３０上での識別名を指定するための設定を受け付けるように構成されている。これらの設定は、たとえば、後述のテーブル設定画面３３（図４参照）に対して行われる。テーブル設定画面３３の詳細については後述する。
【００３７】
図１の例では、ユーザプログラム２１０に含まれる変数「Ａ」，「Ｂ」が収集対象として指定されている。変数「Ａ」は、「Ｉｎｔ」型の変数である。変数「Ｂ」は、「ｂｏｏｌ」型の変数である。また、変数「Ａ」に対応するデーターベース４３０での識別名としてカラム名「Ａ’」が指定されている。変数「Ｂ」に対応するデーターベース４３０での識別名としてカラム名「Ｂ’」が指定されている。また、変数「Ａ」のデータ型「Ｉｎｔ」に対応するデーターベース４３０上でのデータ型として「Ｎｕｍｂｅｒ（１０）」が指定されている。また、変数「Ｂ」のデータ型「ｂｏｏｌ」に対応するデーターベース４３０上でのデータ型として「Ｎｕｍｂｅｒ（１）」が指定されている。
【００３８】
これらの対応関係は、設定情報２１２としてコントローラ２００に送られる。コントローラ２００は、制御装置２０２と、記憶装置２０８とを含む。制御装置２０２は、機能構成として、生成モジュール２５０と、プログラム実行モジュール２５２とを含む。記憶装置２０８は、開発支援装置１００から受信したユーザプログラム２１０と設定情報２１２とを格納している。
【００３９】
プログラム実行モジュール２５２は、ユーザプログラム２１０の実行開始命令を受け付けたことに基づいて、ユーザプログラム２１０の実行を開始する。その後、プログラム実行モジュール２５２は、ユーザプログラム２１０に規定される制御命令に従って駆動機器３００を制御する。プログラム実行モジュール２５２は、ユーザプログラム２１０の実行結果に従って変数の値を逐次更新する。
【００４０】
生成モジュール２５０は、設定情報２１２に規定されるデーターベース４３０上での識別名と、当該識別名に対応するデーターベース４３０上でのデータ型とに基づいて、収集対象の変数の格納先となるテーブル４３２をデーターベース４３０上に生成するためのＳＱＬ文２３０を出力する。図１の例では、ＳＱＬ文２３０は、「Ｎｕｍｂｅｒ（１０）」型のカラム「Ａ’」と「Ｎｕｍｂｅｒ（１）」型のカラム「Ｂ’」とを含むテーブル４３２を構成するように規定されている。
【００４１】
生成されたＳＱＬ文２３０は、外部機器４００に転送される。ＤＢＭＳとしての外部機器４００は、コントローラ２００から受信したＳＱＬ文２３０を解釈し、ＳＱＬ文２３０に従ってデーターベース４３０上にテーブル４３２を生成する。図１の例では、カラム「Ａ’」，「Ｂ’」を含むテーブル４３２がデーターベース４３０上に生成される。
【００４２】
以上のようにして、開発支援装置１００は、収集対象の変数を指定するための設定と、収集対象の各変数のデータ型に対応するデーターベース４３０上でのデータ型を指定するための設定と、収集対象の各変数についてデーターベース４３０上での識別名を指定するための設定とを受け付けるように構成されている。コントローラ２００は、これらの設定に基づいて、データーベース４３０上にテーブル４３２を生成するためのＳＱＬ文２３０を外部機器４００に出力する。これにより、外部機器４００のデーターベース４３０上にテーブル４３２が生成される。このように、ユーザは、テーブル４３２を生成するにあたってＳＱＬ文２３０を記述する必要がない。そのため、ＳＱＬの知識がないユーザであってもデーターベース４３０を容易に構築することできる。
【００４３】
なお、上述では、ユーザプログラム２１０に含まれる変数を元にテーブル４３２を生成する例について説明を行ったが、生成モジュール２５０は、ユーザプログラム２１０に含まれる変数以外にも、コントローラ２００内の各種制御プログラムに含まれる変数を元にテーブル４３２を生成してもよい。
【００４４】
また、図１には、ユーザプログラム２１０および設定情報２１２が別個のデータとしてコントローラ２００に転送されている例が示されているが、ユーザプログラム２１０および設定情報２１２は、一体的なデータとして転送されてもよい。また、設定情報２１２は、ユーザプログラム２１０と同一のタイミングで転送されてもよいし異なるタイミングで転送されてもよい。
【００４５】
また、図１の例では、データーベース４３０が外部機器４００に存在する例について説明を行ったが、データーベース４３０は、必ずしも、外部機器４００に存在する必要はない。たとえば、データーベース４３０は、コントローラ２００の内部に存在していてもよい。あるいは、データーベース４３０は、コントローラ２００の内部バスに繋がれた別ユニットの内部に存在していてもよい。
【００４６】
＜Ｂ．シーケンスフロー＞
図２〜図６を参照して、テーブル４３２の生成処理に係る処理フローについて説明する。図２は、開発支援装置１００とコントローラ２００と駆動機器３００と外部機器４００との間のデータの流れを示すシーケンス図である。
【００４７】
ステップＳ１０において、開発支援装置１００は、開発ツール３０の起動命令を受け付けたとする。このことに基づいて、開発支援装置１００は、プログラム設計画面を表示する。図３は、開発ツール３０が提供するユーザインターフェイスの一例であるプログラム設計画面３１を示す図である。プログラム設計画面３１は、たとえば、開発支援装置１００の表示部１２１に表示される。
【００４８】
ユーザプログラム２１０は、任意のプログラミング言語で記述され得る。一例として、ユーザプログラム２１０は、ラダーダイアグラム（ＬＤ：Ladder Diagram）で規定されてもよいし、命令リスト（ＩＬ：Instruction List）、構造化テキスト（ＳＴ：Structured Text）、および、シーケンシャルファンクションチャート（ＳＦＣ：Sequential Function Chart）のいずれか、あるいは、これらの組み合わせで規定される。あるいは、ユーザプログラム２１０は、ＪａｖａＳｃｒｉｐｔ（登録商標）やＣ言語のような汎用的なプログラミング言語で規定されていてもよい。
【００４９】
図３の例では、ユーザプログラム２１０は、ラダーダイアグラムで記述されている。設計者は、プログラム設計画面３１上で、任意のファンクションブロックを組み合わせたり、変数やファンクションブロックの入出力関係を規定することで、制御対象の駆動機器３００に合わせたユーザプログラム２１０を設計することができる。ファンクションブロックとは、ユーザプログラム２１０内で繰り返し使用される機能が部品化されたものである。
【００５０】
図３の例では、ユーザプログラム２１０は、変数Ａ〜Ｃと、ファンクションブロックＦＢ１，ＦＢ２とを含む。ファンクションブロックＦＡ１は、その入力部に関連付けられている変数Ａの値に基づいて、ファンクションブロックＦＢ１に規定されている予め定められた機能を実行する。当該実行結果は、ファンクションブロックＦＡ１の出力部に関連付けられている変数Ｂに反映される。ファンクションブロックＦＢ２は、その入力部に関連付けられている変数Ｂの値に基づいて、ファンクションブロックＦＢ２に規定されている予め定められた機能を実行する。当該実行結果は、ファンクションブロックＦＡ２の出力部に関連付けられている変数Ｃに反映される。このように、設計者は、プログラム設計画面３１上で、変数やファンクションブロックを組み合わせることで、任意のユーザプログラム２１０を設計することができる。
【００５１】
再び図２を参照して、ステップＳ１４において、開発ツール３０は、テーブル生成に関するテーブル設定画面の呼び出し操作を受け付けたとする。このことに基づいて、開発ツール３０は、テーブル設定画面を表示する。
【００５２】
図４は、開発ツール３０が提供するユーザインターフェイスの一例であるテーブル設定画面３３を示す図である。テーブル設定画面３３は、テーブル生成のための各種設定を受け付ける。
【００５３】
より具体的には、テーブル設定画面３３は、データーベースへの接続情報の設定欄３５と、テーブル名の設定欄３６と、収集対象の変数を指定するための設定欄４１と、収取対象の変数のデータ型を表示するための表示欄４２と、データーベース上でのデータの識別名を指定するための設定欄４５と、データーベース上でのデータ型を指定するための設定欄４６と、主キーを指定するための設定欄５０と、ｎｕｌｌ指定の許可／禁止を指定するための設定欄５１を含む。
【００５４】
設定欄３５は、データーベースへの接続情報の指定を受け付ける。各コネクション情報は、ユーザなどによって予め設定されている。コネクション情報には、コネクション名、接続対象のデーターベースタイプ、接続先アドレスデータベース名、ユーザ名、パスワードなどが規定されている。ユーザがボタン３５Ａを押下することで、各コネクション情報に規定されているデーターベースタイプが一覧表示される。データーベースタイプの種類としては、たとえば、「Ｏｒａｃｌｅ  Ｄａｔａｂａｓｅ」、「ＳＱＬ  Ｓｅｒｖｅｒ」、「ＭｙＳＱＬ（登録商標）」、「Ｆｉｒｅｂｉｒｄ」、「ＤＢ２（登録商標）」、「ＰｏｓｔｇｒｅＳＱＬ」などが挙げられる。ユーザは、データーベースタイプの一覧から一のデーターベースタイプを選択することでデーターベースへの接続情報を指定することができる。
【００５５】
設定欄３６は、生成対象のテーブル４３２についてのテーブル名の入力を受け付ける。設定欄３６は、たとえば、テキストボックスであり、テーブル名は、文字入力により設定される。図４の例では、テーブル名として「ＴＡＢＬＥ１」が設定されている。
【００５６】
設定欄４１は、収集対象の変数の指定を受け付ける。典型的には、ユーザがボタン４１Ａを押下することで、ユーザプログラム２１０で定義さている構造体名（変数名）が一覧表示される。一覧表示される構造体名は、ユーザによって予め登録されていてもよいし、ユーザプログラム２１０から自動で抽出されてもよい。ユーザは、構造体名の一覧から一の構造体名を選択することで構造体に含まれる変数を収集対象として指定することができる。
【００５７】
表示欄４２は、設定欄４１で設定された収集対象の各変数のデータ型を表示する。各変数に対応するデータ型は、たとえば、上述のプログラム設計画面３１（図３参照）において変数を登録するときなどに設定され、この設定時におて、変数とデータ型との対応関係が保存される。開発ツール３０は、収集対象の変数が設定欄４１で選択されたことに基づいて、変数とデータ型との対応関係から当該選択された変数に対応するデータ型を特定し、当該データ型を当該変数に並べて表示する。
【００５８】
設定欄４５は、設定欄４１で設定された収集対象の各変数について、データーベース４３０上での識別名を指定するための設定を受け付ける。設定欄４５に設定された識別名は、テーブルのカラム名となる。設定欄４５は、たとえば、テキストボックスであり、ユーザは、各テキストボックスに文字入力を行うことで各変数に対応するカラム名を設定することができる。
【００５９】
好ましくは、テーブルのカラム名は、自動で決定される。一例として、カラム名は、変数名と同じになるように決定される。あるいは、変数名に予め定められたキーワードを付加したものがカラム名として決定される。カラム名が自動で設定される場合には、ユーザは、設定欄４５にカラム名を設定する必要はない。
【００６０】
設定欄４６は、設定欄４１で設定された各変数についてデーターベース４３０上でのデータ型を指定するための設定を受け付ける。一例として、ユーザがボタン４６Ａを押下することで、設定可能なデータ型が一覧表示される。ユーザは、データ型の一覧から一のデータ型を選択することでデーターベース４３０上でのデータ型を指定することができる。
【００６１】
好ましくは、データーベース４３０上でのデータ型は、自動で決定される。より具体的には、ユーザプログラム２１０で利用され得る各データ型と、データーベース４３０上でのデータ型との対応関係が予め規定されている。開発ツール３０は、当該対応関係に基づいて、収集対象の各変数のデータ型に対応するデーターベース４３０上でのデータ型を特定し、当該データ型を設定欄４６に表示する。この場合には、ユーザは、設定欄４６にデータ型を設定する必要はない。
【００６２】
設定欄５０は、テーブル４３２上で主キーとしてみなす変数を指定するための設定を受け付ける。主キーとは、テーブル４３２内のレコードを一意に識別するためのものである。主キーとして設定された変数については、データの重複が許されない。主キーの設定態様の一例として、ユーザがボタン５０Ａを押下することで、「ＹＥＳ」および「ＮＯ」が表示される。「ＹＥＳ」が選択されたカラムは、主キーとして設定される。「ＮＯ」が選択されたカラムは、主キーとして設定されない。
【００６３】
設定欄５１は、各カラムに対してＮＵＬＬの入力を許容するか否かの設定を受け付ける。設定態様の一例として、ユーザがボタン５１Ａを押下することで、「ＹＥＳ」および「ＮＯ」が表示される。「ＹＥＳ」が選択されたカラムについては、ＮＵＬＬの入力が禁止される。「ＮＯ」が選択されたカラムについては、ＮＵＬＬの入力が許容される。
【００６４】
テーブル生成ボタン５８が押下された場合には、開発支援装置１００は、テーブル設定画面３３に対して行われたテーブル設定を設定情報２１２としてコントローラ２００に転送する。テーブル設定画面３３のキャンセルボタン５９が押下された場合には、開発支援装置１００は、テーブル設定画面３３に設定されたテーブル設定を転送せずにテーブル設定画面３３を閉じる。
【００６５】
再び図２を参照して、ステップＳ２０において、テーブル生成ボタン５８が押下されたとする。このことに基づいて、開発支援装置１００は、テーブル設定画面３３に対して行われたテーブル設定を設定情報２１２としてコントローラ２００に転送する。
【００６６】
ステップＳ２２において、コントローラ２００の生成モジュール２５０は、開発支援装置１００から設定情報２１２を受信したことに基づいて、テーブル生成のためのＳＱＬ文２３０（図１参照）を生成する。なお、ステップＳ２２では、ＳＱＬ文２３０がコントローラ２００によって生成される例について示されているが、ＳＱＬ文２３０は、開発ツール３０によって生成されてもよい。
【００６７】
図５を参照して、生成モジュール２５０によるＳＱＬ文２３０の生成処理について説明する。図５は、ＳＱＬ文２３０の生成処理を概略的に示す図である。
【００６８】
図５に示されるように、生成モジュール２５０は、設定情報２１２を入力として、ＳＱＬ文２３０を生成する。より具体的には、生成モジュール２５０は、設定情報２１２に含まれるテーブル名「ＴＡＢＬＥ１」を参照して、「Ｃｒｅａｔｅ  Ｔａｂｌｅ  ＴＡＢＬＥ１」との記述をＳＱＬ文２３０に反映する。この記述により、生成されるテーブル４３２のテーブル名が「ＴＡＢＬＥ１」となる。
【００６９】
次に、生成モジュール２５０は、設定情報２１２に含まれる識別名「Ａ’」と、識別名「Ａ’」に対応付けられているデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０に反映する。この記述により、識別名「Ａ’」のカラムがテーブル４３２に追加される。また、識別名「Ａ’」については、ＮＵＬＬ指定が禁止されているので、「ＮＯＴ  ＮＵＬＬ」との記述をＳＱＬ文２３０に反映する。同様に、生成モジュール２５０は、識別名「Ｂ’」〜「Ｆ’」のカラムを追加するための記述をＳＱＬ文２３０に反映する。
【００７０】
次に、設定情報２１２において識別名「Ａ’」、「Ｂ’」のカラムを主キーとして設定することが規定されているので、生成モジュール２５０は、「ＰＲＩＭＡＲＹ  ＫＥＹ  （Ａ’、Ｂ’）」との記述をＳＱＬ文２３０に追加する。この記述により、識別名「Ａ’」、「Ｂ’」のカラムが主キーとして設定される。
【００７１】
生成されたＳＱＬ文２３０は、外部機器４００に送信される。再び図２を参照して、ステップＳ２４において、外部機器４００は、コントローラ２００から受信したＳＱＬ文２３０に従ってテーブル４３２を生成する。
【００７２】
図６は、図５に示されるＳＱＬ文２３０に従って生成されたテーブル４３２のデータ構造を示す図である。図６に示されるように、テーブル４３２は、識別名「Ａ’」〜「Ｆ’」のカラムで構成されている。「＊」印は、主キーを表わす。図６の例では、カラム「Ａ’」，「Ｂ’」が主キーとして示されている。
【００７３】
再び図２を参照して、ステップＳ３０において、開発ツール３０は、コンパイル操作を受け付けたとする。このことに基づいて、開発ツール３０は、プログラム設計画面３１上で設計されたユーザプログラム２１０をコンパイルする。その後、開発ツール３０は、コンパイル結果のダウンロード操作を受け付けたとする。このことに基づいて、開発ツール３０は、コンパイルされたユーザプログラム２１０をコントローラ２００に転送する。コントローラ２００は、受信したユーザプログラム２１０を記憶装置２０８（図１参照）に保存する。
【００７４】
ステップＳ３２において、コントローラ２００は、ユーザプログラム２１０の実行命令を受け付けたとする。このことに基づいて、コントローラ２００は、ユーザプログラム２１０の実行を開始する。ユーザプログラム２１０がサイクリック実行型のプログラムである場合、コントローラ２００は、予め定められた制御周期ごとにユーザプログラム２１０に含まれる命令群を繰り返し実行する。より具体的には、コントローラ２００は、ユーザプログラム２１０の先頭行から最終行までを１制御周期で実行する。その次の制御周期では、コントローラ２００は、再び、ユーザプログラム２１０の先頭行から最終行までを実行する。コントローラ２００は、制御周期ごとに指令値を生成し、当該指令値を駆動機器３００に出力する。
【００７５】
ステップＳ５０において、コントローラ２００は、ユーザプログラム２１０に規定される指令値の生成処理の実行命令を受け付けたか否かを判断する。コントローラ２００は、当該実行命令を受け付けたと判断した場合（ステップＳ５０においてＹＥＳ）、規定されている命令に従って指令値を生成し、当該指令値を駆動機器３００に送る（ステップＳ５２）。駆動機器３００は、コントローラ２００から受信した指令値に従って制御対象を駆動する。コントローラ２００は、指令値の生成処理の実行命令を受け付けたと判断しなかった場合（ステップＳ５０においてＮＯ）、コントローラ２００は、ステップＳ５２の処理を実行せずに、制御をステップＳ６０に切り替える。
【００７６】
ステップＳ６０において、コントローラ２００は、収集対象の変数のアップロード処理の実行命令を受け付けたか否かを判断する。コントローラ２００は、当該実行命令を受け付けたと判断した場合（ステップＳ６０においてＹＥＳ）、ＩＮＳＥＲＴ命令を実行するためのＳＱＬ文を生成する。当該ＳＱＬ文には、追加先のテーブルを指定するための情報（たとえば、テーブル名）や、各カラムにアップロードするデータの値などが規定される。
【００７７】
ステップＳ６２において、コントローラ２００は、生成したＳＱＬ文を外部機器４００に送る。外部機器４００は、コントローラ２００から受信したＳＱＬ文に従って各カラムに変数値を反映したレコードを生成し、ステップＳ２４で生成されたテーブル４３２に生成したレコードを追加する。これにより、収集対象の変数がテーブル４３２に反映される。その後、外部機器４００は、正常終了または異常終了を示すアップロード結果をコントローラ２００に送信する。
【００７８】
コントローラ２００は、収集対象の変数のアップロード処理の実行命令を受けていない場合（ステップＳ６０においてＮＯ）、ステップＳ６２の処理を実行せずに、処理をステップＳ７０に切り替える。
【００７９】
ステップＳ７０において、コントローラ２００は、ユーザプログラム２１０の実行を終了するか否かを判断する。当該終了命令は、たとえば、ユーザから終了操作を受け付けたことに基づいて発せられる。コントローラ２００は、ユーザから終了操作を受け付けたと判断した場合（ステップＳ７０においてＹＥＳ）、ユーザプログラム２１０の実行を終了する。そうでない場合には（ステップＳ７０においてＮＯ）、コントローラ２００は、制御をステップＳ５０に戻す。
【００８０】
なお、上述では、ステップＳ６２において、ＩＮＳＥＲＴ命令のＳＱＬ文がコントローラ２００から外部機器４００のデーターベース４３０に送信される例について説明を行ったが、ＩＮＳＥＲＴする値のみが外部機器４００のデーターベース４３０に送られてもよい。この場合、外部機器４００は、ＩＮＳＥＲＴする値を受信したことに基づいて、ＩＮＳＥＲＴ命令のＳＱＬ文を生成し、当該ＳＱＬ文に基づいて受信した値のＩＮＳＥＲＴ処理を実行する。
【００８１】
＜Ｃ．生成モジュール２５０による生成パターン＞
収集対象の変数には、構造体が含まれる場合がある。生成モジュール２５０は、収集対象の変数に構造体が含まれる場合には、そうではない場合と異なる態様でテーブル生成のためのＳＱＬ文２３０を生成する。収集対象の変数に構造体が含まれる場合におけるテーブル４３２の生成処理として、たとえば、２つの生成パターン（生成パターン１，２）が考えられる。
【００８２】
生成パターン１においては、生成モジュール２５０は、構造体ではない変数を管理するためのテーブルと、構造体に含まれるメンバ変数を管理するためのテーブルとを別々に生成する。生成パターン２においては、生成モジュール２５０は、構造体ではない変数と構造体に含まれるメンバ変数とを共通に管理するための１つのテーブルを生成する。
【００８３】
以下では、図７〜図１０を参照して、第１の実施の形態における生成パターン１，２について順に説明する。
【００８４】
（Ｃ１．テーブルの生成パターン１）
まず、第１の実施の形態に従うテーブルの生成パターン１について説明する。図７は、第１の実施の形態に従うテーブルの生成パターン１を概略的に示す図である。
【００８５】
上述の開発ツール３０（図４参照）は、収集対象として指定された変数に構造体が含まれている場合には、構造体ではない変数だけでなく構造体に含まれる各メンバについても、データーベース４３０上でのデータ型の指定と、データーベース４３０上での識別名の指定とを受け付ける。
【００８６】
たとえば、上述のテーブル設定画面３３（図４参照）において、構造体「Ｃ」が収集対象として指定されたとする。構造体「Ｃ」がメンバ変数「α」，「β」，「γ」を含む場合、ユーザは、メンバ変数「α」，「β」，「γ」についても、データーベース４３０上でのデータ型の指定と、データーベース４３０上での識別名（カラム名）の指定とを受け付ける。一例として、メンバ変数「α」に対してはデータ型「Ｎｕｍｂｅｒ（５）」のカラム「α’」が設定され、メンバ変数「β」に対してはデータ型「Ｎｕｍｂｅｒ（５）」のカラム「β’」が設定され、メンバ変数「γ」に対してはデータ型「Ｎｕｍｂｅｒ（５）」のカラム「γ’」が設定されたとする。これらの設定の結果、図７に示される設定情報２１２が生成される。
【００８７】
本生成例においては、図７に示されるように、コントローラ２００の生成モジュール２５０は、設定情報２１２を入力として、構造体の各メンバについて決定された識別名を別のテーブルに登録するようにＳＱＬ文を生成する。図７の例では、生成モジュール２５０は、設定情報２１２を入力として、「ＴＡＢＬＥ１」を生成するためのＳＱＬ文２３０Ａと、「ＴＡＢＬＥ２」を生成するためのＳＱＬ文２３０Ｂとを生成している。
【００８８】
より具体的には、生成モジュール２５０は、設定情報２１２に含まれる識別名「Ａ’」と、識別名「Ａ’」に対応付けられているデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０Ａに反映する。この記述により、識別名「Ａ’」のカラムがテーブルに追加される。また、識別名「Ａ’」については、ＮＵＬＬ指定が禁止されているので、「ＮＯＴ  ＮＵＬＬ」との記述をＳＱＬ文２３０Ａに反映する。同様に、生成モジュール２５０は、識別名「Ｂ’」のカラムを追加するための記述をＳＱＬ文２３０Ａに反映する。
【００８９】
構造体「Ｃ」については、生成モジュール２５０は、構造体名に対応するカラム名「Ｃ’」を新たに生成する。カラム名「Ｃ’」は、構造体名と同じであってもよいし、異なっていてもよい。その後、生成モジュール２５０は、「Ｃ’  Ｎｕｍｂｅｒ（５）」との記述をＳＱＬ文２３０Ａに反映する。これにより、識別名「Ｃ’」のカラムがテーブルに追加される。
【００９０】
また、生成モジュール２５０は、構造体のカラム名を外部キーとしてテーブルに登録するための命令コードをＳＱＬ文２３０Ａに含める。図７の例では、「ＦＯＲＥＩＧＮ  ＫＥＹ（Ｃ’）  ＲＥＦＥＲＥＮＣＥＳ  ＴＡＢＬＥ２」との記述がＳＱＬ文２３０Ａに追加されている。この記述により、カラム「Ｃ’」が「ＴＡＢＬＥ２」を参照する外部キーとして規定される。
【００９１】
続いて、生成モジュール２５０は、構造体「Ｃ」に含まれるメンバ変数「α」，「β」，「γ」については、カラム「Ｃ’」，「α’」，「β’」，「γ’」を追加するための記述をＳＱＬ文２３０Ａとは別のＳＱＬ文２３０Ｂに反映する。図７の例では、「Ｃ’  Ｎｕｍｂｅｒ（５）」との記述と、「α’  Ｎｕｍｂｅｒ（５）」との記述と、「β’  Ｎｕｍｂｅｒ（５）」との記述と、「γ’  Ｎｕｍｂｅｒ（５）」との記述とがＳＱＬ文２３０Ｂに反映されている。これらの記述により、識別名「Ｃ’」，「α’」，「β’」，「γ’」のカラムが別テーブルに追加される。このとき、構造体名「Ｃ」に付けられたカラム名「Ｃ’」については、「ＰＲＩＭＡＲＹ  ＫＥＹ  （Ｃ’）」との記述をＳＱＬ文２３０Ｂに追加する。この記述により、識別名「Ｃ’」のカラムが主キーとして設定される。
【００９２】
図８は、図７に示されるＳＱＬ文２３０Ａに従って生成されたテーブル４３２Ａと、図７に示されるＳＱＬ文２３０Ｂに従って生成されたテーブル４３２Ｂとのデータ構造を示す図である。
【００９３】
テーブル４３２Ａは、識別名「Ａ’」，「Ｂ’」，「Ｃ’」のカラムで構成されている。「＊」印は、主キーを表わす。図８の例では、カラム「Ａ’」，「Ｂ’」が主キーとして示されている。また、カラム「Ｃ’」は、外部の「ＴＡＢＬＥ２」を参照している。
【００９４】
テーブル４３２Ｂは、識別名「Ｃ’」，「α’」，「β’」，「γ’」のカラムで構成されている。「＊」印は、主キーを表わす。図８の例では、カラム「Ｃ’」が主キーとして示されている。
【００９５】
このように、本生成例においては、生成モジュール２５０は、構造体ではない変数を管理するためのテーブル４３２Ａと、構造体に含まれるメンバ変数を管理するためのテーブル４３２Ｂとを別々に生成する。
【００９６】
なお、図７および図８では、収集対象の変数に１つの構造体が含まれている例について説明を行ったが、収集対象の変数に複数の構造体が含まれている場合には、構造体の数に応じてテーブルが生成されるようにＳＱＬ文が生成される。また、構造体のメンバに構造体が含まれている場合には、各構造体についてテーブルが生成されるようにＳＱＬ文が生成される。
【００９７】
また、上述の図７および図８の例では、収集対象の変数に構造体が含まれている場合に、当該構造体の名前がテーブル４３２Ａの外部キーおよびテーブル４３２Ｂの主キーとして登録される例について説明を行ったが、当該構造体の名前がテーブル４３２Ａの外部キーおよびテーブル４３２Ｂの主キーとして必ずしも登録される必要はない。一例として、当該構造体の１つ以上のメンバがテーブル４３２Ａの外部キーおよびテーブル４３２Ｂの主キーとして登録されてもよい。一例として、構造体「Ｃ」のメンバ「Ｃ．α」が、テーブル４３２Ａの外部キーとして登録されるとともに、テーブル４３２Ｂの主キーとして登録される。この場合には、構造体「Ｃ」自体がテーブル４３２Ａ，４３２Ｂのカラムとして登録される必要はない。
【００９８】
（Ｃ２．テーブルの生成パターン２）
次に、図９および図１０を参照して、収集対象の変数に構造体が含まれている場合におけるテーブル４３２の生成パターン２について説明する。
【００９９】
図９は、第１の実施の形態に従うテーブルの生成パターン２を概略的に示す図である。図９に示されるように、コントローラ２００の生成モジュール２５０は、設定情報２１２を入力としてＳＱＬ文２３０を生成する。
【０１００】
設定情報２１２には、構造体「Ｃ」が収集対象の変数として規定されているとする。構造体「Ｃ」は、メンバ変数として、変数「α」，「β」，「γ」を含む。本生成例においては、生成モジュール２５０は、構造体ではない変数と、構造体に含まれるメンバ変数とを共通に管理するための１つのテーブル４３２を生成する。
【０１０１】
より具体的には、生成モジュール２５０は、設定情報２１２に含まれる識別名「Ａ’」と、識別名「Ａ’」に対応付けられているデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０に反映する。この記述により、識別名「Ａ’」のカラムがテーブル４３２に追加される。また、識別名「Ａ’」については、ＮＵＬＬ指定が禁止されているので、「ＮＯＴ  ＮＵＬＬ」との記述をＳＱＬ文２３０に反映する。同様に、生成モジュール２５０は、識別名「Ｂ’」のカラムを追加するための記述をＳＱＬ文２３０に反映する。また、構造体「Ｃ」のメンバ変数「α」，「β」，「γ」については、生成モジュール２５０は、変数「Ａ」，「Ｂ」と同様に、識別名「α’」，「β’」，「γ’」のカラムを追加するための記述をＳＱＬ文２３０に反映する。
【０１０２】
図１０は、図９に示されるＳＱＬ文２３０から生成されたテーブル４３２のデータ構造を示す図である。
【０１０３】
テーブル４３２は、識別名「Ａ’」，「Ｂ’」，「Ｃ’」，「α’」，「β’」，「γ’」のカラムで構成されている。「＊」印は、主キーを表わす。図１０の例では、カラム「Ａ’」，「Ｂ’」が主キーとして示されている。
【０１０４】
このように、本生成例においては、生成モジュール２５０は、構造体ではない変数と、構造体に含まれるメンバ変数とを共通に管理するための１つのテーブル４３２を生成する。
【０１０５】
＜Ｄ．ハードウェア構成＞
図１１〜図１３を参照して、開発支援装置１００、コントローラ２００、および外部機器４００のハードウェア構成について順に説明する。
【０１０６】
（Ｄ１．開発支援装置１００のハードウェア構成）
まず、図１１を参照して、開発支援装置１００のハードウェア構成について説明する。図１１は、開発支援装置１００のハードウェア構成を示す模式図である。
【０１０７】
開発支援装置１００は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。開発支援装置１００は、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などの制御装置１０２と、主メモリ１０４と、不揮発性の記憶装置１１０と、通信インターフェイス１１１と、Ｉ／Ｏ（Input/Output）インターフェイス１１４と、表示インターフェイス１２０とを含む。これらのコンポーネントは、内部バス１２５を介して互いに通信可能に接続されている。
【０１０８】
制御装置１０２は、記憶装置１１０に格納されている開発支援プログラム１１０Ａを主メモリ１０４に展開して実行することで、開発ツール３０における各種処理を実現する。開発支援プログラム１１０Ａは、ユーザプログラム２１０の開発環境を提供するためのプログラムである。記憶装置１１０は、開発支援プログラム１１０Ａの他にも、開発ツール３０で生成された各種データなどを格納する。当該データは、たとえば、開発ツール３０上で設計された上述のユーザプログラム２１０や、上述の設定情報２１２などを含む。
【０１０９】
通信インターフェイス１１１は、他の通信機器との間でネットワークを介してデータを遣り取りする。当該他の通信機器は、たとえば、コントローラ２００、外部機器４００、サーバなどを含む。開発支援装置１００は、通信インターフェイス１１１を介して、当該他の通信機器から、開発支援プログラム１１０Ａなどの各種プログラムをダウンロード可能なように構成されてもよい。
【０１１０】
Ｉ／Ｏインターフェイス１１４は、操作部１１５に接続され、操作部１１５からのユーザ操作を示す信号を取り込む。操作部１１５は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。
【０１１１】
表示インターフェイス１２０は、表示部１２１と接続され、制御装置１０２などからの指令に従って、表示部１２１に対して、画像を表示するための画像信号を送出する。表示部１２１は、ＬＣＤ（Liquid Crystal Display）や有機ＥＬ（Electro Luminescence）ディスプレイなどからなり、ユーザに対して各種情報を提示する。表示部１２１には、開発ツール３０によって提供される各種画面（たとえば、上述のプログラム設計画面３１や上述のテーブル設定画面３３）が表示され得る。図１１の例では、開発支援装置１００および表示部１２１が別体として示されているが、開発支援装置１００および表示部１２１は、一体的に構成されてもよい。
【０１１２】
（Ｄ２．コントローラ２００のハードウェア構成）
次に、図１２を参照して、コントローラ２００のハードウェア構成について説明する。図１２は、コントローラ２００のハードウェア構成の一例を示す模式図である。
【０１１３】
コントローラ２００は、通信インターフェイス２０１と、ＣＰＵやＭＰＵなどの制御装置２０２と、チップセット２０４と、主メモリ２０６と、不揮発性の記憶装置２０８と、内部バスコントローラ２２２と、フィールドバスコントローラ２２４と、メモリカードインターフェイス２３９とを含む。
【０１１４】
制御装置２０２は、記憶装置２０８に格納された制御プログラム２１１を読み出して、主メモリ２０６に展開して実行することで、ロボットコントローラ３００Ａやサーボドライバ３００Ｂなどに対する任意の制御を実現する。制御プログラム２１１は、コントローラ２００を制御するための各種プログラムを含む。一例として、制御プログラム２１１は、システムプログラム２０９およびユーザプログラム２１０などを含む。システムプログラム２０９は、データの入出力処理や実行タイミング制御などの、コントローラ２００の基本的な機能を提供するための命令コードを含む。ユーザプログラム２１０は、開発支援装置１００からダウンロードされたものである。ユーザプログラム２１０は、制御対象に応じて任意に設計され、シーケンス制御を実行するためのシーケンスプログラム２１０Ａおよびモーション制御を実行するためのモーションプログラム２１０Ｂとを含む。
【０１１５】
チップセット２０４は、各コンポーネントを制御することで、コントローラ２００全体としての処理を実現する。
【０１１６】
記憶装置２０８は、制御プログラム２１１の他にも種々のデータを格納する。一例として、記憶装置２０８は、上述の設定情報２１２やデータ型の対応関係２１３などを格納する。データ型の対応関係２１３の詳細については後述の「第２の実施の形態」で説明する。
【０１１７】
内部バスコントローラ２２２は、コントローラ２００と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、Ｉ／Ｏユニット２２６が接続されている。
【０１１８】
フィールドバスコントローラ２２４は、コントローラ２００とフィールドバスを通じて連結される各種の駆動機器３００とデータを遣り取りするインターフェイスである。このようなデバイスの一例として、ロボットコントローラ３００Ａやサーボドライバ３００Ｂが接続されている。他にも、視覚センサなどの駆動機器が接続されてもよい。
【０１１９】
内部バスコントローラ２２２およびフィールドバスコントローラ２２４は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータを取得することができる。また、内部バスコントローラ２２２および／またはフィールドバスコントローラ２２４は、ロボットコントローラ３００Ａやサーボドライバ３００Ｂとの間でデータを遣り取りするためのインターフェイスとしても機能する。
【０１２０】
通信インターフェイス２０１（通信部）は、各種の有線／無線ネットワークを通じたデータの遣り取りを制御する。コントローラ２００は、通信インターフェイス２０１を介して、開発支援装置１００や外部機器４００と通信を行う。また、コントローラ２００は、通信インターフェイス２０１を介して、外部機器４００上のデーターベース４３０にアクセスすることができる。
【０１２１】
メモリカードインターフェイス２３９は、外部記憶媒体の一例であるメモリカード２４０（たとえば、ＳＤカード）を着脱可能に構成されており、メモリカード２４０に対してデータを書き込み、メモリカード２４０からデータを読出すことが可能になっている。
【０１２２】
（Ｄ３．外部機器４００のハードウェア構成）
次に、図１３を参照して、外部機器４００のハードウェア構成について説明する。図１３は、外部機器４００のハードウェア構成を示すブロック図である。
【０１２３】
外部機器４００は、汎用的なアーキテクチャを有するハードウェア構成を有している。すなわち、外部機器４００は、一種のパーソナルコンピュータとして実装される。但し、外部機器４００を汎用的なハードウェアではなく、専用ハードウェアを用いて実装してもよい。
【０１２４】
より具体的には、外部機器４００は、ＣＰＵやＭＰＵなどの制御装置４０２と、主メモリ４０４と、不揮発性の記憶装置４１０と、通信インターフェイス４１２と、Ｉ／Ｏインターフェイス４１４と、表示インターフェイス４２０とを含む。これらのコンポーネントは、内部バス４２５を介して、互いにデータ通信可能に接続されている。
【０１２５】
制御装置４０２は、記憶装置４１０に格納された制御プログラム（図示しない）を読み出して、主メモリ４０４に展開して実行することで、外部機器４００を制御する。すなわち、制御装置４０２は、主メモリ４０４および記憶装置４１０と連係することで、制御演算を実行する制御部を実現する。
【０１２６】
通信インターフェイス４１２、Ｉ／Ｏインターフェイス４１４、および、フィールドバスインターフェイス４１６は、外部機器４００と他の通信機器とのデータの遣り取りを仲介する。
【０１２７】
より具体的には、通信インターフェイス４１２は、ネットワークＮＷ１（図１参照）などを介した、コントローラ２００との通信を仲介する。通信インターフェイス４１２には、たとえば、ＥｔｈｅｒＮＥＴに従う通信が可能なコンポーネントが採用され得る。
【０１２８】
Ｉ／Ｏインターフェイス４１４は、操作部４１５に接続され、操作部４１５からのユーザ操作を示す信号を取り込む。操作部４１５は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。
【０１２９】
表示インターフェイス４２０は、表示部４２１と接続され、制御装置４０２などからの指令に従って、表示部４２１に対して、画像を表示するための画像信号を送出する。表示部４２１は、ＬＣＤや有機ＥＬディスプレイなどからなり、ユーザに対して各種情報を提示する。図１３の例では、外部機器４００および表示部４２１が別体として示されているが、外部機器４００および表示部４２１は、一体的に構成されてもよい。
【０１３０】
＜Ｅ．第１の実施の形態のまとめ＞
以上のようにして、本実施の形態に従う開発支援装置１００は、収集対象の変数を指定するための設定と、収集対象の各変数のデータ型に対応するデーターベース４３０上でのデータ型を指定するための設定と、収集対象の各変数についてデーターベース４３０上での識別名を指定するための設定とを受け付けるように構成されている。これらの設定は、設定情報２１２として開発支援装置１００からコントローラ２００に転送される。
【０１３１】
コントローラ２００は、開発支援装置１００から受信した設定情報２１２に規定されるデーターベース４３０上での識別名と、当該識別名に対応するデーターベース４３０上でのデータ型とに基づいて、テーブル４３２をデーターベース４３０上に生成するためのＳＱＬ文２３０を外部機器４００に出力する。これにより、外部機器４００のデーターベース４３０上にテーブル４３２が自動で生成される。
【０１３２】
このように、ユーザは、収集対象の変数と、各変数のデータ型に対応するデーターベース４３０上でのデータ型とを指定すれば、データーベース４３０上にテーブル４３２を生成することができる。そのため、ユーザは、テーブル４３２を生成するにあたってＳＱＬ文２３０を記述する必要がない。したがって、ＳＱＬの知識がないユーザであってもデーターベース４３０を容易に構築することできる。
【０１３３】
＜Ｆ．付記＞
以上のように、本実施形態は以下のような開示を含む。
【０１３４】
［構成１］
データーベース（４３０）にアクセスすることが可能なコントローラ（２００）と、
前記コントローラ（２００）と通信可能に構成されている開発支援装置（１００）とを備え、
前記開発支援装置（１００）には、前記コントローラ（２００）の制御プログラムの開発を支援するための開発ツール（３０）がインストールされ得、
前記開発ツール（３０）は、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース（４３０）上での識別名を指定するための設定とを設定情報（２１２）として受け付けるように構成されており、
前記コントローラ（２００）または前記開発ツール（３０）は、前記開発支援装置（１００）から受信した前記設定情報（２１２）に規定される前記データーベース（４３０）上での識別名と、当該識別名に対応する前記データーベース（４３０）上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブル（４３２）を前記データーベース（４３０）上に生成するためのＳＱＬ文を出力するための生成モジュール（２５０）を含む、制御システム。
【０１３５】
［構成２］
前記開発ツール（３０）は、前記収集対象の各変数が設定されたことに基づいて、当該変数のデータ型を表示するように構成されている、構成１に記載の制御システム。
【０１３６】
［構成３］
前記開発ツール（３０）は、前記収集対象として指定された変数の内から主キーを指定するための設定をさらに受け付けるように構成されている、構成１または２に記載の制御システム。
【０１３７】
［構成４］
前記開発ツール（３０）は、前記収集対象として指定された変数に構造体が含まれている場合、当該構造体に含まれる各メンバについて、前記データーベース（４３０）上での識別名の指定とを受け付けるように構成されている、構成１〜３のいずれか１項に記載の制御システム。
【０１３８】
［構成５］
前記生成モジュール（２５０）は、前記構造体の各メンバについて決定された前記識別名を前記テーブル（４３２）とは別のテーブルに登録するように前記ＳＱＬ文を生成する、構成４に記載の制御システム。
【０１３９】
［構成６］
前記生成モジュール（２５０）は、前記構造体の識別名を外部キーとして前記テーブル（４３２）に登録するための命令コードを前記ＳＱＬ文に含める、構成５に記載の制御システム。
【０１４０】
［構成７］
制御プログラムの開発を支援するための開発支援装置（１００）と通信可能に構成されており、データーベース（４３０）にアクセスすることが可能なコントローラ（２００）であって、
前記開発支援装置（１００）には、前記制御プログラムの開発を支援するための開発ツール（３０）がインストールされ得、
前記開発ツール（３０）は、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース（４３０）上での識別名を指定するための設定とを設定情報（２１２）として受け付けるように構成されており、
前記コントローラ（２００）は、
前記設定情報（２１２）および前記制御プログラムを前記開発支援装置（１００）から受信するための通信部と、
前記開発支援装置（１００）から受信した前記制御プログラムに従って制御対象の駆動機器を制御するためのプログラム実行モジュールと、
前記開発支援装置（１００）から受信した前記設定情報（２１２）に規定される前記データーベース（４３０）上での識別名と、当該識別名に対応する前記データーベース（４３０）上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブル（４３２）を前記データーベース（４３０）上に生成するためのＳＱＬ文を出力するための生成モジュール（２５０）とを備える、コントローラ。
【０１４１】
［構成８］
制御プログラムの開発を支援するための開発支援装置（１００）と通信可能に構成されており、データーベース（４３０）にアクセスすることが可能なコントローラ（２００）の制御方法であって、
前記開発支援装置（１００）には、前記制御プログラムの開発を支援するための開発ツール（３０）がインストールされ得、
前記開発ツール（３０）は、前記制御プログラムに含まれる変数の内から収集対象の変数を指定するための設定と、当該収集対象の各変数について前記データーベース（４３０）上での識別名を指定するための設定とを設定情報（２１２）として受け付けるように構成されており、
前記制御方法は、
前記設定情報（２１２）および前記制御プログラムを前記開発支援装置（１００）から受信するステップと、
前記開発支援装置（１００）から受信した前記制御プログラムに従って制御対象の駆動機器を制御するステップと、
前記開発支援装置（１００）から受信した前記設定情報（２１２）に規定される前記データーベース（４３０）上での識別名と、当該識別名に対応する前記データーベース（４３０）上でのデータ型とに基づいて、前記収集対象の変数の格納先となるテーブル（４３２）を前記データーベース（４３０）上に生成するためのＳＱＬ文を出力するステップとを備える、制御方法。
【０１４２】
≪第２の実施の形態≫
＜Ｇ．概要＞
第１の実施の形態においては、ユーザは、テーブル４３２を生成するための設定をテーブル設定画面３３に対して行い、その設定に従って、テーブル生成用のＳＱＬ文２３０が生成されていた。これに対して、第２の実施の形態においては、ＳＱＬ文２３０を生成するための機能がユーザプログラム２１０に組み込むことができる機能モジュールとして提供される。すなわち、ユーザは、プログラム設計画面３１（図３参照）上において、当該機能モジュールを他の機能モジュールと組み合わせて利用することができる。
【０１４３】
第２の実施の形態に従う制御システム１０のハードウェア構成などその他の点については第１の実施の形態に従う制御システム１０と同じであるので、以下ではそれらの説明については繰り返さない。
【０１４４】
＜Ｈ．適用例＞
図１４および図１５を参照して、本発明の他の適用例について説明する。図１４は、第２の実施の形態に従う制御システム１０の構成例を示す図である。
【０１４５】
図１４に示されるように、制御システム１０は、１つ以上の開発支援装置１００と、１つ以上のコントローラ２００と、１つ以上の駆動機器３００と、１つ以上の外部機器４００とで構成されている。コントローラ２００は、ハードウェア構成として、制御装置２０２と、記憶装置２０８とを含む。制御装置２０２は、機能構成として、プログラム実行モジュール２５２を含む。
【０１４６】
本実施の形態に従う開発支援装置１００は、ＳＱＬ文２３０を生成するための機能がファンクションブロックなどの機能モジュールとして提供される。図１４の例では、当該機能モジュールが生成モジュール２５０として示されている。ユーザは、上述のプログラム設計画面３１（図３参照）上において、生成モジュール２５０を他の機能モジュールと組み合わせて利用することができる。
【０１４７】
開発支援装置１００は、ダウンロード操作を受け付けたことに基づいて、生成モジュール２５０が組み込まれたユーザプログラム２１０をコントローラ２００に転送する。コントローラ２００は、開発支援装置１００から受信したユーザプログラム２１０を記憶装置２０８に保存する。
【０１４８】
プログラム実行モジュール２５２は、ユーザプログラム２１０の実行開始命令を受け付けたことに基づいて、ユーザプログラム２１０の実行を開始する。プログラム実行モジュール２５２は、生成モジュール２５０の実行タイミングが到来したことに基づいて、生成モジュール２５０によるＳＱＬ文２３０の生成機能を実行する。
【０１４９】
図１５を参照して、生成モジュール２５０によるＳＱＬ文２３０の生成機能について説明する。図１５は、生成モジュール２５０によるＳＱＬ文２３０の生成処理を概略的に示す図である。
【０１５０】
生成モジュール２５０は、記憶装置２０８に格納されている対応関係２１３と、収集対象変数２２９とを入力として、ＳＱＬ文２３０を生成する。
【０１５１】
対応関係２１３は、ユーザプログラム２１０で利用され得るデータ型と、データーベース４３０で利用され得るデータ型との対応関係を規定している。対応関係２１３は、予め規定されていてもよいし、ユーザによって任意に編集されてもよい。典型的には、対応関係２１３は、必要に応じてサーバからダウンロードされる。
【０１５２】
収集対象変数２２９は、上述のプログラム設計画面３１（図３参照）で設計されているユーザプログラム２１０上において収集対象として指定されたものである。図１５の例では、変数「Ａ」〜「Ｆ」が収集対象として指定されている。
【０１５３】
生成モジュール２５０は、収集対象の各変数についてデーターベース４３０上での識別名を決定する。ある局面において、生成モジュール２５０は、変数名と同じになるように識別名を決定する。他の局面において、生成モジュール２５０は、変数名に予め定められたキーワードを付加したものを識別名として決定する。一例として、変数「Ａ」〜「Ｆ」に対するデーターベース４３０上での識別名は、カラム名「Ａ’」〜「Ｆ’」に決定されたとする。なお、カラム名の決定方法は、これらに限定されず任意の決定方法が採用され得る。
【０１５４】
次に、生成モジュール２５０は、対応関係２１３に基づいて、収集対象の各変数について、当該変数のデータ型に対応するデーターベース４３０上でのデータ型を特定する。その結果、「ＤＩＮＴ」型の変数「Ａ」については、「Ｎｕｍｂｅｒ（１０）」型が対応するデータ型として特定される。「Ｓｔｒｉｎｇ（１２８）」型の変数「Ｂ」については、「ｎｃｈａｒ（１２７）」型が対応するデータ型として特定される。「Ｉｎｔ」型の変数「Ｃ」については、「Ｎｕｍｂｅｒ（５）」型が対応するデータ型として特定される。「Ｓｔｒｉｎｇ（２０）」型の変数「Ｄ」については、「ｎｃｈａｒ（１９）」型が対応するデータ型として特定される。「ｂｏｏｌ」型の変数「Ｅ」については、「Ｎｕｍｂｅｒ（１）」型が対応するデータ型として特定される。「ＤＡＴＥ＿ＡＮＤ＿ＴＩＭＥ」型の変数「Ｆ」については、「ＴＩＭＥＳＴＡＭＰ」型が対応するデータ型として特定される。
【０１５５】
続いて、生成モジュール２５０は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース４３０上でのデータ型とに基づいて、ＳＱＬ文２３０を生成する。より具体的には、生成モジュール２５０は、変数「Ａ」について特定された識別名「Ａ’」と、変数「Ａ」について特定されたデーターベース４３０上でのデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０に反映する。この記述により、識別名「Ａ’」のカラムがテーブル４３２に追加される。同様に、生成モジュール２５０は、識別名「Ｂ’」〜「Ｆ’」のカラムを追加するための記述をＳＱＬ文２３０に反映する。
【０１５６】
生成されたＳＱＬ文２３０は、外部機器４００に転送される。ＤＢＭＳとしての外部機器４００は、コントローラ２００から受信したＳＱＬ文２３０を解釈し、ＳＱＬ文２３０に従ってデーターベース４３０上にテーブル４３２を生成する。
【０１５７】
以上のようにして、テーブル生成用のＳＱＬ文２３０が自動生成される。ユーザは、収集対象の変数を生成モジュール２５０の入力とするようにユーザプログラム２１０を組むだけで収集対象の変数を要素とするテーブル４３２を生成することができる。このように、ユーザは、ＳＱＬ文を記述せずにデーターベース４３０上にテーブル４３２を生成することができる。
【０１５８】
なお、上述では、ユーザプログラム２１０に含まれる変数を元にテーブル４３２を生成する例について説明を行ったが、ユーザプログラム２１０以外にも、コントローラ２００内の各種制御プログラムに含まれる変数を元にテーブル４３２が生成されてもよい。
【０１５９】
また、図１４の例では、データーベース４３０が外部機器４００に存在する例について説明を行ったが、データーベース４３０は、必ずしも、外部機器４００に存在する必要はない。たとえば、データーベース４３０は、コントローラ２００の内部に存在していてもよい。あるいは、データーベース４３０は、コントローラ２００の内部バスに繋がれた別ユニットの内部に存在していてもよい。
【０１６０】
また、図１５に示される対応関係２１３においては、ユーザプログラム２１０上のデータ型とデーターベース４３０上のデータ型とが１対１で対応付けられている例について説明を行ったが、複数種類のデーターベース４３０に対応させる場合には、ユーザプログラム２１０上のデータ型とデーターベース４３０上のデータ型とが１対Ｎ（≧２）で対応付けられてもよい。
【０１６１】
＜Ｉ．シーケンスフロー＞
図１６および図１７を参照して、テーブル４３２の生成処理に係る処理フローについて説明する。図１６は、第２の実施の形態における、開発支援装置１００とコントローラ２００と駆動機器３００と外部機器４００との間のデータの流れを示すシーケンス図である。
【０１６２】
ステップＳ１０において、開発支援装置１００は、開発ツール３０の起動命令を受け付けたとする。このことに基づいて、開発支援装置１００は、上述のプログラム設計画面３１（図３参照）を表示する。プログラム設計画面３１については図３で説明した通りであるので、その説明については繰り返さない。設計者は、プログラム設計画面３１上において、テーブル生成のための生成モジュール２５０をユーザプログラム２１０に組み込むことができる。
【０１６３】
ステップＳ３０において、開発ツール３０は、コンパイル操作を受け付けたとする。このことに基づいて、開発ツール３０は、プログラム設計画面３１上で設計されたユーザプログラム２１０をコンパイルする。その後、開発ツール３０は、コンパイル結果のダウンロード操作を受け付けたとする。このことに基づいて、開発ツール３０は、コンパイルされたユーザプログラム２１０をコントローラ２００に転送する。コントローラ２００は、受信したユーザプログラム２１０を記憶装置２０８（図１４参照）に保存する。
【０１６４】
ステップＳ３２において、コントローラ２００は、ユーザプログラム２１０の実行命令を受け付けたとする。このことに基づいて、コントローラ２００は、ユーザプログラム２１０の実行を開始する。ユーザプログラム２１０がサイクリック実行型のプログラムである場合、コントローラ２００は、予め定められた制御周期ごとにユーザプログラム２１０に含まれる命令群を繰り返し実行する。より具体的には、コントローラ２００は、ユーザプログラム２１０の先頭行から最終行までを１制御周期で実行する。その次の制御周期では、コントローラ２００は、再び、ユーザプログラム２１０の先頭行から最終行までを実行する。コントローラ２００は、制御周期ごとに指令値を生成し、当該指令値を駆動機器３００に出力する。
【０１６５】
ステップＳ４０において、コントローラ２００は、テーブル生成処理の実行命令を受け付けたか否かを判断する。コントローラ２００は、ユーザプログラム２１０に規定されている生成モジュール２５０が実行された場合に、テーブル生成処理の実行命令を受け付けたと判断する。コントローラ２００は、生成モジュール２５０が実行されたと判断した場合（ステップＳ４０においてＹＥＳ）、制御をステップＳ４２に切り替える。そうでない場合には（ステップＳ４０においてＮＯ）、コントローラ２００は、制御をステップＳ５０に切り替える。
【０１６６】
ステップＳ４２において、コントローラ２００の生成モジュール２５０は、テーブル生成のためのＳＱＬ文２３０を生成する。なお、ステップＳ４２では、ＳＱＬ文２３０がコントローラ２００によって生成される例について示されているが、ＳＱＬ文２３０は、開発ツール３０によって生成されてもよい。図１７は、第２の実施の形態におけるＳＱＬ文２３０の生成処理を概略的に示す図である。
【０１６７】
図１７に示されるように、コントローラ２００の生成モジュール２５０は、上述の対応関係２１３（図１５参照）と、上述の収集対象変数２２９（図１５参照）と、その他の各種設定とを入力として、ＳＱＬ文２３０を生成する。
【０１６８】
より具体的には、生成モジュール２５０は、収集対象の各変数についてデーターベース４３０上での識別名を決定する。生成モジュール２５０は、たとえば、変数「Ａ」〜「Ｆ」に対するデーターベース４３０上での識別名をカラム名「Ａ’」〜「Ｆ’」に決定したとする。ある局面において、生成モジュール２５０は、収集対象の各変数の変数名と同一の名前をデーターベース４３０上での識別名として決定する。この場合、カラム名「Ａ’」〜「Ｆ’」は、それぞれ、変数名「Ａ」〜「Ｆ」と同じになる。他の局面において、生成モジュール２５０は、収集対象の各変数の変数名を含む名前をデーターベース４３０上での前記識別名として決定する。この場合、それぞれ、変数名「Ａ」〜「Ｆ」のそれぞれに所定のキーワードを付加したものがカラム名「Ａ’」〜「Ｆ’」となる。変数名がデーターベース４３０上の識別名に表わされることで、ユーザは、各変数に対応するカラムを容易に把握することができる。
【０１６９】
次に、生成モジュール２５０は、対応関係２１３に基づいて、収集対象の各変数について、データーベース４３０上での対応するデータ型を特定する。
【０１７０】
続いて、生成モジュール２５０は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース４３０上でのデータ型とに基づいて、ＳＱＬ文２３０を生成する。より具体的には、生成モジュール２５０は、変数「Ａ」について特定された識別名「Ａ’」と、変数「Ａ」について特定されたデーターベース４３０上でのデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０に反映する。この記述により、識別名「Ａ’」のカラムがテーブル４３２に追加される。同様に、生成モジュール２５０は、識別名「Ｂ’」〜「Ｆ’」のカラムを追加するための記述をＳＱＬ文２３０に反映する。
【０１７１】
また、生成モジュール２５０は、入力される各種設定をＳＱＬ文２３０に反映する。一例として、当該各種設定は、生成されるテーブルに付与されるテーブル名の設定や、主キーとして指定するカラムの設定や、各カラムに対してＮＵＬＬの入力を許容するか否かの設定を含む。
【０１７２】
たとえば、テーブル名として「ＴＡＢＬＥ１」が指定されたとする。この場合、生成モジュール２５０は、「Ｃｒｅａｔｅ  Ｔａｂｌｅ  ＴＡＢＬＥ１」との記述をＳＱＬ文２３０に反映する。この記述により、生成されるテーブル４３２のテーブル名が「ＴＡＢＬＥ１」となる。
【０１７３】
また、主キーとして変数「Ａ」，「Ｂ」が設定されたとする。この場合、生成モジュール２５０は、「ＰＲＩＭＡＲＹ  ＫＥＹ  （Ａ’、Ｂ’）」との記述をＳＱＬ文２３０に追加する。この記述により、変数「Ａ」に対応するカラム「Ａ’」と、変数「Ｂ」に対応するカラム「Ｂ’」が主キーとして設定される。このように、ＳＱＬ文２３０は、指定された変数に対応するデーターベースでの識別名を主キーにとしてテーブルに登録するための命令文を含む。
【０１７４】
また、変数「Ａ」，「Ｂ」についてはＮＵＬＬ禁止が設定されたとする。この場合、生成モジュール２５０は、カラム「Ａ’」，「Ｂ’」について「ＮＯＴ  ＮＵＬＬ」との記述を付す。これにより、変数「Ａ」，「Ｂ」に対応するカラム「Ａ’」，「Ｂ’」についてはＮＵＬＬ指定が禁止される。
【０１７５】
以上により、生成モジュール２５０は、テーブル生成のためのＳＱＬ文２３０を自動生成する。好ましくは、生成モジュール２５０は、ＳＱＬ文２３０の他に、対応付け結果であるマッピングテーブル２３２をさらに出力する。
【０１７６】
マッピングテーブル２３２は、収集対象の各変数について、変数のデータ型と、データーベース４３０上での識別名と、データーベース４３０上のデータ型との対応付け結果を示す。好ましくは、マッピングテーブル２３２は、いずれのカラムが主キーとして設定されているか否かを示すフラグと、各カラムに対するＮＵＬＬ指定が禁止されているか否かを示すフラグとをさらに含む。このようなマッピングテーブル２３２が出力されることで、ユーザは、収集対象の各変数について対応付けられたカラム名や、収集対象の各変数のデータ型などを容易に把握することができる。
【０１７７】
生成されたＳＱＬ文２３０は、外部機器４００に送信される。再び図１６を参照して、ステップＳ４４において、外部機器４００は、コントローラ２００からＳＱＬ文２３０を受信したことに基づいて、当該ＳＱＬ文２３０に従ってテーブル４３２を生成する。その結果、上述の図６に示される空のテーブル４３２がデーターベース４３０上に生成される。
【０１７８】
ステップＳ５０において、コントローラ２００は、ユーザプログラム２１０に規定される指令値の生成処理の実行命令を受け付けたか否かを判断する。コントローラ２００は、当該実行命令を受け付けたと判断した場合（ステップＳ５０においてＹＥＳ）、規定されている命令に従って指令値を生成し、当該指令値を駆動機器３００に送る（ステップＳ５２）。駆動機器３００は、コントローラ２００から受信した指令値に従って制御対象を駆動する。コントローラ２００は、指令値の生成処理の実行命令を受け付けたと判断しなかった場合（ステップＳ５０においてＮＯ）、コントローラ２００は、ステップＳ５２の処理を実行せずに、制御をステップＳ６０に切り替える。
【０１７９】
ステップＳ６０において、コントローラ２００は、収集対象の変数のアップロード処理の実行命令を受け付けたか否かを判断する。コントローラ２００は、当該実行命令を受け付けたと判断した場合（ステップＳ６０においてＹＥＳ）、ＩＮＳＥＲＴ命令を実行するためのＳＱＬ文を生成する。当該ＳＱＬ文には、追加先のテーブルを指定するための情報（たとえば、テーブル名）や、各カラムにアップロードするデータの値などが規定される。
【０１８０】
ステップＳ６２において、コントローラ２００は、生成したＳＱＬ文を外部機器４００に送る。外部機器４００は、コントローラ２００から受信したＳＱＬ文に従って各カラムに変数値を反映したレコードを生成し、ステップＳ２４で生成されたテーブル４３２に生成したレコードを追加する。これにより、収集対象の変数がテーブル４３２に反映される。その後、外部機器４００は、正常終了または異常終了を示すアップロード結果をコントローラ２００に送信する。
【０１８１】
コントローラ２００は、収集対象の変数のアップロード処理の実行命令を受けていない場合（ステップＳ６０においてＮＯ）、ステップＳ６２の処理を実行せずに、処理をステップＳ７０に切り替える。
【０１８２】
ステップＳ７０において、コントローラ２００は、ユーザプログラム２１０の実行を終了するか否かを判断する。当該終了命令は、たとえば、ユーザから終了操作を受け付けたことに基づいて発せられる。コントローラ２００は、ユーザから終了操作を受け付けたと判断した場合（ステップＳ７０においてＹＥＳ）、ユーザプログラム２１０の実行を終了する。そうでない場合には（ステップＳ７０においてＮＯ）、コントローラ２００は、制御をステップＳ４０に戻す。
【０１８３】
なお、上述では、ステップＳ６２において、ＩＮＳＥＲＴ命令のＳＱＬ文がコントローラ２００から外部機器４００のデーターベース４３０に送信される例について説明を行ったが、ＩＮＳＥＲＴする値のみが外部機器４００のデーターベース４３０に送られてもよい。この場合、外部機器４００は、ＩＮＳＥＲＴする値を受信したことに基づいて、ＩＮＳＥＲＴ命令のＳＱＬ文を生成し、当該ＳＱＬ文に基づいて受信した値のＩＮＳＥＲＴ処理を実行する。
【０１８４】
＜Ｊ．テーブル生成ＦＢ＞
上述のように、開発支援装置１００は、テーブル生成のためのＳＱＬ文２３０を生成する機能を生成モジュール２５０として提供する。生成モジュール２５０は、たとえば、ファンクションブロック（ＦＢ：Function Black）で提供される。
【０１８５】
図１８を参照して、ファンクションブロックとして提供される生成モジュール２５０について説明する。図１８は、生成モジュール２５０の一例であるテーブル生成ＦＢ２５１を示す図である。
【０１８６】
なお、生成モジュール２５０は、ファンクションブロック以外で規定されてもよい。たとえば、生成モジュール２５０は、ラダーダイアグラムで規定されるもの、命令リスト、構造化テキスト、および、シーケンシャルファンクションチャートのいずれか、あるいは、これらの組み合わせで規定されるものも含み得る。また、生成モジュール２５０は、ＪａｖａＳｃｒｉｐｔやＣ言語のような汎用的なプログラミング言語で規定されるものも含み得る。
【０１８７】
テーブル生成ＦＢ２５１は、ＳＱＬ文２３０の生成に関する設定を受け付ける入力部２５５Ａ〜２５５Ｅと、ＳＱＬ文２３０の生成結果を出力するための出力部２５６Ａ〜２５６Ｆとを含む。
【０１８８】
「Ｅｘｃｕｔｅ」として示される入力部２５５Ａは、ＳＱＬ文の生成処理を実行するか否かを指定するための設定を受け付ける。一例として、入力部２５５Ａは、「ＢＯＯＬ」型の入力を受け付けるように規定されている。入力部２５５Ａに「ＦＡＬＳＥ」が入力されている限り、ＳＱＬ文の生成処理は、実行されない。一方で、入力部２５５Ａに「ＴＲＵＥ」が入力された場合には、ＳＱＬ文の生成処理が実行される。
【０１８９】
「ＤＢＣｏｎｎｅｃｔｉｏｎ」として示される入力部２５５Ｂは、データーベース４３０に接続するためのファンクションブロックを実行して得られる接続結果を受け付ける。当該接続結果には、データーベース４３０のアクセスするための情報（たとえば、データーベース名など）が含まれている。
【０１９０】
「ＴａｂｌｅＮａｍｅ」として示される入力部２５５Ｃは、テーブル名の設定を受け付ける。入力部２５５Ｅは、たとえば、「ＤＷＯＲＤ」型の変数を受け付けるように規定されている。
【０１９１】
「ＭａｐｐｉｎｇＶａｒｉａｂｌｅＬｉｓｔ」として示される入力部２５５Ｄは、収集対象の変数の入力を受け付ける。入力部２５５Ｄは、予め定義された構造体を受け付けるように規定されている。入力部２５５Ｄには、上述の収集対象変数２２９（図１７参照）が入力される。
【０１９２】
「ＰｒｉｍａｒｙＫｅｙ」として示される入力部２５５Ｅは、主キーを設定するための入力を受け付ける。入力部２５５Ｅは、たとえば、「Ｓｔｒｉｎｇ」型の変数を受け付けるように規定されている。このように、テーブル生成ＦＢ２５１は、収集対象の変数の内のいずれかを主キーとして指定するための入力を受け付けるように規定されている。
【０１９３】
ＳＱＬ文２３０が正常に生成された場合には、正常終了を示す信号が、「Ｄｏｎｅ」として示される出力部２５６Ａから出力される。ＳＱＬ文２３０の生成中には、生成処理中を示す信号が、「Ｂｕｓｙ」として示される出力部２５６Ｂから出力される。ＳＱＬ文２３０が正常に生成されなかった場合には、異常終了を示す信号が、「Ｅｒｒｏｒ」として示される出力部２５６Ｃから出力される。この場合には、さらに、エラーの内容を識別するためのエラーＩＤが、「ＥｒｒｏｒＩＤ」として示される出力部２５６Ｄから出力される。「ＳＱＬＳｔａｔｅｍｅｎｔ」として示される出力部２５６Ｅからは、テーブル生成ＦＢ２５１の実行によって生成されたＳＱＬ文２３０（図１７参照）が出力される。「ＭａｐｐｉｎｇＴａｂｌｅ」として示される出力部２５６Ｆからは、テーブル生成ＦＢ２５１の実行によって生成されたマッピングテーブル２３２（図１７参照）が出力される。
【０１９４】
＜Ｋ．テーブル生成パターンの変形例＞
図１９を参照して、ＳＱＬ文２３０の生成パターンの変形例について説明する。図１９は、変形例におけるＳＱＬ文２３０の生成処理を概略的に示す図である。
【０１９５】
上述の図１７では、生成モジュール２５０は、対応関係２１３と、収集対象変数２２９とを入力として、テーブル生成のためのＳＱＬ文２３０と、マッピングテーブル２３２とを生成していた。これに対して、変形例に従う生成パターンでは、生成モジュール２５０Ａは、マッピングモジュール２４８によって生成されたマッピングテーブル２３２を入力としてＳＱＬ文２３０を出力する。その他の点については上述の通りであるので、以下では、それらの説明については繰り返さない。
【０１９６】
マッピングモジュール２４８は、ユーザプログラム２１０に組み込まれ得るプログラムモジュールである。マッピングモジュール２４８は、対応関係２１３と、収集対象変数２２９とを入力として、マッピングテーブル２１４を生成する。
【０１９７】
より具体的には、マッピングモジュール２４８は、収集対象の各変数についてデーターベース４３０上での識別名を決定する。マッピングモジュール２４８は、変数「Ａ」〜「Ｆ」に対するデーターベース４３０上での識別名をカラム名「Ａ’」〜「Ｆ’」に決定したとする。ある局面において、マッピングモジュール２４８は、収集対象の各変数の変数名と同一の名前をデーターベース４３０上での識別名として決定する。この場合、カラム名「Ａ’」〜「Ｆ’」は、それぞれ、変数名「Ａ」〜「Ｆ」と同じになる。他の局面において、マッピングモジュール２４８は、収集対象の各変数の変数名を含む名前をデーターベース４３０上での前記識別名として決定する。この場合、それぞれ、変数名「Ａ」〜「Ｆ」のそれぞれに所定のキーワードを付加したものがカラム名「Ａ’」〜「Ｆ’」となる。
【０１９８】
続いて、マッピングモジュール２４８は、対応関係２１３に基づいて、収集対象の各変数について、当該変数のデータ型に対応するデーターベース４３０上でのデータ型を特定する。
【０１９９】
次に、マッピングモジュール２４８は、変数名「Ａ」〜「Ｆ」と、変数「Ａ」〜「Ｆ」のデータ型と、変数「Ａ」〜「Ｆ」のデーターベース上での識別名と、変数名「Ａ」〜「Ｆ」のデーターベース上でのデータ型との対応関係をマッピングテーブル２１４として生成モジュール２５０Ａに出力する。
【０２００】
生成モジュール２５０Ａは、マッピングテーブル２３２に規定されるデーターベース上での識別名と、当該識別名に対応するデーターベース上でのデータ型とに基づいて、ＳＱＬ文２３０を生成する。生成モジュール２５０ＡによるＳＱＬ文２３０の生成方法については上述の通りであるので、その説明については繰り返さない。
【０２０１】
＜Ｌ．マッピングＦＢ＞
図１９に示されるマッピングモジュール２４８は、たとえば、ファンクションブロック（ＦＢ）で提供される。以下では、図２０を参照して、ファンクションブロックとして提供されるマッピングモジュール２４８について説明する。図２０は、マッピングモジュール２４８の一例であるマッピングＦＢ２４９を示す図である。
【０２０２】
なお、マッピングモジュール２４８は、ファンクションブロック以外で規定されてもよい。たとえば、マッピングモジュール２４８は、ラダーダイアグラムで規定されるもの、命令リスト、構造化テキスト、および、シーケンシャルファンクションチャートのいずれか、あるいは、これらの組み合わせで規定されるものも含み得る。また、マッピングモジュール２４８は、ＪａｖａＳｃｒｉｐｔやＣ言語のような汎用的なプログラミング言語で規定されるものも含み得る。
【０２０３】
マッピングＦＢ２４９は、マッピングテーブル２１４の生成に関する設定を受け付ける入力部２５８Ａ，２５８Ｂと、マッピングテーブル２１４の生成結果を出力するための出力部２５９Ａ〜２５９Ｅとを含む。
【０２０４】
「Ｅｘｃｕｔｅ」として示される入力部２５８Ａは、マッピングテーブル２１４の生成処理を実行するか否かを指定するための設定を受け付ける。一例として、入力部２５８Ａは、「ＢＯＯＬ」型の入力を受け付けるように規定されている。入力部２５８Ａに「ＦＡＬＳＥ」が入力されている限り、マッピングテーブル２１４の生成処理は、実行されない。一方で、入力部２５８Ａに「ＴＲＵＥ」が入力された場合には、マッピングテーブル２１４の生成処理が実行される。
【０２０５】
「ＭａｐｐｉｎｇＶａｒｉａｂｌｅＬｉｓｔ」として示される入力部２５８Ｂは、収集対象の変数の入力を受け付ける。入力部２５８Ｂは、予め定義された構造体を受け付けるように規定されている。入力部２５８Ｂには、構造体として定義される収集対象変数２２９（図１９参照）が入力される。
【０２０６】
マッピングテーブル２１４が正常に生成された場合には、正常終了を示す信号が、「Ｄｏｎｅ」として示される出力部２５９Ａから出力される。マッピングテーブル２１４の生成中には、生成処理中を示す信号が、「Ｂｕｓｙ」として示される出力部２５９Ｂから出力される。マッピングテーブル２１４が正常に生成されなかった場合には、異常終了を示す信号が、「Ｅｒｒｏｒ」として示される出力部２５９Ｃから出力される。この場合には、さらに、エラーの内容を識別するためのエラーＩＤが、「ＥｒｒｏｒＩＤ」として示される出力部２５９Ｄから出力される。「ＭａｐｐｉｎｇＴａｂｌｅ」として示される出力部２５９Ｅからは、マッピングＦＢ２４９の実行によって生成されたマッピングテーブル２３２（図１９参照）が出力される。
【０２０７】
＜Ｍ．テーブル生成ＦＢの変形例＞
図１９に示される生成モジュール２５０Ａは、たとえば、ファンクションブロック（ＦＢ）で提供される。以下では、図２１を参照して、ファンクションブロックとして提供される生成モジュール２５０Ａについて説明する。図２１は、生成モジュール２５０Ａの一例であるテーブル生成ＦＢ２５１Ａを示す図である。
【０２０８】
テーブル生成ＦＢ２５１Ａは、ＳＱＬ文２３０の生成に関する設定を受け付ける入力部２５５Ａ〜２５５Ｃ，２５５Ｄ２，２５５Ｅと、ＳＱＬ文２３０の生成結果を出力するための出力部２５６Ａ〜２５６Ｆとを含む。入力部２５５Ｄ２以外の構成については、図１８に示されるテーブル生成ＦＢ２５１と同じであるので、以下では、入力部２５５Ｄ２以外の説明については繰り返さない。
【０２０９】
「ＭａｐｐｉｎｇＶａｌｕｅ」として示される入力部２５５Ｄ２は、上述のマッピングＦＢ２４９（図２０参照）によって生成されるマッピングテーブル２３２を入力として受け付ける。
【０２１０】
テーブル生成ＦＢ２５１Ａは、入力部２５５Ａ〜２５５Ｃ，２５５Ｄ２，２５５Ｅに入力された情報に従ってＳＱＬ文２３０を生成する。テーブル生成ＦＢ２５１ＡによるＳＱＬ文２３０の生成方法については図１９で説明した通りであるので、その説明については繰り返さない。
【０２１１】
＜Ｎ．生成モジュール２５０による生成パターン＞
収集対象の変数には、構造体が含まれる場合がある。生成モジュール２５０は、収集対象の変数に構造体が含まれる場合には、そうではない場合と異なる態様でテーブル生成のためのＳＱＬ文２３０を生成する。収集対象の変数に構造体が含まれる場合におけるテーブル４３２の生成処理として、たとえば、２つの生成パターン（生成パターン３，４）が考えられる。
【０２１２】
生成パターン３においては、生成モジュール２５０は、構造体ではない変数を管理するためのテーブルと、構造体に含まれるメンバ変数を管理するためのテーブルとを別々に生成する。生成パターン４においては、生成モジュール２５０は、構造体ではない変数と構造体に含まれるメンバ変数とを共通に管理するための１つのテーブルを生成する。
【０２１３】
以下では、図２２および図２３を参照して、第２の実施の形態における生成パターン３，４について順に説明する。
【０２１４】
（Ｍ１．テーブルの生成パターン３）
まず、第２の実施の形態における生成パターン３について説明する。図２２は、第２の実施の形態に従うテーブルの生成パターン３を概略的に示す図である。
【０２１５】
生成モジュール２５０は、データ型の対応関係２１３と収集対象変数２２９とを入力として、「ＴＡＢＬＥ１」を生成するためのＳＱＬ文２３０Ａと、「ＴＡＢＬＥ２」を生成するためのＳＱＬ文２３０Ｂとを生成している。
【０２１６】
より具体的には、生成モジュール２５０は、収集対象の各変数についてデーターベース４３０上での識別名を決定する。このとき、生成モジュール２５０は、収集対象の変数に構造体が含まれている場合には、構造体名についてデーターベース４３０上での識別名を決定するとともに、構造体の各メンバについてデーターベース４３０上での識別名を決定する。その結果、収集対象の変数「Ａ」，「Ｂ」に対するデーターベース４３０上での識別名は、カラム名「Ａ’」，「Ｂ’」に決定されたとする。また、構造体「Ｃ」に対するデーターベース４３０上での識別名は、カラム「Ｃ’」に決定されたとする。また、収集対象の構造体「Ｃ」のメンバ変数「α」〜「γ」に対するデーターベース４３０上での識別名は、カラム名「α’」〜「γ’」に決定されたとする。
【０２１７】
次に、生成モジュール２５０は、対応関係２１３に基づいて、収集対象の各変数について、当該変数のデータ型に対応するデーターベース４３０上でのデータ型を特定する。
【０２１８】
続いて、生成モジュール２５０は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース４３０上でのデータ型とに基づいて、ＳＱＬ文２３０を生成する。このとき、生成モジュール２５０は、収集対象の変数名について決定された識別名「Ａ’」，「Ｂ’」と、構造体名について決定された識別名「Ｃ’」とをテーブル「ＴＡＢＬＥ１」に登録するようにＳＱＬ文２３０Ａを生成する。また、生成モジュール２５０は、構造体の各メンバ変数について決定された識別名「α’」〜「γ’」をテーブル「ＴＡＢＬＥ１」とは別のテーブル「ＴＡＢＬＥ２」に登録するようにＳＱＬ文２３０Ｂを生成する。
【０２１９】
より具体的には、生成モジュール２５０は、変数「Ａ」について決定された識別名「Ａ’」と、変数「Ａ」に対応するデーターベース上でのデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０Ａに反映する。この記述により、識別名「Ａ’」のカラムがテーブルに追加される。同様に、生成モジュール２５０は、識別名「Ｂ’」，「Ｃ’」のカラムを追加するための記述をＳＱＬ文２３０Ａに反映する。
【０２２０】
また、生成モジュール２５０は、構造体名について決定されたカラム名「Ｃ’」を外部キーとしてテーブル「ＴＡＢＬＥ２」に登録するための命令コードをＳＱＬ文２３０Ａに含める。図２２の例では、「ＦＯＲＥＩＧＮ  ＫＥＹ（Ｃ’）  ＲＥＦＥＲＥＮＣＥＳ  ＴＡＢＬＥ２」との記述がＳＱＬ文２３０Ａに追加されている。この記述により、カラム「Ｃ’」が「ＴＡＢＬＥ２」を参照する外部キーとして規定される。
【０２２１】
続いて、生成モジュール２５０は、構造体「Ｃ」に含まれるメンバ変数「α」，「β」，「γ」については、カラム「Ｃ’」，「α’」，「β’」，「γ’」を追加するための記述をＳＱＬ文２３０Ａとは別のＳＱＬ文２３０Ｂに反映する。図２２の例では、「Ｃ’  Ｎｕｍｂｅｒ（５）」との記述と、「α’  Ｎｕｍｂｅｒ（５）」との記述と、「β’  Ｎｕｍｂｅｒ（５）」との記述と、「γ’  Ｎｕｍｂｅｒ（５）」との記述とがＳＱＬ文２３０Ｂに反映されている。これらの記述により、この記述により、識別名「Ｃ’」，「α’」，「β’」，「γ’」のカラムが別テーブルに追加される。このとき、構造体名「Ｃ」に付けられたカラム名「Ｃ’」については、「ＰＲＩＭＡＲＹ  ＫＥＹ  （Ｃ’）」との記述をＳＱＬ文２３０Ｂに追加する。この記述により、識別名「Ｃ’」のカラムが主キーとして設定される。
【０２２２】
以上により、生成モジュール２５０は、テーブル生成のためのＳＱＬ文２３０Ａ，２３０Ｂを自動生成する。なお、図２２では、収集対象の変数に１つの構造体が含まれている例について説明を行ったが、収集対象の変数に複数の構造体が含まれている場合には、構造体の数に応じてテーブルが生成されるようにＳＱＬ文が生成される。また、構造体のメンバに構造体が含まれている場合には、各構造体についてテーブルが生成されるようにＳＱＬ文が生成される。
【０２２３】
好ましくは、生成モジュール２５０は、ＳＱＬ文２３０Ａ，２３０Ｂの他に、対応付け結果であるマッピングテーブル２３２Ａ，２３２Ｂをさらに出力する。
【０２２４】
マッピングテーブル２３２Ａは、ＳＱＬ文２３０Ａの生成結果として生成される。マッピングテーブル２３２Ａは、ＳＱＬ文２３０Ａで規定されたカラムに対応する変数名と、当該変数のデータ型と、当該カラムの識別名と、当該カラムのデータ型との対応付け結果を示す。また、マッピングテーブル２３２Ａに規定される収集対象の各変数には、主キーであるか否かを示すフラグと、ＮＵＬＬ指定が禁止されているか否かを示すフラグとが対応付けられている。
【０２２５】
マッピングテーブル２３２Ｂは、ＳＱＬ文２３０Ｂの生成結果として生成される。マッピングテーブル２３２Ｂは、ＳＱＬ文２３０Ｂで規定されたカラムに対応する変数名と、当該変数のデータ型と、当該カラムの識別名と、当該カラムのデータ型との対応付け結果を示す。また、マッピングテーブル２３２Ｂに規定される収集対象の各変数には、主キーであるか否かを示すフラグと、ＮＵＬＬ指定が禁止されているか否かを示すフラグとが対応付けられている。
【０２２６】
マッピングテーブル２３２Ａ，２３２Ｂが出力されることで、ユーザは、収集対象の各変数について対応付けられたカラム名や、収集対象の各変数のデータ型に対応するデーターベース上でのデータ型などを容易に把握することができる。
【０２２７】
（Ｍ２．テーブルの生成パターン４）
次に、図２３を参照して、収集対象の変数に構造体が含まれている場合におけるテーブル４３２の生成パターン４について説明する。図２３は、第２の実施の形態に従うテーブルの生成パターン４を概略的に示す図である。
【０２２８】
収集対象変数２２９において、構造体「Ｃ」が収集対象の変数として指定されているとする。構造体「Ｃ」は、メンバ変数として、変数「α」，「β」，「γ」を含む。本生成例においては、生成モジュール２５０は、構造体ではない変数と、構造体に含まれるメンバ変数とを要素とする１つのテーブルを生成する。
【０２２９】
より具体的には、生成モジュール２５０は、収集対象の各変数についてデーターベース４３０上での識別名を決定する。このとき、生成モジュール２５０は、収集対象の変数に構造体が含まれている場合には、構造体ではない各変数と、構造体に含まれる各メンバ変数とについてデーターベース４３０上での識別名を決定する。その結果、収集対象の変数「Ａ」，「Ｂ」に対するデーターベース４３０上での識別名は、カラム名「Ａ’」，「Ｂ’」に決定されたとする。また、収集対象の構造体「Ｃ」のメンバ変数「α」〜「γ」に対するデーターベース４３０上での識別名は、カラム名「α’」〜「γ’」に決定されたとする。
【０２３０】
次に、生成モジュール２５０は、対応関係２１３に基づいて、構造体ではない各変数と、構造体に含まれる各メンバ変数とについて、データーベース４３０上での対応するデータ型を特定する。
【０２３１】
続いて、生成モジュール２５０は、収集対象の各変数について決定された識別名と、収集対象の各変数について特定されたデーターベース４３０上でのデータ型とに基づいて、ＳＱＬ文２３０を生成する。このとき、収集対象の変数名について決定された識別名「Ａ’」，「Ｂ’」，「α’」〜「γ’」をテーブル「ＴＡＢＬＥ１」に登録するようにＳＱＬ文２３０Ａを生成する。
【０２３２】
より具体的には、生成モジュール２５０は、変数「Ａ」について決定された識別名「Ａ’」と、変数「Ａ」に対応するデーターベース上でのデータ型「Ｎｕｍｂｅｒ（１０）」とに基づいて、「Ａ’  Ｎｕｍｂｅｒ（１０）」との記述をＳＱＬ文２３０Ａに反映する。この記述により、識別名「Ａ’」のカラムがテーブルに追加される。同様に、生成モジュール２５０は、識別名「Ｂ’」，「α’」〜「γ’」のカラムを追加するための記述をＳＱＬ文２３０Ａに反映する。
【０２３３】
以上により、生成モジュール２５０は、テーブル生成のためのＳＱＬ文２３０を自動生成する。好ましくは、生成モジュール２５０は、ＳＱＬ文２３０の他に、対応付け結果であるマッピングテーブル２３２をさらに出力する。
【０２３４】
マッピングテーブル２３２は、ＳＱＬ文２３０の生成結果として生成される。マッピングテーブル２３２は、ＳＱＬ文２３０で規定されたカラムに対応する変数名と、当該変数のデータ型と、当該カラムの識別名と、当該カラムのデータ型との対応付け結果を示す。また、マッピングテーブル２３２に規定される収集対象の各変数には、主キーであるか否かを示すフラグと、ＮＵＬＬ指定が禁止されているか否かを示すフラグとが対応付けられている。
【０２３５】
マッピングテーブル２３２が出力されることで、ユーザは、収集対象の各変数について対応付けられたカラム名や、収集対象の各変数のデータ型に対応するデーターベース上でのデータ型などを容易に把握することができる。
【０２３６】
＜Ｏ．利点＞
図２４および図２５を参照して、比較例に従う制御システム１０Ｘと比較することで、第２の実施の形態に従う制御システム１０の利点について説明する。図２４は、比較例に従う制御システム１０Ｘによるテーブル生成に係る処理フローを示す図である。図２５は、第２の実施の形態に従う制御システム１０によるテーブル生成に係る処理フローを示す図である。
【０２３７】
比較例に従う制御システム１０Ｘには、テーブルを自動生成するための生成モジュール２５０が搭載されていない。制御システム１０Ｘにテーブルを登録し、収集対象のデータをテーブルにアップロードするためには、ユーザは、以下のステップＳ１〜Ｓ６の操作を行う必要がある。
【０２３８】
（ステップＳ１）外部機器４００上でテーブル生成のためのＳＱＬ文を記述し、データーベース４３０上に予めテーブルを登録する。
【０２３９】
（ステップＳ２）ステップＳ１でデーターベース４３０に登録したテーブルのデータ構造に合わせて、開発支援装置１００の開発ツール３０上で構造体変数を定義する。
【０２４０】
（ステップＳ３）ステップＳ２で定義した構造体変数を開発支援装置１００に登録する。
【０２４１】
（ステップＳ４）上記ステップＳ２で定義した構造体変数の各メンバと、ステップＳ１でデーターベース４３０に登録したテーブルの各カラムとの対応関係をユーザプログラム２１０上で規定する。
【０２４２】
（ステップＳ５）ステップＳ３で登録した構造体変数に収集対象の変数をセットするようにユーザプログラム２１０を設計する。
【０２４３】
（ステップＳ６）ステップＳ５で収集対象の変数がセットされた構造体変数をデーターベース４３０にアップロードするようにユーザプログラム２１０を設計する。
【０２４４】
これに対して、本実施の形態に従う制御システム１０においては、収集対象の変数を生成モジュール２５０に入力するようにユーザプログラム２１０が設計されば、データーベース４３０上にテーブルが自動で生成される。そのため、本実施の形態に従う制御システム１０においては、図２５に示されるように、上記ステップＳ１，Ｓ２，Ｓ３，Ｓ５の操作が必要なくなる。その結果、データーベース４３０に対する操作が容易になり、専門知識がないユーザであってもデーターベース４３０を設計することが可能になる。
【０２４５】
＜Ｐ．第２の実施の形態のまとめ＞
以上のようにして、開発支援装置１００は、テーブルを自動生成する機能を生成モジュール２５０として提供する。生成モジュール２５０は、収集対象の各変数についてデーターベース４３０上での識別名を決定する。また、生成モジュール２５０は、ユーザプログラム２１０ユーザプログラム２１０で利用され得るデータ型と、データーベース４３０で利用され得るデータ型との予め定められた対応関係２１３に基づいて、ユーザプログラム２１０に含まれる収集対象の各変数について、当該変数のデータ型に対応するデーターベース４３０上でのデータ型を特定する。次に、生成モジュール２５０は、収集対象の各変数について決定されたデーターベース４３０での識別名と、収集対象の各変数について特定されたデーターベース４３０でのデータ型とに基づいて、テーブル生成のためのＳＱＬ文を生成する。
【０２４６】
このように、ユーザは、データーベース４３０にテーブルを生成するにあたってＳＱＬ文２３０を記述する必要がない。そのため、ＳＱＬの知識がないユーザであってもデーターベース４３０を容易に構築することできる。
【０２４７】
＜Ｑ．付記＞
以上のように、本実施形態は以下のような開示を含む。
［構成１］
制御対象を制御するためのコントローラ（２００）であって、
データーベース（４３０）にアクセスするための通信部（２０１）と、
前記制御対象を制御するための制御プログラムを格納する記憶装置（２０８）とを備え、
前記制御プログラムは、当該制御プログラムに含まれる収集対象の変数の格納先となるテーブル（４３２）を前記データーベース（４３０）上に生成するためのＳＱＬ文（２３０）を出力する生成モジュール（２５０）を含み、
前記生成モジュール（２５０）は、
前記収集対象の各変数について前記データーベース（４３０）上での識別名を決定し、
前記制御プログラムで利用され得るデータ型と、前記データーベース（４３０）で利用され得るデータ型との予め定められた対応関係（２１２）に基づいて、前記収集対象の各変数について、当該変数のデータ型に対応する前記データーベース（４３０）上でのデータ型を特定し、
前記収集対象の各変数について決定された前記識別名と、前記収集対象の各変数について特定された前記データ型とに基づいて、前記ＳＱＬ文（２３０）を生成する、コントローラ。
［構成２］
前記コントローラ（２００）は、前記収集対象の各変数と、当該各変数のデータ型と、当該各変数についての前記データーベース（４３０）上での識別名と、当該各変数についての前記データーベース（４３０）上のデータ型との対応付け結果をさらに出力する、構成１に記載のコントローラ。
［構成３］
前記生成モジュール（２５０）は、前記収集対象の各変数の変数名と同一の名前、または、前記収集対象の各変数の変数名を含む名前を、前記データーベース（４３０）上での前記識別名として決定する、構成１または２に記載のコントローラ。
［構成４］
前記生成モジュール（２５０）は、
前記収集対象の変数に構造体が含まれている場合、構造体名について前記識別名を決定するとともに、前記構造体の各メンバについて前記識別名を決定し、
前記構造体名について決定された前記識別名を前記テーブル（４３２）に登録するように前記ＳＱＬ文（２３０）を生成し、
前記構造体の各メンバについて決定された前記識別名を前記テーブル（４３２）とは別のテーブル（４３２）に登録するように前記ＳＱＬ文（２３０）を生成する、構成１〜３のいずれか１項に記載のコントローラ。
［構成５］
前記ＳＱＬ文（２３０）は、前記構造体名について決定された前記識別名を外部キーとして前記テーブル（４３２）に登録するための命令文を含む、構成４に記載のコントローラ。
［構成６］
前記生成モジュール（２５０）は、前記収集対象の変数の内のいずれかを主キーとして指定するための入力を受け付けるように規定されており、
前記ＳＱＬ文（２３０）は、指定された変数に対応する識別名を主キーにとして前記テーブル（４３２）に登録するための命令文を含む、構成１〜５のいずれか１項に記載のコントローラ。
［構成７］
データーベース（４３０）にアクセスすることが可能なコントローラ（２００）の制御方法であって、
前記コントローラ（２００）の制御プログラムを受信するステップと、
前記制御プログラムに含まれる収集対象の各変数について前記データーベース（４３０）上での識別名を決定するステップと、
前記制御プログラムで利用され得るデータ型と、前記データーベース（４３０）で利用され得るデータ型との予め定められた対応関係（２１２）に基づいて、前記収集対象の各変数について、当該変数のデータ型に対応する前記データーベース（４３０）上でのデータ型を特定するステップと、
前記収集対象の各変数について決定された前記識別名と、前記収集対象の各変数について特定された前記データ型とに基づいて、前記収集対象の変数の格納先となるテーブル（４３２）を前記データーベース（４３０）に生成するためのＳＱＬ文（２３０）を出力するステップとを含む、制御方法。
［構成８］
データーベース（４３０）にアクセスすることが可能なコントローラ（２００）の制御プログラムであって、
前記制御プログラムは、前記コントローラ（２００）に、
前記制御プログラムに含まれる収集対象の各変数について前記データーベース（４３０）上での識別名を決定するステップと、
前記制御プログラムで利用され得るデータ型と、前記データーベース（４３０）で利用され得るデータ型との予め定められた対応関係（２１２）に基づいて、前記収集対象の各変数について、当該変数のデータ型に対応する前記データーベース（４３０）上でのデータ型を特定するステップと、
前記収集対象の各変数について決定された前記識別名と、前記収集対象の各変数について特定された前記データ型とに基づいて、前記収集対象の変数の格納先となるテーブル（４３２）を前記データーベース（４３０）に生成するためのＳＱＬ文（２３０）を出力するステップとを実行させる、制御プログラム。
【０２４８】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０２４９】
１０，１０Ｘ  制御システム、３０  開発ツール、３１  プログラム設計画面、３３  テーブル設定画面、３５，３６，４１，４５，４６，５０，５１  設定欄、４２  表示欄、３５Ａ，４１Ａ，４２Ａ，４６Ａ，５０Ａ，５１Ａ  ボタン、５８  テーブル生成ボタン、５９  キャンセルボタン、１００  開発支援装置、１０２，２０２，４０２  制御装置、１０４，２０６，４０４  主メモリ、１１０，２０８，４１０  記憶装置、１１０Ａ  開発支援プログラム、１１１，２０１，４１２  通信インターフェイス、１１４，４１４  インターフェイス、１１５，４１５  操作部、１２０，４２０  表示インターフェイス、１２１，４２１  表示部、１２５，４２５  内部バス、２００  コントローラ、２０４  チップセット、２０９  システムプログラム、２１０  ユーザプログラム、２１０Ａ  シーケンスプログラム、２１０Ｂ  モーションプログラム、２１１  制御プログラム、２１２  設定情報、２１３  対応関係、２１４，２３２，２３２Ａ，２３２Ｂ  マッピングテーブル、２２２  内部バスコントローラ、２２４  フィールドバスコントローラ、２２６  Ｉ／Ｏユニット、２２９  収集対象変数、２３０，２３０Ａ，２３０Ｂ  ＳＱＬ文、２３９  メモリカードインターフェイス、２４０  メモリカード、２４８  マッピングモジュール、２４９  マッピングＦＢ、２５０，２５０Ａ  生成モジュール、２５１，２５１Ａ  テーブル生成ＦＢ、２５２  プログラム実行モジュール、２５５Ａ，２５５Ｂ，２５５Ｃ，２５５Ｄ，２５５Ｄ２，２５５Ｅ，２５８Ａ，２５８Ｂ  入力部、２５６Ａ，２５６Ｂ，２５６Ｃ，２５６Ｄ，２５６Ｅ，２５６Ｆ，２５９Ａ，２５９Ｂ，２５９Ｃ，２５９Ｄ，２５９Ｅ  出力部、３００  駆動機器、３００Ａ  ロボットコントローラ、３００Ｂ  サーボドライバ、３０１Ａ  アームロボット、３０１Ｂ  サーボモータ、４００  外部機器、４１６  フィールドバスインターフェイス、４３０  データーベース、４３２，４３２Ａ，４３２Ｂ  テーブル。
【図１】
2019159995.tif 000003
【図２】
2019159995.tif 000004
【図３】
2019159995.tif 000005
【図４】
2019159995.tif 000006
【図５】
2019159995.tif 000007
【図６】
2019159995.tif 000008
【図７】
2019159995.tif 000009
【図８】
2019159995.tif 000010
【図９】
2019159995.tif 000011
【図１０】
2019159995.tif 000012
【図１１】
2019159995.tif 000013
【図１２】
2019159995.tif 000014
【図１３】
2019159995.tif 000015
【図１４】
2019159995.tif 000016
【図１５】
2019159995.tif 000017
【図１６】
2019159995.tif 000018
【図１７】
2019159995.tif 000019
【図１８】
2019159995.tif 000020
【図１９】
2019159995.tif 000021
【図２０】
2019159995.tif 000022
【図２１】
2019159995.tif 000023
【図２２】
2019159995.tif 000024
【図２３】
2019159995.tif 000025
【図２４】
2019159995.tif 000026
【図２５】
2019159995.tif 000027