(57)【要約】      （修正有）【課題】トラブル解決に有用なイベントのログを取得できるプログラマブルロジックコントローラ用プログラム作成支援装置を提供する。【解決手段】運転記録データ保持部２２ｂから読み出したイベントデータに含まれる複数のイベント及びこの複数のイベントの各々の発生時刻を、表示部７に一覧表示するイベント表示制御部１４と、イベント表示制御部１４により一覧表示された複数のイベントの中から一つの選択を受け付ける選択受付部１６と、運転記録データ保持部２２ｂから読み出したログデータに含まれ、かつ、選択受付部１６により選択されたイベントの発生時刻に対応する時刻に記録されたデバイス値を、ユーザープログラム上に重ねて表示するデバイス表示制御部１３とを備える。イベント表示制御部１４は、ＰＬＣ１の動作状態又はこのＰＬＣ１により制御される被制御装置の動作状態を変更する特定イベントを、表示部７上に選択的に一覧表示する。【選択図】図３６
2020134986.tif 000002
【特許請求の範囲】
【請求項１】
一以上のユニットで構成されたプログラマブルロジックコントローラであり、ユーザープログラムを繰り返し実行するプログラム実行部、該プログラム実行部によって参照される記憶領域であるデバイスを有するデバイス部、該デバイス部に記憶されているデバイス値を現在時刻と共にログデータとして時系列に記録すると共に、前記プログラマブルロジックコントローラ又は該プログラマブルロジックコントローラにより制御される被制御装置にて発生した複数のイベントを発生時刻と共にイベントデータとして時系列に記録する一時記録部、及び運転時において所定の保存条件が満たされると該一時記録部に記録されているログデータ及びイベントデータを保存する保存メモリを備える前記プログラマブルロジックコントローラにおいて実行される、グラフィカルプログラミング言語で記述される前記ユーザープログラムの作成を支援するためのプログラム作成支援装置であって、
前記プログラマブルロジックコントローラの運転時に前記保存メモリに保存されたログデータ及びイベントデータを、運転記録データとして記憶する運転記録データ保持部と、
前記ユーザープログラムを表示させる表示部と、
前記運転記録データ保持部から読み出したイベントデータに含まれる複数のイベント及び該複数のイベントの各々の発生時刻を、前記表示部に一覧表示するイベント表示制御部と、
前記イベント表示制御部により一覧表示された複数のイベントの中から一つの選択を受け付ける選択受付部と、
前記運転記録データ保持部から読み出したログデータに含まれ、かつ、前記選択受付部により選択されたイベントの発生時刻に対応する時刻に記録されたデバイス値を、前記ユーザープログラム上に重ねて表示するデバイス表示制御部と、
を備え、
前記イベント表示制御部は、前記プログラマブルロジックコントローラの動作状態又は該プログラマブルロジックコントローラにより制御される被制御装置の動作状態を変更する特定イベントを、前記表示部上に選択的に一覧表示するよう構成してなるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項２】
請求項１に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、さらに、
前記プログラマブルロジックコントローラの前記一時記録部に対し、前記複数のイベントのうち前記特定イベントのみを記録するよう設定する記録設定部を備えてなるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項３】
請求項１又は２に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記特定イベントが、前記プログラム実行部による前記ユーザープログラムの実行と独立してユーザが行った操作に関するイベントを含んでなるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項４】
請求項３に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記ユーザ操作に関するイベントが、少なくとも、
前記ユーザープログラム及び前記プログラマブルロジックコントローラの構成情報を含むプロジェクトデータの書き換え、
前記プログラマブルロジックコントローラの設定を行う設定モードと、前記プログラマブルロジックコントローラ上で前記ユーザープログラムを実行させる運転モードとのモード切替、
前記プログラマブルロジックコントローラに接続可能なケーブルの挿抜、
前記プログラマブルロジックコントローラに取り付け可能な記憶媒体の挿抜、及び
前記被制御装置の電源のＯＮ／ＯＦＦ
を含むプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項５】
請求項１〜４のいずれか一項に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記イベント表示制御部は、前記プログラム実行部による前記ユーザープログラムの実行に従って、前記プログラマブルロジックコントローラ内で自動的に実行される処理に応じたイベントを非表示としてなるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項６】
請求項５に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記自動実行される処理に応じたイベントは、少なくとも、
前記プログラマブルロジックコントローラと接続された外部装置とＴＣＰ接続又はＦＴＰ接続するときの通信開始又は通信切断、及び
前記プログラマブルロジックコントローラ内に用意されたフォルダ又はファイルへの書き込み
を含むプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項７】
請求項１〜６のいずれか一項に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、さらに、
前記デバイス表示制御部における表示対象時刻と、前記イベント表示制御部における表示対象時刻とを同期させる同期ソフトウエアモジュールを備え、
前記同期ソフトウエアモジュールが、前記デバイス表示制御部と、前記イベント表示制御部を、前記表示部において連動させて表示させてなるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項８】
請求項７に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記表示部は、
前記イベントを一覧表示させるイベント表示欄と、
前記ユーザープログラムであるラダー図を表示させるラダーモニタ欄と
を備え、
前記選択受付部で、前記イベント表示欄から任意のイベントが選択されると、該選択されたイベントの時刻と対応するラダー図が前記ラダーモニタ欄で選択されて表示されるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項９】
請求項８に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記記録設定部は、前記プログラマブルロジックコントローラに接続されたカメラ部で時系列に撮像された複数の画像データを前記保存メモリに保存させるよう設定しており、
前記表示部は、さらに
前記カメラ部で時系列に撮像された複数の画像データを表示させるカメラモニタ欄
を備え、
前記選択受付部で、前記イベント表示欄から任意のイベントが選択されると、該選択されたイベントの時刻と対応するラダー図が前記ラダーモニタ欄で選択され、かつ該選択されたイベントの時刻と対応する画像データが前記カメラモニタ欄に表示されるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項１０】
請求項９に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記保存メモリが、ＳＤカード（商品名）であるプログラマブルロジックコントローラ用プログラム作成支援装置。
【請求項１１】
請求項１〜１０のいずれか一項に記載のプログラマブルロジックコントローラ用プログラム作成支援装置であって、
前記イベント表示制御部が、デバイス値を時系列波形として前記表示部に表示してなるプログラマブルロジックコントローラ用プログラム作成支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラ用プログラム作成支援装置に関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（Programmable Logic Controller：以下、「ＰＬＣ」という。）はファクトリーオートメーション（Factory Automation：ＦＡ）において製造機器や搬送装置、検査装置を制御するコントローラである。ＰＬＣはユーザによって作成されるラダープログラム等のユーザープログラムを実行することで様々な拡張ユニットや被制御機器を制御する。ユーザープログラムを実際にＰＬＣ上で実行してみて、ユーザープログラムの作成時には想定していなかった事象が見つかり、ユーザープログラムの修正が必要となることがある。ユーザは修正箇所を特定するためにユーザープログラムを見直すだけでなく、ＰＬＣが生成したログデータを参照する。ログデータにはユーザープログラムを実行しているときに収集されたデバイスの値（デバイス値）が記憶される。ＰＬＣの分野においてデバイスとは情報を記憶する記憶領域を意味する。デバイスとしては、一ビットの情報を保持するリレーデバイスや一ワードの情報を保持するワードデバイス等がある。
【０００３】
ＦＡの分野でシーケンス制御を行うため、ＰＬＣ用のプログラムを、プログラム編集用のアプリケーションプログラムを設計する。設計者は、プログラムを設計した後、このプログラムのシーケンス動作をシミュレーションし、シミュレーションの結果を検証しながらプログラムをデバッグして、完成したプログラムをＰＬＣに転送し、実行させる。しかしながら、必ずしも想定したとおりの動作が実現されるとは限らず、実運用を踏まえて、プログラムを再度デバッグするなど、編集することが行われる。特に実運用時に、想定どおりの動作が実現できていない場合は、その原因がどこにあるのか、トラブルの元となった事象の特定が重要となる。例えば、必ずしもプログラムの設計とは別の原因で、動作が止まっていることもある（一例として、想定しないワークがライン上に流れていることが原因で制御が停止している場合など）。
【０００４】
このようなデバイス値を保存する技術とは別に、イベントログ（故障が発生した等）を保存する技術が知られている（例えば特許文献１）。
【０００５】
しかしながら、保存したイベントログの種類は非常に多いため（１０００種類オーダー）、重要なイベントログが埋もれてしまうと、ユーザがトラブルの原因を探るとき、時間がかかり使い勝手が悪いという問題があった。一方で、予め保存対象となるイベントログをユーザが絞り込んでおくことも考えられるが、保存対象とするイベントの選定が難しく、トラブル解決に役立つイベントを保存し損なう虞があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−０２９８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的の一は、トラブル解決に有用なイベントのログを取得できるようにしたプログラマブルロジックコントローラ用プログラム作成支援装置を提供することにある。
【課題を解決するための手段及び発明の効果】
【０００８】
本発明の第１の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、一以上のユニットで構成されたプログラマブルロジックコントローラであり、ユーザープログラムを繰り返し実行するプログラム実行部、該プログラム実行部によって参照される記憶領域であるデバイスを有するデバイス部、該デバイス部に記憶されているデバイス値を現在時刻と共にログデータとして時系列に記録すると共に、前記プログラマブルロジックコントローラ又は該プログラマブルロジックコントローラにより制御される被制御装置にて発生した複数のイベントを発生時刻と共にイベントデータとして時系列に記録する一時記録部、及び運転時において所定の保存条件が満たされると該一時記録部に記録されているログデータ及びイベントデータを保存する保存メモリを備える前記プログラマブルロジックコントローラにおいて実行される、グラフィカルプログラミング言語で記述される前記ユーザープログラムの作成を支援するためのプログラム作成支援装置であって、前記プログラマブルロジックコントローラの運転時に前記保存メモリに保存されたログデータ及びイベントデータを、運転記録データとして記憶する運転記録データ保持部と、前記ユーザープログラムを表示させる表示部と、前記運転記録データ保持部から読み出したイベントデータに含まれる複数のイベント及び該複数のイベントの各々の発生時刻を、前記表示部に一覧表示するイベント表示制御部と、前記イベント表示制御部により一覧表示された複数のイベントの中から一つの選択を受け付ける選択受付部と、前記運転記録データ保持部から読み出したログデータに含まれ、かつ、前記選択受付部により選択されたイベントの発生時刻に対応する時刻に記録されたデバイス値を、前記ユーザープログラム上に重ねて表示するデバイス表示制御部とを備え、前記イベント表示制御部は、前記プログラマブルロジックコントローラの動作状態又は該プログラマブルロジックコントローラにより制御される被制御装置の動作状態を変更する特定イベントを、前記表示部上に選択的に一覧表示するよう構成できる。上記構成により、多種多様なイベントの内から、トラブル解決に有用なイベントを選択的に表示させて、トラブルの原因究明に役立てることができる。
【０００９】
また、第２の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記構成に加えて、さらに、
って、さらに、前記プログラマブルロジックコントローラの前記一時記録部に対し、前記複数のイベントのうち前記特定イベントのみを記録するよう設定する記録設定部を備えることができる。
【００１０】
さらに、第３の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記特定イベントが、前記プログラム実行部による前記ユーザープログラムの実行と独立してユーザが行った操作に関するイベントを含むことができる。
【００１１】
さらにまた、第４の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記ユーザ操作に関するイベントが、少なくとも、前記ユーザープログラム及び前記プログラマブルロジックコントローラの構成情報を含むプロジェクトデータの書き換え、前記プログラマブルロジックコントローラの設定を行う設定モードと、前記プログラマブルロジックコントローラ上で前記ユーザープログラムを実行させる運転モードとのモード切替、前記プログラマブルロジックコントローラに接続可能なケーブルの挿抜、前記プログラマブルロジックコントローラに取り付け可能な記憶媒体の挿抜、及び前記被制御装置の電源のＯＮ／ＯＦＦを含むことができる。
【００１２】
さらにまた、第５の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記イベント表示制御部は、前記プログラム実行部による前記ユーザープログラムの実行に従って、前記プログラマブルロジックコントローラ内で自動的に実行される処理に応じたイベントを非表示とすることができる。
【００１３】
さらにまた、第６の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記自動実行される処理に応じたイベントは、少なくとも、前記プログラマブルロジックコントローラと接続された外部装置とＴＣＰ接続又はＦＴＰ接続するときの通信開始又は通信切断、及び前記プログラマブルロジックコントローラ内に用意されたフォルダ又はファイルへの書き込みを含むことができる。
【００１４】
さらにまた、第７の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、さらに、前記デバイス表示制御部における表示対象時刻と、前記イベント表示制御部における表示対象時刻とを同期させる同期ソフトウエアモジュールを備え、前記同期ソフトウエアモジュールが、前記デバイス表示制御部と、前記イベント表示制御部を、前記表示部において連動させて表示させることができる。
【００１５】
さらにまた、第８の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記表示部は、イベントを一覧表示させるイベント表示欄と、前記ユーザープログラムであるラダー図を表示させるラダーモニタ欄とを備え、前記選択受付部で、前記イベント表示欄から任意のイベントが選択されると、該選択されたイベントの時刻と対応するラダー図が前記ラダーモニタ欄で選択されて表示されるように構成できる。
【００１６】
さらにまた、第９の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記記憶装置をＳＤカード（商品名）とすることができる。
【００１７】
さらにまた、第１０の態様に係るプログラマブルロジックコントローラ用プログラム作成支援装置によれば、上記何れかの構成に加えて、前記イベント表示制御部が、デバイス値を時系列波形として前記表示部に表示することができる。
【図面の簡単な説明】
【００１８】
【図１】プログラマブルロジックコントローラシステムの概念図である。
【図２】プログラマブルロジックコントローラシステムを示す図である。
【図３】ラダープログラムを説明する図である。
【図４】プログラム作成支援装置を説明する図である。
【図５】ＰＬＣを説明する図である。
【図６】ラダープログラムのスキャンを説明する図である。
【図７】プログラム作成支援装置を示すブロック図である。
【図８】運転記録データとプロジェクトデータの関連付けを示す説明図である。
【図９】ユーザーインターフェースを説明する図である。
【図１０】履歴再生モードのユーザープログラム作成支援プログラムのＧＵＩ画面を示すイメージ図である。
【図１１】記録モードのユーザープログラム作成支援プログラムのＧＵＩ画面を示すイメージ図である。
【図１２】モード選択欄の一例を示すイメージ図である。
【図１３】ラダープログラムを編集する様子を示すＧＵＩのイメージ図である。
【図１４】図１３の状態から編集画面を表示させたイメージ図である。
【図１５】図１４により編集が反映されたラダープログラムを示すイメージ図である。
【図１６】デバイス値を編集する様子を示すユーザープログラム作成支援プログラムのＧＵＩのイメージ図である。
【図１７】プロジェクトの保存画面を示すＧＵＩのイメージ図である。
【図１８】「プロジェクトの別名保存」ダイヤログ画面を示すイメージ図である。
【図１９】「上書き保存禁止」処理の一例を示すフローチャートである。
【図２０】「新しいプロジェクトデータとして保存」処理の一例を示すフローチャートである。
【図２１】プロジェクトデータの照合機能を示すＧＵＩ画面のイメージ図である。
【図２２】照合結果の一例を示すＧＵＩ画面のイメージ図である。
【図２３】プログラム作成支援装置の機能を説明する図である。
【図２４】ＣＰＵユニットの機能を説明する図である。
【図２５】ユニット構成情報の作成処理を説明する図である。
【図２６】デバッグ処理の概要を示すフローチャートである。
【図２７】プロジェクト作成部を説明する図である。
【図２８】ログ表示制御部を説明する図である。
【図２９】プログラム表示モジュールを説明する図である。
【図３０】プロジェクトデータとログデータの表示モジュールを説明する図である。
【図３１】再生制御モジュールを説明する図である。
【図３２】ユーザープログラムとデバイス値とを表示するＵＩを説明する図である。
【図３３】ユーザープログラムとデバイス値とを表示する処理を示すフローチャートである。
【図３４】デバイス値の波形を表示する処理を示すフローチャートである。
【図３５】再生制御を示すフローチャートである。
【図３６】ＰＬＣ用エンジニアリングツールの一例を示すブロック図である。
【図３７】プログラマブルロジックコントローラシステムのイベントログ機能に関するブロック図である。
【図３８】ＣＰＵユニットで発生するイベントを記録する動作を示すフローチャートである。
【図３９】拡張ユニットで発生するイベントを記録する動作を示すフローチャートである。
【図４０】イベントログ表示時のフィルタ動作を示すフローチャートである。
【図４１】表示のフィルタリング設定を行う設定画面を示すイメージ図である。
【図４２】実施形態に係るプログラマブルロジックコントローラ用エンジニアリングツールのＧＵＩを示すイメージ図である。
【図４３】操作バーのカーソルが重なっているＧＵＩのイメージ図である。
【図４４】ＧＵＩのイメージ図である。
【図４５】ＧＵＩのイメージ図である。
【図４６】カメラモニタ欄を有するプログラマブルロジックコントローラ用エンジニアリングツールのＧＵＩを示すイメージ図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施形態を図面に基づいて説明する。ただし、以下に示す実施形態は、本発明の技術思想を具体化するための例示であって、本発明は以下のものに特定されない。また、本明細書は特許請求の範囲に示される部材を、実施形態の部材に特定するものでは決してない。特に実施形態に記載されている構成部品の寸法、材質、形状、その相対的配置等は特に特定的な記載がない限りは、本発明の範囲をそれのみに限定する趣旨ではなく、単なる説明例にすぎない。なお、各図面が示す部材の大きさや位置関係等は、説明を明確にするため誇張していることがある。さらに以下の説明において、同一の名称、符号については同一若しくは同質の部材を示しており、詳細説明を適宜省略する。さらに、本発明を構成する各要素は、複数の要素を同一の部材で構成して一の部材で複数の要素を兼用する態様としてもよいし、逆に一の部材の機能を複数の部材で分担して実現することもできる。
【００２０】
図１に、プログラマブルロジックコントローラシステムの概要図を示す。この図に示すプログラマブルロジックコントローラシステム１０００は、ラインを流れる対象物ＷＫをカメラ部９８で撮像して検査するシステムを例示している。このプログラマブルロジックコントローラシステム１０００は、ＰＣ２と接続されて、プロジェクトデータ編集プログラムを編集する。
【００２１】
プログラマブルロジックコントローラ１は、複数のユニットを接続して構成される。複数のユニット間は、ユニット間バス９０を介して通信可能に接続されている。ユニットは、ＣＰＵユニット３と拡張ユニット４に大別される。ＣＰＵユニット３はメインユニットや基本ユニットとも呼ばれ、プログラマブルロジックコントローラの基本動作を行う。また拡張ユニット４は、ＣＰＵユニット３の機能を拡張する機能拡張ユニットである。図１の例では、拡張ユニット４はカメラ入力拡張ユニット４ｃと、モーションユニット４ｄと、通信ユニット４ｅを含む。拡張ユニット４の一種であるカメラ入力拡張ユニット４ｃは、カメラ部９８と接続されて、対象物ＷＫを所定のタイミングで撮像して、ＣＰＵユニットに送出する。モーションユニット４ｄは、位置決めユニットとも呼ばれ、軸とよばれる制御対象の位置を制御する。一般に軸ごとにモータ等の駆動源が存在する。通信ユニット４ｅは、外部機器と通信を行う。またＣＰＵユニット３は、これら拡張ユニット４からのデータを収集して、必要な制御を行う。
＜システム構成＞
【００２２】
ここで、プログラマブルロジックコントローラ（以下「ＰＬＣ」とも呼ぶ。）を当業者にとってよりよく理解できるようにするために、一般的なＰＬＣの構成とその動作について説明する。
【００２３】
図２は、本発明の実施の形態によるプログラマブルロジックコントローラシステムの一構成例を示す概念図である。図２が示すように、このシステムは、ラダープログラム等のユーザープログラムの編集を行うためのＰＣ２と、工場等に設置される各種制御装置を統括的に制御するためのＰＬＣ１とを備えている。ＰＣはパーソナルコンピュータの略称である。ユーザープログラムは、ラダー言語やＳＦＣ（シーケンシャルファンクションチャート）等のフローチャート形式のモーションプログラム等のグラフィカルプログラミング言語を用いて作成されてもよいし、Ｃ言語等の高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザープログラムはラダープログラムとする。ＰＬＣ１は、ＣＰＵが内蔵されたＣＰＵユニット３と、１つないし複数の拡張ユニット４を備えている。ＣＰＵユニット３に対して１つないし複数の拡張ユニット４が着脱可能となっている。例えば、拡張ユニット４ａはモータ（フィールドデバイス１０ａ）を駆動してワークの位置決めする位置決めユニットであり、拡張ユニット４ｂはカウンタユニットであってもよい。カウンタユニットは手動パルサ等のエンコーダ（フィールドデバイス１０ｂ）からの信号をカウントする。なお、参照符号の末尾に付与されているａ、ｂ、ｃ・・・の文字は省略されることがある。なお、ＰＬＣ１とＰＣ２とを含むシステムはプログラマブルロジックコントローラシステムと呼ばれてもよい。
【００２４】
ＣＰＵユニット３には、ＰＬＣ側表示部５及びＰＬＣ側操作部６が備えられている。ＰＬＣ側表示部５は、ＣＰＵユニット３に取り付けられている各拡張ユニット４の動作状況等を表示することができる。ＰＬＣ側操作部６の操作内容に応じてＰＬＣ側表示部５は表示内容を切り替える。またＰＬＣ側操作部６は、ＣＰＵユニット３と一体に組み込まれたボタン等とする他、外付けのコンソールやマウスやキーボード等の入力装置としてもよい。あるいは、ＰＬＣ側表示部５をタッチパネルとして操作部の機能を兼用させることもできる。
【００２５】
ＰＬＣ側表示部５は、通常、ＰＬＣ１内のデバイスの現在値（デバイス値）やＰＬＣ１内で生じたエラー情報等を表示する。デバイスとは、デバイス値（デバイスデータ）を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態及びユーザープログラム上で設定される内部リレー（補助リレー）、タイマ、カウンタ、データメモリ等の状態を示す情報である。デバイス値の型にはビット型とワード型がある。ビットデバイスは１ビットのデバイス値を記憶する。ワードデバイスは１ワードのデバイス値を記憶する。
【００２６】
拡張ユニット４は、ＰＬＣ１の機能を拡張するために用意されている。各拡張ユニット４には、その拡張ユニット４の機能に対応するフィールドデバイス（被制御装置）１０が接続され、これにより、各フィールドデバイス１０が拡張ユニット４を介してＣＰＵユニット３に接続される。フィールドデバイス１０は、センサやカメラ部等の入力機器であってもよいし、アクチュエータ等の出力機器であってもよい。また、一つの拡張ユニット４に対して複数のフィールドデバイスが接続されてもよい。
（プログラマブルロジックコントローラ用エンジニアリングツール）
【００２７】
ＰＣ２は、プログラマブルロジックコントローラ用エンジニアリングツール（以下「ＰＬＣ用エンジニアリングツール」ともいう。）を実現する。ＰＬＣ用エンジニアリングツールとは、ＰＬＣ１と接続して、その設定や、運用時の制御や動作確認等を行うための部材である。また、ＰＬＣ１やこれを含めたプログラマブルロジックコントローラシステムを動作させる各種プログラムの作成や、作成済みのプログラムの編集、修正を行うこともできる。この意味ではプログラム作成支援装置と呼ばれてもよい。さらにＰＬＣ用エンジニアリングツールは、過去のプログラマブルロジックコントローラシステムの動作を記録した運転記録データに基づいて、その当時の各デバイスの動作状況を再現することもできる。運転記録データは、ラダープログラム等のユーザープログラムや、各ユニットのユニット構成情報などの設定データを含むプロジェクトデータ、及び運転当時の各デバイスのデバイス値やカメラ部の画像データ等の運用データであるログデータを含んでいる。このＰＬＣ用エンジニアリングツールは運転記録データの内、プロジェクトデータを読み込んで編集することも可能である。この意味でＰＬＣ用エンジニアリングツールは、プロジェクトデータ編集プログラムと呼ばれてもよい。
【００２８】
ＰＣ２は、例えば携帯可能なノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部７及びＰＣ側操作部８を備えている。ＰＬＣ１を制御するためのユーザープログラムの一例であるラダープログラムは、ＰＣ２を用いて作成される。その作成されたラダープログラムは、ＰＣ２内でニモニックコードに変換される。ＰＣ２は、ＵＳＢ（Universal Serial Bus）等の通信ケーブル９を介してＰＬＣ１のＣＰＵユニット３に接続され、ニモニックコードに変換されたラダープログラムをＣＰＵユニット３に送る。ＣＰＵユニット３はラダープログラムをマシンコードに変換し、ＣＰＵユニット３に備えられたメモリ内に記憶する。なお、ここではニモニックコードがＣＰＵユニット３に送信されているが、本発明はこれに限られない。例えば、ＰＣ２は、ニモニックコードを中間コードに変換し、中間コードをＣＰＵユニット３に送信してもよい。
【００２９】
なお、図２は示していないが、ＰＣ２のＰＣ側操作部８には、ＰＣ２に接続されたマウス等のポインティングデバイスが含まれていてもよい。またＰＣ２は、ＵＳＢ以外の他の通信ケーブル９を介して、ＰＬＣ１のＣＰＵユニット３に対して着脱可能に接続されるような構成であってもよい。また、通信ケーブル９を介さず、ＰＬＣ１のＣＰＵユニット３に対して無線によって接続されるような構成であってもよい。
＜ラダープログラム＞
【００３０】
図３は、ラダープログラムの作成時にＰＣ２の表示部７に表示されるラダー図Ｌｄの一例を示す図である。ＰＣ２は、マトリックス状に配置された複数のセルを表示部７に表示する。各セルには、仮想デバイスのシンボルが配置される。シンボルは、入力リレーや出力リレー等を示している。このような複数のシンボルによってリレー回路が形成される。ラダー図Ｌｄには、例えば１０列×Ｎ行（Ｎは任意の自然数）のセルが配置されている。そして各行のセル内には、仮想デバイスのシンボルが適宜配置される。
【００３１】
図３が示すリレー回路は、入力装置からの入力信号に基づいてＯＮ／ＯＦＦされる３つの仮想デバイス（以下、「入力デバイス」と呼ぶ。）のシンボルと、出力装置の動作を制御するためにＯＮ／ＯＦＦされる仮想デバイス（以下、「出力デバイス」と呼ぶ。）のシンボルと、が適宜結合されることにより構成されている。
【００３２】
各入力デバイスのシンボルの上方に表示されている文字（「Ｒ０００１」、「Ｒ０００２」及び「Ｒ０００３」）は、その入力デバイスのデバイス名（アドレス名）を表している。各入力デバイスのシンボルの下方に表示されている文字（「フラグ１」、「フラグ２」及び「フラグ３」）は、その入力デバイスに対応付けられたデバイスコメントを表している。出力デバイスのシンボルの上方に表示されている文字（「原点復帰」）は、その出力デバイスの機能を表す文字列からなるラベルである。
【００３３】
図３が示す例では、デバイス名「Ｒ０００１」及び「Ｒ０００２」にそれぞれ対応する２つの入力デバイスのシンボルが直列的に結合されることにより、ＡＮＤ回路が構成されている。また、これらの２つの入力デバイスのシンボルからなるＡＮＤ回路に対して、デバイス名「Ｒ０００３」に対応する入力デバイスのシンボルが並列的に結合されることにより、ＯＲ回路が構成されている。すなわち、このリレー回路では、一行目の２つのシンボルに対応する入力デバイスがいずれもＯＮした場合、又は二行目のシンボルに対応する入力デバイスがＯＮした場合にのみ、一行目のシンボルに対応する出力デバイスがＯＮになる。
＜プログラム作成支援装置＞
【００３４】
図４は、ＰＣ２の電気的構成について説明するためのブロック図である。図４が示すように、ＰＣ２は、ＰＣ側メモリ部１１、ＰＣ側ＣＰＵ２１、表示部７、ＰＣ側操作部８、ＰＣ側記憶装置２２及びＰＣ側通信部２３を備えている。表示部７、ＰＣ側操作部８、ＰＣ側記憶装置２２及びＰＣ側通信部２３は、それぞれＰＣ側ＣＰＵ２１に対して電気的に接続されている。
【００３５】
ＰＣ側メモリ部１１は、ＰＣ側ＣＰＵ２１が処理を実行するための作業空間となる作業メモリであり、典型的にはＲＡＭ等で構成される。ＰＣ側記憶装置２２は、後述する運転記録データ記憶部３６Ｂの機能を実現する。運転記録データは、プロジェクトデータを含んでいる。
【００３６】
ＰＣ側記憶装置２２はハードディスクや半導体メモリ、ＲＯＭ等を含み、さらに着脱可能なメモリカードを含んでもよい。ＣＰＵは中央演算処理装置の略称である。ＲＯＭはリードオンリーメモリの略称である。ＲＡＭはランダムアクセスメモリの略称である。
【００３７】
ユーザは、ＰＣ側記憶装置２２に記憶されているコンピュータプログラムである編集ソフトウエアをＰＣ側ＣＰＵ２１に実行させて、ＰＣ側操作部８を通じてプロジェクトデータを編集する。この編集ソフトウエアは、プロジェクトデータ編集プログラムにあたる。
（プロジェクトデータ）
【００３８】
プロジェクトデータは、一つ以上のユーザープログラム（例えばラダープログラム）と、ＣＰＵユニット３や拡張ユニット４のユニット構成情報等を含む。またプロジェクトデータは、ユーザープログラムがどのようなプログラム部品から構成されているかを示すプログラム構成情報を含めてもよい。さらにユニット構成情報は、ＣＰＵユニット３に対する複数の拡張ユニット４の接続位置や、ＣＰＵユニット３に備えられた機能（例えば通信機能や位置決め機能）を示す情報、拡張ユニット４の機能（例えば撮影機能）等を示す情報である。
【００３９】
ここで、プロジェクトデータの編集には、プロジェクトデータの作成及び変更が含まれる。プロジェクトデータ編集プログラムを用いて作成されたプロジェクトデータは、ＰＣ側記憶装置２２に記憶される。またユーザは、必要に応じてＰＣ側記憶装置２２に記憶されているプロジェクトデータを読み出し、そのプロジェクトデータを、プロジェクトデータ編集プログラムを用いて変更することができる。ＰＣ側通信部２３は、通信ケーブル９を介してＰＣ２をＣＰＵユニット３に通信可能に接続するためのものである。ＰＣ側ＣＰＵ２１はＰＣ側通信部２３を介してプロジェクトデータをＣＰＵユニット３に転送する。
【００４０】
プロジェクトデータ編集プログラムは、編集モードとモニタモードと履歴再生モードを備える。編集モードはエディットモード等とも呼ばれ、プロジェクトデータを編集することができる。またモニタモードはユーザープログラムのデバッグ等を行うためのシミュレーション動作を行うことができる。さらに履歴再生モードはリプレイモードやタイムマシン再生等とも呼ばれ、再生表示を行うことができる。これらの編集モード、モニタモード、履歴再生モードの切り替えは、後述するモード選択部５０Ｄで行われる。
＜ＰＬＣ１＞
【００４１】
図５はＰＬＣ１の電気的構成について説明するためのブロック図である。この図に示すように、ＣＰＵユニット３は、ＰＬＣ側ＣＰＵ３１、ＰＬＣ側表示部５、ＰＬＣ側操作部６、ＰＬＣ側記憶装置３２及びＰＬＣ側通信部３３を備えている。ＰＬＣ側表示部５、ＰＬＣ側操作部６、ＰＬＣ側記憶装置３２及びＰＬＣ側通信部３３は、それぞれＰＬＣ側ＣＰＵ３１に電気的に接続されている。
（ＰＬＣ側記憶装置３２）
【００４２】
ＰＬＣ側記憶装置３２は、プロジェクト記憶部３５、デバイス部３４、一時記録部９１ａ、保存メモリ３６を備えている。
【００４３】
プロジェクト記憶部３５は、ＰＣ２から入力されたプロジェクトデータを記憶する。またＰＬＣ側記憶装置３２はＣＰＵユニット３用の制御プログラムも記憶する。
【００４４】
デバイス部３４はビットデバイスやワードデバイス等を有し、各デバイスはデバイス値を記憶する。このデバイス部３４は、複数のデバイスの各デバイス値を記憶するデバイスメモリとして機能する。またユーザープログラムに従い参照される記憶領域として機能させてもよい。
【００４５】
一時記録部９１ａは、デバイス部３４に記憶されているデバイス値を時系列に記録する。この一時記録部９１ａは、リングバッファ等で構成できる。
【００４６】
保存メモリ３６は、一時記録部９１ａに時系列に記録されたデバイス値を保存する。保存メモリ３６は、不揮発性メモリとして、内部メモリ３７や着脱可能なメモリカード３６Ａ等で構成される。
【００４７】
このようにＰＬＣ側記憶装置３２は複数の記憶領域を有している。このＰＬＣ側記憶装置３２はＲＡＭやＲＯＭ、メモリカード等を含んでもよい。例えば図５の例では、保存メモリ３６は着脱可能なメモリカード３６Ａで構成されている。
（ＰＬＣ側ＣＰＵ３１）
【００４８】
ＰＬＣ側ＣＰＵ３１は、プログラム実行部５１４と、保存条件設定部４５と、記録制御部３９と、保存制御部５０Ｃを備えている。プログラム実行部５１４は、ユーザープログラムを繰り返し実行するラダー実行エンジンとして機能する。ユーザープログラムに従い、プログラム実行部５１４により参照される記憶領域であるデバイス部３４は、複数のデバイスの各デバイス値を記憶している。
【００４９】
保存条件設定部４５は、各種の条件を設定するための部材である。ここでは保存条件設定部４５は、一時記録部９１ａに記録するための記録トリガについての第１トリガ条件と、保存メモリ３６に保存するための保存トリガについての第２トリガ条件と、記録トリガが示す時点を基準時とし、この基準時までの期間及び該基準時からの期間の少なくとも一方を含む期間であって、一時記録部９１ａに一時的な記録を行う期間を示すバッファ記録期間を設定する。
【００５０】
保存条件設定部４５で、第１トリガ条件として、一時記録部９１ａへの記録を開始するための記録開始トリガについての条件を設定することができる。またバッファ記録期間として、この記録開始トリガが示す基準時からの期間を設定することができる。
【００５１】
記録制御部３９は、記録トリガについての第１トリガ条件が成立すると、この記録トリガが示す時点を基準時とするバッファ記録期間に対応した時系列のデバイス値をログデータとして一時記録部９１ａに記録する。また記録制御部３９は、保存トリガについての第２トリガ条件が成立する時点、又は次に記録トリガについての第１トリガ条件が成立する時点の、いずれか早い時点までの間、記録した該ログデータを一時記録部９１ａに保持させる。そして、次に記録トリガについての第１トリガ条件が成立すると、次に該記録トリガが示す時点を基準時とするバッファ記録期間に対応した時系列のデバイス値をログデータとして、一時記録部９１ａに記録する。
【００５２】
保存制御部５０Ｃは、保存トリガについての第２トリガ条件が成立すると、記録制御部３９により一時記録部９１ａに保持されたログデータを保存メモリ３６に保存する。ここで保存制御部５０Ｃは、保存トリガについての第２トリガ条件が成立すると、記録制御部３９により一時記録部９１ａに保持され、保存トリガからみて直前の記録トリガに対応するログデータを、保存メモリに保存することが好ましい。このように保存制御部５０Ｃは、バッファ記録期間を経過した後も、バッファ記録期間中に記録したログデータを保持しておき、保存トリガが起動すると、記録トリガに対応付けて保持されたログデータを保存する。ただ記録制御部３９が保存するログデータは、直近の記録トリガに対応するログデータに限らず、２個前の記録トリガや、３回前の記録トリガとしてもよい。
【００５３】
図５が示すように，ＣＰＵユニット３と拡張ユニット４とは拡張バスの一種であるユニット間バス９０を介して接続されている。なお、ユニット間バス９０に関する通信機能は、ＰＬＣ側通信部３３の一部として実装されてもよい。またＰＬＣ側通信部３３は、ネットワーク通信回路を有してもよい。ＰＬＣ側ＣＰＵ３１は、ＰＬＣ側通信部３３を介してログデータ等をＰＣ２やクラウド等に送信してもよい。
【００５４】
ここで、ユニット間バス９０について、補足説明する。このユニット間バス９０は、次に説明する入出力リフレッシュ等が行われるバスである。ユニット間バス９０における通信制御は、いわゆるバスマスタ３８によって実現される（なお、ＰＬＣ側通信部３３の一部としてバスマスタを設けてもよいし、ＰＬＣ側ＣＰＵ３１の一部としてバスマスタ３８を設けてもよい）。バスマスタ３８は、ユニット間バス９０での通信を制御するための制御回路であって、ＰＬＣ側ＣＰＵ３１からの通信要求を受けて、拡張ユニット４との間で、後述する入出力リフレッシュ等の通信を行う。
【００５５】
拡張ユニット４はＣＰＵ４１とメモリ４２を備えている。ＣＰＵ４１は、デバイスに格納されたＣＰＵユニット３からの指示（デバイス値）に従って、フィールドデバイス１０を制御する。またＣＰＵ４１は、フィールドデバイス１０の制御結果をバッファメモリとよばれるデバイスに格納する。デバイスに格納された制御結果は入出力リフレッシュによってＣＰＵユニット３に転送される。またデバイスに格納されている制御結果は、ＣＰＵユニット３からの読み出し命令に従って、入出力リフレッシュとは異なるタイミングであっても、ＣＰＵユニット３に転送される。メモリ４２はＲＡＭやＲＯＭ等を含む。とりわけ、ＲＡＭにはバッファメモリとして使用される記憶領域が確保されている。またメモリ４２は、フィールドデバイス１０によって取得されたデータ（例：静止画データや動画データ）を一時的に保持するバッファを有してもよい。
【００５６】
図６はＣＰＵユニット３のスキャンタイムを示す模式図である。図６が示すように１つのスキャンタイムＴは、入出力のリフレッシュを行うためのユニット間通信２０１、プログラム実行２０２、ＥＮＤ処理２０４により構成されている。ユニット間通信２０１で、ＣＰＵユニット３は、ラダープログラムを実行して得られた出力データをＣＰＵユニット３内のＰＬＣ側記憶装置３２から拡張ユニット４等の外部機器に送信する。さらにＣＰＵユニット３は、拡張ユニット４等の外部機器から受信した入力データをＣＰＵユニット３内のＰＬＣ側記憶装置３２に取り込む。つまり、ＣＰＵユニット３のデバイスに記憶されているデバイス値は出力リフレッシュによって拡張ユニット４のデバイスに反映される。同様に、拡張ユニット４のデバイスに記憶されているデバイス値は、入力リフレッシュによってＣＰＵユニット３のデバイスに反映される。このように入出力リフレッシュによって、ＣＰＵユニット３のデバイスと拡張ユニット４のデバイスが同期する。
【００５７】
なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組み（ユニット間同期）が採用されてもよい。ただ、ＣＰＵユニット３のデバイスは、ＣＰＵユニット３が随時書き換えており、同様に拡張ユニット４のデバイスは拡張ユニット４が随時書き換えている。つまり、ＣＰＵユニット３のデバイスは、ＣＰＵユニット３の内部の装置によって随時アクセス可能である。同様に、拡張ユニット４のデバイスは拡張ユニット４の内部の装置によって随時アクセス可能になっている。ＣＰＵユニット３と拡張ユニット４との間では、基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行２０２で、ＣＰＵユニット３は、更新された入力データを用いてプログラムを実行（演算）する。図６が示すように、プログラム実行２０２においては複数のプログラムモジュール又はラダープログラムがプロジェクトデータに従って順番に実行されてもよい。ＣＰＵユニット３はプログラムの実行によりデータを演算処理する。なお、ＥＮＤ処理とは、ＰＣ２やＣＰＵユニット３に接続された表示器（図示せず）等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【００５８】
このように、ＰＣ２はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをＰＬＣ１に転送する。ＰＬＣ１は、入出力リフレッシュ、ラダープログラムの実行及びＥＮＤ処理を１サイクル（１スキャン）として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種の入力機器（センサ等）からのタイミング信号に基づいて、各種の出力機器（モータ等）を制御する。なお、スキャン周期とは別に、ＣＰＵユニット３や拡張ユニット４はそれぞれ内部制御周期を有している。ＣＰＵユニット３や拡張ユニット４は内部制御周期を基準としてフィールドデバイス１０等の機能を制御する。
＜ロギング＞
【００５９】
ユーザがユーザープログラムを改良したり、修正したりする際に、ＰＬＣ１がユーザープログラムを実行している際に取得されたデバイス値が役に立つことがある。そこで、ＰＬＣ１は予め指定されたデバイス値を取得し、ログデータを作成する。ここで、ＰＬＣ１が管理するデバイスには、ユーザープログラムによって利用されるものだけでなく、ユーザープログラムによって利用されないものも存在する。また、ユーザープログラムを改良したり、修正したりする際に役立つデバイスもあれば、役に立たないデバイスもある。一般にデバイスの数は数千個に及ぶため、ユーザが必要なデバイスを指定することは大きな負担となっていた。そこで、ＰＣ２は、ユーザープログラムを解析し、ユーザープログラムに使用又は記述されているデバイスをロギング対象として抽出する。これにより、ユーザの負担が軽減される。
【００６０】
ＰＬＣ１が管理するすべてのデバイスをロギングの対象とすると、スキャンタイムが長くなってしまう。なぜなら、ロギングは、ユーザープログラムの一つとして実行されたり、入出力リフレッシュの際に実行されたりするからである。時には、ロギングのもたらす遅延によって、ユーザープログラムがユーザの希望通りに動作しないこともありうる。したがって、ロギング対象のデバイスの数は適切に維持されるべきであろう。
【００６１】
ユーザープログラムは、複数のプログラム部品（例えばプログラムモジュール（メインのラダープログラムとサブのラダープログラム）、ファンクションブロック）から構成されることがある。この内、ユーザが修正を希望するプログラム部品に関連したデバイスがロギングされれば、ユーザにとって十分な場合がある。また、複数のプログラム部品の内で、ユーザは特定のプログラム部品を抽出対象から除外したり、特定のプログラム部品を抽出対象に追加したりすることを希望することもあろう。よって、プログラム部品を単位として、ロギング対象からデバイスを追加又は削除できればユーザにとって便利であろう。
【００６２】
上述したようにＣＰＵユニット３や拡張ユニット４は一つ以上の機能を有している。各機能には様々なデバイスが割り付けられている。よって、これらの機能を単位として、ロギング対象からデバイスを追加又は削除できれば、ユーザにとって便利であろう。例えば、ＣＰＵユニット３の通信機能に関する望ましくないイベントが発生した場合、ユーザはＣＰＵユニット３の通信機能に関するデバイスのデバイス値を参照することで、このイベントを解消することが容易になろう。
（プログラム作成支援装置）
【００６３】
プログラム作成支援装置の一例を、図７のブロック図に示す。この図に示すプログラム作成支援装置１２００は、一以上のユニットで構成されたＰＬＣ１で実行されるユーザープログラムの作成を支援する。このプログラム作成支援装置１２００は、ＰＣ２にユーザープログラム作成支援プログラムをロードさせて実行させて実現する他、専用のハードウェアで構築してもよい。図７に示す例では、ＰＣ２にユーザープログラム作成支援プログラムをインストールして実現した例を示している。このプログラム作成支援装置１２００は、ＰＣ側ＣＰＵ２１と、ＰＣ側メモリ部１１と、ＰＣ側記憶装置２２と、表示部７と、ＰＣ側操作部８と、通信部を備える。
【００６４】
ＰＣ側メモリ部１１はＰＣ側ＣＰＵ２１が処理を実行するための作業空間である。このような作業メモリとして、ＲＡＭ等が利用できる。
【００６５】
ＰＣ側記憶装置２２は、ＰＣ２で読み取り可能なストレージである。典型的には、ＰＣ２が備えるハードディスクなどの記憶装置であるが、固定式に限らず、可搬式の媒体やメディアとすることもできる。例えば、ＰＬＣ１が備えるメモリカード３６Ａを、ＰＬＣ１側から抜き取り、ＰＣ２側に挿入して読み取る態様としてもよい。または、ＰＣ２とネットワーク接続されたＰＬＣ１のＰＬＣ側記憶装置３２にアクセスする態様としてもよい。
【００６６】
このＰＣ側記憶装置２２は、運転記録データを記憶する運転記録データ記憶部３６Ｂの機能を実現する。運転記録データは、プロジェクトデータと、ログデータを含んでいる。プロジェクトデータは、ＰＬＣ１のユーザープログラム及び各ユニットのユニット構成情報を含む。ユニット構成情報には、各ユニットの機能、ユニット間の接続位置の情報等が含まれる。ログデータは、ＰＬＣ１の運転時におけるデバイス値等のデータである。これらプロジェクトデータとログデータとが関連付けられた運転記録データが、運転記録データ記憶部３６Ｂに記憶されている。
【００６７】
表示部７は、ログ表示制御部６１によりログを表示させる。ログ表示制御部６１は、運転記録データ記憶部３６Ｂから運転記録データをＰＣ側メモリ部１１に読み出して、運転記録データ内のログデータとプロジェクトデータとを関連付けて表示する。
【００６８】
ＰＣ側ＣＰＵ２１は、プロジェクト編集部５０Ｂ、保存制御部５０Ｃ等の機能を実現する。プロジェクト編集部５０Ｂは、ログ表示制御部６１により表示部７に表示されたプロジェクトデータの編集指示を受け付けて、このプロジェクトデータを編集する。そして編集後のプロジェクトデータを保存する際には、そのプロジェクトデータと対応するログデータとを関連付けた運転記録データとして、運転記録データ記憶部３６Ｂに記憶される。
【００６９】
保存制御部５０Ｃは、運転記録データ記憶部３６Ｂに記憶された運転記録データ内のプロジェクトデータに対して、プロジェクト編集部５０Ｂにより編集された状態で保存することを規制する。これにより、ユーザによるプロジェクトデータ内のユーザープログラム等の修正によって意図せずプロジェクトデータ全体の信ぴょう性が損なわれる事態を回避できる。具体的には、保存制御部５０Ｃが、運転記録データ記憶部３６Ｂに記憶された運転記録データ内のプロジェクトデータに対して、プロジェクト編集部５０Ｂにより編集された状態で上書き保存することを規制する。例えば、プロジェクト編集部５０Ｂによりプロジェクトデータに対して上書き操作が試みられたことを検出して、表示部７上に上書き禁止ポップアップが表示される。あるいは、編集後のプロジェクトデータを保存しようとしたとき、この編集後のプロジェクトデータを、運転記録データに含まれる元のプロジェクトデータとは別のファイルとして保存する。例えば別名での保存を促すよう、保存ファイル名の入力ダイヤログを表示させたり、自動で名称を変更して新たにコピー保存させてもよい。
（運転記録データ）
【００７０】
運転記録データは、所定のタイミングで記録される。具体的には、トラブルが発生する可能性のある時期を指定して、この間のデータを運転記録データとしてまとめて保存しておくことで、トラブル発生時の原因解析に役立てることができる。
【００７１】
運転記録データは、複数のファイルをパッケージしたものとできる。運転記録データに含める情報は、例えば管理情報データ、プロジェクトデータ、プロジェクト識別情報、デバイスデータ、画像データ、イベントデータ等が挙げられる。管理情報データは、運転記録データに何が含まれているかの情報である。その拡張子は、例えばＴＭＮとする。プロジェクトデータは、運転記録データの記録時点（例えばトラブル発生時）でのプロジェクトデータである。その拡張子は、例えばＴＰＪとする。詳細については後述する。
【００７２】
プロジェクト識別情報は、この運転記録データ記録時点でのプロジェクトデータを識別するための情報である。その拡張子は、例えばＴＰＩとする。デバイスデータは、運転記録データの記録時点でのデバイスを記録したデータであり、デバイスの数だけ存在する。その拡張子は、例えばＴＤＶとする。画像データは、運転記録データの記録時点の画像を記録したデータである。その拡張子は、例えばＴＣＡとする。イベントデータは、運転記録データの記録時点に発生していたイベントやエラーを記録したデータである。その拡張子は、例えばＴＥＶとする。これらは一例であって、この内いずれかの情報のみを運転記録データに含めてもよいし、あるいはこれ以外の情報を追加してもよい。
（プロジェクトデータの構成）
【００７３】
プロジェクトデータは、複数のデータで構成される。データの数が多い場合は、圧縮形式で保存することが好ましい。プロジェクトデータには、プロジェクトファイル、モジュール、ファンクションブロック、ユニット設定ファイル、メール設定ファイル等を含めることができる。プロジェクトファイルは、プロジェクトの設定に関する情報である。その拡張子は、ｋｐｒ例えばとする。モジュールは、ラダープログラムの情報である。その拡張子は、例えばｍｏｄとする。ファンクションブロックは、部品化されたラダープログラムの情報である。その拡張子は、例えばｋｆｂとする。ユニット設定ファイルは、ユニットの構成情報である。その拡張子は、例えばｕｅ２とする。メール設定ファイルは、メールの設定情報である。その拡張子は、例えばｍｉｌとする。これら以外にも、ユニット毎に拡張子が異なるファイルを含めてもよい。またこれらは一例であって、この内いずれかの情報のみをプロジェクトデータに含めてもよいし、あるいはこれ以外の情報を追加してもよい。
【００７４】
各データファイルの種別を示す識別情報には、ファイルの拡張子を利用できる。またファイルの拡張子を用いて、運転記録データとプロジェクトデータの関連付けを行うこともできる。例えば運転記録データについてはＴＭＮファイルが、プロジェクトデータについてはｋｐｒファイルが、それぞれＰＣ２上でユーザープログラム作成支援プログラムに関連付けられている。ＰＣ２上の該当するファイルをダブルクリックすることで、ユーザープログラム作成支援プログラムが起動される。この様子を図８に示す。ここでは、ユーザープログラム作成支援プログラムのプロジェクト編集部５０Ｂは、識別情報解釈部を備えている。ここでは識別情報解釈部の例として、ＴＰＪ解釈部５０Ｂ１とｋｐｒ解釈部５０Ｂ２を示している。表示部７上でエクスプローラ等のファイラ画面上から、ＴＭＮファイルをダブルクリックした場合、ユーザープログラム作成支援プログラムは、圧縮形式で保存されたＴＰＪファイルを解凍し、ＰＣ側メモリ部１１上にロードする。またｋｐｒファイルをダブルクリックした場合、ユーザープログラム作成支援プログラムは、ｋｐｒと同じフォルダに配置された、他の設定ファイルを合わせてＰＣ側メモリ部１１上にロードする。一方、ＴＰＪファイル及びｋｐｒファイルは、ＴＰＪ解釈部５０Ｂ１とｋｐｒ解釈部５０Ｂ２により共通のモデルデータとして解釈され、ＰＣ側メモリ部１１上にロードされる。
（モード選択部５０Ｄ）
【００７５】
さらにＰＣ側ＣＰＵ２１は、モード選択部５０Ｄの機能を実現することもできる。モード選択部５０Ｄは、編集モードや履歴再生モードを選択できる。編集モードは、プロジェクトデータを編集するモードであり、エディットモード等とも呼ばれる。また履歴再生モードは、ログ表示制御部６１による表示を行うモードであり、リプレイモード等とも呼ばれる。このように、ユーザープログラム作成支援プログラムでは、一のプログラム中で動作モードを切り替えて、トラブル解決のため過去のイベントを再生させつつ、原因と思われる箇所のユーザープログラムを修正するという作業に移行することができる。また履歴再生モードと編集モードとで共通のＧＵＩを用いることで、スムーズな作業の移行を行わせることが可能となる。
（ユーザープログラム作成支援プログラム１３００）
【００７６】
まず、モード選択部５０Ｄで履歴再生モードを選択した場合の、ユーザープログラム作成支援プログラム１３００のＧＵＩを図９に示す。この図に示すＧＵＩは、プロジェクト表示領域４２０と、ラダーモニタ４５０と、カメラモニタ４３０と、ユニットモニタ４４０を備えている。図９において、左欄のプロジェクト表示領域４２０には、プロジェクトデータ７１を構成する様々な情報が表示されている。上から順に、ユニット構成（ＣＰＵユニット、モーションユニット、アナログ入力ユニット、カメラ入力拡張ユニット等）、プログラム構成（毎スキャンモジュール、定周期モジュール、ユニット間同期モジュール、ファンクションブロック、マクロ等）が表示されている。モーションユニットについては、機能設定として軸構成や軸制御の設定パラメータが表示されている。ユーザは、図９に示すＧＵＩ上において、軸構成や軸制御をダブルクリックすることで、これらの設定パラメータについて、どのような設定内容になっているかを確認することができる。また、プロジェクト表示領域４２０において、毎スキャンモジュールに対してＭａｉｎとＳｕｂが表示されているところ、ユーザがＭａｉｎをクリックすると、中央のラダーモニタ４５０のプログラム表示領域４１０に、Ｍａｉｎプログラムが表示される。
（履歴再生モード）
【００７７】
次に履歴再生モードにおいて、トラブル発生時等に記録された運転記録データを再生する手順を、図１０に基づいて説明する。例えば、予め保存された運転記録データのデータファイル（上述した拡張子ＴＭＮの運転記録データファイル）やプロジェクトファイル（拡張子ｋｐｒのプロジェクトデータファイル）をダブルクリックすると、図１０に示すユーザープログラム作成支援プログラム１３００が起動されると共に、ダブルクリックされたファイルを解析して、含まれているファイルを展開したり、関連付けられた別ファイルを呼び出すなどして、運転記録データ保存時の状況が自動で再現される。あるいは、ユーザープログラム作成支援プログラム１３００をユーザが起動した上で、ファイルメニューなどから、運転記録データファイル等の該当するファイルを選択して展開することもできる。
【００７８】
この例では、運転記録データをダブルクリックした場合は、図１０に示す履歴再生モードでユーザープログラム作成支援プログラム１３００が起動するよう構成している。一方、プロジェクトデータをダブルクリックした場合は、図１１に示す編集モードでユーザープログラム作成支援プログラム１３００が起動するよう構成している。このようにユーザが選択したファイルに応じて、初期選択される動作モードを異ならせることで、想定されるユーザの操作に沿った動作モードを予め選択してスムーズな操作環境を提供できる。
（履歴再生モードと編集モードの切り替え）
【００７９】
ユーザープログラム作成支援プログラム１３００の起動後に、編集モードと履歴再生モードの２つの動作モードを切り替えるには、モード選択部５０Ｄの一形態であるモード選択欄５０Ｄ１から、切り替えたい動作モードを選択する。例えばモード選択欄５０Ｄ１を、図１２に示すようなプルダウンメニューで構成して、ユーザは所望の動作モードを容易に選択できる。図１２の例では、「リプレイ」を選択すると履歴再生モード（リプレイモード）に、「エディタ」を選択すると編集モード（エディタモード）に、それぞれ切り替えられる。またモード選択欄５０Ｄ１には、現在選択中の動作モードが表示されており、ユーザに対して現在の動作モードを告知する機能も奏している。
【００８０】
なおプロジェクトデータをダブルクリックして編集モードで起動したユーザープログラム作成支援プログラムを、履歴再生モードに切り替える場合、プロジェクトデータにはデバイスデータ等が指定されていないため、履歴再生モードで使用するためのデバイスデータを含む運転記録データを、別途指定するように促される。例えば、運転記録データを選択するダイヤログ画面を表示させる。
【００８１】
このように履歴再生モードにおいて、保存された運転記録データを読み込んでトラブル発生時のイベントを再生し、ユーザはトラブルの原因を推定し、これを改善するように必要な処置を検討できる。例えば、トラブルを解消できるようにラダープログラムを編集する。
【００８２】
図９の履歴再生モードにおいては、ユーザープログラムの編集が禁止されるようにしている。言い換えると、運転記録データの再生すなわち閲覧が許可され、改ざんは禁止される。これによってトラブル発生時の運転記録データの信ぴょう性が確保される。なお、ユーザープログラムの編集が禁止された履歴再生モードを、ログ再生モードと呼ぶ。
（編集モード）
【００８３】
ここで編集モードとしたユーザープログラム作成支援プログラム１３００を用いて、ユーザープログラムの編集を行う手順として、ラダープログラムを修正する例を図１３〜図１５に基づいて説明する。この例では、ユーザープログラム作成支援プログラム１３００を用いてモーションユニットの位置決め制御を行っている途中で、現在座標を示すデバイスの値が１２０００を超えていたら、動作をトルク制御に変更するようなユーザープログラムを検討している。ここでは、履歴再生モードでトラブルの発生原因を検証した結果、図１３に示すようにプログラム表示領域４１０に示すラダー図のデバイス値が１２０００を超えてから動作を変更すると、可動アームがワークに接触してしまうことが判明したため、編集モードにおいて、しきい値を１２０００から１００００に変更したいケースを想定する。まず、図１３のユーザープログラム作成支援プログラム１３００において、破線で囲む部分を選択して、ＰＣ側操作部８を構成するキーボードのＥｎｔｅｒキーを押す等して、図１４のプログラム編集画面１３１０を表示させる。このプログラム編集画面１３１０から、デバイス値入力欄１３１２において、値１２０００を、１００００に修正して、「上書」ボタン１３１４を押下する。これにより、図１５のユーザープログラム作成支援プログラム１３００のプログラム表示領域４１０に示すように、ラダープログラムが変更される。
【００８４】
またユーザープログラムを編集する他の例として、モーションユニットの位置決め制御のパラメータを修正する手順を、図１６のユーザープログラム作成支援プログラム１３００に基づいて説明する。ここでは、履歴再生モードでトラブルの発生原因を検証した結果、ワークの加速が急すぎたことが判明したため、編集モードの切り替えて、ポイントパラメータＮｏ１に移動する際のワークの速度を減少させることを考える。まず図１６のユーザープログラム作成支援プログラム１３００において、左側に表示されるプロジェクト表示欄４２０にツリー表示されるユニット構成から、モーションユニットの「ポイントパラメータ」を選択する。この状態で、変更したいパラメータを選択し、ＰＣ側操作部８であるキーボード等から値を入力する。ここで画面右側のポイントパラメータ編集欄１３２０において、速度指定欄１３２２から、速度を低い値（例えば３００ｍｍ／ｓ）に変更する。このような操作により、ユーザープログラムを所望の値に変更できる。
【００８５】
このようにしてユーザープログラムを編集した結果を保存する手順を、図１７〜図１８に基づいて説明する。ユーザープログラムを保存する際、運転記録データに含まれる元のユーザープログラムを編集してしまうと、履歴再生モードにおいてトラブル発生時のユーザープログラムを再現できなくなるため、元のユーザープログラムとは別に保存する必要がある。ここでは、別のプロジェクトデータとして保存する場合を考える。まず、図１７に示すユーザープログラム作成支援プログラム１３００のファイルメニュー１３３０のように、通常のプロジェクトと同様の手順で、プロジェクトデータの保存操作を行う。ここで、ファイルメニュー１３３０から「プロジェクトを別名保存」１３３２を選択する場合は、図１８に示すように「プロジェクトの別名保存」ダイヤログ画面１３４０が表示され、ユーザはプロジェクト名やデータファイルの保存場所を指定するよう促される。この手順であれば、運転記録データに含まれるユーザープログラムを維持したまま、新たなプロジェクトデータとして保存される。
【００８６】
一方、図１７のファイルメニュー１３３０において「プロジェクトを上書き保存」１３３４や、一般的なショートカットキーであるＣｔｒｌ＋Ｓのキーボード操作を行って上書き保存しようとすると、保存制御部５０Ｃが上書き保存を制御する。すなわち、上書き保存の指示に拘わらず、図１８に示す「プロジェクトの別名保存」ダイヤログ画面１３４０を表示させて、別名でのプロジェクトデータの保存を促す。あるいは、図１７の保存画面において、上書き保存を禁止するように、該当する「プロジェクトを上書き保存」をグレーアウトさせて選択できないようにしたり、「プロジェクトを上書き保存」をファイルメニューの選択肢として表示させないようにしてもよい。あるいは、自動的にプロジェクトデータを別名で保存することもできる。例えばファイル名に「−１」等の枝番号を付すなどして、別名のファイルを自動生成する。あるいはまた「プロジェクトを上書き保存」を選択すると、上書き保存操作が禁止されていることを示す上書き禁止ポップアップを表示させてもよい。
【００８７】
なお、既に別名での保存を行ったユーザープログラムに対して、さらに上書き保存を指示した場合は、運転記録データに含まれる元のユーザープログラムに対する操作ではないため、そのまま上書き保存が実行される。すなわち、上述した上書き保存操作を規制する保存制御部５０Ｃの動作は、トラブル発生時の運転記録データに含まれる元のプロジェクトデータやユーザープログラムが未だ別名でコピーされて保存されていない場合に実行され、一旦別名で保存されると、上書き保存操作が許容される。
（運転記録データの保存操作）
【００８８】
以上のように、ユーザはＰＣ２上にあらかじめ保存された、装置のバックアッププロジェクトに基づいて、運転記録データを再生できる。また、装置のバックアッププロジェクトがない場合は、運転記録データに保存されたプロジェクトデータに基づいて、運転記録を再生できる。ユーザは履歴再生モードで運転記録データを再生することにより、そのプロジェクトデータが対象とする処理の問題個所を見つけ、編集モードにてその問題個所を修正した場合、その変更内容をＰＣ２上に保存する操作を行うことができる。
【００８９】
一方で運転記録の再生に、運転記録データ内のプロジェクトデータを使用していた場合、編集モードで編集したプロジェクトデータの保存操作実行時に、ユーザープログラム作成支援プログラムは、保存制御部で上書き保存禁止メッセージを出して、保存をブロックしてもよい。あるいは、新しいプロジェクトデータとして、ＰＣのハードディスク等に保存してもよい。
（「上書き保存禁止」の手順）
【００９０】
このような保存制御部５０Ｃによる「上書き保存禁止」処理の一例を、図１９のフローチャートに基づいて説明する。まずステップＳ１９０１において、保存操作を開始をすると、ステップＳ１９０２において、運転記録データに保存されたプロジェクトデータを編集中か否かを判定する。編集中の場合は、ステップＳ１９０３において、ユーザに対して、保存できない旨のメッセージを表示し、保存処理をキャンセルする。一方、編集中でない場合は、ステップＳ１９０４に進んで保存処理を実行する。
（「新しいプロジェクトデータとして保存」の手順）
【００９１】
また保存制御部５０Ｃによる「新しいプロジェクトデータとして保存」処理の一例を、図２０のフローチャートに基づいて説明する。まずステップＳ２００１において、保存操作を開始をすると、ステップＳ２００２において、運転記録データに保存されたプロジェクトデータを編集中か否かを判定する。編集中の場合は、ステップＳ２００３において、ユーザに対して、新しいプロジェクトとして保存するため、ＰＣ２上のファイル保存パスの入力を要求する。そしてステップＳ２００４において、入力された保存パスに、プロジェクトの保存を実行する。一方、ステップＳ２００２において編集中でない場合は、ステップＳ２００５に進み、保存処理を実行する。
（保存したプロジェクトの照合機能）
【００９２】
編集後のプロジェクトデータは、通常のプロジェクトデータと同様に、ユーザープログラム作成支援プログラム１３００が提供する照合機能によって、現在ユーザープログラム作成支援プログラムで表示しているプロジェクトと、ＰＣ２上に保存した編集後のプロジェクトデータの間の差分を確認することができる。例えば図２１のユーザープログラム作成支援プログラム１３００の画面において、ファイルメニュー１３３０から「プロジェクト−プロジェクトの照合」１３３６を選択すると、指定されたプロジェクトデータの差分を自動で抽出して、ユーザープログラム作成支援プログラム１３００の画面上に表示させる。例えば、照合先のプロジェクトデータに対して追加された部分や変更された部分をハイライトさせつつ、削除された部分をグレーアウトさせる。また、差分を一覧表示させてハイライトさせてもよい。一例として、図１３〜図１５で編集したラダープログラムに対して、照合機能を実行した結果を図２２に示す。図２２はユーザープログラム作成支援プログラム１３００でプロジェクトデータの比較表示を行う比較表示画面１３５０の一例を示している。この図に示す例では、ラダープログラム中で編集された項目について、ステップ番号と、照合元の値及び照合先の値を、赤文字で示している。このようにしてユーザは、参照先のプロジェクトデータ、例えばトラブル発生時のユーザープログラムに対して、編集した箇所を視覚的に把握することが容易となる。
●ロギングの設定（自動抽出と加除）
【００９３】
図２３は、ＰＣ２のＰＣ側ＣＰＵ２１が、ＰＣ側記憶装置２２に記憶されているプロジェクトデータ編集プログラムを実行することで実現される機能を示している。これらの機能の一部又はすべては、ＡＳＩＣやＦＰＧＡ等のハードウエア回路により実現されてもよい。ＡＳＩＣは特定用途集積回路の略称である。ＦＰＧＡはフィールドプログラマブルゲートアレイの略称である。
【００９４】
図２３のＰＣ側ＣＰＵ２１は、プロジェクト作成部５０と、ログ設定部５１と、ログ表示制御部６１の機能を実現する。なお本実施形態では、図２３に示す機能をＰＣ２上で実現することとしたが、本発明はこれに限られず、ＰＬＣ１上で実現しても構わない。
（プロジェクト作成部５０）
【００９５】
プロジェクト作成部５０は、プログラム作成部６３と、機能設定部６２の機能を実現する。このプロジェクト作成部５０は、表示部７にプロジェクトデータ７１を作成するためのＵＩを表示し、ＰＣ側操作部８から入力されたユーザ指示に従ってプロジェクトデータ７１を作成し、ＰＣ側記憶装置２２に記憶する。ＵＩはユーザーインターフェースの略称である。プロジェクトデータ７１には、ユーザープログラムと、ＰＬＣ１のユニット構成情報等が含まれている。
【００９６】
プログラム作成部６３は、ＵＩを介したユーザ操作に基づいて、ユーザープログラムを構成する複数のプログラム部品（各モジュール）を作成する。機能設定部６２は、ＣＰＵユニット３の機能や拡張ユニット４の機能に関する設定を実行する。例えば、機能設定部６２は、ＣＰＵユニット３に設けられた機能に対していずれかのデバイスを割り付けたり、拡張ユニット４に設けられた機能に対していずれかのデバイスを割り付けたりし、機能とデバイスとの関係を示す割付情報をユニット構成情報に書き込む。なおプロジェクト作成部５０は、ユーザープログラムがどのようなプログラム部品から構成されているかを示すプログラム構成情報も、プロジェクトデータ７１として記憶させる。ＰＬＣ１全体がどのようなユニットから構成されるかを示すユニット構成情報も、プロジェクトデータ７１として記憶させる。
（ログ設定部５１）
【００９７】
ログ設定部５１は、部品指定部５２と、機能指定部６０と、デバイス抽出部５３と、手動設定部５８と、推定部５９の機能を実現する。このログ設定部５１は、プロジェクトデータ７１を解析することで、このプロジェクトデータ７１に記述されているデバイスを抽出し、抽出されたデバイスをロギング対象として設定するためのログ設定データ７２を作成する。ログ設定部５１は各種の機能を有している。部品指定部５２は、ＰＣ側操作部８から入力されるユーザ指示に従って、デバイスの抽出対象となるプログラム部品を指定する。また部品指定部５２は、ＰＣ側操作部８から入力されるユーザ指示に従って、デバイスの抽出対象から除外されるプログラム部品を指定する。
【００９８】
デバイス抽出部５３は、追加部５４と、削除部５５と、マージ部５６と、特定部５７の機能を実現する。このデバイス抽出部５３は、プロジェクトデータ７１を解析することでプロジェクトデータ７１に記述されているデバイスを抽出し、ログ設定データ７２を作成する。追加部５４は、部品指定部５２により抽出対象として指定されたプログラム部品を解析し、プログラム部品に記述されているデバイスを抽出し、抽出リストに追加する。  削除部５５は、部品指定部５２により除外対象として指定されたプログラム部品を解析し、プログラム部品に記述されているデバイスを抽出し、抽出されたデバイスを抽出リストから削除する。あるいは、削除部５５は、抽出されたデバイスを除外リストに追加する。マージ部５６は、複数のプログラム部品からそれぞれ抽出されたデバイスの内、重複して抽出されたデバイスを抽出リストから削除する。特定部５７は、プロジェクトデータ７１においてメモリカードに対する命令語を検知し、当該命令語の対象となっているデバイスを特定し、特定されたデバイスを抽出リストに追加する。
【００９９】
本実施形態では、部品指定部５２がプログラム部品を指定した後、追加部５４が、その指定されたプログラム部品を解析することにより、ロギング対象となるデバイスを抽出・追加することとしたが、本発明はこれに限られない。例えば、追加部５４は、プロジェクトデータ７１に含まれる一又は複数のプログラム部品を先に解析することでデバイスを抽出し、抽出されたデバイスを抽出リストに追加した後で、部品指定部５２によって指定されたプログラム部品に記述されたデバイスを抽出し、これを抽出リストへ追加するようにしてもよい。
【０１００】
同様にして、削除部５５は、プロジェクトデータ７１に含まれる一又は複数のプログラム部品を先に解析することで抽出リストを作成した後で、部品指定部５２によって指定されたプログラム部品に記述されたデバイスを抽出し、これを抽出リストから削除するようにしてもよい。
【０１０１】
なお、本実施形態では、説明の便宜上、追加部５４と削除部５５を分けているが、一つの機能ブロックであってもよいことは言うまでもない。
【０１０２】
手動設定部５８は、ＰＣ側操作部８を通じて入力されるユーザ指示に従って一つのデバイスや、関連した一連のデバイスを抽出リストに追加する。推定部５９は、デバイス抽出部５３により記録対象として抽出されたデバイスの数に基づきＰＬＣ１によるデバイス値の記録がユーザープログラムの実行に与える影響を推定する。ロギングによってデバイス値の数に相関した遅延時間がスキャンタイムに加算される。よって、推定部５９は、デバイス値の数に所定係数を乗算することで遅延時間を求め、遅延時間を推定結果として表示部７に表示してもよい。この遅延時間はスキャンタイムの伸びと呼ばれてもよい。
【０１０３】
機能指定部６０は、ＰＣ側操作部８から入力されるユーザ指示に従って、デバイスの抽出対象となるＣＰＵユニット３の機能や拡張ユニット４の機能を指定する。また、機能指定部６０は、ＰＣ側操作部８から入力されるユーザ指示に従って、デバイスの抽出対象から除外されるＣＰＵユニット３の機能や拡張ユニット４の機能を指定する。追加部５４は、機能指定部６０により抽出対象として指定された機能のユニット構成情報を解析し、ユニット構成情報により当該機能に割り付けられたデバイスを抽出し、抽出リストに追加する。削除部５５は、機能指定部６０により除外対象として指定された機能のユニット構成情報を解析し、ユニット構成情報により当該機能に割り付けられているデバイスを抽出し、抽出されたデバイスを抽出リストから削除する。マージ部５６は、複数の機能のそれぞれについて抽出されたデバイスの内、重複して抽出されたデバイスを抽出リストから削除する。特定部５７は、プロジェクトデータ７１においてメモリカードに対する命令語を検知し、当該命令語の対象となっているデバイスを特定し、特定されたデバイスを抽出リストに追加する。
【０１０４】
ログ表示制御部６１は、ＰＬＣ１において生成されたログデータ７３を、ログデータ保存部７４に保存する。ログデータ保存部７４は、メモリカード３６Ａ等が利用できる。ログデータ保存部７４に保存されたログデータ７３を、メモリカード３６Ａを介して読み出し、表示部７にログデータ７３を表示する。例えば、ログ表示制御部６１は、ログデータ７３に記録されているデバイス値と、プロジェクトデータ７１のプログラム部品とを関連付けて表示部７に表示してもよい。ログ表示制御部６１は、プログラマブルロジックコントローラ用のエンジニアリングツールの中核をなす。またログデータ７３は、デバイス値の他、カメラ部で撮像した画像データ等を含めてもよい（詳細は後述）。これらプロジェクトデータとログデータを含めて運転記録データとしてパッケージ化して保存する。あるいはプロジェクトデータとログデータとを関連付けて別々のファイルで保存し、プロジェクトデータ又はログデータの一方を開くと、他方のファイルも関連付け情報を参照して読み出し可能としてもよい（詳細は後述）。
●ロギングの実行
【０１０５】
図２４はＣＰＵユニット３のＰＬＣ側ＣＰＵ３１の機能を示している。これらの機能の一部又はすべてはＡＳＩＣやＦＰＧＡ等のハードウエア回路により実現されてもよい。ＡＳＩＣは特定用途集積回路の略称である。ＦＰＧＡはフィールドプログラマブルゲートアレイの略称である。
【０１０６】
ＰＬＣ側ＣＰＵ３１は、ＰＣ２から受信したプロジェクトデータ７１とログ設定データ７２をＰＬＣ側記憶装置３２に記憶しているものとする。実行部８０は、ユーザープログラムを繰り返し実行するラダー実行エンジン８０ａと、このラダー実行エンジン８０ａを制御したり、拡張ユニット４との入出力リフレッシュを実行したりするユニット制御部８０ｂと、を有している。実行部８０のラダー実行エンジン８０ａは、プロジェクトデータ７１に含まれるユーザープログラムを繰り返し実行し、ユーザープログラムに従って拡張ユニット４を制御する。なお、実行部８０のラダー実行エンジン８０ａは、ユーザープログラムに従って、デバイス部３４のＣＰＵユニットデバイス部３４ａに保持されている出力系のデバイスにデバイス値を書き込んだり、ＣＰＵユニットデバイス部３４ａに保持されている入力系のデバイスからデバイス値を読み込んだりする。
【０１０７】
一方で、実行部８０のユニット制御部８０ｂは、入出力リフレッシュにより取得した拡張ユニット４に関するデバイス値を、拡張ユニットデバイス部３４ｂに読み書きする。また、ＣＰＵユニット３と拡張ユニット４は、ユニット間バス９０によって電気的に接続されており、ユニット制御部８０ｂは、このユニット間バス９０における通信制御を行う機能、いわゆるバスマスタとしての機能を有している。ユニット制御部８０ｂがバスマスタとして機能する場合には、図２３を用いて説明したユニット構成情報、すなわち、ＰＬＣ１全体がどのようなユニットから構成されるかを示す情報に基づいて、各拡張ユニット４とリフレッシュ通信を行う。
【０１０８】
記録部８１は、ログ設定データ７２に従ってデバイス部３４（ＣＰＵユニットデバイス部３４ａ又は拡張ユニットデバイス部３４ｂ）からデバイス値を取得したり、拡張ユニット４のバッファメモリからデバイス値を取得したりして、ログデータ７３としてメモリ（例えばリングバッファ）に書き込む。上述されたように、記録部８１は、ＥＮＤ処理の際等に、ロギング処理を実行する。
【０１０９】
ＥＮＤ処理におけるロギング処理について、更に詳細に説明する。ログ設定データ７２には、部品指定部５２によって指定されたプログラム部品に記述されたデバイスや、機能指定部６０によって指定された機能（例えばユニットモニタによる監視の対象）に割り付けられたデバイスが、ロギング対象として含まれている。前者のデバイスについては、ＥＮＤ処理の際に、ログデータ７３に書き込む一方で、後者のデバイスについては、ＥＮＤ処理の際に、拡張ユニット４から対象となるデバイス（ＵＧ）のデバイス値を読み出して、ログデータ７３に書き込む。
【０１１０】
ここで、モータの現在座標や指令座標の更新周期（いわゆる制御周期）は、ラダープログラムのスキャン周期と比べて格段に短い。したがって、本実施形態では、スキャン周期と同期してＵＧのデバイス値を読み出すようにしているので、全ての現在座標や指令座標がログデータ７３に書き込まれるわけではない。しかし、本発明はこれに限られず、例えば、拡張ユニット４のメモリに、制御周期ごとに現在座標や指令座標を格納していき、スキャン周期のタイミングで、それまで格納した複数の現在座標や指令座標等を読み出すように構成することも可能である。
【０１１１】
また、記録部８１は、時刻管理部８３により保持されている時刻情報をログデータ７３の各レコードに付与する。これによりログデータ７３には時系列にデバイス値が並べられる。
【０１１２】
ロギング対象となるデバイスは、基本的に、ログ設定データ７２のロギング対象リストによって指定されるが、検知部８２によって追加のデバイスが指定されてもよい。検知部８２は、例えば、デバイス部３４に含まれているいずれかのデバイスに対する外部機器からのデバイス値の書き換えを検知してもよい。一般にデバイス値はユーザープログラムに従って書き換えられる場合と、外部機器によって書き換えられることがある。このような書き換えはユーザープログラムを解析するだけでは事前に把握することができない。記録部８１は、検知部８２によりデバイス値の書き換えが検知されたデバイスをロギング対象に追加してもよい。一般に外部機器からのデバイス値の書き換えは、ユーザにとって想定外の事象の原因となりやすい。よって、記録部８１は、外部機器により書き換えられたデバイス値をロギングすることで、ユーザによるプログラムの改良に役立つであろう。
【０１１３】
ところで、ＥＮＤ処理において、ユーザープログラムとは無関係に発行されるＵＧ読み出し命令が発行されることがある。ＵＧはバッファメモリを示すデバイス種別である。検知部８２は、ユーザープログラムとは無関係に発行されるＵＧ読み出し命令を検知してもよい。記録部８１は、検知部８２により検知されたＵＧ読み出し命令の対象となっているバッファメモリを特定し、特定したバッファメモリを記録対象として追加してもよい。この拡張ユニット４がモーションユニットである場合、このようなバッファメモリには、トルク値や現在座標位置等が記憶されている。
【０１１４】
検知部８２はＦＰＧＡ等により実現されてもよい。実行部８０はＡＳＩＣにより実現されてもよい。この場合、実行部８０はＰＬＣ側記憶装置３２に対してアドレス線を用いて読み出し／書き込み対象となっているデバイスのアドレスを指定する。よって、検知部８２はこのアドレス線を監視することで、動的に、デバイス値を更新されたデバイスを検知してもよい。これはユーザープログラムに記述されていないデバイスを記録対象として追加する際に有用であろう。
【０１１５】
検知部８２は実行部８０に設けられてもよい。この場合、実行部８０は、デバイス部３４の特定のデバイスに対してデバイス値を書き込むと共に、このデバイス値とデバイス名（デバイス番号）をログデータ７３に書き込んでもよい。この手法は、ユーザープログラムに記述されていないデバイスであって、動的に割り付け割れるデバイスを記録対象として追加する際に有用であろう。
【０１１６】
このように記録部８１はログ設定データ７２に含まれているデバイスリストとは無関係にデバイスを記録してもよい。極端な場合、ユーザはログ設定データ７２を作成せずに、ログデータ７３を取得可能となる。例えば、実行部８０が起動すると、実行部８０は、デバイス部３４におけるすべてのデバイスからデバイス値を取得する。検知部８２は、デバイスを監視しているため、実行部８０がデバイス値を読み出したことを検知し、記録部８１にデバイス値を読み出されたデバイスの情報（アドレス情報）を伝達する。記録部８１は、検知部８２により伝達されたアドレス情報に基づきデバイス部３４に含まれているすべてのデバイスからデバイス値を読み出してログデータ７３に書き込む。それ以降もデバイス部３４へのアクセスを検知部８２が検知するたびに、記録部８１はデバイス値をロギングする。
【０１１７】
ところで、記録部８１はスキャン周期ごと、又は所定の収集周期ごとにデバイス値をログデータ７３に書き込んでもよい。例えば、一周期内で検知部８２が複数回にわたるデバイスへのアクセスを検知したとしても、記録部８１は、最後のアクセスが検知されたときのデバイス値だけでログデータ７３に書き込んでもよい。これにより、ログデータ７３のデータサイズを削減することが可能となる。
【０１１８】
実行部８０はデバイスを保持するキャッシュを有していてもよい。この場合、検知部８２はキャッシュを監視することで、デバイスの書き込みを検知してもよい。
【０１１９】
ログ設定データ７２には記録対象となるデバイスを示すデバイスリストが含まれているが、記録の除外対象となるデバイスを示すデバイスリストが含まれていてもよい。この場合、記録部８１は、除外対象となるデバイスへのアクセスを検知部８２が検知すると、そのデバイスについてのデバイス値の記録をスキップする。
【０１２０】
検知部８２は実行部８０による拡張ユニット４のバッファメモリへのアクセスを検知してもよい。この場合、実行部８０は、拡張ユニット４のバッファメモリから読み出したデバイス値をＰＬＣ側記憶装置３２内に確保されたバッファ等に書き込む。記録部８１はバッファからデバイス値を読み出してログデータ７３に書き込む。
【０１２１】
実行部８０はユーザープログラムを繰り返し実行し、ユーザープログラムに従ってデバイス値を書き換える。検知部８２が実行部８０に実装されている場合、実行部８０はデバイス値を書き換える命令語を検知すると、その命令語と共にデバイス値を記録部８１に出力する。記録部８１は、命令語、デバイス値及びタイムスタンプ（デバイス値を取得した時刻）をログデータ７３に書き込んでもよい。
【０１２２】
ところで、ログ設定データ７２には、ログデータ７３のデータ形式（例：バイナリー形式やテキスト形式）が含まれてもよい。データ形式としては、１０進数１６ビット、１０進数３２ビット、±１０進数１６ビット、±１０進数３２ビット、１６進数１６ビット、１６進数３２ビット、文字列、Ｆｌｏａｔ、ＤｏｕｂｌｅＦｌｏａｔ等が、デバイスごとに設定されてもよい。このようなデータ形式はプログラム部品における命令語を解析することで判別可能である。
【０１２３】
出力部８４は、ユーザープログラムの実行が終了したとき、或いは、メモリカードへの保存トリガリレーがＯＮした場合等、所定の出力条件が満たされると、プロジェクトデータ７１、ログデータ７３、画像データをメモリカード３６Ａに書き込む。所定の出力条件が満たされるまでは、ログデータ７３がメモリ（例えばリングバッファ）に記録されていき、容量が一杯になると、一番古いログデータ７３が消去され、新しいログデータ７３が追加記録されていく（いわゆるＦＩＦＯ形式で記録する）。このメモリカード３６ＡはＣＰＵユニット３から取り外されて、ＰＣ２の装着部に装着される。これにより、ＰＣ２の表示部７にログデータ７３が表示されるようになる。なお、出力部８４は、ＰＬＣ側通信部３３を介してＰＣ２やクラウド等にログデータ７３を送信してもよい。
【０１２４】
なお、本実施形態では、所定の出力条件が満たされたときに、ログデータ７３等をメモリカード３６Ａに書き込むこととしたが、本発明はこれに限られず、例えば、内部メモリ（フラッシュメモリやハードディスク等の不揮発性メモリ）に保存しても構わない。また、少なくともログデータ７３については、所定の出力条件が満たされたときにメモリカード３６Ａ又は内部メモリ３７に保存される必要がある一方、プロジェクトデータ７１については、所定の出力条件が満たされたときに限られない。例えば、ＰＬＣ１が設定モード（ＰＲＯＧＲＡＭモード）から運転モード（ＲＵＮモード）になったタイミングで、予めメモリカード３６Ａや内部メモリ３７に保存しておいてもよい。
●ユニット構成情報の作成
【０１２５】
図２５は機能設定部６２が実行するユニット構成情報の作成処理（ユニット設定）を説明する図である。機能設定部６２はユニットエディタと呼ばれてもよい。機能設定部６２はユニットエディタの起動を支持されると、ユニット設定ＵＩ１５０を表示部７に表示する。名称欄１５１は各ユニットの名称（例：型番等）を表示する欄である。なお、各ユニットには自動的にユニット番号が付与される。この例では、ＣＰＵユニット３にユニット番号として“０”が付与されている。入力領域欄１５２は入力系のデバイスを割り付けるための欄である。この例では、ＣＰＵユニット３に入力系のデバイスとしてＲ０００からＲ０１５までのデバイスが割り付けられている。出力領域欄１５３は出力系のデバイスを割り付けるための欄である。この例では、ＣＰＵユニット３に出力系のデバイスとしてＲ５００からＲ５０７までのデバイスが割り付けられている。占有領域欄１５４は、入出力混合系のデバイスを割り付けるための欄である。エンドユニットは、いわゆる終端ユニットである。ユーザはＰＣ側操作部８を通じて拡張ユニット４の種類、接続順番、割り付けられるデバイスを設定する。機能設定部６２は、拡張ユニット４の種類、接続順番（ユニット番号）、ＣＰＵユニット３と拡張ユニット４とのそれぞれに割り付けられるデバイスを示す情報をユニット構成情報に格納する。ユニット構成情報はユニット設定情報と呼ばれてもよい。ここでは、ユニットごとにデバイスが割り付けられているが、各ユニットの機能ごとにデバイスが割り付けられてもよい。機能設定部６２はユニット構成情報をプロジェクトデータ７１の一部として管理している。
【０１２６】
このようにユニット構成情報には各ユニットに割り付けられているデバイスを示す情報や各機能に割り付けられているデバイスを示す情報が含まれている。そのため、デバイス抽出部５３はユニット構成情報を参照することで、各ユニットに割り付けられているデバイスや各機能に割り付けられているデバイスを抽出することができる。
＜デバッグ＞
【０１２７】
図２６はユーザにより実行されるユーザープログラムのデバッグ処理の概要を示すフローチャートである。
【０１２８】
ステップＳ２６０１でユーザはＰＣ２を操作し、複数のプログラム部品から構成されるユーザープログラムを作成し、ユーザープログラムを含むプロジェクトデータ７１を作成する。プログラム作成部６３はユーザ入力に従ってユーザープログラムを作成し、ＰＣ側記憶装置２２に格納する。プロジェクト作成部５０はユーザ入力に従ってプロジェクトデータ７１を作成し、ＰＣ側記憶装置２２に格納する。プロジェクトデータ７１は、プロジェクトデータ７１又はユーザープログラムを識別するための識別情報を含む。プロジェクト作成部５０は、プロジェクトデータ７１又はユーザープログラムに対して演算を実行してハッシュ値又は誤り検出符号等を求め、これらを識別情報としてプロジェクトデータ７１に付加してもよい。なお、識別情報はＧＵＩＤ（グローバル一意識別子）等であってもよい。
【０１２９】
ステップＳ２６０２でユーザはＰＣ２を操作し、プロジェクトデータ７１をＰＬＣ１に転送する。プロジェクト作成部５０はプロジェクトデータ７１をＰＣ側記憶装置２２から読み出し、ＰＣ側通信部２３を介してＰＬＣ１へ送信する。ＰＬＣ１のＣＰＵユニット３はプロジェクトデータ７１を受信すると、ＰＬＣ側記憶装置３２に書き込む。
【０１３０】
ステップＳ２６０３でユーザはＣＰＵユニット３のＰＬＣ側操作部６を操作し（例えば、ＰＲＯＧＲＡＭモードからＲＵＮモードに切り替えるモード切替スイッチを操作することにより）、プロジェクトの実行を指示する。実行部８０はプロジェクトデータ７１に含まれているユーザープログラムを実行する。記録部８１はデバイス値等をロギングし、ロギングしたデバイス値を一時記録部９１ａに格納（記録）する。出力部８４の内の保存部９３は、所定の出力条件が満たされると、一時記録部９１ａに記録されているデバイス値や、上述した画像データを、メモリカード３６Ａ又は内部メモリ３７に保存することで、ログデータ７３を作成する。
【０１３１】
また、保存部９３は、ログデータ７３に加えて、プロジェクトデータ７１をメモリに保存する。これにより、ＰＣ２において、トラブル発生時のプロジェクトデータ７１を使って、トラブル発生時の動きをモニタ上で再現できるようになる。詳細については後述する。
【０１３２】
また、保存部９３は、プロジェクトデータ７１に加えて、プロジェクトデータ７１の識別情報（ハッシュ値等）をメモリに保存する。これにより、ＰＣ２は、その識別情報を使って、現在の（リプレイ対象にしようとしている）プロジェクトデータが、実際のトラブル発生時のプロジェクトデータ７１と一致するか否かを検証できるようになる。詳細については後述する。
【０１３３】
なお、本実施形態では、所定の出力条件が満たされたタイミングで、ログデータ７３に加えて、プロジェクトデータ７１及びその識別情報をメモリに保存することとしたが、本発明はこれに限られない。例えば、ＰＬＣ１の運転開始前、運転開始時、又は運転中に、プロジェクトデータ７１及びその識別情報をメモリに保存しておき、所定の出力条件が満たされたタイミングで、ログデータ７３のみをメモリに保存するようにしてもよい。要するに、所定の出力条件が満たされた時点で、ログデータ７３と、プロジェクトデータ７１と、その識別情報とが対応付けられた状態で、メモリに保存されていればよい。
【０１３４】
また、本実施形態では、プロジェクトデータ７１をメモリに保存しているが、本発明はこれに限られず、例えば、プロジェクトデータ７１に代えて、プロジェクトデータ７１の識別情報のみをメモリに保存するようにしてもよい。この場合、ＰＣ２における現在のプロジェクトデータは、実際のトラブル発生時のプロジェクトデータ７１と一致することを前提としている。すなわち、プロジェクトデータをＰＬＣ１に転送した後、現在のプロジェクトデータは編集・改変されていないことを前提としている。仮に、両データが不一致と判定された場合には、ユーザは、現在のプロジェクトデータが、実際のトラブル発生時のプロジェクトデータ７１とは異なることを認識した上でリプレイを行えばよいので、ユーザがこれを認識しない状態でリプレイ（不正確なトラブルシューティング）が行われるのを防ぐことができる。
【０１３５】
ステップＳ２６０４でユーザはＣＰＵユニット３のＰＬＣ側操作部６を操作し、プロジェクトデータ７１とログデータ７３をＰＣ２へ転送するよう指示する。或いは、ＰＣ２のＰＣ側操作部８を操作して、メモリカード３６Ａに書き込まれたプロジェクトデータ７１、プロジェクトデータ７１の識別情報、及びログデータ７３を読み出してもよい。出力部８４はプロジェクトデータ７１とログデータ７３をＰＣ２へ送信する。なお、出力部８４はプロジェクトデータ７１の転送が禁止されていると判定した場合に、プロジェクトデータ７１の識別情報をログデータ７３に付加する構成を採用してもよい。プロジェクトデータ７１の識別情報とログデータ７３とは別々に送信されてもよい。出力部８４は、メモリカード３６Ａに書き込むための所定の条件が成立したタイミングで、プロジェクトデータ７１又はユーザープログラムに対して（例えばハッシュ関数を用いた）演算を実行してハッシュ値又は誤り検出符号等を求め、これらを識別情報としてログデータ７３に付加してもよい。なお、ＰＣ２が実行する識別情報の作成ルールと、ＣＰＵユニット３が実行する識別情報の作成ルールとが一致していれば、どのようなルールが採用されてもよい。
【０１３６】
ステップＳ２６０５でユーザはＰＣ２を操作し、ログデータ７３を再生（リプレイ）しつつトラブルの原因究明を行って、プロジェクトデータ７１を構成するユーザープログラムのデバッグを実行する。ログデータ７３の再生は、ログデータ７３に含まれている時系列のデバイス値を波形として表示部７に表示することや、デバイス値をユーザープログラムに関連付けて表示することや、ログデータ７３に含まれている時系列の画像データを表示部７に表示することを含む。ログ表示制御部６１は、仮想的な時刻を計時する内部時計を有しており、内部時計に同期してログデータ７３からデバイス値を取得して表示部７に表示する。プロジェクトデータ７１がＰＬＣ１から送信されないこともある。この場合、ログ表示制御部６１は、ＰＣ側記憶装置２２に保持されているプロジェクトデータ７１（マスタデータ）のユーザープログラムを使用して、デバイス値をユーザープログラムに関連付けて表示してもよい。ログデータ７３を再生することによるトラブルの原因究明の詳細については、後述する。
【０１３７】
ここで注意すべき点としては、ログデータ７３を取得するために使用されたプロジェクトデータ７１のバージョンと、ＰＣ２に保持されているプロジェクトデータ７１のバージョンとが異なることがある。この場合、デバイス値をユーザープログラムに関連付けて表示することが不可能となるか、又はユーザープログラムとデバイス値との関連付が誤ってしまうことも考えられる。この場合、ログ表示制御部６１は、プロジェクトデータの識別情報を使って、ログデータ７３を取得するために使用されたプロジェクトデータ７１のバージョンと、ＰＣ２に保持されているプロジェクトデータ７１のバージョンとが異なることを示す警告を表示部７に表示してもよい。なお、ログ表示制御部６１は、第一のバージョンのプロジェクトデータ７１を使用して取得されたログデータ７３を、ＰＣ２に保持されている第２のバージョンのプロジェクトデータ７１に関連付けて表示するかどうかをユーザに問い合わせもよい。ユーザがこのような表示を希望する場合、ログ表示制御部６１は、第一のバージョンのプロジェクトデータ７１を使用して取得されたログデータ７３を、ＰＣ２に保持されている第２のバージョンのプロジェクトデータ７１に関連付けて表示部７に表示する。なお、バージョンは識別情報によって管理される。ユーザがログデータ７３に問題がないことを確認すると、デバッグは不要であり、後続のステップＳ２６０６やステップＳ２６０７も不要である。ユーザはログデータ７３を分析し、ユーザープログラムのバグ等を発見し、ユーザープログラムを修正する。プロジェクト作成部５０はユーザ入力に従ってプロジェクトデータ７１を修正（更新）し、ＰＣ側記憶装置２２に格納する。
【０１３８】
ステップＳ２６０６でユーザはＰＣ２を操作し、プロジェクトデータ７１をＰＬＣ１に転送する。なお、プロジェクトデータ７１内のユーザープログラムが変更されると、識別情報が更新される。これにより、修正前のプロジェクトデータ７１と修正後のプロジェクトデータ７１とが区別可能となる。
【０１３９】
ステップＳ２６０７でユーザはＣＰＵユニット３を操作し、プロジェクトデータ７１に含まれるユーザープログラムの実行を指示することで、プロジェクトデータ７１を検証する。実行部８０はプロジェクトデータ７１に含まれているユーザープログラムを実行する。ＰＬＣ１がユーザの想定通りに稼働していれば、ユーザはプロジェクトデータ７１のデバッグに成功したと判断する。なお、ＰＬＣ１がユーザの想定通りに稼働していなければ、記録部８１によって再びデバイス値等をロギングし、保存部９３によってログデータ７３を作成する。そして、ユーザはステップＳ２６０４ないしステップＳ２６０７を再び実行する。
【０１４０】
このようにユーザはログデータ７３を参照しながらプロジェクトデータ７１をデバッグできる。そのため、デバッグの効率が向上すると考えられる。
【０１４１】
なお、プロジェクトデータ７１の転送はメモリカード３６Ａを介して実行されてもよい。つまり、ＰＣ２はメモリカード３６Ａに書き込む。ユーザはメモリカード３６ＡをＰＣ２から取り外し、ＣＰＵユニット３にメモリカード３６Ａを取り付ける。ＣＰＵユニット３はメモリカード３６Ａからプロジェクトデータ７１を読み出してＰＬＣ側記憶装置３２に書き込む。同様に、ログデータ７３の転送もメモリカード３６Ａを介して実行されてもよい。
＜プロジェクト作成部５０＞
【０１４２】
図２７はプロジェクト作成部５０の詳細を示している。機能設定部６２はＰＣ側操作部８から入力される情報に基づき拡張ユニット４のユニット構成情報、ＣＰＵユニット３の機能及び拡張ユニット４の機能を設定し、設定内容を示すユニット構成情報を作成する。ＣＰＵユニット３の機能の設定としては、ＩＰアドレスの設定、ＦＴＰクライアントに関する設定、プロジェクトデータ７１のアクセス権限の設定等がある。拡張ユニット４の機能の設定としては、入力チャネルの設定やＰＬＣ同士の通信に関する設定等がある。ユニット構成情報はプロジェクトデータ７１の一部である。編集部３１１（図２３に示すプログラム作成部６３を兼ねてもよい）は、表示部７にユーザープログラムの編集ＵＩを表示し、ＰＣ側操作部８から入力される情報に基づきユーザープログラムを編集する。デバッグ部３１４はプロジェクトデータ７１を使用してユーザープログラムをデバッグする。付加部３１２はプロジェクトデータ７１に識別情報を付加する。演算部３１３は識別情報（例：ハッシュ値や誤り検出符号）を演算により求める。なお、この演算部３１３による識別情報の演算（算出）機能については、出力部８４が、同機能を発揮するようにしてもよい。
＜ログ表示制御部６１＞
【０１４３】
図２８はログ表示制御部６１の詳細を示している。プログラム表示モジュール３２１はプロジェクトデータ７１に含まれるユーザープログラムと共に、ログデータ７３に含まれるデバイス値を表示部７に表示するモジュールである。また、プログラム表示モジュール３２１は、ユーザープログラムのみならず、プロジェクトデータ７１に含まれるプログラム構成情報、複数のプログラム部品、ユニット構成、ユニット毎の機能設定等、ユーザがプロジェクトデータ７１の設定内容を視認するための各種情報を表示可能となっている。画像表示モジュール３２３は、ログデータ７３に含まれる時系列の画像データを表示部７に表示する。波形表示モジュール３２２は、ログデータ７３に含まれる時系列のデバイス値を波形化して表示部７に表示するモジュールである。再生制御モジュール３２４は、プログラム表示モジュール３２１によって表示される情報と波形表示モジュール３２２によって表示される情報とを時間的に同期させる。これらのモジュールはエンジニアリングソフトウエアと呼ばれてもよい。なお、画像表示モジュール３２３は、プログラム表示モジュール３２１の一機能（画像表示部）として具現化されてもよいし、波形表示モジュール３２２の一機能（画像表示部）として具現化されてもよい。
●プログラム表示モジュール
【０１４４】
図２９はプログラム表示モジュール３２１の詳細を示している。時刻ＵＩ３３０ａは、ユーザープログラムと共に表示されるデバイスの取得時刻（表示時刻）を操作するためのＵＩ（例：スライドバーやカーソル等）を提供する。表示時刻制御部３３１ａは時刻ＵＩ３３０ａにより指定された表示時刻を再生制御モジュール３２４に送出したり、再生制御モジュール３２４から通知された表示時刻を時刻ＵＩ３３０ａに設定したりする。プログラム表示部３３２は、プロジェクトデータ７１を表示部７に表示したり、識別情報に対応したプロジェクトデータ７１をＰＣ側記憶装置２２から読み出して表示部７に表示したりする。また、プログラム表示部３３２はデバイス値取得部３３３ａにより取得されたデバイス値を、ユーザープログラムに使用又は記述されているデバイスと関連付けて表示する。デバイス値取得部３３３ａは、リアルタイム再生モードと履歴再生モード（ログ再生モード）とを有している。デバイス値取得部３３３ａは、リアルタイム再生モードにおいて、ＰＬＣ１のリアルタイム送信部にアクセスし、デバイス値を取得し、プログラム表示部３３２に渡す。デバイス値取得部３３３ａは、ログ再生モードにおいて、図２８の再生制御モジュール３２４にアクセスし、表示時刻とデバイス値を取得し、プログラム表示部３３２に渡す。
【０１４５】
図９は、プログラム表示部３３２等によって表示部７に表示されるＧＵＩの一例を示す模式図である。図９において、左欄のプロジェクト表示領域４２０には、プロジェクトデータ７１を構成する様々な情報が表示されている。上から順に、ユニット構成（ＣＰＵユニット、モーションユニット、アナログ入力ユニット、カメラ入力拡張ユニット）、プログラム構成（毎スキャンモジュール、定周期モジュール、ユニット間同期モジュール、ファンクションブロック、マクロ）が表示されている。モーションユニットについては、機能設定として軸構成や軸制御の設定パラメータが表示されている。ユーザは、図９に示すＧＵＩ上において、軸構成や軸制御をダブルクリックすることで、これらの設定パラメータについて、どのような設定内容になっているかを確認することができる。また、プロジェクト表示領域４２０において、毎スキャンモジュールに対してＭａｉｎとＳｕｂが表示されているところ、ユーザがＭａｉｎをクリックすると、中央のラダーモニタ４５０のプログラム表示領域４１０に、Ｍａｉｎプログラムが表示される。このように、図２８に示すプログラム表示モジュール３２１は、メモリカード３６Ａからプロジェクトデータ７１を読み出して、プロジェクト表示領域４２０に各種情報を表示したり、プログラム表示領域４１０に所望プログラムを表示したりする。
【０１４６】
ここで、プログラム表示領域４１０は、いわゆるラダーモニタ４５０の一部であり、リアルタイム再生モードにおいて単独で動作させることができるものである。×印をクリックすることで、ラダーモニタ４５０のみを非表示にすることも可能である。一方で、ログ再生モードでは、プログラム表示部３３２によって、運転記録を保存した際のプロジェクトに含まれるラダープログラムを再現することができるようになっている。また、プログラム表示部３３２は、ログ再生モードにおいて、デバイス値取得部３３３ａを介してログデータ７３に含まれるデバイス値を、Ｍａｉｎプログラムに記述されているデバイスと関連付けて表示する。表示対象となるデバイス値は、時刻指定カーソル４０４によって指定された時刻に対応するデバイス値となる（より詳細は、後述する図３２を用いて説明する）。
【０１４７】
図９でいえば、時刻表示領域４０９に表示されている２０ＸＸ／１０／０１の１８：５２：５４と対応付けられたデバイス値が、Ｍａｉｎプログラムに記述されているデバイスと関連付けて表示される。この日付の右側に表示された［３５０００／７４２８６］は、全スキャン回数７４２８６に対する現在のスキャン回数３５０００を示している。ユーザは、時刻指定カーソル４０４をドラッグして移動させることで、表示時刻及びスキャン回数の更新と共に、デバイス値の表示も更新される。例えば、更新後の表示時刻において、ＯＮしているリレーデバイスの箇所にはＯＮ表示（例えば色で塗潰す等）がなされ、ＯＦＦしているリレーデバイスの箇所にはＯＦＦ表示（例えば色抜き等）がなされる。再生ボタン４０６の機能等の詳細については、図３２を用いて後述する。
【０１４８】
図９において、右上欄には、カメラモニタ４３０の画像表示領域が設けられている。画像表示モジュール３２３は、プログラム表示モジュール３２１によってラダーモニタ４５０に表示された表示時刻と同期して、ログデータ７３から画像データを読み出してカメラモニタ４３０の画像表示領域に表示する。図９では、表示時刻である２０ＸＸ／１０／０１の１８：５２：５４と対応付けられた画像データが、カメラモニタ４３０に表示されている。また、この表示時刻の右側には、２８２／６０１と表示されているが、これは、全撮像枚数６０１に対する現在の画像データの順番（２８２枚目）を表している。ユーザは、カメラモニタ４３０において、時刻指定カーソル４０４ａをドラッグして移動させることで、表示時刻及び現在の画像データの順番を更新させることができる。
【０１４９】
このとき、時刻指定カーソル４０４ａの移動に伴って、上述したラダーモニタ４５０における時刻指定カーソル４０４も連動して移動する。例えば、時刻指定カーソル４０４ａを、表示時刻２０ＸＸ／１０／０１の１９：００：００に合わせた場合には、ラダーモニタ４５０における時刻指定カーソル４０４も、表示時刻２０ＸＸ／１０／０１の１９：００：００の位置に追従して移動する。そして、時刻指定カーソル４０４の移動に伴って、ラダーモニタ４５０におけるデバイス値も更新される。ここでは時刻指定カーソル４０４ａを移動させたが、逆も同様である。例えば、ラダーモニタ４５０における時刻指定カーソル４０４を移動させると、それに応じて、カメラモニタ４３０における時刻指定カーソル４０４ａも移動する。このような処理動作が可能になるのは、プログラム表示モジュール３２１と、画像表示モジュール３２３とが、再生制御モジュール３２４を介して表示時刻に関する同期制御を実行しているからである。
【０１５０】
また、図９において、右下欄には、ユニットモニタ４４０が表示されている。例えば、ユニットモニタ４４０は、モーションユニットにおけるバッファメモリ（ＵＧ）のデバイス値を表示する。より具体的には、ログ表示制御部６１のユニット表示モジュール３２５は、再生制御モジュール３２４から現在再生すべき表示時刻を受け取ると、その時刻と対応付けられたデバイス値をメモリカード３６Ａから読み出して、ユニットモニタ４４０に表示させる。したがって、例えば図９でいえば、表示時刻２０ＸＸ／１０／０１の１８：５２：５４と対応付けられたデバイス値の一覧が、ユニットモニタ４４０に表示される。
【０１５１】
図３０は、ログ再生モードにおけるＧＵＩを表示するためのデータソースを模式化した図である。図３０に示すように、プロジェクト表示領域４２０は、プロジェクトデータ７１に含まれるユニット構成、機能設定、プログラム構成、プログラム部品をメモリから読み出して、これらをツリー形式で表示する。ラダーモニタ４５０は、プログラム構成（どのようなプログラム部品からなるか）、プログラム部品をメモリから読み出して、ユーザによって指定されたプログラム部品を表示すると共に、ログデータ７３から表示時刻に対応するデバイス値を読み出して表示する。カメラモニタ４３０は、ユニット構成（カメラモニタがあるか否か）と機能設定（カメラモニタの機能。例えば複数ポートある場合にはポート番号、撮像周期やゲイン設定等）等の情報に基づいて、ログデータ７３から表示時刻に対応する画像データを読み出して表示する。ユニットモニタ４４０は、ユニット構成（どのようなユニットがあるか）と機能設定（モーションユニットであれば軸構成や軸制御等）等の情報に基づいて、ログデータ７３から表示時刻に対応するデバイス値を読み出して表示する。
【０１５２】
図９や図３０から分かるように、再生制御モジュール３２４の機能によって、プログラム表示モジュール３２１、画像表示モジュール３２３、ユニット表示モジュール３２５を同期制御して、連携させることができる。なお、波形表示モジュール３２２の連携の詳細については後述する。
【０１５３】
ここで、本実施形態では、現在のプロジェクトデータが、実際のトラブル発生時のプロジェクトデータ７１と一致するか否かを検証できるようにしている。より具体的には、図２９に示すプログラム表示モジュール３２１の内の照合部３３４は、ＰＬＣ１から出力されるプロジェクトデータ７１（ユーザープログラム）の識別情報と、ＰＣ側記憶装置２２に記憶されているプロジェクトデータ７１（ユーザープログラム）の識別情報とを照合し、照合結果を警告部３３５に出力する。警告部３３５は、ＰＬＣ１から出力される、運転記録を保存した時のプロジェクトデータ７１（ユーザープログラム）の識別情報と、ＰＣ側記憶装置２２に記憶されているプロジェクトデータ（ユーザープログラム）の識別情報とが不一致である場合に、警告を表示部７に表示させる。
【０１５４】
なお、本実施形態では、２つのプロジェクトデータの識別情報を比較して、一致・不一致を検証することとした。より詳細には、プロジェクトデータに含まれるプログラム構成、複数のプログラム部品、ユニット構成、ユニット毎に機能設定に対し、それぞれ識別情報が付加されており、それら全てが一致するか否かにより検証することとした。しかし、本発明はこれに限られず、少なくとも、複数のプログラム部品から構成されるユーザープログラムの識別情報を比較して、一致・不一致を検証すればよい。
●再生制御モジュール３２４
【０１５５】
図３１は再生制御モジュール３２４の詳細を示している。デバイス値提供部３４１は、ログデータ取得部３４４によりログデータ７３から取得されたデバイス値をプログラム表示モジュール３２１と波形表示モジュール３２２とに提供する。また、デバイス値提供部３４１は、ユニット表示モジュール３２５にも、ログデータ７３から取得されたデバイス値を提供する。なお、ログデータ７３から取得されたデバイス値は一時的にログデバイス３４５に格納されてもよい。プログラム表示モジュール３２１と波形表示モジュール３２２のデバイス値取得部３３３ａはデバイス値提供部３４１にデバイス値を要求する。デバイス値取得部３３３ａはログデバイス３４５からデバイス値を取得し、デバイス値取得部３３３ａに送信する。時刻デバイス３４２は再生制御部３４３により設定された表示時刻を保持するデバイスである。時刻デバイス３４２に保持されているデバイス値（時刻情報）もデバイス値提供部３４１がデバイス値取得部３３３ａへ送信してもよい。あるいは、再生制御部３４３がプログラム表示モジュール３２１の表示時刻制御部３３１ａや波形表示モジュール３２２の表示時刻制御部に時刻情報を提供してもよい。再生制御部３４３は、表示時刻を計時するための仮想的な内部時計を有し、この内部時計に従って時刻デバイス３４２に保持されている時刻情報を更新する。再生制御部３４３は、表示時刻制御部３３１ａ、波形表示モジュール３２２の表示時刻制御部に時刻デバイス３４２に保持されている時刻情報を送信する。再生制御部３４３は、表示時刻制御部３３１ａ、波形表示モジュール３２２の表示時刻制御部から表示時刻の指定を受信すると、受信した表示時刻を内部時計に設定する（時刻合わせ）。よって、プログラム表示モジュール３２１の表示時刻制御部３３１ａから表示時刻が指定されると、この表示時刻は再生制御部３４３を介して波形表示モジュール３２２の表示時刻制御部に伝達される。同様に、波形表示モジュール３２２の表示時刻制御部から表示時刻が指定されると、この表示時刻は再生制御部３４３を介して表示時刻制御部３３１ａに伝達される。これによりプログラム表示モジュール３２１の表示時刻と波形表示モジュール３２２の表示時刻とが同期する。スロー再生、早送り再生、巻き戻し再生等を実現するために、再生制御部３４３は、ＰＣ側操作部８からのユーザ入力に従って内部時計の更新速度を変更する。再生制御部３４３は、ログデータ７３に含まれている最も古いレコードの時刻情報を内部時計の初期値に設定してもよい。ログデータ取得部３４４は時刻デバイス３４２に保持されている表示時刻に関連付けられているデバイス値をログデータ７３から取得して、デバイス値提供部３４１に渡す。
【０１５６】
同様にして、再生制御部３４３は、プログラム表示モジュール３２１の表示時刻と波形表示モジュール３２２の表示時刻に加えて、画像表示モジュール３２３やユニット表示モジュール３２５の時刻を同期させるようにしてもよい。
【０１５７】
なお、本実施形態では、ログ再生モードにおいて、プログラム表示モジュール３２１、波形表示モジュール３２２、画像表示モジュール３２３、ユニット表示モジュール３２５の各表示時刻を常に同期させることとしたが、本発明はこれに限られず、例えば、同期させるか否かをユーザが選択できるようにしてもよい。例えば、各モニタ画面上に同期有無のチェックボックスを設け、デフォルトでチェック有の状態にしてもよい。そして、ユーザは、同期したくないモジュールについて、チェックを外すことにより、そのモジュールについてだけ同期させないことも可能である。このように、ログ表示制御部６１は、再生制御モジュールによって同期制御（追従制御）されるモジュールを選択する、選択機能を有していてもよい。
＜プログラムの表示ＵＩ＞
【０１５８】
図３２はプログラム表示モジュール３２１によって提供される表示ＵＩ４００を示している。図９等で説明した表示ＵＩ４００を別の観点から、更に詳述する。プログラム表示領域４１０は、プロジェクトデータ７１のユーザープログラムを表示する領域である。この例ではプログラム表示領域４１０はラダープログラム（ラダー図）を表示している。プログラム表示部３３２は、ユーザープログラムに使用又は記述されているデバイスのデバイス値をデバイス値取得部３３３ａにより取得し、ユーザープログラムと共に表示する。例えば、プログラム表示部３３２は、リレーデバイスがＯＮであればＯＮを示すアイコン４０１ａをユーザープログラム上に重ねて表示してもよい。プログラム表示部３３２は、リレーデバイスがＯＦＦであればＯＦＦを示すアイコン４０１ｂをユーザープログラム上に重ねて表示してもよい。プログラム表示部３３２は、出力系のデバイスであるＤＭ１００のデバイス値をデバイス値取得部３３３ａにより取得し、ユーザープログラムにおけるＤＭ１００の記述と重ねて表示してもよい。この例では、ＤＭ１００の記述の下にデバイス値の表示領域４０３が設けられている。プログラム表示部３３２は表示領域４０３にデバイス値を表示する。なお、再生制御モジュール３２４は表示時刻の更新と共にデバイス値も更新するため、プログラム表示部３３２は、ユーザープログラムと共に表示されているデバイス値を更新する。
（再生制御欄４０２）
【０１５９】
プログラム表示領域４１０の下段には、保存されたデバイス値等のログデータの再生を操作するための再生制御欄４０２を設けている。具体的には、時刻ＵＩ３３０ａは時刻デバイス３４２から取得した表示時刻に応じて時刻指定カーソル４０４を右から左へ移動させる。時刻指定カーソル４０４はポインタ１０１によりドラッグ可能である。時刻指定カーソル４０４がポインタ１０１によりドラッグされたことを時刻ＵＩ３３０ａが検知すると、表示時刻制御部３３１ａは再生制御部３４３に表示時刻の更新を停止させ、時刻指定カーソル４０４のドラッグ量を再生制御部３４３に通知する。再生制御部３４３は、ドラッグ量に応じて内部時計のカウント値（表示時刻）を調整する。時刻ＵＩ３３０ａは、表示時刻の更新速度（例：・・・、２．０倍、１．０倍、０．５倍、０．１倍、・・・）を速度指定部４０５に表示してもよい。なお、速度指定部４０５は、複数の更新速度のリストを表示し、その内の一つの更新速度を選択可能なプルダウメニューによって実現されてもよい。時刻ＵＩ３３０ａは、速度指定部４０５に対するポインタ１０１によるクリックを検知すると、このようなプルダウメニューを表示し、更新速度の選択を受け付けてもよい。
【０１６０】
再生ボタン４０６はデバイス値の時系列的な表示を指示するためのボタンである。時刻ＵＩ３３０ａは再生ボタン４０６がポインタ１０１によりクリックされたことを検知すると、表示時刻制御部３３１ａに表示時刻の更新を開始するよう再生制御部３４３に指示する。この指示はデバイス値の表示の開始の指示又は表示の再開の指示に相当する。ワンステップ逆再生ボタン４０７は、表示時刻をワンステップずつ更新（巻き戻し）しながらデバイス値を時系列的に表示することを指示するためのボタンである。時刻ＵＩ３３０ａはワンステップ逆再生ボタン４０７がポインタ１０１によりクリックされたことを検知すると、表示時刻制御部３３１ａに表示時刻を一ステップ戻すように指示する。ワンステップ再生ボタン４０８は、表示時刻をワンステップずつ更新しながらデバイス値を時系列的に表示することを指示するためのボタンである。時刻ＵＩ３３０ａはワンステップ再生ボタン４０８がポインタ１０１によりクリックされたことを検知すると、表示時刻制御部３３１ａに表示時刻を一ステップ進めるように指示する。なお、ワンステップ再生が実行されているときは、ワンステップ逆再生ボタン４０７又はワンステップ再生ボタン４０８が操作されない限り、再生制御部３４３は表示時刻を更新しない。ワンステップ再生が実行されているときに、再生ボタン４０６が操作されると、再生制御部３４３は速度指定部４０５により指定された更新速度で表示時刻の更新を再開する。時刻表示領域４０９は時刻デバイス３４２に保持されている表示時刻を表示する領域である。表示時刻制御部３３１ａは、時刻デバイス３４２から取得された表示時刻を時刻表示領域４０９に表示する。
＜表示部ＨＭＩのエミュレータ＞
【０１６１】
ＰＬＣ１は外付けの表示装置である表示器ＨＭＩを接続可能である。表示器ＨＭＩはタッチパネル式の入力装置を有していてもよい。表示器ＨＭＩはＰＬＣ１のデバイス部３４に保持されているデバイス値を読み出して表示装置に表示する。プロジェクト作成部５０は表示器ＨＭＩに表示されるＵＩと、ＵＩに表示されるデバイス値を設定し、プロジェクトデータ７１に保存する。デバッグ部３１４は、表示器ＨＭＩのエミュータを有しており、プロジェクトデータ７１に従ってエミュータを動作させることで、表示器ＨＭＩの動作を確認する。ログ表示制御部６１は、表示器ＨＭＩのエミュレータに対してログデータ７３のデバイス値を供給する。表示器ＨＭＩのエミュレータは、時系列的に提供されたデバイス値をＵＩに表示する。
＜ログ表示に関するフローチャート＞
●プログラム表示モジュール
【０１６２】
図３３はプログラム表示モジュール３２１によって実行される表示処理を示している。なお、ステップＳ３３０１、ステップＳ３３０２及びステップＳ３３０９はＰＬＣ１からプロジェクトデータ７１を取得できない場合にのみ実行されてもよい。ＰＬＣ１からプロジェクトデータ７１を取得できる場合、ＰＬＣ１からプロジェクトデータ７１が使用される。ＰＬＣ１からプロジェクトデータ７１を取得できない場合、ＰＣ２に保持されているプロジェクトデータ７１が使用される。
【０１６３】
ステップＳ３３０１でＰＣ側ＣＰＵ２１（照合部３３４）はＰＬＣ１に保持されているプロジェクトデータ７１の識別情報と、ＰＣ２に保持されているプロジェクトデータ７１の識別情報とを取得する。
【０１６４】
ステップＳ３３０２でＰＣ側ＣＰＵ２１（照合部３３４）はＰＬＣ１に保持されているプロジェクトデータ７１の識別情報と、ＰＣ２に保持されているプロジェクトデータ７１の識別情報とが一致するかどうかを判定する。両者が一致しなければ、ＰＣ側ＣＰＵ２１はステップＳ３３０９に進む。ステップＳ３３０９でＰＣ側ＣＰＵ２１（警告部３３５）はＰＬＣ１に保持されているプロジェクトデータ７１の識別情報と、ＰＣ２に保持されているプロジェクトデータ７１の識別情報とが一致しないことを示す警告を表示部７に表示する。両者が一致する場合、ＰＣ側ＣＰＵ２１はステップＳ３３０３に進む。
【０１６５】
ステップＳ３３０３でＰＣ側ＣＰＵ２１（プログラム表示部３３２）はＰＬＣ１又はＰＣ側記憶装置２２からプロジェクトデータ７１を取得する。
【０１６６】
ステップＳ３３０４でＰＣ側ＣＰＵ２１（プログラム表示部３３２）はＰＣ側操作部８から入力された情報に基づきログ再生モードが選択されているのか、それともリアルタイム再生モードが選択されているのかを判定する。リアルタイム再生モードが選択されていれば、ＰＣ側ＣＰＵ２１はステップＳ３３１０に進む。ステップＳ３３１０でＰＣ側ＣＰＵ２１（デバイス値取得部３３３ａ）は再生制御モジュール３２４を介さずにＰＬＣ１のリアルタイム送信部からデバイス値を取得する。ステップＳ３３１１でＰＣ側ＣＰＵ２１（プログラム表示部３３２）はプロジェクトデータ７１に含まれるユーザープログラムと共にデバイス値を表示部７に表示する。ログ再生モードが選択されていれば、ＰＣ側ＣＰＵ２１はステップＳ３３０５に進む。
【０１６７】
ステップＳ３３０５でＰＣ側ＣＰＵ２１（デバイス値取得部３３３ａ）は再生制御モジュール３２４を起動し、再生制御モジュール３２４から表示時刻とログデータ７３のデバイス値と取得する。
【０１６８】
ステップＳ３３０６でＰＣ側ＣＰＵ２１（プログラム表示部３３２）はプロジェクトデータ７１に含まれるユーザープログラムと共にデバイス値と表示時刻を表示部７に表示する。
【０１６９】
ステップＳ３３０７でＰＣ側ＣＰＵ２１（表示時刻制御部３３１ａ）は時刻ＵＩ３３０ａにより時刻指定が検知されたかどうかを判定する。上述したように時刻指定は時刻指定カーソル４０４の操作によって実行される。時刻指定が検知されていなければ、ＰＣ側ＣＰＵ２１はステップＳ３３０５に戻る。時刻指定が検知されていれば、ＰＣ側ＣＰＵ２１はステップＳ３３０８に進む。
【０１７０】
ステップＳ３３０８でＰＣ側ＣＰＵ２１（表示時刻制御部３３１ａ）は再生制御モジュール３２４の再生制御部３４３に、時刻指定カーソル４０４により入力された指定時刻を通知する。ＰＣ側ＣＰＵ２１はステップＳ３３０５に戻る。
●波形表示モジュール
【０１７１】
図３４は波形表示モジュール３２２によって実行される表示処理を示している。
【０１７２】
ステップＳ３４０１でＰＣ側ＣＰＵ２１（波形表示部３３６）はＰＣ側操作部８から入力された情報に基づきログ再生モードが選択されているのか、それともリアルタイム再生モードが選択されているのかを判定する。リアルタイム再生モードが選択されていれば、ＰＣ側ＣＰＵ２１はステップＳ３４０６に進む。ステップＳ３４０６でＰＣ側ＣＰＵ２１（波形表示モジュール３２２のデバイス値取得部）は再生制御モジュール３２４を介さずにＰＬＣ１のリアルタイム送信部からデバイス値を取得する。ステップＳ３４０７でＰＣ側ＣＰＵ２１（波形表示部３３６）はデバイス値を表示部７に表示する。ログ再生モードが選択されていれば、ＰＣ側ＣＰＵ２１はステップＳ３４０２に進む。
【０１７３】
ステップＳ３４０２でＰＣ側ＣＰＵ２１（波形表示モジュール３２２のデバイス値取得部）は再生制御モジュール３２４を起動し、再生制御モジュール３２４からデバイス値と表示時刻を取得する。
【０１７４】
ステップＳ３４０３でＰＣ側ＣＰＵ２１（波形表示部３３６）はデバイス値と表示時刻を表示部７に表示する。
【０１７５】
ステップＳ３４０４でＰＣ側ＣＰＵ２１（波形表示モジュール３２２の表示時刻制御部）は時刻ＵＩ３３０ｂにより時刻指定が検知されたかどうかを判定する。上述したように時刻指定はバー１０３によって実行される。時刻指定が検知されていなければ、ＰＣ側ＣＰＵ２１はステップＳ３４０２に戻る。時刻指定が検知されていれば、ＰＣ側ＣＰＵ２１はステップＳ３４０５に進む。
【０１７６】
ステップＳ３４０５でＰＣ側ＣＰＵ２１（波形表示モジュール３２２の表示時刻制御部）は再生制御モジュール３２４の再生制御部３４３に、バー１０３により入力された指定時刻を通知する。ＰＣ側ＣＰＵ２１はステップＳ３４０２に戻る。
●再生制御モジュール
【０１７７】
図３５は再生制御モジュール３２４によって実行される再生制御を示している。
【０１７８】
ステップＳ３５０１でＰＣ側ＣＰＵ２１（ログデータ取得部３４４）はＰＬＣ１からログデータ７３を取得し、ＰＣ側記憶装置２２に格納する。
【０１７９】
ステップＳ３５０２でＰＣ側ＣＰＵ２１（再生制御部３４３）は内部時計の時刻を初期化する。
【０１８０】
ステップＳ３５０３でＰＣ側ＣＰＵ２１（再生制御部３４３）は内部時計の時刻を取得し、時刻を時刻デバイス３４２に格納する。
【０１８１】
ステップＳ３５０４でＰＣ側ＣＰＵ２１（再生制御部３４３）は時刻デバイス３４２に保持されている表示時刻に対応するデバイス値をログデータ７３から取得し、ログデバイス３４５に格納する。これにより、デバイス値提供部３４１はプログラム表示モジュール３２１や波形表示モジュール３２２に対してデバイス値と表示時刻とを提供可能となる。
【０１８２】
ステップＳ３５０５でＰＣ側ＣＰＵ２１（再生制御部３４３）は表示時刻制御部３３１ａから時刻指定を受信したかどうかを判定する。時刻指定を受信していれば、ＰＣ側ＣＰＵ２１はステップＳ３５０６に進む。時刻指定を受信していなければ、ＰＣ側ＣＰＵ２１はステップＳ３５０７に進む。
【０１８３】
ステップＳ３５０６でＰＣ側ＣＰＵ２１（再生制御部３４３）は表示時刻制御部３３１ａからの時刻指定に従って内部時計の時刻を変更する。
【０１８４】
ステップＳ３５０７でＰＣ側ＣＰＵ２１（再生制御部３４３）は表示時刻制御部３３１ａから更新速度の変更指示を受信したかどうかを判定する。変更指示を受信していれば、ＰＣ側ＣＰＵ２１はステップＳ３５０８に進む。変更指示を受信していなければ、ＰＣ側ＣＰＵ２１はステップＳ３５０３に進む。
【０１８５】
ステップＳ３５０８でＰＣ側ＣＰＵ２１（再生制御部３４３）は表示時刻制御部３３１ａから指定された更新速度に従って内部時計の更新速度を変更する。その後、ＰＣ側ＣＰＵ２１はステップＳ３５０３に進む。
（イベント履歴表示機能）
【０１８６】
また本実施形態に係るＰＬＣ用エンジニアリングツールは、トラブル解決につながるイベントログを厳選して記録し、表示させることができる。ＰＬＣやその拡張ユニット４には、発生した各種イベントを記録するイベントログ機能が存在している。また、デバイスの値を、制御周期毎、任意周期、書き換え毎等のタイミングで記録するロギング機能も存在している。ユーザはトラブルが発生した時に、それらの機能を組み合わせることにより、事後的に原因を探ることができる。しかしながら、各種のログ機能は、ＰＬＣ上の不揮発性記憶領域に主に記録されることが多く、このようなＰＬＣの不揮発性記憶領域は、サイズに制約があることが多い。また、ログの件数が増えて記憶領域が上限に達すると、新しいログを残すため古いログから順次消去していくことが一般的である。このため、発生しているログが数千件や数万件のオーダーになると、トラブル解決に繋がる原因のログが消去されている可能性が高くなり、トラブルの原因追跡が難しくなるという問題があった。これに対して、記録時間を延ばすためユーザが保存対象となるイベントを絞り込むと、今度はトラブル解決に役立つイベントを保存し損なうおそれが出てくる。また一方で、記録が消去されず残っていたとしても、表示される件数が多いとトラブル解決に繋がるイベントが他のイベントに埋もれてしまい、見つけ難くなる。
【０１８７】
そこで本実施形態に係るＰＬＣ用エンジニアリングツールでは、トラブル解決に繋がるイベントを厳選して記録する。またその厳選して記録されたイベントを表示する際には、フィルタして表示したり、関連するログ情報を表示したりすることができ、これによってユーザのトラブル解決を容易にすることが可能となる。このようなＰＬＣ用エンジニアリングツールの一例を、図３６のブロック図に示す。
【０１８８】
ＰＬＣ用エンジニアリングツールは、ＰＬＣ１の動作を規定するユーザープログラムを評価するためのツールである。図３６は、ＰＬＣ用エンジニアリングツールである専用のプログラムをインストールしたＰＣ２に、ＰＬＣ１を接続したプログラマブルロジックコントローラシステムを示している。このＰＬＣ用エンジニアリングツールは、専用プログラムをインストールしたＰＣ２で実現しているが、本発明はＰＬＣ用エンジニアリングツールを専用プログラムをインストールしたＰＣに限定するものでなく、専用のハードウェアでＰＬＣ用エンジニアリングツールを実現してもよい。また図３６の例では、ＰＣ２とＰＬＣ１が別体で構成されているが、これらを統合してもよい。
【０１８９】
図３６に示すＰＬＣ１も、上述したＰＬＣと同様の構成を備える。すなわち、ユーザープログラムを繰り返し実行するプログラム実行部５１４、このプログラム実行部５１４によって参照される記憶領域であるデバイスを有するデバイス部３４、このデバイス部３４に記憶されているデバイス値を現在時刻と共にログデータとして時系列に記録すると共に、ＰＬＣ１又はこのＰＬＣ１により制御される被制御装置にて発生した複数のイベントを発生時刻と共にイベントデータとして時系列に記録する一時記録部９１ａ、及び運転時において所定の保存条件が満たされるとこの一時記録部９１ａに記録されているログデータ及びイベントデータを保存する保存メモリ３６を備える。そしてＰＬＣ用エンジニアリングツールは、このＰＬＣ１において実行される、グラフィカルプログラミング言語で記述されるユーザープログラムの作成を支援するためのプログラム作成支援装置である。
【０１９０】
図３６に示すＰＬＣ用エンジニアリングツールは、表示部７と、ＰＣ側ＣＰＵ２１と、ＰＣ側記憶装置２２と、ＰＣ側メモリ部１１と、ＰＣ側操作部８と、ＰＣ側通信部２３とを備えている。表示部７は、ラダー図などのユーザープログラムを表示させる。また表示部７は、ＰＣ２に接続したモニタとする他、表示器ＨＭＩを利用してもよい。
【０１９１】
ＰＣ側記憶装置２２は、運転記録データ保持部２２ｂの機能を実現する。運転記録データ保持部２２ｂは、ＰＬＣ１の運転時に保存メモリ３６に保存されたログデータ及びイベントデータを、運転記録データとして記憶する。
【０１９２】
ＰＣ側ＣＰＵ２１は、記録設定部１２と、デバイス表示制御部１３と、イベント表示制御部１４と、選択受付部１６の機能を実現する。イベント表示制御部１４は、運転記録データ保持部２２ｂから読み出したイベントデータに含まれる複数のイベント及びこの複数のイベントの各々の発生時刻を、表示部７に一覧表示する。選択受付部１６は、イベント表示制御部１４により一覧表示された複数のイベントの中から一つの選択を受け付ける。デバイス表示制御部１３は、運転記録データ保持部２２ｂから読み出したログデータに含まれ、かつ、選択受付部１６により選択されたイベントの発生時刻に対応する時刻に記録されたデバイス値を、ユーザープログラム上に重ねて表示する。イベント表示制御部１４は、ＰＬＣ１の動作状態又はこのＰＬＣ１により制御される被制御装置の動作状態を変更する特定イベントを、表示部７上に選択的に一覧表示するよう構成している。
【０１９３】
また記録設定部１２は、ＰＬＣ１の一時記録部９１ａに対し、複数のイベントのうち特定イベントのみを記録するよう設定する。
【０１９４】
ここで特定イベントは、プログラム実行部５１４によるユーザープログラムの実行と独立してユーザが行った操作に関するイベントを含む。ユーザ操作に関するイベントとしては、例えばユーザープログラム及びＰＬＣ１の構成情報を含むプロジェクトデータの書き換え、ＰＬＣ１の設定を行う設定モードと、ＰＬＣ１上でユーザープログラムを実行させる運転モードとのモード切替、ＰＬＣ１に接続可能なケーブルの挿抜、ＰＬＣ１に取り付け可能な記憶媒体の挿抜、被制御装置の電源のＯＮ／ＯＦＦ等が挙げられる。
【０１９５】
一方でイベント表示制御部１４は、プログラム実行部５１４によるユーザープログラムの実行に従って、ＰＬＣ１内で自動的に実行される処理に応じたイベントを非表示とする。このような自動実行される処理に応じたイベントとしては、例えばＰＬＣ１と接続された外部装置とＴＣＰ接続又はＦＴＰ接続するときの通信開始又は通信切断や、ＰＬＣ１内に用意されたフォルダ又はファイルへの書き込み等が挙げられる。このように、イベント表示制御部１４でもって、ユーザが介在したユーザ操作に応じたイベントは、トラブル解決に役立つので表示させる。その一方で、ユーザが介在しなくても自動的に実行される処理に応じたイベントについては非表示としている。非表示とする理由は、自動実行される処理は頻度が多すぎるのでログとして残すと膨大になる上、内部処理であるためイベントログを参照したところで、これに基づいてどのようにすればトラブル解決につながるのかが判り難いため、これらがトラブル解決に有用な場面は少ないと思われないからである。このように、イベントの表示内容を、トラブル解決に有用と思われるものと、そうでないものに分類して、選択的に表示部７に表示させることで、ユーザによるトラブルシューティングを支援することが期待できる。
【０１９６】
以下、図３６に基づき各部材の詳細を説明する。記録設定部１２は、運転記録データ等各種のデータをＰＬＣ側記憶装置３２に保存させるよう設定する。ＰＬＣ側記憶装置３２に保存されるデータとしては、ＰＬＣ１の運用時に、ＰＬＣ１で記録された時系列の複数のデバイス値、各デバイス値の記録時刻に応じた第一時刻データ、ＰＬＣ１又はＰＬＣ１により制御される被制御装置にて発生した複数のイベント、各イベントの発生時刻に応じた第二時刻データ等が挙げられる。ＰＬＣ側記憶装置３２は、ＰＬＣ１内部の書き換え可能な不揮発性メモリや、挿抜可能なＳＤカード（商品名）等が利用できる。特にＳＤカードは、データの移行が簡単なため、好ましい。例えばＰＣ２をＰＬＣ１に接続していなくとも、ＰＬＣ側記憶装置３２に保存されたデータにアクセスすることが可能となる。
【０１９７】
デバイス表示制御部１３は、表示部７で表示させたラダー図上に、デバイス値を表示する。イベント表示制御部１４は、表示部７上に複数のイベントを一覧表示する。この際イベント表示制御部１４は、ＰＬＣ１の動作状態又はＰＬＣ１により制御されるモータ等の被制御装置の動作状況を変更する特定イベントを、選択的に表示させることができる。
【０１９８】
図３６に示すＰＬＣ用エンジニアリングツールでＰＬＣ用の設定を行った後、プロジェクトデータをＰＬＣ側に転送する。具体的には、ＰＣ側通信部２３から、ＰＬＣ１のＰＬＣ側通信部３３に、記録すべきイベントやその優先順位を規定したプロジェクトデータを転送する。またプロジェクトデータには、運転記録データに関する設定や、ユーザープログラム、各機能の設定などを含めてもよい。
（表示部７）
【０１９９】
表示部７は、ラダー図等を表示させる。具体的には表示部７は、イベントを一覧表示させるイベント表示欄１４００と、ラダー図を表示させるラダーモニタ欄１５００を備えることができる。そしてイベント表示欄１４００で、ユーザが選択受付部１６を用いて、ここではＰＣ側操作部８を操作してＧＵＩ上から任意のイベントを選択すると、この選択されたイベントの時刻と対応するラダー図がラダーモニタ欄１５００で選択されて表示される。
【０２００】
また表示部７は、さらにカメラモニタ欄１６００を備えてもよい。カメラモニタ欄１６００は、プログラマブルロジックコントローラシステムに接続されたカメラ部９８で時系列に撮像された複数の画像データを表示させる。そしてイベント表示欄１４００で、任意のイベントを選択すると、この選択されたイベントの時刻と対応するラダー図がラダーモニタ欄１５００で選択されると共に、選択されたイベントの時刻と対応する画像データがカメラモニタ欄１６００に表示される。
【０２０１】
ＰＬＣ１は、ＰＬＣ側ＣＰＵと、ＰＬＣ側記憶装置３２と、ＰＬＣ側通信部３３を備える。ＰＬＣ側記憶装置３２には、上述の通り記録設定部１２での設定に従い、ＰＬＣ１にて記録された時系列の複数のデバイス値、各デバイス値の記録時刻に応じた第一時刻データ、ＰＬＣ１又はＰＬＣ１により制御される被制御装置にて発生した複数のイベント、各イベントの発生時刻に応じた第二時刻データ等が保存される。
【０２０２】
複数のデバイス値とイベントとは、ＰＬＣ側記憶装置３２に分けて記録される。デバイス値もイベントも、ある程度収集した後は、古いデータを削除していくが、好ましくはイベントをデバイス値よりも長い時間残す。トラブルの原因が、直近のイベントのみならず、過去の変更に起因することが起こり得ることに対応させたものである。また、これらデバイス値の第一時刻データと特定イベントの第二時刻データも保存することで、これらを同期させることが可能となる（詳細は後述）。
【０２０３】
ここでイベント表示制御部１４は、ＰＬＣ１の動作状態又はＰＬＣ１により制御される被制御装置の動作状態を変更する特定イベントを、選択的に表示部７上に表示させる。例えばプログラマブルロジックコントローラ用エンジニアリングツールは、トラブル解決に繋がる厳選されたイベントをＰＬＣ側記憶装置３２に記録すると共に、これを表示させる際には、それらのイベントのみをフィルタ表示させてもよい。これにより、多種多様なイベントの内から、トラブル解決に有用なイベントを選択的に表示させて、トラブルの原因究明に役立てることができる。またこのイベント表示制御部１４は、デバイス値を時系列波形として表示部７に表示させることができる。
【０２０４】
またＰＬＣ用エンジニアリングツールは、同期ソフトウエアモジュール１５を備えてもよい。同期ソフトウエアモジュール１５は、デバイス表示制御部１３における表示対象時刻である第一時刻データと、イベント表示制御部１４における表示対象時刻である第二時刻データとを同期させて、表示部７において連動させて表示させることができる。
【０２０５】
あるいは、すべてのイベントを記録する他、イベントの内から選別した特定イベントのみをＰＬＣ側記憶装置３２に記録するよう構成してもよい。例えば記録設定部１２で、特定イベントのみをＰＬＣ側記憶装置３２に記録させるように設定できる。これにより、トラブルシューティングに有用な特定イベントのみを記憶装置に記憶させて、これを表示部７に表示させることで、検索や絞り込みなどを行わずともトラブルシューティングに無関係なイベントに埋もれてしまう事態を回避できる。この場合、デバイス値については運転記録データとしてすべて記録しつつ、イベントについては、ＰＬＣ１の動作状態又はＰＬＣ１により制御されるモータ等の被制御装置の動作状態を変更する特定イベントのみを記録している。これにより、選別した特定イベントのみをイベント表示欄１４００に選択的に表示させることが可能となる。また特定イベントを、別途記録されたデバイス値と同期させることで、トラブル解析に有益となる。さらに選択的に表示される特定イベントは、優先順位付けしてもよい。
（特定イベント）
【０２０６】
表示部７に表示させる特定イベントには、ＰＬＣ１のユーザープログラム及び各ユニットのユニット構成情報を含むプロジェクトデータの書き換え、被制御装置の電源のＯＮ／ＯＦＦ、プログラマブルロジックコントローラの設定を行う設定モード又はプログラマブルロジックコントローラを実行させる運転モードのモード切替、各種履歴のクリア、記憶装置の挿抜、他の機器と通信を行うイーサネットケーブルの挿抜、ＰＬＣシステムに接続される表示器ＨＭＩから要求されるデバイス書換信号、あるいはＰＬＣシステムに接続されるモーションユニットのモーションエラー等が挙げられる。例えばモード切替は、ＰＬＣ１の設定時の動作モードであるＰＲＯＧＲＡＭモードと、実運用時のＲＵＮモードの切り替えを行ったタイミングを示している。また表示器ＨＭＩからのデバイス書換信号は、トラブル発生時に、予め定められた復旧手順に沿って操作したか否かを確認したい場合に、有用となる。
（イベントログの記録動作）
【０２０７】
ここで、イベントログの記録動作を、プログラマブルロジックコントローラシステムの機能ブロック図である図３７に基づいて説明する。この図に示すプログラマブルロジックコントローラシステムは、ＣＰＵユニット３と拡張ユニット４を備える。
（ＣＰＵユニット３）
【０２０８】
ＣＰＵユニット３は、ＰＬＣ側ＣＰＵ３１と、ＰＬＣ側時刻管理部８３と、イベント管理部７６と、イベントログメモリ部７５と、ログメモリ部７３Ｂと、デバイスメモリ部３４Ｂを備える。ＰＬＣ側ＣＰＵ３１は、ユーザープログラムの実行や拡張ユニット４とのデータ交換、データ収集処理等を行う。
（ＰＬＣ側時刻管理部８３）
【０２０９】
ＰＬＣ側時刻管理部８３は、イベントやログデータの記録時の時刻を管理するための部材である。
（デバイスメモリ部３４Ｂ）
【０２１０】
デバイスメモリ部３４Ｂは、プログラムや各機能で使用する値が格納されているデバイスが配置されているメモリである。デバイスメモリ部３４Ｂは、通信からのデバイス書換に関してもイベントとして記録可能である。検知はＰＬＣ側ＣＰＵ３１で行う。
（イベント管理部７６）
【０２１１】
イベント管理部７６は、発生したイベントをイベントログメモリ部７５に記録する。このイベント管理部７６は、ＰＬＣ１のスキャン動作とは非同期に、ＰＬＣ側ＣＰＵ３１から発行されたイベントを受け取り、イベントログに保存する。すなわちＰＬＣ１のＥＮＤ処理の繰り返し周期とは独立して、任意のタイミングでイベントログの記録を行うことができる。またイベント管理部７６は、複数のイベントが同時に発生した場合の調停や、イベントログメモリ部７５のメモリ容量がフルになった場合に古いデータから順次消去する制御等も行う。
（イベントログメモリ部７５）
【０２１２】
イベントログメモリ部７５は、発生したイベントを格納するメモリである。イベントログメモリ部７５には、第二時刻データと共にイベントが格納されている。
（ログメモリ部７３Ｂ）
【０２１３】
ログメモリ部７３Ｂは、収集したデータを格納するメモリである。これらイベントログメモリ部７５やログメモリ部７３Ｂは、共通のμｓオーダの時刻データを有しており、表示時にスキャンレベルで連動させることが可能である。このためログメモリ部７３Ｂは、スキャン動作と同期して、スキャン動作の一部として収集したデータを記録する。またログデータの記録時には、第一時刻データと共に記録する。
（拡張ユニット４）
【０２１４】
拡張ユニット４は、カメラ部９８やモーションユニットなどの被制御装置を接続する、一以上のユニットである。各拡張ユニット４は、バッファメモリ部７７と、機能実行部９６を備える。バッファメモリ部７７は、拡張ユニット４の機能を制御するための値やモニタ値が格納されているメモリである。機能実行部９６は、拡張ユニット４の機能を実行している。また機能実行部９６は、拡張バス−ＣＰＵユニット制御部と情報を伝達する。例えばＰＬＣ側ＣＰＵ３１からの要求を受けて、又は自動的に動作して、状態や結果をバッファメモリ部７７に格納する。一例として、モーション系の拡張ユニットの場合は、ワークが装置のリミットに達した等モーション系のエラーが発生した場合、それを機能実行部９６が検出する。また、拡張ユニット４側からイベントを発行することも可能である。
（イベントログ記録動作のフローチャート（ＣＰＵユニット３で発生するイベントの場合））
【０２１５】
図３７のプログラマブルロジックコントローラシステムにおいて、イベントログを記録する動作は、ＣＰＵユニット３側で発生するイベントに対して行うことも、拡張ユニット４側で発生するイベントに対して行うこともできる。
【０２１６】
次に、ＣＰＵユニット３で発生するイベントを記録する動作を、図３８のフローチャートに基づいて説明する。まずステップＳ３８０１において、ＣＰＵユニット３のＰＬＣ側ＣＰＵ３１がイベントを検出する。次にステップＳ３８０２において、イベント管理部７６が、ＣＰＵユニット３のＰＬＣ側ＣＰＵ３１からイベントを受け取る。そしてステップＳ３８０３において、イベントログメモリ部７５の残容量を確認する。残容量がない場合は、ステップＳ３８０４に進み、古いイベントをイベントログメモリ部７５から削除する。一方、残容量がある場合はステップＳ３８０５に進み、μｓオーダの時刻データを取得して、イベントログメモリ部７５にイベントを格納する。
【０２１７】
次に、拡張ユニット４で発生するイベントを記録する動作を、図３９のフローチャートに基づいて説明する。まずステップＳ３９０１において、拡張ユニット４の機能実行部９６がイベントを検出する。次にステップＳ３９０２において、拡張ユニット４の機能実行部９６が、イベントを入れたメッセージ通信を、拡張バスに送信する。さらにステップＳ３９０３において、ＣＰＵユニット３のＰＬＣ側ＣＰＵ３１が割り込み処理を用いて、イベントを入れたメッセージ通信を、拡張バスから受信する。次いでステップＳ３９０４において、ＣＰＵユニット３のＰＬＣ側ＣＰＵ３１が、メッセージ通信からイベントを取り出す。さらにステップＳ３９０５において、イベント管理部７６が、ＣＰＵユニット３のＰＬＣ側ＣＰＵ３１からイベントを受け取る。そしてステップＳ３９０６において、イベントログメモリ部７５の残容量を確認する。ここで残容量がない場合はステップＳ３９０７において、古いイベントをイベントログメモリ部７５から削除した上で、ステップＳ３９０８に進む。一方、ステップＳ３９０６において残容量がある場合は、ステップＳ３９０８に進んで、μｓオーダの時刻データを取得して、イベントログにイベントを格納する。
【０２１８】
次に、イベントログ表示時のフィルタ動作を、図４０のフローチャートに基づいて説明する。まずステップＳ４００１において、イベントログ全件をメモリに読み込む。次にステップＳ４００２において、イベント表示時にフィルタしたい、イベントのグループをＵＩで選択する。さらにステップＳ４００３において、イベントログから１件、イベントを取り出す。そしてステップＳ４００４において、取り出したイベントが、ＵＩで選択したイベントに該当している場合、表示用イベントログに格納する。さらにステップＳ４００５において、イベントログメモリ部７５にイベントが残っているか否かを判定し、残っている場合はステップＳ４００３に戻って処理を繰り返す。一方、残っていない場合はステップＳ４００６に進み、表示用イベントログをＧＵＩに全件表示する。
（選択的に表示するイベントの例）
【０２１９】
選択的に表示するイベントの例を、以下に示す。まず重度エラーは、ＰＬＣ１が運転を継続できない重篤なエラーである。重度エラーの検出主体は、ＣＰＵユニット３（制御部・周辺制御）である。
【０２２０】
また軽度エラーは、ＰＬＣ１が運転を継続できる軽微なエラーである。ただし軽度エラーは、トラブルの解決に繋がらない可能性もある。経度エラーの検出主体は、ＣＰＵユニット３（制御部・周辺制御）や拡張ユニット４である。
【０２２１】
電源ＯＮ／ＯＦＦは、電源の投入と遮断についてのイベントである。トラブルの周辺で発生することがある。電源ＯＮ／ＯＦＦの検出主体は、ＣＰＵユニット３（周辺制御）である。
【０２２２】
アラームリレーは、ユーザが指定したアラーム履歴である。アラームリレーの検出主体は、ＣＰＵユニット３（ＰＬＣ側ＣＰＵ３１）である。
【０２２３】
デバイス値変更は、通信によるデバイス値の書き換えである。装置によってはトラブルに関係なく発生するが、トラブルの起点となることもある。このデバイス値変更の検出主体は、ＣＰＵユニット３（ＰＬＣ側ＣＰＵ３１）である。
【０２２４】
運転記録保存は、運転記録データの保存トリガのタイミングや記録に関する。この運転記録データも、トラブル解析の起点となり得る。運転記録保存の検出主体は、ＣＰＵユニット３（ＰＬＣ側ＣＰＵ３１）である。
【０２２５】
ＲＵＮ／ＰＲＯＧＲＡＭの切換は、ＰＬＣ１の運転モードの切り替えに関する情報である。モード切換の際にトラブルが起きることもあるが、通常運用時にも普通に発生する。ＲＵＮ／ＰＲＯＧＲＡＭの切換の検出主体は、ＣＰＵユニット３（ＰＬＣ側ＣＰＵ３１）である。
【０２２６】
プロジェクト変更は、例えばＰＬＣ１のプログラム変更がきっかけとなり、トラブルが発生することが多いため、トラブル解析に有益と考えられる。プロジェクト変更の検出主体は、ＣＰＵユニット３（ＰＬＣ側ＣＰＵ３１）である。
【０２２７】
履歴クリアも、トラブルを解決するための判断材料になる。特に、これがいつ消去されたかは重要な要素となり得る。履歴クリアの検出主体も、ＣＰＵユニット３（イベント管理部７６）である。
【０２２８】
メモリカードは、その挿抜等がトラブル解決の鍵となることがある。その反面、装置の運用方法によってはトラブルが発生していなくても日々イベントが発生することもある。メモリカードの検出主体は、ＣＰＵユニット３（周辺制御）である。
【０２２９】
カレンダタイマは、履歴データを元にトラブル解決の解析をするため、このカレンダタイマ値の変更を記録することが重要な場合があるため、候補に挙げられる。反面、時刻の自動調整をするような運営をしている場合は、定期的にイベントが発生する。カレンダタイマの検出主体は、ＣＰＵユニット３（周辺制御）である。
【０２３０】
イーサネット通信は、イーサネットのハードウェアレベルの接続イベントは、接触不良等の障害の予兆として発生することがあるため、候補に挙げられる。ただ、電源ＯＮ／ＯＦＦのタイミングでも日々発生する。イーサネット通信の検出主体は、ＣＰＵユニット３（周辺制御）や拡張ユニット４である。
【０２３１】
シリアル通信は、シリアルのハードウェアレベルの接続が、接触不良等の障害の予兆として発生することがあるため、有益と考えられる。シリアル通信の検出主体は、拡張ユニット４である。
【０２３２】
イベントエラーは、イベントが大量に発生した場合のエラーである。イベントエラーの検出主体は、ＣＰＵユニット３（イベント管理部７６）である。
【０２３３】
このようなトラブルに対する考察に記述している通り、イベントの種類によってはマスクしたくなる場合もあるし、マスクせず表示したい場合もある。つまり、ユーザの装置の運用方法次第でマスクの必要性が変化する。そこで、ユーザにグループ毎に表示を選択させることを可能とした。
【０２３４】
イベントの選定に際しては、例えば図４１に示すエラーイベント履歴フィルタ設定部１３７０で、グループ毎に個別に表示のフィルタリング設定を行うことができる。ここでは、表示される候補となるエラーやイベント中から、非表示とするエラーやイベントを選択する。この例では、画面左側に表示対象のイベントを表示一覧１３７１に、右側に非表示とするイベントを非表示一覧１３７２に、それぞれ列挙しており、イベント毎に自由に移動させることで表示か非表示かを選択できる。
（イベントとして記録しているが、敢えて表示しないイベントの例）
【０２３５】
次に、イベントとして記録しているが、敢えて表示していないイベントの例を説明する。これらは、ユーザに公開しても、ユーザでのトラブルの公開に直結しないイベントである。
【０２３６】
まず、ＰＬＣ１上でのプログラムのコンパイルエラー発生時の詳細情報は、ユーザに公開しても、対処方法を示すことが難しいため表示しない。
【０２３７】
ファームウェアアップデート情報は、ファームウェアの更新により記録フォーマットが変化する可能性があり、継続して記録を残せない可能性があるため、表示しない。
【０２３８】
自己テストの実施履歴は、ユーザに公開しても、対処方法を示すことが難しいため表示していない。
（敢えて記録していないイベントのリスト（優先度高））
【０２３９】
次に、敢えて記録していないイベントの内で、優先度の高いものの例を以下に示す。まずユーザープログラムの組み方によっては、件数が多すぎて簡単にログが溢れるため、記録から除外しているものとして、ＴＣＰ接続の交信開始／終了がある。これは通信毎に交信を切断するシステムの場合、１秒に複数回のオーダーでイベントが発生する可能性がある。
【０２４０】
またＦＴＰ接続開始／切断は、データを１件収集する毎に、上位にファイルをアップデートするような使い方の場合、イベント件数が増加する。
【０２４１】
さらにフォルダ／ファイルの書込みは、データを１件収集する毎に、メモリカードに記録するような使い方の場合、イベント件数が増加する。
【０２４２】
次に、システムの運用時には発生する可能性が低く、トラブル解決に繋がらない可能性があるため、記録から除外するイベントの例を説明する。まず、リモート操作要求受付は、運用時ではなく、装置のプログラミング時や立ち上げ時やデバッグ時に使用する可能性が高い機能であるのため、記録から除外する。また、強制値リフレッシュのセット、強制値リフレッシュのリセット、強制値リフレッシュの全解除、強制値リフレッシュの解除等は、いずれも運用時ではなく、装置のデバッグ時やトラブル発生後の解析に使用する可能性が高い機能のため、記録から除外する。
（敢えて記録していないイベントの例（優先度低））
【０２４３】
さらに敢えて記録していないイベントの内、優先度の低いものの例を、説明する。まず、レシピ実行操作は、システムの組み方次第では、ワーク１件毎にイベントが発生して簡単にログ容量が溢れる可能性がある。
【０２４４】
またＤＢ接続サービス開始、ＤＢ接続サービス停止、ＤＢ接続サービス終了は、いずれも運用時に頻繁に発生するイベントになり、簡単にログ容量が溢れる可能性がある。
【０２４５】
またユーザ認証有効／無効、ログオン成功、ログオン失敗、ＣＰＵユニットのバックアップ成功、ＣＰＵユニットのバックアップ失敗、ＣＰＵユニットのリストア成功、ＣＰＵユニットのリストア失敗等は、いずれも運用時ではなく、装置のプログラミング時や立ち上げ時やデバッグ時に使用する可能性が高い機能である。
【０２４６】
ここで、デバイス表示制御部１３とイベント表示制御部１４で特定イベントを選択的に表示部７上に表示させる様子を、図４２のＰＬＣ用エンジニアリングツール１３８０のＧＵＩ画面に基づいて説明する。この図に示すＰＬＣ用エンジニアリングツール１３８０は、プロジェクトデータ編集プログラム、あるいはプログラム表示モジュール３２１によって提供される表示ＵＩを示している。このプロジェクトデータ編集プログラムは、モード選択部５０Ｄでログ再生モード（リプレイモード）が選択されており、編集が禁止されたプロジェクトデータ再生プログラムとして機能する。なお、編集機能を有しないプロジェクトデータの再生のみを行うプロジェクトデータ再生プログラムも、ＰＬＣ用エンジニアリングツールの一種に包含される。
【０２４７】
このプロジェクトデータ編集プログラムは、左側にプロジェクト表示領域４２０、中央にプログラム表示領域４１０、右側にイベント表示欄１４００を、それぞれ設けている。またプログラム表示領域４１０は、上段にラダーモニタ欄１５００を、下段に再生制御欄４０２を、それぞれ設けている。ラダーモニタ欄１５００ではラダープログラム（ラダー図）を表示している。
（再生制御欄４０２）
【０２４８】
再生制御欄４０２では、イベント表示欄１４００等で選択されたイベントを再生するための再生制御を行う。具体的には、図３１の再生制御モジュール３２４の機能によって、選択されたイベントと対応する、記録済みのデバイス値と画像データを含む運転記録データをＰＬＣ側記憶装置３２から読み込んで、再生させる。再生制御欄４０２は、図３２等で説明したのと同様、時間軸を表すスライダ状の操作バー４０４ｄと、この操作バー４０４ｄ上を移動可能な時刻指定カーソル４０４、速度指定部４０５、再生ボタン４０６、ワンステップ逆再生ボタン４０７、ワンステップ再生ボタン４０８等を備えている。
【０２４９】
再生ボタン４０８を押下することで、過去のイベントの状態を再生できる。また操作バー４０４ｄ上の時刻指定カーソル４０４を操作することにより、どの時刻の状態を再生するのかを選択できる。さらに、デバイス表示制御部１３とイベント表示制御部１４は連動しており、いずれかで選択した項目に対応して、各部の表示が連動される。例えば再生制御欄４０２で操作バー４０４ｄ上をクリックする等して再生時刻を指示すると、指定した再生時刻のデバイス値が、ラダーモニタ欄１５００のラダー図上に表示される。同様にイベント表示欄１４００において、操作バー４０４ｄ上で指定された再生時刻に発生したイベントが反転表示される。一方で、イベント表示欄１４００において、一覧表示されたイベントのいずれかをクリックすることにより、操作バー４０４ｄ上の再生時間が連動して移動する。このように、ＥＳＭ同士の連動を行うことにより、トラブルの解析が容易になる。
【０２５０】
なおイベント表示欄１４００に表示されるイベントが、収集された運転記録データ内で発生したイベントか否かを、判別できるようにしてもよい。例えば運転記録データ内に発生したイベントを着色して表示させることで、ユーザは視覚的に判別できる。
【０２５１】
特定イベントをイベント表示欄１４００に表示させる例を図４３に示す。ここでは、イベント表示欄１４００において、イーサネットリンクアップとイーサネットリンクダウンが一覧表示されている。イーサネットリンクアップは、イーサネットの接続が開始したことを表す。このイーサネットリンクアップは、例えばイーサネットケーブルが接続された場合、ハブの電源がＯＮされた場合等に発生する。またイーサネットリンクダウンは、イーサネットの接続が終了したことを表す。例えばイーサネットケーブルが切断された場合や、ハブの電源がＯＦＦになった場合等に発生する。図４３の例では、短期間にイーサネットリンクアップとイーサネットリンクダウンが繰り返されており、イーサネットの接続が不安定になり、その結果としてトラブルが発生して保存トリガがＯＮになったものと想定される。
【０２５２】
なお図４３において、イベント表示欄１４００において表示されるイベントの内、着色される等ハイライトされたイベント１４０２は、デバイス表示制御部１３の記録時間に発生したイベントであることを示す。またイベント表示欄１４００において反転表示されたイベント１４０１は、現在選択中の再生表示に係るイベントである。イベント表示欄１４００において選択された再生時刻に対応して、再生制御欄４０２における時刻指定カーソル４０４の位置が移動される。同様に、ラダーモニタ欄１５００において対応するラダー図にデバイス値が表示される。また、再生制御欄４０２における時刻指定カーソル４０４を移動させると、これに応じてイベント表示欄１４００やラダーモニタ欄１５００の表示も連動して、対応する再生時刻の表示に更新される。
【０２５３】
また再生制御欄４０２における操作バー４０４ｄは、保存トリガを発生させるイベント（保存トリガ発生イベント）の発生した時刻に保存トリガバー４０４ｅを表示させてもよい。保存トリガバー４０４ｅは、赤色等で示すことで視認し易くしている。なお図４３の例では、イベント表示欄１４００においてトリガ発生イベントが選択されているので、操作バー４０４ｄにおいて、灰色の時刻指定カーソル４０４と赤色のトリガ発生イベントが重なって表示されている。このため時刻指定カーソル４０４の指定する再生時刻を示す時刻表示領域４０９においては、イベント表示欄１４００で選択され反転表示されている第二時刻データと同じ２０１８／１１／２０  １１：２０：４６が表示されている。
【０２５４】
さらに再生制御欄４０２において、時刻表示領域４０９と並べて、総スキャン回数及び表示中のスキャン回数を示すスキャン回数表示領域４０９ｂを設けてもよい。図４３の例では、全部で３６０６２９スキャン分のデバイス値セットが運転記録データとして記憶されていることが判る。また時刻表示領域４０９には、現在時刻指定カーソル４０４で現在指定されている再生時刻（１１：２０：４６）が表示されているところ、この再生時刻では、１９３５２６スキャン目のデバイス値セットがラダーモニタ表示欄に表示されていることが、スキャン回数表示領域４０９ｂに示されている。
【０２５５】
図４３の状態から、時刻指定カーソル４０４を、右側、すなわち図４３より時間を進めた時刻に移動させた状態を、図４４に示す。ここでは、操作バー４０４ｄの保存トリガバー４０４ｅよりも時間的に遅い位置に、時刻指定カーソル４０４を位置させている。すなわち、時刻指定カーソル４０４を右に移動させるほど時刻が進み、左に行くほど時刻が戻る。
【０２５６】
また操作バー４０４ｄは、ＰＬＣ側記憶装置３２に保存された運転記録データの記録時間に対応させている。すなわち、操作バー４０４ｄの左端が、運転記録データの記録開始時、右端が運転記録データの記録終了時となる。そして上述の通り、運転記録データの記録を行う保存トリガ発生イベントの発生した時刻に保存トリガバー４０４ｅが操作バー４０４ｄ上に表示されている。すなわち操作バー４０４ｄにおいて、保存トリガバー４０４ｅの左側が、保存トリガより前の収集時間Ｔａ、保存トリガバー４０４ｅの右側が、保存トリガよりも後の収集時間Ｔｂを示している。
【０２５７】
図４４の例では、イベント表示欄１４００で選択されているイベントである「イーサネットリンクダウン」のイベントの第二時刻データは、２０１８／１１／２０の１１：２０：４９であるため、これに連動して再生制御欄４０２の時刻表示領域４０９に表示される時刻も、この時刻と一致されて表示されている。なお、図４４のラダーモニタ欄では、一部の入力接点及び一部の出力要素において、色塗り表示がなされている。これは、時刻指定カーソル４０４が図４４に示す位置にあるときの時刻において、それらの入力接点及び出力要素がＯＮになっていることを示している。
【０２５８】
さらに、イベント表示欄１４００において、ハイライトされたイベント１４０２以外のイベントを選択した例を、図４５に示す。イベント表示欄１４００においてハイライトされていないイベントは、デバイス値などの運転記録データが保存されていないため、保存期間外となり、対応する運転記録データが存在しない。この例では、イベント表示欄１４００において２０１８／１１／２０  １０：３８：０８が選択されているが、この時刻の運転記録データが保存されていないため、再生制御欄４０２においては、時刻指定カーソル４０４は、操作バー４０４ｄの下限である左端に貼り付いた状態となる。すなわち操作バー４０４ｄでは保存期間よりも以前や以後の時刻を表現できないため、保存期間外の時間がイベント表示欄１４００で選択された場合は、連動表示ができないため、操作バー４０４ｄで対応する最も近い値に移動される。具体的には、保存期間よりも古い時刻の場合は操作バー４０４ｄの左端に、保存期間よりも新しい時刻の場合は操作バー４０４ｄの右端に、時刻指定カーソル４０４が位置される。
【０２５９】
また時刻表示領域４０９には、操作バー４０４ｄの右端に対応する時刻２０１８／１１／２０  １１：２０：２０が表示されており、保存トリガバー４０４ｅが示す保存トリガによって保存された運転記録データは、２０１８／１１／２０  １１：２０：２０以降となる。またスキャン回数表示領域４０９ｂは、最も古いスキャン回数である１回目を指している。
【０２６０】
なお、イベント表示欄１４００においては、２０１８／１１／２０  １１：２０：３８以降のイベントがハイライト表示されている。これは、保存期間の内、２０１８／１１／２０  １１：２０：２０〜１１：２０：３７までは特に何のイベントもなかったためであり、この間に記録されたイベントが存在しない以上、イベント表示欄１４００でも表示がない状態となっている。また、図４５では、図４４と比較して、色塗り表示された入力接点及び出力要素が増加している。これは、時刻指定カーソル４０４が図４５に示す位置にあるときの時刻では、図４４よりもＯＮになった入力接点及び出力要素が増えていることを示している。
（カメラモニタ欄１６００）
【０２６１】
以上の例では、イベント表示欄１４００と再生制御欄４０２とラダーモニタ欄１５００の表示を同期させる例を説明したが、これに加えて、カメラ部９８で撮像した画像データも同様に、同期させて表示させることができる。このような例を図４６のＧＵＩに示す。この例では、画面右上に、画像データを表示するカメラモニタ欄１６００を設けている。この例でも同様に、イベント表示欄１４００で任意のイベントを選択すると、この選択されたイベントの時刻と対応する時刻に撮像された画像データが表示され、再生制御欄４０２における時刻指定カーソル４０４も、対応する再生時刻に移動される。また、再生ボタン４０６を押下すると、カメラモニタ欄１６００において動画が再生されると共に、時間の経過に応じて対応するイベントにイベント表示欄１４００の選択が切り替わり、またラダーモニタ欄１５００におけるラダー図のデバイス値も更新されていく。これによって、トラブル発生時の動作を動的に再現できるので、トラブルの原因究明に有効となり得る。
【産業上の利用可能性】
【０２６２】
本発明に係るプログラマブルロジックコントローラ用プログラム作成支援装置は、ＦＡにおけるＰＬＣシステムのトラブルシューティングに好適に利用できる。
【符号の説明】
【０２６３】
１…ＰＬＣ
２…ＰＣ
３…ＣＰＵユニット
４、４ａ、４ｂ…拡張ユニット
４ｃ…カメラ入力拡張ユニット
４ｄ…モーションユニット
４ｅ…通信ユニット
５…ＰＬＣ側表示部
６…ＰＬＣ側操作部
７…表示部
８…ＰＣ側操作部
９…通信ケーブル
１０、１０ａ、１０ｂ…フィールドデバイス
１１…ＰＣ側メモリ部
１２…記録設定部
１３…デバイス表示制御部
１４…イベント表示制御部
１５…同期ソフトウエアモジュール
１６…選択受付部
２１、２１Ｂ…ＰＣ側ＣＰＵ
２２…ＰＣ側記憶装置
２２ｂ…運転記録データ保持部
２３…ＰＣ側通信部
３１…ＰＬＣ側ＣＰＵ
３２…ＰＬＣ側記憶装置
３３…ＰＬＣ側通信部
３４…デバイス部；３４ａ…ＣＰＵユニットデバイス部；３４ｂ…拡張ユニットデバイス部
３４Ｂ…デバイスメモリ部
３５…プロジェクト記憶部
３６…保存メモリ；３６Ａ…メモリカード
３６Ｂ…運転記録データ記憶部
３７…内部メモリ
３８…バスマスタ
３９…記録制御部
４１…ＣＰＵ
４２…メモリ
４５…保存条件設定部
４６…記録バッファ設定部
４７…保存トリガ設定部
５０…プロジェクト作成部
５０Ｂ…プロジェクト編集部
５０Ｂ１…ＴＰＪ解釈部；５０Ｂ２…ｋｐｒ解釈部
５０Ｃ…保存制御部
５０Ｄ…モード選択部；５０Ｄ１…モード選択欄
５１、５１Ｂ…ログ設定部
５２…部品指定部
５３…デバイス抽出部
５４…追加部
５５…削除部
５６…マージ部
５７…特定部
５８…手動設定部
５９…推定部
６０…機能指定部
６１…ログ表示制御部
６２…機能設定部
６３…プログラム作成部
７１…プロジェクトデータ
７２…ログ設定データ
７３…ログデータ
７３Ｂ…ログメモリ部
７４…ログデータ保存部
７５…イベントログメモリ部
７６…イベント管理部
７７…バッファメモリ部
８０…実行部
８０ａ…ラダー実行エンジン
８０ｂ…ユニット制御部
８１…記録部
８２…検知部
８３…時刻管理部
８４…出力部
９０…ユニット間バス
９１ａ…一時記録部
９３…保存部
９６…機能実行部
９８…カメラ部
１０１…ポインタ
１５０…ユニット設定ＵＩ
１５１…名称欄
１５２…入力領域欄
１５３…出力領域欄
１５４…占有領域欄
２０１…ユニット間通信
２０２…プログラム実行
２０４…ＥＮＤ処理
３１１…編集部
３１２…付加部
３１３…演算部
３１４…デバッグ部
３２１…プログラム表示モジュール
３２２…波形表示モジュール
３２３…画像表示モジュール
３２４…再生制御モジュール
３２５…ユニット表示モジュール
３３０ａ…時刻ＵＩ
３３１ａ…表示時刻制御部
３３２…プログラム表示部
３３３ａ…デバイス値取得部
３３４…照合部
３３５…警告部
３４１…デバイス値提供部
３４２…時刻デバイス
３４３…再生制御部
３４４…ログデータ取得部
３４５…ログデバイス
４００…表示ＵＩ
４０１ａ…アイコン
４０１ｂ…アイコン
４０２…再生制御欄
４０３…表示領域
４０４、４０４ａ…時刻指定カーソル
４０４ｄ…操作バー
４０４ｅ…保存トリガバー
４０５…速度指定部
４０６…再生ボタン
４０７…ワンステップ逆再生ボタン
４０８…ワンステップ再生ボタン
４０９…時刻表示領域
４０９ｂ…スキャン回数表示領域
４１０…プログラム表示領域
４２０…プロジェクト表示領域
４３０…カメラモニタ
４４０…ユニットモニタ
４５０…ラダーモニタ
５１４…プログラム実行部
１０００、２０００…プログラマブルロジックコントローラシステム
１２００…プログラム作成支援装置
１３００…ユーザープログラム作成支援プログラム
１３１０…プログラム編集画面
１３１２…デバイス値入力欄
１３１４…「上書」ボタン
１３２０…ポイントパラメータ編集欄
１３２２…速度指定欄
１３３０…ファイルメニュー
１３３２…「プロジェクトを別名保存」
１３３４…「プロジェクトを上書き保存」
１３４０…「プロジェクトの別名保存」ダイヤログ画面
１３３６…「プロジェクト−プロジェクトの照合」
１３５０…比較表示画面
１３７０…エラーイベント履歴フィルタ設定部
１３７１…表示一覧
１３７２…非表示一覧
１４００…イベント表示欄
１４０１…反転表示されたイベント
１４０２…ハイライトされたイベント
１５００…ラダーモニタ欄
１６００…カメラモニタ欄
Ｌｄ…ラダー図
Ｔ…スキャンタイム
Ｔａ…収集時間
Ｔｂ…収集時間
ＷＫ…対象物
【図１】
2020134986.tif 000003
【図２】
2020134986.tif 000004
【図３】
2020134986.tif 000005
【図４】
2020134986.tif 000006
【図５】
2020134986.tif 000007
【図６】
2020134986.tif 000008
【図７】
2020134986.tif 000009
【図８】
2020134986.tif 000010
【図９】
2020134986.tif 000011
【図１０】
2020134986.tif 000012
【図１１】
2020134986.tif 000013
【図１２】
2020134986.tif 000014
【図１３】
2020134986.tif 000015
【図１４】
2020134986.tif 000016
【図１５】
2020134986.tif 000017
【図１６】
2020134986.tif 000018
【図１７】
2020134986.tif 000019
【図１８】
2020134986.tif 000020
【図１９】
2020134986.tif 000021
【図２０】
2020134986.tif 000022
【図２１】
2020134986.tif 000023
【図２２】
2020134986.tif 000024
【図２３】
2020134986.tif 000025
【図２４】
2020134986.tif 000026
【図２５】
2020134986.tif 000027
【図２６】
2020134986.tif 000028
【図２７】
2020134986.tif 000029
【図２８】
2020134986.tif 000030
【図２９】
2020134986.tif 000031
【図３０】
2020134986.tif 000032
【図３１】
2020134986.tif 000033
【図３２】
2020134986.tif 000034
【図３３】
2020134986.tif 000035
【図３４】
2020134986.tif 000036
【図３５】
2020134986.tif 000037
【図３６】
2020134986.tif 000038
【図３７】
2020134986.tif 000039
【図３８】
2020134986.tif 000040
【図３９】
2020134986.tif 000041
【図４０】
2020134986.tif 000042
【図４１】
2020134986.tif 000043
【図４２】
2020134986.tif 000044
【図４３】
2020134986.tif 000045
【図４４】
2020134986.tif 000046
【図４５】
2020134986.tif 000047
【図４６】
2020134986.tif 000048