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