(58)【調査した分野】(Int.Cl.,DB名)
前記記憶部は、前記定義情報に示される、構造体タグ名およびメンバ名の定義と、前記データベースシステムへアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報を記憶しており、
前記生成部は、前記定義情報に示される構造体タグ名およびメンバ名と、前記マッピング情報に示される変換規則とに基づいて、前記SQL文を生成する、請求項1に記載の制御装置。
前記記憶部は、前記定義情報に示される、構造体タグ名およびメンバ名の定義と、前記データベースシステムへアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報を記憶するように構成され、
前記ユーザプログラムは、前記定義情報に基づき前記マッピング情報を生成すべき旨の命令を含み、
前記生成部は、
前記ユーザプログラムに含まれる、前記マッピング情報を生成すべき旨の命令を実行することで、前記定義情報に基づいて前記マッピング情報を生成し、
前記定義情報に示される構造体タグ名およびメンバ名と、前記生成される前記マッピング情報に示される前記変換規則とに基づいて、前記SQL文を生成する、請求項1に記載の制御装置。
【発明を実施するための形態】
【0016】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【0017】
<1 実施の形態1>
<1.1 実施の形態1の構成>
まず、本実施の形態に係る制御システムのシステム構成について説明する。本実施の形態においては、機械や設備などの制御対象を制御するプログラマブルコントローラ(PLC)を制御装置の典型例として説明を行う。ただし、本発明に係る制御装置は、PLCに限られることなく、各種の制御装置へ適用可能である。
【0018】
図1は、本実施形態におけるPLCシステム全体の構成を示す図である。
まず概要を説明する。
図1に示すように、PLCシステムは、PC(Personal Computer)10と、DB(Database)サーバ20と、PLC30と、スイッチングハブ40とを含む。PC10は、PLC30で動作させるユーザプログラムをユーザが作成するための情報処理装置である。DBサーバ20は、データベースを管理するため、DBMS(database management system)として機能するサーバである。
【0019】
ユーザプログラムは、PLC30の利用者によって作成される。ユーザは、例えばPC10を操作することにより、データベースへのアクセス命令を含むプログラム(ソースプログラム)を作成することができる。PC10は、ソースプログラムを、PLC30において実行可能な形式に変換し、変換されたユーザプログラムをPLC30へ送信する。PLC30は、ユーザプログラムを実行し、ユーザプログラムに含まれるアクセス命令に従って、DBサーバ20にアクセスすることができる。
【0020】
PLC30は、スイッチングハブ40と接続されており、スイッチングハブ40を経由してPC10およびDBサーバ20と接続される。PLC30は、センサ出力などを外部から受け付けており、データを蓄積する。PLC30は、蓄積されたデータを、後述するDBアクセス処理プログラム35の処理により、DBサーバ20へ送信する。
図1に示す例では、PLCシステムが複数のPLC30を含む例を示しており、PLC30それぞれの主要な構成は同一である。スイッチングハブ40は、PC10など複数の機器と接続され、各機器間で送受信されるデータを転送する。
【0021】
次に、各機器の構成の詳細について説明する。
<1.2 各機器の構成の詳細>
図2は、PC10の機能を示すブロック図である。
【0022】
PC10は、MCU(Micro Control Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)等を備えるコンピュータシステム(情報処理装置)である。
図2に示すように、PC10は、プログラミングツール12の機能を発揮する。プログラミングツール12は、PLC30を動作させるためのユーザプログラムをユーザが作成するための機能をPC10に発揮させるプログラムである。プログラミングツール12は、データ型定義部14と、プログラミング機能16との機能を含む。ユーザがプログラミングツール12により作成したユーザプログラムは、PLC30へ送信され、PLC30で実行される。
【0023】
ユーザプログラムは、構造体型の変数を含む。データ型定義部14は、構造体型を定義するためのソフトウェアである。構造体型は、構造体タグ名や1つ以上のメンバ名で構成される。データ型定義部14は、構造体タグ名や、これら構造体のメンバ名やそのデータ型を定義する。データ型定義部14は、例えば、工場等の生産管理において用いられる各指標を示すために、構造体タグ名を「ProductionTable」とし、この構造体の各メンバを、生産される製品の名称を示す「Name」(データ型はString)、製品のロット番号を管理するための「LotNo」(データ型はInteger)、製品の製造の成功数を示す「SuccessCount」(データ型はInteger)、製品の製造の失敗数を示す「FailedCount」(データ型はInteger)とする構造体型を定義する。データ型定義部14は、このように構造体型を定義して、その定義内容を示す定義情報32を生成する。プログラミング機能16は、ユーザによるプログラム作成を支援するためのソフトウェアである。PC10は、これらソフトウェアをPC10において実行することにより、データ型定義部14およびプログラミング機能16の機能を発揮する。
【0024】
図3は、DBサーバ20の機能を示すブロック図である。DBサーバ20は、大容量の記憶装置などを備えるコンピュータシステムである。
【0025】
DBサーバ20は、データベースへの読み出しおよび書き込みを管理するDBMS22の機能を発揮する。DBMS22は、データベースとして機能するDB24を含む。DB24は、複数のデータベーステーブル26を保持する。
【0026】
図4は、PLC30の機能を示すブロック図である。PLC30は、コンピュータシステムであり、ユーザプログラムを周期的に実行する。PLC30は、PLC30内のメモリ領域の情報を読み書きして、ユーザプログラムに示される命令を順に実行する。PLC30は、入出力機能を備えており、センサ出力などPLC30の外部からデータを受け付けて、データを蓄積する。PLC30は、蓄積されたデータをDBサーバ20へ送信する。
【0027】
図4に示すように、PLC30の各機能は、OS31と、システムプログラム33と、ユーザプログラム38および定義情報32とにより構成される。OS31は、PLC30のコンピュータアーキテクチャに応じて設計されており、マイクロプロセッサ(図示しない)がシステムプログラム33およびユーザプログラム38を実行するための基本的な実行環境を提供する。
【0028】
システムプログラム33は、PLC30としての基本的な機能を提供するためのソフトウェア群であり、OS31上で動作し、ラダープログラムの制御などの機能を発揮する。システムプログラム33は、シーケンス命令プログラム34と、DBアクセス処理プログラム35と、入出力処理プログラム36と、スケジューラ37とを含んでいる。シーケンス命令プログラム34は、PLC30内のメモリ領域の情報を読み書きしながら、ユーザプログラム38の命令を順に実行する。DBアクセス処理プログラム35は、シーケンス命令プログラム34がユーザプログラム38を実行することに伴って呼び出され、ユーザプログラム38がDBサーバ20へアクセスするための処理、例えばSQL文の生成などの処理を実行する。
【0029】
入出力処理プログラム36は、PLC30が備える複数の入出力機能によるPLC30へのデータ入力およびPLC30からのデータ出力を制御する。各入出力機能は、それぞれメモリのアドレスと割りつけられている。各入出力機能に対応するメモリに保持されるデータは、PLC30の外部のデータと一括して周期的に交換される。スケジューラ37は、シーケンス命令プログラム34と、DBアクセス処理プログラム35と、入出力処理プログラム36との実行を制御する。
【0030】
ユーザプログラム38は、ユーザによってPC10上で作成され、PLC30のメモリに保持されている。
図4に示すように、ユーザプログラム38とシーケンス命令プログラム34とが制御プログラム39を構成する。すなわち、シーケンス命令プログラム34がユーザプログラム38を読み出して、命令を順に実行することで、PLC30にユーザ所望の制御動作を実行させる。
【0031】
定義情報32は、ユーザプログラム38に含まれる構造体型の変数の定義を示す情報であり、構造体タグ名、構造体に含まれる各メンバ名や、これらのデータ型が定義される。
【0032】
<2 データ>
次に、本実施形態で用いるデータについて、説明する。
【0033】
図5は、データベーステーブル26を示す図である。データベーステーブル26は、上述のとおり、DBサーバ20のDBMS22で管理されている。
【0034】
データベーステーブル26は、テーブルの名称を示すテーブル名称51と、テーブルのフィールド(Name52、LotNo53、SuccessCount54、FailedCount55、・・)とにより構成される。
図5の例では、テーブル名称51に示されるように、テーブルの名称は「Production Table」であり、製品に関する情報をテーブルに格納している。Name52は、製品の名称を示す。LotNo53は、製品のロット番号を示す。SuccessCount54は、製品製造の成功数を示し、FailedCount55は、製品製造の失敗数を示す。
【0035】
<3 動作>
次に、本実施形態におけるPC10、PLC30の動作について、図面を用いて詳しく説明する。
【0036】
実施の形態1における動作の概要は、以下のとおりである。
ユーザは、PC10において、PLC30で実行させるユーザプログラムを作成する。ユーザは、DBサーバ20へアクセスするため、構造体型の変数を含むユーザプログラムを作成する。
【0037】
PLC30は、PC10から、ユーザプログラム、および、定義情報32を受信して記憶する。シーケンス命令プログラム34は、ユーザプログラム38の命令を順に実行し、ユーザプログラム38の命令の実行により、構造体型の変数の、各メンバの値をメモリから抽出する。シーケンス命令プログラム34は、DBアクセス処理プログラム35を呼び出す命令に応じて、DBアクセス処理プログラム35に処理を渡す。DBアクセス処理プログラム35は、ユーザプログラム38の定義情報32に示される定義などを解析し、ユーザプログラム38に含まれるデータや、ユーザプログラム38の命令の実行により抽出された、構造体型の変数の、各メンバの値を用いて、DBサーバ20へアクセスするためのSQL文を生成する。DBアクセス処理プログラム35は、生成されるSQL文をDBサーバ20へ送信することで、SQL文を実行する(DBサーバ20にSQL文を実行させる)。
【0038】
なお、本実施形態では、プログラミングツール12のデータ型定義部14は、構造体タグ名およびメンバ名と、各メンバのデータ型を、DBサーバ20に保持されるデータベーステーブル26のテーブル名およびフィールド名と対応づけて定義している。すなわち、構造体タグ名とテーブル名とが対応し、メンバ名とフィールド名とが対応している。このような定義が、ユーザプログラム38の定義情報32に含まれる。そのため、DBアクセス処理プログラム35は、定義情報32に含まれる構造体タグ名をそのままテーブル名として使用してSQL文を作成することができる。メンバ名とフィールド名についても同様である。なお、構造体を定義する構造体タグ名を、データベーステーブル26のテーブル名と対応づけることとしてもよい。
【0039】
図6は、DBアクセス処理プログラム35が、SQL文を作成し実行する処理を示すフローチャートである。
【0040】
ステップS70において、DBアクセス処理プログラム35は、定義情報32を読み出す。
【0041】
ステップS72において、DBアクセス処理プログラム35は、定義情報32に示される構造体の定義を参照してメンバ名を抽出し、抽出したメンバ名をDB24を操作するためのフィールド名とする。
【0042】
ステップS74において、DBアクセス処理プログラム35は、定義情報32に示される構造体の定義の構造体タグ名を抽出し、抽出した構造体タグ名をDB24を操作するためのテーブル名とする。
【0043】
ステップS76において、DBアクセス処理プログラム35は、ユーザプログラム38の実行により抽出された、構造体の各メンバの値を読み出す。
【0044】
ステップS78において、DBアクセス処理プログラム35は、ステップS72で取得されたフィールド名と、ステップS76で読み出された値とを対応づけて、ステップS74で取得されたテーブル名を用いてSQL文を生成する。
【0045】
ステップS80において、DBアクセス処理プログラム35は、生成されたSQL文をDBサーバ20へ送信することにより、DBサーバ20のDB24を操作する。
【0046】
これにより、PLC30を制御するためのユーザプログラムを作成するユーザにとっては、データベースを操作するためのSQL文の記述をしなくとも、DBMS22へアクセスすることができる。例えば、データベース操作に不慣れなユーザであっても、データベース操作のためのSQLの概念などを習得しなくとも、データベースへアクセスするユーザプログラムを作成することができる。
【0047】
以下、ユーザプログラムの例や、SQL文の例について、具体的に説明する。
プログラミングツール12により作成されるユーザプログラムの例について、説明する。
図7は、ユーザプログラムの一例を示す図である。
【0048】
図7のユーザプログラム71に示されるように、ユーザは、構造体型のデータ構造を用いて、プログラミングを実施する。ユーザプログラム71の例は、構造体型の変数の変数名が「ProductionTable」である。なお、
図7のユーザプログラム71が実行されることにより、各メンバの値が抽出される。例えば、DBアクセス処理プログラム35は、メンバ「Name」の値が「Product1」、メンバ「LotNo」の値が「100」、メンバ「SuccessCount」の値が「49」、メンバ「FailedCount」の値が「1」とPLC30のメモリから抽出し、
図8に示すSQL文を作成してPLC30からDBサーバ20へ送信する。これにより、データベースが更新される。
【0049】
ここで、「NJtoDBFunc」は、シーケンス命令プログラム34に予め用意されたライブラリ(DBアクセス処理プログラム35によりDBMS22へアクセスするためのライブラリ)をPLC30が呼び出して、PLC30がDBアクセス処理プログラム35によりDBMS22へアクセスするための命令を示す。「DBHandle」は、PLC30がDBMS22に接続する際のハンドルを示す。ハンドルは、ユーザプログラム38によるDBMS22への接続の初期段階で設定される。「Variable」は、このプログラムにおいて、PLC30からDBサーバ20へと値を渡す対象となる構造体型の変数の変数名(
図7の例では、「ProductionTable」)を示す。「Done」「Error」は、出力用の命令であり、命令が完了した状態を示す。
【0050】
ステップS78において生成されるSQL文の例について、具体的に説明する。
図8は、SQL文の例を示す図である。なお、
図8は、
図7のユーザプログラム71と対応している。
【0051】
なお、ステップS72、ステップS74において、DBサーバ20が保持する各データベーステーブル26のうち、PLC30がアクセスする対象となるテーブル名およびフィールド名が抽出されている。ステップS76において、DBアクセス処理プログラム35は、ユーザプログラム71の各命令の字句を解析し、メモリからデータベースの値を読み出す。
図8のSQL文81に示されるように、テーブル名「ProductionTable」において、各フィールドの値を更新するためのSQL文がDBアクセス処理プログラム35により生成される。
【0052】
なお、この
図8の例では、データベースへのデータの追加をする場合を示しているが、SQL文は、データベースへの書き込み、読みこみ、また、データベースそのものを作成するものもあり、DBアクセス処理プログラム35は、これらSQL文を生成してDBサーバ20へ送信することにより、データベースを操作する。SQL文の例としては、Insert、Selectなどデータを操作する言語、DML(Data Manipulation Language)、DDL(Data Definition Language)なども利用できる。
【0053】
<4 変形例>
(実施例1の変形例1)
なお、上記実施例1の説明では、DBアクセス処理プログラム35は、定義情報32に含まれる構造体タグ名を、そのままDBMS22へアクセスするためのテーブル名とし、定義情報32に含まれるメンバ名を、フィールド名とするものとして説明した。
【0054】
DBアクセス処理プログラム35は、所定の変換規則に基づいて、定義情報32に含まれる構造体タグ名およびメンバ名を、DBMS22へアクセスするためのテーブル名およびフィールド名に変換するものとしてもよい。ここで、所定の変換規則とは、例えば、構造体の構造体タグ名やメンバ名を、DBMS22へのアクセスを可能とする文字列に変換するための規則である。例えば、(i)構造体タグ名またはメンバ名の一部の文字列を省略してテーブル名またはフィールド名とする、(ii)DBMS22において、テーブル名およびフィールド名としての使用を禁止する文字列が定義情報32の構造体タグ名またはメンバ名に含まれる場合に、これら文字列を削除または修正してテーブル名等として使用する等である。
【0055】
(実施例1の変形例2)
上記実施例1の説明では、DBアクセス処理プログラム35は、
図8に示されるような、ステップS76で読み出された値を含むSQL文を生成するものとして説明した。これに限らず、DBアクセス処理プログラム35は、まず値を含まないSQL文を生成し、予めDBMS22へ送信し、続いて、周期的に取得される値を取得する都度、DBMS22へ値を送信することによりDBMS22を操作するものとしてもよい。
【0056】
例えば、DBアクセス処理プログラム35は、
図6の例において、ステップS70、ステップS72、ステップS74までの処理により、DB24を操作するためのフィールド名とテーブル名とを決定し、決定したフィールド名およびテーブル名を用いて、値を含まないSQL文を生成する。値を含まないSQL文は、
図8の例では、「VALUE」の項目が空欄(例えば、VALUE(?, ?, ?, ?))になる。DBアクセス処理プログラム35は、値を含まないSQL文をDBMS22へ予め送信する。続いて、DBアクセス処理プログラム35は、SQL文の値を、ユーザプログラム38の処理結果に基づいて、DBMS22へ送信する。例えば、
図7および8の例では、値「('Product1', 100, 49, 1)」がDBアクセス処理プログラム35の処理によってPLC30からDBMS22へ送信される。このように、値を含まないSQL文と、値とをDBアクセス処理プログラム35の処理によってPLC30がDBMS22へ送信することにより、SQL文が実行される。
【0057】
<5 実施の形態2>
次に、別の実施の形態について説明する。実施の形態1では、PLC30が、ユーザプログラム38および定義情報32に基づいて、定義情報32に示される構造体タグ名およびメンバ名を、そのままテーブル名およびフィールド名とする、または、所定の変換規則に基づいてテーブル名およびフィールド名に変換するものとして説明している。
【0058】
これに対し、実施の形態2では、定義情報32に示される構造体タグ名およびメンバ名と、DBアクセス処理プログラム35がDBMS22へアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報41を、PLC30が保持している。DBアクセス処理プログラム35は、構造体タグ名に対応するマッピング情報41に基づいて、SQL文を生成する。
【0059】
以下、具体的に説明する。
図9は、実施の形態2におけるPLC30の構成を示す機能ブロック図である。実施の形態1との相違点は、PLC30がマッピング情報41を保持している点である。
【0060】
図10は、マッピング情報41の例を示す図である。
図10に示すように、マッピング情報41は、構造体タグ名と、DBMS22へアクセスするためのテーブル名とを対応づけている。また、マッピング情報41は、構造体の各メンバ名と、各フィールド名とを対応づけている。
【0061】
マッピング情報41は、例えば、予めDBサーバ20の管理者等により作成されてPLC30が保持するか、データベーステーブル26のテーブル情報およびフィールド情報をPC10が取得して、データ型定義部14により定義される構造体タグ名やメンバ名との変換規則を管理者等がPC10により作成することとしてもよい。
【0062】
<6 実施の形態2の動作>
図11は、実施の形態2におけるDBアクセス処理プログラム35の動作を示すフローチャートである。
【0063】
実施の形態1と同様に、PLC30は、PC10からユーザプログラム、および、定義情報32を受信して記憶する。シーケンス命令プログラム34は、ユーザプログラム38の命令を順に実行し、ユーザプログラム38の命令の実行により、構造体型の変数の、各メンバの値をメモリから抽出する。シーケンス命令プログラム34は、DBアクセス処理プログラム35を呼び出す命令に応じて、DBアクセス処理プログラム35に処理を渡す。
【0064】
以下、具体的に説明する。
ステップS110において、DBアクセス処理プログラム35は、ユーザプログラム38の定義情報32を読み出す。
【0065】
ステップS112において、DBアクセス処理プログラム35は、定義情報32の構造体タグ名と、各メンバとに対応するテーブル名、フィールド名とをマッピング情報41から読み出す。
【0066】
ステップS114において、DBアクセス処理プログラム35は、ユーザプログラム38の実行により抽出された、構造体の各メンバの値を読み出す。
【0067】
ステップS118において、DBアクセス処理プログラム35は、ステップS112で読み出したテーブル名、フィールド名と、ステップS114で読み出した値を用いて、DBサーバ20へアクセスするためのSQL文を生成する。
【0068】
ステップS120において、DBアクセス処理プログラム35は、生成されるSQL文をDBサーバ20へ送信することでSQL文を実行する。
【0069】
上記実施の形態2によると、定義情報32と、DBMS22へアクセスするためのテーブル名およびフィールド名との変換規則を、マッピング情報41により示しているため、例えば、テーブル名およびフィールド名として使用できない文字列が構造体タグ名やメンバ名に含まれている場合にも、DBアクセス処理プログラム35は、マッピング情報41を参照することによりSQL文を生成することができる。また、DBMS22において、テーブル名およびフィールド名の命名規則が、ユーザにとって扱いにくい場合(例えば、テーブル名が人間にとって覚えにくい文字列など)であっても、DBアクセス処理プログラム35がマッピング情報41を参照してSQL文を生成するため、ユーザは、理解しやすい文字列を構造体タグ名やメンバ名に用いてユーザプログラム38を作成することができる。また、ユーザが自由に構造体タグ名やメンバ名を設定したい場合にも有効であり、ユーザは、SQLの概念に習熟していなくとも、プログラミングをすることができる。
【0070】
実施の形態2において、マッピング情報41は、例えば、予めDBサーバ20の管理者等により作成されてPLC30が保持するものと説明した。この他に、ユーザプログラム38に、PLC30がマッピング情報41を生成すべき旨の命令を含めることとしてもよい。例えば、PC10は、定義情報32に示される構造体のデータの定義(構造体タグ名、メンバ名など)と、PLC30がDBMS22へアクセスするためのテーブル名およびフィールド名との変換規則を含むユーザプログラム38を生成する。このユーザプログラム38は、PLC30がマッピング情報41を生成すべき命令を含む。
【0071】
PLC30は、シーケンス命令プログラム34がユーザプログラム38を実行し、ユーザプログラム38に含まれる、上記の変換規則およびマッピング情報41を生成すべき命令に応じてマッピング情報41を生成し、生成したマッピング情報41をメモリに保持する。DBアクセス処理プログラム35は、マッピング情報41を生成した以降の処理で、ユーザプログラム38に含まれる構造体型の変数に基づいて、メモリに保持されるマッピング情報41を参照してSQL文を生成する。これにより、PLC30がSQL文を生成する処理が高速化する。
【0072】
また、上記実施の形態の説明では、ユーザの入力操作に応じてPC10が定義情報32とユーザプログラムとを生成し、生成された定義情報32とユーザプログラムとをそれぞれPC10からPLC30へ送信するものとして説明してきた。この他に、ユーザプログラムが定義情報32を含むものとしてもよい。PC10は、定義情報32を含むユーザプログラムを生成し、生成されたユーザプログラムをPLC30へ送信する。
【0073】
このように各実施形態について説明してきたが、これら実施形態を組み合わせてもよいことはいうまでもない。以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【0074】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。