(57)【要約】  プログラマブルロジックコントローラのＣＰＵユニット（１００）において、実行部（１０３）は、設定された周期毎にプログラムを実行する。デバイスデータ記憶部（１０１）は、プログラムの入力値及び出力値を含むデバイス値を記憶する。履歴データ記憶部（１０２）は、デバイス値の更新履歴を記憶する。ループモニタ部（１０５）は、プログラム内にループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、実行部（１０３）がループ処理内の命令を実行することにより更新したデバイス値の更新履歴を履歴データ記憶部（１０２）に格納する。
2020065863.tif 000002
【特許請求の範囲】
【請求項１】
設定された周期毎にプログラムを実行する実行手段と、
前記プログラムの入力値及び出力値を含むデバイス値を記憶するデバイス記憶手段と、
前記デバイス値の更新履歴を記憶する履歴記憶手段と、
前記プログラム内にループ処理があるか否かを判別し、前記プログラム内に前記ループ処理がある場合に、前記実行手段が前記ループ処理内の命令を実行することにより更新した前記デバイス値の前記更新履歴を前記履歴記憶手段に格納する履歴管理手段と、
を備えるプログラマブルロジックコントローラ。
【請求項２】
前記履歴管理手段は、前記デバイス値の前記更新履歴として、前記ループ処理の繰り返し回数分の更新された前記デバイス値を前記履歴記憶手段に格納する、
請求項１に記載のプログラマブルロジックコントローラ。
【請求項３】
前記履歴管理手段は、前記ループ処理の前記繰り返し回数に応じて、前記デバイス値の前記更新履歴を記憶するのに必要な記憶容量を算出し、算出した前記記憶容量を前記履歴記憶手段に確保する、
請求項２に記載のプログラマブルロジックコントローラ。
【請求項４】
前記履歴管理手段は、外部機器から指定された前記デバイス値の前記更新履歴を前記履歴記憶手段に格納する、
請求項１から３のいずれか１項に記載のプログラマブルロジックコントローラ。
【請求項５】
前記履歴管理手段は、前記外部機器から前記デバイス値の前記更新履歴を要求されると、次に開始される周期で、前記実行手段が前記プログラムの前記ループ処理内の命令を繰り返し実行することにより更新された前記デバイス値の履歴を、前記デバイス値の前記更新履歴として、前記履歴記憶手段に格納する、
請求項４に記載のプログラマブルロジックコントローラ。
【請求項６】
前記履歴記憶手段に格納された前記デバイス値の前記更新履歴を前記外部機器に送信する要求処理手段をさらに備える、
請求項４又は５に記載のプログラマブルロジックコントローラ。
【請求項７】
前記要求処理手段は、前記ループ処理が繰り返される回数に応じて、前記デバイス値の前記更新履歴を記憶するのに必要な記憶容量を算出し、算出した前記記憶容量を前記外部機器に送信する、
請求項６に記載のプログラマブルロジックコントローラ。
【請求項８】
設定された周期毎にプログラムを実行するプログラマブルロジックコントローラが、
前記プログラム内にループ処理があるか否かを判別するステップと、
前記プログラム内に前記ループ処理がある場合に、前記プログラムの入力値及び出力値であって、前記ループ処理内の命令の実行により更新されたデバイス値の更新履歴を記憶手段に格納するステップと、
を実行する方法。
【請求項９】
設定された周期毎にプログラムを実行するプログラマブルロジックコントローラに、
前記プログラム内にループ処理があるか否かを判別させ、
前記プログラム内に前記ループ処理がある場合に、前記プログラムの入力値及び出力値であって、前記ループ処理内の命令の実行により更新されたデバイス値の更新履歴を記憶手段に記憶させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラ、方法、及びプログラムに関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラは、制御対象の機器を制御するため、設定された周期であるスキャンタイム毎にプログラムの各命令を実行して、検出器から供給された入力信号が示す値を使用した演算を行い、演算結果を示す値に基づく出力信号を制御対象の機器に供給する。プログラマブルロジックコントローラにおいて、検出器から供給された入力信号を示す値と被制御機器に供給される出力信号を示す値とは、デバイスメモリと呼ばれるメモリ上の領域に格納される。【０００３】
ユーザは、例えば、プログラマブルロジックコントローラのプログラムの動作が正常であるか否かを確認するために、プログラムの開発ツール、プログラマブル表示器等の外部機器を介してデバイスメモリのデータを監視する。特許文献１には、プログラマブル表示器が、スキャンタイム毎にデバイス値をデバイスメモリから読み出し、読み出したデバイス値をディスプレイに表示することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−８４８１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載されているように、従来のプログラマブルロジックコントローラは、開発ツール、プログラマブル表示器等の外部機器から、デバイスメモリを読み出すことを指示するモニタ要求を受け付けると、Ｉ／Ｏ（Input/Output：入出力）リフレッシュのタイミングで、モニタ要求で指定されたデバイスメモリの値を外部機器に送信する。Ｉ／Ｏリフレッシュとは、プログラマブルロジックコントローラと検出器及び制御対象の機器との間でデバイスメモリのデータを一括交換することをいう。Ｉ／Ｏリフレッシュは、スキャンタイムの最後に、即ちプログラムの命令が一通り実行された後に実行される。【０００６】
ここで、デバイスメモリが記憶するデータは、プログラムの実行中に書き換えられることがある。例えば、特定の条件下において特定の処理が繰り返される処理であるループ処理において同一のデバイスメモリの値が逐次更新されることがある。【０００７】
プログラムのデバッグの際には、ループ処理において更新されるデバイスメモリの値を確認することが必要になる場合がある。従来のプログラマブルロジックコントローラは、スキャンタイムの最後にモニタ要求に対する応答を返していたため、ユーザは、ループ処理において逐次更新されるデバイスメモリの値を確認することができなかった。このため、ループ処理において逐次更新されるデバイスメモリの値を確認するために、ユーザは、デバイスメモリの値をデバッグ用のログファイルに随時出力するためのデバッグ用のコードをプログラムに追加し、プログラムの実行後にデバッグ用のログファイルの内容を確認していた。従来は、ユーザは、プログラムのデバッグのため、このような作業を行うことが必要であった。その結果、プログラムのデバッグに係る工数が増加する傾向にあった。【０００８】
本発明は、上記実情に鑑みてなされたものであり、ユーザが煩雑な作業を行うことなく、ループ処理において逐次書き換えられるデバイス値の更新履歴を取得することを可能とし、プログラムのデバッグに係る工数を削減することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明のプログラマブルロジックコントローラにおいて、実行手段は、設定された周期毎にプログラムを実行する。デバイス記憶手段は、プログラムの入力値及び出力値を含むデバイス値を記憶する。履歴記憶手段は、デバイス値の更新履歴を記憶する。履歴管理手段は、プログラム内にループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、前記実行手段がループ処理内の命令を実行することにより更新したデバイス値の更新履歴を履歴記憶手段に格納する。
【発明の効果】
【００１０】
本発明のプログラマブルロジックコントローラの履歴管理手段は、プログラムにループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、実行手段がループ処理内の命令を実行することにより更新したデバイス値の更新履歴を履歴記憶手段に格納する。このような構成を備えることで、ユーザは煩雑な作業を行うことなく、ループ処理において逐次書き換えられるデバイス値の更新履歴を取得することができ、プログラムのデバッグに係る工数を削減することができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態に係るプログラマブルロジックコントローラ及びエンジニアリングツールのハードウェア構成を示すブロック図
【図２】実施の形態に係るＣＰＵユニット及びエンジニアリングツールの機能ブロック図
【図３】実施の形態に係るユーザプログラムの一例を示す図
【図４Ａ】実施の形態に係るエンジニアリングツールのデバイスモニタの入力画面の一例を示す図
【図４Ｂ】実施の形態に係るエンジニアリングツールのデバイスモニタの実行結果画面の一例を示す図
【図５Ａ】実施の形態に係るエンジニアリングツールのデバイスモニタの入力画面の他の例を示す図
【図５Ｂ】実施の形態に係るエンジニアリングツールのデバイスモニタの実行結果画面の他の例を示す図
【図６Ａ】実施の形態に係るモニタ応答処理のフローチャート
【図６Ｂ】実施の形態に係るモニタ応答処理のフローチャート
【図７】変形例に係るデータ件数の通知画面の一例を示す図
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態に係るプログラマブルロジックコントローラ１について、図面を参照しつつ詳細に説明する。
【００１３】
（実施の形態）
図１に示す、プログラマブルロジックコントローラ１は、生産システム、制御システム等において稼動するセンサ、スイッチ等を含む検出器９０１と、アクチュエータ、電磁弁、表示灯等を含む被制御機器９０２とを制御する。プログラマブルロジックコントローラ１は、プログラマブルロジックコントローラ１全体を制御するＣＰＵ（Central Processing Unit）ユニット１００と、検出器９０１から供給された入力信号をＣＰＵユニット１００に入力する入力ユニット２００と、ＣＰＵユニット１００から供給された出力信号を被制御機器９０２に出力する出力ユニット３００と、各ユニットを装着するためのベースユニット４００とを含む。
【００１４】
ＣＰＵユニット１００は、入力ユニット２００から供給された入力信号に従って、後述するユーザプログラム１１１の命令を実行し、出力信号を出力ユニット３００に供給する。例えば、ＣＰＵユニット１００は、検出器９０１のセンサがオンしていることを示す入力信号が入力されると、ユーザプログラム１１１の命令を実行し、被制御機器９０２のアクチュエータをオンすることを示す出力信号を出力する。ＣＰＵユニット１００は、設定された周期でユーザプログラム１１１の命令を順次開始し、最後の命令であるＥＮＤ命令を実行した後、ユーザプログラム１１１の実行を終了する。ＣＰＵユニット１００は、次の周期に再びユーザプログラム１１１の実行を開始する。１つの周期において、ユーザプログラム１１１の最初の命令から最後の命令までを実行することをスキャンするという場合がある。この設定された周期をスキャンタイムという。
【００１５】
また、ＣＰＵユニット１００は、後述のエンジニアリングツール５００からデバイス値のモニタ要求を受信すると、モニタ要求で指定されたデバイス値をエンジニアリングツール５００に送信する。
【００１６】
デバイス値は、デバイスメモリ１１３と呼ばれるＣＰＵユニット１００のメモリ１１０に確保された領域に格納されている値である。デバイス値は、入力ユニット２００から供給された入力信号を示す値であって、ユーザプログラム１１１の演算の入力値と、出力ユニット３００に供給される出力信号を示す値であって、ユーザプログラム１１１の演算の出力値とを含む。
【００１７】
モニタ要求とは、デバイスメモリ１１３のデバイス値の読み出しを要求するため、エンジニアリングツール５００がＣＰＵユニット１００に送信するコマンドのことをいう。また、ＣＰＵユニット１００がモニタ要求に応答してエンジニアリングツール５００に送信するレスポンスをモニタ応答という。ＣＰＵユニット１００は、モニタ応答に、指定されたデバイス値をセットして、エンジニアリングツール５００に送信する。
【００１８】
ＣＰＵユニット１００は、モニタ応答として、１回のスキャンが終わった時点のデバイス値をエンジニアリングツール５００に送信する機能を備える。なお、この機能は、ＣＰＵユニット１００が従来備えている機能である。
【００１９】
さらに、ＣＰＵユニット１００は、モニタ応答として、ループ処理により逐次更新されたデバイス値の更新履歴をエンジニアリングツール５００に送信する機能を備える。この機能は、実施の形態に係るＣＰＵユニット１００において特徴的な機能である。ループ処理とは、特定の条件下において特定の処理を繰り返す処理のことをいう。なお、ループ処理のことを単にループという場合もある。モニタ要求の詳細については後述する。
【００２０】
入力ユニット２００には、検出器９０１が接続されている。入力ユニット２００は、検出器９０１から供給されたオン／オフを示す入力信号を決められた信号レベルに変換し、変換した入力信号をＣＰＵユニット１００に入力する。出力ユニット３００には、被制御機器９０２が接続されている。出力ユニット３００は、ＣＰＵユニット１００から供給されたオン／オフを示す出力信号を決められた信号レベルに変換し、変換した出力信号を被制御機器９０２に出力する。
【００２１】
ベースユニット４００には、ＣＰＵユニット１００と入力ユニット２００と出力ユニット３００とが装着される。ＣＰＵユニット１００と入力ユニット２００と出力ユニット３００とは、ベースユニット４００を介して不図示の電源ユニットに接続され、電源ユニットから供給される電力によって動作する。また、ＣＰＵユニット１００と入力ユニット２００と出力ユニット３００とは、共有バス４１０を介して相互に接続され、共有バス４１０を介して通信を行う。
【００２２】
また、プログラマブルロジックコントローラ１のＣＰＵユニット１００には、開発ツールであるエンジニアリングツール５００を接続することが可能である。エンジニアリングツール５００の構成については後述する。
【００２３】
図１に示すＣＰＵユニット１００はハードウェア構成として、各種のプログラム及びデータを記憶するメモリ１１０と、入力ユニット２００及び出力ユニット３００と通信を行う入出力インタフェース１２０と、エンジニアリングツール５００と通信を行うツール用インタフェース１３０と、ＣＰＵユニット１００全体を制御する演算装置１４０とを有する。メモリ１１０と入出力インタフェース１２０とツール用インタフェース１３０とはバス１９０を介して演算装置１４０に接続されており、演算装置１４０と通信する。
【００２４】
メモリ１１０は、揮発性メモリと不揮発性メモリとを含み、各種プログラムと、プログラムの実行時に使用されるデータとを記憶する。メモリ１１０には、スキャンタイム毎に実行されるユーザプログラム１１１と、エンジニアリングツール５００から受信したモニタ要求に応答するためのモニタ応答プログラム１１２とが格納される。ユーザプログラム１１１は本発明のプログラムの一例である。
【００２５】
メモリ１１０は、さらにデバイスメモリ１１３を含む。デバイスメモリ１１３は、ユーザプログラム１１１の入力値及び出力値を格納するメモリ上の領域である。ユーザプログラム１１１の入力値は検出器９０１からＣＰＵユニット１００に供給された入力信号を示す値であり、ユーザプログラム１１１の出力値は被制御機器９０２に供給される出力信号を示す値である。デバイスメモリ１１３に格納される入力値及び出力値をデバイス値ということがある。デバイスメモリを単にデバイスと呼ぶこともある。
【００２６】
デバイス値は、データの種類に応じた領域に格納される。例えば、入力信号の値が格納されている領域を「Ｘ」、出力信号の値が格納されている領域を「Ｙ」、その他の値が格納されている領域を「Ｄ」と定義する。「Ｘ」、「Ｙ」、「Ｄ」のそれぞれの領域には複数のデバイス値が格納されており、各デバイス値には、当該領域において何番目のデータであるかを示す番号が割り当てられている。例えば、「Ｘ」の領域の先頭の番号を「１」とした場合、「Ｘ１００」に格納されたデータは、「Ｘ」の領域における１００番目のデータである。
【００２７】
ユーザプログラム１１１は、プログラマブルロジックコントローラ１に被制御機器９０２を制御させるため、ユーザが作成したプログラムである。ユーザプログラム１１１は、演算装置１４０により実行される。例えば、演算装置１４０は、ユーザプログラム１１１を実行して、検出器９０１から供給された入力信号が示す値を使用した演算を行い、演算結果を示す値に基づく出力信号を被制御機器９０２に供給する。
【００２８】
モニタ応答プログラム１１２は、ＣＰＵユニット１００がエンジニアリングツール５００からモニタ要求を受信した場合に、エンジニアリングツール５００から指定されたデバイス値を含めたモニタ応答をエンジニアリングツール５００に送信するためのプログラムである。
【００２９】
具体的には、モニタ応答プログラム１１２は、ＣＰＵユニット１００が、エンジニアリングツール５００から１回のスキャンが終わった時点のデバイス値が要求された場合には、指定されたデバイス値をエンジニアリングツール５００に送信するためのプログラムである。さらに、モニタ応答プログラム１１２は、ＣＰＵユニット１００が、エンジニアリングツール５００からループ処理によって更新されたデバイス値の更新履歴が要求された場合には、ユーザプログラム１１１に含まれているループ処理を抽出し、ループ処理内で更新されたデバイス値の更新履歴をエンジニアリングツール５００に送信するためのプログラムである。モニタ応答プログラム１１２は演算装置１４０により実行される。
【００３０】
入出力インタフェース１２０は、ＣＰＵユニット１００が入力ユニット２００及び出力ユニット３００と通信するための通信インタフェースである。入出力インタフェース１２０は、演算装置１４０から供給されたデータを電気信号に変換し、変換した信号を共有バス４１０を介して出力ユニット３００に送信する。また、入出力インタフェース１２０は、入力ユニット２００から受信した電気信号をデータに復元して演算装置１４０に出力する。
【００３１】
ツール用インタフェース１３０は、ＣＰＵユニット１００が後述のエンジニアリングツール５００と通信するための通信インタフェースである。ツール用インタフェース１３０は、演算装置１４０から供給されたデータを電気信号に変換し、変換した信号を通信ケーブル９０５を介してエンジニアリングツール５００に送信する。また、ツール用インタフェース１３０は、エンジニアリングツール５００から受信した電気信号をデータに復元して演算装置１４０に出力する。
【００３２】
演算装置１４０は、ＭＰＵ（Micro Processing Unit）を有し、メモリ１１０に記憶される各種プログラムを実行して、ＣＰＵユニット１００の各種機能を実現する。例えば、演算装置１４０は、スキャンタイム毎にユーザプログラム１１１を実行する。また、演算装置１４０は、モニタ応答プログラム１１２を実行して、エンジニアリングツール５００にモニタ応答を送信する。
【００３３】
エンジニアリングツール５００は、パーソナルコンピュータに専用のアプリケーションをインストールした開発ツールである。エンジニアリングツール５００は、ＣＰＵユニット１００のデバイス値をモニタする機能を有している。よって、ユーザは、エンジニアリングツール５００を使用してＣＰＵユニット１００のデバイスメモリ１１３をモニタすることができる。エンジニアリングツール５００は、さらに、プログラムの作成機能を有していてもよい。エンジニアリングツール５００は、本発明の外部機器の一例である。
【００３４】
エンジニアリングツール５００は、ハードウェア構成として、プログラム及びデータを記憶するメモリ５１０と、ユーザの入力操作を検出する入力装置５２０と、画像を出力する出力装置５３０と、ＣＰＵユニット１００と通信する通信インタフェース５４０と、エンジニアリングツール５００全体を制御する演算装置５５０とを有する。エンジニアリングツール５００の各部はバス５９０により接続されている。
【００３５】
メモリ５１０は、揮発性メモリと不揮発性メモリとを含み、各種プログラムと、プログラムの実行時に使用されるデータとを記憶する。実施の形態においては、メモリ５１０は、ＣＰＵユニット１００のデバイス値をモニタするためのモニタ用プログラム５１１を記憶する。
【００３６】
また、メモリ５１０は、デバイスの種類毎のデータ長が定義されたデバイス定義情報５１２を記憶する。デバイス定義情報５１２は、デバイスメモリのそれぞれの領域について、デバイスの種類と１つのデータのデータ長とが定義された情報である。例えば、「Ｘ」、「Ｙ」のデバイスについて、デバイスの種類が「ビットデバイス」であり、デバイス値のデータ長が１ビットであると定義されている。「Ｄ」のデバイスについて、デバイスの種類が「ワードデバイス」であり、デバイス値のデータ長が２バイト（１６ビット）であると定義されている。
【００３７】
入力装置５２０は、キーボード、マウス等の入力装置を含み、ユーザの入力操作を検出し、検出したユーザの入力操作を示す信号を演算装置５５０に供給する。出力装置５３０は、ディスプレイを含み、演算装置５５０から供給された信号に基づいた画像をディスプレイに表示する。通信インタフェース５４０は、通信ケーブル９０５を介してＣＰＵユニット１００のツール用インタフェース１３０と通信する。通信インタフェース５４０は、演算装置５５０から供給されたデータを電気信号に変換し、変換した信号を通信ケーブル９０５を介してＣＰＵユニット１００に送信する。また、通信インタフェース５４０は、ＣＰＵユニット１００から受信した電気信号をデータに復元して演算装置５５０に出力する。
【００３８】
演算装置５５０は、ＣＰＵを有し、メモリ１１０に記憶された各種プログラムを実行して、エンジニアリングツール５００の各種機能を実現する。実施の形態においては、演算装置５５０は、モニタ用プログラム５１１を実行して、ＣＰＵユニット１００にデバイスメモリ１１３のモニタ要求を送信し、ＣＰＵユニット１００から受信したモニタ応答の内容を出力装置５３０のディスプレイに表示する。
【００３９】
続いて図２を参照しながら、ＣＰＵユニット１００の機能的な構成を説明する。ＣＰＵユニット１００は、機能的には、デバイス値を記憶するデバイスデータ記憶部１０１と、ループ処理において更新されるデバイス値を記憶する履歴データ記憶部１０２と、ユーザプログラム１１１を実行する実行部１０３と、デバイス値のモニタに係る処理を行うコマンド処理部１０４と、指定されたデバイス値の値をループ処理において順次取得するループモニタ部１０５と、エンジニアリングツール５００とコマンドの送受信を行うコマンド送受信部１０６とを備える。
【００４０】
図２に示すデバイスデータ記憶部１０１は、今回のスキャンタイムにおけるユーザプログラム１１１の入力値及び出力値、即ちデバイス値を記憶する。Ｉ／Ｏリフレッシュにより、デバイスデータ記憶部１０１には、入力ユニット２００から供給されたユーザプログラム１１１の入力値が書き込まれる。さらに、ユーザプログラム１１１の実行により、デバイスデータ記憶部１０１には、ユーザプログラム１１１の実行により出力された出力値が書き込まれる。デバイスデータ記憶部１０１の機能は、図１に示すメモリ１１０のデバイスメモリ１１３により実現される。図２に示すデバイスデータ記憶部１０１は本発明のデバイス記憶手段の一例である。
【００４１】
履歴データ記憶部１０２は、ループ処理において更新されるデバイス値の履歴を記憶する。履歴データ記憶部１０２には、後述するループモニタ部１０５によりデバイス値が書き込まれる。履歴データ記憶部１０２の機能は、図１に示すメモリ１１０により実現される。図２に示す履歴データ記憶部１０２は本発明の履歴記憶手段の一例である。
【００４２】
実行部１０３は、スキャンタイム毎にユーザプログラム１１１を実行する。具体的には実行部１０３は、デバイスデータ記憶部１０１に格納されている入力信号を示す値に応じて、ユーザプログラム１１１の各命令を実行し、演算結果をデバイスデータ記憶部１０１に格納する。実行部１０３はユーザプログラム１１１の最後の命令であるＥＮＤ命令を実行した後、ＥＮＤ命令を実行したことをコマンド処理部１０４に通知する。実行部１０３の機能は、図１の演算装置１４０により実現される。図２に示す実行部１０３は本発明の実行手段の一例である。
【００４３】
コマンド処理部１０４は、実行部１０３からユーザプログラム１１１の最後の命令であるＥＮＤ命令を実行した旨の通知を受けると、エンジニアリングツール５００からモニタ要求を受信している場合には、モニタ応答をエンジニアリングツール５００に返すための処理を行う。コマンド処理部１０４の機能は、図１の演算装置１４０により実現される。図２に示すコマンド処理部１０４は本発明の要求処理手段の一例である。
【００４４】
実施の形態においては、ＣＰＵユニット１００がエンジニアリングツール５００から受信するモニタ要求には、（１）スキャン後のデバイス値を要求するモニタ要求と、（２）ループ処理において更新されたデバイス値の更新履歴を要求するモニタ要求とが含まれる。
【００４５】
（１）スキャン後のデバイス値を要求するモニタ要求
スキャン後のデバイス値を要求するモニタ要求は、実行部１０３がユーザプログラム１１１のＥＮＤ命令を実行したときに、デバイスデータ記憶部１０１に格納されているデバイス値を要求するものである。以下、スキャン後のデバイス値を要求するモニタ要求をノーマルモニタ要求と称する。ノーマルモニタ要求には、デバイスの領域を特定する値と、当該領域において読み出す範囲を示す開始番号及び終了番号とが含まれている。
【００４６】
コマンド処理部１０４は、ユーザプログラム１１１の１スキャンの実行が終わった時点で、エンジニアリングツール５００からノーマルモニタ要求を受信している場合、ノーマルモニタ要求に対するモニタ応答として、ノーマルモニタ要求で指定された順序でデバイス値をデバイスデータ記憶部１０１から読み出し、読み出したデバイス値をコマンド送受信部１０６に出力する。
【００４７】
例えば、ノーマルモニタ要求で、デバイス「Ｘ」の開始番号「１００」から終了番号「１５０」までのデバイス値と、デバイス「Ｄ」の開始番号「５０」から終了番号「１００」までのデバイス値とが要求されたとする。この場合、コマンド処理部１０４は、「Ｘ１００」から「Ｘ１５０」のデバイス値と「Ｄ５０」から「Ｄ１００」のデバイス値とをこの順序で並べた状態のデータをコマンド送受信部１０６に出力する。
【００４８】
（２）ループ処理において更新されたデバイス値の更新履歴を要求するモニタ要求
ループ処理において更新されたデバイス値の更新履歴を要求するモニタ要求は、実行部１０３がユーザプログラム１１１のループ処理内で繰り返し更新されたデバイスデータ記憶部１０１のデバイス値の更新履歴を要求するものである。以下、ループ処理において更新されたデバイス値の更新履歴を要求するモニタ要求をループモニタ要求と称する。ループモニタ要求には、デバイスの領域を特定する値と、当該領域において読み出す範囲を示す開始番号及び終了番号と、デバイス値のデータ長を示す値とが含まれている。
【００４９】
まず、図３のユーザプログラムの一例を参照して、ループ処理によりデバイス値を更新する例を示す。ループ処理では指定された回数だけ決められた処理を繰り返す。図３に示す例では、「ＦＯＲ  ６０…ＮＥＸＴ」はループを６０回繰り返す命令であることを示す。「ＦＯＲ  ６０…ＮＥＸＴ」のループ内の「ＭＯＶ  Ｘ１０１  Ｄ１」は、「Ｘ１０１」の値を「Ｄ１」に格納する命令であることを示す。これらの命令により、実行部１０３は、Ｘ１０１の値をＤ１に格納する処理を６０回繰り返す。
【００５０】
例えば、ループモニタ要求により、Ｄ１のデバイス値の履歴を読み出すことが要求されたとする。この場合、後述のループモニタ部１０５が、６０回繰り返されるループにおいてＤ１に格納された値の履歴を履歴データ記憶部１０２に格納する。コマンド処理部１０４は、履歴データ記憶部１０２に格納されたデータをエンジニアリングツール５００に返すため、当該データをコマンド送受信部１０６に出力する。
【００５１】
図３に示す「ＦＯＲ  ４０…ＮＥＸＴ」はループを４０回繰り返すことを示す。「ＦＯＲ  ４０…ＮＥＸＴ」のループ内の「ＭＯＶ  Ｘ１０２  Ｄ２」は、「Ｘ１０２」の値を「Ｄ２」に格納する命令であることを示す。これらの命令により、実行部１０３は、Ｘ１０２の値をＤ２に格納する処理を４０回繰り返す。
【００５２】
例えば、モニタ要求により、Ｄ２のデバイス値の履歴を読み出すことが要求されたとする。この場合、ループモニタ部１０５が、４０回繰り返されるループにおいてＤ２に格納された値の履歴を履歴データ記憶部１０２に格納する。コマンド処理部１０４は、履歴データ記憶部１０２に格納されたデータをエンジニアリングツール５００に返すため、当該データをコマンド送受信部１０６に出力する。
【００５３】
また、「ＦＯＲ  ４０…ＮＥＸＴ」のループ内の「ＢＲＥＡＫ」は、ループを中断する命令であることを示す。ここで、実行部１０３は入力値「Ｘ１５０」によって接点がオンした場合に「ＢＲＥＡＫ」を実行する。「ＢＲＥＡＫ」が実行されることにより、「ＦＯＲ  ４０…ＮＥＸＴ」のループが中断される。この結果、実行部１０３は、「ＦＯＲ  ４０…ＮＥＸＴ」のループを抜けて、ループの次の命令を実行する。ループが中断された場合、ループモニタ部１０５は、ループが中断されるまでのＤ２のデバイス値の履歴を履歴データ記憶部１０２に格納する。コマンド処理部１０４は、履歴データ記憶部１０２に格納されたデータをエンジニアリングツール５００に返す。なお、入力値「Ｘ１５０」によって接点がオンしない場合には、「ＢＲＥＡＫ」が実行されない。
【００５４】
具体的には、図２に示すコマンド処理部１０４は、エンジニアリングツール５００からループモニタ要求を受信した場合、次のスキャンタイムにおけるユーザプログラム１１１の実行が開始される前に、デバイス値の更新履歴が要求されている旨と、デバイスの領域を特定する値と、当該領域において読み出す範囲を示す開始番号及び終了番号と、デバイス値のデータ長を示す値とをループモニタ部１０５に出力する。従って、次のスキャンタイムで、後述のループモニタ部１０５は、指定されたデバイス値の更新履歴を履歴データ記憶部１０２に格納する。例えば、指定されたデバイス値が、５回繰り返されるループ内で更新された場合、ループモニタ部１０５は、更新後の５つの値を履歴データ記憶部１０２に格納する。
【００５５】
スキャンが終了すると、コマンド処理部１０４は、履歴データ記憶部１０２に格納されている読み出したデバイス毎のデータ件数と、履歴データ記憶部１０２から読み出したデバイス値の更新履歴のデータとをコマンド送受信部１０６を介してエンジニアリングツール５００に送信する。その後、コマンド処理部１０４は、履歴データ記憶部１０２に格納されたデバイス値の履歴を削除する。
【００５６】
ループモニタ部１０５は、コマンド処理部１０４からデバイス値の更新履歴が要求されている旨とループモニタ要求で指定されたデバイス値を特定する情報とが供給されると、まず、ユーザプログラム１１１の次の周期における実行が開始される前にデバイス値を格納するのに必要な領域を履歴データ記憶部１０２に確保する。具体的には、ループモニタ部１０５は、ユーザプログラム１１１の構文解析を行い、指定されたデバイス値が更新されるループを抽出し、指定されたデバイス値及びデータ長とから、ループを１回実行する場合に指定されたデバイス値を格納するのに必要なメモリの記憶容量を算出する。
【００５７】
例えば、ループモニタ要求でデバイスメモリの「Ｄ１」、「Ｄ２」、「Ｄ３」のデバイス値の履歴が要求されているとする。これらのデバイス値のデータ長が２バイトであるとする。ユーザプログラム１１１内のあるループ内で、デバイス「Ｄ１」、「Ｄ２」の値がそれぞれ１回ずつ更新される場合は、そのループを１回実行する場合に必要なメモリの記憶容量は４バイトである。さらに、ユーザプログラム１１１内の他のループ内でデバイス「Ｄ２」、「Ｄ３」の値がそれぞれ１回更新されるとする。この場合、このループを１回実行する場合にデバイス値を記憶するのに必要なメモリの記憶容量は４バイトである。この場合、ループモニタ部１０５は、指定されたデバイスが更新されるループを特定する情報と、算出したループ毎のメモリの記憶容量とをメモリ１１０に記憶しておく必要がある。ループを特定する情報は、例えば、ユーザプログラム１１１内の各命令の実行順を示すステップ番号である。
【００５８】
さらに、ループモニタ部１０５は、実行部１０３がユーザプログラム１１１の各命令を実行している最中であって、ループ処理が開始されるタイミングで、ユーザプログラム１１１でループを繰り返すよう指定された回数であるループの繰り返し回数を判別する。ループ処理が開始されるタイミングとは、例えば、実行部１０３がループ処理を示すＦＯＲ命令を１回目に実行するタイミングである。ループモニタ部１０５は、判別したループの繰り返し回数と、予め算出しておいたループを１回実行する場合に必要なメモリの記憶容量とから、ループを実行する場合にデバイス値の履歴を記憶するのに必要なメモリの記憶容量を算出する。その後、ループモニタ部１０５は、算出したメモリの記憶容量から必要な領域を履歴データ記憶部１０２に確保する。
【００５９】
このように、ループを開始するタイミングで繰り返し回数を判別するのは、ループの開始のタイミングにならないと、実際の繰り返し回数を判別することができないからである。これは、次のような理由による。ユーザプログラム１１１のループは、入力値によって実行されない場合もあるからである。ユーザプログラム１１１は、リレーシーケンスの回路を実現するものであり、各命令は、入力値によって、接点がオンしたときに実行される。一方、入力値に応じて接点がオフしたときには命令は実行されない。このため、ループ処理自体が実行されないこともあり得るし、ループ処理内の特定の命令が実行されないこともあり得る。また、繰り返し回数が固定値ではなく、ユーザプログラム１１１の命令の実行によって動的に決められる回数である場合もあるからである。
【００６０】
ループモニタ部１０５は、ループが繰り返されるたび、ループモニタ要求で指定されたデバイス値の更新された値を履歴データ記憶部１０２に格納する。具体的には、ループモニタ部１０５は、実行部１０３により図３に示すＮＥＸＴ命令が実行されるたびに、ループモニタ要求で指定されたデバイス値を履歴データ記憶部１０２に格納する。さらに、ループモニタ部１０５は、ループが繰り返された回数をカウントする。
【００６１】
また、実行部１０３が指定されたデバイス値を更新するループ内で、入力値によりループ中断命令を実行し、ループを抜ける場合がある。ループ中断命令が実行されると、それ以降指定されたデバイス値の更新は繰り返されない。例えば、図３に示す例では、「ＦＯＲ  ４０…ＮＥＸＴ」のループ内において、入力値「Ｘ１５０」がオンした場合に、「ＢＲＥＡＫ」が実行される。この場合、実行部１０３は、「ＦＯＲ  ４０…ＮＥＸＴ」のループを抜けて、ループの次の処理を実行する。
【００６２】
図２に示すループモニタ部１０５は、実行部１０３がループ中断命令を実行した場合には、ループ開始前に判別した繰り返し回数を修正し、修正した繰り返し回数をデータ件数として履歴データ記憶部１０２に格納する。例えば、ループモニタ部１０５が、ループ開始前に繰り返し回数が３０回であると判別した場合に、実行部１０３が、ループを１５回繰り返した後に、ループ中断命令を実行したとする。この場合、ループモニタ部１０５は、繰り返し回数を３０回から、１５回に修正する。ループモニタ部１０５が繰り返し回数を修正するのは、次のような理由による。前述のように、コマンド処理部１０４は、履歴データ記憶部１０２に格納されたデバイス値とともに、データ件数をエンジニアリングツール５００に送信するので、正確なデータ件数が履歴データ記憶部１０２に格納されている必要がある。ループが中断されなかった場合には、ループモニタ部１０５は、指定されたデバイス毎に、ループ開始前に判別した繰り返し回数をデータ件数として履歴データ記憶部１０２に格納する。ループモニタ部１０５の機能は、図１に示す演算装置１４０により実現される。ループモニタ部１０５は本発明の履歴管理手段の一例である。
【００６３】
また、ループモニタ部１０５に、コマンド処理部１０４からデバイス値の更新履歴が要求されている旨とループモニタ要求で指定されたデバイス値を特定する情報とが供給されたにもかかわらず、ユーザプログラム１１１内にループ処理が存在していない場合もある。この場合、ループが繰り返されないため、ループモニタ部１０５は、データ件数として０件を履歴データ記憶部１０２に格納する。あるいは、ユーザプログラム１１１内にループ処理が存在していても、入力値によって接点がオンしないことにより、実行部１０３がループ処理を実行しない場合もある。この場合も、ループモニタ部１０５は、データ件数として０件を履歴データ記憶部１０２に格納する。
【００６４】
図２に示すコマンド送受信部１０６は、エンジニアリングツール５００からノーマルモニタ要求又はループモニタ要求を受け付け、受け付けたノーマルモニタ要求またはループモニタ要求をコマンド処理部１０４に出力する。また、コマンド送受信部１０６は、コマンド処理部１０４から供給されたデバイス値を含むデータにヘッダを付加したモニタ応答をエンジニアリングツール５００に送信する。コマンド送受信部１０６の機能は、図１のツール用インタフェース１３０と演算装置１４０とにより実現される。
【００６５】
続いて、図２を参照しながらエンジニアリングツール５００の機能的な構成を説明する。エンジニアリングツール５００は、機能的には、ＣＰＵユニット１００とコマンドの送受信を行うコマンド送受信部５０１と、ユーザが指定したデバイス値のモニタ要求を生成するモニタ要求部５０２と、モニタ応答の内容を表示する表示部５０３とを備える。
【００６６】
コマンド送受信部５０１は、モニタ要求部５０２から供給されたモニタ要求の内容を示すデータにヘッダを付加したモニタ要求をＣＰＵユニット１００に送信する。
【００６７】
さらに、コマンド送受信部５０１は、ＣＰＵユニット１００からモニタ応答を受け付け、受け付けたモニタ応答をモニタ要求部５０２に出力する。コマンド送受信部５０１の機能は、図１の通信インタフェース５４０と演算装置５５０とにより実現される。
【００６８】
モニタ要求部５０２は、ユーザの入力操作を受け付け、ユーザの入力操作が示すデバイス値のモニタ要求の内容を示すデータを生成し、生成したモニタ要求の内容を示すデータをコマンド送受信部５０１に出力する。モニタ要求部５０２が生成したループモニタ要求の内容を示すデータには、ユーザが指定したデバイスの領域を特定する値と、開始番号及び終了番号と、デバイス定義情報５１２において定義されたデバイス値のデータ長を示す値とが含まれている。
【００６９】
また、モニタ要求部５０２は、コマンド送受信部５０１を介して、ＣＰＵユニット１００からモニタ応答を受信すると、次のような処理を行う。モニタ要求部５０２は、モニタ応答に含まれているデータ件数と、デバイス定義情報５１２において定義されたデバイス値のデータ長とからモニタ応答のデータを格納するのに必要なメモリの記憶容量を算出する。モニタ要求部５０２は、算出したメモリの記憶容量からモニタ応答のデータを格納するのに必要な領域をメモリ５１０に確保する。その後、モニタ要求部５０２は、モニタ応答のデータを、確保したメモリ５１０の領域に格納し、表示部５０３にモニタ応答のデータをメモリ５１０に格納した旨を通知する。
【００７０】
表示部５０３は、メモリ５１０に格納されたモニタ応答のデータを出力装置５３０のディスプレイに表示する。表示部５０３の機能は、図１の出力装置５３０と演算装置５５０とにより実現される。
【００７１】
続いて、ユーザがエンジニアリングツール５００を使用してＣＰＵユニット１００のデバイス値をモニタする方法を説明する。ユーザは、図１に示すように、エンジニアリングツール５００とＣＰＵユニット１００とを通信ケーブル９０５を介して相互に接続した状態で、キーボード、マウス等の入力装置５２０を操作して、モニタ用プログラム５１１を起動する。演算装置５５０は、ユーザの操作に応答してモニタ用プログラム５１１を実行し、以下の機能を実現する。
【００７２】
演算装置５５０は、図４Ａに示すようなデバイスモニタの入力画面を出力装置５３０に表示する。入力画面において、ユーザは、モニタしたいデバイスの領域を選択し、選択された領域における範囲を示す開始番号及び終了番号を入力することができる。さらに、ユーザは、「ループ処理内におけるデバイス値の履歴を出力する。」のチェックボックスのチェックの有無により、スキャン後のデバイス値を要求するのか、ループ処理において更新されたデバイス値の更新履歴を要求するのかを指定することができる。ユーザが、図４Ａに示す画面上において、キーボード、マウス等の入力装置５２０を操作して、モニタしたいデバイスを選択し、当該領域における範囲を示す開始番号及び終了番号を入力し、「送信」ボタンを押したとする。
【００７３】
演算装置５５０は、ユーザの操作に応答して、選択されたデバイスの領域を特定する値と、当該領域において読み出す範囲を示す開始番号及び終了番号とを含むモニタ要求をＣＰＵユニット１００に送信する。図示する例では、チェックボックスがオフであるため、演算装置５５０は、「Ｘ１００」から「Ｘ１５０」のデバイス値と、「Ｄ５０」から「Ｄ１００」のデバイス値を要求する旨のノーマルモニタ要求をＣＰＵユニット１００に送信する。これに応答して、ＣＰＵユニット１００は、ノーマルモニタ要求で指定されたデバイス値を読み出し、読み出したデバイス値を含むモニタ応答をエンジニアリングツール５００に送信する。ここでは、ＣＰＵユニット１００は、図２に示すデバイスデータ記憶部１０１から「Ｘ１００」から「Ｘ１５０」のデバイス値と、「Ｄ５０」から「Ｄ１００」のデバイス値を、指定された順序で読み出し、読み出したデバイス値をエンジニアリングツール５００に送信する。
【００７４】
演算装置５５０は、ＣＰＵユニット１００からモニタ応答を受信すると、図４Ｂに示すようなデバイスモニタの結果画面を出力装置５３０に表示する。図示する例では、演算装置５５０は、ＣＰＵユニット１００から受信したデバイス値とともに、ユーザが入力した開始番号及び終了番号に基づいて、各デバイス値が「Ｘ」の領域における何番目のデータであるかを示すデバイスの番号を併せて表示する。また、ユーザが「保存」ボタンを押した場合には、演算装置５５０は、ＣＰＵユニット１００から受信したモニタ応答に含まれるデバイス値をメモリ５１０に保存する。
【００７５】
また、ユーザが、図５Ａに示すように、入力画面において、モニタしたいデバイスの領域を選択し、選択された領域における範囲を示す開始番号及び終了番号を入力して、「ループ処理内におけるデバイス値の履歴を出力する。」のチェックボックスをオンにして「送信」ボタンを押したとする。この場合、演算装置５５０は、「Ｙ１００」及び「Ｙ２０１」のデバイス値を要求する旨のループモニタ要求をＣＰＵユニット１００に送信する。これに応答して、ＣＰＵユニット１００は、ループモニタ要求で指定されたデバイス値の履歴を履歴データ記憶部１０２に格納する。ＣＰＵユニット１００は、履歴データ記憶部１０２から読み出したデバイス値を含むモニタ応答をエンジニアリングツール５００に送信する。ここでは、ＣＰＵユニット１００は、図２に示す履歴データ記憶部１０２から「Ｙ１００」及び「Ｙ２０１」の更新履歴のデータを更新された順序で読み出し、読み出したデバイス値をセットしたモニタ応答をエンジニアリングツール５００に送信する。
【００７６】
演算装置５５０は、ＣＰＵユニット１００からモニタ応答を受信すると、図５Ｂに示すようなデバイスモニタの結果画面を出力装置５３０に表示する。図示する例では、演算装置５５０は、各デバイス値が何回目のループで更新されたデータであるかを示す番号を併せて表示する。また、ユーザが「保存」ボタンを押した場合には、演算装置５５０は、ＣＰＵユニット１００から受信したモニタ応答に含まれるデバイス値をメモリ５１０に保存する。
【００７７】
次に、ＣＰＵユニット１００が、エンジニアリングツール５００からモニタ要求を受け付けた場合に、モニタ応答をエンジニアリングツール５００に返すモニタ応答処理を説明する。以下の処理は、図１に示す演算装置１４０がモニタ応答プログラム１１２を実行することで実現される。
【００７８】
演算装置１４０は、ユーザプログラム１１１をスキャンタイム毎に実行しており、ユーザプログラム１１１のＥＮＤ命令を実行した後に、モニタ要求を受信したか否かを判別する。演算装置１４０は、エンジニアリングツール５００からモニタ要求を受信したと判別した場合に、以下のモニタ応答処理を開始する。演算装置１４０は、ユーザプログラム１１１の実行と並行してモニタ応答処理を行うものとする。
【００７９】
図６Ａに示すように、演算装置１４０は、エンジニアリングツール５００からループモニタ要求を受信したか否かを判別する（ステップＳ１１）。演算装置１４０は、ループモニタ要求を受信したと判別すると（ステップＳ１１；Ｙｅｓ）、ループを１回実行する場合のメモリの記憶容量を算出する（ステップＳ１２）。具体的には、演算装置１４０は、ユーザプログラム１１１の構文解析を行い、モニタ要求で指定されたデバイス値が更新されるループを抽出し、モニタ要求で指定されたデバイス値のデータ長からループを１回実行する場合にデバイス値の更新履歴のデータを格納するのに必要なメモリの記憶容量を判別する。演算装置１４０は、抽出したループを特定するための情報と、そのループを実行した場合に必要なメモリの記憶容量をメモリ１１０に格納する。
【００８０】
演算装置１４０は、次の周期として設定されたタイミングで、ユーザプログラム１１１の実行を開始する。演算装置１４０は、ユーザプログラム１１１の各命令を順次実行し、ループモニタ要求で指定されたデバイス値が更新されるループを開始すると判別すると（ステップＳ１３；Ｙｅｓ）、ステップＳ１４の処理を実行する。ステップＳ１４で、演算装置１４０は、指定されたループの繰り返し回数を判別し、ループの繰り返し回数と、ステップＳ１２で算出したループ１回あたりに必要なメモリの記憶容量とから、そのループを全て実行した場合に必要なメモリの記憶容量を算出し、更新履歴のデータを格納するために、算出した記憶容量の領域をメモリ１１０に確保する（ステップＳ１４）。さらに、演算装置１４０は、デバイスが更新されるループを特定するための情報とループの繰り返し回数とをメモリ１１０に格納する。
【００８１】
演算装置１４０は、ループ内の命令を実行する（ステップＳ１５）。演算装置１４０は、ステップＳ１５で中断命令を実行したか否かを判別する（ステップＳ１６）。演算装置１４０は、中断命令を実行していないと判別すると（ステップＳ１６；Ｎｏ）、ループモニタ要求で指定されたデバイス値をメモリ１１０に格納する（ステップＳ１７）。例えば、演算装置１４０は、当該ループを１回実行した時点で、指定されたデバイス値をメモリ１１０の更新履歴のデータを格納するために確保された領域に格納する。さらに、演算装置１４０は、ループを実行した回数をカウントし、カウントした値をメモリ１１０に格納する。演算装置１４０は、ループをステップＳ１４で判別した繰り返し回数だけ繰り返していないと判別すると（ステップＳ１８；Ｎｏ）、再びステップＳ１５の処理を実行する。
【００８２】
演算装置１４０は、ステップＳ１６において、中断命令を実行したと判別すると（ステップＳ１６；Ｙｅｓ）、ループの繰り返し回数を修正する（ステップＳ１９）。例えば、演算装置１４０は、今回のループで、指定されたデバイス値を更新する前に中断命令を実行した場合には、ステップＳ１４で算出し、メモリ１１０に格納したデバイス毎のループの繰り返し回数を、実際にループを繰り返した回数をカウントした値で修正する。演算装置１４０は、今回のループで、指定されたデバイス値を更新した後に中断命令を実行した場合には、ステップＳ１４で算出したデバイス毎のループの繰り返し回数を、実際にループを繰り返した回数をカウントした値に１を加算した値で修正する。
【００８３】
また、演算装置１４０は、ステップＳ１７を実行した後、命令を指定された回数実行したと判別し（ステップＳ１８；Ｙｅｓ）、ＥＮＤ命令を実行すると（ステップＳ２０；Ｙｅｓ）、メモリ１１０に格納されているデバイス値の更新履歴のデータとデータ件数とをエンジニアリングツール５００に送信する（ステップＳ２１）。その後、演算装置１４０は、メモリ１１０に格納されているデバイス値の更新履歴のデータを削除し、確保した領域を解放し、モニタ応答処理を終了する。
【００８４】
一方、ステップＳ１１で、演算装置１４０は、エンジニアリングツール５００からループモニタ要求を受信していないと判別すると（ステップＳ１１；Ｎｏ）、即ち、ノーマルモニタ要求を受信した場合、図６Ｂに示すように、ユーザプログラム１１１の命令を順次実行し（ステップＳ２２）、ＥＮＤ命令を実行してから（ステップＳ２３；Ｙｅｓ）、メモリ１１０に格納されているスキャン後のデバイス値をエンジニアリングツール５００に送信する（ステップＳ２４）。
【００８５】
以上説明したように、実施の形態に係るプログラマブルロジックコントローラ１においては、プログラムの繰り返し処理において書き換えられるデバイス値をモニタすることができる。よって、ユーザは、プログラムをデバッグする際に、従来のように、プログラムにデバッグ用のコードを追加したり、プログラムの実行を随時中断したりする必要がない。これにより、プログラムの開発工数を減らすことが可能である。
【００８６】
（変形例）
実施の形態においては、ＣＰＵユニット１００は、モニタ応答として、データ件数とデータとをエンジニアリングツール５００に送信したが、これに限られない。例えば、ＣＰＵユニット１００は、モニタ応答の送信前に、データ件数をエンジニアリングツール５００に通知するようにしてもよい。この場合、エンジニアリングツール５００の演算装置５５０は、通知されたデータ件数から、ループ処理による更新履歴のデータを格納するのに必要なメモリ容量を算出し、メモリ５１０に更新履歴のデータを格納することが可能であるか否か判別することができる。または、ＣＰＵユニット１００は、モニタ応答の送信前に、データ件数から算出した更新履歴のデータを格納するのに必要なメモリ容量をエンジニアリングツール５００に通知するようにしてもよい。
【００８７】
演算装置５５０は、更新履歴のデータをメモリ５１０に格納することができると判別した場合、モニタ応答の受信が可能である旨の通知をＣＰＵユニット１００に送信してもよい。一方、演算装置５５０は、更新履歴のデータをメモリ５１０に格納することができないと判別した場合、モニタ応答の受信をキャンセルする旨の通知をＣＰＵユニット１００に送信してもよい。このような構成の場合、ＣＰＵユニット１００から、エンジニアリングツール５００に対して、エンジニアリングツール５００のメモリ５１０に格納することができないほどの大容量のデータが送信されることを防止することができる。
【００８８】
また、あるいは、エンジニアリングツール５００の演算装置５５０は、モニタ要求を送信するときに、モニタ応答のデータの件数について事前の通知が必要か否かを示す情報をセットして、モニタ要求をＣＰＵユニット１００に送信するようにしてもよい。この場合、ＣＰＵユニット１００は、データ件数の事前の通知が必要である場合のみ、モニタ応答の送信前に、データ件数をエンジニアリングツール５００に通知するようにしてもよい。
【００８９】
あるいは、演算装置５５０は、ＣＰＵユニット１００から通知されたデータ件数又はメモリ容量から、更新履歴のデータの全部を受信できないと判別した場合には、一部のデータを受信することができることをＣＰＵユニット１００に通知するようにしてもよい。例えば、演算装置５５０は、更新履歴のデータの前半の半分だけ受信する、あるいは、更新履歴のデータの後半の半分だけ受信するようにしてもよい。この場合、演算装置５５０は、ユーザに指定された範囲のデータを受信するようにしてもよい。
【００９０】
例えば、演算装置５５０は、算出したメモリの記憶容量を確保することが不可能であると判別した場合、図７に示すように、指定したデバイス値の履歴を全件取得することが不可能であることを示すメッセージを出力装置５３０のディスプレイに表示する。図示する例では、演算装置５５０は、ＣＰＵユニット１００から通知された件数が５０００件であることとともに、受信の方法の選択肢を表示している。ここでは、選択肢として、データの前半の半分だけを受信すること、データの後半の半分だけを受信すること、ループモニタ要求をキャンセルすることが挙げられている。ここで、ユーザが、入力装置５２０を操作していずれかの選択肢を選択し、「送信」を押したとする。
【００９１】
演算装置５５０は、ユーザが選択した選択肢を示す指示を、ＣＰＵユニット１００に送信する。ユーザが、「前半の２５００件を受信する」を選択した場合、演算装置５５０は、ＣＰＵユニット１００に前半の２５００件を受信する旨の通知を送信する。さらに、演算装置５５０は、２５００件のデータを受信するのに必要なメモリの記憶容量を算出し、メモリ５１０に算出したメモリの記憶容量の領域を確保する。この場合、ＣＰＵユニット１００は、エンジニアリングツール５００からの通知に応じたデータをエンジニアリングツール５００に送信する。あるいは、ユーザが、「後半の２５００件を受信する」を選択した場合、演算装置５５０は、ＣＰＵユニット１００に後半の２５００件を受信する旨の通知を送信する。さらに、演算装置５５０は、２５００件のデータを受信するのに必要なメモリの記憶容量を算出し、メモリ５１０に算出したメモリの記憶容量の領域を確保する。この場合、ＣＰＵユニット１００は、エンジニアリングツール５００からの通知に応じたデータをエンジニアリングツール５００に送信する。または、ユーザが「モニタ要求をキャンセルする」を選択した場合、演算装置５５０は、ＣＰＵユニット１００にモニタ要求をキャンセルする旨の通知を送信する。この場合、ＣＰＵユニット１００はエンジニアリングツールにデータを送信しない。
【００９２】
実施の形態においては、デバイス値をモニタするための外部機器として、エンジニアリングツール５００を例に説明したが、外部機器は、プログラマブル表示器であってもよいし、あるいは、ＣＰＵユニット１００と通信可能な他の情報処理装置であってもよい。
【００９３】
実施の形態においては、図３に示すように繰り返し処理を示す命令として「ＦＯＲ…ＮＥＸＴ」の例を説明したが、繰り返し処理の命令はこれに限られない。繰り返し処理の他の命令としては、例えば、「ＤＯ…ＷＨＩＬＥ」がある。この場合、ループモニタ部１０５は、実行部１０３がＤＯ命令を１回目に実行したときに、ループ処理が開始されたと判別する。ループモニタ部１０５は、実行部１０３がＷＨＩＬＥ命令を１回目に実行したタイミングで、ループの繰り返し回数を判別し、必要なメモリの記憶容量を算出し、デバイス値を格納するのに必要な領域を履歴データ記憶部１０２に確保する。さらに、ループモニタ部１０５は、デバイス値を履歴データ記憶部１０２に格納すればよい。
【００９４】
実施の形態においては、ユーザは、エンジニアリングツール５００を使用して、デバイス値を指定して、更新履歴のモニタ要求をＣＰＵユニット１００に出したが、これに限られない。ユーザは、ループと、デバイス値とを指定してモニタ要求をＣＰＵユニット１００に出してもよい。この場合、同じデバイス値が複数のループで更新される場合であっても、指定されたループ内における更新履歴だけをモニタすることができる。
【００９５】
上記のプログラムを記録する記録媒体としては、磁気ディスク、光ディスク、光磁気ディスク、フラッシュメモリ、半導体メモリ、磁気テープを含むコンピュータ読取可能な記録媒体を使用することができる。
【００９６】
本発明は、広義の精神と範囲を逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【符号の説明】
【００９７】
１  プログラマブルロジックコントローラ、１００  ＣＰＵユニット、１０１  デバイスデータ記憶部、１０２  履歴データ記憶部、１０３  実行部、１０４  コマンド処理部、１０５  ループモニタ部、１０６，５０１  コマンド送受信部、１１０，５１０  メモリ、１１１  ユーザプログラム、１１２  モニタ応答プログラム、１１３  デバイスメモリ、１２０  入出力インタフェース、１３０  ツール用インタフェース、１４０，５５０  演算装置、１９０，５９０  バス、２００  入力ユニット、３００  出力ユニット、４００  ベースユニット、４１０  共有バス、５００  エンジニアリングツール、５０２  モニタ要求部、５０３  表示部、５１１  モニタ用プログラム、５１２  デバイス定義情報、５２０  入力装置、５３０  出力装置、５４０  通信インタフェース、９０１  検出器、９０２  被制御機器、９０５  通信ケーブル
【図１】
2020065863.tif 000003
【図２】
2020065863.tif 000004
【図３】
2020065863.tif 000005
【図４Ａ】
2020065863.tif 000006
【図４Ｂ】
2020065863.tif 000007
【図５Ａ】
2020065863.tif 000008
【図５Ｂ】
2020065863.tif 000009
【図６Ａ】
2020065863.tif 000010
【図６Ｂ】
2020065863.tif 000011
【図７】
2020065863.tif 000012
【手続補正書】
【提出日】令和1年7月10日(2019.7.10)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
上記目的を達成するため、本発明のプログラマブルロジックコントローラにおいて、実行手段は、設定された周期毎にプログラムを実行する。デバイス記憶手段は、プログラムの入力値及び出力値を含むデバイス値を記憶する。履歴記憶手段は、デバイス値の更新履歴を記憶する。履歴管理手段は、プログラム内にループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、実行手段がループ処理内の命令を実行することにより更新したデバイス値の更新履歴として、ループ処理の繰り返し回数分の更新されたデバイス値を履歴記憶手段に格納する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
本発明のプログラマブルロジックコントローラの履歴管理手段は、プログラムにループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、実行手段がループ処理内の命令を実行することにより更新したデバイス値の更新履歴として、ループ処理の繰り返し回数分の更新されたデバイス値を履歴記憶手段に格納する。このような構成を備えることで、ユーザは煩雑な作業を行うことなく、ループ処理において逐次書き換えられるデバイス値の更新履歴を取得することができ、プログラムのデバッグに係る工数を削減することができる。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
設定された周期毎にプログラムを実行する実行手段と、
前記プログラムの入力値及び出力値を含むデバイス値を記憶するデバイス記憶手段と、
前記デバイス値の更新履歴を記憶する履歴記憶手段と、
前記プログラム内にループ処理があるか否かを判別し、前記プログラム内に前記ループ処理がある場合に、前記実行手段が前記ループ処理内の命令を実行することにより更新した前記デバイス値の前記更新履歴として、前記ループ処理の繰り返し回数分の更新された前記デバイス値を前記履歴記憶手段に格納する履歴管理手段と、
を備えるプログラマブルロジックコントローラ。
【請求項２】
前記履歴管理手段は、前記ループ処理の前記繰り返し回数に応じて、前記デバイス値の前記更新履歴を記憶するのに必要な記憶容量を算出し、算出した前記記憶容量を前記履歴記憶手段に確保する、
請求項１に記載のプログラマブルロジックコントローラ。
【請求項３】
前記履歴管理手段は、外部機器から指定された前記デバイス値の前記更新履歴を前記履歴記憶手段に格納する、
請求項１または２に記載のプログラマブルロジックコントローラ。
【請求項４】
前記履歴管理手段は、前記外部機器から前記デバイス値の前記更新履歴を要求されると、次に開始される周期で、前記実行手段が前記プログラムの前記ループ処理内の命令を繰り返し実行することにより更新された前記デバイス値の履歴を、前記デバイス値の前記更新履歴として、前記履歴記憶手段に格納する、
請求項３に記載のプログラマブルロジックコントローラ。
【請求項５】
前記履歴記憶手段に格納された前記デバイス値の前記更新履歴を前記外部機器に送信する要求処理手段をさらに備える、
請求項３又は４に記載のプログラマブルロジックコントローラ。
【請求項６】
前記要求処理手段は、前記ループ処理が繰り返される回数に応じて、前記デバイス値の前記更新履歴を記憶するのに必要な記憶容量を算出し、算出した前記記憶容量を前記外部機器に送信する、
請求項５に記載のプログラマブルロジックコントローラ。
【請求項７】
設定された周期毎にプログラムを実行するプログラマブルロジックコントローラが、
前記プログラム内にループ処理があるか否かを判別するステップと、
前記プログラム内に前記ループ処理がある場合に、前記プログラムの入力値及び出力値であって、前記ループ処理内の命令の実行により更新されたデバイス値の更新履歴として、前記ループ処理の繰り返し回数分の更新された前記デバイス値を記憶手段に格納するステップと、
を実行する方法。
【請求項８】
設定された周期毎にプログラムを実行するプログラマブルロジックコントローラに、
前記プログラム内にループ処理があるか否かを判別させ、
前記プログラム内に前記ループ処理がある場合に、前記プログラムの入力値及び出力値であって、前記ループ処理内の命令の実行により更新されたデバイス値の更新履歴として、前記ループ処理の繰り返し回数分の更新された前記デバイス値を記憶手段に記憶させる、
プログラム。
【手続補正書】
【提出日】令和1年12月9日(2019.12.9)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
上記目的を達成するため、本発明のプログラマブルロジックコントローラにおいて、実行手段は、設定された周期毎にプログラムを実行する。デバイス記憶手段は、プログラムの入力値及び出力値を含むデバイス値を記憶する。履歴記憶手段は、デバイス値の更新履歴を記憶する。履歴管理手段は、プログラムのループ処理内で更新されたデバイス値の更新履歴が要求されると、プログラム内にループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、実行手段がループ処理内の命令を実行することにより更新したデバイス値の更新履歴として、ループ処理の繰り返し回数分の更新されたデバイス値を履歴記憶手段に格納する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
本発明のプログラマブルロジックコントローラの履歴管理手段は、プログラムのループ処理内で更新されたデバイス値の更新履歴が要求されると、プログラム内にループ処理があるか否かを判別し、プログラム内にループ処理がある場合に、実行手段がループ処理内の命令を実行することにより更新したデバイス値の更新履歴として、ループ処理の繰り返し回数分の更新されたデバイス値を履歴記憶手段に格納する。このような構成を備えることで、ユーザは煩雑な作業を行うことなく、ループ処理において逐次書き換えられるデバイス値の更新履歴を取得することができ、プログラムのデバッグに係る工数を削減することができる。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
設定された周期毎にプログラムを実行する実行手段と、
前記プログラムの入力値及び出力値を含むデバイス値を記憶するデバイス記憶手段と、
前記デバイス値の更新履歴を記憶する履歴記憶手段と、
前記プログラムのループ処理内で更新された前記デバイス値の更新履歴が要求されると、前記プログラム内に前記ループ処理があるか否かを判別し、前記プログラム内に前記ループ処理がある場合に、前記実行手段が前記ループ処理内の命令を実行することにより更新した前記デバイス値の前記更新履歴として、前記ループ処理の繰り返し回数分の更新された前記デバイス値を前記履歴記憶手段に格納する履歴管理手段と、
を備えるプログラマブルロジックコントローラ。
【請求項２】
前記履歴管理手段は、前記ループ処理の前記繰り返し回数に応じて、前記デバイス値の前記更新履歴を記憶するのに必要な記憶容量を算出し、算出した前記記憶容量を前記履歴記憶手段に確保する、
請求項１に記載のプログラマブルロジックコントローラ。
【請求項３】
前記履歴管理手段は、外部機器から指定された前記デバイス値の前記更新履歴を前記履歴記憶手段に格納する、
請求項１または２に記載のプログラマブルロジックコントローラ。
【請求項４】
前記履歴管理手段は、前記外部機器から前記ループ処理内の命令を実行することにより更新された前記デバイス値の前記更新履歴を要求されると、次に開始される周期で、前記実行手段が前記プログラムの前記ループ処理内の命令を繰り返し実行することにより更新された前記デバイス値の履歴を、前記デバイス値の前記更新履歴として、前記履歴記憶手段に格納する、
請求項３に記載のプログラマブルロジックコントローラ。
【請求項５】
前記履歴記憶手段に格納された前記デバイス値の前記更新履歴を前記外部機器に送信する要求処理手段をさらに備える、
請求項３又は４に記載のプログラマブルロジックコントローラ。
【請求項６】
前記要求処理手段は、前記ループ処理が繰り返される回数に応じて、前記デバイス値の前記更新履歴を記憶するのに必要な記憶容量を算出し、算出した前記記憶容量を前記外部機器に送信する、
請求項５に記載のプログラマブルロジックコントローラ。
【請求項７】
設定された周期毎にプログラムを実行するプログラマブルロジックコントローラが、
前記プログラムの入力値及び出力値を含むデバイス値を前記プログラムのループ処理内の命令を実行することにより更新した前記デバイス値の更新履歴が要求された場合に、前記ループ処理の繰り返し回数分の更新された前記デバイス値を記憶手段に格納するステップ、
を実行する方法。
【請求項８】
設定された周期毎にプログラムを実行するプログラマブルロジックコントローラに、
前記プログラムの入力値及び出力値を含むデバイス値を前記プログラムのループ処理内の命令を実行することにより更新した前記デバイス値の更新履歴が要求された場合に、前記ループ処理の繰り返し回数分の更新された前記デバイス値を記憶手段に記憶させる、
プログラム。
【国際調査報告】
2020065863.tif 000013
2020065863.tif 000014
2020065863.tif 000015