(57)【要約】      （修正有）【課題】ＰＬＣなどにおいて高速かつリアルタイムにデータをサーバに転送することを可能とすることを目的とする。【解決手段】通信手段はファイル転送プロトコルにしたがって制御コネクション７１およびデータコネクション７２を介して外部サーバ装置と通信する。要求送信手段は制御コネクション７１を介して外部サーバ装置にファイル転送要求を送信する。取得手段は予め監視対象として指定された制御機器の情報を取得する。生成手段は制御機器の情報からデータレコードを生成する。転送手段は、データレコードが外部サーバ装置においてファイルに格納されるよう、データコネクションを介してデータレコードを外部サーバ装置に転送する。切断手段はデータレコードの転送の終了条件が満たされると、データコネクションを切断する。【選択図】図７
2019128702.tif 000002
【特許請求の範囲】
【請求項１】
一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラであって、
ファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介して外部サーバ装置と通信する通信手段と、
前記制御コネクションを介して前記外部サーバ装置にファイル転送要求を送信する要求送信手段と、
予め監視対象として指定された制御機器の情報であってファイル化されていない情報を取得する取得手段と、
前記取得手段により取得された制御機器の情報からデータレコードを生成する生成手段と、
前記生成手段により生成されたデータレコードが前記外部サーバ装置においてファイルに格納されるよう、前記データコネクションを介して前記データレコードを前記外部サーバ装置に転送する転送手段と、
前記生成手段により生成されたデータレコードの転送の終了条件が満たされると、前記データコネクションを切断する切断手段と
を有することを特徴とするプログラマブル・ロジック・コントローラ。
【請求項２】
前記制御機器の情報を記憶する記憶領域である複数のデバイスを有するデバイスメモリをさらに有し、
前記取得手段は、予め設定されたサンプリング周期にしたがって、監視対象として指定されているデバイスから制御機器の情報を読み出して前記生成手段に渡すことを特徴とする請求項１に記載のプログラマブル・ロジック・コントローラ。
【請求項３】
前記制御プログラムは繰り返し実行されるユーザプログラムであり、
前記デバイスに記憶される情報は前記制御プログラムを実行することにより更新されることを特徴とする請求項２に記載のプログラマブル・ロジック・コントローラ。
【請求項４】
前記サンプリング周期よりも長いロギング周期ごとに前記外部サーバ装置にログインして前記制御コネクションと前記データコネクションとを確立する確立手段をさらに有することを特徴とする請求項２または３に記載のプログラマブル・ロジック・コントローラ。
【請求項５】
前記終了条件は、前記ファイルに格納されるデータレコードの数が所定数に到達したことであることを特徴とする請求項１ないし４のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項６】
前記要求送信手段は、前記外部サーバ装置に前記ファイルをオープンさせるために当該ファイルの名称を引数とするファイル転送要求コマンドを、前記制御コネクションを介して送信するように構成されており、
前記転送手段は、前記ファイル転送要求コマンドに対するレスポンスが前記通信手段により受信されると、前記データレコードの転送を開始するように構成されていることを特徴とする請求項１ないし５のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項７】
前記制御プログラムはファンクションブロックを有しており、
前記ファンクションブロックは、前記制御機器の情報のサンプリングの開始と停止を示すデバイスと、前記データレコードに搭載される情報を記憶するデバイスのアドレスと、前記外部サーバ装置において一つのファイルに格納されることになるデータレコードの数とを管理していることを特徴とする請求項１ないし６のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項８】
前記通信手段は、予め設定されたファイルフォーマットを指定するコマンドを、前記制御コネクションを介して前記外部サーバ装置に送信し、
前記生成手段は、前記ファイルフォーマットにしたがうよう前記取得手段により取得された前記制御機器の情報を変換してデータレコードを生成することを特徴とすることを特徴とする請求項１ないし７のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項９】
前記確立手段は、第一データコネクションおよび第二データコネクションを確立し、
前記転送手段は、前記第一データコネクションを介して第一ファイルに格納されることになるデータレコード転送し、前記第二データコネクションを介して第二ファイルに格納されることになるデータレコード転送するように構成されていることを特徴とする請求項４に記載のプログラマブル・ロジック・コントローラ。
【請求項１０】
前記確立手段は、前記第一ファイルに格納されるデータレコードの転送が完了する前に、前記第二データコネクションを確立し、前記第二データコネクションを介した前記データレコードの転送に備えることを特徴とする請求項９に記載のプログラマブル・ロジック・コントローラ。
【請求項１１】
前記データレコードを一時的に記憶するバッファを有し、
前記転送手段は、前記バッファから前記データレコードを読み出して前記外部サーバ装置に転送することを特徴とする請求項１ないし１０のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項１２】
ファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介してＦＴＰサーバと通信するＦＴＰクライアントと、
前記ＦＴＰサーバにログファイルを作成するロギングタイミングが到来すると、前記ＦＴＰクライアントと前記ＦＴＰサーバとの間に制御コネクションを確立させ、前記制御コネクションを通じてさらにデータコネクションを確立させる確立手段と、
前記制御コネクションおよび前記データコネクションが確立されると、前記ＦＴＰクライアントに、前記制御コネクションを通じてファイルの名称を引数とする転送要求コマンドを送信させることで前記ＦＴＰサーバに当該ファイルをオープンさせ、前記ＦＴＰサーバから転送準備が完了したことを示すレスポンスが受信されると、予め定められた周期にしたがって、ファイル化されていない転送対象のデータを取得してデータレコードを生成し、前記ＦＴＰクライアントに当該データレコードを転送させ、前記データレコードの転送の終了条件が満たされると、前記ＦＴＰサーバに前記ファイルをクローズさせるために前記ＦＴＰクライアントに前記データコネクションを切断させる制御手段と
を有することを特徴とするデータロガー。
【請求項１３】
一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラの制御方法であって、
外部サーバ装置に対してファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを確立し、
前記制御コネクションを介して前記外部サーバ装置にファイル転送要求を送信し、
予め監視対象として指定された制御機器の情報であってファイル化されていない情報を取得し、
前記取得された制御機器の情報からデータレコードを生成し、
前記生成されたデータレコードが前記外部サーバ装置においてファイルに格納されるよう、前記データコネクションを介して前記データレコードを前記外部サーバ装置に転送し、
前記データレコードの転送の終了条件が満たされると、前記データコネクションを切断することを特徴とする制御方法。
【請求項１４】
ＦＴＰサーバにログファイルを作成するロギングタイミングが到来すると、ＦＴＰクライアントとＦＴＰサーバとの間に制御コネクションを確立し、
前記制御コネクションを通じてさらにデータコネクションを確立し、
前記制御コネクションおよび前記データコネクションが確立されると、前記ＦＴＰクライアントに、前記制御コネクションを通じてファイルの名称を引数とする転送要求コマンドを送信させることで前記ＦＴＰサーバに当該ファイルをオープンさせ、
前記ＦＴＰサーバから転送準備が完了したことを示すレスポンスが受信されると、予め定められた周期にしたがって、ファイル化されていない転送対象のデータを取得してデータレコードを生成し、
前記ＦＴＰクライアントに当該データレコードを転送させ、
前記データレコードの転送の終了条件が満たされると、前記ＦＴＰサーバに前記ファイルをクローズさせるために前記ＦＴＰクライアントに前記データコネクションを切断させることを特徴とするデータロガーの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル・ロジック・コントローラ、データロガーおよび制御方法に関する。
【背景技術】
【０００２】
プログラマブル・ロジック・コントローラ（ＰＬＣ）は生産設備を制御するコントローラである。ＰＬＣが生産設備を制御する際に取得した各種のデータは製造物の監視や生産設備の改善のために有用である。このようなデータはログデータとしてＰＬＣからサーバに転送されて保存される。ここで、ログデータを転送するためのプロトコルとして専用のプロトコルを採用する場合、クライアントプログラムとサーバプログラムとの両方を開発しなければならない。これは開発作業の手間とコストを増加させる。特許文献１のようにＦＴＰ（File Transfer Protocol）などの汎用プロトコルを採用する場合、汎用のクライアントプログラムと汎用のサーバプログラムを採用できる。これによりプログラムの開発作業が大幅に効率化する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2011-39643号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＰＬＣにおいて生産設備の制御に関連して取得されたデータはデバイスと呼ばれる記憶領域に記憶されており、ファイルとしては管理されていない。一方で、ＦＴＰなどのファイル転送プロトコルはファイルでなければ転送不可能である。そのため、ＰＬＣはデータをファイル化しなければならなかった。これは、データをファイル化するプログラムを開発しなければならないことを意味する。また、ＰＬＣは記憶装置にファイルシステムを構築してファイルを保存しなければならない。ファイルを保存したり、ファイルを読み出したりするには相応の処理時間が必要となるため、高速かつリアルタイムにデータをサーバに転送することが困難であった。そこで、本発明は、ＰＬＣなどにおいて高速かつリアルタイムにデータをサーバに転送することを可能とすることを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、たとえば、
一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラであって、
ファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介して外部サーバ装置と通信する通信手段と、
前記制御コネクションを介して前記外部サーバ装置にファイル転送要求を送信する要求送信手段と、
予め監視対象として指定された制御機器の情報であってファイル化されていない情報を取得する取得手段と、
前記取得手段により取得された制御機器の情報からデータレコードを生成する生成手段と、
前記生成手段により生成されたデータレコードが前記外部サーバ装置においてファイルに格納されるよう、前記データコネクションを介して前記データレコードを前記外部サーバ装置に転送する転送手段と、
前記生成手段により生成されたデータレコードの転送の終了条件が満たされると、前記データコネクションを切断する切断手段と
を有することを特徴とするプログラマブル・ロジック・コントローラを提供する。
【発明の効果】
【０００６】
本発明によれば、ＰＬＣなどに保持されているデータをファイル化せずにファイル転送プロトコルにしたがって転送できるようになるため、ＰＬＣにおいて高速かつリアルタイムにデータをサーバに転送することが可能となる。
【図面の簡単な説明】
【０００７】
【図１】ＰＬＣシステムを示す図
【図２】ラダープログラムを説明する図
【図３】プログラム作成支援装置を説明する図
【図４】ＰＬＣを説明する図
【図５】ラダープログラムのスキャンを説明する図
【図６】ＦＴＰサーバを説明する図
【図７】ＰＬＣの機能を説明する図
【図８】ＦＴＰサーバの機能を説明する図
【図９】ロギング処理を示すシーケンス図
【図１０】ダブルバッファ構成を説明する図
【図１１】ダブルバッファ構成を説明する図
【図１２】ロギング設定ＵＩを説明する図
【図１３】基本ユニットと拡張ユニットとの間における機能分散を説明する図
【図１４】基本ユニットと拡張ユニットとの間における機能分散を説明する図
【図１５】基本ユニットと拡張ユニットとの間における機能分散を説明する図
【図１６】ファンクションブロックを説明する図
【図１７】ＰＬＣで実行されるロギング処理を示すフローチャート
【図１８】ＦＴＰサーバで実行されるロギング処理を示すフローチャート
【発明を実施するための形態】
【０００８】
＜システム構成＞
はじめにプログラマブル・ロジック・コントローラ（ＰＬＣ、単にプログラマブルコントローラと呼ばれてもよい）を当業者にとってよりよく理解できるようにするために、一般的なＰＬＣの構成とその動作について説明する。
【０００９】
図１は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図１が示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置２と、工場等に設置される各種制御装置を統括的に制御するためのＰＬＣ（プログラマブル・ロジック・コントローラ）１とを備えている。ユーザプログラムは、ラダー言語やフローチャート形式のモーションプログラムなどのグラフィカルプログラミング言語を用いて作成されてもよいし、Ｃ言語などの高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザプログラムはラダープログラムとする。ＰＬＣ１は、ＣＰＵが内蔵された基本ユニット３と、１つないし複数の拡張ユニット４を備えている。基本ユニット３に対して１つないし複数の拡張ユニット４が着脱可能となっている。基本ユニット３はＣＰＵユニットと呼ばれることもある。
【００１０】
基本ユニット３には、表示部５および操作部６が備えられている。表示部５は、基本ユニット３に取り付けられている各拡張ユニット４の動作状況などを表示することができる。操作部６の操作内容に応じて表示部５は表示内容を切り替える。表示部５は、通常、ＰＬＣ１内のデバイスの現在値（デバイス値）やＰＬＣ１内で生じたエラー情報などを表示する。また、表示部５は動作状態（正常であるかエラーであるか）を表示する機能のみとして、拡張ユニット４の動作状況やＰＬＣ１内のデバイス値を表示する機能を持たない基本ユニットもある。その場合、操作部６は存在しない。
デバイスとは、デバイス値（デバイスデータ）を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。デバイスには１ビットのデータを記憶するビット型のデバイスと、複数ビットから成るデータを記憶するワード型のデバイスが存在する。ワード型のデバイスは、整数型、浮動小数点型、文字列型などさまざまな型のデータを記憶する。
【００１１】
拡張ユニット４は、ＰＬＣ１の機能を拡張するために用意されている。各拡張ユニット４には、その拡張ユニット４の機能に対応するフィールドデバイス（被制御装置）１０が接続され、これにより、各フィールドデバイス１６が拡張ユニット４を介して基本ユニット３に接続される。フィールドデバイス１０には、センサなどの入力機器や、アクチュエータなどの出力機器が含まれる。なお、複数のフィールドデバイス１０を識別する必要があるときには、１０ａ、１０ｂのように参照符号の末尾にａ、ｂ、ｃ・・・の文字が付与される。
【００１２】
プログラム作成支援装置２は、たとえば、携帯可能なノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部７および操作部８を備えている。ＰＬＣ１を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置２を用いて作成される。その作成されたラダープログラムは、プログラム作成支援装置２内でニモニックコードに変換される。プログラム作成支援装置２は、ＵＳＢ(Universal Serial Bus)などの通信ケーブル９を介してＰＬＣ１の基本ユニット３に接続され、ニモニックコードに変換されたラダープログラムを基本ユニット３に送る。基本ユニット３はラダープログラムをマシンコードに変換し、基本ユニット３に備えられたメモリ内に記憶する。なお、ここではニモニックコードが基本ユニット３に送信されているが、本発明はこれに限られない。たとえば、プログラム作成支援装置２は、ニモニックコードを中間コードに変換し、中間コードを基本ユニット３に送信してもよい。
【００１３】
なお、図１は示していないが、プログラム作成支援装置２の操作部８には、プログラム作成支援装置２に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置２は、ＵＳＢ以外の他の通信ケーブル９を介して、ＰＬＣ１の基本ユニット３に対して着脱可能に接続されるような構成であってもよい。また、通信ケーブル９を介さず、ＰＬＣ１の基本ユニット３に対して無線によって接続されるような構成であってもよい。
【００１４】
ＦＴＰサーバ１１はファイル転送プロトコルにしたがってＰＬＣ１からデータを取得し、取得したデータをファイルとして保存するサーバ装置である。ＦＴＰサーバ１１はＦＴＰサーバプログラムを実行するネットワーク接続ストレージ（ＮＡＳ）やパーソナルコンピュータ（ＰＣ）であってもよい。ここではファイル転送プロトコルの一例としてＦＴＰを採用しているが、ファイルを転送可能なプロトコルであれば十分である。たとえば、ＴＦＴＰ（Trivial File Transfer Protocol）やＳＦＴＰ（SSH File Transfer Protocol）が採用されてもよい。
【００１５】
＜ラダープログラム＞
図２は、ラダープログラムの作成時にプログラム作成支援装置２の表示部７に表示されるラダー図Ｌｄの一例を示す図である。プログラム作成支援装置２はマトリックス状に配置された複数のセルを表示部７に表示する。各セルには仮想デバイスのシンボルが配置される。シンボルは入力リレーや出力リレーなどを示している。複数のシンボルによってリレー回路が形成される。ラダー図Ｌｄには、たとえば、１０列×Ｎ行（Ｎは任意の自然数）のセルが配置されている。そして、各行のセル内には仮想デバイスのシンボルが適宜配置される。
【００１６】
図２が示すリレー回路は、入力装置からの入力信号に基づいてオン／オフされる３つの仮想デバイス（以下、「入力デバイス」と呼ぶ。）のシンボルと、出力装置の動作を制御するためにオン／オフされる仮想デバイス（以下、「出力デバイス」と呼ぶ。）のシンボルとが適宜結合されることにより構成されている。
【００１７】
各入力デバイスのシンボルの上方に表示されている文字（「Ｒ０００１」、「Ｒ０００２」および「Ｒ０００３」）は、その入力デバイスのデバイス名（アドレス名）を表している。各入力デバイスのシンボルの下方に表示されている文字（「フラグ１」、「フラグ２」および「フラグ３」）は、その入力デバイスに対応付けられたデバイスコメントを表している。出力デバイスのシンボルの上方に表示されている文字（「原点復帰」）は、その出力デバイスの機能を表す文字列からなるラベルである。
【００１８】
図２が示す例では、デバイス名「Ｒ０００１」および「Ｒ０００２」にそれぞれ対応する２つの入力デバイスのシンボルが直列的に結合されることにより、ＡＮＤ回路が構成されている。また、これらの２つの入力デバイスのシンボルからなるＡＮＤ回路に対して、デバイス名「Ｒ０００３」に対応する入力デバイスのシンボルが並列的に結合されることにより、ＯＲ回路が構成されている。すなわち、このリレー回路では、一行目の２つのシンボルに対応する入力デバイスがいずれもオンした場合、または、二行目のシンボルに対応する入力デバイスがオンした場合にのみ、一行目のシンボルに対応する出力デバイスがオンになる。
【００１９】
＜プログラム作成支援装置＞
図３は、プログラム作成支援装置２の電気的構成について説明するためのブロック図である。図３が示すように、プログラム作成支援装置２は、ＣＰＵ２１、表示部７、操作部８、記憶装置２２および通信ＩＦ２３を備えている。表示部７、操作部８、記憶装置２２および通信ＩＦ２３は、それぞれＣＰＵ２１に対して電気的に接続されている。記憶装置２２は、少なくともＲＡＭを含み、プログラム記憶部２４と、編集ソフト記憶部２５とを備えている。
【００２０】
ユーザは、編集ソフト記憶部２５に記憶されている編集ソフトをＣＰＵ２１に実行させて、操作部８を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成および変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、プログラム記憶部２４に記憶される。また、ユーザは、必要に応じてプログラム記憶部２４に記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信ＩＦ２３は、通信ケーブル９を介してプログラム作成支援装置２を基本ユニット３に通信可能に接続するためのものである。
【００２１】
＜ＰＬＣ＞
図４は、ＰＬＣ１の電気的構成について説明するためのブロック図である。図４が示すように、基本ユニット３は、ＣＰＵ３１、表示部５、操作部６、記憶装置３２および通信ＩＦ３３を備えている。表示部５、操作部６、記憶装置３２、および通信ＩＦ３３は、それぞれＣＰＵ３１に電気的に接続されている。記憶装置３２は、ＲＡＭやＲＯＭ、メモリカードなどを含んでもよい。記憶装置３２はデバイスメモリ３４やプログラム記憶部３５などの複数の記憶領域を有している。デバイスメモリ３４はビットデバイスやワードデバイスなどを有し、各デバイスはデバイス値を記憶する。プログラム記憶部３５は、プログラム作成支援装置２から入力されたラダープログラムやユーザデータを記憶する。プログラム記憶部３５は、基本ユニット３用の制御プログラムも記憶する。図４が示すように基本ユニット３と拡張ユニット４とは拡張バスの一種であるユニット外部バス９９を介して接続されている。なお、ユニット外部バス９９に関する通信機能は通信ＩＦ３３の一部として実装されてもよい。通信ＩＦ３３は無線通信回路または有線通信回路などを有するネットワーク通信回路である。
【００２２】
図５は、基本ユニット３のスキャンタイムを示す模式図である。図５が示すように１つのスキャンタイムＴは、入出力のリフレッシュを行うためのユニット間通信２０１、プログラム実行２０２、ＥＮＤ処理２０４により構成されている。ユニット間通信２０１で、基本ユニット３は、ラダープログラムを実行して得られた出力データを基本ユニット３内の記憶装置３２から拡張ユニット４など外部機器などに送信する。さらに、基本ユニット３は、拡張ユニット４など外部機器などから受信した入力データを基本ユニット３内の記憶装置３２に取り込む。つまり、基本ユニット３のデバイスに記憶されているデバイス値は出力リフレッシュによって拡張ユニット４のメモリ４２に反映される。同様に、拡張ユニット４のメモリ４２に記憶されているデバイス値は入力リフレッシュによって基本ユニット３のデバイスに反映される。このように入出力リフレッシュによって基本ユニット３のデバイスと拡張ユニット４のメモリが同期する。なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組みが採用されてもよい。ただし、基本ユニット３のデバイスは基本ユニット３が随時書き換えており、同様に、拡張ユニット４のメモリは拡張ユニット４が随時書き換えている。つまり、基本ユニット３のデバイスは基本ユニット３の内部の装置によって随時アクセス可能である。同様に、拡張ユニット４のメモリは拡張ユニット４の内部の装置によって随時アクセス可能になっている。基本ユニット３と拡張ユニット４との間では基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行２０２で、基本ユニット３は、更新された入力データを用いてプログラムを実行（演算）する。基本ユニット３はプログラムの実行によりデータを演算処理する。なお、ＥＮＤ処理とは、プログラム作成支援装置２や基本ユニット３に接続された表示器（図示せず）等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。ＰＬＣ１はＥＮＤ処理２０４においてデバイスメモリ３４からデータを収集して、ＦＴＰサーバ１１に転送してもよい。
【００２３】
このように、プログラム作成支援装置２はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをＰＬＣ１に転送する。ＰＬＣ１は、入出力リフレッシュ、ラダープログラムの実行およびＥＮＤ処理を１サイクル（１スキャン）として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器（センサ等）からのタイミング信号に基づいて、各種出力機器（モータ等）を制御する。よって、ＰＬＣ１は汎用のパーソナルコンピュータ（ＰＣ）とは全く異なる動きをする。
【００２４】
＜ＦＴＰサーバ＞
図６はＦＴＰサーバ１１の電気的構成について説明するためのブロック図である。ＦＴＰサーバ１１は、ＣＰＵ５１、記憶装置５２、通信ＩＦ５３などを備えている。記憶装置５２、通信ＩＦ５３は、内部バスなどを介してそれぞれＣＰＵ５１に電気的に接続されている。記憶装置５２は、ＲＡＭやＲＯＭ、メモリカード、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）などを含んでもよい。記憶装置５２には、ＰＬＣ１から収集されたデータを記憶するデータ記憶部５４や、ＣＰＵ５１により実行される制御プログラム（例：ＦＴＰサーバプログラム）を記憶するプログラム記憶部５５が設けられている。ＦＴＰサーバ１１は、通信ＩＦ５３を介してＦＴＰクライアントプログラムの動作する機器（例えば、ＰＬＣ１）と通信する。通信ＩＦ５３はネットワーク通信回路である。なお、ＦＴＰサーバ１１は表示部や操作部を有してもよい。
【００２５】
＜ＣＰＵの機能＞
図７はＰＬＣ１のＣＰＵ３１が制御プログラムやユーザプログラムを実行することで実現する機能を示している。デバイス管理部６０はラダープログラムなどのユーザプログラムにしたがってデバイス７８のデバイス値を更新する。デバイス値は、たとえば、ワーク（製造物）の生産数、生産設備の稼働率、振動、温度、アラームの内容および発生時刻などである。ＦＴＰクライアント部７０はＦＴＰプロトコルにしたがって通信ＩＦ３３を介してＦＴＰサーバ１１と通信する。制御コネクション通信部７１はＦＴＰプロトコルにしたがってＦＴＰサーバ１１と制御コネクションを確立し、制御コネクションを介して制御コマンドなどを送信する。制御コネクション通信部７１は、たとえば、ＦＴＰサーバ１１に接続要求を送信し、ＦＴＰサーバ１１から接続許可を示すレスポンスを受信する。制御コネクション通信部７１はユーザＩＤやパスワードを送信することでＦＴＰサーバ１１にログインする。これにより制御コネクションが確立される。ユーザＩＤやパスワードは、記憶装置３２に予め記憶されている。制御コネクション通信部７１はＴＹＰＥコマンドを送信することで、ファイル転送形式を指定する。ファイル転送形式としては、ＡＳＣＩＩ形式（テキスト形式）とイメージ形式（バイナリ形式）などがある。制御コネクション通信部７１はパッシブモードまたはアクティブモードにてデータコネクションを確立する。アクティブモードではＰＬＣ１がＦＴＰサーバ１１にＰＯＲＴコマンドを送信することでデータコネクションのための被接続ポート番号を通知し、ＦＴＰサーバ１１がこの指定ポート番号に対してデータコネクションを確立する。パッシブモードではＰＬＣ１がＦＴＰサーバ１１にＰＡＳＶコマンドを送信することで、ＦＴＰサーバ１１がデータコネクションのための被接続ポート番号を通知し、ＰＬＣ１がこの指定ポート番号に対してデータコネクションを確立する。制御コネクション通信部７１は制御コネクションを通じてファイル転送要求（ＳＴＯＲコマンド）を送信することで、ＦＴＰサーバ１１に保存されるべきファイルのファイル名などを指定する。ＳＴＯＲコマンドを受理したＦＴＰサーバは、指定ファイルパスに指定ファイルをオープンする。データコネクション通信部７２は、制御コネクションを通じて確立されたデータコネクションを介してファイルを構成することになるレコードデータを順番に転送する。データを受け取ったＦＴＰサーバ１１は指定ファイルに順番にデータを書き込んでいく。データコネクション通信部７２は、データコネクションを切断することで転送データの終端をＦＴＰサーバに通知する。ＦＴＰサーバ１１はデータコネクションの切断を検出すると、指定ファイルをクローズする。
【００２６】
設定管理部７７は、ロギングに必要な設定情報を設定データ７９として記憶装置３２に保存する。設定情報には、ＦＴＰサーバ１１のＩＰアドレス、ポート番号、ログファイルを保存するためのディレクトリのパス名、認証情報（ユーザＩＤとパスワード）、ログファイルのファイルフォーマット（バイナリ／テキスト）、データレコードとなるデバイス値のサンプリング周期（収集周期）、一つのデータレコードのサイズ、一つのファイルあたりのデータレコードの総数、収集対象のデバイス名（アドレスやデバイス番号）、最小ファイル番号（初期ファイル番号）、最大ファイル番号（最終ファイル番号）、ログファイル名の共通文字列、ロギングオプション（タイムスタンプの有無）などがある。ログファイル名は、ＦＴＰサーバ１１に保存されるログファイルのファイル名であり、共通文字列とファイル番号とを組み合わせて生成される。共通文字列が"ＴＥＳＴ"であり、ファイル番号が"０００１"であり、かつ、ファイルフォーマットがテキスト形式であれば、ログファイル名は、"ＴＥＳＴ０００１．ｃｓｖ"である。共通文字列が"ＴＥＳＴ"であり、ファイル番号が"０００１"であり、かつ、ファイルフォーマットがバイナリ形式であれば、ログファイル名は、"ＴＥＳＴ０００１．ｂｉｎ"である。設定管理部７７は、プログラム作成支援装置２から設定データ７９を受信してもよいし、操作部６から入力される情報にしたがって設定データ７９を作成して記憶装置３２に書き込んでもよい。また、設定データはデバイスメモリ３４にデバイス値として格納してもよいし、ファイルとして記憶しても構わない。
【００２７】
トリガ発生部７３は、設定データ７９により指定されたロギングの開始条件が満たされたかを判定し、開始条件（例：時刻）が満たされるたびにトリガ信号をトリガ受付部７４に入力する。ロギングとは、予め指定された制御機器の情報（デバイス値）を取得し、ファイル化することなくこの情報をＦＴＰサーバ１１に転送して保存することをいう。たとえば、開始条件は所定時刻などである。トリガ受付部７４はトリガ発生部７３または外部機器などからトリガ信号を受け付け、トリガ信号を受け付けたことをロギング制御部７５に通知する。
【００２８】
ロギング制御部７５は設定データ７９にしたがってロギングを制御する。ロギング制御部７５はトリガ信号（ロギング開始要求）を受信すると、ＦＴＰクライアント部７０にコネクションの確立を指示する。ロギング制御部７５は、設定データ７９から取得したＦＴＰサーバ１１のＩＰアドレス、ポート番号、ユーザＩＤおよびパスワード、ファイルフォーマットを制御コネクション通信部７１に設定する。また、ロギング制御部７５は設定データ７９から取得した共通文字列とファイル番号などに基づきログファイル名を決定して制御コネクション通信部７１に設定する。ロギング制御部７５は設定データ７９から取得したデータレコードとなるデバイス値のサンプリング周期（収集周期）、一つのデータレコードのサイズ、一つのファイルあたりのデータレコードの数、収集対象のデバイス名（アドレスやデバイス番号）をレコード生成部７６に設定する。レコード生成部７６は、サンプリング周期ごとに、指定されたデバイス値をデバイス７８から取得してデータレコードを生成し、データコネクション通信部７２に渡す。なお、トリガ発生部７３がサンプリング周期ごとにレコード生成部７６に対してデータレコードの生成と転送を指示してもよい。データコネクション通信部７２はバッファ６６を有しており、レコード生成部７６はこのバッファ６６にデータレコードを書き込む。ロギング制御部７５またはレコード生成部７６は、生成したデータレコードの数をカウントしている。ロギング制御部７５またはレコード生成部７６は、このカウント値が一つのファイルあたりのデータレコードの総数に到達すると、データコネクション通信部７２にデータコネクションの切断を指示する。なお、ロギング制御部７５は操作部６などを通じてロギングの停止指示を受け付けると、データコネクション通信部７２にデータコネクションの切断を指示する。
【００２９】
デバイス管理部６０は制御プログラムまたはユーザプログラムにしたがってデバイス７８に記憶されているデバイス値を更新する。また、デバイス管理部６０は他のＰＬＣ１から通信ＩＦ３３を介してデバイス値を取得してデバイス７８に書き込んでもよい。
【００３０】
図８はＦＴＰサーバ１１のＣＰＵ５１が制御プログラムを実行することで実現する機能を示している。ＦＴＰサーバ部８０はＦＴＰプロトコルにしたがって通信ＩＦ５３を介してＰＬＣ１と通信する。制御コネクション通信部８１はＦＴＰプロトコルにしたがってＰＬＣ１と制御コネクションを確立し、制御コネクションを介して制御コマンドなどを受信する。制御コネクション通信部８１は、たとえば、接続要求を受信すると、接続許可を示すレスポンス（例：２２０サービスレディ）を送信する。これを受けてＰＬＣ１（ＦＴＰクライアント）は、ユーザＩＤとパスワードを送信する。制御コネクション通信部８１は、ＰＬＣ１から受信したユーザＩＤとパスワードがデータ記憶部５４に記憶されているユーザＩＤとパスワードと一致するかどうかを判定すること、つまりユーザ認証を実行する。これにより制御コネクションが確立される。制御コネクション通信部８１は、ＴＹＰＥコマンドにより指定されたファイルフォーマットをデータコネクション通信部８２に設定する。制御コネクション通信部８１は、データコネクションの確立要求を受信すると、データコネクションを確立する。たとえば、制御コネクション通信部８１はＰＯＲＴコマンドにより指定された被接続ポート番号のポートにアクセスしてデータコネクションを確立する。パッシブモードでは、制御コネクション通信部８１は自己のポートを開き、当該ポート番号を通知し、ＰＬＣ１から当該ポートへのアクセスを待つ。制御コネクション通信部８１はファイル転送要求を受信すると、ファイル転送要求により指定されたパス名とファイル名にしたがってファイルをオープンする。データコネクション通信部８２はＴＹＰＥコマンドにより指定された転送形式でもって、受信したデータレコードをファイルに書き込む。データコネクション通信部８２はＰＬＣ１によりデータコネクションが切断されると、ファイルをクローズする。
【００３１】
＜信号シーケンス＞
図９はロギングに関するシーケンス図である。以下において、制御コネクション通信部７１、８１は制御コネクションを通じて通信する。また、データコネクション通信部７２、８２はデータコネクションを通じて通信する。
【００３２】
Ｓｑ１でＰＬＣ１の制御コネクション通信部７１はロギング制御部７５により指定されたＩＰアドレスとポート番号にしたがってＦＴＰサーバ１１に接続要求を送信する。
【００３３】
Ｓｑ２でＦＴＰサーバ１１の制御コネクション通信部８１は接続要求に対するレスポンスを送信する。このレスポンスはＦＴＰによる通信が可能であることを示す。
【００３４】
Ｓｑ３でＰＬＣ１の制御コネクション通信部７１はロギング制御部７５により指定されたユーザＩＤ（例：ｕｓｅｒＡ）をＵＳＥＲコマンドとともにＦＴＰサーバ１１に送信する。
【００３５】
Ｓｑ４でＦＴＰサーバ１１の制御コネクション通信部８１は受信したユーザＩＤがデータ記憶部５４に記憶されているユーザＩＤであることを確認し、確認応答（３３１ ｕｓｅｒＡ ＯＫ）をＰＬＣ１に送信する。
【００３６】
Ｓｑ５でＰＬＣ１の制御コネクション通信部７１はロギング制御部７５により指定されたパスワードをＰＡＳＳコマンドとともにＦＴＰサーバ１１に送信する。
【００３７】
Ｓｑ６でＦＴＰサーバ１１の制御コネクション通信部８１は受信したパスワードがデータ記憶部５４に記憶されているパスワードであることを確認し、確認応答（２３０ ｕｓｅｒＡ  ｌｏｇｇｅｄ  ｉｎ）をＰＬＣ１に送信する。
【００３８】
Ｓｑ７でＰＬＣ１の制御コネクション通信部７１はロギング制御部７５により指定された転送形式をＴＹＰＥコマンドとともにＦＴＰサーバ１１に送信する。ここで、ＴＹＰＥ Ｉはバイナリ形式を指定することを意味し、ＴＹＰＥ Ａはテキスト形式を指定することを意味する。
【００３９】
Ｓｑ８でＦＴＰサーバ１１の制御コネクション通信部８１はＴＹＰＥコマンドを通じてファイルフォーマットを受信すると、ファイルフォーマットをデータコネクション通信部８２に設定する。さらに、制御コネクション通信部８１はＴＹＰＥ指定完了をＰＬＣ１に送信する。
【００４０】
Ｓｑ９でＰＬＣ１の制御コネクション通信部７１はロギング制御部７５により指定されたＩＰアドレスとポート番号にしたがったデータコネクションの確立要求をＦＴＰサーバ１１に送信する。これはＰＯＲＴコマンドを送信することにより実行される。ここではアクティブモードが採用されているが、パッシブモードが採用されてもよい。この場合、データコネクションに関する被接続ポート番号はＦＴＰサーバ１１により指定される。
【００４１】
Ｓｑ１０でＦＴＰサーバ１１の制御コネクション通信部８１はＰＯＲＴコマンドにより指定されたポート番号をデータコネクション通信部８２に設定する。さらに、制御コネクション通信部８１はＰＯＲＴコマンドを受信したことを示すレスポンスをＰＬＣ１に送信する。
【００４２】
Ｓｑ１１でデータコネクション通信部８２はＰＯＲＴコマンドにより指定されたとポート番号でデータコネクションを確立する。
【００４３】
Ｓｑ１２でＰＬＣ１の制御コネクション通信部７１はファイル転送要求をＦＴＰサーバ１１に送信する。たとえば、制御コネクション通信部７１はロギング制御部７５により指定されたファイル名とパス名とを伴うＳＴＯＲコマンドをＦＴＰサーバ１１に送信する。
【００４４】
Ｓｑ１３でＦＴＰサーバ１１の制御コネクション通信部８１はＳＴＯＲコマンドを受信すると、ＳＴＯＲコマンドにより指定されたファイル名とパス名にしたがってログファイル８９をオープンする。さらに、制御コネクション通信部８１は転送準備ＯＫをレスポンスとしてＰＬＣ１に送信する。
【００４５】
Ｓｑ１４でＰＬＣ１のデータコネクション通信部７２はレコード生成部７６からサンプリング周期ごとにバッファ６６に書き込まれた１番目からＮ番目のデータレコードを順番にＦＴＰサーバ１１に転送する。バッファ６６はＦＩＦＯ（先入れ先出し）タイプのバッファである。つまり、ＰＬＣ１ではファイルの作成や書込み、読み出しが発生しないため、高速かつリアルタイムにデータが転送可能となる。なお、ロギングファイルのファイルフォーマットとしてテキスト形式が指定されている場合、レコード生成部７６はデバイス値をバイナリ形式からテキスト形式に変換することでデータレコードを生成してもよい。なお、データレコードの構造（データ型、データサイズ、データの並び順、名称など）は設定データ７９により指定されてもよい。ＦＴＰサーバ１１のデータコネクション通信部８２は受信したデータレコードを順番にログファイル８９に書き込んで行く。
【００４６】
Ｓｑ１５でＰＬＣ１のデータコネクション通信部７２はＮ番目のデータレコードの送信を完了すると、データコネクションを切断する。Ｎは、設定データ７９により指定された一つのファイルあたりのデータレコードの総数である。
【００４７】
Ｓｑ１６でＦＴＰサーバ１１のデータコネクション通信部８２はデータコネクションが切断されたことを検出すると、ファイルをクローズする。さらに、制御コネクション通信部８１はファイル転送完了を示すレスポンスをＰＬＣ１に送信する。
【００４８】
＜ダブルバッファ構成＞
ダブルバッファ構成とは、制御コネクションとデータコネクションとのペアであるＦＴＰコネクションを二つ使用する構成をいう。ダブルバッファ構成は、生産設備においてアラームが発生したタイミングから、時間を遡ってストリームデータをＦＴＰサーバ１１に保存するような用途において有用であろう。とりわけ、単一のＦＴＰコネクションでは、ファイルのクローズ中に、再びロギング要求が発生すると、いくつかのデータレコードを転送できない可能性がある。つまり、Ｓｑ１６においてファイル転送完了を示すレスポンスを受信するまでＦＴＰクライアント部７０はデータコネクションを再確立できないため、いくつかのデータレコードを転送できなくなるだろう。
【００４９】
図１０はダブルバッファ構成の概念を説明する図である。ＰＬＣ１とＦＴＰサーバ１１は第１のＦＴＰコネクションと第２のＦＴＰコネクションとを使用して交互にストリームデータを転送することで複数のファイルを生成する。
【００５０】
図１１はダブルバッファ構成におけるＣＰＵ３１の機能を示している。図１１が示すように二つのＦＴＰクライアント部７０ａ、７０ｂが設けられている。ＦＴＰクライアント部７０ａ、７０ｂの動作は図７に示されたＦＴＰクライアント部７０と同様である。また、制御コネクション通信部７１ａ、７１ｂの動作も図７に示された制御コネクション通信部７１と同様である。また、データコネクション通信部７２ａ、７２ｂの動作も図７に示されたデータコネクション通信部７２と同様である。データコネクション通信部７２ａ、７２ｂはそれぞれバッファ６６ａ、６６ｂを有している。バッファ６６ａ、６６ｂもバッファ６６と同様に動作する。
【００５１】
ロギング制御部７５は、ＦＴＰクライアント部７０ａに第一のＦＴＰコネクションを確立させ、ストリームデータの転送を開始する。ここでストリームデータとはデータレコードの集合体である。ＦＴＰクライアント部７０ａはＳｑ１からＳｑ１６までのシーケンスを実行する。一方で、ロギング制御部７５は、ＦＴＰクライアント部７０ｂに第二のＦＴＰコネクションを確立させ、ＦＴＰクライアント部７０ｂを転送待機状態にする。つまり、ＦＴＰクライアント部７０ｂもＳｑ１からＳｑ１６までのシーケンスを実行する。これにより、図１０が示すように、第一のＦＴＰコネクションによるストリームデータの転送と第二のＦＴＰコネクションによるストリームデータの転送とがシームレスに実行されるよう、ＦＴＰクライアント部７０ａがデータコネクションを切断するタイミングから所定時間（例：数秒）前に、ＦＴＰクライアント部７０ｂは転送待機状態に遷移する。なお、ストリームデータの転送時間は、１ファイルあたりのデータレコードの総数にロギングサンプリング周期を乗算することで算出可能である。よって、ロギング制御部７５は、ストリームデータの転送時間から第一のＦＴＰコネクションにおけるストリームデータの転送終了時刻を求め、さらに、転送終了時刻から所定時間遡った時刻に、ＦＴＰクライアント部７０ｂを転送待機状態に遷移させる。よって、ロギング制御部７５はＦＴＰクライアント部７０ａによるストリームデータの転送が終了すると、レコード生成部７６のデータレコードの出力先を、ＦＴＰクライアント部７０ａからＦＴＰクライアント部７０ｂに切換える。
【００５２】
ＦＴＰクライアント部７０ｂがストリームデータを転送している最中に、ロギング制御部７５は、ＦＴＰクライアント部７０ａに再び第一のＦＴＰコネクションを確立させ、ＦＴＰクライアント部７０ａを転送待機状態にする。ロギング制御部７５はＦＴＰクライアント部７０ｂによるストリームデータの転送が終了すると、レコード生成部７６のデータレコードの出力先を、ＦＴＰクライアント部７０ｂからＦＴＰクライアント部７０ａに切換える。これにより、ＦＴＰクライアント部７０ａが第一のＦＴＰコネクションを通じて再びストリームデータを転送する。
【００５３】
ＦＴＰサーバ１１のＦＴＰサーバ部８０は二つのＦＴＰコネクションを交互に使用してストリームデータを受信して複数のログファイル８９を作成する。ＦＴＰサーバ部８０は第一のＦＴＰコネクションを通じたストリームデータの転送が終了すると、データ記憶部５４においてオープンされていたログファイル８９をクローズする（例：Ｆｉｌｅ０００１．ｃｓｖ）。ＦＴＰサーバ部８０は第二のＦＴＰコネクションを通じたストリームデータの転送が終了すると、データ記憶部５４におけるログファイル８９（例：Ｆｉｌｅ０００２．ｃｓｖ）をクローズする。次に、ＦＴＰサーバ部８０は第一のＦＴＰコネクションを通じたストリームデータの転送が終了すると、データ記憶部５４におけるログファイル８９（例：Ｆｉｌｅ０００３．ｃｓｖ）をクローズする。上述したようにデータコネクションが切断されたことを検出することで、ＦＴＰサーバ部８０は、ファイルをクローズする。
【００５４】
このように複数のＦＴＰコネクションを使用することでシームレスにデータレコードを転送できるようになる。なお、ファイル番号が最大ファイル番号になると、ロギング制御部７５はファイル番号を初期ファイル番号（例：００１）に戻してもよい。この場合、ＦＴＰサーバ１１は、同一ファイル名の古いログファイルに対して新しいログファイルを上書きする。ファイル番号を初期化することの利点は、ＦＴＰサーバ１１においてログファイル８９を記憶するために必要となる記憶容量が計算可能となる点である。
【００５５】
このようにダブルバッファ構成を採用することで、ほぼエンドレスに生産設備のログデータをＦＴＰサーバ１１に保存することが可能となる。たとえば、ＰＬＣ１において設備アラームが発生したタイミングでロギング制御部７５がロギングを停止させてもよい。この場合に、ＦＴＰサーバ１１には設備アラームが発生する直前のログデータがログファイル８９として保存されているため、設備アラームの原因解析に有用であろう。
【００５６】
ＰＬＣ１は設備サイクル信号がＯＮとなっている期間においてロギングを実行してもよい。つまり、トリガ受付部７４は設備サイクル信号がＯＮとなっているかどうかを判定する。設備サイクル信号は、生産設備がひとつのワークに対して加工や組み立て、検査等を実行している間だけＯＮとなる信号である。そのため、ワークのシリアル番号とログファイル８９とを関連付けて管理することで、ワークのトレーサビリティが達成される。
【００５７】
＜ロギング設定ＵＩ＞
図１２はロギング設定ＵＩ９０を示している。ＵＩはユーザインタフェースの略称である。プログラム作成支援装置２のＣＰＵ２１が表示部７にロギング設定ＵＩ９０を表示し、操作部８を通じて設定情報を受け付ける。あるいは、基本ユニット３のＣＰＵ３１が表示部５にロギング設定ＵＩ９０を表示し、操作部６を通じて設定情報を受け付ける。ここでは、後者のケースが詳細に説明される。
【００５８】
ロギング設定ＵＩ９０は、設定データ７９を作成するために必要となる各種の設定情報を受け付けるための入力ＵＩ９１と、ロギング指示ＵＩ９２とを有している。入力ＵＩ９１は、たとえば、次の情報の入力部を有している：
・ＦＴＰサーバのＩＰアドレス
・ＦＴＰサーバのポート番号
・ログファイル８９が保存されるディレクトリのパス名
・デバイス値のサンプリング周期（データレコードの生成周期）
・ファイル名の一部となる共通文字列
・ファイル名の一部となるファイル番号の最大値
・ファイル名の一部となるファイル番号の最小値
・ファイルフォーマット
・一つのデータレコードのサイズ
・一つのファイルあたりのデータレコードの数
・タイムスタンプの有無
設定管理部７７は操作部６を通じて入力された設定情報に基づき設定データ７９を作成し、記憶装置３２に格納する。
【００５９】
ロギング指示ＵＩ９２は、ロギングの開始や停止の指示を受け付けたり、現在実行されているロギングの状態を示したりするＵＩである。操作部６を通じてログ開始ボタン９３が押し下げられたことを検知すると、トリガ発生部７３はトリガ信号をトリガ受付部７４に出力する。操作部６を通じてログ停止ボタン９４が押し下げられたことを検知すると、トリガ発生部７３は停止信号をトリガ受付部７４またはロギング制御部７５に出力する。ロギング制御部７５は現在ロギング中のログファイル８９に対して転送したデータレコードの数をロギング指示ＵＩ９２に表示してもよい。ロギング制御部７５は次のログファイル８９のファイル名をロギング指示ＵＩ９２に表示してもよい。ロギング制御部７５はレコード生成部７６がデバイス値のサンプリングに失敗したこと（サンプリングエラー）を検知すると、エラー数をインクリメントし、サンプリングエラー数として、ロギング指示ＵＩ９２に表示してもよい。たとえば、サンプリング周期が短すぎると、サンプリングエラーが発生する。よって、ユーザはサンプリングエラー数が無くなるように、サンプリング周期を調整する。なお、ロギング指示ＵＩ９２は、さらに、ロギング中か停止中かを示すインジケータや、ＦＴＰサーバ１１との間で通信エラーが発生したことを示すインジケータなどを有してもよい。
【００６０】
＜通信ユニット＞
上述の実施例では、基本ユニット３に内蔵された通信ＩＦ３３が使用されているが、複数ある拡張ユニット４の一つが通信ＩＦ３３の代わりに使用されてもよい。ネットワーク通信回路を有した拡張ユニット４は通信ユニットと呼ばれる。
【００６１】
図１３は拡張ユニット４の通信ＩＦ３３を使用してＦＴＰ通信が実行されるケースを示している。基本ユニット３のＣＰＵ３１と拡張ユニット４のＣＰＵ４１とはユニット外部バス９９を介して通信する。つまり、基本ユニット３のＣＰＵ３１は拡張ユニット４のＣＰＵ４１に対してＦＴＰサーバ１１との通信を実行するように、ユニット外部バス９９を介して制御する。
【００６２】
図１４は拡張ユニット４の通信ＩＦ３３を使用してＦＴＰ通信が実行される他のケースを示している。このケースではＦＴＰクライアント部７０が拡張ユニット４のＣＰＵ４１によって実現されている。ＣＰＵ３１のロギング制御部７５はユニット外部バス９９を介してＣＰＵ４１のＦＴＰクライアント部７０と通信し、ＦＴＰ通信の開始や終了を指示する。また、ＣＰＵ３１のレコード生成部７６はユニット外部バス９９を介してＣＰＵ４１のデータコネクション通信部７２のバッファ６６にデータレコードを書き込む。
【００６３】
図１５は拡張ユニット４の通信ＩＦ３３を使用してＦＴＰ通信が実行されるさらに他のケースを示している。このケースではＦＴＰクライアント部７０だけでなく、トリガ発生部７３、トリガ受付部７４、ロギング制御部７５およびレコード生成部７６が拡張ユニット４のＣＰＵ４１によって実現されている。ＣＰＵ４１のレコード生成部７６はユニット外部バス９９を介して基本ユニット３のＣＰＵ３１と通信し、デバイス値を取得してデータレコードを生成する。
【００６４】
このようにロギングに関与する機能は基本ユニット３と拡張ユニット４との間で適宜に分散して配置されてもよい。
【００６５】
＜ファンクションブロック＞
上述のロギングを実行するためのプログラムはファンクションブロックにより実現されてもよい。ファンクションブロックはユーザプログラムから読み出されて実行されるプログラム部品である。
【００６６】
図１６はユーザプログラムであるラダープログラム３００内に記述されたロギング用のファンクションブロック３０１を示している。ラダープログラム３００とファンクションブロック３０１とはデバイスを通じて引数などのパラメータを送受信する。この例では、設定管理部７７は操作部６を通じて受け付けた設定データ７９を、デバイス管理部６０を通じて複数のデバイス７８に記憶させる。たとえば、ＦＴＰサーバ１１のＩＰアドレスはデバイスＤＭ１０に格納される。ファイルフォーマットはデバイスＤＭ２０に格納される。ファイル名の共通文字列はデバイスＤＭ３０に格納される。ログファイル８９が保存されるディレクトリのパス名はデバイスＤＭ５０に格納される。デバイス値のサンプリング周期（データレコードの生成周期）はデバイスＤＭ９に格納される。ファイル名の一部となるファイル番号の最大値はデバイスＤＭ７に格納される。ファイル名の一部となるファイル番号の最小値はデバイスＤＭ６に格納される。一つのデータレコードのサイズはデバイスＤＭ５に格納される。一つのファイルあたりのデータレコードの総数はデバイスＤＭ８に格納される。タイムスタンプの有無はデバイスＤＭ４に格納される。
【００６７】
ファンクションブロック３０１は指定されたデバイス７８から必要な設定情報を読み出してロギング処理を実行する。なお、ＣＰＵ３１はファンクションブロック３０１を実行することで、トリガ発生部７３、トリガ受付部７４、ロギング制御部７５、レコード生成部７６、設定管理部７７、ＦＴＰクライアント部７０を実現している。
【００６８】
＜フローチャート＞
図１７はＰＬＣ１のＣＰＵ３１が実行するロギング処理を示すフローチャートである。
【００６９】
Ｓ１でＣＰＵ３１（トリガ発生部７３、トリガ受付部７４）はロギングの開始が要求されているかどうかを判定する。たとえば、設定データ７９により定義された開始条件が満たされていたり、ログ開始ボタン９３が押されたりすると、ＣＰＵ３１はロギングの開始が要求されたと判定する。
【００７０】
Ｓ２でＣＰＵ３１（ロギング制御部７５、設定管理部７７）は記憶装置３２から設定データ７９を取得する。
【００７１】
Ｓ３でＣＰＵ３１（ロギング制御部７５、制御コネクション通信部７１）は設定データ７９にしたがってＦＴＰサーバ１１に対する制御コネクションを確立する。図９が示すように制御コネクション通信部７１はＳｑ１からＳｑ６までを実行する。
【００７２】
Ｓ４でＣＰＵ３１（ロギング制御部７５、制御コネクション通信部７１）は転送準備を実行する。転送準備とは、ＦＴＰプロトコルにしたがってデータレコードを伝送するために必要となる処理である。転送準備は、少なくともファイルフォーマットの指定（ＴＹＰＥコマンド）を含む。さらに、転送準備は、ディレクトリのパス名とファイル名の指定（ＳＴＯＲコマンド）を含んでもよい。ＳＴＯＲコマンドはログファイル８９をオープンするために送信される。
【００７３】
Ｓ５でＣＰＵ３１（ロギング制御部７５、制御コネクション通信部７１、データコネクション通信部７２）はデータコネクションを確立する。Ｓｑ９が示すように、制御コネクション通信部７１はＰＯＲＴコマンドまたはＰＡＳＶコマンドを送信することでデータコネクションを確立してもよい。
【００７４】
Ｓ６でＣＰＵ３１（ロギング制御部７５）は設定データ７９に基づきサンプリングタイミングが到来したかどうかを判定する。たとえば、ロギング制御部７５はタイマーやカウンタを用いてサンプリング周期を計測し、サンプリングタイミングを特定してもよい。サンプリングタイミングが到来すると、ＣＰＵ３１はＳ７に進む。
【００７５】
Ｓ７でＣＰＵ３１（ロギング制御部７５、レコード生成部７６）は設定データ７９により指定されたデバイスからデバイス値をサンプリング（取得）する。
【００７６】
Ｓ８でＣＰＵ３１（レコード生成部７６）は設定データ７９にしたがってデバイス値を連結または変換してデータレコードを生成する。レコード生成部７６はデータレコードをデータコネクション通信部７２のバッファ６６に書き込む。
【００７７】
Ｓ９でＣＰＵ３１（データコネクション通信部７２）はバッファ６６に書き込まれたデータレコードをＦＴＰサーバ１１に転送（送信）する。
【００７８】
Ｓ１０で（ロギング制御部７５、レコード生成部７６）は設定データ７９に基づき転送終了条件が満たされたかどうかを判定する。たとえば、ロギング制御部７５は、ＦＴＰサーバ１１に転送されたデータレコードの数をカウントし、カウント値が所定値になると、終了条件が満たされたと判定する。ここで、所定値は、一つのファイルに格納されるデータレコードの総数である。終了条件が満たされていなければ、ＣＰＵ３１はＳ６に戻る。終了条件が満たされると、ＣＰＵ３１はＳ１１に進む。
【００７９】
Ｓ１１で（ロギング制御部７５、データコネクション通信部７２）はログファイル８９をクローズするためにデータコネクションを切断する。
【００８０】
図１８はＦＴＰサーバ１１のＣＰＵ５１が実行するロギング処理を示すフローチャートである。
【００８１】
Ｓ２１でＣＰＵ５１（制御コネクション通信部８１）は接続要求を受信したかどうかを判定する。接続要求を受信すると、ＣＰＵ５１はＳ２２に進む。
【００８２】
Ｓ２２でＣＰＵ５１（制御コネクション通信部８１）は制御コネクションを確立する。たとえば、制御コネクション通信部８１は接続要求に対するレスポンスを送信したり、ユーザ認証を実行したりする。
【００８３】
Ｓ２３でＣＰＵ５１（制御コネクション通信部８１）は転送準備を実行する。たとえば、制御コネクション通信部８１は受信したファイルフォーマットにしたがって、ログファイル８９の拡張子（ｔｘｔまたはｂｉｎ）を決定したり、パス名とファイル名にしたがってログファイル８９をオープンしたりする。
【００８４】
Ｓ２４でＣＰＵ５１（制御コネクション通信部８１）はデータコネクションを確立する。アクティブモードではＰＬＣ１から通知されたＩＰアドレスとポート番号に対して制御コネクション通信部８１がデータコネクションを確立する。パッシブモードでは、制御コネクション通信部８１が自己のＩＰアドレスとポート番号をＰＬＣ１に通知し、ＰＬＣ１がこのＩＰアドレスとポート番号に対してデータコネクションを確立する。
【００８５】
Ｓ２５でＣＰＵ５１（データコネクション通信部８２）はＰＬＣ１からデータレコードを受信したかどうかを判定する。データレコードを受信すると、ＣＰＵ５１はＳ２６に進む。
【００８６】
Ｓ２６でＣＰＵ５１（データコネクション通信部８２）はデータレコードをログファイル８９に書き込む。
【００８７】
Ｓ２７でＣＰＵ５１（データコネクション通信部８２）はデータコネクションが切断されたかを判定する。データコネクションが切断されると、ＣＰＵ５１はＳ２８に進む。データコネクションが切断されていなければ、ＣＰＵ５１はＳ２５に戻る。
【００８８】
Ｓ２８でＣＰＵ５１（データコネクション通信部８２）はログファイル８９をクローズする。
【００８９】
＜まとめ＞
ＰＬＣ１や基本ユニット３は一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラの一例である。なお、拡張ユニット４やフィールドデバイス１０ａ、１０ｂは制御機器の一例である。通信ＩＦ３３やＦＴＰクライアント部７０はファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介して外部サーバ装置と通信する通信手段の一例である。ＦＴＰサーバ１１は外部サーバ装置の一例である。制御コネクション通信部７１は制御コネクションを介して外部サーバ装置にファイル転送要求を送信する要求送信手段の一例である。ＳＴＯＲコマンドはファイル転送要求の一例である。レコード生成部７６やデバイス管理部６０は予め監視対象として指定された制御機器の情報を取得する取得手段の一例である。デバイス値は制御機器の情報の一例である。レコード生成部７６は取得手段により取得された制御機器の情報からデータレコードを生成する生成手段の一例である。データコネクション通信部７２は生成手段により生成されたデータレコードが外部サーバ装置においてファイルに格納されるよう、データコネクションを介してデータレコードを外部サーバ装置に転送する転送手段の一例である。データコネクション通信部７２は生成手段により生成されたデータレコードの転送の終了条件が満たされると、データコネクションを切断する切断手段の一例である。このように本実施例では、ＰＬＣ１はＰＬＣ１に保持されているデータをファイル化せずにファイル転送プロトコルにしたがってサーバに転送する。そのため、ＰＬＣ１は高速かつリアルタイムにデータをサーバに転送することが可能となる。
【００９０】
デバイスメモリ３４は制御機器の情報を記憶する記憶領域である複数のデバイス７８を有するデバイスメモリの一例である。レコード生成部７６やデバイス管理部６０は予め設定されたサンプリング周期にしたがって、監視対象として指定されているデバイス７８から制御機器の情報を読み出して生成手段に渡してもよい。つまり、レコード生成部７６がサンプリング周期にしたがって、デバイス管理部６０を通じてデバイス値を取得してもよい。また、ロギング制御部７５がデバイス管理部６０を制御し、サンプリング周期にしたがって所定のデバイス値を取得させてレコード生成部７６に転送させてもよい。
【００９１】
ラダープログラムは制御プログラムの一例である。また、ラダープログラムは繰り返し実行されるユーザプログラムの一例である。ラダープログラムに代えてＣ言語などの高級言語やモーションフローなどが採用されてもよい。図５に関連して説明されたように、デバイス７８に記憶される情報は制御プログラムを実行することにより更新されてもよい。なお、デバイス値の更新周期は２ｍｓなどであり、通常、サンプリング周期よりも短い。
【００９２】
ＦＴＰクライアント部７０はロギング周期ごとに外部サーバ装置にログインして制御コネクションとデータコネクションとを確立する確立手段の一例である。なお、ロギング周期は、たとえば、一日である。このように、ロギング周期は、サンプリング周期（例：１０ｍｓ）よりも長い。
【００９３】
ロギングの終了条件は、たとえば、ファイルに格納されたデータレコードの数が所定数に到達したことであってもよい。所定数は、たとえば、１つのファイルに格納されるデータレコードの総数である。
【００９４】
制御コネクション通信部７１は、外部サーバ装置にファイルをオープンさせるために当該ファイルの名称を引数とするファイル転送要求コマンド（例：ＳＴＯＲ）を、制御コネクションを介して送信するように構成されていてもよい。制御コネクション通信部７１およびデータコネクション通信部７２は、ファイル転送要求コマンドに対するレスポンスが通信手段により受信されると、データレコードの転送を開始するように構成されていてもよい。
【００９５】
図１６が示すように、制御プログラムはファンクションブロック３０１を有していてもよい。ファンクションブロック３０１は、制御機器の情報のサンプリングの開始と停止を示すデバイスと、データレコードに搭載される情報を記憶するデバイスのアドレスと、外部サーバ装置において一つのファイルに格納されることになるデータレコードの数とを管理していてもよい。図１６によれば、サンプリングの開始はＭＲ１０１により管理される。サンプリングの停止はＭＲ１０３により管理される。データレコードに搭載される情報を記憶するデバイスのアドレスは、たとえば、ＺＦ０はデータレコードにおいて先頭となるデバイス値を格納しているデバイスのアドレスを示している。このアドレスを起点として、デバイスＤＭ５に格納されているワード数に相当する終了アドレスまでに位置する各デバイスからデバイス値が取得される。
【００９６】
ＦＴＰクライアント部７０および通信ＩＦ３３は、予め設定されたファイルフォーマットを指定するコマンドを、制御コネクションを介して外部サーバ装置に送信する。また、レコード生成部７６は、ファイルフォーマットにしたがうよう取得手段により取得された制御機器の情報を変換してデータレコードを生成してもよい。たとえば、ファイルフォーマットがバイナリであれば、レコード生成部７６はテキスト（ＡＳＣＩＩ）−バイナリ変換を実行する。
【００９７】
図１０および図１１が示すように、制御コネクション通信部７１ａ、７１ｂはそれぞれ第一データコネクションおよび第二データコネクションを確立してもよい。データコネクション通信部７２ａは第一データコネクションを介して第一ファイルに格納されることになるデータレコード転送する。データコネクション通信部７２ｂは第二データコネクションを介して第二ファイルに格納されることになるデータレコード転送するように構成されていてもよい。これによりシームレスにデバイス値をＦＴＰサーバ１１に記録することが可能となる。
【００９８】
ロギング制御部７５や制御コネクション通信部７１ｂは第一ファイルに格納されるデータレコードの転送が完了する前に、第二データコネクションを確立し、第二データコネクションを介したデータレコードの転送に備えてもよい。
【００９９】
バッファ６６はデータレコードを一時的に記憶するバッファの一例である。データコネクション通信部７２はバッファ６６からデータレコードを読み出して外部サーバ装置に転送してもよい。何らかの通信エラーが発生すると、サンプリング周期に同期してデータレコードを転送することが困難となる。また、先行するデータレコードを送信する前に後続のデータレコードが書き込まれると、先行するデータレコードが消失してしまう。そこで、バッファ６６に一時的にデータレコードを保持することで、もれなくデータレコードをＦＴＰサーバ１１に送信することが可能となる。なお、レコード生成部７６とバッファ６６との間にさらに別のバッファが設けられてもよい。これにより、もれなくデータレコードをＦＴＰサーバ１１に送信することが可能となる。
【０１００】
基本ユニット３はデータロガーの一例であるが、データロガーはＰＬＣ以外の情報処理装置に実装されてもよい。ＦＴＰクライアント部７０はファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介してＦＴＰサーバ１１と通信するＦＴＰクライアントの一例である。ロギング制御部７５や制御コネクション通信部７１はＦＴＰサーバ１１にログファイル８９を作成するロギングタイミングが到来すると、ＦＴＰクライアントとＦＴＰサーバ１１との間に制御コネクションを確立させ、制御コネクションを通じてさらにデータコネクションを確立させる確立手段の一例である。ロギング制御部７５や制御コネクション通信部７１は制御手段の一例である。ロギング制御部７５や制御コネクション通信部７１は制御コネクションおよびデータコネクションが確立されると、ＦＴＰクライアントに、制御コネクションを通じてファイルの名称を引数とする転送要求コマンドを送信させることでＦＴＰサーバ１１に当該ファイルをオープンさせる。ロギング制御部７５やレコード生成部７６はＦＴＰサーバ１１から転送準備が完了したことを示すレスポンスが受信されると、予め定められた周期にしたがって転送対象のデータを取得してデータレコードを生成する。ここで、転送対象のデータは、デバイス値など、ファイル化されていないデータである。ロギング制御部７５やデータコネクション通信部７２はＦＴＰクライアントに当該データレコードを転送させ、データレコードの転送の終了条件が満たされると、ＦＴＰサーバ１１にファイルをクローズさせるためにＦＴＰクライアントにデータコネクションを切断させる。
【図１】
2019128702.tif 000003
【図２】
2019128702.tif 000004
【図３】
2019128702.tif 000005
【図４】
2019128702.tif 000006
【図５】
2019128702.tif 000007
【図６】
2019128702.tif 000008
【図７】
2019128702.tif 000009
【図８】
2019128702.tif 000010
【図９】
2019128702.tif 000011
【図１０】
2019128702.tif 000012
【図１１】
2019128702.tif 000013
【図１２】
2019128702.tif 000014
【図１３】
2019128702.tif 000015
【図１４】
2019128702.tif 000016
【図１５】
2019128702.tif 000017
【図１６】
2019128702.tif 000018
【図１７】
2019128702.tif 000019
【図１８】
2019128702.tif 000020