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