(57)【特許請求の範囲】
【請求項１】
プログラマブルコントローラと該プログラマブルコントローラが得た所定のデータを保存するデータベースとが通信路を介して接続されたデータ収集システムであって、
前記プログラマブルコントローラは、
前記通信路を介して、前記データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群を前記データベースに送信するＳＱＬ送信部と、
前記ＳＱＬ処理群を送信した際に前記データベースの無応答による通信異常の発生により、前記ＳＱＬ処理群を所定の記憶手段に退避するバッファ処理部と、
前記通信異常が復旧されたとき、前記データベースが備える受信バッファに保持された前記ＳＱＬ処理群を獲得するコマンドを前記データベースに送信するコマンド送信部と、を備え、
前記データベースは、
前記コマンド送信部により送信されたコマンドを受信した際、前記受信バッファが前記ＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータを前記プログラマブルコントローラに送信する復帰応答部を備え、
前記プログラマブルコントローラは、
前記データベースから前記エンプティデータを受信すると、前記所定の記憶手段に退避されたＳＱＬ処理群を前記データベースに送信する異常復帰処理部をさらに備えることを特徴とするデータ収集システム。
【請求項２】
プログラマブルコントローラと該プログラマブルコントローラが得た所定のデータを保存するデータベースとが通信路を介して接続されたデータ収集システムであって、
前記プログラマブルコントローラは、
前記通信路を介して、前記データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群を前記データベースに送信するＳＱＬ送信部と、
前記ＳＱＬ処理群を送信した際に前記データベースの無応答による通信異常の発生により、前記ＳＱＬ文および前記ＳＱＬ処理群それぞれを所定の記憶手段に退避するバッファ処理部と、
前記通信異常が復旧されたとき、前記データベースが備える受信バッファに保持された前記ＳＱＬ処理群を獲得するコマンドを前記データベースに送信するコマンド送信部と、を備え、
前記データベースは、
前記コマンド送信部により送信されたコマンドを受信した際、前記受信バッファが前記ＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータを前記プログラマブルコントローラに送信し、前記受信バッファが前記ＳＱＬ処理群を保持しているとき、この保持された前記ＳＱＬ処理群を前記プログラマブルコントローラに送信する復帰応答部を備え、
前記プログラマブルコントローラは、
前記データベースから前記エンプティデータを受信すると、前記所定の記憶手段に退避されたＳＱＬ処理群を前記データベースに送信し、前記データベースから前記ＳＱＬ処理群を受信すると、この獲得したＳＱＬ処理群に含まれるＳＱＬ文に続く差分のＳＱＬ文を前記記憶手段に退避されたＳＱＬ文から抽出して送信する異常復帰処理部をさらに備えることを特徴とするデータ収集システム。
【請求項３】
プログラマブルコントローラと該プログラマブルコントローラが得た所定のデータを保存するデータベースとが通信路を介して接続されたデータ収集システムの異常要因判定方法であって、
前記プログラマブルコントローラは、
前記データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群を、前記通信路を介して前記データベースに送信し、この送信の際に前記データベースの無応答による通信異常が発生した後、前記通信異常が復旧すると、前記データベースに送信し受信された前記ＳＱＬ処理群を前記データベースから獲得するコマンドを前記データベースに送信し、
前記データベースは、
前記コマンドを受信した際、自身が備える受信バッファが前記ＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータを前記プログラマブルコントローラに送信し、前記受信バッファが前記ＳＱＬ処理群を保持しているとき、この保持された前記ＳＱＬ処理群を前記プログラマブルコントローラに送信し、
前記プログラマブルコントローラは、
前記データベースから前記エンプティデータを受信すると前記データベースの電源の遮断による異常と判定し、前記データベースから前記ＳＱＬ処理群を受信すると前記通信路の断線による異常と判定することを特徴とするデータ収集システムの異常要因判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
プログラマブルコントローラ（ＰＬＣ）等の制御装置が収集した所定のデータをデータベースに保存するデータ収集システムに関する。
【背景技術】
【０００２】
ネットワークなどの通信路を介してＰＬＣとデータベースとを接続し、ＰＬＣが収集したデータをデータベースに送信して管理するデータ収集管理システムが、従来から知られている。
【０００３】
例えば、特許文献１（特開２００３−１１４９０８号公報）に記載された発明は、ＰＬＣと上位コンピュータ間にデータ収集装置が接続され、該データ収集装置が上位コンピュータからネットワークを介してデータ収集の指示を受信し、この指示に従ってＰＬＣ内部のデータを収集して上位コンピュータへ送信するよう構成されている。
【０００４】
また、特許文献２（特開２００７−２１９９２０号公報）に記載された発明は、ＰＬＣと上位コンピュータ間にデータ収集装置が接続され、上位コンピュータがデータ収集装置から得た設定ファイルと記録データファイルとに基づいたＳＱＬ構文を生成し、このＳＱＬ構文を用いてデータベースにデータを記録するよう構成されている。
【０００５】
一般にＳＱＬ構文を用いてデータベースをアクセスするよう構成されたシステムでは、ＳＱＬ構文などを授受する通信路（上位コンピュータとデータベース間）で通信異常が発生したとき、誤ったデータがデータベースに反映されるのを防ぐためロールバック処理が行われている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−１１４９０８号公報
【特許文献２】特開２００７−２１９９２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上位コンピュータがデータベースをアクセスしている最中にデータベースの電源が遮断され接続異常（通信異常）が発生した場合、データベースにどこまでのデータが反映されたか不明になるとともにロールバックも行われず、データベースの電源が復旧された後、電源遮断前後でのデータの連続性を保つことが困難となる。
【０００８】
本発明はこのようなことを鑑みて考案されたものであり、その目的はデータベースの電源遮断による接続異常が発生した場合においても、電源遮断前後でのデータの連続性を保って通信することが可能なデータ収集システム、データ収集システムの異常要因判定方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記のような課題を解決するために、本発明は以下のように構成される。
請求項１に係る発明は、プログラマブルコントローラと該プログラマブルコントローラが得た所定のデータを保存するデータベースとが通信路を介して接続されたデータ収集システムであって、プログラマブルコントローラは、通信路を介して、データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群をデータベースに送信するＳＱＬ送信部と、ＳＱＬ処理群を送信した際にデータベースの無応答による通信異常の発生により、ＳＱＬ処理群を所定の記憶手段に退避するバッファ処理部と、通信異常が復旧されたとき、データベースが備える受信バッファに保持されたＳＱＬ処理群を獲得するコマンドをデータベースに送信するコマンド送信部と、を備え、データベースは、コマンド送信部により送信されたコマンドを受信した際、受信バッファがＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータをプログラマブルコントローラに送信する復帰応答部を備え、プログラマブルコントローラは、データベースからエンプティデータを受信すると、所定の記憶手段に退避されたＳＱＬ処理群をデータベースに送信する異常復帰処理部をさらに備えるよう構成する。
【００１０】
請求項２に係る発明は、プログラマブルコントローラと該プログラマブルコントローラが得た所定のデータを保存するデータベースとが通信路を介して接続されたデータ収集システムであって、プログラマブルコントローラは、通信路を介して、データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群をデータベースに送信するＳＱＬ送信部と、ＳＱＬ処理群を送信した際にデータベースの無応答による通信異常の発生により、ＳＱＬ文およびＳＱＬ処理群それぞれを所定の記憶手段に退避するバッファ処理部と、通信異常が復旧されたとき、データベースが備える受信バッファに保持されたＳＱＬ処理群を獲得するコマンドをデータベースに送信するコマンド送信部と、を備え、データベースは、コマンド送信部により送信されたコマンドを受信した際、受信バッファがＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータをプログラマブルコントローラに送信し、受信バッファがＳＱＬ処理群を保持しているとき、この保持されたＳＱＬ処理群をプログラマブルコントローラに送信する復帰応答部を備え、プログラマブルコントローラは、データベースからエンプティデータを受信すると、所定の記憶手段に退避されたＳＱＬ処理群をデータベースに送信し、データベースからＳＱＬ処理群を受信すると、この獲得したＳＱＬ処理群に含まれるＳＱＬ文に続く差分のＳＱＬ文を記憶手段に退避されたＳＱＬ文から抽出して送信する異常復帰処理部をさらに備えるよう構成する。
【００１１】
請求項３に係る発明は、プログラマブルコントローラと該プログラマブルコントローラが得た所定のデータを保存するデータベースとが通信路を介して接続されたデータ収集システムの異常要因判定方法であって、プログラマブルコントローラは、データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群を、通信路を介してデータベースに送信し、この送信の際にデータベースの無応答による通信異常が発生した後、通信異常が復旧すると、データベースに送信し受信されたＳＱＬ処理群をデータベースから獲得するコマンドをデータベースに送信し、データベースは、コマンドを受信した際、自身が備える受信バッファがＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータをプログラマブルコントローラに送信し、受信バッファがＳＱＬ処理群を保持しているとき、この保持されたＳＱＬ処理群をプログラマブルコントローラに送信し、プログラマブルコントローラは、データベースからエンプティデータを受信するとデータベースの電源の遮断による異常と判定し、データベースからＳＱＬ処理群を受信すると通信路の断線による異常と判定するよう構成する。
【発明の効果】
【００１２】
本発明のＰＬＣは、データベースをアクセスするＳＱＬ文を複数含むＳＱＬ処理群をデータベースに送信する機能を有し、このＳＱＬ処理群を送信した際にデータベースの無応答による通信異常が発生すると、個々のＳＱＬ文およびＳＱＬ処理群を記憶手段に退避する。この後、ＰＬＣは、通信異常が復旧されたとき、データベースの受信バッファに保持されたＳＱＬ処理群を獲得するコマンドをデータベースに送信する。
【００１３】
一方、データベースは、ＰＬＣによって送信されたコマンドを受信した際、受信バッファがＳＱＬ処理群を未保持のとき、この未保持を示すエンプティデータをＰＬＣに送信し、受信バッファがＳＱＬ処理群を保持しているとき、この保持されたＳＱＬ処理群をプログラマブルコントローラに送信する。
【００１４】
そして、ＰＬＣは、データベースからエンプティデータを受信すると、記憶手段に退避したＳＱＬ処理群をデータベースに送信し、データベースからＳＱＬ処理群を受信すると、この獲得したＳＱＬ処理群に含まれるＳＱＬ文に続く差分のＳＱＬ文を、記憶手段に退避したＳＱＬ文から抽出して送信する。
【００１５】
このようにすることにより、本発明はＰＬＣがデータベースをアクセスしている最中にデータベースの電源が遮断され接続異常（通信異常）が発生した場合でも、電源遮断前後でのデータの連続性を保つことができる。また、データベースの電源遮断以外の通信異常については、データベースに到達していない構文から再送信するようにしたので、構文を再送信する時間が削減される。
【図面の簡単な説明】
【００１６】
【図１】本発明のデータベースアクセスシステムの一実施形態を示すシステム構成図
【図２】図１に係るプログラマブルコントローラおよびデータベースの一例を示す内部構成図
【図３】ＳＱＬ構文によるデータベースアクセス手順を示す説明図
【図４】図１に係るＰＬＣがＳＱＬ構文を生成しデータベースに送信する処理を示す説明図
【図５】図１に係るＰＬＣがデータベースをアクセスする通信手順を示す説明図
【図６】図１に係るＰＬＣがデータベースをアクセスした際の構文異常によるロールバック処理を示す説明図
【図７】本発明に係るバッファ処理部の動作の一例を示す説明図
【図８】本発明に係る通信異常が復旧されたときの動作の一例を示す説明図
【図９】本発明に係るデータベースの電源遮断による通信異常復帰時の処理を示す説明図
【図１０】本発明に係るデータベースの通信路の異状による通信異常復帰時の処理を示す説明図
【発明を実施するための形態】
【実施例】
【００１７】
以下、本発明の一実施形態について、図面を参照しながら説明する。
図１は、本発明に係るデータベースアクセスシステムの一実施形態を説明する構成図である。図１に示すように、このシステムは、データベース２００がプログラマブルコントローラ（以下、ＰＬＣという）１００，１１０，１２０とネットワークなどの通信路３００を介して接続されている。ＰＬＣ１００，１１０，１２０はそれぞれ外部機器３０，３１，３２に接続されるとともにコンパクトフラッシュ(登録商標)などの記憶媒体をアクセスする機能を有する。以下、ＰＬＣに係る構成はＰＬＣ１００，ＰＬＣ１１０，ＰＬＣ１２０それぞれ同じなので、以降の説明はＰＬＣ１００の説明とし、ＰＬＣ１１０、ＰＬＣ１２０の説明は省略する。
【００１８】
ＰＬＣ１００はネットワークなどの通信路３００を介してデータベース２００に接続され、シーケンス制御プログラムを実行しながら該ＰＬＣ１００に接続された外部機器（制御対象機器，センサ等）との間で制御のための情報の伝送を行いつつ、データベース２００との間で情報の送受を行う。データベース２００側では、ＰＬＣ１００から上がってくるデータ（センサで検出したデータや、外部機器３０の稼動状態等のデータなど）を受信して保存し、各種の管理、そして受信したデータをユーザが加工できるようになっている。
【００１９】
図２はＰＬＣ１００およびデータベース２００の内部構成図である。ＰＬＣ１００は中央演算部１０９（ＣＰＵ）、プログラムメモリ（ＦＬＡＳＨ）１０１、作業メモリ（ＲＡＭ（Random Access Memory））１０２、コンパクトフラッシュ(登録商標)などの記憶媒体をアクセスするＣＦインタフェース部１０４、データベース２００と通信する通信部１０７、通信データを保持するデータメモリ（ＲＡＭ（Random Access Memory））１０８、入出力部１０６などを有し、それらが内部バス１０３により接続されている。
【００２０】
中央演算部１０９はシーケンスプログラム実行部１０９ａ、ＳＱＬ送信部１０９ｂ、バッファ処理部１０９ｃ、コマンド送信部１０９ｄ、異常復帰処理部１０９ｅを備えている。ＰＬＣ１００はシーケンスプログラム実行部１０９ａがプログラムメモリ１０１に保持されたシーケンス制御プログラムを実行することにより入出力部１０６を介して外部機器３０を制御するよう構成されている。なお、ＳＱＬ送信部１０９ｂ、バッファ処理部１０９ｃ、コマンド送信部１０９ｄ、異常復帰処理部１０９ｅについては、後にその動作を詳述する。
【００２１】
データベース２００は、ＰＬＣ１００と通信する通信部２０１、通信部２０１が受信した受信データを保持する受信バッファ２０２、送信データを保持する送信バッファ２０３、通信部２０１を介して受信された構文（ＳＱＬ構文、またはＳＱＬ電文ともいう）に従って所定の処理を実行するＳＱＬ実行部２０４、通信異常が復帰したときに復帰処理を実行する復帰応答部２０５、データベース化されたデータを記憶する記憶部２０６を備えている。
【００２２】
図３は構文によるデータベースアクセス手順を示す説明図である。ＰＬＣ１００がデータベース２００をアクセスする基本的な手順は、例えば図３に示すようにデータベース接続要求から始まり、続いて、いくつかのデータベース操作処理（処理１〜処理３）、データベースにデータを反映させるｃｏｍｍｉｔ（処理４）、そしてコネクション切断といった一連の構文をデータベースに送信することにより実行される。本発明ではこの一連の構文をまとめたもの、すなわちＰＬＣ１００がデータベースをアクセスするための一連の構文の集まりを「処理単位」として定義している。ＰＬＣ１００は、この処理単位を基本としてデータベースにアクセスする。
【００２３】
図４は、本発明に係るＰＬＣ１００が構文を生成しデータベースに送信する処理（ＳＱＬ送信部１０９ｂ）を示す説明図である。ＰＬＣ１００は、電源オンまたはリセットスタート後、イニシャル処理Ｓ１にてデータベース２００のテーブル名や項目名、そして構文のテンプレートデータなどをコンパクトフラッシュ(登録商標)などから読み出しておく。イニシャル処理Ｓ１を終えたＰＬＣ１００は以降運用状態となり、ＰＬＣ１００に接続されたセンサによって検出されたデータや外部機器３０の稼動状態等のデータなどを収集する（データ収集処理Ｓ２）。この収集処理は、例えば生産システムであれば一日単位、もしくは１時間単位など、所定の時間毎にデータを蓄積するよう行っても良い。
【００２４】
続いて、収集したデータを構文で送信するために加工・編集・圧縮などの処理を行い（データ処理Ｓ３）、このデータ処理されたデータをＳＱＬテンプレートに組み込んで（ＳＱＬ文生成処理Ｓ４）データベース２００に送信する（データ送信処理Ｓ５）。
【００２５】
データベース２００はＰＬＣ１００によって送信されたＳＱＬデータを受信し、受信の完了をＰＬＣ１００に伝える（データ受信処理Ｓ６）。このとき、データ送信処理Ｓ５は前述説明したように複数の構文（ＤＢ接続要求〜コネクション切断）を一連の処理とした処理単位で通信を行っている。データベース２００はこの処理単位毎に応答を返しており、ＰＬＣ１００はこの応答を受信するとその都度そのときの通信処理を完了する。
【００２６】
図５はＰＬＣ１００がデータベース２００を処理単位にてアクセスする際、正常に通信が行われたときの処理を示す説明図である。図５の左部分に処理ステップを示しこの処理ステップに従い動作を説明する。ステップＳ１０において、ＰＬＣ１００はデータベースとコネクションを確立するために接続要求を送信する。データベース２００は接続要求を受信すると接続許可をＰＬＣ１００に応答する。ＰＬＣ１００は予め設定された時間以内に接続許可が受信されることを監視しており、監視時間以内に接続許可が受信されればコネクションを確立する。ＰＬＣ１００は監視時間以内にデータベースから接続許可を受信しないと接続要求をリトライし、コネクションが確立されるまでリトライを繰り返す。
【００２７】
処理はステップＳ１１に移行しＰＬＣ１００は、ｉｎｓｅｒｔ（データ追加）やｕｐｄａｔｅ（データの変更）などのデータベースに所定の操作を要求する処理要求を送信し、ステップＳ１２にて処理要求を受信したデータベース２００は処理要求に対する応答を送信し、ＰＬＣ１００はその応答を受信する。
【００２８】
続いて、処理はステップＳ１３に移行し、ＰＬＣ１００は処理単位の構文を全て送信したか否かをチェックする。全ての構文が送信されてないとき、処理はステップＳ１１に戻り、処理単位の構文を全て送信するまで、ステップＳ１１〜ステップＳ１３を繰り返す。同様、データベース２００はステップＳ１３にて全ての構文を受信するまでその構文を受信する毎に応答を返す。
【００２９】
続いてステップＳ１４においてＰＬＣ１００は、データベースのアクセスを確定（終了）させるコミット（ｃｏｍｍｉｔ）要求を送信する。データベース２００はコミット（ｃｏｍｍｉｔ）要求を受信するとステップＳ１５にてその応答（処理確定）を返信し、ＰＬＣ１００はこの処理確定を受信することにより一連の構文がデータベース２００に正常に伝達されたと判断する。この後、処理はステップＳ１６に移行しＰＬＣ１００およびデータベース２００はそれぞれコネクションを切断する。
【００３０】
図６はＰＬＣ１００がデータベース２００をアクセスする際、処理単位に含まれる構文に、例えばテーブル名が存在しないなどの構文異常があったときの処理を示す説明図である。図５同様の左部分に処理ステップを示しこの処理ステップに従い動作を説明する。ステップＳ２０は前述ステップＳ１０の動きと同様である。
【００３１】
ステップＳ２１においてＰＬＣ１００は、処理要求を送信する。このとき通信路の不具合などにより通信異常が発生しデータベース２００が異常な構文を受信すると、データベース２００はステップＳ２２にて異常な構文を受信したことを示す異常応答を送信する。同ステップＳ２２にてＰＬＣ１００はデータベース２００から異常応答を受信する。処理はステップＳ２３に移り、ＰＬＣ１００はデータベース２００が異常な構文を受信したか否かを異常応答の内容から判定する。異常応答の内容が構文異常でないときは処理はＳ２１に戻る。異常応答の内容が構文異常であったとき、処理はステップＳ２４に移り、ＰＬＣ１００はデータベース２００のデータを異常前のデータに戻すためロールバック要求を送信し、データベース１００はロールバック要求を受信する。処理はステップＳ２５に移り、データベース２００はロールバック要求に対応するロールバック処理を行い、この処理が完了するとロールバック処理完了をＰＬＣ１００に送信する。ＰＬＣ１００はステップＳ２５にてロールバック処理完了を受信する。この後、ＰＬＣ１００およびデータベース２００それぞれはステップＳ２６にてコネクションを切断する。
【００３２】
図７は通信路の断線やデータベースの電源遮断による通信異常が発生した場合のＰＬＣ１００およびデータベース２００の処理を説明する図である。本発明はこの処理に特徴点がある。
【００３３】
上述同様、図の左部分に処理ステップを示しこの処理ステップに従い動作を説明する。ステップＳ３０は前述ステップＳ１０の動きと同様であり、ステップＳ３１は前述ステップＳ１１の動きと同様である。
【００３４】
ステップＳ３１にてデータベース２００はＰＬＣ１００から処理要求を受信し、ステップＳ３２にてその応答を送信している。このとき、通信異常が発生し、データベース２００の応答がＰＬＣ１００に受信されないとき、すなわち、ＰＬＣ１００から見てデータベース２００が無応答のときには、ＰＬＣ１００はステップ３３にて処理要求を再送信する。この再送信に対しても、データベース２００から応答を受信できないとき、処理はステップ３４に移行し、ＰＬＣ１００は作業メモリ１０２などの内部記憶領域、もしくはコンパクトフラッシュ(登録商標)などの外部記憶領域に、送信した処理単位を退避するとともに、処理単位を構成する構文を１文単位で退避する。ここで、処理単位の退避領域を第１の退避領域と定義し、１文単位の退避領域を第２の退避領域として定義する。すなわち、処理単位と１文単位はそれぞれ別々に用意された退避領域に退避される。
【００３５】
そして、ＰＬＣ１００は退避する１文単位の構文の個数を記録するために、初期値をゼロとして作業メモリに割付けたカウンタ（不図示）をカウントアップする。このカウントアップの処理は、後述通信異常から復帰したときの復帰処理にて、退避された１文単位の構文の個数を把握するために行う処理である。なお、処理単位は１つしか退避されないので、処理単位の退避個数をカウントする必要はない。
【００３６】
処理はステップＳ３５に移り、ＰＬＣ１００は処理単位内の構文を全て送信したならば処理を終え、未送信の構文があればステップＳ３１に戻る。上記ステップＳ３０〜ステップＳ３５に係るＰＬＣ１００の処理はバッファ処理部１０９ｃにて実行される。
【００３７】
図８は、図７で説明した通信異常が発生した後に、その通信異常が復帰されたときのＰＬＣ１００およびデータベース２００の処理を説明する図である。
上述同様、図の左部分に処理ステップを示しこの処理ステップに従い動作を説明する。ＰＬＣ１００は上述図７のように通信異常が発生し各種構文を退避した後、データベース２００とのコネクションが再び確立されると、ステップＳ４０に先立ちデータベースの受信バッファからデータ（ＰＬＣ１００が送信した処理単位など）を獲得するデータ獲得コマンドを送信する。この処理はコマンド送信部１０９ｄにて実行される。データベース２００は、ＰＬＣ１００から送信されたデータ獲得コマンドに応答して、受信バッファに保持されたデータ（処理単位など）をＰＬＣ１００に送信する。この処理は復帰応答部２０５にて実行される。そして、ＰＬＣ１００は、データベース２００から送信されたデータ（処理単位など）を受信する。このようにして、ＰＬＣ１００は、データベース２００の受信バッファ領域に保持されたデータ（処理単位など）を獲得する。
【００３８】
この結果、データベース２００から処理単位に含まれる構文や処理単位そのものを獲得できた場合、ＰＬＣ１００は通信路３００の断線と判定し、前述退避した１文単位の構文を再送信する（ステップＳ４０，４１）。データベース２００はＰＬＣ１００によって送信された構文を受信すると、その応答を送信し、ＰＬＣ１００はこの応答を受信する（ステップＳ４１，４２）。
【００３９】
処理はステップＳ４３に移り、ＰＬＣ１００は前述のカウンタをデクリメントし、処理はＳ４４に移り、デクリメントしたカウンタの値がゼロか否かを判定し、ゼロであれば処理を終了し、ゼロでなければステップＳ４１に戻る。このようにして、ＰＬＣ１００はカウンタがゼロになるまで退避した構文を順次送信する。また、図５におけるコミット送信時、あるいは図６におけるロールバック送信時などに通信異常が発生したときも、その構文が退避されるので、どのような構文を送信しようとも、通信異常の前後で処理が継続される。上記ステップＳ４０〜ステップＳ４４に係る処理は異常復帰処理部１０９ｅにて実行される。
【００４０】
ここで、データベース２００の電源断により通信異常が発生し、復旧したときの動きを図９を参照しながら説明する。図９において、ＰＬＣ１００は処理１（接続要求）、処理２（ｉｎｓｅｒｔ）、処理３（ｕｐｄａｔｅ）、処理４（ｉｎｓｅｒｔ）、処理５（ｃｏｍｍｉｔ）の５つ構文を処理単位としてデータベース２００に送信し、処理３までは正常にデータベース２００に受信されたが、処理４（ｉｎｓｅｒｔ）の送信時に通信異常（データベース電源断）が発生したものとして説明する。
【００４１】
このとき、ＰＬＣ１００は通信異常から復帰したときの再送信に備えて、処理単位および通信異常が発生した後の構文（処理４と処理５の構文）、すなわち、ＰＬＣ１００が構文を送信し、データベースからの応答が得られなかった構文それぞれを、退避領域に退避する。
【００４２】
通信異常が復旧してＰＬＣ１００とデータベース２００のコネクションが確立されると、ＰＬＣ１００はデータベースの受信バッファからデータを獲得するデータ獲得コマンドを送信する。データベース２００は電源がオフからオンになって起動されたため、その受信バッファにはＰＬＣ１００が送信した処理単位が無い状態である。このためデータベース２００は受信バッファが空である応答（エンプティデータ）をＰＬＣ１００に送信する。ＰＬＣ１００はデータベースの受信バッファが空であることを示す応答（エンプティデータ）を受信すると、データベースの電源断による通信異常と判断し、処理単位を再送信するとともに、退避した１文単位の構文（処理４と処理５の構文）および処理単位を削除する。
【００４３】
図１０はデータベース２００の通信路３００の断線により通信異常が発生し、断線が復旧したときの動きを説明する図である。図１０において、ＰＬＣ１００は処理１（接続要求）、処理２（ｉｎｓｅｒｔ）、処理３（ｕｐｄａｔｅ）、処理４（ｉｎｓｅｒｔ）、処理５（ｃｏｍｍｉｔ）の５つ構文を処理単位としてデータベース２００に送信し、処理３までは正常にデータベース２００に受信されたが、処理４（ｉｎｓｅｒｔ）の送信時に通信路３００断線などの通信異常が発生したものとして説明する。
【００４４】
このとき、ＰＬＣ１００は通信異常から復帰したときの再送信に備えて、処理単位および通信異常が発生した後の構文（処理４と処理５の構文、すなわち構文を送信したがデータベースから応答を受信できなかった構文）それぞれを、退避領域に退避する。通信異常が復旧してＰＬＣ１００とデータベース２００のコネクションが確立されると、ＰＬＣ１００はデータベースの受信バッファからデータを獲得するデータ獲得コマンドを送信する。データベース２００の受信バッファにはＰＬＣ１００が送信した処理単位が途中まで受信されている状態である。すなわち、処理２（ｉｎｓｅｒｔ）、処理３（ｕｐｄａｔｅ）までが受信バッファの保持された状態である。このためデータベース２００は受信バッファに保持された各種処理要求をＰＬＣ１００に送信する。この処理要求を受信したＰＬＣ１００は、通信路３００の断線による通信異常と判断し、未送信として退避した１文単位の構文を順次送信する。そして、ＰＬＣ１００は１文単位での構文（各種処理要求）を全て送信し終わると、退避した１文単位の構文（処理４と処理５の構文）および処理単位を削除する。
【００４５】
すなわち、本発明のＰＬＣは、ＳＱＬ処理群を送信した際に通信異常が発生すると、ＳＱＬ処理群およびＳＱＬ処理群に含まれる個々のＳＱＬ文を記憶手段に退避する。この通信異常が復旧後、ＰＬＣはデータベースに受信されたデータを獲得するコマンドをデータベースに送信する。このコマンドを受信したデータベースは、自身の受信バッファにＳＱＬ処理群が保持されてないときエンプティデータを送信し、ＳＱＬ処理群が保持されているときはＳＱＬ処理群をＰＬＣに送信する。ＰＬＣはエンプティデータを受信すればＳＱＬ処理群を再送信し、ＳＱＬ処理群を受信すれば受信したＳＱＬ処理群に含まれるＳＱＬ文に続く差分のＳＱＬ文を記憶手段に退避したＳＱＬ分から抽出して送信する。
【００４６】
以上、説明したように、本発明は通信異常の復旧時にデータベースの受信バッファを参照し、データベースの受信バッファにＰＬＣが送信した構文が保持されていれば通信路の断線などの異常による通信異常であったと判定し、データベースの受信バッファに構文が無いときにはデータベースの電源遮断による通信異常と判定するよう構成した。
【００４７】
また、本発明のＰＬＣは通信路の断線などによる通信異常が発生したと判定した場合、データベースに到達していない構文から再送信するように構成し、さらに、データベースの電源遮断による通信異常が発生したと判定した場合には、処理単位を再送信するように構成した。このようにすることにより、本発明はＰＬＣやコンピュータがデータベースをアクセスしている最中にデータベースの電源が遮断され接続異常（通信異常）が発生した場合でも、電源遮断前後でのデータの連続性を保つことができる。また、データベースの電源遮断以外の通信異常に対してはデータベースに到達していない構文から再送信するようにしたので、構文を再送信する時間が削減される。この削減時間は、処理単位における構文の数が多ければ多いほどその効果が大きい。
【符号の説明】
【００４８】
１…データベースアクセスシステム
１００,１１０，１２０…プログラマブルコントローラ、２００…データベース（サーバ）、３００…通信路、３０,３１,３２…外部機器
１０１…プログラムメモリ、１０２…作業メモリ、１０３…内部バス、１０４…ＣＦ（コンパクトフラッシュ）インタフェース、１０６入出力部、１０７…通信部、１０８…データメモリ、１０９…中央演算部、１０９ａ…シーケンスプログラム実行部、１０９ｂ…ＳＱＬ送信部、１０９ｃ…バッファ処理部、１０９ｄ…コマンド送信部、１０９ｅ…異常復帰処理部
２０１…通信部、２０２…受信バッファ、２０３…送信バッファ、２０４…ＳＱＬ実行部、２０５…復帰応答部、２０６…記憶部（データベース）
【図１】
0005549556.tif 000002
【図２】
0005549556.tif 000003
【図３】
0005549556.tif 000004
【図４】
0005549556.tif 000005
【図５】
0005549556.tif 000006
【図６】
0005549556.tif 000007
【図７】
0005549556.tif 000008
【図８】
0005549556.tif 000009
【図９】
0005549556.tif 000010
【図１０】
0005549556.tif 000011