特許第6065008号(P6065008)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オムロン株式会社の特許一覧

<>
  • 特許6065008-制御装置 図000002
  • 特許6065008-制御装置 図000003
  • 特許6065008-制御装置 図000004
  • 特許6065008-制御装置 図000005
  • 特許6065008-制御装置 図000006
  • 特許6065008-制御装置 図000007
  • 特許6065008-制御装置 図000008
  • 特許6065008-制御装置 図000009
  • 特許6065008-制御装置 図000010
  • 特許6065008-制御装置 図000011
  • 特許6065008-制御装置 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6065008
(24)【登録日】2017年1月6日
(45)【発行日】2017年1月25日
(54)【発明の名称】制御装置
(51)【国際特許分類】
   G05B 19/05 20060101AFI20170116BHJP
   G06F 17/30 20060101ALI20170116BHJP
【FI】
   G05B19/05 L
   G05B19/05 A
   G06F17/30 240C
【請求項の数】6
【全頁数】14
(21)【出願番号】特願2014-521521(P2014-521521)
(86)(22)【出願日】2013年6月21日
(86)【国際出願番号】JP2013067088
(87)【国際公開番号】WO2013191275
(87)【国際公開日】20131227
【審査請求日】2014年12月17日
(31)【優先権主張番号】特願2012-141378(P2012-141378)
(32)【優先日】2012年6月22日
(33)【優先権主張国】JP
【前置審査】
(73)【特許権者】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】岡村 弘太郎
(72)【発明者】
【氏名】西山 佳秀
(72)【発明者】
【氏名】岡 実
(72)【発明者】
【氏名】太田 政則
(72)【発明者】
【氏名】中崎 勝
【審査官】 後藤 健志
(56)【参考文献】
【文献】 特開2002−023812(JP,A)
【文献】 特開2008−083872(JP,A)
【文献】 特開2003−091530(JP,A)
【文献】 特開2001−034513(JP,A)
【文献】 特開2002−099561(JP,A)
【文献】 特開2002−149652(JP,A)
【文献】 特開2004−302849(JP,A)
【文献】 特開2012−108642(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/05
G06F 17/30
G05B 23/02
(57)【特許請求の範囲】
【請求項1】
データベースシステムへアクセス可能な制御装置であって、
構造体型の変数を含むユーザプログラム、および、前記ユーザプログラムに含まれる前記構造体型の定義を示す定義情報を記憶するための記憶部と、
前記定義情報を読み出して、読み出した当該定義情報に基づいて、前記ユーザプログラムの実行による前記データベースシステムへのアクセス時のSQL文を生成する生成部と、
生成されるSQL文を前記データベースシステムへ送信することにより前記SQL文を実行する実行部とを含む、制御装置。
【請求項2】
前記生成部は、
前記実行されるユーザプログラムに対応する前記定義情報の定義に示される構造体タグ名およびメンバ名を抽出し、抽出した構造体タグ名およびメンバ名を、所定の変換規則に従って前記データベースシステムへアクセスするためのテーブル名およびフィールド名として決定することで前記SQL文を生成する、請求項1に記載の制御装置。
【請求項3】
前記生成部は、
前記定義情報に基づいて、前記データベースシステムへアクセスするためのテーブル名およびフィールド名が特定された、値を含まないSQL文を生成し、
前記実行部は、前記値を含まないSQL文を予め前記データベースシステムへ送信し、前記ユーザプログラムの命令により前記構造体型の変数のメンバの値を抽出し、抽出された値を前記データベースシステムへ送信することにより、前記SQL文を実行する、請求項1に記載の制御装置。
【請求項4】
前記記憶部は、前記定義情報に示される、構造体タグ名およびメンバ名の定義と、前記データベースシステムへアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報を記憶しており、
前記生成部は、前記定義情報に示される構造体タグ名およびメンバ名と、前記マッピング情報に示される変換規則とに基づいて、前記SQL文を生成する、請求項1に記載の制御装置。
【請求項5】
前記生成部は、
前記マッピング情報に示されるテーブル名およびフィールド名に基づいて、値を含まないSQL文を生成し、
前記実行部は、前記値を含まないSQL文を予め前記データベースシステムへ送信し、前記ユーザプログラムの命令により前記構造体型の変数のメンバの値を抽出し、抽出された値を前記データベースシステムへ送信することにより、前記SQL文を実行する、請求項4に記載の制御装置。
【請求項6】
前記記憶部は、前記定義情報に示される、構造体タグ名およびメンバ名の定義と、前記データベースシステムへアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報を記憶するように構成され、
前記ユーザプログラムは、前記定義情報に基づき前記マッピング情報を生成すべき旨の命令を含み、
前記生成部は、
前記ユーザプログラムに含まれる、前記マッピング情報を生成すべき旨の命令を実行することで、前記定義情報に基づいて前記マッピング情報を生成し、
前記定義情報に示される構造体タグ名およびメンバ名と、前記生成される前記マッピング情報に示される前記変換規則とに基づいて、前記SQL文を生成する、請求項1に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラマブルロジックコントローラ(PLC:Programmable Logic Controller)などの制御装置に関し、特に、データベースシステムへのアクセスを容易にするための技術に関する。
【背景技術】
【0002】
PLCなどの制御装置は、工場などの自動機械の制御などに用いられ、複数の入出力機能を有して、例えば、センサ等から出力される値を逐次、読みこんでデータを保持する。
【0003】
また、近年、制御装置は、データベースシステムと接続して、制御装置で保持しているデータを、データベースシステムに蓄積する。これにより、データベースに接続する情報処理装置同士でのデータの共有を容易にしたり、各種データを収集して、データの集計や解析などを容易にしたりすることができる。例えば、特開2007−80286号公報(下記の特許文献1)は、PLCが持つI/Oデータをリアルタイムで上位コンピュータに伝達することができるデータ収集装置を開示する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007−80286号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
PLC等の制御装置の制御プログラミングを行う技術者は、構造体など、制御プログラミングで用いられるデータ構造には習熟している場合が多い。一方、データベースの操作については、SQL文の記述などが必要となり、技術者にとって煩わしく、また、データベースの操作に習熟していない場合もある。通常、データベース運用のノウハウは、データベースを含む上位のコンピュータシステムのエンジニアの方が習熟している。
【0006】
そこで、本発明は、PLC等の制御装置の制御プログラミングにおいて、技術者にとって、データベースへのアクセスを含むプログラミングを容易にする技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
一実施形態に従う、データベースシステムへアクセス可能な制御装置は、構造体型の変数を含むユーザプログラム、および、ユーザプログラムに含まれる構造体型の定義を示す定義情報を記憶するための記憶部と、定義情報を読み出して、読み出した定義情報に基づいて、ユーザプログラムの実行によるデータベースシステムへのアクセス時のSQL文を生成する生成部と、生成されるSQL文をデータベースシステムへ送信することによりSQL文を実行する実行部とを含む。
【0008】
好ましくは、生成部は、実行されるユーザプログラムに対応する定義情報の定義に示される構造体タグ名およびメンバ名を抽出し、抽出した構造体タグ名およびメンバ名を、所定の変換規則に従ってデータベースシステムへアクセスするためのテーブル名およびフィールド名として決定することでSQL文を生成することとしてもよい。
【0009】
好ましくは、生成部は、定義情報に基づいて、データベースシステムへアクセスするためのテーブル名およびフィールド名が特定された、値を含まないSQL文を生成し、実行部は、値を含まないSQL文を予めデータベースシステムへ送信し、ユーザプログラムの命令により構造体型の変数のメンバの値を抽出し、抽出された値をデータベースシステムへ送信することにより、SQL文を実行することとしてもよい。
【0010】
好ましくは、記憶部は、定義情報に示される、構造体タグ名およびメンバ名の定義と、データベースシステムへアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報を記憶しており、生成部は、定義情報に示される構造体タグ名およびメンバ名と、マッピング情報に示される変換規則とに基づいて、SQL文を生成することとしてもよい。
【0011】
好ましくは、生成部は、マッピング情報に示されるテーブル名およびフィールド名に基づいて、値を含まないSQL文を生成し、実行部は、値を含まないSQL文を予めデータベースシステムへ送信し、ユーザプログラムの命令により構造体型の変数のメンバの値を抽出し、抽出された値をデータベースシステムへ送信することにより、SQL文を実行することとしてもよい。
【0012】
好ましくは、記憶部は、定義情報に示される、構造体タグ名およびメンバ名の定義と、データベースシステムへアクセスするためのテーブル名およびフィールド名との変換規則を示すマッピング情報を記憶するように構成され、ユーザプログラムは、定義情報に基づきマッピング情報を生成すべき旨の命令を含み、生成部は、ユーザプログラムに含まれる、マッピング情報を生成すべき旨の命令を実行することで、定義情報に基づいてマッピング情報を生成し、定義情報に示される構造体タグ名およびメンバ名と、生成されるマッピング情報に示される変換規則とに基づいて、SQL文を生成することとしてもよい。
【発明の効果】
【0013】
上記の一実施形態によると、制御装置の制御プログラミングを行う技術者は、データベース操作のためのSQL文を意識せずとも、構造体型のデータ構造を用いて、データベースへのアクセスを含むプログラミングをすることができ、プログラミングが容易になる。
【0014】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【0015】
図1】本実施形態におけるPLCシステム全体の構成を示す図である。
図2】PC10の機能を示すブロック図である。
図3】DBサーバ20の機能を示すブロック図である。DBサーバ20は、大容量の記憶装置などを備えるコンピュータシステムである。
図4】PLC30の機能を示すブロック図である。
図5】データベーステーブル26を示す図である。
図6】DBアクセス処理プログラム35が、SQL文を作成し実行する処理を示すフローチャートである。
図7】ユーザプログラムの一例を示す図である。
図8】SQL文の例を示す図である。
図9】実施の形態2におけるPLC30の構成を示す機能ブロック図である。
図10】マッピング情報41の例を示す図である。
図11】実施の形態2におけるDBアクセス処理プログラム35の動作を示すフローチャートである。
【発明を実施するための形態】
【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】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0075】
10 PC、12 プログラミングツール、14 データ型定義部、16 プログラミング機能、20 DBサーバ、22 DBMS、24 DB、26 データベーステーブル、30 PLC、31 OS、32 定義情報、33 システムプログラム、34 シーケンス命令プログラム、35 DBアクセス処理プログラム、36 入出力処理プログラム、37 スケジューラ、38 ユーザプログラム、39 制御プログラム、40 スイッチングハブ、41 マッピング情報、51 テーブル名称、52 Name、53 LotNo、54 SuccessCount、55 FailedCount、71 ユーザプログラム、81 SQL文。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11