(57)【要約】【課題】ＰＬＣ等のコントローラにおいてデータベースシステムへのアクセスの信頼性を向上させる技術を提供する。【解決手段】データベースへアクセス可能なＰＬＣは、ユーザプログラムがＤＢアクセス処理プログラムを呼び出すとともに、ＤＢサーバへ送信する対象のデータを不揮発性のメモリに格納する。ＤＢアクセス処理プログラムは、不揮発性のメモリからデータを読み出してデータに基づき命令文を生成し、命令文をＤＢサーバへ送信する。ＤＢアクセス処理プログラムは、命令文に基づくＤＢサーバへのアクセス処理が完了するまでの間、命令文の実行状況を示すステータス情報を、不揮発性のメモリに格納する。電断発生時、ＰＬＣは、ステータス情報を参照することにより、電断のタイミングにおけるＤＢサーバへのアクセス状況を取得することができ、アクセス状況に応じてＳＱＬ文の再送などを行う。【選択図】図９
2014197346.tif 000002
【特許請求の範囲】
【請求項１】
コントローラであって、
データベースシステムと接続するための通信インタフェースと、
制御対象を制御するためのユーザプログラムを実行するための命令実行部と、
前記データベースシステムへアクセスするためのアクセス命令を含む前記ユーザプログラムの前記命令実行部による実行時に、前記データベースシステムへの前記通信インタフェースを介したアクセスを制御するアクセス処理部と、
前記命令実行部と前記アクセス処理部とがアクセス可能な不揮発性の記憶領域を有する記憶部とを備え、
前記命令実行部は、
前記アクセス命令の実行時に、前記データベースシステムへの送信対象のデータを前記不揮発性の記憶領域に格納し、前記アクセス処理部に前記アクセスの実行を指示することで前記アクセス処理部へ処理を渡し、
前記アクセス処理部は、
前記命令実行部の指示に応じて前記不揮発性の記憶領域から前記データベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づき前記データベースシステムへアクセスするための命令文を生成し、生成した命令文を前記データベースシステムへ送信する命令文送信部と、
前記命令実行部の前記指示に応じた処理を開始してから前記命令文送信部により生成された命令文に基づく処理が完了するまでの間、前記命令文の実行状況を示すステータス情報を生成し、生成された前記ステータス情報を前記不揮発性の記憶領域に記憶させるステータス出力部とを備える、コントローラ。
【請求項２】
前記アクセス処理部は、
前記生成した命令文を前記記憶領域へ記憶させ、
前記命令文の送信処理の際に前記コントローラに電断が発生することにより送信エラーが発生した場合に、前記記憶領域に記憶された命令文を前記データベースシステムへ再送する処理を、前記電断からの復帰時に自動的に、または、前記命令文を前記データベースシステムへ再送するための命令を含む前記ユーザプログラムの指示に基づき行う、
請求項１記載のコントローラ。
【請求項３】
前記ステータス情報は、前記データベースシステムへアクセスするためのＳＱＬ文の送信状況を示す情報を含む、
請求項１記載のコントローラ。
【請求項４】
前記ステータス出力部は、前記命令文の実行状況として、
前記命令実行部の前記指示を受けて前記命令文送信部により生成された命令文を前記データベースシステムへ送信する前の状態である第１の状態と、
前記生成された命令文を前記データベースシステムへ送信し、前記データベースシステムからの応答を受信するまで待機している状態である第２の状態と、
前記データベースシステムへの前記命令文の送信に失敗し、前記生成された命令文をスプールしている状態である第３の状態と、のうち少なくともいずれかの状態を前記ステータス情報として前記不揮発性の記憶領域に記憶させる、請求項１記載のコントローラ。
【請求項５】
前記ステータス出力部が生成する前記ステータス情報は、前記データベースシステムへの送信対象のデータのデータサイズ、データ本体および接続先のデータベースシステムを識別する情報の少なくともいずれかを含む、
請求項１記載のコントローラ。
【請求項６】
前記ステータス情報を参照して前記ステータス情報に示される前記アクセスの状況に応じてデータベースシステムへのアクセス処理のリカバリを行うリカバリプログラムを保持する保持部をさらに備え、
電断からの復帰時に、前記リカバリプログラムを実行する、
請求項１記載のコントローラ。
【請求項７】
前記リカバリプログラムは、前記コントローラから前記データベースシステムへ送信するＳＱＬ文の送信状況に応じてリカバリを行う、
請求項６記載のコントローラ。
【請求項８】
コントローラの動作を制御するためのプログラムであって、前記コントローラは、プロセッサと、データベースシステムと接続するための通信インタフェースと、不揮発性のメモリとを備え、
前記プログラムは、前記プロセッサに、
前記データベースシステムへアクセスするためのアクセス命令を含むユーザプログラムの実行時に、前記データベースシステムへの前記通信インタフェースを介したアクセスを制御するステップと、
前記アクセス命令の実行時に、前記データベースシステムへの送信対象のデータを前記不揮発性の記憶領域に格納するステップと、
前記不揮発性の記憶領域から前記データベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づき前記データベースシステムへアクセスするための命令文を生成し、生成した命令文を前記データベースシステムへ送信するステップと、
前記アクセス命令に応じて前記データベースシステムへアクセスするための処理を開始してから前記生成された命令文に基づく処理が完了するまでの間、前記命令文の実行状況を示すステータス情報を生成し、生成された前記ステータス情報を前記不揮発性の記憶領域に記憶させるステップとを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラ（ＰＬＣ：Programmable  Logic  Controller）等のコントローラおよびプログラムに関し、特に、データベースシステムへデータを送信するコントローラおよびプログラムに関する。
【背景技術】
【０００２】
ＰＬＣ等のコントローラは、工場などの自動機械の制御などに用いられ、複数の入出力機能を有して、例えば、センサ等から出力される値を逐次、読みこんでデータを保持する。
【０００３】
また、近年、ＰＬＣは、データベースシステムと接続して、ＰＬＣで保持しているデータを、データベースシステムに蓄積する。これにより、データベースに接続する情報処理装置同士でのデータの共有を容易にしたり、各種データを収集して、データの集計や解析などを容易にしたりすることができる。例えば、特開２０１２−１０８６４２号公報（特許文献１）は、データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群をデータベースに送信する機能を有するＰＬＣを開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１０８６４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ＰＬＣ等のコントローラへの電力の供給が何らかの原因で不安定化すると、データベースシステムへのアクセスが中断することとなる。例えば、従来、コントローラは、データをSpool情報として不揮発性メモリに保持し、外部記憶装置に定期的にデータを退避させている。コントローラは、電断が発生した際に、外部記憶装置に退避できていなかったデータについては、電断から復旧後、この退避できていなかった分のSpool情報を、再度、外部記憶装置に退避する構成とされていることもある。この場合、コントローラが外部記憶装置へデータを退避させている退避中に電断が発生すると、既存の退避済みのデータが破損することがある。このような電断が発生することによって、コントローラからデータベースシステムへ送信するデータが消失することとなり、コントローラの信頼性が低下する。
【０００６】
そこで、本発明は、ＰＬＣ等のコントローラにおいてデータベースシステムへのアクセスの信頼性を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
一実施形態に従うコントローラは、データベースシステムと接続するための通信インタフェースと、制御対象を制御するためのユーザプログラムを実行するための命令実行部と、データベースシステムへアクセスするためのアクセス命令を含むユーザプログラムの命令実行部による実行時に、データベースシステムへの通信インタフェースを介したアクセスを制御するアクセス処理部と、命令実行部とアクセス処理部とがアクセス可能な不揮発性の記憶領域を有する記憶部とを備え、命令実行部は、アクセス命令の実行時に、データベースシステムへの送信対象のデータを不揮発性の記憶領域に格納し、アクセス処理部にアクセスの実行を指示することでアクセス処理部へ処理を渡し、アクセス処理部は、命令実行部の指示に応じて不揮発性の記憶領域からデータベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づきデータベースシステムへアクセスするための命令文を生成し、生成した命令文をデータベースシステムへ送信する命令文送信部と、命令実行部の指示に応じた処理を開始してから命令文送信部により生成された命令文に基づく処理が完了するまでの間、命令文の実行状況を示すステータス情報を生成し、生成されたステータス情報を不揮発性の記憶領域に記憶させるステータス出力部とを備える。
【０００８】
好ましくは、アクセス処理部は、生成した命令文を記憶領域へ記憶させ、命令文の送信処理の際にコントローラに電断が発生することにより送信エラーが発生した場合に、記憶領域に記憶された命令文をデータベースシステムへ再送する処理を、電断からの復帰時に自動的に、または、命令文をデータベースシステムへ再送するための命令を含むユーザプログラムの指示に基づき行うこととしてもよい。
【０００９】
好ましくは、ステータス情報は、データベースシステムへアクセスするためのＳＱＬ文の送信状況を示す情報を含むこととしてもよい。
【００１０】
好ましくは、ステータス出力部は、命令文の実行状況として、命令実行部の指示を受けて命令文送信部により生成された命令文をデータベースシステムへ送信する前の状態である第１の状態と、生成された命令文をデータベースシステムへ送信し、データベースシステムからの応答を受信するまで待機している状態である第２の状態と、データベースシステムへの命令文の送信に失敗し、生成された命令文をスプールしている状態である第３の状態と、のうち少なくともいずれかの状態をステータス情報として不揮発性の記憶領域に記憶させることとしてもよい。
【００１１】
好ましくは、ステータス出力部が生成するステータス情報は、データベースシステムへの送信対象のデータのデータサイズ、データ本体および接続先のデータベースシステムを識別する情報の少なくともいずれかを含むこととしてもよい。
【００１２】
好ましくは、ステータス情報を参照してステータス情報に示されるアクセスの状況に応じてデータベースシステムへのアクセス処理のリカバリを行うリカバリプログラムを保持する保持部をさらに備え、電断からの復帰時に、リカバリプログラムを実行することとしてもよい。
【００１３】
好ましくは、リカバリプログラムは、コントローラからデータベースシステムへ送信するＳＱＬ文の送信状況に応じてリカバリを行うこととしてもよい。
【００１４】
別の実施形態に従うと、コントローラの動作を制御するためのプログラムが提供される。コントローラは、プロセッサと、データベースシステムと接続するための通信インタフェースと、不揮発性のメモリとを備える。プログラムは、プロセッサに、データベースシステムへアクセスするためのアクセス命令を含むユーザプログラムの実行時に、データベースシステムへの通信インタフェースを介したアクセスを制御するステップと、アクセス命令の実行時に、データベースシステムへの送信対象のデータを不揮発性の記憶領域に格納するステップと、不揮発性の記憶領域からデータベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づきデータベースシステムへアクセスするための命令文を生成し、生成した命令文をデータベースシステムへ送信するステップと、アクセス命令に応じてデータベースシステムへアクセスするための処理を開始してから生成された命令文に基づく処理が完了するまでの間、命令文の実行状況を示すステータス情報を生成し、生成されたステータス情報を不揮発性の記憶領域に記憶させるステップとを実行させる。
【発明の効果】
【００１５】
上記の一実施の形態によると、コントローラは、コントローラがデータベースシステムへアクセスする際の命令文の実行状況をステータス情報として保持するため、電断が発生した場合においてもリカバリ時にアクセスの状況を参照することができ、データベースシステムへのアクセスの信頼性が向上する。
【００１６】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００１７】
【図１】本実施形態における制御システム全体の構成を示す図である。
【図２】ＰＣ１０の機能を示すブロック図である。
【図３】ＤＢサーバ２０の機能を示すブロック図である。
【図４】ＰＬＣ３０の機能を示すブロック図である。
【図５】本実施形態のハードウェアの構成を示す図である。
【図６】ステータス情報５１に保持されるデータの内容を示す図である。
【図７】共有メモリ３０９に記憶されるステータス情報５１を示す図である。
【図８】ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセス処理を示すフローチャートである。
【図９】ユーザプログラム３２の命令に従ってＤＢアクセス処理プログラム３５によりＤＢサーバ２０へのアクセスを開始し、ステータス情報５１の進捗状況５１２を更新する処理を示す図である。
【図１０】電断のタイミングと、共有メモリ３０９に記憶される進捗状況５１２と、電断発生時に取りうる処置とを示す図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００１９】
＜実施の形態１＞
図１は、本実施形態における制御システム全体の構成を示す図である。
【００２０】
まず、本実施の形態に係る制御システムのシステム構成について説明する。本実施の形態においては、機械や設備などの制御対象を制御するプログラマブルコントローラ（ＰＬＣ）を制御装置の典型例として説明を行う。但し、本発明に係る制御装置は、ＰＬＣに限られることなく、各種の制御装置へ適用可能である。
【００２１】
図１を参照して、制御システムには、ＰＣ（Personal  Computer）１０と、ＤＢ（Database）サーバ２０と、ＰＬＣ３０と、ＰＬＣ４０とが含まれる。ＰＬＣ３０とＰＬＣ４０とは、後述するようなユーザプログラムを周期的またはイベント的に実行する。ユーザプログラムは、ＰＣ１０の利用者によって作成される。ユーザは、例えばＰＣ１０を操作することにより、アクセス命令を含むプログラム（ソースプログラム）を作成することができる。
【００２２】
ＰＣ１０は、ＰＬＣ３０で動作させるユーザプログラムをユーザが作成するための情報処理装置である。ＰＣ１０は、作成されたソースプログラムを、ＰＬＣ３０やＰＬＣ４０において実行可能な形式に変換し、変換されたユーザプログラムを、例えばＰＣ１０と接続するＰＬＣ３０へ送信する。また、ＰＣ１０は、例えばＵＳＢ（Universal  Serial  Bus）規格などに従って、接続用のケーブルを介してＰＬＣ３０と接続される。ＰＣ１０は、ＰＬＣ３０との間で各種パラメータの設定、プログラミング、モニタ、デバッグなどの機能を提供する。
【００２３】
ＤＢサーバ２０は、データベースを管理するため、ＤＢＭＳ（database  management  system）として機能するサーバである。
【００２４】
ＰＬＣ３０とＰＬＣ４０とは、ユーザプログラムを実行し、ユーザプログラムに含まれるアクセス命令に従って、ＤＢサーバ２０にアクセスすることができる。
【００２５】
ＰＬＣ３０は、ＰＣ１０と、ＤＢサーバ２０と、ＰＬＣ４０と接続される。例えば、ＰＬＣ３０とＤＢサーバ２０とは、イーサネット（登録商標）などのネットワークを介して、データを互いに遣り取りできるように構成される。ＰＬＣ３０は、ＤＢサーバ２０と接続するための設定を保持しており、設定に従ってＤＢサーバ２０へアクセスする。
【００２６】
また、ＰＬＣ３０は、制御演算を実行するＣＰＵユニットと、１以上のＩＯ（Input/Output）ユニットとを含んで構成され、これらＣＰＵユニットと、ＩＯユニットとは、システムバスを介してデータを互いに遣り取りできるように構成される。ＰＬＣ３０は、これらＩＯユニット等を通じて、各種のフィールド機器との間でデータを遣り取りする。これらのフィールド機器は、制御対象に対して何らかの処理を行うためのアクチュエータや、制御対象から各種情報を取得するためのセンサなどを含む。また、ＰＬＣ３０は、フィールドバスを介して、外部の各種のフィールド機器と接続し、これらフィールド機器との間でデータをやり取りする。ＰＬＣ３０は、センサ出力などを外部から受け付けてデータを蓄積し、蓄積されたデータを、後述するＤＢアクセス処理プログラム３５によりＤＢサーバ２０へ送信する。
【００２７】
また、ＰＬＣ３０は、他のＰＬＣ（図１の例ではＰＬＣ４０）がＤＢサーバ２０へ送信するデータを受け付けて、受け付けたデータをＤＢサーバ２０へ送信する。ＰＬＣ４０は、センサ出力などを外部から受け付けてデータを蓄積し、蓄積されたデータを、ＰＬＣ３０を介してＤＢサーバ２０へ送信する。
【００２８】
＜各機器の構成の詳細＞
次に、各機器の構成の詳細について説明する。
【００２９】
図２は、ＰＣ１０の機能を示すブロック図である。
ＰＣ１０は、ＣＰＵ（Central  Processing  Unit）、ＲＯＭ（Read  Only  Memory）、ＲＡＭ（Random  Access  Memory）等を備えるコンピュータシステム（情報処理装置）である。図２を参照して、ＰＣ１０は、ＰＬＣ３０を動作させるためのユーザプログラムをユーザが作成するためのプログラミングツール１２の機能を発揮する。プログラミングツール１２は、命令実行状態取得部１４と、プログラミング機能１６との機能を含む。ユーザがプログラミングツール１２により作成したユーザプログラムは、ＰＬＣ３０へ送信され、ＰＬＣ３０で実行される。
【００３０】
命令実行状態取得部１４は、ＰＬＣ３０に対し、ＰＬＣ３０のメモリに保持されるステータス情報５１の内容をＰＣ１０へ送信するよう指示するためのソフトウェアである。
【００３１】
プログラミング機能１６は、ユーザによるプログラム作成を支援するためのソフトウェアである。これらソフトウェアがＰＣ１０において実行されることにより、命令実行状態取得部１４とプログラミング機能１６等の機能が発揮される。
【００３２】
図３は、ＤＢサーバ２０の機能を示すブロック図である。ＤＢサーバ２０は、大容量の記憶装置などを備える。
【００３３】
ＤＢサーバ２０は、データベースへの読み出しおよび書き込みを管理するＤＢＭＳ２２の機能を発揮する。ＤＢＭＳ２２は、データベースとして機能するＤＢ２４へのデータの書き込みおよび読み出しを制御する。ＤＢ２４は、複数件のデータレコードを保持するための記憶領域であり、ＤＢＭＳ２２の制御に従ってデータの保持等を行う。
【００３４】
図４は、ＰＬＣ３０の機能を示すブロック図である。ＰＬＣ３０は、ユーザプログラムを周期的に実行する。ＰＬＣ３０は、ＰＬＣ３０内のメモリ領域の情報を読み書きして、ユーザプログラムに示される命令を順に実行する。ＰＬＣ３０は、入出力機能を備えており、センサ出力などＰＬＣ３０の外部からデータを受け付けて、データを蓄積する。ＰＬＣ３０は、蓄積されたデータをＤＢサーバ２０へ送信する。
【００３５】
図４を参照して、ＰＬＣ３０の各機能は、ＯＳ（Operating  System）３１と、システムプログラム３３と、ユーザプログラム３２等が動作することで発揮される。ＰＬＣ３０は、ステータス情報５１とを保持している。
【００３６】
ＯＳ３１は、ＰＬＣ３０の資源を管理するオペレーティングシステムであり、タスクのスケジューリングや、ＤＢサーバ２０へのアクセス処理などを行う機能をＰＬＣ３０に発揮させる。ＯＳ３１は、ＣＰＵ３０１がシステムプログラム３３およびユーザプログラム３２を実行するための基本的な実行環境を提供する。
【００３７】
システムプログラム３３は、ＰＬＣ３０としての基本的な機能を提供するためのソフトウェア群である。具体的には、システムプログラム３３は、シーケンス命令プログラム３４と、ＤＢ（データベース）アクセス処理プログラム３５と、入出力処理プログラム３６と、ツールインタフェース処理プログラム３７と、スケジューラ３８とを含んでいる。
【００３８】
これに対し、ユーザプログラム３２は、制御対象に対する制御目的に応じて任意に作成されるプログラムである。すなわち、ユーザプログラム３２は、制御システムを用いて制御する対象に応じて、任意に設計される。ユーザプログラム３２は、シーケンス命令プログラム３４と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム３２は、シーケンス命令プログラム３４によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム３２およびシーケンス命令プログラム３４を「制御プログラム」と総称する場合もある。
【００３９】
シーケンス命令プログラム３４は、ＰＬＣ３０内のメモリ領域の情報を読み書きしながら、ユーザプログラム３２の命令を順に実行する機能をＰＬＣ３０に発揮させる。シーケンス命令プログラム３４は、ユーザプログラム３２の実行に伴って、ユーザプログラム３２内で指定されているシーケンス命令の実態を呼び出して、その命令の内容を実現するための命令コード群を含む。
【００４０】
ＤＢアクセス処理プログラム３５は、ＰＬＣ３０がシーケンス命令プログラム３４によってユーザプログラム３２を実行することに伴って呼び出され、ユーザプログラム３２がＤＢサーバ２０へアクセスするための処理、例えばＳＱＬ文の生成などの処理を実行する機能をＰＬＣ３０に発揮させる。ＤＢアクセス処理プログラム３５は、ユーザプログラム３２の実行に伴って、ＤＢサーバ２０へアクセスするために必要な処理を実現するための命令コード群を含む。ＤＢアクセス処理プログラム３５は、ユーザプログラム３２において指定可能な命令に対応する実行コードを含む。
【００４１】
入出力処理プログラム３６は、ＰＬＣ３０が備える複数の入出力機能によるＰＬＣ３０へのデータ入力およびＰＬＣ３０からのデータ出力を制御する機能をＰＬＣ３０に発揮させる。各入出力機能は、それぞれメモリのアドレスが割りあてられている。各入出力機能に対応するメモリに保持されるデータは、周期的にＰＬＣ３０の外部のデータと一括して交換される。
【００４２】
ツールインタフェース処理プログラム３７は、ＰＣ１０との間でデータを遣り取りするためのインタフェースを提供する。ツールインタフェース処理プログラム３７は、ＰＣ１０において動作するプログラミングツール１２の機能によりＰＣ１０からＰＬＣ３０へ通知される指示を受けて、ＤＢアクセス処理プログラム３５等へ処理を渡し、処理の結果等をＰＣ１０へ応答する機能をＰＬＣ３０に発揮させる。スケジューラ３８は、ＰＬＣ３０で実行するタスクの優先度に基づいて、タスクのスケジューリングを行う機能をＰＬＣ３０に発揮させる。
【００４３】
ユーザプログラム３２は、上述したように、ユーザにおける制御目的に応じて作成される。ユーザプログラム３２は、典型的には、ＰＬＣ３０のＣＰＵユニットのプロセッサで実行可能なオブジェクトプログラム形式になっている。ユーザプログラム３２は、ＰＣ１０などにおいて、ラダー形式やファンクションブロック形式で記述されたソースプログラムがコンパイルされることで生成される。生成されたオブジェクトプログラム形式のユーザプログラムは、ＰＣ１０からＰＬＣ３０のＣＰＵユニットへ転送され、ＰＬＣ３０のメモリに保持されている。
【００４４】
ステータス情報５１は、ＤＢアクセス処理プログラム３５により出力され、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセスの状況を保持する。詳しくは後述する。
【００４５】
図５は、本実施形態のハードウェアの構成を示す図である。図５（Ａ）は、コンピュータシステムとしてのＰＣ１０の構成を示す。図５（Ａ）を参照して、ＰＣ１０は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、通信インタフェース１０４と、ディスプレイ１０５と、入出力インタフェース１０６とを備える。
【００４６】
ＣＰＵ１０１は、ＯＳを含む各種プログラムをＲＯＭ１０２等から読み出して実行することでＰＣ１０に各種機能を発揮させる。ＲＯＭ１０２は、不揮発性の記憶領域であり、ＢＩＯＳ（Basic  Input/Output  System）や各種のデータ等が記憶される。ＲＡＭ１０３は、揮発性のメモリであり、ＣＰＵ１０１によるプログラムの実行に必要なデータを格納するための作業領域を提供する。通信インタフェース１０４は、ＰＣ１０が外部の機器と通信するためのインタフェースである。ディスプレイ１０５は、ＣＰＵ１０１等による演算の結果を画像により出力するための表示機器である。入出力インタフェース１０６は、ＰＣ１０がユーザの入力操作等を受け付け、ＰＣ１０の動作状態を出力するためのインタフェースである。
【００４７】
図５（Ｂ）は、ＰＬＣ３０のハードウェア構成を示す図である。ＰＬＣ３０は、ＣＰＵ３０１と、ＲＯＭ３０２と、ＲＡＭ３０３と、通信インタフェース３０４と、バス３０７と、不揮発性メモリ３０８等を備える。ＰＬＣ４０もＰＬＣ３０と同様のハードウェア構成を備える。ＣＰＵ３０１は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。ＣＰＵ３０１は、内部クロックに従って順次供給される命令コードを解釈して実行する。
【００４８】
ＰＬＣ３０とＰＬＣ４０とは、記憶手段として、ＲＯＭ３０２と、ＲＡＭ３０３と、不揮発性メモリ３０８とを有する。ＲＡＭ３０３は、揮発性の記憶領域であり、ＣＰＵ３０１で実行されるべき各種プログラムを保持するとともに、各種プログラムの実行時の作業用メモリとしても使用される。ＲＯＭ３０２は、不揮発性の記憶領域であり、ＢＩＯＳや各種のデータ、ＯＳ、システムプログラム等が記憶される。不揮発性メモリ３０８は、不揮発性の記憶領域であり、共有メモリ３０９を含む。共有メモリ３０９は、ユーザプログラム３２と、ＤＢアクセス処理プログラム３５とがアクセス可能な記憶領域である。
【００４９】
通信インタフェース３０４は、ＰＬＣ３０が外部の機器と通信するためのインタフェースである。ＰＬＣ３０は、例えば、ＵＳＢ規格に従ってＰＣ１０と接続ケーブルにより接続される。また、ＰＬＣ３０は、イーサネット（登録商標）などのネットワークによってＤＢサーバ２０と接続される。
【００５０】
バス３０７は、ＰＬＣ３０において、ＣＰＵユニットとＩＯユニットとがデータを遣り取りするための通信路（システムバス）と接続するためのコネクタと、外部のフィールド機器との間でデータを遣り取りするためのフィールドバスと接続するためのコネクタとを含む。
【００５１】
ＰＬＣ３０は、図４と図５（Ｂ）とを用いて説明した構成を備えており、ＣＰＵ３０１がシステムプログラム３３およびユーザプログラム３２を実行することにより、「制御対象を制御するためのユーザプログラムを実行するための命令実行部」として機能する。
【００５２】
また、ＰＬＣ３０は、ＣＰＵ３０１がＤＢアクセス処理プログラム３５およびユーザプログラム３２を実行することにより、「ＤＢサーバ２０へアクセスするためのアクセス命令を含むユーザプログラム３２の命令実行部による実行時に、ＤＢサーバ２０への通信インタフェース３０４を介したアクセスを制御するアクセス処理部」として機能する。
【００５３】
ＰＬＣ３０は、ＣＰＵ３０１が、ユーザプログラム３２に含まれるアクセス命令に応じてＤＢアクセス処理プログラム３５を実行することにより、「命令実行部が、ユーザプログラムに含まれるアクセス命令の実行時に、ＤＢサーバ２０への送信対象のデータを不揮発性メモリ３０８の共有メモリ３０９に格納し、アクセス処理プログラム３５にアクセスの実行を指示することでアクセス処理プログラム３５へ処理」を渡す。
【００５４】
また、ＰＬＣ３０は、ＣＰＵ３０１が、ユーザプログラム３２に含まれるアクセス命令に応じてＤＢアクセス処理プログラム３５を実行することにより、「アクセス処理プログラム３５が、命令実行部の指示に応じて不揮発性メモリ３０８の共有メモリ３０９からＤＢサーバ２０への送信対象のデータを読み出して、読みだされたデータに基づきＤＢサーバ２０へアクセスするための命令文（ＳＱＬ文）を生成し、生成した命令文をＤＢサーバ２０へ送信する命令文送信部」として機能する。
【００５５】
また、ＰＬＣ３０は、ＣＰＵ３０１が、ユーザプログラム３２に含まれるアクセス命令に応じてＤＢアクセス処理プログラム３５を実行することにより、「アクセス処理プログラム３５が、命令実行部の指示に応じた処理を開始してから命令文送信部により生成された命令文に基づく処理が完了するまでの間、命令文の実行状況を示すステータス情報５１を生成し、生成されたステータス情報５１を不揮発性メモリ３０８の記憶領域に記憶させるステータス出力部」として機能する。
【００５６】
＜データ＞
次に、本実施形態で用いるデータについて、説明する。
【００５７】
図６は、ステータス情報５１に保持されるデータの内容を示す図である。ステータス情報５１は、不揮発性メモリ３０８の共有メモリ３０９に保持される。本実施の形態において、ＤＢアクセス処理プログラム３５は、ユーザプログラム３２において指定される命令に応じて呼び出され、命令内容に応じてＤＢサーバ２０へ送信するためのＳＱＬ文を生成し、生成されたＳＱＬ文をＤＢサーバ２０へ送信する。ＤＢアクセス処理プログラム３５は、送信したＳＱＬ文に対するＤＢサーバ２０からの応答を、ユーザプログラム３２へ渡す。ステータス情報５１の内容は、以上のＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセス状況（アクセスの進捗状況）に応じて定義されている。
【００５８】
例えば、ステータス情報５１の内容は、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセスの初期状態を示す「_DBC_SEND_INIT」（初期状態）、ＤＢアクセス処理プログラム３５によってＤＢサーバ２０へとＳＱＬ文を送信する前（未送信）の状態を示す「_DBC_SEND_UNSENT」（ＳＱＬ文未送信）、ＤＢアクセス処理プログラム３５によってＤＢサーバ２０へとＳＱＬ文を送信しており、送信が完了するまでの状態を示す「_DBC_SEND_SENDING」（ＳＱＬ文送信中）、ＤＢアクセス処理プログラム３５によってＤＢサーバ２０へ送信するＳＱＬ文がスプールされ、不揮発性のメモリにＳＱＬ文が保持されている状態を示す「_DBC_SEND_SPOOLED」（ＳＱＬ文スプール）、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのＳＱＬ文の送信が完了した状態を示す「_DBC_SEND_COMPLETE」（ＳＱＬ文送信完了）がある。
【００５９】
図７は、共有メモリ３０９に記憶されるステータス情報５１を示す図である。図７に示すように、ステータス情報５１は、識別情報５１１と、進捗状況５１２と、データサイズ５１３と、データ本体５１４とを含む。
【００６０】
識別情報５１１は、ＤＢアクセス処理プログラム３５がＤＢサーバ２０へと送信するＳＱＬ文のそれぞれを識別するための情報であり、例えば、接続先のデータベースを特定する情報、テーブル名などを含む。
【００６１】
進捗状況５１２は、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセス状況を示す。例えば、図６で説明したアクセス状況（アクセスの進捗状況）に応じてＤＢアクセス処理プログラム３５が進捗状況５１２を更新する。
【００６２】
データサイズ５１３は、ＤＢアクセス処理プログラム３５がＤＢサーバ２０へ送信するデータの大きさを示す。
【００６３】
データ本体５１４は、ＤＢアクセス処理プログラム３５がＤＢサーバ２０へ送信するデータそのものを示す。
【００６４】
＜動作＞
次に、本実施形態におけるＰＬＣ３０の動作について、図面を用いて詳しく説明する。実施の形態１における動作の概要は、以下のとおりである。ＰＣ１０は、ユーザの操作入力に基づいて、ＰＬＣ３０で実行させるユーザプログラムを作成する。ＰＬＣ３０は、ＰＣ１０からユーザプログラムを受信して記憶する。ＰＬＣ３０は、シーケンス命令プログラム３４によるユーザプログラム３２の実行に伴ってＤＢアクセス処理プログラム３５を呼び出す。ＰＬＣ３０は、ユーザプログラム３２がＤＢサーバ２０へアクセスするための処理、例えばＳＱＬ文の生成と送信等をＤＢアクセス処理プログラム３５により行う。
【００６５】
図８は、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセス処理を示すフローチャートである。図８においては、処理の各段階において、ＰＬＣ３０が共有メモリ３０９に出力するステータス情報５１の内容を示している。ＰＬＣ３０は、シーケンス命令プログラム３４によって、ＤＢサーバ２０へアクセスするための命令を含むユーザプログラム３２を実行する。ＰＬＣ３０は、シーケンス命令プログラム３４によって、ＤＢサーバ２０に保持させるデータおよび接続先のデータベースを特定する情報等を共有メモリ３０９へ書き込む。ＰＬＣ３０は、シーケンス命令プログラム３４がユーザプログラム３２に含まれる命令を実行し、命令に応じてＤＢアクセス処理プログラム３５を呼び出すことでＤＢアクセス処理プログラム３５へと処理が渡される。このとき、ＤＢアクセス処理プログラム３５は、ステータス情報５１の進捗状況５１２に、データベースへのアクセスの初期状態を示す「_DBC_SEND_INIT」を初期値として格納する。
【００６６】
ステップＳ１１において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ＤＢサーバ２０へアクセスするための値（ＤＢサーバ２０へ書き込む対象となるデータであって、共有メモリ３０９に蓄積されたデータ）を共有メモリ３０９から読み出す。このとき、ＤＢアクセス処理プログラム３５は、ステータス情報５１の進捗状況５１２に、ＳＱＬ文の未送信を示す「_DBC_SEND_UNSENT」を格納する。
【００６７】
ステップＳ１３において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ＤＢサーバ２０へアクセスするためのＳＱＬ文を生成してＤＢサーバ２０へ送信する。このとき、ＤＢアクセス処理プログラム３５は、ステータス情報５１の進捗状況５１２に、ＳＱＬ文が送信中の状態であることを示す「_DBC_SEND_SENDING」を格納する。
【００６８】
ステップＳ１５において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ＤＢサーバ２０に対して送信したＳＱＬ文について、ＤＢサーバ２０からのＡｃｋ応答（送信Ａｃｋ）があるか、タイムアウトするまで待機する。なお、このときステータス情報５１の進捗状況５１２は、ＳＱＬ文が送信中であることを示す「_DBC_SEND_SENDING」が格納されている。
【００６９】
ステップＳ１７において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ＤＢサーバ２０との通信に異常があったか否か（ＤＢサーバ２０との通信においてエラーの受信があった、またはＡｃｋ応答の受信処理がタイムアウトしたかの少なくともいずれか一方）を判定する。なお、このときステータス情報５１の進捗状況５１２は、ＳＱＬ文が送信中であることを示す「_DBC_SEND_SENDING」である。ステップＳ１７において、ＤＢサーバ２０との通信に異常があった場合（ステップＳ１７においてＹＥＳ）、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ステップＳ２１の処理を行う。ステップＳ１７において、ＤＢサーバ２０との通信が正常に終了した場合（ステップＳ１７においてＮＯ）、ＤＢアクセス処理プログラム３５によってステップＳ１９の処理を行う。
【００７０】
ステップＳ１９（ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのＳＱＬ文の送信が正常に終了）において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ＤＢアクセス処理プログラム３５を呼び出したプログラムに対してＤＢサーバ２０へのアクセスが完了したことを示す応答を出力する。このとき、ＤＢアクセス処理プログラム３５は、ステータス情報５１の進捗状況５１２に、ＳＱＬ文の送信が完了したことを示す「_DBC_SEND_COMPLETE」を格納する。
【００７１】
ステップＳ２１において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、ＤＢサーバ２０への送信が正常に終了しなかったＳＱＬ文を不揮発性のメモリにスプールする。スプールが完了するまでの間、ステータス情報５１の進捗状況５１２は、ＳＱＬ文が送信中であることを示す「_DBC_SEND_SENDING」が格納される。
【００７２】
ステップＳ２３において、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのアクセスが終了したことを示す応答を、ＤＢアクセス処理プログラム３５を呼び出したユーザプログラム３２に対して出力する。このとき、ＤＢアクセス処理プログラム３５は、ステータス情報５１に、ＳＱＬ文がスプールされていることを示す「_DBC_SEND_SPOOLED」を格納する。
【００７３】
図９は、ユーザプログラム３２の命令に従ってＤＢアクセス処理プログラム３５によりＤＢサーバ２０へのアクセスを開始し、ステータス情報５１の進捗状況５１２を更新する処理を示す図である。
【００７４】
（１）データ格納
ユーザプログラム３２に含まれるＤＢ命令６０は、ＤＢアクセス処理プログラム３５を呼び出してＤＢサーバ２０へアクセスするためのものであり、ＤＢサーバ２０への接続命令を示すDB_Connect命令６１と、ＤＢサーバ２０にデータを挿入するDB_Insert命令６２等を含む。ＰＬＣ３０は、シーケンス命令プログラム３４によって、ユーザプログラム３２に含まれる命令を順に実行する。ＰＬＣ３０は、シーケンス命令プログラム３４によって、ユーザプログラム３２に含まれるＤＢ命令６０を実行することで、ＤＢサーバ２０へ送信するデータを共有メモリ３０９に格納する。
【００７５】
（２）指示
ＰＬＣ３０は、シーケンス命令プログラム３４によってユーザプログラム３２に含まれるＤＢ命令６０を実行することで、ＤＢアクセス処理プログラム３５を呼び出す。このＤＢアクセス処理プログラム３５の呼び出しにより、ユーザプログラム３２を実行するシーケンス命令プログラム３４からＤＢアクセス処理プログラム３５に対し、ＤＢサーバ２０へのアクセスを指示する。
【００７６】
（３）現在値読み出し
ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によってステップＳ１１の処理を実行する。
【００７７】
なお、共有メモリ３０９は、ＦＩＦＯ（First  in  First  out）形式のデータ構造を有するものとしてもよい。
【００７８】
（４）送信
ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によってステップＳ１３の処理を実行する。
【００７９】
（５）送信Ａｃｋ
ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によってステップＳ１５およびステップＳ１７の処理を実行する。
【００８０】
（６−１）障害時、（６−２）命令タイムアウト時
ＰＬＣ３０は、ＤＢアクセス処理プログラム３５を実行することでステップＳ２１の処理を実行する（不揮発性のメモリにＳＱＬ文をスプールする）。なお、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によってＳＱＬ文をスプールする際、ＳＱＬ文を送信すべき対象のデータベースを識別するための情報（コネクション名など）をＳＱＬ文とともに不揮発性のメモリに格納する。これにより、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、スプールされたＳＱＬ文をデータベースへ再送する際に、再送先となるデータベースを特定することができる。
【００８１】
なお、ＳＱＬ文をスプールするための不揮発性のメモリは、共有メモリ３０９としてもよいし、共有メモリ３０９とは別の記憶手段としてもよい。
【００８２】
（７−１）完了、（７−２）完了（スプール）
ＰＬＣ３０は、ＤＢアクセス処理プログラム３５を実行することでステップＳ１９またはステップＳ２３の処理を実行する。
【００８３】
図１０は、電断のタイミングと、共有メモリ３０９に記憶される進捗状況５１２と、電断発生時に取りうる処置とを示す図である。
【００８４】
図１０における電断のタイミング（１）開始、（２）指示、（３）現在値の読み出し、（４）送信、（５）送信Ａｃｋ、（６−１）障害時、（６−２）命令タイムアウト時、（７−１）完了、（７−２）完了（スプール）は、図９で説明した各タイミングに対応する。図１０を参照して、電断のタイミングが「（１）開始」と「（２）指示」と「（３）現在値の読み出し」の場合、ＤＢアクセス処理プログラム３５によるＤＢサーバ２０へのＳＱＬ文の送信はなされていない。そのため、電断発生時に取りうる処置は、ＰＬＣ３０が、シーケンス命令プログラム３４によってユーザプログラムを実行することでＤＢアクセス処理プログラム３５を再度呼び出して、このＤＢアクセス処理プログラム３５によってＳＱＬ文を再送することである。
【００８５】
なお、共有メモリ３０９に、ＤＢサーバ２０へアクセスするためのデータを格納している場合、ＰＬＣ３０は、ＤＢアクセス処理プログラム３５によって、共有メモリ３０９を参照してデータを読み出して、ＳＱＬ文の生成およびＤＢサーバ２０への送信を行う。
【００８６】
電断のタイミングが「（４）送信、（５）送信Ａｃｋ、（６−１）障害時、（６−２）命令タイムアウト時」の場合は、ＰＬＣ３０がＤＢアクセス処理プログラム３５によってＳＱＬ文の送信を行っている。そのため、電断発生時に取りうる処置は、ＰＬＣ３０が、リカバリ処理によってＤＢサーバ２０側のレコードの有無を確認し、ＤＢサーバ２０にレコードが記録されていない場合にＤＢアクセス処理プログラム３５によってＳＱＬ文をＤＢサーバ２０へ再送することとなる。
【００８７】
電断のタイミングが「（７−１）完了」の場合、ＰＬＣ３０がＤＢアクセス処理プログラム３５によってＤＢサーバ２０へＳＱＬ文を送信する処理が完了している。そのため、電断発生時においても特段の処置は必要とされない。
【００８８】
電断のタイミングが「（７−２）完了（スプール）」の場合、ＰＬＣ３０がＤＢアクセス処理プログラム３５によってＳＱＬ文を不揮発性のメモリにスプールしている。そのため、電断発生時に取りうる処置は、不揮発性のメモリにスプールされているＳＱＬ文を、ＰＬＣ３０がＤＢアクセス処理プログラム３５によってＤＢサーバ２０へ再送することである。
【００８９】
＜リカバリ＞
上記のようにＰＬＣ３０がＤＢアクセス処理プログラム３５によってＤＢサーバ２０へアクセスする際にアクセス状況をステータス情報５１に出力する動作を説明した。ここで、ＰＬＣ３０が、電断発生時にリカバリするための処理の例を説明する。
【００９０】
（１）システムプログラムによるＳＱＬ文の再送
ＰＬＣ３０は、不揮発性のメモリにスプールされているデータがある場合、電断が発生した後のリカバリを、不揮発性のメモリにスプールされているデータを自動的にＤＢサーバ２０へ再送することによって行うこととしてもよい。例えば、ＰＬＣ３０は、電断が発生した後、電断からの復帰時に自動的に実行するリカバリプログラムを不揮発性のメモリの保持している。リカバリプログラムは、ＰＬＣ３０がシステムプログラム３３によってステータス情報５１を参照してＳＱＬ文の送信状況を確認し、送信状況に応じてＳＱＬ文のＤＢサーバ２０への再送を行う処理を含む。ＰＬＣ３０は、電断からの復帰時にリカバリプログラムを実行し、システムプログラム３３によってステータス情報５１を参照してＳＱＬ文の送信状況を確認する。ＰＬＣ３０は、ステータス情報５１において「_DBC_SEND_SENDING」（ＳＱＬ文送信中）と示されている場合は、ＤＢアクセス処理プログラム３５によってＤＢサーバ２０のレコードの有無を確認し、確認結果に応じてＳＱＬ文を再送する。
【００９１】
（２）ユーザプログラムからの指示に基づくリカバリ
ＰＬＣ３０は、電断が発生した後のリカバリを、例えば、ユーザプログラムからの指示をきっかけとして開始し、不揮発性のメモリに格納されたステータス情報５１を参照することとしてもよい。例えば、リカバリのためのユーザプログラム（リカバリプログラム）の作成者は、ＰＬＣ３０の電源投入後の１サイクル目に不揮発性のメモリに格納されたステータス情報５１を参照するようユーザプログラムに命令を含め、ステータス情報５１に示されるＳＱＬ文の送信状況に応じた処理をＰＬＣ３０に行わせるようユーザプログラムを作成する。ＰＬＣ３０は、電源投入後の１サイクル目にステータス情報５１を参照し、ステータス情報５１において、「_DBC_SEND_UNSENT」（ＳＱＬ文未送信）と示されている場合は、ＳＱＬ文を再送する。また、ステータス情報５１において「_DBC_SEND_SENDING」（ＳＱＬ文送信中）と示されている場合は、ＰＬＣ３０は、ＤＢサーバ２０のレコードの有無を確認し、確認結果に応じてＳＱＬ文を再送する。
【００９２】
なお、上述の「（１）システムプログラムによるＳＱＬ文の再送」では、不揮発性のメモリにスプールされているデータがある場合に、システムプログラム３３によって、ＤＢサーバ２０へのデータの再送を自動的に行うことを説明したが、不揮発性のメモリにデータが残っていない場合は、ユーザプログラムからの指示に基づくリカバリ処理を行う必要がある。
【００９３】
このように各実施形態について説明してきたが、これら実施形態を組み合わせてもよいことはいうまでもない。以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００９４】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００９５】
１０  ＰＣ、１２  プログラミングツール、１４  命令実行状態取得部、１６  プログラミング機能、２０  ＤＢサーバ、２２  ＤＢＭＳ、２４  ＤＢ、３０  ＰＬＣ、３１  ＯＳ、３２  ユーザプログラム、３３  システムプログラム、３４  シーケンス命令プログラム、３５  ＤＢアクセス処理プログラム、３６  入出力処理プログラム、３７  ツールインタフェース処理プログラム、３８  スケジューラ、３９  制御プログラム、４０  ＰＬＣ、５１  ステータス情報、１０１  ＣＰＵ、１０２  ＲＯＭ、１０３  ＲＡＭ、１０４  通信インタフェース、１０５  ディスプレイ、１０６  入出力インタフェース、３０１  ＣＰＵ、３０２  ＲＯＭ、３０３  ＲＡＭ、３０４  通信インタフェース、３０７  バス、３０８  不揮発性メモリ、３０９  共有メモリ。
【図１】
2014197346.tif 000003
【図２】
2014197346.tif 000004
【図３】
2014197346.tif 000005
【図４】
2014197346.tif 000006
【図５】
2014197346.tif 000007
【図６】
2014197346.tif 000008
【図７】
2014197346.tif 000009
【図８】
2014197346.tif 000010
【図９】
2014197346.tif 000011
【図１０】
2014197346.tif 000012