IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社キーエンスの特許一覧

特許7017419プログラマブル・ロジック・コントローラ、データロガーおよび制御方法
<>
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図1
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図2
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図3
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図4
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図5
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図6
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図7
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図8
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図9
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図10
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図11
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図12
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図13
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図14
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図15
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図16
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図17
  • 特許-プログラマブル・ロジック・コントローラ、データロガーおよび制御方法 図18
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-31
(45)【発行日】2022-02-08
(54)【発明の名称】プログラマブル・ロジック・コントローラ、データロガーおよび制御方法
(51)【国際特許分類】
   G05B 19/05 20060101AFI20220201BHJP
   H04L 67/00 20220101ALI20220201BHJP
【FI】
G05B19/05 L
H04L67/00
【請求項の数】 13
(21)【出願番号】P 2018008764
(22)【出願日】2018-01-23
(65)【公開番号】P2019128702
(43)【公開日】2019-08-01
【審査請求日】2020-09-23
(73)【特許権者】
【識別番号】000129253
【氏名又は名称】株式会社キーエンス
(74)【代理人】
【識別番号】110003281
【氏名又は名称】特許業務法人大塚国際特許事務所
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100131886
【弁理士】
【氏名又は名称】坂本 隆志
(72)【発明者】
【氏名】佐藤 知史
【審査官】藤崎 詔夫
(56)【参考文献】
【文献】特開2004-280757(JP,A)
【文献】特開2001-345829(JP,A)
【文献】特開2015-125654(JP,A)
【文献】特開平11-242640(JP,A)
【文献】特開2016-076857(JP,A)
【文献】特開2008-134999(JP,A)
【文献】特開2006-106999(JP,A)
【文献】特開平08-286847(JP,A)
【文献】特開平04-119443(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/05
(57)【特許請求の範囲】
【請求項1】
一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラであって、
ファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介して外部サーバ装置と通信する通信手段と、
前記制御コネクションを介して前記外部サーバ装置にファイル転送要求を送信する要求送信手段と、
予め監視対象として指定された制御機器の情報であってファイル化されていない情報を取得する取得手段と、
前記取得手段により取得された制御機器の情報からデータレコードを生成する生成手段と、
前記生成手段により生成されたデータレコードが前記外部サーバ装置においてファイルに格納されるよう、前記データコネクションを介して前記データレコードを前記外部サーバ装置に転送する転送手段と、
前記生成手段により生成されたデータレコードの転送の終了条件が満たされると、前記データコネクションを切断する切断手段と
を有し、
前記終了条件は、前記ファイルに格納されるデータレコードの数が所定数に到達したことであることを特徴とするプログラマブル・ロジック・コントローラ。
【請求項2】
前記制御機器の情報を記憶する記憶領域である複数のデバイスを有するデバイスメモリをさらに有し、
前記取得手段は、予め設定されたサンプリング周期にしたがって、監視対象として指定されているデバイスから制御機器の情報を読み出して前記生成手段に渡すことを特徴とする請求項1に記載のプログラマブル・ロジック・コントローラ。
【請求項3】
前記制御プログラムは繰り返し実行されるユーザプログラムであり、
前記デバイスに記憶される情報は前記制御プログラムを実行することにより更新されることを特徴とする請求項2に記載のプログラマブル・ロジック・コントローラ。
【請求項4】
前記サンプリング周期よりも長いロギング周期ごとに前記外部サーバ装置にログインして前記制御コネクションと前記データコネクションとを確立する確立手段をさらに有することを特徴とする請求項2または3に記載のプログラマブル・ロジック・コントローラ。
【請求項5】
前記要求送信手段は、前記外部サーバ装置に前記ファイルをオープンさせるために当該ファイルの名称を引数とするファイル転送要求コマンドを、前記制御コネクションを介して送信するように構成されており、
前記転送手段は、前記ファイル転送要求コマンドに対するレスポンスが前記通信手段により受信されると、前記データレコードの転送を開始するように構成されていることを特徴とする請求項1ないしのいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項6】
前記制御プログラムはファンクションブロックを有しており、
前記ファンクションブロックは、前記制御機器の情報のサンプリングの開始と停止を示すデバイスと、前記データレコードに搭載される情報を記憶するデバイスのアドレスと、前記外部サーバ装置において一つのファイルに格納されることになるデータレコードの数とを管理していることを特徴とする請求項1ないしのいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項7】
前記通信手段は、予め設定されたファイルフォーマットを指定するコマンドを、前記制御コネクションを介して前記外部サーバ装置に送信し、
前記生成手段は、前記ファイルフォーマットにしたがうよう前記取得手段により取得された前記制御機器の情報を変換してデータレコードを生成することを特徴とすることを特徴とする請求項1ないしのいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項8】
前記確立手段は、第一データコネクションおよび第二データコネクションを確立し、
前記転送手段は、前記第一データコネクションを介して第一ファイルに格納されることになるデータレコード転送し、前記第二データコネクションを介して第二ファイルに格納されることになるデータレコード転送するように構成されていることを特徴とする請求項4に記載のプログラマブル・ロジック・コントローラ。
【請求項9】
前記確立手段は、前記第一ファイルに格納されるデータレコードの転送が完了する前に、前記第二データコネクションを確立し、前記第二データコネクションを介した前記データレコードの転送に備えることを特徴とする請求項に記載のプログラマブル・ロジック・コントローラ。
【請求項10】
前記データレコードを一時的に記憶するバッファを有し、
前記転送手段は、前記バッファから前記データレコードを読み出して前記外部サーバ装置に転送することを特徴とする請求項1ないしのいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項11】
ファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介してFTPサーバと通信するFTPクライアントと、
前記FTPサーバにログファイルを作成するロギングタイミングが到来すると、前記FTPクライアントと前記FTPサーバとの間に制御コネクションを確立させ、前記制御コネクションを通じてさらにデータコネクションを確立させる確立手段と、
前記制御コネクションおよび前記データコネクションが確立されると、前記FTPクライアントに、前記制御コネクションを通じてファイルの名称を引数とする転送要求コマンドを送信させることで前記FTPサーバに当該ファイルをオープンさせ、前記FTPサーバから転送準備が完了したことを示すレスポンスが受信されると、予め定められた周期にしたがって、ファイル化されていない転送対象のデータを取得してデータレコードを生成し、前記FTPクライアントに当該データレコードを転送させ、前記データレコードの転送の終了条件が満たされると、前記FTPサーバに前記ファイルをクローズさせるために前記FTPクライアントに前記データコネクションを切断させる制御手段と
を有し、
前記終了条件は、前記ファイルに格納されるデータレコードの数が所定数に到達したことであることを特徴とするデータロガー。
【請求項12】
一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラの制御方法であって、
外部サーバ装置に対してファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを確立し、
前記制御コネクションを介して前記外部サーバ装置にファイル転送要求を送信し、
予め監視対象として指定された制御機器の情報であってファイル化されていない情報を取得し、
前記取得された制御機器の情報からデータレコードを生成し、
前記生成されたデータレコードが前記外部サーバ装置においてファイルに格納されるよう、前記データコネクションを介して前記データレコードを前記外部サーバ装置に転送し、
前記データレコードの転送の終了条件が満たされると、前記データコネクションを切断し、
前記終了条件は、前記ファイルに格納されるデータレコードの数が所定数に到達したことであることを特徴とする制御方法。
【請求項13】
FTPサーバにログファイルを作成するロギングタイミングが到来すると、FTPクライアントとFTPサーバとの間に制御コネクションを確立し、
前記制御コネクションを通じてさらにデータコネクションを確立し、
前記制御コネクションおよび前記データコネクションが確立されると、前記FTPクライアントに、前記制御コネクションを通じてファイルの名称を引数とする転送要求コマンドを送信させることで前記FTPサーバに当該ファイルをオープンさせ、
前記FTPサーバから転送準備が完了したことを示すレスポンスが受信されると、予め定められた周期にしたがって、ファイル化されていない転送対象のデータを取得してデータレコードを生成し、
前記FTPクライアントに当該データレコードを転送させ、
前記データレコードの転送の終了条件が満たされると、前記FTPサーバに前記ファイルをクローズさせるために前記FTPクライアントに前記データコネクションを切断させ
前記終了条件は、前記ファイルに格納されるデータレコードの数が所定数に到達したことであることを特徴とするデータロガーの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラマブル・ロジック・コントローラ、データロガーおよび制御方法に関する。
【背景技術】
【0002】
プログラマブル・ロジック・コントローラ(PLC)は生産設備を制御するコントローラである。PLCが生産設備を制御する際に取得した各種のデータは製造物の監視や生産設備の改善のために有用である。このようなデータはログデータとしてPLCからサーバに転送されて保存される。ここで、ログデータを転送するためのプロトコルとして専用のプロトコルを採用する場合、クライアントプログラムとサーバプログラムとの両方を開発しなければならない。これは開発作業の手間とコストを増加させる。特許文献1のようにFTP(File Transfer Protocol)などの汎用プロトコルを採用する場合、汎用のクライアントプログラムと汎用のサーバプログラムを採用できる。これによりプログラムの開発作業が大幅に効率化する。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2011-39643号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
PLCにおいて生産設備の制御に関連して取得されたデータはデバイスと呼ばれる記憶領域に記憶されており、ファイルとしては管理されていない。一方で、FTPなどのファイル転送プロトコルはファイルでなければ転送不可能である。そのため、PLCはデータをファイル化しなければならなかった。これは、データをファイル化するプログラムを開発しなければならないことを意味する。また、PLCは記憶装置にファイルシステムを構築してファイルを保存しなければならない。ファイルを保存したり、ファイルを読み出したりするには相応の処理時間が必要となるため、高速かつリアルタイムにデータをサーバに転送することが困難であった。そこで、本発明は、PLCなどにおいて高速かつリアルタイムにデータをサーバに転送することを可能とすることを目的とする。
【課題を解決するための手段】
【0005】
本発明は、たとえば、
一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラであって、
ファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介して外部サーバ装置と通信する通信手段と、
前記制御コネクションを介して前記外部サーバ装置にファイル転送要求を送信する要求送信手段と、
予め監視対象として指定された制御機器の情報であってファイル化されていない情報を取得する取得手段と、
前記取得手段により取得された制御機器の情報からデータレコードを生成する生成手段と、
前記生成手段により生成されたデータレコードが前記外部サーバ装置においてファイルに格納されるよう、前記データコネクションを介して前記データレコードを前記外部サーバ装置に転送する転送手段と、
前記生成手段により生成されたデータレコードの転送の終了条件が満たされると、前記データコネクションを切断する切断手段と
を有し、
前記終了条件は、前記ファイルに格納されるデータレコードの数が所定数に到達したことであることを特徴とするプログラマブル・ロジック・コントローラを提供する。
【発明の効果】
【0006】
本発明によれば、PLCなどに保持されているデータをファイル化せずにファイル転送プロトコルにしたがって転送できるようになるため、PLCにおいて高速かつリアルタイムにデータをサーバに転送することが可能となる。
【図面の簡単な説明】
【0007】
図1】PLCシステムを示す図
図2】ラダープログラムを説明する図
図3】プログラム作成支援装置を説明する図
図4】PLCを説明する図
図5】ラダープログラムのスキャンを説明する図
図6】FTPサーバを説明する図
図7】PLCの機能を説明する図
図8】FTPサーバの機能を説明する図
図9】ロギング処理を示すシーケンス図
図10】ダブルバッファ構成を説明する図
図11】ダブルバッファ構成を説明する図
図12】ロギング設定UIを説明する図
図13】基本ユニットと拡張ユニットとの間における機能分散を説明する図
図14】基本ユニットと拡張ユニットとの間における機能分散を説明する図
図15】基本ユニットと拡張ユニットとの間における機能分散を説明する図
図16】ファンクションブロックを説明する図
図17】PLCで実行されるロギング処理を示すフローチャート
図18】FTPサーバで実行されるロギング処理を示すフローチャート
【発明を実施するための形態】
【0008】
<システム構成>
はじめにプログラマブル・ロジック・コントローラ(PLC、単にプログラマブルコントローラと呼ばれてもよい)を当業者にとってよりよく理解できるようにするために、一般的なPLCの構成とその動作について説明する。
【0009】
図1は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図1が示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置2と、工場等に設置される各種制御装置を統括的に制御するためのPLC(プログラマブル・ロジック・コントローラ)1とを備えている。ユーザプログラムは、ラダー言語やフローチャート形式のモーションプログラムなどのグラフィカルプログラミング言語を用いて作成されてもよいし、C言語などの高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザプログラムはラダープログラムとする。PLC1は、CPUが内蔵された基本ユニット3と、1つないし複数の拡張ユニット4を備えている。基本ユニット3に対して1つないし複数の拡張ユニット4が着脱可能となっている。基本ユニット3はCPUユニットと呼ばれることもある。
【0010】
基本ユニット3には、表示部5および操作部6が備えられている。表示部5は、基本ユニット3に取り付けられている各拡張ユニット4の動作状況などを表示することができる。操作部6の操作内容に応じて表示部5は表示内容を切り替える。表示部5は、通常、PLC1内のデバイスの現在値(デバイス値)やPLC1内で生じたエラー情報などを表示する。また、表示部5は動作状態(正常であるかエラーであるか)を表示する機能のみとして、拡張ユニット4の動作状況やPLC1内のデバイス値を表示する機能を持たない基本ユニットもある。その場合、操作部6は存在しない。
デバイスとは、デバイス値(デバイスデータ)を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー(補助リレー)、タイマー、カウンタ、データメモリ等の状態を示す情報である。デバイスには1ビットのデータを記憶するビット型のデバイスと、複数ビットから成るデータを記憶するワード型のデバイスが存在する。ワード型のデバイスは、整数型、浮動小数点型、文字列型などさまざまな型のデータを記憶する。
【0011】
拡張ユニット4は、PLC1の機能を拡張するために用意されている。各拡張ユニット4には、その拡張ユニット4の機能に対応するフィールドデバイス(被制御装置)10が接続され、これにより、各フィールドデバイス16が拡張ユニット4を介して基本ユニット3に接続される。フィールドデバイス10には、センサなどの入力機器や、アクチュエータなどの出力機器が含まれる。なお、複数のフィールドデバイス10を識別する必要があるときには、10a、10bのように参照符号の末尾にa、b、c・・・の文字が付与される。
【0012】
プログラム作成支援装置2は、たとえば、携帯可能なノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部7および操作部8を備えている。PLC1を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置2を用いて作成される。その作成されたラダープログラムは、プログラム作成支援装置2内でニモニックコードに変換される。プログラム作成支援装置2は、USB(Universal Serial Bus)などの通信ケーブル9を介してPLC1の基本ユニット3に接続され、ニモニックコードに変換されたラダープログラムを基本ユニット3に送る。基本ユニット3はラダープログラムをマシンコードに変換し、基本ユニット3に備えられたメモリ内に記憶する。なお、ここではニモニックコードが基本ユニット3に送信されているが、本発明はこれに限られない。たとえば、プログラム作成支援装置2は、ニモニックコードを中間コードに変換し、中間コードを基本ユニット3に送信してもよい。
【0013】
なお、図1は示していないが、プログラム作成支援装置2の操作部8には、プログラム作成支援装置2に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置2は、USB以外の他の通信ケーブル9を介して、PLC1の基本ユニット3に対して着脱可能に接続されるような構成であってもよい。また、通信ケーブル9を介さず、PLC1の基本ユニット3に対して無線によって接続されるような構成であってもよい。
【0014】
FTPサーバ11はファイル転送プロトコルにしたがってPLC1からデータを取得し、取得したデータをファイルとして保存するサーバ装置である。FTPサーバ11はFTPサーバプログラムを実行するネットワーク接続ストレージ(NAS)やパーソナルコンピュータ(PC)であってもよい。ここではファイル転送プロトコルの一例としてFTPを採用しているが、ファイルを転送可能なプロトコルであれば十分である。たとえば、TFTP(Trivial File Transfer Protocol)やSFTP(SSH File Transfer Protocol)が採用されてもよい。
【0015】
<ラダープログラム>
図2は、ラダープログラムの作成時にプログラム作成支援装置2の表示部7に表示されるラダー図Ldの一例を示す図である。プログラム作成支援装置2はマトリックス状に配置された複数のセルを表示部7に表示する。各セルには仮想デバイスのシンボルが配置される。シンボルは入力リレーや出力リレーなどを示している。複数のシンボルによってリレー回路が形成される。ラダー図Ldには、たとえば、10列×N行(Nは任意の自然数)のセルが配置されている。そして、各行のセル内には仮想デバイスのシンボルが適宜配置される。
【0016】
図2が示すリレー回路は、入力装置からの入力信号に基づいてオン/オフされる3つの仮想デバイス(以下、「入力デバイス」と呼ぶ。)のシンボルと、出力装置の動作を制御するためにオン/オフされる仮想デバイス(以下、「出力デバイス」と呼ぶ。)のシンボルとが適宜結合されることにより構成されている。
【0017】
各入力デバイスのシンボルの上方に表示されている文字(「R0001」、「R0002」および「R0003」)は、その入力デバイスのデバイス名(アドレス名)を表している。各入力デバイスのシンボルの下方に表示されている文字(「フラグ1」、「フラグ2」および「フラグ3」)は、その入力デバイスに対応付けられたデバイスコメントを表している。出力デバイスのシンボルの上方に表示されている文字(「原点復帰」)は、その出力デバイスの機能を表す文字列からなるラベルである。
【0018】
図2が示す例では、デバイス名「R0001」および「R0002」にそれぞれ対応する2つの入力デバイスのシンボルが直列的に結合されることにより、AND回路が構成されている。また、これらの2つの入力デバイスのシンボルからなるAND回路に対して、デバイス名「R0003」に対応する入力デバイスのシンボルが並列的に結合されることにより、OR回路が構成されている。すなわち、このリレー回路では、一行目の2つのシンボルに対応する入力デバイスがいずれもオンした場合、または、二行目のシンボルに対応する入力デバイスがオンした場合にのみ、一行目のシンボルに対応する出力デバイスがオンになる。
【0019】
<プログラム作成支援装置>
図3は、プログラム作成支援装置2の電気的構成について説明するためのブロック図である。図3が示すように、プログラム作成支援装置2は、CPU21、表示部7、操作部8、記憶装置22および通信IF23を備えている。表示部7、操作部8、記憶装置22および通信IF23は、それぞれCPU21に対して電気的に接続されている。記憶装置22は、少なくともRAMを含み、プログラム記憶部24と、編集ソフト記憶部25とを備えている。
【0020】
ユーザは、編集ソフト記憶部25に記憶されている編集ソフトをCPU21に実行させて、操作部8を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成および変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、プログラム記憶部24に記憶される。また、ユーザは、必要に応じてプログラム記憶部24に記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信IF23は、通信ケーブル9を介してプログラム作成支援装置2を基本ユニット3に通信可能に接続するためのものである。
【0021】
<PLC>
図4は、PLC1の電気的構成について説明するためのブロック図である。図4が示すように、基本ユニット3は、CPU31、表示部5、操作部6、記憶装置32および通信IF33を備えている。表示部5、操作部6、記憶装置32、および通信IF33は、それぞれCPU31に電気的に接続されている。記憶装置32は、RAMやROM、メモリカードなどを含んでもよい。記憶装置32はデバイスメモリ34やプログラム記憶部35などの複数の記憶領域を有している。デバイスメモリ34はビットデバイスやワードデバイスなどを有し、各デバイスはデバイス値を記憶する。プログラム記憶部35は、プログラム作成支援装置2から入力されたラダープログラムやユーザデータを記憶する。プログラム記憶部35は、基本ユニット3用の制御プログラムも記憶する。図4が示すように基本ユニット3と拡張ユニット4とは拡張バスの一種であるユニット外部バス99を介して接続されている。なお、ユニット外部バス99に関する通信機能は通信IF33の一部として実装されてもよい。通信IF33は無線通信回路または有線通信回路などを有するネットワーク通信回路である。
【0022】
図5は、基本ユニット3のスキャンタイムを示す模式図である。図5が示すように1つのスキャンタイムTは、入出力のリフレッシュを行うためのユニット間通信201、プログラム実行202、END処理204により構成されている。ユニット間通信201で、基本ユニット3は、ラダープログラムを実行して得られた出力データを基本ユニット3内の記憶装置32から拡張ユニット4など外部機器などに送信する。さらに、基本ユニット3は、拡張ユニット4など外部機器などから受信した入力データを基本ユニット3内の記憶装置32に取り込む。つまり、基本ユニット3のデバイスに記憶されているデバイス値は出力リフレッシュによって拡張ユニット4のメモリ42に反映される。同様に、拡張ユニット4のメモリ42に記憶されているデバイス値は入力リフレッシュによって基本ユニット3のデバイスに反映される。このように入出力リフレッシュによって基本ユニット3のデバイスと拡張ユニット4のメモリが同期する。なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組みが採用されてもよい。ただし、基本ユニット3のデバイスは基本ユニット3が随時書き換えており、同様に、拡張ユニット4のメモリは拡張ユニット4が随時書き換えている。つまり、基本ユニット3のデバイスは基本ユニット3の内部の装置によって随時アクセス可能である。同様に、拡張ユニット4のメモリは拡張ユニット4の内部の装置によって随時アクセス可能になっている。基本ユニット3と拡張ユニット4との間では基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行202で、基本ユニット3は、更新された入力データを用いてプログラムを実行(演算)する。基本ユニット3はプログラムの実行によりデータを演算処理する。なお、END処理とは、プログラム作成支援装置2や基本ユニット3に接続された表示器(図示せず)等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。PLC1はEND処理204においてデバイスメモリ34からデータを収集して、FTPサーバ11に転送してもよい。
【0023】
このように、プログラム作成支援装置2はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをPLC1に転送する。PLC1は、入出力リフレッシュ、ラダープログラムの実行およびEND処理を1サイクル(1スキャン)として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器(センサ等)からのタイミング信号に基づいて、各種出力機器(モータ等)を制御する。よって、PLC1は汎用のパーソナルコンピュータ(PC)とは全く異なる動きをする。
【0024】
<FTPサーバ>
図6はFTPサーバ11の電気的構成について説明するためのブロック図である。FTPサーバ11は、CPU51、記憶装置52、通信IF53などを備えている。記憶装置52、通信IF53は、内部バスなどを介してそれぞれCPU51に電気的に接続されている。記憶装置52は、RAMやROM、メモリカード、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)などを含んでもよい。記憶装置52には、PLC1から収集されたデータを記憶するデータ記憶部54や、CPU51により実行される制御プログラム(例:FTPサーバプログラム)を記憶するプログラム記憶部55が設けられている。FTPサーバ11は、通信IF53を介してFTPクライアントプログラムの動作する機器(例えば、PLC1)と通信する。通信IF53はネットワーク通信回路である。なお、FTPサーバ11は表示部や操作部を有してもよい。
【0025】
<CPUの機能>
図7はPLC1のCPU31が制御プログラムやユーザプログラムを実行することで実現する機能を示している。デバイス管理部60はラダープログラムなどのユーザプログラムにしたがってデバイス78のデバイス値を更新する。デバイス値は、たとえば、ワーク(製造物)の生産数、生産設備の稼働率、振動、温度、アラームの内容および発生時刻などである。FTPクライアント部70はFTPプロトコルにしたがって通信IF33を介してFTPサーバ11と通信する。制御コネクション通信部71はFTPプロトコルにしたがってFTPサーバ11と制御コネクションを確立し、制御コネクションを介して制御コマンドなどを送信する。制御コネクション通信部71は、たとえば、FTPサーバ11に接続要求を送信し、FTPサーバ11から接続許可を示すレスポンスを受信する。制御コネクション通信部71はユーザIDやパスワードを送信することでFTPサーバ11にログインする。これにより制御コネクションが確立される。ユーザIDやパスワードは、記憶装置32に予め記憶されている。制御コネクション通信部71はTYPEコマンドを送信することで、ファイル転送形式を指定する。ファイル転送形式としては、ASCII形式(テキスト形式)とイメージ形式(バイナリ形式)などがある。制御コネクション通信部71はパッシブモードまたはアクティブモードにてデータコネクションを確立する。アクティブモードではPLC1がFTPサーバ11にPORTコマンドを送信することでデータコネクションのための被接続ポート番号を通知し、FTPサーバ11がこの指定ポート番号に対してデータコネクションを確立する。パッシブモードではPLC1がFTPサーバ11にPASVコマンドを送信することで、FTPサーバ11がデータコネクションのための被接続ポート番号を通知し、PLC1がこの指定ポート番号に対してデータコネクションを確立する。制御コネクション通信部71は制御コネクションを通じてファイル転送要求(STORコマンド)を送信することで、FTPサーバ11に保存されるべきファイルのファイル名などを指定する。STORコマンドを受理したFTPサーバは、指定ファイルパスに指定ファイルをオープンする。データコネクション通信部72は、制御コネクションを通じて確立されたデータコネクションを介してファイルを構成することになるレコードデータを順番に転送する。データを受け取ったFTPサーバ11は指定ファイルに順番にデータを書き込んでいく。データコネクション通信部72は、データコネクションを切断することで転送データの終端をFTPサーバに通知する。FTPサーバ11はデータコネクションの切断を検出すると、指定ファイルをクローズする。
【0026】
設定管理部77は、ロギングに必要な設定情報を設定データ79として記憶装置32に保存する。設定情報には、FTPサーバ11のIPアドレス、ポート番号、ログファイルを保存するためのディレクトリのパス名、認証情報(ユーザIDとパスワード)、ログファイルのファイルフォーマット(バイナリ/テキスト)、データレコードとなるデバイス値のサンプリング周期(収集周期)、一つのデータレコードのサイズ、一つのファイルあたりのデータレコードの総数、収集対象のデバイス名(アドレスやデバイス番号)、最小ファイル番号(初期ファイル番号)、最大ファイル番号(最終ファイル番号)、ログファイル名の共通文字列、ロギングオプション(タイムスタンプの有無)などがある。ログファイル名は、FTPサーバ11に保存されるログファイルのファイル名であり、共通文字列とファイル番号とを組み合わせて生成される。共通文字列が"TEST"であり、ファイル番号が"0001"であり、かつ、ファイルフォーマットがテキスト形式であれば、ログファイル名は、"TEST0001.csv"である。共通文字列が"TEST"であり、ファイル番号が"0001"であり、かつ、ファイルフォーマットがバイナリ形式であれば、ログファイル名は、"TEST0001.bin"である。設定管理部77は、プログラム作成支援装置2から設定データ79を受信してもよいし、操作部6から入力される情報にしたがって設定データ79を作成して記憶装置32に書き込んでもよい。また、設定データはデバイスメモリ34にデバイス値として格納してもよいし、ファイルとして記憶しても構わない。
【0027】
トリガ発生部73は、設定データ79により指定されたロギングの開始条件が満たされたかを判定し、開始条件(例:時刻)が満たされるたびにトリガ信号をトリガ受付部74に入力する。ロギングとは、予め指定された制御機器の情報(デバイス値)を取得し、ファイル化することなくこの情報をFTPサーバ11に転送して保存することをいう。たとえば、開始条件は所定時刻などである。トリガ受付部74はトリガ発生部73または外部機器などからトリガ信号を受け付け、トリガ信号を受け付けたことをロギング制御部75に通知する。
【0028】
ロギング制御部75は設定データ79にしたがってロギングを制御する。ロギング制御部75はトリガ信号(ロギング開始要求)を受信すると、FTPクライアント部70にコネクションの確立を指示する。ロギング制御部75は、設定データ79から取得したFTPサーバ11のIPアドレス、ポート番号、ユーザIDおよびパスワード、ファイルフォーマットを制御コネクション通信部71に設定する。また、ロギング制御部75は設定データ79から取得した共通文字列とファイル番号などに基づきログファイル名を決定して制御コネクション通信部71に設定する。ロギング制御部75は設定データ79から取得したデータレコードとなるデバイス値のサンプリング周期(収集周期)、一つのデータレコードのサイズ、一つのファイルあたりのデータレコードの数、収集対象のデバイス名(アドレスやデバイス番号)をレコード生成部76に設定する。レコード生成部76は、サンプリング周期ごとに、指定されたデバイス値をデバイス78から取得してデータレコードを生成し、データコネクション通信部72に渡す。なお、トリガ発生部73がサンプリング周期ごとにレコード生成部76に対してデータレコードの生成と転送を指示してもよい。データコネクション通信部72はバッファ66を有しており、レコード生成部76はこのバッファ66にデータレコードを書き込む。ロギング制御部75またはレコード生成部76は、生成したデータレコードの数をカウントしている。ロギング制御部75またはレコード生成部76は、このカウント値が一つのファイルあたりのデータレコードの総数に到達すると、データコネクション通信部72にデータコネクションの切断を指示する。なお、ロギング制御部75は操作部6などを通じてロギングの停止指示を受け付けると、データコネクション通信部72にデータコネクションの切断を指示する。
【0029】
デバイス管理部60は制御プログラムまたはユーザプログラムにしたがってデバイス78に記憶されているデバイス値を更新する。また、デバイス管理部60は他のPLC1から通信IF33を介してデバイス値を取得してデバイス78に書き込んでもよい。
【0030】
図8はFTPサーバ11のCPU51が制御プログラムを実行することで実現する機能を示している。FTPサーバ部80はFTPプロトコルにしたがって通信IF53を介してPLC1と通信する。制御コネクション通信部81はFTPプロトコルにしたがってPLC1と制御コネクションを確立し、制御コネクションを介して制御コマンドなどを受信する。制御コネクション通信部81は、たとえば、接続要求を受信すると、接続許可を示すレスポンス(例:220サービスレディ)を送信する。これを受けてPLC1(FTPクライアント)は、ユーザIDとパスワードを送信する。制御コネクション通信部81は、PLC1から受信したユーザIDとパスワードがデータ記憶部54に記憶されているユーザIDとパスワードと一致するかどうかを判定すること、つまりユーザ認証を実行する。これにより制御コネクションが確立される。制御コネクション通信部81は、TYPEコマンドにより指定されたファイルフォーマットをデータコネクション通信部82に設定する。制御コネクション通信部81は、データコネクションの確立要求を受信すると、データコネクションを確立する。たとえば、制御コネクション通信部81はPORTコマンドにより指定された被接続ポート番号のポートにアクセスしてデータコネクションを確立する。パッシブモードでは、制御コネクション通信部81は自己のポートを開き、当該ポート番号を通知し、PLC1から当該ポートへのアクセスを待つ。制御コネクション通信部81はファイル転送要求を受信すると、ファイル転送要求により指定されたパス名とファイル名にしたがってファイルをオープンする。データコネクション通信部82はTYPEコマンドにより指定された転送形式でもって、受信したデータレコードをファイルに書き込む。データコネクション通信部82はPLC1によりデータコネクションが切断されると、ファイルをクローズする。
【0031】
<信号シーケンス>
図9はロギングに関するシーケンス図である。以下において、制御コネクション通信部71、81は制御コネクションを通じて通信する。また、データコネクション通信部72、82はデータコネクションを通じて通信する。
【0032】
Sq1でPLC1の制御コネクション通信部71はロギング制御部75により指定されたIPアドレスとポート番号にしたがってFTPサーバ11に接続要求を送信する。
【0033】
Sq2でFTPサーバ11の制御コネクション通信部81は接続要求に対するレスポンスを送信する。このレスポンスはFTPによる通信が可能であることを示す。
【0034】
Sq3でPLC1の制御コネクション通信部71はロギング制御部75により指定されたユーザID(例:userA)をUSERコマンドとともにFTPサーバ11に送信する。
【0035】
Sq4でFTPサーバ11の制御コネクション通信部81は受信したユーザIDがデータ記憶部54に記憶されているユーザIDであることを確認し、確認応答(331 userA OK)をPLC1に送信する。
【0036】
Sq5でPLC1の制御コネクション通信部71はロギング制御部75により指定されたパスワードをPASSコマンドとともにFTPサーバ11に送信する。
【0037】
Sq6でFTPサーバ11の制御コネクション通信部81は受信したパスワードがデータ記憶部54に記憶されているパスワードであることを確認し、確認応答(230 userA logged in)をPLC1に送信する。
【0038】
Sq7でPLC1の制御コネクション通信部71はロギング制御部75により指定された転送形式をTYPEコマンドとともにFTPサーバ11に送信する。ここで、TYPE Iはバイナリ形式を指定することを意味し、TYPE Aはテキスト形式を指定することを意味する。
【0039】
Sq8でFTPサーバ11の制御コネクション通信部81はTYPEコマンドを通じてファイルフォーマットを受信すると、ファイルフォーマットをデータコネクション通信部82に設定する。さらに、制御コネクション通信部81はTYPE指定完了をPLC1に送信する。
【0040】
Sq9でPLC1の制御コネクション通信部71はロギング制御部75により指定されたIPアドレスとポート番号にしたがったデータコネクションの確立要求をFTPサーバ11に送信する。これはPORTコマンドを送信することにより実行される。ここではアクティブモードが採用されているが、パッシブモードが採用されてもよい。この場合、データコネクションに関する被接続ポート番号はFTPサーバ11により指定される。
【0041】
Sq10でFTPサーバ11の制御コネクション通信部81はPORTコマンドにより指定されたポート番号をデータコネクション通信部82に設定する。さらに、制御コネクション通信部81はPORTコマンドを受信したことを示すレスポンスをPLC1に送信する。
【0042】
Sq11でデータコネクション通信部82はPORTコマンドにより指定されたとポート番号でデータコネクションを確立する。
【0043】
Sq12でPLC1の制御コネクション通信部71はファイル転送要求をFTPサーバ11に送信する。たとえば、制御コネクション通信部71はロギング制御部75により指定されたファイル名とパス名とを伴うSTORコマンドをFTPサーバ11に送信する。
【0044】
Sq13でFTPサーバ11の制御コネクション通信部81はSTORコマンドを受信すると、STORコマンドにより指定されたファイル名とパス名にしたがってログファイル89をオープンする。さらに、制御コネクション通信部81は転送準備OKをレスポンスとしてPLC1に送信する。
【0045】
Sq14でPLC1のデータコネクション通信部72はレコード生成部76からサンプリング周期ごとにバッファ66に書き込まれた1番目からN番目のデータレコードを順番にFTPサーバ11に転送する。バッファ66はFIFO(先入れ先出し)タイプのバッファである。つまり、PLC1ではファイルの作成や書込み、読み出しが発生しないため、高速かつリアルタイムにデータが転送可能となる。なお、ロギングファイルのファイルフォーマットとしてテキスト形式が指定されている場合、レコード生成部76はデバイス値をバイナリ形式からテキスト形式に変換することでデータレコードを生成してもよい。なお、データレコードの構造(データ型、データサイズ、データの並び順、名称など)は設定データ79により指定されてもよい。FTPサーバ11のデータコネクション通信部82は受信したデータレコードを順番にログファイル89に書き込んで行く。
【0046】
Sq15でPLC1のデータコネクション通信部72はN番目のデータレコードの送信を完了すると、データコネクションを切断する。Nは、設定データ79により指定された一つのファイルあたりのデータレコードの総数である。
【0047】
Sq16でFTPサーバ11のデータコネクション通信部82はデータコネクションが切断されたことを検出すると、ファイルをクローズする。さらに、制御コネクション通信部81はファイル転送完了を示すレスポンスをPLC1に送信する。
【0048】
<ダブルバッファ構成>
ダブルバッファ構成とは、制御コネクションとデータコネクションとのペアであるFTPコネクションを二つ使用する構成をいう。ダブルバッファ構成は、生産設備においてアラームが発生したタイミングから、時間を遡ってストリームデータをFTPサーバ11に保存するような用途において有用であろう。とりわけ、単一のFTPコネクションでは、ファイルのクローズ中に、再びロギング要求が発生すると、いくつかのデータレコードを転送できない可能性がある。つまり、Sq16においてファイル転送完了を示すレスポンスを受信するまでFTPクライアント部70はデータコネクションを再確立できないため、いくつかのデータレコードを転送できなくなるだろう。
【0049】
図10はダブルバッファ構成の概念を説明する図である。PLC1とFTPサーバ11は第1のFTPコネクションと第2のFTPコネクションとを使用して交互にストリームデータを転送することで複数のファイルを生成する。
【0050】
図11はダブルバッファ構成におけるCPU31の機能を示している。図11が示すように二つのFTPクライアント部70a、70bが設けられている。FTPクライアント部70a、70bの動作は図7に示されたFTPクライアント部70と同様である。また、制御コネクション通信部71a、71bの動作も図7に示された制御コネクション通信部71と同様である。また、データコネクション通信部72a、72bの動作も図7に示されたデータコネクション通信部72と同様である。データコネクション通信部72a、72bはそれぞれバッファ66a、66bを有している。バッファ66a、66bもバッファ66と同様に動作する。
【0051】
ロギング制御部75は、FTPクライアント部70aに第一のFTPコネクションを確立させ、ストリームデータの転送を開始する。ここでストリームデータとはデータレコードの集合体である。FTPクライアント部70aはSq1からSq16までのシーケンスを実行する。一方で、ロギング制御部75は、FTPクライアント部70bに第二のFTPコネクションを確立させ、FTPクライアント部70bを転送待機状態にする。つまり、FTPクライアント部70bもSq1からSq16までのシーケンスを実行する。これにより、図10が示すように、第一のFTPコネクションによるストリームデータの転送と第二のFTPコネクションによるストリームデータの転送とがシームレスに実行されるよう、FTPクライアント部70aがデータコネクションを切断するタイミングから所定時間(例:数秒)前に、FTPクライアント部70bは転送待機状態に遷移する。なお、ストリームデータの転送時間は、1ファイルあたりのデータレコードの総数にロギングサンプリング周期を乗算することで算出可能である。よって、ロギング制御部75は、ストリームデータの転送時間から第一のFTPコネクションにおけるストリームデータの転送終了時刻を求め、さらに、転送終了時刻から所定時間遡った時刻に、FTPクライアント部70bを転送待機状態に遷移させる。よって、ロギング制御部75はFTPクライアント部70aによるストリームデータの転送が終了すると、レコード生成部76のデータレコードの出力先を、FTPクライアント部70aからFTPクライアント部70bに切換える。
【0052】
FTPクライアント部70bがストリームデータを転送している最中に、ロギング制御部75は、FTPクライアント部70aに再び第一のFTPコネクションを確立させ、FTPクライアント部70aを転送待機状態にする。ロギング制御部75はFTPクライアント部70bによるストリームデータの転送が終了すると、レコード生成部76のデータレコードの出力先を、FTPクライアント部70bからFTPクライアント部70aに切換える。これにより、FTPクライアント部70aが第一のFTPコネクションを通じて再びストリームデータを転送する。
【0053】
FTPサーバ11のFTPサーバ部80は二つのFTPコネクションを交互に使用してストリームデータを受信して複数のログファイル89を作成する。FTPサーバ部80は第一のFTPコネクションを通じたストリームデータの転送が終了すると、データ記憶部54においてオープンされていたログファイル89をクローズする(例:File0001.csv)。FTPサーバ部80は第二のFTPコネクションを通じたストリームデータの転送が終了すると、データ記憶部54におけるログファイル89(例:File0002.csv)をクローズする。次に、FTPサーバ部80は第一のFTPコネクションを通じたストリームデータの転送が終了すると、データ記憶部54におけるログファイル89(例:File0003.csv)をクローズする。上述したようにデータコネクションが切断されたことを検出することで、FTPサーバ部80は、ファイルをクローズする。
【0054】
このように複数のFTPコネクションを使用することでシームレスにデータレコードを転送できるようになる。なお、ファイル番号が最大ファイル番号になると、ロギング制御部75はファイル番号を初期ファイル番号(例:001)に戻してもよい。この場合、FTPサーバ11は、同一ファイル名の古いログファイルに対して新しいログファイルを上書きする。ファイル番号を初期化することの利点は、FTPサーバ11においてログファイル89を記憶するために必要となる記憶容量が計算可能となる点である。
【0055】
このようにダブルバッファ構成を採用することで、ほぼエンドレスに生産設備のログデータをFTPサーバ11に保存することが可能となる。たとえば、PLC1において設備アラームが発生したタイミングでロギング制御部75がロギングを停止させてもよい。この場合に、FTPサーバ11には設備アラームが発生する直前のログデータがログファイル89として保存されているため、設備アラームの原因解析に有用であろう。
【0056】
PLC1は設備サイクル信号がONとなっている期間においてロギングを実行してもよい。つまり、トリガ受付部74は設備サイクル信号がONとなっているかどうかを判定する。設備サイクル信号は、生産設備がひとつのワークに対して加工や組み立て、検査等を実行している間だけONとなる信号である。そのため、ワークのシリアル番号とログファイル89とを関連付けて管理することで、ワークのトレーサビリティが達成される。
【0057】
<ロギング設定UI>
図12はロギング設定UI90を示している。UIはユーザインタフェースの略称である。プログラム作成支援装置2のCPU21が表示部7にロギング設定UI90を表示し、操作部8を通じて設定情報を受け付ける。あるいは、基本ユニット3のCPU31が表示部5にロギング設定UI90を表示し、操作部6を通じて設定情報を受け付ける。ここでは、後者のケースが詳細に説明される。
【0058】
ロギング設定UI90は、設定データ79を作成するために必要となる各種の設定情報を受け付けるための入力UI91と、ロギング指示UI92とを有している。入力UI91は、たとえば、次の情報の入力部を有している:
・FTPサーバのIPアドレス
・FTPサーバのポート番号
・ログファイル89が保存されるディレクトリのパス名
・デバイス値のサンプリング周期(データレコードの生成周期)
・ファイル名の一部となる共通文字列
・ファイル名の一部となるファイル番号の最大値
・ファイル名の一部となるファイル番号の最小値
・ファイルフォーマット
・一つのデータレコードのサイズ
・一つのファイルあたりのデータレコードの数
・タイムスタンプの有無
設定管理部77は操作部6を通じて入力された設定情報に基づき設定データ79を作成し、記憶装置32に格納する。
【0059】
ロギング指示UI92は、ロギングの開始や停止の指示を受け付けたり、現在実行されているロギングの状態を示したりするUIである。操作部6を通じてログ開始ボタン93が押し下げられたことを検知すると、トリガ発生部73はトリガ信号をトリガ受付部74に出力する。操作部6を通じてログ停止ボタン94が押し下げられたことを検知すると、トリガ発生部73は停止信号をトリガ受付部74またはロギング制御部75に出力する。ロギング制御部75は現在ロギング中のログファイル89に対して転送したデータレコードの数をロギング指示UI92に表示してもよい。ロギング制御部75は次のログファイル89のファイル名をロギング指示UI92に表示してもよい。ロギング制御部75はレコード生成部76がデバイス値のサンプリングに失敗したこと(サンプリングエラー)を検知すると、エラー数をインクリメントし、サンプリングエラー数として、ロギング指示UI92に表示してもよい。たとえば、サンプリング周期が短すぎると、サンプリングエラーが発生する。よって、ユーザはサンプリングエラー数が無くなるように、サンプリング周期を調整する。なお、ロギング指示UI92は、さらに、ロギング中か停止中かを示すインジケータや、FTPサーバ11との間で通信エラーが発生したことを示すインジケータなどを有してもよい。
【0060】
<通信ユニット>
上述の実施例では、基本ユニット3に内蔵された通信IF33が使用されているが、複数ある拡張ユニット4の一つが通信IF33の代わりに使用されてもよい。ネットワーク通信回路を有した拡張ユニット4は通信ユニットと呼ばれる。
【0061】
図13は拡張ユニット4の通信IF33を使用してFTP通信が実行されるケースを示している。基本ユニット3のCPU31と拡張ユニット4のCPU41とはユニット外部バス99を介して通信する。つまり、基本ユニット3のCPU31は拡張ユニット4のCPU41に対してFTPサーバ11との通信を実行するように、ユニット外部バス99を介して制御する。
【0062】
図14は拡張ユニット4の通信IF33を使用してFTP通信が実行される他のケースを示している。このケースではFTPクライアント部70が拡張ユニット4のCPU41によって実現されている。CPU31のロギング制御部75はユニット外部バス99を介してCPU41のFTPクライアント部70と通信し、FTP通信の開始や終了を指示する。また、CPU31のレコード生成部76はユニット外部バス99を介してCPU41のデータコネクション通信部72のバッファ66にデータレコードを書き込む。
【0063】
図15は拡張ユニット4の通信IF33を使用してFTP通信が実行されるさらに他のケースを示している。このケースではFTPクライアント部70だけでなく、トリガ発生部73、トリガ受付部74、ロギング制御部75およびレコード生成部76が拡張ユニット4のCPU41によって実現されている。CPU41のレコード生成部76はユニット外部バス99を介して基本ユニット3のCPU31と通信し、デバイス値を取得してデータレコードを生成する。
【0064】
このようにロギングに関与する機能は基本ユニット3と拡張ユニット4との間で適宜に分散して配置されてもよい。
【0065】
<ファンクションブロック>
上述のロギングを実行するためのプログラムはファンクションブロックにより実現されてもよい。ファンクションブロックはユーザプログラムから読み出されて実行されるプログラム部品である。
【0066】
図16はユーザプログラムであるラダープログラム300内に記述されたロギング用のファンクションブロック301を示している。ラダープログラム300とファンクションブロック301とはデバイスを通じて引数などのパラメータを送受信する。この例では、設定管理部77は操作部6を通じて受け付けた設定データ79を、デバイス管理部60を通じて複数のデバイス78に記憶させる。たとえば、FTPサーバ11のIPアドレスはデバイスDM10に格納される。ファイルフォーマットはデバイスDM20に格納される。ファイル名の共通文字列はデバイスDM30に格納される。ログファイル89が保存されるディレクトリのパス名はデバイスDM50に格納される。デバイス値のサンプリング周期(データレコードの生成周期)はデバイスDM9に格納される。ファイル名の一部となるファイル番号の最大値はデバイスDM7に格納される。ファイル名の一部となるファイル番号の最小値はデバイスDM6に格納される。一つのデータレコードのサイズはデバイスDM5に格納される。一つのファイルあたりのデータレコードの総数はデバイスDM8に格納される。タイムスタンプの有無はデバイスDM4に格納される。
【0067】
ファンクションブロック301は指定されたデバイス78から必要な設定情報を読み出してロギング処理を実行する。なお、CPU31はファンクションブロック301を実行することで、トリガ発生部73、トリガ受付部74、ロギング制御部75、レコード生成部76、設定管理部77、FTPクライアント部70を実現している。
【0068】
<フローチャート>
図17はPLC1のCPU31が実行するロギング処理を示すフローチャートである。
【0069】
S1でCPU31(トリガ発生部73、トリガ受付部74)はロギングの開始が要求されているかどうかを判定する。たとえば、設定データ79により定義された開始条件が満たされていたり、ログ開始ボタン93が押されたりすると、CPU31はロギングの開始が要求されたと判定する。
【0070】
S2でCPU31(ロギング制御部75、設定管理部77)は記憶装置32から設定データ79を取得する。
【0071】
S3でCPU31(ロギング制御部75、制御コネクション通信部71)は設定データ79にしたがってFTPサーバ11に対する制御コネクションを確立する。図9が示すように制御コネクション通信部71はSq1からSq6までを実行する。
【0072】
S4でCPU31(ロギング制御部75、制御コネクション通信部71)は転送準備を実行する。転送準備とは、FTPプロトコルにしたがってデータレコードを伝送するために必要となる処理である。転送準備は、少なくともファイルフォーマットの指定(TYPEコマンド)を含む。さらに、転送準備は、ディレクトリのパス名とファイル名の指定(STORコマンド)を含んでもよい。STORコマンドはログファイル89をオープンするために送信される。
【0073】
S5でCPU31(ロギング制御部75、制御コネクション通信部71、データコネクション通信部72)はデータコネクションを確立する。Sq9が示すように、制御コネクション通信部71はPORTコマンドまたはPASVコマンドを送信することでデータコネクションを確立してもよい。
【0074】
S6でCPU31(ロギング制御部75)は設定データ79に基づきサンプリングタイミングが到来したかどうかを判定する。たとえば、ロギング制御部75はタイマーやカウンタを用いてサンプリング周期を計測し、サンプリングタイミングを特定してもよい。サンプリングタイミングが到来すると、CPU31はS7に進む。
【0075】
S7でCPU31(ロギング制御部75、レコード生成部76)は設定データ79により指定されたデバイスからデバイス値をサンプリング(取得)する。
【0076】
S8でCPU31(レコード生成部76)は設定データ79にしたがってデバイス値を連結または変換してデータレコードを生成する。レコード生成部76はデータレコードをデータコネクション通信部72のバッファ66に書き込む。
【0077】
S9でCPU31(データコネクション通信部72)はバッファ66に書き込まれたデータレコードをFTPサーバ11に転送(送信)する。
【0078】
S10で(ロギング制御部75、レコード生成部76)は設定データ79に基づき転送終了条件が満たされたかどうかを判定する。たとえば、ロギング制御部75は、FTPサーバ11に転送されたデータレコードの数をカウントし、カウント値が所定値になると、終了条件が満たされたと判定する。ここで、所定値は、一つのファイルに格納されるデータレコードの総数である。終了条件が満たされていなければ、CPU31はS6に戻る。終了条件が満たされると、CPU31はS11に進む。
【0079】
S11で(ロギング制御部75、データコネクション通信部72)はログファイル89をクローズするためにデータコネクションを切断する。
【0080】
図18はFTPサーバ11のCPU51が実行するロギング処理を示すフローチャートである。
【0081】
S21でCPU51(制御コネクション通信部81)は接続要求を受信したかどうかを判定する。接続要求を受信すると、CPU51はS22に進む。
【0082】
S22でCPU51(制御コネクション通信部81)は制御コネクションを確立する。たとえば、制御コネクション通信部81は接続要求に対するレスポンスを送信したり、ユーザ認証を実行したりする。
【0083】
S23でCPU51(制御コネクション通信部81)は転送準備を実行する。たとえば、制御コネクション通信部81は受信したファイルフォーマットにしたがって、ログファイル89の拡張子(txtまたはbin)を決定したり、パス名とファイル名にしたがってログファイル89をオープンしたりする。
【0084】
S24でCPU51(制御コネクション通信部81)はデータコネクションを確立する。アクティブモードではPLC1から通知されたIPアドレスとポート番号に対して制御コネクション通信部81がデータコネクションを確立する。パッシブモードでは、制御コネクション通信部81が自己のIPアドレスとポート番号をPLC1に通知し、PLC1がこのIPアドレスとポート番号に対してデータコネクションを確立する。
【0085】
S25でCPU51(データコネクション通信部82)はPLC1からデータレコードを受信したかどうかを判定する。データレコードを受信すると、CPU51はS26に進む。
【0086】
S26でCPU51(データコネクション通信部82)はデータレコードをログファイル89に書き込む。
【0087】
S27でCPU51(データコネクション通信部82)はデータコネクションが切断されたかを判定する。データコネクションが切断されると、CPU51はS28に進む。データコネクションが切断されていなければ、CPU51はS25に戻る。
【0088】
S28でCPU51(データコネクション通信部82)はログファイル89をクローズする。
【0089】
<まとめ>
PLC1や基本ユニット3は一つ以上の制御機器が接続され、制御プログラムにしたがって当該一つ以上の制御機器を制御するプログラマブル・ロジック・コントローラの一例である。なお、拡張ユニット4やフィールドデバイス10a、10bは制御機器の一例である。通信IF33やFTPクライアント部70はファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介して外部サーバ装置と通信する通信手段の一例である。FTPサーバ11は外部サーバ装置の一例である。制御コネクション通信部71は制御コネクションを介して外部サーバ装置にファイル転送要求を送信する要求送信手段の一例である。STORコマンドはファイル転送要求の一例である。レコード生成部76やデバイス管理部60は予め監視対象として指定された制御機器の情報を取得する取得手段の一例である。デバイス値は制御機器の情報の一例である。レコード生成部76は取得手段により取得された制御機器の情報からデータレコードを生成する生成手段の一例である。データコネクション通信部72は生成手段により生成されたデータレコードが外部サーバ装置においてファイルに格納されるよう、データコネクションを介してデータレコードを外部サーバ装置に転送する転送手段の一例である。データコネクション通信部72は生成手段により生成されたデータレコードの転送の終了条件が満たされると、データコネクションを切断する切断手段の一例である。このように本実施例では、PLC1はPLC1に保持されているデータをファイル化せずにファイル転送プロトコルにしたがってサーバに転送する。そのため、PLC1は高速かつリアルタイムにデータをサーバに転送することが可能となる。
【0090】
デバイスメモリ34は制御機器の情報を記憶する記憶領域である複数のデバイス78を有するデバイスメモリの一例である。レコード生成部76やデバイス管理部60は予め設定されたサンプリング周期にしたがって、監視対象として指定されているデバイス78から制御機器の情報を読み出して生成手段に渡してもよい。つまり、レコード生成部76がサンプリング周期にしたがって、デバイス管理部60を通じてデバイス値を取得してもよい。また、ロギング制御部75がデバイス管理部60を制御し、サンプリング周期にしたがって所定のデバイス値を取得させてレコード生成部76に転送させてもよい。
【0091】
ラダープログラムは制御プログラムの一例である。また、ラダープログラムは繰り返し実行されるユーザプログラムの一例である。ラダープログラムに代えてC言語などの高級言語やモーションフローなどが採用されてもよい。図5に関連して説明されたように、デバイス78に記憶される情報は制御プログラムを実行することにより更新されてもよい。なお、デバイス値の更新周期は2msなどであり、通常、サンプリング周期よりも短い。
【0092】
FTPクライアント部70はロギング周期ごとに外部サーバ装置にログインして制御コネクションとデータコネクションとを確立する確立手段の一例である。なお、ロギング周期は、たとえば、一日である。このように、ロギング周期は、サンプリング周期(例:10ms)よりも長い。
【0093】
ロギングの終了条件は、たとえば、ファイルに格納されたデータレコードの数が所定数に到達したことであってもよい。所定数は、たとえば、1つのファイルに格納されるデータレコードの総数である。
【0094】
制御コネクション通信部71は、外部サーバ装置にファイルをオープンさせるために当該ファイルの名称を引数とするファイル転送要求コマンド(例:STOR)を、制御コネクションを介して送信するように構成されていてもよい。制御コネクション通信部71およびデータコネクション通信部72は、ファイル転送要求コマンドに対するレスポンスが通信手段により受信されると、データレコードの転送を開始するように構成されていてもよい。
【0095】
図16が示すように、制御プログラムはファンクションブロック301を有していてもよい。ファンクションブロック301は、制御機器の情報のサンプリングの開始と停止を示すデバイスと、データレコードに搭載される情報を記憶するデバイスのアドレスと、外部サーバ装置において一つのファイルに格納されることになるデータレコードの数とを管理していてもよい。図16によれば、サンプリングの開始はMR101により管理される。サンプリングの停止はMR103により管理される。データレコードに搭載される情報を記憶するデバイスのアドレスは、たとえば、ZF0はデータレコードにおいて先頭となるデバイス値を格納しているデバイスのアドレスを示している。このアドレスを起点として、デバイスDM5に格納されているワード数に相当する終了アドレスまでに位置する各デバイスからデバイス値が取得される。
【0096】
FTPクライアント部70および通信IF33は、予め設定されたファイルフォーマットを指定するコマンドを、制御コネクションを介して外部サーバ装置に送信する。また、レコード生成部76は、ファイルフォーマットにしたがうよう取得手段により取得された制御機器の情報を変換してデータレコードを生成してもよい。たとえば、ファイルフォーマットがバイナリであれば、レコード生成部76はテキスト(ASCII)-バイナリ変換を実行する。
【0097】
図10および図11が示すように、制御コネクション通信部71a、71bはそれぞれ第一データコネクションおよび第二データコネクションを確立してもよい。データコネクション通信部72aは第一データコネクションを介して第一ファイルに格納されることになるデータレコード転送する。データコネクション通信部72bは第二データコネクションを介して第二ファイルに格納されることになるデータレコード転送するように構成されていてもよい。これによりシームレスにデバイス値をFTPサーバ11に記録することが可能となる。
【0098】
ロギング制御部75や制御コネクション通信部71bは第一ファイルに格納されるデータレコードの転送が完了する前に、第二データコネクションを確立し、第二データコネクションを介したデータレコードの転送に備えてもよい。
【0099】
バッファ66はデータレコードを一時的に記憶するバッファの一例である。データコネクション通信部72はバッファ66からデータレコードを読み出して外部サーバ装置に転送してもよい。何らかの通信エラーが発生すると、サンプリング周期に同期してデータレコードを転送することが困難となる。また、先行するデータレコードを送信する前に後続のデータレコードが書き込まれると、先行するデータレコードが消失してしまう。そこで、バッファ66に一時的にデータレコードを保持することで、もれなくデータレコードをFTPサーバ11に送信することが可能となる。なお、レコード生成部76とバッファ66との間にさらに別のバッファが設けられてもよい。これにより、もれなくデータレコードをFTPサーバ11に送信することが可能となる。
【0100】
基本ユニット3はデータロガーの一例であるが、データロガーはPLC以外の情報処理装置に実装されてもよい。FTPクライアント部70はファイル転送プロトコルにしたがって制御コネクションおよびデータコネクションを介してFTPサーバ11と通信するFTPクライアントの一例である。ロギング制御部75や制御コネクション通信部71はFTPサーバ11にログファイル89を作成するロギングタイミングが到来すると、FTPクライアントとFTPサーバ11との間に制御コネクションを確立させ、制御コネクションを通じてさらにデータコネクションを確立させる確立手段の一例である。ロギング制御部75や制御コネクション通信部71は制御手段の一例である。ロギング制御部75や制御コネクション通信部71は制御コネクションおよびデータコネクションが確立されると、FTPクライアントに、制御コネクションを通じてファイルの名称を引数とする転送要求コマンドを送信させることでFTPサーバ11に当該ファイルをオープンさせる。ロギング制御部75やレコード生成部76はFTPサーバ11から転送準備が完了したことを示すレスポンスが受信されると、予め定められた周期にしたがって転送対象のデータを取得してデータレコードを生成する。ここで、転送対象のデータは、デバイス値など、ファイル化されていないデータである。ロギング制御部75やデータコネクション通信部72はFTPクライアントに当該データレコードを転送させ、データレコードの転送の終了条件が満たされると、FTPサーバ11にファイルをクローズさせるためにFTPクライアントにデータコネクションを切断させる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18