JP6064749B2 - コントローラおよびプログラム - Google Patents

コントローラおよびプログラム Download PDF

Info

Publication number
JP6064749B2
JP6064749B2 JP2013073257A JP2013073257A JP6064749B2 JP 6064749 B2 JP6064749 B2 JP 6064749B2 JP 2013073257 A JP2013073257 A JP 2013073257A JP 2013073257 A JP2013073257 A JP 2013073257A JP 6064749 B2 JP6064749 B2 JP 6064749B2
Authority
JP
Japan
Prior art keywords
database system
access
instruction
command
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013073257A
Other languages
English (en)
Other versions
JP2014197346A (ja
Inventor
弘太郎 岡村
弘太郎 岡村
西山 佳秀
佳秀 西山
太田 政則
政則 太田
矢尾板 宏心
宏心 矢尾板
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Omron Corp
Original Assignee
Omron Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Omron Corp filed Critical Omron Corp
Priority to JP2013073257A priority Critical patent/JP6064749B2/ja
Publication of JP2014197346A publication Critical patent/JP2014197346A/ja
Application granted granted Critical
Publication of JP6064749B2 publication Critical patent/JP6064749B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Programmable Controllers (AREA)

Description

本発明は、プログラマブルロジックコントローラ(PLC:Programmable Logic Controller)等のコントローラおよびプログラムに関し、特に、データベースシステムへデータを送信するコントローラおよびプログラムに関する。
PLC等のコントローラは、工場などの自動機械の制御などに用いられ、複数の入出力機能を有して、例えば、センサ等から出力される値を逐次、読みこんでデータを保持する。
また、近年、PLCは、データベースシステムと接続して、PLCで保持しているデータを、データベースシステムに蓄積する。これにより、データベースに接続する情報処理装置同士でのデータの共有を容易にしたり、各種データを収集して、データの集計や解析などを容易にしたりすることができる。例えば、特開2012−108642号公報(特許文献1)は、データベースをアクセスするSQL文を複数含むSQL処理群をデータベースに送信する機能を有するPLCを開示している。
特開2012−108642号公報
しかし、PLC等のコントローラへの電力の供給が何らかの原因で不安定化すると、データベースシステムへのアクセスが中断することとなる。例えば、従来、コントローラは、データをSpool情報として不揮発性メモリに保持し、外部記憶装置に定期的にデータを退避させている。コントローラは、電断が発生した際に、外部記憶装置に退避できていなかったデータについては、電断から復旧後、この退避できていなかった分のSpool情報を、再度、外部記憶装置に退避する構成とされていることもある。この場合、コントローラが外部記憶装置へデータを退避させている退避中に電断が発生すると、既存の退避済みのデータが破損することがある。このような電断が発生することによって、コントローラからデータベースシステムへ送信するデータが消失することとなり、コントローラの信頼性が低下する。
そこで、本発明は、PLC等のコントローラにおいてデータベースシステムへのアクセスの信頼性を向上させる技術を提供することを目的とする。
一実施形態に従うコントローラは、データベースシステムと接続するための通信インタフェースと、制御対象を制御するためのユーザプログラムを実行するための命令実行部と、データベースシステムへアクセスするためのアクセス命令を含むユーザプログラムの命令実行部による実行時に、データベースシステムへの通信インタフェースを介したアクセスを制御するアクセス処理部と、命令実行部とアクセス処理部とがアクセス可能な不揮発性の記憶領域を有する記憶部とを備え、命令実行部は、アクセス命令の実行時に、データベースシステムへの送信対象のデータを不揮発性の記憶領域に格納し、アクセス処理部にアクセスの実行を指示することでアクセス処理部へ処理を渡し、アクセス処理部は、命令実行部の指示に応じて不揮発性の記憶領域からデータベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づきデータベースシステムへアクセスするための命令文を生成し、生成した命令文をデータベースシステムへ送信する命令文送信部と、命令実行部の指示に応じた処理を開始してから命令文送信部により生成された命令文に基づく処理が完了するまでの間、命令文の実行状況を示すステータス情報を生成し、生成されたステータス情報を不揮発性の記憶領域に記憶させるステータス出力部とを備える。
好ましくは、アクセス処理部は、生成した命令文を記憶領域へ記憶させ、命令文の送信処理の際にコントローラに電断が発生することにより送信エラーが発生した場合に、記憶領域に記憶された命令文をデータベースシステムへ再送する処理を、電断からの復帰時に自動的に、または、命令文をデータベースシステムへ再送するための命令を含むユーザプログラムの指示に基づき行うこととしてもよい。
好ましくは、ステータス情報は、データベースシステムへアクセスするためのSQL文の送信状況を示す情報を含むこととしてもよい。
好ましくは、ステータス出力部は、命令文の実行状況として、命令実行部の指示を受けて命令文送信部により生成された命令文をデータベースシステムへ送信する前の状態である第1の状態と、生成された命令文をデータベースシステムへ送信し、データベースシステムからの応答を受信するまで待機している状態である第2の状態と、データベースシステムへの命令文の送信に失敗し、生成された命令文をスプールしている状態である第3の状態と、のうち少なくともいずれかの状態をステータス情報として不揮発性の記憶領域に記憶させることとしてもよい。
好ましくは、ステータス出力部が生成するステータス情報は、データベースシステムへの送信対象のデータのデータサイズ、データ本体および接続先のデータベースシステムを識別する情報の少なくともいずれかを含むこととしてもよい。
好ましくは、ステータス情報を参照してステータス情報に示されるアクセスの状況に応じてデータベースシステムへのアクセス処理のリカバリを行うリカバリプログラムを保持する保持部をさらに備え、電断からの復帰時に、リカバリプログラムを実行することとしてもよい。
好ましくは、リカバリプログラムは、コントローラからデータベースシステムへ送信するSQL文の送信状況に応じてリカバリを行うこととしてもよい。
別の実施形態に従うと、コントローラの動作を制御するためのプログラムが提供される。コントローラは、プロセッサと、データベースシステムと接続するための通信インタフェースと、不揮発性のメモリとを備える。プログラムは、プロセッサに、データベースシステムへアクセスするためのアクセス命令を含むユーザプログラムの実行時に、データベースシステムへの通信インタフェースを介したアクセスを制御するステップと、アクセス命令の実行時に、データベースシステムへの送信対象のデータを不揮発性の記憶領域に格納するステップと、不揮発性の記憶領域からデータベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づきデータベースシステムへアクセスするための命令文を生成し、生成した命令文をデータベースシステムへ送信するステップと、アクセス命令に応じてデータベースシステムへアクセスするための処理を開始してから生成された命令文に基づく処理が完了するまでの間、命令文の実行状況を示すステータス情報を生成し、生成されたステータス情報を不揮発性の記憶領域に記憶させるステップとを実行させる。
上記の一実施の形態によると、コントローラは、コントローラがデータベースシステムへアクセスする際の命令文の実行状況をステータス情報として保持するため、電断が発生した場合においてもリカバリ時にアクセスの状況を参照することができ、データベースシステムへのアクセスの信頼性が向上する。
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
本実施形態における制御システム全体の構成を示す図である。 PC10の機能を示すブロック図である。 DBサーバ20の機能を示すブロック図である。 PLC30の機能を示すブロック図である。 本実施形態のハードウェアの構成を示す図である。 ステータス情報51に保持されるデータの内容を示す図である。 共有メモリ309に記憶されるステータス情報51を示す図である。 DBアクセス処理プログラム35によるDBサーバ20へのアクセス処理を示すフローチャートである。 ユーザプログラム32の命令に従ってDBアクセス処理プログラム35によりDBサーバ20へのアクセスを開始し、ステータス情報51の進捗状況512を更新する処理を示す図である。 電断のタイミングと、共有メモリ309に記憶される進捗状況512と、電断発生時に取りうる処置とを示す図である。
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
<実施の形態1>
図1は、本実施形態における制御システム全体の構成を示す図である。
まず、本実施の形態に係る制御システムのシステム構成について説明する。本実施の形態においては、機械や設備などの制御対象を制御するプログラマブルコントローラ(PLC)を制御装置の典型例として説明を行う。但し、本発明に係る制御装置は、PLCに限られることなく、各種の制御装置へ適用可能である。
図1を参照して、制御システムには、PC(Personal Computer)10と、DB(Database)サーバ20と、PLC30と、PLC40とが含まれる。PLC30とPLC40とは、後述するようなユーザプログラムを周期的またはイベント的に実行する。ユーザプログラムは、PC10の利用者によって作成される。ユーザは、例えばPC10を操作することにより、アクセス命令を含むプログラム(ソースプログラム)を作成することができる。
PC10は、PLC30で動作させるユーザプログラムをユーザが作成するための情報処理装置である。PC10は、作成されたソースプログラムを、PLC30やPLC40において実行可能な形式に変換し、変換されたユーザプログラムを、例えばPC10と接続するPLC30へ送信する。また、PC10は、例えばUSB(Universal Serial Bus)規格などに従って、接続用のケーブルを介してPLC30と接続される。PC10は、PLC30との間で各種パラメータの設定、プログラミング、モニタ、デバッグなどの機能を提供する。
DBサーバ20は、データベースを管理するため、DBMS(database management system)として機能するサーバである。
PLC30とPLC40とは、ユーザプログラムを実行し、ユーザプログラムに含まれるアクセス命令に従って、DBサーバ20にアクセスすることができる。
PLC30は、PC10と、DBサーバ20と、PLC40と接続される。例えば、PLC30とDBサーバ20とは、イーサネット(登録商標)などのネットワークを介して、データを互いに遣り取りできるように構成される。PLC30は、DBサーバ20と接続するための設定を保持しており、設定に従ってDBサーバ20へアクセスする。
また、PLC30は、制御演算を実行するCPUユニットと、1以上のIO(Input/Output)ユニットとを含んで構成され、これらCPUユニットと、IOユニットとは、システムバスを介してデータを互いに遣り取りできるように構成される。PLC30は、これらIOユニット等を通じて、各種のフィールド機器との間でデータを遣り取りする。これらのフィールド機器は、制御対象に対して何らかの処理を行うためのアクチュエータや、制御対象から各種情報を取得するためのセンサなどを含む。また、PLC30は、フィールドバスを介して、外部の各種のフィールド機器と接続し、これらフィールド機器との間でデータをやり取りする。PLC30は、センサ出力などを外部から受け付けてデータを蓄積し、蓄積されたデータを、後述するDBアクセス処理プログラム35によりDBサーバ20へ送信する。
また、PLC30は、他のPLC(図1の例ではPLC40)がDBサーバ20へ送信するデータを受け付けて、受け付けたデータをDBサーバ20へ送信する。PLC40は、センサ出力などを外部から受け付けてデータを蓄積し、蓄積されたデータを、PLC30を介してDBサーバ20へ送信する。
<各機器の構成の詳細>
次に、各機器の構成の詳細について説明する。
図2は、PC10の機能を示すブロック図である。
PC10は、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)等を備えるコンピュータシステム(情報処理装置)である。図2を参照して、PC10は、PLC30を動作させるためのユーザプログラムをユーザが作成するためのプログラミングツール12の機能を発揮する。プログラミングツール12は、命令実行状態取得部14と、プログラミング機能16との機能を含む。ユーザがプログラミングツール12により作成したユーザプログラムは、PLC30へ送信され、PLC30で実行される。
命令実行状態取得部14は、PLC30に対し、PLC30のメモリに保持されるステータス情報51の内容をPC10へ送信するよう指示するためのソフトウェアである。
プログラミング機能16は、ユーザによるプログラム作成を支援するためのソフトウェアである。これらソフトウェアがPC10において実行されることにより、命令実行状態取得部14とプログラミング機能16等の機能が発揮される。
図3は、DBサーバ20の機能を示すブロック図である。DBサーバ20は、大容量の記憶装置などを備える。
DBサーバ20は、データベースへの読み出しおよび書き込みを管理するDBMS22の機能を発揮する。DBMS22は、データベースとして機能するDB24へのデータの書き込みおよび読み出しを制御する。DB24は、複数件のデータレコードを保持するための記憶領域であり、DBMS22の制御に従ってデータの保持等を行う。
図4は、PLC30の機能を示すブロック図である。PLC30は、ユーザプログラムを周期的に実行する。PLC30は、PLC30内のメモリ領域の情報を読み書きして、ユーザプログラムに示される命令を順に実行する。PLC30は、入出力機能を備えており、センサ出力などPLC30の外部からデータを受け付けて、データを蓄積する。PLC30は、蓄積されたデータをDBサーバ20へ送信する。
図4を参照して、PLC30の各機能は、OS(Operating System)31と、システムプログラム33と、ユーザプログラム32等が動作することで発揮される。PLC30は、ステータス情報51とを保持している。
OS31は、PLC30の資源を管理するオペレーティングシステムであり、タスクのスケジューリングや、DBサーバ20へのアクセス処理などを行う機能をPLC30に発揮させる。OS31は、CPU301がシステムプログラム33およびユーザプログラム32を実行するための基本的な実行環境を提供する。
システムプログラム33は、PLC30としての基本的な機能を提供するためのソフトウェア群である。具体的には、システムプログラム33は、シーケンス命令プログラム34と、DB(データベース)アクセス処理プログラム35と、入出力処理プログラム36と、ツールインタフェース処理プログラム37と、スケジューラ38とを含んでいる。
これに対し、ユーザプログラム32は、制御対象に対する制御目的に応じて任意に作成されるプログラムである。すなわち、ユーザプログラム32は、制御システムを用いて制御する対象に応じて、任意に設計される。ユーザプログラム32は、シーケンス命令プログラム34と協働して、ユーザにおける制御目的を実現する。すなわち、ユーザプログラム32は、シーケンス命令プログラム34によって提供される命令、関数、機能モジュールなどを利用することで、プログラムされた動作を実現する。そのため、ユーザプログラム32およびシーケンス命令プログラム34を「制御プログラム」と総称する場合もある。
シーケンス命令プログラム34は、PLC30内のメモリ領域の情報を読み書きしながら、ユーザプログラム32の命令を順に実行する機能をPLC30に発揮させる。シーケンス命令プログラム34は、ユーザプログラム32の実行に伴って、ユーザプログラム32内で指定されているシーケンス命令の実態を呼び出して、その命令の内容を実現するための命令コード群を含む。
DBアクセス処理プログラム35は、PLC30がシーケンス命令プログラム34によってユーザプログラム32を実行することに伴って呼び出され、ユーザプログラム32がDBサーバ20へアクセスするための処理、例えばSQL文の生成などの処理を実行する機能をPLC30に発揮させる。DBアクセス処理プログラム35は、ユーザプログラム32の実行に伴って、DBサーバ20へアクセスするために必要な処理を実現するための命令コード群を含む。DBアクセス処理プログラム35は、ユーザプログラム32において指定可能な命令に対応する実行コードを含む。
入出力処理プログラム36は、PLC30が備える複数の入出力機能によるPLC30へのデータ入力およびPLC30からのデータ出力を制御する機能をPLC30に発揮させる。各入出力機能は、それぞれメモリのアドレスが割りあてられている。各入出力機能に対応するメモリに保持されるデータは、周期的にPLC30の外部のデータと一括して交換される。
ツールインタフェース処理プログラム37は、PC10との間でデータを遣り取りするためのインタフェースを提供する。ツールインタフェース処理プログラム37は、PC10において動作するプログラミングツール12の機能によりPC10からPLC30へ通知される指示を受けて、DBアクセス処理プログラム35等へ処理を渡し、処理の結果等をPC10へ応答する機能をPLC30に発揮させる。スケジューラ38は、PLC30で実行するタスクの優先度に基づいて、タスクのスケジューリングを行う機能をPLC30に発揮させる。
ユーザプログラム32は、上述したように、ユーザにおける制御目的に応じて作成される。ユーザプログラム32は、典型的には、PLC30のCPUユニットのプロセッサで実行可能なオブジェクトプログラム形式になっている。ユーザプログラム32は、PC10などにおいて、ラダー形式やファンクションブロック形式で記述されたソースプログラムがコンパイルされることで生成される。生成されたオブジェクトプログラム形式のユーザプログラムは、PC10からPLC30のCPUユニットへ転送され、PLC30のメモリに保持されている。
ステータス情報51は、DBアクセス処理プログラム35により出力され、DBアクセス処理プログラム35によるDBサーバ20へのアクセスの状況を保持する。詳しくは後述する。
図5は、本実施形態のハードウェアの構成を示す図である。図5(A)は、コンピュータシステムとしてのPC10の構成を示す。図5(A)を参照して、PC10は、CPU101と、ROM102と、RAM103と、通信インタフェース104と、ディスプレイ105と、入出力インタフェース106とを備える。
CPU101は、OSを含む各種プログラムをROM102等から読み出して実行することでPC10に各種機能を発揮させる。ROM102は、不揮発性の記憶領域であり、BIOS(Basic Input/Output System)や各種のデータ等が記憶される。RAM103は、揮発性のメモリであり、CPU101によるプログラムの実行に必要なデータを格納するための作業領域を提供する。通信インタフェース104は、PC10が外部の機器と通信するためのインタフェースである。ディスプレイ105は、CPU101等による演算の結果を画像により出力するための表示機器である。入出力インタフェース106は、PC10がユーザの入力操作等を受け付け、PC10の動作状態を出力するためのインタフェースである。
図5(B)は、PLC30のハードウェア構成を示す図である。PLC30は、CPU301と、ROM302と、RAM303と、通信インタフェース304と、バス307と、不揮発性メモリ308等を備える。PLC40もPLC30と同様のハードウェア構成を備える。CPU301は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。CPU301は、内部クロックに従って順次供給される命令コードを解釈して実行する。
PLC30とPLC40とは、記憶手段として、ROM302と、RAM303と、不揮発性メモリ308とを有する。RAM303は、揮発性の記憶領域であり、CPU301で実行されるべき各種プログラムを保持するとともに、各種プログラムの実行時の作業用メモリとしても使用される。ROM302は、不揮発性の記憶領域であり、BIOSや各種のデータ、OS、システムプログラム等が記憶される。不揮発性メモリ308は、不揮発性の記憶領域であり、共有メモリ309を含む。共有メモリ309は、ユーザプログラム32と、DBアクセス処理プログラム35とがアクセス可能な記憶領域である。
通信インタフェース304は、PLC30が外部の機器と通信するためのインタフェースである。PLC30は、例えば、USB規格に従ってPC10と接続ケーブルにより接続される。また、PLC30は、イーサネット(登録商標)などのネットワークによってDBサーバ20と接続される。
バス307は、PLC30において、CPUユニットとIOユニットとがデータを遣り取りするための通信路(システムバス)と接続するためのコネクタと、外部のフィールド機器との間でデータを遣り取りするためのフィールドバスと接続するためのコネクタとを含む。
PLC30は、図4と図5(B)とを用いて説明した構成を備えており、CPU301がシステムプログラム33およびユーザプログラム32を実行することにより、「制御対象を制御するためのユーザプログラムを実行するための命令実行部」として機能する。
また、PLC30は、CPU301がDBアクセス処理プログラム35およびユーザプログラム32を実行することにより、「DBサーバ20へアクセスするためのアクセス命令を含むユーザプログラム32の命令実行部による実行時に、DBサーバ20への通信インタフェース304を介したアクセスを制御するアクセス処理部」として機能する。
PLC30は、CPU301が、ユーザプログラム32に含まれるアクセス命令に応じてDBアクセス処理プログラム35を実行することにより、「命令実行部が、ユーザプログラムに含まれるアクセス命令の実行時に、DBサーバ20への送信対象のデータを不揮発性メモリ308の共有メモリ309に格納し、アクセス処理プログラム35にアクセスの実行を指示することでアクセス処理プログラム35へ処理」を渡す。
また、PLC30は、CPU301が、ユーザプログラム32に含まれるアクセス命令に応じてDBアクセス処理プログラム35を実行することにより、「アクセス処理プログラム35が、命令実行部の指示に応じて不揮発性メモリ308の共有メモリ309からDBサーバ20への送信対象のデータを読み出して、読みだされたデータに基づきDBサーバ20へアクセスするための命令文(SQL文)を生成し、生成した命令文をDBサーバ20へ送信する命令文送信部」として機能する。
また、PLC30は、CPU301が、ユーザプログラム32に含まれるアクセス命令に応じてDBアクセス処理プログラム35を実行することにより、「アクセス処理プログラム35が、命令実行部の指示に応じた処理を開始してから命令文送信部により生成された命令文に基づく処理が完了するまでの間、命令文の実行状況を示すステータス情報51を生成し、生成されたステータス情報51を不揮発性メモリ308の記憶領域に記憶させるステータス出力部」として機能する。
<データ>
次に、本実施形態で用いるデータについて、説明する。
図6は、ステータス情報51に保持されるデータの内容を示す図である。ステータス情報51は、不揮発性メモリ308の共有メモリ309に保持される。本実施の形態において、DBアクセス処理プログラム35は、ユーザプログラム32において指定される命令に応じて呼び出され、命令内容に応じてDBサーバ20へ送信するためのSQL文を生成し、生成されたSQL文をDBサーバ20へ送信する。DBアクセス処理プログラム35は、送信したSQL文に対するDBサーバ20からの応答を、ユーザプログラム32へ渡す。ステータス情報51の内容は、以上のDBアクセス処理プログラム35によるDBサーバ20へのアクセス状況(アクセスの進捗状況)に応じて定義されている。
例えば、ステータス情報51の内容は、DBアクセス処理プログラム35によるDBサーバ20へのアクセスの初期状態を示す「_DBC_SEND_INIT」(初期状態)、DBアクセス処理プログラム35によってDBサーバ20へとSQL文を送信する前(未送信)の状態を示す「_DBC_SEND_UNSENT」(SQL文未送信)、DBアクセス処理プログラム35によってDBサーバ20へとSQL文を送信しており、送信が完了するまでの状態を示す「_DBC_SEND_SENDING」(SQL文送信中)、DBアクセス処理プログラム35によってDBサーバ20へ送信するSQL文がスプールされ、不揮発性のメモリにSQL文が保持されている状態を示す「_DBC_SEND_SPOOLED」(SQL文スプール)、DBアクセス処理プログラム35によるDBサーバ20へのSQL文の送信が完了した状態を示す「_DBC_SEND_COMPLETE」(SQL文送信完了)がある。
図7は、共有メモリ309に記憶されるステータス情報51を示す図である。図7に示すように、ステータス情報51は、識別情報511と、進捗状況512と、データサイズ513と、データ本体514とを含む。
識別情報511は、DBアクセス処理プログラム35がDBサーバ20へと送信するSQL文のそれぞれを識別するための情報であり、例えば、接続先のデータベースを特定する情報、テーブル名などを含む。
進捗状況512は、DBアクセス処理プログラム35によるDBサーバ20へのアクセス状況を示す。例えば、図6で説明したアクセス状況(アクセスの進捗状況)に応じてDBアクセス処理プログラム35が進捗状況512を更新する。
データサイズ513は、DBアクセス処理プログラム35がDBサーバ20へ送信するデータの大きさを示す。
データ本体514は、DBアクセス処理プログラム35がDBサーバ20へ送信するデータそのものを示す。
<動作>
次に、本実施形態におけるPLC30の動作について、図面を用いて詳しく説明する。実施の形態1における動作の概要は、以下のとおりである。PC10は、ユーザの操作入力に基づいて、PLC30で実行させるユーザプログラムを作成する。PLC30は、PC10からユーザプログラムを受信して記憶する。PLC30は、シーケンス命令プログラム34によるユーザプログラム32の実行に伴ってDBアクセス処理プログラム35を呼び出す。PLC30は、ユーザプログラム32がDBサーバ20へアクセスするための処理、例えばSQL文の生成と送信等をDBアクセス処理プログラム35により行う。
図8は、DBアクセス処理プログラム35によるDBサーバ20へのアクセス処理を示すフローチャートである。図8においては、処理の各段階において、PLC30が共有メモリ309に出力するステータス情報51の内容を示している。PLC30は、シーケンス命令プログラム34によって、DBサーバ20へアクセスするための命令を含むユーザプログラム32を実行する。PLC30は、シーケンス命令プログラム34によって、DBサーバ20に保持させるデータおよび接続先のデータベースを特定する情報等を共有メモリ309へ書き込む。PLC30は、シーケンス命令プログラム34がユーザプログラム32に含まれる命令を実行し、命令に応じてDBアクセス処理プログラム35を呼び出すことでDBアクセス処理プログラム35へと処理が渡される。このとき、DBアクセス処理プログラム35は、ステータス情報51の進捗状況512に、データベースへのアクセスの初期状態を示す「_DBC_SEND_INIT」を初期値として格納する。
ステップS11において、PLC30は、DBアクセス処理プログラム35によって、DBサーバ20へアクセスするための値(DBサーバ20へ書き込む対象となるデータであって、共有メモリ309に蓄積されたデータ)を共有メモリ309から読み出す。このとき、DBアクセス処理プログラム35は、ステータス情報51の進捗状況512に、SQL文の未送信を示す「_DBC_SEND_UNSENT」を格納する。
ステップS13において、PLC30は、DBアクセス処理プログラム35によって、DBサーバ20へアクセスするためのSQL文を生成してDBサーバ20へ送信する。このとき、DBアクセス処理プログラム35は、ステータス情報51の進捗状況512に、SQL文が送信中の状態であることを示す「_DBC_SEND_SENDING」を格納する。
ステップS15において、PLC30は、DBアクセス処理プログラム35によって、DBサーバ20に対して送信したSQL文について、DBサーバ20からのAck応答(送信Ack)があるか、タイムアウトするまで待機する。なお、このときステータス情報51の進捗状況512は、SQL文が送信中であることを示す「_DBC_SEND_SENDING」が格納されている。
ステップS17において、PLC30は、DBアクセス処理プログラム35によって、DBサーバ20との通信に異常があったか否か(DBサーバ20との通信においてエラーの受信があった、またはAck応答の受信処理がタイムアウトしたかの少なくともいずれか一方)を判定する。なお、このときステータス情報51の進捗状況512は、SQL文が送信中であることを示す「_DBC_SEND_SENDING」である。ステップS17において、DBサーバ20との通信に異常があった場合(ステップS17においてYES)、PLC30は、DBアクセス処理プログラム35によって、ステップS21の処理を行う。ステップS17において、DBサーバ20との通信が正常に終了した場合(ステップS17においてNO)、DBアクセス処理プログラム35によってステップS19の処理を行う。
ステップS19(DBアクセス処理プログラム35によるDBサーバ20へのSQL文の送信が正常に終了)において、PLC30は、DBアクセス処理プログラム35によって、DBアクセス処理プログラム35を呼び出したプログラムに対してDBサーバ20へのアクセスが完了したことを示す応答を出力する。このとき、DBアクセス処理プログラム35は、ステータス情報51の進捗状況512に、SQL文の送信が完了したことを示す「_DBC_SEND_COMPLETE」を格納する。
ステップS21において、PLC30は、DBアクセス処理プログラム35によって、DBサーバ20への送信が正常に終了しなかったSQL文を不揮発性のメモリにスプールする。スプールが完了するまでの間、ステータス情報51の進捗状況512は、SQL文が送信中であることを示す「_DBC_SEND_SENDING」が格納される。
ステップS23において、PLC30は、DBアクセス処理プログラム35によるDBサーバ20へのアクセスが終了したことを示す応答を、DBアクセス処理プログラム35を呼び出したユーザプログラム32に対して出力する。このとき、DBアクセス処理プログラム35は、ステータス情報51に、SQL文がスプールされていることを示す「_DBC_SEND_SPOOLED」を格納する。
図9は、ユーザプログラム32の命令に従ってDBアクセス処理プログラム35によりDBサーバ20へのアクセスを開始し、ステータス情報51の進捗状況512を更新する処理を示す図である。
(1)データ格納
ユーザプログラム32に含まれるDB命令60は、DBアクセス処理プログラム35を呼び出してDBサーバ20へアクセスするためのものであり、DBサーバ20への接続命令を示すDB_Connect命令61と、DBサーバ20にデータを挿入するDB_Insert命令62等を含む。PLC30は、シーケンス命令プログラム34によって、ユーザプログラム32に含まれる命令を順に実行する。PLC30は、シーケンス命令プログラム34によって、ユーザプログラム32に含まれるDB命令60を実行することで、DBサーバ20へ送信するデータを共有メモリ309に格納する。
(2)指示
PLC30は、シーケンス命令プログラム34によってユーザプログラム32に含まれるDB命令60を実行することで、DBアクセス処理プログラム35を呼び出す。このDBアクセス処理プログラム35の呼び出しにより、ユーザプログラム32を実行するシーケンス命令プログラム34からDBアクセス処理プログラム35に対し、DBサーバ20へのアクセスを指示する。
(3)現在値読み出し
PLC30は、DBアクセス処理プログラム35によってステップS11の処理を実行する。
なお、共有メモリ309は、FIFO(First in First out)形式のデータ構造を有するものとしてもよい。
(4)送信
PLC30は、DBアクセス処理プログラム35によってステップS13の処理を実行する。
(5)送信Ack
PLC30は、DBアクセス処理プログラム35によってステップS15およびステップS17の処理を実行する。
(6−1)障害時、(6−2)命令タイムアウト時
PLC30は、DBアクセス処理プログラム35を実行することでステップS21の処理を実行する(不揮発性のメモリにSQL文をスプールする)。なお、PLC30は、DBアクセス処理プログラム35によってSQL文をスプールする際、SQL文を送信すべき対象のデータベースを識別するための情報(コネクション名など)をSQL文とともに不揮発性のメモリに格納する。これにより、PLC30は、DBアクセス処理プログラム35によって、スプールされたSQL文をデータベースへ再送する際に、再送先となるデータベースを特定することができる。
なお、SQL文をスプールするための不揮発性のメモリは、共有メモリ309としてもよいし、共有メモリ309とは別の記憶手段としてもよい。
(7−1)完了、(7−2)完了(スプール)
PLC30は、DBアクセス処理プログラム35を実行することでステップS19またはステップS23の処理を実行する。
図10は、電断のタイミングと、共有メモリ309に記憶される進捗状況512と、電断発生時に取りうる処置とを示す図である。
図10における電断のタイミング(1)開始、(2)指示、(3)現在値の読み出し、(4)送信、(5)送信Ack、(6−1)障害時、(6−2)命令タイムアウト時、(7−1)完了、(7−2)完了(スプール)は、図9で説明した各タイミングに対応する。図10を参照して、電断のタイミングが「(1)開始」と「(2)指示」と「(3)現在値の読み出し」の場合、DBアクセス処理プログラム35によるDBサーバ20へのSQL文の送信はなされていない。そのため、電断発生時に取りうる処置は、PLC30が、シーケンス命令プログラム34によってユーザプログラムを実行することでDBアクセス処理プログラム35を再度呼び出して、このDBアクセス処理プログラム35によってSQL文を再送することである。
なお、共有メモリ309に、DBサーバ20へアクセスするためのデータを格納している場合、PLC30は、DBアクセス処理プログラム35によって、共有メモリ309を参照してデータを読み出して、SQL文の生成およびDBサーバ20への送信を行う。
電断のタイミングが「(4)送信、(5)送信Ack、(6−1)障害時、(6−2)命令タイムアウト時」の場合は、PLC30がDBアクセス処理プログラム35によってSQL文の送信を行っている。そのため、電断発生時に取りうる処置は、PLC30が、リカバリ処理によってDBサーバ20側のレコードの有無を確認し、DBサーバ20にレコードが記録されていない場合にDBアクセス処理プログラム35によってSQL文をDBサーバ20へ再送することとなる。
電断のタイミングが「(7−1)完了」の場合、PLC30がDBアクセス処理プログラム35によってDBサーバ20へSQL文を送信する処理が完了している。そのため、電断発生時においても特段の処置は必要とされない。
電断のタイミングが「(7−2)完了(スプール)」の場合、PLC30がDBアクセス処理プログラム35によってSQL文を不揮発性のメモリにスプールしている。そのため、電断発生時に取りうる処置は、不揮発性のメモリにスプールされているSQL文を、PLC30がDBアクセス処理プログラム35によってDBサーバ20へ再送することである。
<リカバリ>
上記のようにPLC30がDBアクセス処理プログラム35によってDBサーバ20へアクセスする際にアクセス状況をステータス情報51に出力する動作を説明した。ここで、PLC30が、電断発生時にリカバリするための処理の例を説明する。
(1)システムプログラムによるSQL文の再送
PLC30は、不揮発性のメモリにスプールされているデータがある場合、電断が発生した後のリカバリを、不揮発性のメモリにスプールされているデータを自動的にDBサーバ20へ再送することによって行うこととしてもよい。例えば、PLC30は、電断が発生した後、電断からの復帰時に自動的に実行するリカバリプログラムを不揮発性のメモリの保持している。リカバリプログラムは、PLC30がシステムプログラム33によってステータス情報51を参照してSQL文の送信状況を確認し、送信状況に応じてSQL文のDBサーバ20への再送を行う処理を含む。PLC30は、電断からの復帰時にリカバリプログラムを実行し、システムプログラム33によってステータス情報51を参照してSQL文の送信状況を確認する。PLC30は、ステータス情報51において「_DBC_SEND_SENDING」(SQL文送信中)と示されている場合は、DBアクセス処理プログラム35によってDBサーバ20のレコードの有無を確認し、確認結果に応じてSQL文を再送する。
(2)ユーザプログラムからの指示に基づくリカバリ
PLC30は、電断が発生した後のリカバリを、例えば、ユーザプログラムからの指示をきっかけとして開始し、不揮発性のメモリに格納されたステータス情報51を参照することとしてもよい。例えば、リカバリのためのユーザプログラム(リカバリプログラム)の作成者は、PLC30の電源投入後の1サイクル目に不揮発性のメモリに格納されたステータス情報51を参照するようユーザプログラムに命令を含め、ステータス情報51に示されるSQL文の送信状況に応じた処理をPLC30に行わせるようユーザプログラムを作成する。PLC30は、電源投入後の1サイクル目にステータス情報51を参照し、ステータス情報51において、「_DBC_SEND_UNSENT」(SQL文未送信)と示されている場合は、SQL文を再送する。また、ステータス情報51において「_DBC_SEND_SENDING」(SQL文送信中)と示されている場合は、PLC30は、DBサーバ20のレコードの有無を確認し、確認結果に応じてSQL文を再送する。
なお、上述の「(1)システムプログラムによるSQL文の再送」では、不揮発性のメモリにスプールされているデータがある場合に、システムプログラム33によって、DBサーバ20へのデータの再送を自動的に行うことを説明したが、不揮発性のメモリにデータが残っていない場合は、ユーザプログラムからの指示に基づくリカバリ処理を行う必要がある。
このように各実施形態について説明してきたが、これら実施形態を組み合わせてもよいことはいうまでもない。以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
10 PC、12 プログラミングツール、14 命令実行状態取得部、16 プログラミング機能、20 DBサーバ、22 DBMS、24 DB、30 PLC、31 OS、32 ユーザプログラム、33 システムプログラム、34 シーケンス命令プログラム、35 DBアクセス処理プログラム、36 入出力処理プログラム、37 ツールインタフェース処理プログラム、38 スケジューラ、39 制御プログラム、40 PLC、51 ステータス情報、101 CPU、102 ROM、103 RAM、104 通信インタフェース、105 ディスプレイ、106 入出力インタフェース、301 CPU、302 ROM、303 RAM、304 通信インタフェース、307 バス、308 不揮発性メモリ、309 共有メモリ。

Claims (8)

  1. コントローラであって、
    データベースシステムと接続するための通信インタフェースと、
    制御対象を制御するためのユーザプログラムを実行するための命令実行部と、
    前記データベースシステムへアクセスするためのアクセス命令を含む前記ユーザプログラムの前記命令実行部による実行時に、前記データベースシステムへの前記通信インタフェースを介したアクセスを制御するアクセス処理部と、
    前記命令実行部と前記アクセス処理部とがアクセス可能な不揮発性の記憶領域を有する記憶部とを備え、
    前記命令実行部は、
    前記アクセス命令の実行時に、前記データベースシステムへの送信対象のデータを前記不揮発性の記憶領域に格納し、前記アクセス処理部に前記アクセスの実行を指示することで前記アクセス処理部へ処理を渡し、
    前記アクセス処理部は、
    前記命令実行部の指示に応じて前記不揮発性の記憶領域から前記データベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づき前記データベースシステムへアクセスするための命令文を生成し、生成した命令文を前記データベースシステムへ送信する命令文送信部と、
    前記命令実行部の前記指示に応じた処理を開始してから前記命令文送信部により生成された命令文に基づく処理が完了するまでの間、前記命令文の実行状況を示すステータス情報を生成し、生成された前記ステータス情報を前記不揮発性の記憶領域に記憶させるステータス出力部とを備える、コントローラ。
  2. 前記アクセス処理部は、
    前記生成した命令文を前記記憶領域へ記憶させ、
    前記命令文の送信処理の際に前記コントローラに電断が発生することにより送信エラーが発生した場合に、前記記憶領域に記憶された命令文を前記データベースシステムへ再送する処理を、前記電断からの復帰時に自動的に、または、前記命令文を前記データベースシステムへ再送するための命令を含む前記ユーザプログラムの指示に基づき行う、
    請求項1記載のコントローラ。
  3. 前記ステータス情報は、前記データベースシステムへアクセスするためのSQL文の送信状況を示す情報を含む、
    請求項1記載のコントローラ。
  4. 前記ステータス出力部は、前記命令文の実行状況として、
    前記命令実行部の前記指示を受けて前記命令文送信部により生成された命令文を前記データベースシステムへ送信する前の状態である第1の状態と、
    前記生成された命令文を前記データベースシステムへ送信し、前記データベースシステムからの応答を受信するまで待機している状態である第2の状態と、
    前記データベースシステムへの前記命令文の送信に失敗し、前記生成された命令文をスプールしている状態である第3の状態と、のうち少なくともいずれかの状態を前記ステータス情報として前記不揮発性の記憶領域に記憶させる、請求項1記載のコントローラ。
  5. 前記ステータス出力部が生成する前記ステータス情報は、前記データベースシステムへの送信対象のデータのデータサイズ、データ本体および接続先のデータベースシステムを識別する情報の少なくともいずれかを含む、
    請求項1記載のコントローラ。
  6. 前記ステータス情報を参照して前記ステータス情報に示される前記アクセスの状況に応じてデータベースシステムへのアクセス処理のリカバリを行うリカバリプログラムを保持する保持部をさらに備え、
    電断からの復帰時に、前記リカバリプログラムを実行する、
    請求項1記載のコントローラ。
  7. 前記リカバリプログラムは、前記コントローラから前記データベースシステムへ送信するSQL文の送信状況に応じてリカバリを行う、
    請求項6記載のコントローラ。
  8. コントローラの動作を制御するためのプログラムであって、前記コントローラは、プロセッサと、データベースシステムと接続するための通信インタフェースと、不揮発性のメモリとを備え、
    前記プログラムは、前記プロセッサに、
    前記データベースシステムへアクセスするためのアクセス命令を含むユーザプログラムの実行時に、前記データベースシステムへの前記通信インタフェースを介したアクセスを制御するステップと、
    前記アクセス命令の実行時に、前記データベースシステムへの送信対象のデータを前記不揮発性の記憶領域に格納するステップと、
    前記不揮発性の記憶領域から前記データベースシステムへの送信対象のデータを読み出して、読み出されたデータに基づき前記データベースシステムへアクセスするための命令文を生成し、生成した命令文を前記データベースシステムへ送信するステップと、
    前記アクセス命令に応じて前記データベースシステムへアクセスするための処理を開始してから前記生成された命令文に基づく処理が完了するまでの間、前記命令文の実行状況を示すステータス情報を生成し、生成された前記ステータス情報を前記不揮発性の記憶領域に記憶させるステップとを実行させる、プログラム。
JP2013073257A 2013-03-29 2013-03-29 コントローラおよびプログラム Active JP6064749B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013073257A JP6064749B2 (ja) 2013-03-29 2013-03-29 コントローラおよびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013073257A JP6064749B2 (ja) 2013-03-29 2013-03-29 コントローラおよびプログラム

Publications (2)

Publication Number Publication Date
JP2014197346A JP2014197346A (ja) 2014-10-16
JP6064749B2 true JP6064749B2 (ja) 2017-01-25

Family

ID=52358068

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013073257A Active JP6064749B2 (ja) 2013-03-29 2013-03-29 コントローラおよびプログラム

Country Status (1)

Country Link
JP (1) JP6064749B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018151917A (ja) 2017-03-14 2018-09-27 オムロン株式会社 制御装置
JP7331507B2 (ja) * 2019-07-08 2023-08-23 オムロン株式会社 コントローラ、制御システム、および制御方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006338145A (ja) * 2005-05-31 2006-12-14 Nippon Telegr & Teleph Corp <Ntt> 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
JP5549556B2 (ja) * 2010-11-16 2014-07-16 富士電機株式会社 データ収集システム、データ収集システムの異常要因判定方法
JP6201298B2 (ja) * 2012-11-14 2017-09-27 オムロン株式会社 コントローラおよびプログラム

Also Published As

Publication number Publication date
JP2014197346A (ja) 2014-10-16

Similar Documents

Publication Publication Date Title
US9141336B2 (en) Data transfer device
JP6171386B2 (ja) コントローラ、情報処理装置およびプログラム
WO2015136959A1 (ja) 制御システム、方法、プログラムおよび情報処理装置
JP6201298B2 (ja) コントローラおよびプログラム
JP6171387B2 (ja) コントローラ、情報処理装置およびプログラム
JP5549556B2 (ja) データ収集システム、データ収集システムの異常要因判定方法
JP6064749B2 (ja) コントローラおよびプログラム
JP6442131B2 (ja) 制御システムおよび制御装置
JP2019096210A (ja) 制御装置、制御方法、およびプログラム
WO2015045004A1 (ja) プログラマブルコントローラおよびプログラマブルコントローラの制御方法
JP6517474B2 (ja) プログラマブルコントローラ、及び演算処理システム
WO2021005829A1 (ja) コントローラ、制御システム、および制御方法
JP4776602B2 (ja) コントローラ用のプログラミング装置、コントローラ及びコントローラ管理システム
CN113682964B (zh) 设备参数管理及恢复方法、平台、装置、起重机及系统
JP5490267B2 (ja) データ転送装置
US11287789B2 (en) Program development support device, program development support system, program development support method, and non-transitory computer-readable recording medium
KR20110039066A (ko) 복수개의 슬레이브 제어기의 리프로그래밍 방법
JP6175759B2 (ja) コントローラ、制御システム、プログラム、および情報処理装置
JP2014127055A (ja) Plcの周辺装置
JP6217060B2 (ja) 通信装置及び通信プログラム
JP4527419B2 (ja) プログラムトレース方法およびトレース処理システム
KR20090121755A (ko) 로봇 제어기 부트로더, 부트로더 관리 장치 및 로봇 응용프로그램 실행 방법
JP2017034434A (ja) 通信制御装置および方法
JP2016062283A (ja) リモートインストールモジュール、リモートインストール方法及びリモートインストールシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160318

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161205

R150 Certificate of patent or registration of utility model

Ref document number: 6064749

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150