(57)【要約】  【課題】現場レベルで故障発生を未然に防止できるようにし、工作機械の長寿命化と安定運転の確保を図る。  【解決手段】ＰＭＣにより工作機械での異常の発生または非発生の状態を常時検出し、当該検出結果に基づいて発生した異常の異常番号を不揮発性メモリの異常履歴記憶領域に書き込んで履歴を残す。そして、異常番号毎の積算発生回数の表示要求がされると、異常履歴記憶領域の記憶内容を読み込んで、異常番号毎に積算発生回数を演算し、異常番号に対応するアラーム番号３１と、積算発生回数３２とを積算発生回数３２の多い順番に並べてＣＲＴの表示画面中に設けた表示ウインドウＷに表示する。【選択図】  図１７
2005209046.tif 000002
【特許請求の範囲】
【請求項１】
工作機械で発生した異常に関する情報を管理して表示手段に表示する工作機械の異常管理装置であって、
工作機械での異常の発生または非発生の状態を随時検出する異常検出手段と、
前記異常検出手段の検出結果に基づいて、発生した異常項目を異常履歴記憶手段に書き込む異常処理手段と、を備え、
前記異常処理手段は、前記異常履歴記憶手段の記憶内容を読み込んで、異常項目毎に積算発生回数を演算し、異常項目と前記積算発生回数とを積算発生回数の多い順番に並べて前記表示手段に表示することを特徴とする工作機械の異常管理装置。
【請求項２】
請求項１に記載の工作機械の異常管理装置において、
前記異常処理手段は、
発生した異常項目と異常中時間とを前記異常履歴記憶手段に書き込み、
前記異常履歴記憶手段の記憶内容を読み込んで、異常項目毎に積算異常中時間を演算し、異常項目と前記積算異常中時間とを積算異常中時間の長い順番に並べて前記表示手段に表示することを特徴とする工作機械の異常管理装置。
【請求項３】
請求項１または請求項２に記載の工作機械の異常管理装置において、
前記異常処理手段は、
発生した異常項目と異常発生日付とを前記異常履歴記憶手段に書き込み、
前記異常履歴記憶手段の記憶内容を読み込んで、予め選択された異常項目の任意の選択期間における日付毎の積算発生回数を演算し、日付の順番に並べて前記表示手段に表示することを特徴とする工作機械の異常管理装置。
【請求項４】
請求項１ないし請求項３のいずれかに記載の工作機械の異常管理装置において、
前記異常処理手段は、
発生した異常項目と異常中時間と異常発生日付とを前記異常履歴記憶手段に書き込み、
前記異常履歴記憶手段の記憶内容を読み込んで、予め選択された異常項目の任意の選択期間における日付毎の積算異常中時間を演算し、日付の順番に並べて前記表示手段に表示することを特徴とする工作機械の異常管理装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載の工作機械の異常管理装置において、
前記異常検出手段は、工作機械での異常の発生または非発生の状態を随時検出して異常項目毎に異常発生記憶手段に書き込み、
前記異常処理手段は、
前記異常発生記憶手段の記憶内容を所定周期で読み込むことにより、前記異常検出手段が異常の発生状態を前記異常発生記憶手段に書き込んだことを検出すると、当該異常の項目に対応する異常番号と異常発生日付と異常発生時刻とを前記異常履歴記憶手段に書き込み、
前記異常検出手段が前記異常の非発生状態を前記異常発生記憶手段に書き込んだことを検出すると、現在の日付および時刻から前記異常履歴記憶手段に書き込んだ前記異常発生日付および前記異常発生時刻を減算して異常中時間を求め、当該異常中時間を前記異常発生時刻に上書きすることを特徴とする工作機械の異常管理装置。
【請求項６】
請求項５に記載の工作機械の異常管理装置において、
前記異常番号は各異常項目に対応するように割り付けられた通し番号であり、
前記異常処理手段は、
前記異常検出手段が異常の発生状態を前記異常発生記憶手段に書き込んだことを検出すると、当該異常の項目に対応する異常番号に全異常項目数より大きな所定数を加算した値を異常番号として前記異常発生日付および前記異常発生時刻とともに前記異常履歴記憶手段に書き込み、
前記異常検出手段が異常の非発生状態を前記異常発生記憶手段に書き込んだことを検出すると、当該異常の項目に対応する異常番号と、前記異常履歴記憶手段に書き込まれた前記所定数以上の異常番号から前記所定数を減算した値とが等しいか否かを確認し、等しいと確認したときにのみ、当該減算した値を前記所定数以上の異常番号に上書きして、現在の日付および時刻から前記所定数以上の異常番号とともに前記異常履歴記憶手段に書き込んだ前記異常発生日付および前記異常発生時刻を減算して異常中時間を求め、当該異常中時間を前記異常発生時刻に上書きすることを特徴とする工作機械の異常管理装置。
【請求項７】
請求項６に記載の工作機械の異常管理装置において、
前記異常処理手段は、
電源が断たれた際に工作機械で異常中であった場合に、その後電源が投入されると、前記異常履歴記憶手段の記憶内容を読み込んで前記所定数以上の異常番号の有無を確認し、前記所定数以上の異常番号が有るのを確認すると、当該所定数以上の異常番号から前記所定数を減算した値を前記所定数以上の異常番号に上書きして、電源断時の日付および時刻から前記所定数以上の異常番号とともに前記異常履歴記憶手段に書き込んだ前記異常発生日付および前記異常発生時刻を減算して異常中時間を求め、当該異常中時間を前記異常発生時刻に上書きすることを特徴とする工作機械の異常管理装置。
【請求項８】
請求項６に記載の工作機械の異常管理装置において、
電源投入前後で異常を分割するか否かを指示する第１の指示手段を備え、
前記異常処理手段は、
電源が断たれた際に工作機械で異常中であり、かつ、電源が投入された際に前記異常が解消されておらずまだ異常中であった場合に、電源が投入されると、前記異常履歴記憶手段の記憶内容を読み込んで前記所定数以上の異常番号の有無を確認し、前記所定数以上の異常番号が有るのを確認すると、前記第１の指示手段で電源投入前後において異常を分割すると指示されているか否かを確認し、分割すると指示されていれば、前記所定数以上の異常番号から前記所定数を減算した値を前記所定数以上の異常番号に上書きするとともに、異常中時間を求めて前記異常発生時刻に上書きし、分割しないと指示されていれば、前記所定数以上の異常番号をそのままにすることを特徴とする工作機械の異常管理装置。
【請求項９】
請求項８に記載の工作機械の異常管理装置において、
電源断中時間を異常中時間に含めるか否かを指示する第２の指示手段を備え、
前記異常処理手段は、
電源が断たれた際に工作機械で異常中であり、かつ、電源が投入された際に前記異常が解消されておらずまだ異常中であった場合に、電源が投入されると、前記異常履歴記憶手段の記憶内容を読み込んで前記所定数以上の異常番号の有無を確認し、前記所定数以上の異常番号が有るのを確認すると、前記第２の指示手段で電源断中時間を異常中時間に含めないと指示されているか否かを確認し、含めないと指示されていれば、その後異常中時間を求めるときに電源断中時間を含めないように異常中時間を求めて前記異常発生時刻に上書きし、含めると指示されていれば、その後異常中時間を求めるときに電源断中時間を含めるように異常中時間を求めて前記異常発生時刻に上書きすることを特徴とする工作機械の異常管理装置。
【請求項１０】
請求項１ないし請求項９のいずれかに記載の工作機械の異常管理装置において、
外部に設置された上位装置と通信を行うための通信手段を備え、
前記異常処理手段は、前記異常履歴記憶手段の記憶内容を読み込んで演算した異常項目の積算データを、前記通信手段によって前記上位装置に送信することを特徴とする工作機械の異常管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、工作機械で発生した異常に関する情報を管理する工作機械の異常管理装置に関するものである。
【背景技術】
【０００２】
例えばＮＣ（Numerical Control）制御システムのような工作機械の制御システムは、工作機械と制御装置等から構成され、制御装置が予め記憶されたシーケンスプログラム等に従って工作機械を制御し、工作機械に所定の動作を行わせる。このような工作機械においては、様々な要因による異常が発生する。その中でも、クーラント（冷却水）の飛散による絶縁不良と、切り粉の堆積による可動部の動作不良と、可動部のネジの弛みが異常の過半数以上を占めており、異常発生の３大要因といわれている。また、工作機械の異常の中には、現場の作業者で対応できるものもあれば、工作機械メーカーの保守員に依頼しないと対応できないものなど、種々のレベルの異常が混在している。
このように工作機械で発生した異常に関する情報を管理する異常管理装置は、従来から知られている（例えば、下記の特許文献１、２参照）。従来の異常管理装置は、工作機械で発生した異常を検出して、その異常内容や異常が発生した時刻等のような異常に関する情報を異常履歴としてメモリ等の記憶媒体に記憶する。そして、記憶した異常情報を作業員や保守員等が確認できるように、ＣＲＴ（陰極線管）等の表示手段に表示したり、表示手段を備えた無線端末のような他の装置に転送したりする。また、各工作機械にホスト装置を接続したシステムの場合には、ホスト装置に蓄積されている時系列の異常データをプリントして工作機械メーカーへ渡し、メーカーでデータ分析を行った上で対応をとることも実際の現場では行われている。
【０００３】
【特許文献１】特開平６−１１４６９９号公報（段落００１２、００１３、図１、図３、図４）
【特許文献２】特開２００２−３５８１１９号公報（段落００２４、図１、図６）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
工作機械を使用する現場では、作業者が工作機械の状態に常に注意を払い、異常原因の除去に関心を向けるよう意識付けを行うことが、故障の発生を未然に防止し、故障発生時には迅速で的確な処置を講じ、ひいては工作機械の長寿命化と安定運転の確保を図る上で、非常に重要である。このような意識付けが徹底しておれば、例えば、クーラントの飛散による絶縁不良が頻繁に起こったような場合に、作業者はクーラントの飛散方向を変えるとかスイッチを直ちに交換するといった的確な対応をとることができる。また、切り粉の堆積による可動部の動作不良が多いことが分かれば、絶えず切り粉を掃除することに注意を向けるようになる。また、可動部のネジの弛みであれば、装置のビビリ等で異音が発生する異常が多発するので、ネジの弛みに注意しながら作業するようになり、現場での工作機械の停止時間を低減できる。
しかしながら、従来では、異常が発生した際に警報灯を点灯させ、かつ異常管理装置の表示手段に発生した異常の項目を表示させるだけであった。このような異常項目の表示だけでは、発生した異常の内容を個別的に把握することはできるが、工作機械で発生する異常の状態、例えばその異常の度重なる発生により工作機械が故障寸前の危険領域に達しているか否かは分からないため、上述したような異常原因の除去に向けた作業者の意識付けは困難であった。また、ホスト装置が備わっている場合は、収集したデータを分析することで、異常状態の把握が可能となるが、この分析には膨大な時間と手間とを要し、すみやかな対応をとることは到底不可能であった。そのため、度重なる異常の発生を未然に防ぐ予防保全のための適切な対策をとるのが遅れ、工作機械の精度向上および安定運転が阻害され、かつ稼働率の低下を招いていた。
【０００５】
本発明は、上記課題を解決するものであって、その目的とするところは、現場の作業者が工作機械の状態に注意を払い、異常原因の除去に関心を向けるよう異常状況の表示を分かり易いものとすることで、現場レベルで故障発生を未然に防止できるようにし、もって工作機械の長寿命化と安定運転の確保を図ることが可能な工作機械の異常管理装置を提供することにある。
【課題を解決するための手段】
【０００６】
本発明に係る工作機械の異常管理装置は、工作機械での異常の発生または非発生の状態を随時検出する異常検出手段と、異常検出手段の検出結果に基づいて、発生した異常項目を異常履歴記憶手段に書き込む異常処理手段とを備えていて、異常処理手段は、異常履歴記憶手段の記憶内容を読み込んで、異常項目毎に積算発生回数を演算し、異常項目と積算発生回数とを積算発生回数の多い順番に並べて表示手段に表示する。
【０００７】
上記のように、異常項目毎に積算発生回数を求めて、異常項目と積算発生回数とを積算発生回数の多い順番に並べて表示手段に表示することで、表示手段を見ることにより、工作機械でどのような異常がどれぐらい発生しているかが一目瞭然で分かり、異常状況を容易に把握することができる。この結果、現場レベルで故障発生を未然に防止できるようにし、もって工作機械の長寿命化と安定運転の確保を図ることが可能となる。
【０００８】
また、本発明の実施形態では、異常処理手段は、発生した異常項目と異常中時間とを異常履歴記憶手段に書き込み、異常履歴記憶手段の記憶内容を読み込んで、異常項目毎に積算異常中時間を演算し、異常項目と積算異常中時間とを積算異常中時間の長い順番に並べて表示手段に表示する。このようにすることで、表示手段を見ることにより、工作機械がどのような異常で何時間ぐらい稼動を停止しているかを一目瞭然で把握することができる。この結果、ユーザ側では工作機械による生産計画を正確に立てることができ、また、工作機械メーカに対して異常対策検討の依頼を適切に行うことができる。
【０００９】
また、本発明の実施形態では、異常処理手段は、発生した異常項目と異常発生日付とを異常履歴記憶手段に書き込み、異常履歴記憶手段の記憶内容を読み込んで、予め選択された異常項目の任意の選択期間における日付毎の積算発生回数を演算し、日付の順番に並べて表示手段に表示する。このようにすることで、表示手段を見ることにより、工作機械で特定の異常がいつどれぐらい発生しているかを一目瞭然で把握することができる。この結果、特定の異常の発生を防ぐために対策をとった場合には、当該対策の有効性を確認することが可能となる。
【００１０】
また、本発明の実施形態では、異常処理手段は、発生した異常項目と異常中時間と異常発生日付とを異常履歴記憶手段に書き込み、異常履歴記憶手段の記憶内容を読み込んで、予め選択された異常項目の任意の選択期間における日付毎の積算異常中時間を演算し、日付の順番に並べて表示手段に表示する。このようにすることで、表示手段を見ることにより、工作機械が任意の異常でいつ何時間ぐらい稼動を停止しているかを一目瞭然で把握することができる。この結果、任意の異常の発生を防ぐために対策をとった場合には、当該対策の有効性を確認することが可能となる。
【００１１】
また、本発明の実施形態では、異常検出手段は、工作機械での異常の発生または非発生の状態を随時検出して異常項目毎に異常発生記憶手段に書き込む。異常処理手段は、異常発生記憶手段の記憶内容を所定周期で読み込むことにより、異常検出手段が異常の発生状態を異常発生記憶手段に書き込んだことを検出すると、当該異常の項目に対応する異常番号と異常発生日付と異常発生時刻とを異常履歴記憶手段に書き込む。そして、異常処理手段は、異常検出手段が前記異常の非発生状態を異常発生記憶手段に書き込んだことを検出すると、現在の日付および時刻から異常履歴記憶手段に書き込んだ異常発生日付および異常発生時刻を減算して異常中時間を求め、当該異常中時間を異常発生時刻に上書きする。このように、工作機械で発生した異常に関する情報として異常番号と異常発生日付と異常発生時刻とを異常履歴記憶手段に書き込み、その後異常中時間を異常発生時刻に上書きすることで、異常項目毎の積算発生回数、異常項目毎の積算異常中時間、日付毎の積算発生回数、または日付毎の積算異常中時間といった積算データを確実に演算することができる。また、一つの異常に関する情報量が少なくなるので、異常履歴記憶手段の記憶容量に制約がある場合でも、多数の異常に関する情報を記憶することができる。
【００１２】
また、本発明の実施形態では、異常番号は各異常項目に対応するように割り付けられた通し番号であり、異常処理手段は、異常検出手段が異常の発生状態を異常発生記憶手段に書き込んだことを検出すると、当該異常の項目に対応する異常番号に全異常項目数より大きな所定数を加算した値を異常番号として異常発生日付および異常発生時刻とともに異常履歴記憶手段に書き込む。そして、異常処理手段は、異常検出手段が異常の非発生状態を異常発生記憶手段に書き込んだことを検出すると、当該異常の項目に対応する異常番号と、異常履歴記憶手段に書き込まれた所定数以上の異常番号から所定数を減算した値とが等しいか否かを確認し、等しいと確認したときにのみ、当該減算した値を所定数以上の異常番号に上書きして、現在の日付および時刻から所定数以上の異常番号とともに異常履歴記憶手段に書き込んだ異常発生日付および異常発生時刻を減算して異常中時間を求め、当該異常中時間を異常発生時刻に上書きする。このように、発生状態になった異常項目に対応する異常番号に所定数を加算した値を異常番号として異常履歴記憶手段に書き込むことで、当該異常項目が異常中であることを明確にすることができる。また、非発生状態になった異常項目に対応する異常番号と、異常履歴記憶手段の所定数以上の異常番号から所定数を減算した値とが等しいことを確認してから、減算した値を異常番号に上書きするとともに、異常中時間を求めて異常発生時刻に上書きすることで、複数の異常が略同時に発生した場合でも、各異常の異常中時間を確実に記憶することができる。
【００１３】
また、本発明の実施形態では、異常処理手段は、電源が断たれた際に工作機械で異常中であった場合に、その後電源が投入されると、異常履歴記憶手段の記憶内容を読み込んで所定数以上の異常番号の有無を確認する。そして、異常処理手段は、所定数以上の異常番号が有るのを確認すると、当該所定数以上の異常番号から所定数を減算した値を所定数以上の異常番号に上書きして、電源断時の日付および時刻から所定数以上の異常番号とともに異常履歴記憶手段に書き込んだ異常発生日付および異常発生時刻を減算して異常中時間を求め、当該異常中時間を異常発生時刻に上書きする。このようにすることで、工作機械で異常中に修理等のために電源が断たれても、その後電源が投入されたときに、電源が断たれる前の異常に関する情報を異常履歴記憶手段に記憶することができる。
【００１４】
また、本発明の実施形態では、電源投入前後で異常を分割するか否かを指示する第１の指示手段を設けていて、異常処理手段は、電源が断たれた際に工作機械で異常中であり、かつ、電源が投入された際に前記異常が解消されておらずまだ異常中であった場合に、電源が投入されると、異常履歴記憶手段の記憶内容を読み込んで所定数以上の異常番号の有無を確認する。そして、異常処理手段は、所定数以上の異常番号が有るのを確認すると、第１の指示手段で電源投入前後で異常を分割すると指示されているか否かを確認し、分割すると指示されていれば、所定数以上の異常番号から前記所定数を減算した値を所定数以上の異常番号に上書きするとともに、異常中時間を求めて異常発生時刻に上書きし、分割しないと指示されていれば、所定数以上の異常番号をそのままにする。このようにすることで、工作機械で異常中に修理等のために電源が断たれ、その後電源が投入された際にまだ同一の異常項目が継続して異常中であった場合に、ユーザの要望により、当該異常を電源投入前後で分割して発生回数を２回と計数するようにしたり、または当該異常を電源投入前後で分割せずに発生回数を１回と計数するようにしたりすることができる。
【００１５】
また、本発明の実施形態では、電源断中時間を異常中時間に含めるか否かを指示する第２の指示手段を設けていて、異常処理手段は、電源が断たれた際に工作機械で異常中であり、かつ、電源が投入された際に前記異常が解消されておらずまだ異常中であった場合に、電源が投入されると、異常履歴記憶手段の記憶内容を読み込んで所定数以上の異常番号の有無を確認する。そして、異常処理手段は、所定数以上の異常番号が有るのを確認すると、第２の指示手段で電源断中時間を異常中時間に含めないと指示されているか否かを確認し、含めないと指示されていれば、その後異常中時間を求めるときに電源断中時間を含めないように異常中時間を求めて異常発生時刻に上書きし、含めると指示されていれば、その後異常中時間を求めるときに電源断中時間を含めるように異常中時間を求めて異常発生時刻に上書きする。このようにすることで、工作機械で異常中に修理等のために電源が断たれ、その後電源が投入された際にまだ同一の異常項目が継続して異常中であった場合に、ユーザの要望により、電源断中時間を異常中時間に含めずに、工作機械自身が稼動を停止していた時間のみを計数するようにしたり、または電源断中時間を異常中時間に含めて、工作機械自身が稼動を停止していた時間と修理のために手動で工作機械の稼動を停止させていた時間とを計数するようにしたりすることができる。
【００１６】
さらに、本発明の実施形態では、外部に設置された上位装置と通信を行うための通信手段を設けていて、異常処理手段は、異常履歴記憶手段の記憶内容を読み込んで演算した異常項目の積算データを、通信手段によって上位装置に送信する。このようにすることで、上位装置が工作機械メーカまたは工作機械の保守サービスを提供するサービス会社に設置されたホストコンピュータ等である場合には、メーカ等に工作機械の異常の修理・改善の依頼の連絡を逐一行う手間を省くことができ、またメーカ等では送信されて来た積算データから工作機械の異常状況を容易かつ明確に把握することができ、異常対策を迅速に検討することが可能となる。一方、上位装置が複数の工作機械および異常管理装置の設けられた事業所等に設置されているホストコンピュータ等である場合には、複数の工作機械の異常状況を容易かつ明確に把握することができ、複数の工作機械による全体の生産計画を正確に立てることが可能となる。
【発明の効果】
【００１７】
本発明によれば、異常項目毎に積算発生回数を求めて、異常項目と積算発生回数とを積算発生回数の多い順番に並べて表示手段に表示するので、工作機械でどのような異常がどれぐらい発生しているかが一目瞭然で分かり、異常状況を容易に把握することができる結果、現場レベルで故障発生を未然に防止できるようにし、もって工作機械の長寿命化と安定運転の確保を図ることが可能となる。
【発明を実施するための最良の形態】
【００１８】
図１は、本発明を適用した工作機械の制御システムを表すブロック図である。図１において、破線で囲んでいる部分はＮＣ（Numerical Control）制御装置１００である。このＮＣ制御装置１００は、マシニングセンタ等からなるＮＣ工作機械２００をシーケンス制御して、当該工作機械２００に所定の加工を行わせる。１はＮＣ制御装置１００の各部の動作を統括的に制御するＣＰＵ、２はＣＰＵ１が実行するプログラム等が格納されたＲＯＭ、３は各種データを読み書き可能に記憶するＲＡＭである。４は操作盤であって、表示手段としてのＣＲＴ（陰極線管）５と、ＣＲＴ５の駆動を制御するＣＲＴ制御回路６と、操作部７等を備えている。操作部７には、選択キー８とキーボード９等が含まれている。１０はＰＭＣ（Program Machine Controller）であって（シーケンスコントローラともいう）、ＲＯＭやＲＡＭおよび不揮発性メモリからなる記憶部１１と、信号入出力用のインターフェイスおよびリレー等からなる入出力回路１２等を備えている。このＰＭＣ１０は、ＣＰＵ１から工作機械２００の制御開始指令を受けると、記憶部１１のＲＯＭに記憶されている工作機械２００のシーケンスプログラムに従って、工作機械２００のシーケンス制御を実行する。このとき、ＰＭＣ１０は、入出力回路１２を介して工作機械２００に所定の制御信号を送り、工作機械２００のリミットスイッチ等からの入力信号を受ける。また、ＰＭＣ１０は、工作機械２００の動作状態を常時監視して、工作機械２００で異常が発生しているか否かを随時検出する。１３は工作機械２００の主軸用モータをサーボ制御するための軸制御回路、１４は軸制御回路１３から入力される制御信号を増幅して工作機械２００に出力するサーボアンプである。１５はＣＰＵ１の制御パラメータ等が格納された不揮発性メモリである。ＣＰＵ１はこの不揮発性メモリ１５の所定の記憶領域に、工作機械２００で発生した異常に関する情報（以下、異常情報という）を書き込んで異常履歴を残す。また、ＣＰＵ１は、不揮発性メモリ１５に書き込んだ異常情報をＣＲＴ５に表示する。１６は日付（年月日）および時間（時分秒）を計測するタイマである。
【００１９】
以上において、ＮＣ制御装置１００は、本発明に係る工作機械の異常管理装置の一実施形態を構成する。ＣＰＵ１は、本発明における異常処理手段の一実施形態を構成する。ＰＭＣ１０は、本発明における異常検出手段の一実施形態を構成する。
【００２０】
図２は、前述した操作盤４の外観を示す正面図である。図２において、操作盤４は、図１でも示したＣＲＴ５および操作部７を備えており、さらに上部に表示ランプ９０を備えている。また、操作部７には図１に示した選択キー８とキーボード９のほか、操作モード切替スイッチ７ａ、送り速度調整スイッチ７ｂ、電源スイッチ７ｃ、手動操作スイッチ７ｄ、非常停止スイッチ７ｅ、原点復帰スイッチ７ｆなど、各種のスイッチが設けられている。なお、選択キー８は、横一列に並んだ１２個のキーから構成されている。
【００２１】
図３は、操作部７におけるキーボード９のキー配置を示した図である。図３において、キーボード９には、テンキー９ａ、ＣＵＳＴＯＭキー９ｂ、矢印キー９ｃ、ページキー９ｄが含まれている。これら以外の各種のキーについては、本発明とは直接関係がないため説明は省略する。
【００２２】
図４は、前述したＰＭＣ１０の記憶部１１の不揮発性メモリに設けられた異常発生記憶領域Ｍを示す図である。この異常発生記憶領域Ｍは、本発明における異常発生記憶手段の一実施形態を構成する。図４において、異常発生記憶領域Ｍは、記憶部１１の不揮発性メモリに６０ブロックに渡って設けられ、各ブロックは、８ビットで構成されている。また、６０ブロックのそれぞれには、「Ａ０００」から「Ａ０５９」までの符号が割り付けられ、各ブロックの８ビットのそれぞれには、「．７」から「．０」までの符号が割り付けられている。このため、異常発生記憶領域Ｍには、４８０ビットの「０」または「１」のデータを記憶可能であり、それぞれのビット位置は、「Ａｘｘｘ．ｘ」で表される。例えば、矢印Ｌ１のビット位置は「Ａ０００．７」と表され、矢印Ｌ２のビット位置は「Ａ００３．０」と表される。
【００２３】
前述のＰＭＣ１０は、工作機械２００の制御中に、予め設定された４８０項目の異常がそれぞれ工作機械２００で発生しているか否かを随時検出する。４８０項目の異常にはそれぞれ０００〜４７９までの通し番号が割り付けられていて、各異常番号と異常発生記憶領域Ｍの各ビット位置とはそれぞれ対応付けられている。これにより、ＰＭＣ１０は、工作機械２００で所定項目の異常が発生したことを検出すると、当該異常の異常番号に対応する異常発生記憶領域Ｍのビット位置のデータを「０」から「１」に書き換える。また、ＰＭＣ１０は、作業員や保守員の修理により工作機械２００で所定項目の異常が解消され異常非発生の状態となったことを検出すると、当該異常の異常番号に対応する異常発生記憶領域Ｍのビット位置のデータを「１」から「０」に書き換える。つまり、ＰＭＣ１０は、工作機械２００での所定項目の異常の発生または非発生の状態を随時検出して異常項目毎に異常発生記憶領域Ｍに書き込む。なお、異常発生記憶領域Ｍの各ビット位置のデータのことを、以下では異常ビットという。
【００２４】
図５は、前述した不揮発性メモリ１５に設けられたセーブ記憶領域Ｍｃを示す図である。前述のＣＰＵ１はこのセーブ記憶領域Ｍｃに、上述した異常発生記憶領域Ｍの記憶内容をセーブする。
【００２５】
図６は、不揮発性メモリ１５に設けられた異常履歴記憶領域Ｒを示す図である。この異常履歴記憶領域Ｒは、本発明における異常履歴記憶手段の一実施形態を構成する。図６において、異常履歴記憶領域Ｒは、不揮発性メモリ１５の所定領域に９００ブロックに渡って設けられている。各ブロックには、８ケタの数字データの書き込みが可能である。ＣＰＵ１は、工作機械２００で発生した所定項目の異常に関する情報として異常番号と、異常発生日付（異常の発生した年月日）と、異常発生時刻（異常の発生した時分秒（全て秒に換算している））または異常が発生してから解消するまでの異常中時間を異常履歴記憶領域Ｒに書き込む。このとき、ＣＰＵ１は、異常番号を４ケタの数字で表して、所定アドレスの１ブロック目に書き込み、異常発生日付を５ケタの数字で表して、そのうち４ケタの数字を所定アドレスの１ブロック目の異常番号を書き込んでいない部分に書き込むとともに、残りの１ケタの数字を所定アドレスの２ブロック目に書き込み、異常発生時刻または異常中時間を７ケタの数字で表して、所定アドレスの２ブロック目の異常発生日付を書き込んでいない部分に書き込む。このようにすると、１つの異常情報が異常履歴記憶領域Ｒに２ブロックに渡って書き込まれるので、異常履歴記憶領域Ｒへの異常情報の書き込み最大数は４５０個となる。
【００２６】
図７は、不揮発性メモリ１５に設けられたカウンタ領域Ｃを示す図である。ＣＰＵ１はこのカウンタ領域Ｃで、異常履歴記憶個数Ｃ１、異常履歴書き込みポインタＰ１、異常履歴読み出し個数Ｃ２ａ〜Ｃ２ｃ、異常ビット照合個数Ｃ３、および演算領域読み出しポインタＰ２をそれぞれ計数する。異常履歴記憶個数Ｃ１は、異常履歴記憶領域Ｒに書き込んだ異常情報の個数を示す。異常履歴書き込みポインタＰ１は、異常情報を書き込む異常履歴記憶領域Ｒ内のアドレスを示す。異常履歴読み出し個数Ｃ２ａ〜Ｃ２ｃは、異常履歴記憶領域Ｒから読み出した異常情報の個数を示す。異常ビット照合個数Ｃ３は、異常発生記憶領域Ｍとセーブ記憶領域Ｍｃの異常ビットを照合した個数を示す。演算領域読み出しポインタＰ２は、記憶内容を読み出す後記の演算領域Ｅ１〜Ｅ４（後に図１６、図１８、図２０、図２２に図示）内のアドレスを示す。
【００２７】
図８Ａおよび図８Ｂは、異常履歴記憶領域Ｒへの異常情報の書き込み手順を示すフローチャートである。本手順は、ＣＰＵ１が所定周期で実行する。図８Ａにおいて、ＰＭＣ１０（図１）による工作機械２００の制御中に、ＣＰＵ１は、所定周期で異常発生記憶領域Ｍ（図４）の記憶内容を読み込み（ステップＳ１）、続いて、タイマ１６（図１）が計測する現在の日付（年月日）および時刻（時分秒）を読み込む（ステップＳ２）。そして、ＣＰＵ１は、異常発生記憶領域Ｍとセーブ記憶領域Ｍｃ（図５）の同一位置にある異常ビットを照合し、異常発生記憶領域Ｍの異常ビットが「０」から「１」に立ち上がっているか否かを確認する（ステップＳ３）。なお、異常ビットの照合は、例えば先頭のビット位置「Ａ０００．０」から行う。また、ＣＰＵ１は、照合を行う毎に前述のカウンタ領域Ｃの異常ビット照合個数Ｃ３（図７）をカウントアップする。異常ビット照合個数Ｃ３のカウントアップとは、現在の異常ビット照合個数Ｃ３の値に「１」を加算することである。ステップＳ３で、セーブ記憶領域Ｍｃの異常ビットが「０」かつ異常発生記憶領域Ｍの異常ビットが「１」でない場合は、ＣＰＵ１は、当該異常ビットに対応する異常が工作機械２００で発生しておらず、異常発生記憶領域Ｍの異常ビットが立ち上がっていないと判断し（ステップＳ３：ＮＯ）、図８ＢのステップＳ１２へ移行する。
【００２８】
そしてステップＳ１２へ移行すると、ＣＰＵ１は、異常発生記憶領域Ｍとセーブ記憶領域Ｍｃの同一位置の異常ビットを再び照合し、異常発生記憶領域Ｍの異常ビットが「１」から「０」に立ち下がっているか否かを確認する。ここで、セーブ記憶領域Ｍｃの異常ビットが「１」かつ異常発生記憶領域Ｍの異常ビットが「０」でない場合は、ＣＰＵ１は、異常発生記憶領域Ｍの異常ビットが立ち下がっていないと判断し（ステップＳ１２：ＮＯ）、ステップＳ２０へ移行する。ステップＳ２０へ移行すると、ＣＰＵ１は、異常発生記憶領域Ｍの異常ビットを全異常項目数の「４８０」分サーチしたか否かを確認する。このとき、ＣＰＵ１は、カウンタ領域Ｃの異常ビット照合個数Ｃ３を読み込み、当該照合個数Ｃ３が全異常項目数未満であれば、異常発生記憶領域Ｍとセーブ記憶領域Ｍｃの異常ビットを全異常項目数分照合していないので、異常発生記憶領域Ｍの異常ビットを全異常項目数分サーチしていないと判断する（ステップＳ２０：ＮＯ）。そしてこのように判断すると、ＣＰＵ１は図８ＡのステップＳ３へ戻る。
【００２９】
ステップＳ３へ戻ると、ＣＰＵ１は、異常発生記憶領域Ｍとセーブ記憶領域Ｍｃの次の同一位置にある異常ビットを照合し、再び異常発生記憶領域Ｍの異常ビットが立ち上がっているか否かを確認する。ここで、セーブ記憶領域Ｍｃの異常ビットが「０」かつ異常発生記憶領域Ｍの異常ビットが「１」である場合は、ＣＰＵ１は、当該異常ビットに対応する異常が工作機械２００で発生したため、異常発生記憶領域Ｍの異常ビットが立ち上がっていると判断する（ステップＳ３：ＹＥＳ）。このように判断すると、ＣＰＵ１は、照合したセーブ記憶領域Ｍｃの異常ビットを「０」から「１」に書き換える（ステップＳ４）。そして、ＣＰＵ１は、立ち上がった異常ビットに対応する異常番号に全異常項目数の「４８０」より大きな数値である「５０００」を加算した値を、前述のカウンタ領域Ｃの異常履歴書き込みポインタＰ１（図７）が示す異常履歴記憶領域Ｒのアドレスに図６に示したように書き込む（ステップＳ５）。このように異常番号に「５０００」を加算した値を異常履歴記憶領域Ｒに書き込むのは、当該異常番号に対応する異常が工作機械２００で継続して異常中であることを示すためである。引き続き、ＣＰＵ１は、ステップＳ２で読み込んだ現在の日付および時刻を異常発生日付および異常発生時刻として、異常番号に「５０００」を加算した値に続けて図６に示したように異常履歴記憶領域Ｒに書き込む（ステップＳ６）。
【００３０】
異常発生日付および異常発生時刻を書き込むと、ＣＰＵ１は、前述のカウンタ領域Ｃの異常履歴記憶個数Ｃ１を読み込んで、当該記憶個数Ｃ１が最大値「４５０」以下になっているか否かを確認する（ステップＳ７）。ここで、異常履歴記憶個数Ｃ１が最大値以下であれば（ステップＳ７：ＹＥＳ）、ＣＰＵ１は、異常履歴記憶個数Ｃ１をカウントアップして（ステップＳ８）、ステップＳ９へ移行する。なお、異常履歴記憶個数Ｃ１のカウントアップとは、現在の異常履歴記憶個数Ｃ１の値に「１」を加算することである。上記に対して、異常履歴記憶個数Ｃ１が最大値に到達していれば（ステップＳ７：ＮＯ）、ＣＰＵ１は、異常履歴記憶個数Ｃ１をそのままにして、ステップＳ９へ移行する。ステップＳ９へ移行すると、ＣＰＵ１は、カウンタ領域Ｃの異常履歴書き込みポインタＰ１をカウントアップする。なお、異常履歴書き込みポインタＰ１のカウントアップとは、現在の異常履歴書き込みポインタＰ１の値に「１」を加算することである。異常履歴書き込みポインタＰ１をカウントアップすると、ＣＰＵ１は、当該ポインタＰ１が最大値「４５０」以上になっているか否かを確認する（ステップＳ１０）。ここで、異常履歴書き込みポインタＰ１が最大値より小さければ（ステップＳ１０：ＮＯ）、ＣＰＵ１は、異常履歴書き込みポインタＰ１をそのままにして、図８ＢのステップＳ１２へ移行する。これに対して、異常履歴書き込みポインタＰ１が最大値以上であれば（ステップＳ１０：ＹＥＳ）、ＣＰＵ１は、異常履歴書き込みポインタＰ１を「０」にして（ステップＳ１１）、ステップＳ１２へ移行する。このように、異常履歴書き込みポインタＰ１を「０」にすると、次の異常情報からは異常履歴記憶領域Ｒの先頭アドレスより書き込まれて行く。つまり、古い異常情報が順番に新しい異常情報に上書きされて消去されて行く。
【００３１】
図８ＢのステップＳ１２へ移行すると、ＣＰＵ１は、立ち上がっていた異常発生記憶領域Ｍの異常ビットと、セーブ記憶領域Ｍｃの同一位置の異常ビットとを照合し、異常発生記憶領域Ｍの異常ビットが「１」から「０」に立ち下がっているか否かを確認する。ここで、セーブ記憶領域Ｍｃの異常ビットが「１」かつ異常発生記憶領域Ｍの異常ビットが「０」である場合は、ＣＰＵ１は、当該異常ビットに対応する異常が工作機械２００で解消したため、異常発生記憶領域Ｍの異常ビットが立ち下がっていると判断する（ステップＳ１２：ＹＥＳ）。このように判断すると、ＣＰＵ１は、異常履歴記憶領域Ｒの所定アドレスから異常番号を読み出す（ステップＳ１３）。読み出した異常番号を以下ではＡＡＡという。なお、異常番号の読み出しは、異常履歴記憶領域Ｒの先頭アドレスから行う。また、異常番号を読み出す毎に前述のカウンタ領域Ｃの異常履歴読み出し個数Ｃ２ａ（図７）をカウントアップする。異常履歴読み出し個数Ｃ２ａのカウントアップとは、現在の異常履歴読み出し個数Ｃ２ａの値に「１」を加算することである。
【００３２】
異常番号ＡＡＡを読み出すと、ＣＰＵ１は、異常番号ＡＡＡが「５０００」以上か否かを確認する（ステップＳ１４）。ここで、異常番号ＡＡＡが「５０００」以上でなければ（ステップＳ１４：ＮＯ）、ＣＰＵ１は、異常履歴記憶領域Ｒをカウンタ領域Ｃの異常履歴記憶個数Ｃ１分サーチしたか否かを確認する（ステップＳ１９）。このとき、ＣＰＵ１は、カウンタ領域Ｃの異常履歴読み出し個数Ｃ２ａを読み込み、当該読み出し個数Ｃ２ａが異常履歴記憶個数Ｃ１未満であれば、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出していないので、異常履歴記憶領域Ｒを異常履歴記憶個数Ｃ１分サーチしていないと判断する（ステップＳ１９：ＮＯ）。そしてこのように判断すると、ＣＰＵ１はステップＳ１３へ戻る。これに対して、ステップＳ１９で、異常履歴読み出し個数Ｃ２ａと異常履歴記憶個数Ｃ１とが一致していれば、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出しているので、異常履歴記憶領域Ｒを異常履歴記憶個数Ｃ１分サーチしたと判断する（ステップＳ１９：ＹＥＳ）。そしてこのように判断すると、ＣＰＵ１は、異常履歴読み出し個数Ｃ２ａを「０」にして、ステップＳ２０へ移行する。
【００３３】
上述したようにステップＳ１３、Ｓ１４、およびＳ１９の処理を何回か繰り返した後に、ステップＳ１４で異常履歴記憶領域Ｒから読み込んだ異常番号ＡＡＡが「５０００」以上であることを確認すると（ステップＳ１４：ＹＥＳ）、ＣＰＵ１は、当該異常番号ＡＡＡから「５０００」を減算した値が、ステップＳ１２で立ち下がった異常ビットに対応する異常番号と等しいか否かを確認する（ステップＳ１５）。ここで、異常番号ＡＡＡから「５０００」を減算した値と立ち下がった異常ビットの異常番号が等しくなければ（ステップＳ１５：ＮＯ）、ＣＰＵ１は、上述したように異常履歴記憶領域Ｒを異常履歴記憶個数Ｃ１分サーチしたか否かを確認し（ステップＳ１９）、サーチしていないと判断すると（ステップＳ１９：ＮＯ）、ステップＳ１３へ戻る。これに対して、ステップＳ１５で、異常番号ＡＡＡから「５０００」を減算した値が、立ち下がった異常ビットに対応する異常番号と等しければ（ステップＳ１５：ＹＥＳ）、ＣＰＵ１は、減算した値を異常番号ＡＡＡに上書きする（ステップＳ１６）。このように異常番号ＡＡＡを「５０００」を減算した値に書き換えるのは、当該異常番号ＡＡＡに対応する異常が工作機械２００で解消したことを示すためである。引き続き、ＣＰＵ１は、タイマ１６が計測する現在の日付および時刻を読み込み（ステップＳ１７）、現在の日付および時刻から、異常番号ＡＡＡとともに異常履歴記憶領域Ｒに書き込んだ異常発生日付および異常発生時刻を減算して異常中時間を求め、当該異常中時間を異常発生時刻に上書きする（ステップＳ１８）。
【００３４】
異常中時間を上書きすると、ＣＰＵ１は、上述したように異常発生記憶領域Ｍの異常ビットを全異常項目数分サーチしたか否かを確認する（ステップＳ２０）。ここで、前述したように異常発生記憶領域Ｍの異常ビットを全異常項目数分サーチしていないと判断すると（ステップＳ２０：ＮＯ）、ＣＰＵ１は、図８ＡのステップＳ３へ戻り、上述した手順でステップＳ３〜ステップＳ２０の処理を繰り返し実行する。そして、ステップＳ３〜ステップＳ２０の処理を何度か繰り返し実行した後に、ステップＳ２０で、カウンタ領域Ｃの異常ビット照合個数Ｃ３が全異常項目数と一致していれば、ＣＰＵ１は、異常発生記憶領域Ｍとセーブ記憶領域Ｍｃの異常ビットを全異常項目数分照合しているので、異常発生記憶領域Ｍの異常ビットを全異常項目数分サーチしていると判断する（ステップＳ２０：ＹＥＳ）。そしてこのように判断すると、ＣＰＵ１は、異常ビット照合個数Ｃ３を「０」にして、異常発生記憶領域Ｍの記憶内容をセーブ記憶領域Ｍｃにセーブし（ステップＳ２１）、処理を終了する。
【００３５】
上述したように、工作機械２００で発生した異常に関する情報として異常番号と異常発生日付と異常発生時刻とを異常履歴記憶領域Ｒに書き込み、その後異常中時間を異常発生時刻に上書きすることで、後述する異常番号毎の積算発生回数、異常番号毎の積算異常中時間、日付毎の積算発生回数、または日付毎の積算異常中時間といった積算データを確実に演算することができる。また、異常履歴記憶領域Ｒの記憶容量に９００ブロックという制約がある条件下であっても、一つの異常に関する情報量が少ないので、４５０個もの多数の異常に関する情報を記憶することが可能となる。
【００３６】
また、異常発生記憶領域Ｍの立ち上がりのあった異常ビットに対応する異常番号に、全異常項目数より大きい値である「５０００」を加算した値を異常番号として異常履歴記憶領域Ｒに書き込むことで、当該番号に対応する異常が工作機械２００でまだ継続中であることを明確にすることができる。また、異常発生記憶領域Ｍの立ち下がりのあった異常ビットに対応する異常番号と、異常履歴記憶領域Ｒに書き込まれている「５０００」以上の異常番号から「５０００」を減算した値とが等しいことを確認してから、減算値を「５０００」以上の異常番号に上書きするとともに、異常中時間を求めて異常発生時刻に上書きすることで、複数の異常が略同時に発生した場合でも、各異常の異常中時間を確実に異常番号に対応させて記憶することができる。
【００３７】
図９は、電源投入時の異常履歴記憶領域Ｒへの異常情報の書き込み手順を示すフローチャートである。本手順は、ＮＣ制御装置１００と工作機械２００の電源が断たれてからしばらくして電源投入された時に、ＣＰＵ１が実行する。なお、本手順を説明するにあたり、ＰＭＣ１０の記憶部１１の不揮発性メモリに設けられた電源断記憶領域Ｄを示す図１０、異常と電源の状態を説明するためのタイムチャートを示す図１１、および異常履歴記憶領域Ｒに書き込んだ異常情報を示す図１２を適宜参照する。
【００３８】
図９において、電源が投入されると、ＣＰＵ１は、セーブ記憶領域Ｍｃの記憶内容を全てクリアする（ステップＳ３１）。なお、記憶内容のクリアとは、セーブ記憶領域Ｍｃの異常ビットを全て「０」にすることである。次に、ＣＰＵ１は、異常履歴記憶領域Ｒの所定アドレスから異常番号を読み出す（ステップＳ３２）。読み出した異常番号を以下ではＡＡＡという。なお、異常番号の読み出しは、例えば異常履歴記憶領域Ｒの先頭アドレスから行う。また、異常番号を読み出す毎に前述のカウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｂ（図７）をカウントアップする。異常履歴読み出し個数Ｃ２ｂのカウントアップとは、現在の異常履歴読み出し個数Ｃ２ｂの値に「１」を加算することである。異常番号ＡＡＡを読み出すと、ＣＰＵ１は、異常番号ＡＡＡが「５０００」以上か否かを確認する（ステップＳ３３）。ここで、異常番号ＡＡＡが「５０００」以上でなければ（ステップＳ３３：ＮＯ）、ＣＰＵ１は、ステップＳ４９ヘ移行し、異常履歴記憶領域Ｒからカウンタ領域Ｃの異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認する。ここで、ＣＰＵ１は、カウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｂを読み込み、当該読み出し個数Ｃ２ｂが異常履歴記憶個数Ｃ１未満であれば、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出していないと判断する（ステップＳ４９：ＮＯ）。そしてこのように判断すると、ＣＰＵ１は、ステップＳ３２へ戻る。
【００３９】
ステップＳ３２へ戻ると、ＣＰＵ１は、異常履歴記憶領域Ｒの次のアドレスから異常番号ＡＡＡを読み出し、当該異常番号ＡＡＡが「５０００」以上か否かを確認する（ステップＳ３３）。読み出した異常番号ＡＡＡに対応する異常が、図１１（ａ）、（ｂ）に示すように時刻ｔ１に工作機械２００で発生し、この異常の修理のために作業員等が時刻ｔ２に工作機械２００とＮＣ制御装置１００の電源を断状態（ＯＦＦ状態）にした後、時刻ｔ４に電源を投入した場合は、前述した図８Ａおよび図８Ｂの書き込み手順が電源断時に中断されるので、異常履歴記憶領域Ｒに書き込んだ「５０００」以上の異常番号は、電源投入時では「５０００」を減算した値に書き換えられていない。このような状況により、ＣＰＵ１は、異常番号ＡＡＡが「５０００」以上であることを確認すると（ステップＳ３３：ＹＥＳ）、当該異常番号ＡＡＡから「５０００」を減算して異常番号ＡＡＡを補正する（ステップＳ３４）。そして、ＣＰＵ１は、補正後の異常番号ＡＡＡに対応する異常発生記憶領域Ｍの異常ビットを読み込み、当該異常ビットが「１」であるか否を確認する（ステップＳ３５）。
【００４０】
図１１（ａ）に示すケース１のように、電源が断たれた時刻ｔ２から電源が投入された時刻ｔ４までの間にある時刻ｔ３において、修理により異常番号ＡＡＡに対応する異常が解消されると、電源投入時にＰＭＣ１０が異常発生記憶領域Ｍの対応する異常ビットを「１」から「０」に書き換える。従って、ケース１の場合には、ＣＰＵ１は、図９のステップＳ３５で、異常ビットが「０」であることを確認する（ステップＳ３５：ＮＯ）。そして、ＣＰＵ１は、補正後の異常番号ＡＡＡを異常履歴記憶領域Ｒの異常番号に上書きする（ステップＳ３６）。また引き続き、ＣＰＵ１は、電源断時にタイマ１６から読み込んで不揮発性メモリ１５の所定の領域に記憶しておいた電源断時の日付および時刻ｔ２から、異常番号ＡＡＡとともに異常履歴記憶領域Ｒに書き込んでいる異常発生日付および異常発生時刻ｔ１を減算して異常中時間を求め（ステップＳ４２）、当該異常中時間を異常発生時刻に上書きする（ステップＳ４３）。これにより、異常履歴記憶領域Ｒには、図１２（ａ）のケース１に示すように異常発生時から電源断時までの異常情報として、異常番号（例えば、００３）、異常発生日付（例えば、２００３年９月１日）、および異常中時間Ｔ１２（図１１（ａ）の異常発生時刻ｔ１から電源断時刻ｔ２までの時間）が記憶された状態となる。この後、ＣＰＵ１は、上述したように異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認し（ステップＳ４９）、読み出していなければ（ステップＳ４９：ＮＯ）、ステップＳ３２へ戻る。
【００４１】
一方、図１１（ｂ）に示すケース２〜５のように、電源が断たれた時刻ｔ２から電源が投入された時刻ｔ４までの間には異常番号ＡＡＡに対応する異常が解消されず、電源が投入された時刻ｔ４からしばらく経った時刻ｔ５において修理により異常が解消されると、ＰＭＣ１０が時刻ｔ５に異常発生記憶領域Ｍの対応する異常ビットを「１」から「０」に書き換える。従って、ケース２〜５の場合には、電源投入時にはまだ電源断時に異常中であった異常番号ＡＡＡに対応する異常が解消されていないので、ＣＰＵ１は、図９のステップＳ３５で、異常ビットが「１」であることを確認する（ステップＳ３５：ＹＥＳ）。そして、ＣＰＵ１は、ＰＭＣ１０の記憶部１１に設けた電源断記憶領域Ｄ（図１０に図示）のアドレス「Ｋ８２．１」のデータを読み込み、当該データが「０」か否かを確認する（ステップＳ３７）。なお、電源断記憶領域Ｄのアドレス「Ｋ８２．１」には、電源断時に異常中であった異常がその後の電源投入時にまだ継続している場合において、電源投入前後で異常を分割するか否かを指示するためのデータがＰＭＣ１０によって書き込まれる。電源投入前後で異常を分割することを指示するには、電源投入時にＰＭＣ１０がアドレス「Ｋ８２．１」に「０」のデータを書き込むように予め設定しておき、異常を分割しないことを指示するには、電源投入時にＰＭＣ１０がアドレス「Ｋ８２．１」に「１」のデータを書き込むように予め設定しておく。電源断記憶領域Ｄのアドレス「Ｋ８２．１」は、本発明における第１の指示手段を構成する。
【００４２】
上記のステップＳ３７で、アドレス「Ｋ８２．１」のデータが「０」であれば（ステップＳ３７：ＹＥＳ）、ＣＰＵ１は、補正後の異常番号ＡＡＡを異常履歴記憶領域Ｒの異常番号に上書きして（ステップＳ３８）、ステップＳ４０へ移行する。これに対して、ステップＳ３７で、アドレス「Ｋ８２．１」のデータが「１」であれば（ステップＳ３７：ＮＯ）、ＣＰＵ１は、異常番号ＡＡＡに対応するセーブ記憶領域Ｍｃの異常ビットを「０」から「１」に書き換えて（ステップＳ３９）、ステップＳ４０へ移行する。
【００４３】
ステップＳ４０へ移行すると、ＣＰＵ１は、電源断記憶領域Ｄ（図１０に図示）のアドレス「Ｋ８２．２」のデータを読み込み、当該データが「０」か否かを確認する。なお、電源断記憶領域Ｄのアドレス「Ｋ８２．２」には、電源断時に異常中であった異常がその後の電源投入時にまだ継続している場合において、電源断中時間を異常中時間に含めるか否かを指示するためのデータがＰＭＣ１０によって書き込まれる。電源断中時間を異常中時間に含めないことを指示するには、電源投入時にＰＭＣ１０がアドレス「Ｋ８２．２」に「０」のデータを書き込むように予め設定しておき、電源断中時間を異常中時間に含めることを指示するには、電源投入時にＰＭＣ１０がアドレス「Ｋ８２．２」に「１」のデータを書き込むように予め設定しておく。電源断記憶領域Ｄのアドレス「Ｋ８２．２」は、本発明における第２の指示手段を構成する。
【００４４】
上記のステップＳ４０で、アドレス「Ｋ８２．２」のデータが「０」であれば（ステップＳ４０：ＹＥＳ）、ＣＰＵ１は、再び上述したアドレス「Ｋ８２．１」のデータが「０」か否かを確認する（ステップＳ４１）。そして、アドレス「Ｋ８２．１」のデータが「０」であれば（ステップＳ４１：ＹＥＳ）、ＣＰＵ１は、電源断時の日付および時刻ｔ２から、異常番号ＡＡＡとともに異常履歴記憶領域Ｒに書き込んでいる異常発生日付および異常発生時刻ｔ１を減算して異常中時間を求め（ステップＳ４２）、当該異常中時間を異常発生時刻に上書きする（ステップＳ４３）。これにより、異常履歴記憶領域Ｒには、図１２（ｂ）のケース２に示すように異常発生時から電源断時までの異常情報として、異常番号（例えば、００３）、異常発生日付（例えば、２００３年９月１日）、および異常中時間Ｔ１２（図１１（ｂ）の異常発生時刻ｔ１から電源断時刻ｔ２までの時間）が記憶された状態となる。またこの後、時刻ｔ５に異常が解消されると、前述した図８Ａおよび図８Ｂの書き込み手順により、異常履歴記憶領域Ｒには、図１２（ｂ）に示すように電源投入時から異常解消時までの異常情報として、異常発生時から電源断時までと同一の異常番号（例えば、００３）と、異常発生日付（実際に異常が発生した時の日付ではなく電源が投入された時の日付、例えば、２００３年９月１日）と、異常中時間Ｔ４５（図１１（ｂ）の電源投入時刻ｔ４から異常解消時刻ｔ５までの時間）とが記憶された状態となる。ステップＳ４３の実行後、ＣＰＵ１はステップＳ４９へ移行する。
【００４５】
また、ステップＳ４１で、アドレス「Ｋ８２．１」のデータが「１」であれば（ステップＳ４１：ＮＯ）、ＣＰＵ１は、異常番号ＡＡＡとともに異常履歴記憶領域Ｒに書き込んでいる異常発生時刻に電源断中時間を加算し（ステップＳ４４）、当該加算した結果の値を異常発生時刻に上書きする（ステップＳ４５）。これにより、異常履歴記憶領域Ｒには、図１２（ｃ）のケース３に示すように異常発生時から異常解消時までの異常情報として、異常番号（例えば、００３）、異常発生日付（例えば、２００３年９月１日）、および異常中時間Ｔ１２＋Ｔ４５（図１１（ｂ）の異常発生時刻ｔ１から電源断時刻ｔ２までの時間と、電源投入時刻ｔ４から異常解消時刻ｔ５までの時間の合計時間）が記憶された状態となる。ステップＳ４５の実行後、ＣＰＵ１はステップＳ４９へ移行する。
【００４６】
また、ステップＳ４０で、アドレス「Ｋ８２．２」のデータが「１」であれば（ステップＳ４０：ＮＯ）、ＣＰＵ１は、再び上述したアドレス「Ｋ８２．１」のデータが「０」か否かを確認する（ステップＳ４６）。そして、アドレス「Ｋ８２．１」のデータが「０」であれば（ステップＳ４６：ＹＥＳ）、ＣＰＵ１は、タイマ１６が計測する現在の日付および時刻を読み込む（ステップＳ４７）。なお、このときの現在の日付および時刻は、電源投入時の日付および時刻と略同一である。引き続き、ＣＰＵ１は、現在の日付および時刻から、異常番号ＡＡＡとともに異常履歴記憶領域Ｒに書き込んでいる異常発生日付および異常発生時刻を減算して異常中時間を求め（ステップＳ４８）、当該異常中時間を異常発生時刻に上書きする（ステップＳ４３）。これにより、異常履歴記憶領域Ｒには、図１２（ｄ）のケース４に示すように異常発生時から電源投入時までの異常情報として、異常番号（例えば、００３）、異常発生日付（例えば、２００３年９月１日）、および異常中時間Ｔ１２＋Ｔ２４（図１１（ｂ）の異常発生時刻ｔ１から電源断時刻ｔ２までの時間と、電源断時刻ｔ２から電源投入時刻ｔ４までの時間の合計時間）が記憶された状態となる。またこの後、時刻ｔ５に異常が解消されると、前述した図８Ａおよび図８Ｂの書き込み手順により、異常履歴記憶領域Ｒには、図１２（ｄ）に示すように電源投入時から異常解消時までの異常情報として、異常発生時から電源投入時までと同一の異常番号（例えば、００３）と、異常発生日付（実際に異常が発生した時の日付ではなく電源が投入された時の日付、例えば、２００３年９月１日）と、異常中時間Ｔ４５とが記憶された状態となる。ステップＳ４３の実行後、ＣＰＵ１はステップＳ４９へ移行する。
【００４７】
また、ステップＳ４６で、アドレス「Ｋ８２．１」のデータが「１」であれば（ステップＳ４６：ＮＯ）、ＣＰＵ１は、ステップＳ４９へ移行する。この場合、後で時刻ｔ５に異常が解消されると、前述した図８Ａおよび図８Ｂの書き込み手順により、異常履歴記憶領域Ｒには、図１２（ｅ）のケース５に示すように異常発生時から異常解消時までの異常情報として、異常番号（例えば、００３）、異常発生日付（例えば、２００３年９月１日）、および異常中時間Ｔ１２＋Ｔ２４＋Ｔ４５（図１１（ｂ）の異常発生時刻ｔ１から電源断時刻ｔ２までの時間と、電源断時刻ｔ２から電源投入時刻ｔ４までの時間と、電源投入時刻ｔ４から異常解消時刻ｔ５までの合計時間）が記憶された状態となる。
【００４８】
上述したようにステップＳ３２〜ステップＳ４９の処理を何回か繰り返した後に、ステップＳ４９で、カウンタ領域Ｃから読み出した異常履歴読み出し個数Ｃ２ｂが異常履歴記憶個数Ｃ１と一致すると、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したと判断する（ステップＳ４９：ＹＥＳ）。そして、ＣＰＵ１は、異常履歴読み出し個数Ｃ２ｂを「０」にして、処理を終了する。
【００４９】
上述したように、異常履歴記憶領域Ｒの記憶内容を読み込んで「５０００」以上の異常番号が有るのを確認した後に、「５０００」以上の異常番号に「５０００」を減算した値を上書きするとともに、電源断時の日付および時刻から異常履歴記憶領域Ｒの異常発生日付および異常発生時刻を減算して異常中時間を求めて、異常発生時刻に上書きすることで、工作機械２００で異常中に修理等のために電源が断たれても、その後電源が投入された時に、電源が断たれる前の異常に関する情報を異常履歴記憶領域Ｒに記憶することができる。
【００５０】
また、電源断記憶領域Ｄのアドレス「Ｋ８２．１」のデータに基づいて、異常履歴記憶領域Ｒに書き込まれている「５０００」以上の異常番号の「５０００」を減算した値への書き換えと、異常発生時刻の異常中時間への書き換えとを行うことで、工作機械２００で異常中に修理等のために電源が断たれ、その後電源が投入された際にまだ同一の異常が継続している場合に、ユーザの要望により、当該異常を電源投入前後で分割して発生回数を２回と計数するようにしたり、または当該異常を電源投入前後で分割せずに発生回数を１回と計数するようにしたりすることができる。
【００５１】
さらに、電源断記憶領域Ｄのアドレス「Ｋ８２．２」のデータに基づいて、異常中時間を演算することで、工作機械２００で異常中に修理等のために電源が断たれ、その後電源が投入された際にまだ同一の異常項目が継続している場合に、ユーザの要望により、電源断中時間を異常中時間に含めずに、工作機械２００自身が稼動を停止していた時間のみを計数するようにしたり、または電源断中時間を異常中時間に含めて、工作機械２００自身が稼動を停止していた時間と、修理のために手動で工作機械２００の稼動を停止させていた時間とを計数するようにしたりすることができる。また、従来は、上記のような処理を行っていなかったので、電源断中時間を異常中時間に含めるか否かはユーザの手入力により行われていた。具体的には、電源断中時間を異常中時間に含める場合は、ユーザが電源断中時間を計算してその計算結果をＮＣ制御装置１００に入力し、電源断中時間を異常中時間に含めない場合は、ユーザが電源断中時間を「０」としてＮＣ制御装置１００に入力していた。そのため、入力作業が煩雑になるとともに、入力ミスも起き易かった。これに対して、上記のようにアドレス「Ｋ８２．２」のデータに基づいて、電源断中時間を異常中時間に含める処理または含めない処理を自動的に行うことで、ユーザによる入力作業が不要になるので、入力ミスが起こることはなく、異常中時間を正確に演算して異常履歴記憶領域Ｒに確実に記憶させることが可能となる。
【００５２】
図１３Ａ〜図１３Ｄは、異常履歴記憶領域Ｒに記憶された異常情報のＣＲＴ５（図１）への表示手順を示すフローチャートである。本手順は、ＣＰＵ１が実行する。なお、本手順を説明するにあたり、ＣＲＴ５に表示する表示例を示す図１４、図１５、図１７、図１９、図２１、図２３、および不揮発性メモリ１５に設けられた演算領域Ｅ１〜Ｅ４をそれぞれ示す図１６、図１８、図２０、図２２を適宜参照する。
【００５３】
前述の操作盤４（図２）のキーボード９に設けられたＣＵＳＴＯＭキー９ｂ（図３）が押されると、ＣＰＵ１は、図１４に示すカスタム画面Ｇ１をＣＲＴ５（図２）に表示させる。このカスタム画面Ｇ１中には、種々のカスタムメニュー２１が表示され、各メニューはカーソル２２で指定できるようになっている。カーソル２２は、図３に示した矢印キー９ｃの操作によって上下左右に移動可能である。また、カスタム画面Ｇ１の下には１０個の項目欄２３が表示される。図２に示した選択キー８のうち、両端を除く１０個の選択キーは、上記１０個の項目欄２３のそれぞれに対応している。図１４では右端の項目欄２３に「選択」という項目が表示されているので、図２の右から２番目の選択キー８を押すと、カーソル２２で指定された「異常」というメニューが選択される。このように「異常」が選択されると、ＣＰＵ１は、カスタム画面Ｇ１の表示をＣＲＴ５から消して、図１５に示す異常情報表示画面Ｇ２をＣＲＴ５に表示させる。この異常情報表示画面Ｇ２中には、工作機械２００の各軸の現在位置等の加工情報２４と、工作機械２００の異常情報を表示する表示ウインドウＷと、１２個の項目欄２５とが表示される。図２に示した１２個の選択キー８は、上記１２個の項目欄２５のそれぞれに対応している。
【００５４】
上記の異常情報表示画面Ｇ２中において、項目欄２５の右から６番目に表示されている「回数」という項目を指定するために、ユーザが、図２の右から６番目の選択キー８を押した場合、ＣＰＵ１は、異常番号毎の積算発生回数の表示要求がされたと判断する（図１３ＡのステップＳ５１：ＹＥＳ）。このように判断すると、ＣＰＵ１は、不揮発性メモリ１５に設けた積算発生回数の演算領域Ｅ１（図１６に図示）の記憶内容を先頭アドレスから全異常項目数の「４８０」分初期化する（ステップＳ５２）。これにより、演算領域Ｅ１では、図１６（ａ）に示すように先頭アドレス「０」から４８０だけ進んだアドレス「＋４７９」までの記憶内容が全て「０」になる。初期化後、ＣＰＵ１は、異常履歴記憶領域Ｒの所定アドレスから異常番号を読み出す（図１３ＡのステップＳ５３）。読み出した異常番号を以下ではＡＡＡという。なお、異常番号の読み出しは、異常履歴記憶領域Ｒの先頭アドレスから行う。また、異常番号を読み出す毎にカウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃ（図７）をカウントアップする。異常履歴読み出し個数Ｃ２ｃのカウントアップとは、現在の異常履歴読み出し個数Ｃ２ｃの値に「１」を加算することである。
【００５５】
異常番号ＡＡＡを読み出すと、ＣＰＵ１は、異常番号ＡＡＡが「５０００」以上であるか否かを確認する（ステップＳ５４）。ここで、異常番号ＡＡＡが「５０００」以上であれば（ステップＳ５４：ＹＥＳ）、ＣＰＵ１は、異常番号ＡＡＡから「５０００」を減算して異常番号ＡＡＡを補正する（ステップＳ５５）。そして、演算領域Ｅ１の先頭アドレスと補正後の異常番号ＡＡＡとを加算した値の示すアドレスの積算データに「１」を加算し（ステップＳ５６）、続けて、同アドレスの積算データを記憶している部分以外に補正後の異常番号ＡＡＡを書き込む（ステップＳ５７）。これに対して、ステップＳ５４で、異常番号ＡＡＡが「５０００」未満であれば（ステップＳ５４：ＮＯ）、ＣＰＵ１は、異常番号ＡＡＡを補正することなく、演算領域Ｅ１の先頭アドレスと異常番号ＡＡＡとを加算した値の示すアドレスの積算データに「１」を加算し（ステップＳ５６）、続けて、同アドレスの積算データを記憶している部分以外に異常番号ＡＡＡを書き込む（ステップＳ５７）。この後、ＣＰＵ１は、異常履歴記憶領域Ｒからカウンタ領域Ｃの異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認する（ステップＳ５８）。ここで、ＣＰＵ１は、カウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃを読み込み、当該読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１未満であれば、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出していないと判断する（ステップＳ５８：ＮＯ）。このように判断すると、ＣＰＵ１は、ステップＳ５３へ戻って、ステップＳ５３〜ステップＳ５８の処理を上述した手順で繰り返し実行する。
【００５６】
そして、ステップＳ５３〜ステップＳ５８の処理を異常履歴記憶個数Ｃ１と同値の回数繰り返し実行した後に、ステップＳ５８で、カウンタ領域Ｃから読み出した異常履歴読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１と一致すると、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したと判断する（ステップＳ５８：ＹＥＳ）。このとき、演算領域Ｅ１には、図１６（ｂ）に示すように先頭アドレス「０」から異常番号の小さい順番に異常番号毎の積算発生回数が記憶された状態となる。上記のように判断すると、ＣＰＵ１は、演算領域Ｅ１の積算発生回数が「０」以外の記憶内容を、図１６（ｃ）に示すように先頭アドレス「０」から積算発生回数の多い順番に並べ替える（図１３ＡのステップＳ５９）。
【００５７】
演算領域Ｅ１の記憶内容を並べ替えると、ＣＰＵ１は、演算領域Ｅ１の所定アドレスから記憶内容を読み出す（ステップＳ６０）。なお、記憶内容の読み出しは、例えば演算領域Ｅ１の先頭アドレスから行う。記憶内容を読み出すと、ＣＰＵ１は、読み出した記憶内容の１つである異常番号をアラーム番号に変換する（ステップＳ６１）。なお、アラーム番号とは、異常番号に対応する前述の異常発生記憶領域Ｍの異常ビットのビット位置のことである（例えば、「Ａ０００．０」）。異常番号をアラーム番号に変換すると、ＣＰＵ１は、当該アラーム番号に対応する異常発生記憶領域Ｍの異常ビットを読み込み、当該異常ビットが「１」であるか否を確認する（ステップＳ６２）。ここで、異常ビットが「１」であれば（ステップＳ６２：ＹＥＳ）、ＣＰＵ１は、対応する異常が現在も継続中であると判断し、アラーム番号を点滅表示で異常情報表示画面Ｇ２の表示ウインドウＷに表示する（ステップＳ６３）。これに対して、ステップＳ６２で、異常ビットが「０」であれば（ステップＳ６２：ＮＯ）、ＣＰＵ１は、対応する異常が解消していると判断し、アラーム番号を通常表示で表示ウインドウＷに表示する（ステップＳ６４）。
【００５８】
続いて、ＣＰＵ１は、読み出した記憶内容の１つである積算発生回数と、予め設定された１目盛の大きさとから、積算発生回数をグラフ表示するためのグラフの長さを計算する（ステップＳ６５）。そして、ＣＰＵ１は、計算したグラフの長さが予め設定された最大値以上か否かを判定する（ステップＳ６６）。ここで、グラフの長さが最大値以上であれば（ステップＳ６６：ＹＥＳ）、ＣＰＵ１は、グラフの長さを最大値でクランプし（ステップＳ６７）、積算発生回数を点滅グラフ表示で表示ウインドウＷに表示する（ステップＳ６８）。これに対して、グラフの長さが最大値未満であれば（ステップＳ６６：ＮＯ）、ＣＰＵ１は、積算発生回数を通常グラフ表示で表示ウインドウＷに表示する（ステップＳ６９）。
【００５９】
積算発生回数を表示すると、ＣＰＵ１は、前述のカウント領域Ｃの演算領域読み出しポインタＰ２（図７）をカウントアップする（ステップＳ７０）。なお、演算領域読み出しポインタＰ２のカウントアップとは、現在の演算領域読み出しポインタＰ２の値に「１」を加算することである。演算領域読み出しポインタＰ２をカウントアップすると、ＣＰＵ１は、当該ポインタＰ２が最大値以上になっているか否かを確認する（ステップＳ７１）。なお、このときの最大値は、演算領域Ｅ１に記憶されている積算発生回数が「０」以外の異常番号数である。ステップＳ７１で、演算領域読み出しポインタＰ２が最大値より小さければ（ステップＳ７１：ＮＯ）、ＣＰＵ１は、ステップＳ６０へ戻って、演算領域Ｅ１の次のアドレスから記憶内容を読み出す。そして、ＣＰＵ１は、ステップＳ６１で読み出した異常番号をアラーム番号に変換し、ステップＳ６２の実行後に、ステップＳ６３またはＳ６４でアラーム番号を先に表示したアラーム番号より下方に位置するように表示ウインドウＷに表示する。また、ＣＰＵ１は、ステップＳ６５〜Ｓ６７の実行後に、ステップＳ６８またはＳ６９で積算発生回数を先に表示した積算発生回数より下方に位置するように表示ウインドウＷにグラフ表示する。そして、ＣＰＵ１は、ステップＳ７０の実行後に、ステップＳ７１で演算領域読み出しポインタＰ２がまだ最大値より小さければ（ステップＳ７１：ＮＯ）、再びステップＳ６０へ戻って、ステップＳ６０〜ステップＳ７１の処理を上述した手順で繰り返し実行する。
【００６０】
ステップＳ６０〜ステップＳ７１の処理を演算領域Ｅ１の積算発生回数が「０」以外の異常番号数と同値の回数繰り返し実行した後に、ステップＳ７１で、演算領域読み出しポインタＰ２が最大値以上になると（ステップＳ７１：ＹＥＳ）、ＣＰＵ１は、演算領域Ｅ１の積算発生回数が「０」以外の異常番号および積算発生回数を全て表示ウインドウＷに表示したと判断し、演算領域読み出しポインタＰ２を「０」にする（ステップＳ７２）。そして、ＣＰＵ１は、目盛値を表示ウインドウＷに表示して（ステップＳ７３）、処理を終了する。処理終了後、ＣＲＴ５に表示された異常情報表示画面Ｇ２中には、図１７に示す表示ウインドウＷが表示されている。図１７において、アラーム番号３１と各アラーム番号３１の積算発生回数３２は、積算発生回数３２の多い順番に上から下へと並んで表示されている。積算発生回数３２のグラフ表示の下には、回数を示す目盛値３３が表示されている。また、異常中であるアラーム番号「Ａ０００．３」は点滅表示３４されている。３５はカーソルであり、このカーソル３５は、図３に示した矢印キー９ｃの操作によって上下左右に移動させることが可能である。
【００６１】
上述したように、異常項目に対応した異常番号毎に積算発生回数を求めて、異常番号と積算発生回数とを積算発生回数の多い順番に並べてＣＲＴ５に表示することで、ユーザはＣＲＴ５を見ることにより、工作機械２００でどのような異常がどれぐらい発生しているかが一目瞭然で分かり、異常状況を容易に把握することができる。この結果、現場レベルで故障発生を未然に防止できるようにし、もって工作機械の長寿命化と安定運転の確保を図ることが可能となる。具体例を挙げると、作業者スイッチの誤動作という異常の発生頻度が高ければ、クーラントの飛散による絶縁不良が原因である可能性が高いので、作業者は当該スイッチを新しいスイッチに交換するし、可動部の動作不良という異常の発生頻度が高ければ、切り粉の堆積が原因である可能性が高いので、作業者は切り粉を頻繁に掃除するし、可動部でのビビリという異常の発生頻度が高ければ、可動部のねじの緩みが原因である可能性が高いので、作業者はねじの締まり具合を頻繁に点検する。つまり、作業者が、工作機械２００で異常が発生しないように常に注意するというように、異常に対する予防対策を積極的に行うようになるので、工作機械２００の安定した運転と長寿命化とを図ることができる。また、異常の発生頻度により工作機械の２００の危険度が分かるので、現場で作業者が保全することができるか、保守者を呼ばなければ保全することができないか、あるいは機械メーカでなければ保全することができないかという判断を容易に行うことが可能となる。
【００６２】
一方、図１５の異常情報表示画面Ｇ２中において、前述した項目欄２５の「回数」という項目ではなく、項目欄２５の右から５番目に表示されている「時間」という項目を指定するために、ユーザが、図２の右から５番目の選択キー８を押した場合は、ＣＰＵ１は、異常番号毎の積算異常中時間の表示要求がされたと判断する（図１３ＡのステップＳ８０：ＹＥＳ）。このように判断すると、ＣＰＵ１は、図１３ＢのステップＳ８１へ移行し、不揮発性メモリ１５に設けた積算異常中時間の演算領域Ｅ２（図１８に図示）の記憶内容を先頭アドレスから全異常項目数の「４８０」分初期化する。これにより、演算領域Ｅ２では、図１８（ａ）に示すように先頭アドレス「０」から４８０だけ進んだアドレス「＋４７９」までの記憶内容が全て「０」になる。初期化後、ＣＰＵ１は、異常履歴記憶領域Ｒの所定アドレスから異常番号ＡＡＡを読み出す（図１３ＢのステップＳ８２）。なお、異常番号の読み出しは、異常履歴記憶領域Ｒの先頭アドレスから行う。また、異常番号を読み出す毎に前述の異常履歴読み出し個数Ｃ２ｃをカウントアップする。
【００６３】
異常番号ＡＡＡを読み出すと、ＣＰＵ１は、異常番号ＡＡＡが「５０００」以上であるか否かを確認する（ステップＳ８３）。ここで、異常番号ＡＡＡが「５０００」以上であれば（ステップＳ８３：ＹＥＳ）、ＣＰＵ１は、異常番号ＡＡＡから「５０００」を減算して異常番号ＡＡＡを補正し（ステップＳ８４）、当該異常番号ＡＡＡに対応する異常の異常中時間を、タイマ１６が計測する現在の日付および時刻から、異常履歴記憶領域Ｒに異常番号ＡＡＡとともに書き込まれている異常発生日付および異常発生時刻を減算して求める（ステップＳ８５）。異常中時間を以下ではＢＢＢという。そして、ＣＰＵ１は、演算領域Ｅ２の先頭アドレスと補正後の異常番号ＡＡＡとを加算した値の示すアドレスの積算データに異常中時間ＢＢＢを加算し（ステップＳ８７）、続けて、同アドレスの積算データを記憶している部分以外に補正後の異常番号ＡＡＡを書き込む（ステップＳ８８）。
【００６４】
上記に対して、ステップＳ８３で、異常番号ＡＡＡが「５０００」未満であれば（ステップＳ８３：ＮＯ）、ＣＰＵ１は、異常番号ＡＡＡを補正することなく、異常履歴記憶領域Ｒから異常番号ＡＡＡに対応する異常中時間ＢＢＢを読み出す（ステップＳ８６）。そして、ＣＰＵ１は、演算領域Ｅ１の先頭アドレスと異常番号ＡＡＡとを加算した値の示すアドレスの積算データに異常中時間ＢＢＢを加算し（ステップＳ８７）、続けて、同アドレスの積算データを記憶している部分以外に異常番号ＡＡＡを書き込む（ステップＳ８８）。この後、ＣＰＵ１は、異常履歴記憶領域Ｒからカウンタ領域Ｃの異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認する（ステップＳ８９）。ここで、ＣＰＵ１は、カウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃを読み込み、当該読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１未満であれば、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出していないと判断する（ステップＳ８９：ＮＯ）。このように判断すると、ＣＰＵ１は、ステップＳ８２へ戻って、ステップＳ８２〜ステップＳ８９の処理を上述した手順で繰り返し実行する。
【００６５】
そして、ステップＳ８２〜ステップＳ８９の処理を異常履歴記憶個数Ｃ１と同値の回数繰り返し実行した後に、ステップＳ８９で、カウンタ領域Ｃから読み出した異常履歴読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１と一致すると、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したと判断する（ステップＳ８９：ＹＥＳ）。このとき、演算領域Ｅ２には、図１８（ｂ）に示すように先頭アドレス「０」から異常番号の小さい順番に異常番号毎の積算異常中時間が記憶された状態となる。上記のように判断すると、ＣＰＵ１は、演算領域Ｅ２の積算異常中時間が「０」以外の記憶内容を、図１８（ｃ）に示すように先頭アドレス「０」から積算異常中時間の多い順番に並べ替える（図１３ＢのステップＳ９０）。
【００６６】
演算領域Ｅ２の記憶内容を並べ替えると、ＣＰＵ１は、演算領域Ｅ２の所定アドレスから記憶内容を読み出す（ステップＳ９１）。なお、記憶内容の読み出しは、演算領域Ｅ２の先頭アドレスから行う。記憶内容を読み出すと、ＣＰＵ１は、読み出した記憶内容の１つである異常番号をアラーム番号に変換する（ステップＳ９２）。そして、ＣＰＵ１は、アラーム番号に対応する異常発生記憶領域Ｍの異常ビットを読み込み、当該異常ビットが「１」であるか否を確認する（ステップＳ９３）。ここで、異常ビットが「１」であれば（ステップＳ９３：ＹＥＳ）、ＣＰＵ１は、対応する異常が現在も継続中であると判断し、アラーム番号を点滅表示で表示ウインドウＷに表示する（ステップＳ９４）。これに対して、ステップＳ９３で、異常ビットが「０」であれば（ステップＳ９３：ＮＯ）、ＣＰＵ１は、対応する異常が解消していると判断し、アラーム番号を通常表示で表示ウインドウＷに表示する（ステップＳ９５）。
【００６７】
続いて、ＣＰＵ１は、読み出した記憶内容の１つである積算異常中時間と、予め設定された１目盛の大きさとから、積算異常中時間をグラフ表示するためのグラフの長さを計算する（ステップＳ９６）。そして、ＣＰＵ１は、計算したグラフの長さが予め設定された最大値以上か否かを判定し（ステップＳ９７）、グラフの長さが最大値以上であれば（ステップＳ９７：ＹＥＳ）、グラフの長さを最大値でクランプして（ステップＳ９８）、積算異常中時間を点滅グラフ表示で表示ウインドウＷに表示する（ステップＳ９９）。これに対して、グラフの長さが最大値未満であれば（ステップＳ９７：ＮＯ）、ＣＰＵ１は、積算発生回数を通常グラフ表示で表示ウインドウＷに表示する（ステップＳ１００）。
【００６８】
積算異常中時間を表示すると、ＣＰＵ１は、演算領域読み出しポインタＰ２をカウントアップし（ステップＳ１０１）、この後、当該ポインタＰ２が最大値以上になっているか否かを確認する（ステップＳ１０２）。なお、このときの最大値は、演算領域Ｅ２に記憶されている積算異常中時間が「０」以外の異常番号数である。ステップＳ１０２で、演算領域読み出しポインタＰ２が最大値より小さければ（ステップＳ１０２：ＮＯ）、ＣＰＵ１は、ステップＳ９１へ戻って、演算領域Ｅ２の次のアドレスから記憶内容を読み出す。そして、ＣＰＵ１は、ステップＳ９２で読み出した異常番号をアラーム番号に変換し、ステップＳ９３の実行後に、ステップＳ９４またはＳ９５でアラーム番号を先に表示したアラーム番号より下方に位置するように表示ウインドウＷに表示する。また、ＣＰＵ１は、ステップＳ９６〜Ｓ９８の実行後に、ステップＳ９９またはＳ１００で積算異常中時間を先に表示した積算異常中時間より下方に位置するように表示ウインドウＷにグラフ表示する。そして、ＣＰＵ１は、ステップＳ１０１の実行後に、ステップＳ１０２で演算領域読み出しポインタＰ２がまだ最大値より小さければ（ステップＳ１０２：ＮＯ）、再びステップＳ９１へ戻って、ステップＳ９１〜ステップＳ１０２の処理を上述した手順で繰り返し実行する。
【００６９】
ステップＳ９１〜ステップＳ１０２の処理を演算領域Ｅ２の積算異常中時間が「０」以外の異常番号数と同値の回数繰り返し実行した後に、ステップＳ１０２で、演算領域読み出しポインタＰ２が最大値以上になると（ステップＳ１０２：ＹＥＳ）、ＣＰＵ１は、演算領域Ｅ２の積算異常中時間が「０」以外の異常番号および積算異常中時間を全て表示ウインドウＷに表示したと判断し、演算領域読み出しポインタＰ２を「０」にする（ステップＳ１０３）。そして、ＣＰＵ１は、目盛値を表示ウインドウＷに表示して（ステップＳ１０４）、処理を終了する。処理終了後、ＣＲＴ５に表示された異常情報表示画面Ｇ２中には、図１９に示す表示ウインドウＷが表示されている。図１９において、アラーム番号４１と各アラーム番号４１の積算異常中時間４２は、積算異常中時間４２の長い順番に上から下へと並んで表示されている。積算異常中時間４２のグラフ表示の下には、時間を示す目盛値４３が表示されている。また、異常中であるアラーム番号「Ａ０００．３」は点滅表示４４されている。４５はカーソルであり、このカーソル４５は、図３に示した矢印キー９ｃの操作によって上下左右に移動させることが可能である。
【００７０】
上述したように、異常番号毎に積算異常中時間を求めて、異常番号と積算異常中時間とを積算異常中時間の長い順番に並べてＣＲＴ５に表示することで、ユーザはＣＲＴ５を見ることにより、工作機械２００がどのような異常で何時間ぐらい稼動を停止しているかを一目瞭然で把握することができる。この結果、工作機械００による生産計画を正確に立てることができ、また、工作機械メーカに対して異常対策検討の依頼を適切に行うことができる。
【００７１】
また一方、図１５の異常情報表示画面Ｇ２中に、図１７または図１９の表示ウインドウＷが表示された状態において、ユーザが、矢印キー９ｃ（図３）でカーソル３５、４５を動かして１つのアラーム番号を指定するとともに、キーボード９（図３）で任意の期間を入力した後に、図１５の項目欄２５の右から４番目に表示されている「個別回」という項目を指定するために、図２の右から４番目の選択キー８を押した場合には、ＣＰＵ１は、選択されたアラーム番号の任意の選択期間における日付毎の積算発生回数の表示要求がされたと判断する（図１３ＡのステップＳ１１０：ＹＥＳ）。このように判断すると、ＣＰＵ１は、図１３ＣのステップＳ１１１へ移行し、不揮発性メモリ１５に設けた日付毎の積算発生回数の演算領域Ｅ３（図２０に図示）の記憶内容を先頭アドレスから選択期間の日数分初期化する。このとき、アラーム番号として「Ａ０００．１」が選択され、任意の期間として２００３年８月１日〜２００３年８月１０日までが選択された場合は、演算領域Ｅ３では、図２０（ａ）に示すように先頭アドレス「０」から１０日分だけ進んだアドレス「＋９」までの記憶内容が全て「０」になる。また、アラーム番号「Ａ０００．１」に対応する異常番号は「００１」である。初期化後、ＣＰＵ１は、異常履歴記憶領域Ｒの所定アドレスから異常番号ＡＡＡを読み出す（図１３ＣのステップＳ１１２）。なお、異常番号の読み出しは、異常履歴記憶領域Ｒの先頭アドレスから行う。また、異常番号を読み出す毎にカウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃをカウントアップする。
【００７２】
異常番号ＡＡＡを読み出すと、ＣＰＵ１は、異常番号ＡＡＡが選択されたアラーム番号に対応する異常番号か否かを確認する（ステップＳ１１３）。ここで、異常番号ＡＡＡが選択された異常番号でなければ（ステップＳ１１３：ＮＯ）、ＣＰＵ１は、異常履歴記憶領域Ｒからカウンタ領域Ｃの異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認する（ステップＳ１１７）。そして、ＣＰＵ１は、カウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃを読み込み、当該読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１未満であれば、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出していないと判断する（ステップＳ１１７：ＮＯ）。このように判断すると、ＣＰＵ１は、ステップＳ１１２へ戻って、異常履歴記憶領域Ｒの次のアドレスから異常番号ＡＡＡを読み出し、Ｓ１１３、およびＳ１１７の処理を繰り返し実行する。
【００７３】
そして、ステップＳ１１２、Ｓ１１３、およびＳ１１７の処理を何回か繰り返し実行した後に、ステップＳ１１３で、異常番号ＡＡＡが選択された異常番号であると（ステップＳ１１３：ＹＥＳ）、ＣＰＵ１は、異常履歴記憶領域Ｒから異常番号ＡＡＡとともに書き込まれている異常発生日付を読み出す（ステップＳ１１４）。読み出した異常発生日付を以下ではＣＣＣという。異常発生日付ＣＣＣを読み出すと、ＣＰＵ１は、異常発生日付ＣＣＣが選択期間に含まれるか否かを確認する（ステップＳ１１５）。ここで、異常発生日付ＣＣＣが選択期間に含まれていなければ（ステップＳ１１５：ＮＯ）、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認し（ステップＳ１１７）、読み出していなければ（ステップＳ１１７：ＮＯ）、ステップＳ１１２へ戻って、上述したように処理を繰り返し実行する。これに対して、ステップＳ１１５で、異常発生日付ＣＣＣが選択期間に含まれていれば（ステップＳ１１５：ＹＥＳ）、ＣＰＵ１は、演算領域Ｅ３の先頭アドレスと選択期間における異常発生日付ＣＣＣの古い順番とを加算し、この加算した結果から「１」を減算した値の示すアドレスの積算データに「１」を加算する（ステップＳ１１６）。この後、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認し（ステップＳ１１７）、読み出していなければ（ステップＳ１１７：ＮＯ）、ステップＳ１１２へ戻って、ステップＳ１１２〜ステップＳ１１７の処理を繰り返し実行する。
【００７４】
ステップＳ１１２〜ステップＳ１１７の処理を異常履歴記憶個数Ｃ１と同値の回数繰り返し実行した後に、ステップＳ１１７で、カウンタ領域Ｃから読み出した異常履歴読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１と一致すると、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したと判断する（ステップＳ１１７：ＹＥＳ）。このとき、演算領域Ｅ３には、図２０（ｂ）に示すように先頭アドレス「０」から日付の古い順番に日付毎の積算発生回数が記憶された状態となる。続いて、ＣＰＵ１は、図１３ＣのステップＳ１１８で、選択期間の各日付を、演算領域Ｅ３の対応するアドレスの積算データを記憶している部分以外に書き込む。そして、ＣＰＵ１は、選択された異常番号をアラーム番号に変換して、異常情報表示画面Ｇ２の表示ウインドウＷに表示する（ステップＳ１１９）。
【００７５】
アラーム番号の表示後、ＣＰＵ１は、演算領域Ｅ３の所定アドレスから記憶内容を読み出す（ステップＳ１２０）。なお、記憶内容の読み出しは、例えば演算領域Ｅ３の先頭アドレスから行う。記憶内容を読み出すと、ＣＰＵ１は、読み出した記憶内容の１つである選択期間の日付を表示ウインドウＷに表示する（ステップＳ１２１）。このとき、図２０の演算領域Ｅ３の先頭アドレスから読み出した日付は最も古い日付であるので、当該日付は表示ウインドウＷの最下位置に表示する。日付を表示すると、ＣＰＵ１は、読み出した記憶内容の１つである積算発生回数と、予め設定された１目盛の大きさとから、積算発生回数をグラフ表示するためのグラフの長さを計算する（ステップＳ１２２）。そして、ＣＰＵ１は、計算したグラフの長さが予め設定された最大値以上か否かを判定する（ステップＳ１２３）。ここで、グラフの長さが最大値以上であれば（ステップＳ１２３：ＹＥＳ）、ＣＰＵ１は、グラフの長さを最大値でクランプし（ステップＳ１２４）、積算発生回数を点滅グラフ表示で表示ウインドウＷに表示する（ステップＳ１２５）。これに対して、グラフの長さが最大値未満であれば（ステップＳ１２３：ＮＯ）、ＣＰＵ１は、積算発生回数を通常グラフ表示で表示ウインドウＷに表示する（ステップＳ１２６）。
【００７６】
積算発生回数を表示すると、ＣＰＵ１は、カウント領域Ｃの演算領域読み出しポインタＰ２をカウントアップし（ステップＳ１２７）、当該ポインタＰ２が最大値以上になっているか否かを確認する（ステップＳ１２８）。なお、このときの最大値は、選択期間の日数である。ステップＳ１２８で、演算領域読み出しポインタＰ２が最大値より小さければ（ステップＳ１２８：ＮＯ）、ＣＰＵ１は、ステップＳ１２０へ戻って、演算領域Ｅ３の次のアドレスから記憶内容を読み出す。そして、ＣＰＵ１は、ステップＳ１２１で読み出した日付を先に表示した日付より上方に位置するように表示ウインドウＷに表示する。また、ＣＰＵ１は、ステップＳ１２２〜Ｓ１２４の実行後に、ステップＳ１２５またはＳ１２６で積算発生回数を先に表示した積算発生回数より上方に位置するように表示ウインドウＷにグラフ表示する。そして、ＣＰＵ１は、ステップＳ１２７の実行後に、ステップＳ１２８で演算領域読み出しポインタＰ２がまだ最大値より小さければ（ステップＳ１２８：ＮＯ）、再びステップＳ１２０へ戻って、ステップＳ１２０〜ステップＳ１２８の処理を上述した手順で繰り返し実行する。
【００７７】
ステップＳ１２０〜ステップＳ１２８の処理を選択期間の日数と同値の回数繰り返し実行した後に、ステップＳ１２８で、演算領域読み出しポインタＰ２が最大値以上になると（ステップＳ１２８：ＹＥＳ）、ＣＰＵ１は、選択されたアラーム番号の選択期間における日付毎の積算発生回数を全て表示ウインドウＷに表示したと判断し、演算領域読み出しポインタＰ２を「０」にする（ステップＳ１２９）。そして、ＣＰＵ１は、目盛値を表示ウインドウＷに表示して（ステップＳ１３０）、処理を終了する。処理終了後、ＣＲＴ５に表示された異常情報表示画面Ｇ２中には、図２１に示す表示ウインドウＷが表示されている。図２１において、選択期間に含まれる日付５１と各日付毎の積算発生回数５２は、日付５１の新しい順番に上から下へと並んで表示されている。積算発生回数５２のグラフ表示の下には、回数を示す目盛値５３が表示されている。また、選択されたアラーム番号「Ａ０００．１」は反転表示５４されている。
【００７８】
上述したように、予め選択された異常項目の任意の選択期間における日付毎の積算発生回数を求めて、日付の新しい順番に並べてＣＲＴ５に表示することで、ユーザはＣＲＴ５を見ることにより、工作機械２００で任意の異常がいつどれぐらい発生しているかを一目瞭然で把握することができる。この結果、特定の異常の発生を防ぐために対策をとった場合には、当該対策の有効性を確認することが可能となる。
【００７９】
また一方、図１５の異常情報表示画面Ｇ２中に、図１７または図１９の表示ウインドウＷが表示された状態において、ユーザが、上述したようにアラーム番号を指定するとともに任意の期間を入力した後に、図１５の項目欄２５の右から３番目に表示されている「個別時」という項目を指定するために、図２の右から３番目の選択キー８を押した場合には、ＣＰＵ１は、選択されたアラーム番号の任意の選択期間における日付毎の積算異常中時間の表示要求がされたと判断する（図１３ＡのステップＳ１４０：ＹＥＳ）。このように判断すると、ＣＰＵ１は、図１３ＤのステップＳ１４１へ移行し、不揮発性メモリ１５に設けた日付毎の積算異常中時間の演算領域Ｅ４（図２２に図示）の記憶内容を先頭アドレスから選択期間の日数分初期化する。このとき、アラーム番号として「Ａ０００．１」が選択され、任意の期間として２００３年８月１日〜２００３年８月１０日までが選択された場合は、演算領域Ｅ４では、図２２（ａ）に示すように先頭アドレス「０」から１０日分だけ進んだアドレス「＋９」までの記憶内容が全て「０」になる。また、アラーム番号「Ａ０００．１」に対応する異常番号は「００１」である。初期化後、ＣＰＵ１は、異常履歴記憶領域Ｒの所定アドレスから異常番号ＡＡＡを読み出す（図１３ＤのステップＳ１４２）。なお、異常番号の読み出しは、異常履歴記憶領域Ｒの先頭アドレスから行う。また、異常番号を読み出す毎にカウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃをカウントアップする。
【００８０】
異常番号ＡＡＡを読み出すと、ＣＰＵ１は、異常番号ＡＡＡが選択されたアラーム番号に対応する異常番号か否かを確認する（ステップＳ１４３）。ここで、異常番号ＡＡＡが選択された異常番号でなければ（ステップＳ１４３：ＮＯ）、ＣＰＵ１は、異常履歴記憶領域Ｒからカウンタ領域Ｃの異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認する（ステップＳ１５１）。そして、ＣＰＵ１は、カウンタ領域Ｃの異常履歴読み出し個数Ｃ２ｃを読み込み、当該読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１未満であれば、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出していないと判断する（ステップＳ１５１：ＮＯ）。このように判断すると、ＣＰＵ１は、ステップＳ１４２へ戻って、異常履歴記憶領域Ｒの次のアドレスから異常番号ＡＡＡを読み出し、Ｓ１４３、およびＳ１５１の処理を繰り返し実行する。
【００８１】
そして、ステップＳ１４２、Ｓ１４３、およびＳ１５１の処理を何回か繰り返し実行した後に、ステップＳ１４３で、異常番号ＡＡＡが選択された異常番号であると（ステップＳ１４３：ＹＥＳ）、ＣＰＵ１は、異常番号ＡＡＡが「５０００」以上であるか否かを確認する（ステップＳ１４４）。ここで、異常番号ＡＡＡが「５０００」以上であれば（ステップＳ１４４：ＹＥＳ）、ＣＰＵ１は、異常番号ＡＡＡから「５０００」を減算して異常番号ＡＡＡを補正し（ステップＳ１４５）、当該異常番号ＡＡＡに対応する異常の異常中時間ＢＢＢを、タイマ１６が計測する現在の日付および時刻から、異常履歴記憶領域Ｒに異常番号ＡＡＡとともに書き込まれている異常発生日付および異常発生時刻を減算して求める（ステップＳ１４６）。異常中時間ＢＢＢが求まると、ＣＰＵ１は、ステップＳ１４８へ移行する。これに対して、ステップＳ１４４で、異常番号ＡＡＡが「５０００」未満であれば（ステップＳ１４４：ＮＯ）、ＣＰＵ１は、異常履歴記憶領域Ｒから異常番号ＡＡＡに対応する異常中時間ＢＢＢを読み出して（ステップＳ１４７）、ステップＳ１４８へ移行する。
【００８２】
ステップＳ１４８へ移行すると、ＣＰＵ１は、異常履歴記憶領域Ｒから異常番号ＡＡＡとともに書き込まれている異常発生日付ＣＣＣを読み出し、当該異常発生日付ＣＣＣが選択期間に含まれるか否かを確認する（ステップＳ１４９）。ここで、異常発生日付ＣＣＣが選択期間に含まれていなければ（ステップＳ１４９：ＮＯ）、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認し（ステップＳ１５１）、読み出していなければ（ステップＳ１５１：ＮＯ）、ステップＳ１４２へ戻って、上述したように処理を繰り返し実行する。これに対して、ステップＳ１４９で、異常発生日付ＣＣＣが選択期間に含まれていれば（ステップＳ１４９：ＹＥＳ）、ＣＰＵ１は、演算領域Ｅ４の先頭アドレスと選択期間における異常発生日付ＣＣＣの古い順番とを加算し、この加算した結果から「１」を減算した値の示すアドレスの積算データに異常中時間ＢＢＢを加算する（ステップＳ１５０）。この後、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したか否かを確認し（ステップＳ１５１）、読み出していなければ（ステップＳ１５１：ＮＯ）、ステップＳ１４２へ戻って、ステップＳ１４２〜ステップＳ１５１の処理を繰り返し実行する。
【００８３】
ステップＳ１４２〜ステップＳ１５１の処理を異常履歴記憶個数Ｃ１と同値の回数繰り返し実行した後に、ステップＳ１５１で、カウンタ領域Ｃから読み出した異常履歴読み出し個数Ｃ２ｃが異常履歴記憶個数Ｃ１と一致すると、ＣＰＵ１は、異常履歴記憶領域Ｒから異常履歴記憶個数Ｃ１分の異常番号を読み出したと判断する（ステップＳ１５１：ＹＥＳ）。このとき、演算領域Ｅ４には、図２２（ｂ）に示すように先頭アドレス「０」から日付の古い順番に日付毎の積算異常中時間が記憶された状態となる。続いて、ＣＰＵ１は、図１３ＤのステップＳ１５２で、選択期間の各日付を、演算領域Ｅ４の対応するアドレスの積算データを記憶している部分以外に書き込む。そして、ＣＰＵ１は、選択された異常番号をアラーム番号に変換して、異常情報表示画面Ｇ２の表示ウインドウＷに表示する（ステップＳ１５３）。
【００８４】
アラーム番号の表示後、ＣＰＵ１は、演算領域Ｅ４の所定アドレスから記憶内容を読み出す（ステップＳ１５４）。なお、記憶内容の読み出しは、例えば演算領域Ｅ４の先頭アドレスから行う。記憶内容を読み出すと、ＣＰＵ１は、読み出した記憶内容の１つである選択期間の日付を表示ウインドウＷの最下位置に表示する（ステップＳ１５５）。そして、ＣＰＵ１は、読み出した記憶内容の１つである積算異常中時間と、予め設定された１目盛の大きさとから、積算異常中時間をグラフ表示するためのグラフの長さを計算する（ステップＳ１５６）。そして、ＣＰＵ１は、計算したグラフの長さが予め設定された最大値以上か否かを判定する（ステップＳ１５７）。ここで、グラフの長さが最大値以上であれば（ステップＳ１５７：ＹＥＳ）、ＣＰＵ１は、グラフの長さを最大値でクランプし（ステップＳ１５８）、積算異常中時間を点滅グラフ表示で表示ウインドウＷに表示する（ステップＳ１５９）。これに対して、グラフの長さが最大値未満であれば（ステップＳ１５７：ＮＯ）、ＣＰＵ１は、積算異常中時間を通常グラフ表示で表示ウインドウＷに表示する（ステップＳ１６０）。
【００８５】
積算異常中時間を表示すると、ＣＰＵ１は、カウント領域Ｃの演算領域読み出しポインタＰ２をカウントアップし（ステップＳ１６１）、当該ポインタＰ２が最大値以上になっているか否かを確認する（ステップＳ１６２）。なお、このときの最大値は、選択期間の日数である。ステップＳ１６２で、演算領域読み出しポインタＰ２が最大値より小さければ（ステップＳ１６２：ＮＯ）、ＣＰＵ１は、ステップＳ１５４へ戻って、演算領域Ｅ４の次のアドレスから記憶内容を読み出す。そして、ＣＰＵ１は、ステップＳ１５５で読み出した日付を先に表示した日付より上方に位置するように表示ウインドウＷに表示する。また、ＣＰＵ１は、ステップＳ１５６〜Ｓ１５８の実行後に、ステップＳ１５９またはＳ１６０で積算異常中時間を先に表示した積算異常中時間より上方に位置するように表示ウインドウＷにグラフ表示する。そして、ＣＰＵ１は、ステップＳ１６１の実行後に、ステップＳ１６２で演算領域読み出しポインタＰ２がまだ最大値より小さければ（ステップＳ１６２：ＮＯ）、再びステップＳ１５４へ戻って、ステップＳ１５４〜ステップＳ１６２の処理を上述した手順で繰り返し実行する。
【００８６】
ステップＳ１５４〜ステップＳ１６２の処理を選択期間の日数と同値の回数繰り返し実行した後に、ステップＳ１６２で、演算領域読み出しポインタＰ２が最大値以上になると（ステップＳ１６２：ＹＥＳ）、ＣＰＵ１は、選択されたアラーム番号の選択期間における日付毎の積算異常中時間を全て表示ウインドウＷに表示したと判断し、演算領域読み出しポインタＰ２を「０」にする（ステップＳ１６３）。そして、ＣＰＵ１は、目盛値を表示ウインドウＷに表示して（ステップＳ１６４）、処理を終了する。処理終了後、ＣＲＴ５に表示された異常情報表示画面Ｇ２中には、図２３に示す表示ウインドウＷが表示されている。図２３において、選択期間に含まれる日付６１と各日付毎の積算異常中時間６２は、日付６１の新しい順番に上から下へと並んで表示されている。積算異常中時間６２のグラフ表示の下には、時間を示す目盛値６３が表示されている。また、選択されたアラーム番号「Ａ０００．１」は反転表示６４されている。
【００８７】
上述したように、予め選択された異常項目の任意の選択期間における日付毎の積算異常中時間を求めて、日付の新しい順番に並べてＣＲＴ５に表示することで、ユーザはＣＲＴ５を見ることにより、工作機械２００が特定の異常でいつ何時間ぐらい稼動を停止しているかを一目瞭然で把握することができる。この結果、特定の異常の発生を防ぐために対策をとった場合には、当該対策の有効性を確認することが可能となる。
【００８８】
図２４は、本発明の他の実施形態を示すブロック図である。なお、図中、図１と同一部分については同一符号を付してある。図２４において、本実施形態における工作機械の異常管理装置を構成するＮＣ制御装置１０１は、図１のＮＣ工作機械１００が備える構成の他に、通信部１７を備えている。この通信部１７は、専用回線、公衆回線、またはインターネット等の通信ネットワーク９０を介して外部に設置された上位装置としてのホストコンピュータ３００と通信を行うためのものである。通信部１７は、本発明における通信手段の一実施形態を構成する。
【００８９】
ＣＰＵ１は、前述したように異常履歴記憶領域Ｒの記憶内容を読み込んで演算領域Ｅ１〜Ｅ４に演算した異常番号毎の積算発生回数、異常番号毎の積算異常中時間、日付毎の積算発生回数、および日付毎の積算異常中時間といった積算データを、通信部１７によってホストコンピュータ３００に送信する。その際、演算領域Ｅ１〜Ｅ４の記憶内容をそのまま送信してもよいし、演算領域Ｅ１〜Ｅ４の記憶内容を前述したようにＣＲＴ５に表示した表示データ（図１７、図１９、図２１、図２３に示した表示ウインドウＷのこと）を送信してもよい。また、積算データの送信タイミングとしては、例えば毎日午前０時に送信するというように定期的に送信してもよいし、積算データがＣＲＴ５に表示されたときに送信してもよいし、ホストコンピュータ３００から送信要求を受けたときに送信してもよい。
【００９０】
上記のようにすることで、ホストコンピュータ３００が工作機械メーカまたは工作機械２００の保守サービスを提供するサービス会社に設置されている場合には、メーカ等に工作機械２００の異常の修理・改善の依頼の連絡を逐一行う手間を省くことができ、またメーカ等では送信されて来た積算データから工作機械２００の異常状況を容易かつ明確に把握することができ、異常対策を迅速に検討することが可能となる。一方、ホストコンピュータ３００が複数の工作機械２００およびＮＣ制御装置１００の設けられた事業所等の管理室に設置されている場合には、複数の工作機械２００の異常状況を容易かつ明確に把握することができ、複数の工作機械２００による全体の生産計画を正確に立てることが可能となる。  
【００９１】
本発明は、以上述べた実施形態の他にも種々の形態を採用することができる。例えば、以上の実施形態においては、積算発生回数と積算異常中時間を個別に表示ウインドウＷに表示した場合を例に挙げているが、積算発生回数と積算異常中時間を同時に表示するようにしてもよい。また、日付毎の積算発生回数と積算異常中時間、積算発生回数と日付毎の積算異常中時間というように複数の積算データを組み合わせて表示するようにしてもよい。図２５は、他の実施形態を示す図であり、ＣＲＴ５に表示される表示ウインドウＷの他の表示例を示している。本表示ウインドウＷには、アラーム番号毎の積算発生回数と積算異常中時間が表示されていて、積算発生回数は日付毎の発生回数が分かるように日付毎にグラフの表示形態が異なっている。
【００９２】
また、以上の実施形態では、１０個のアラーム番号毎の積算発生回数または積算異常中時間を表示ウインドウＷに表示したり、１０日分の日付毎の積算発生回数または積算異常中時間を表示ウインドウＷに表示したりした場合を例に挙げているが、１０個未満または１１個以上の異常番号毎の積算発生回数または積算異常中時間を表示ウインドウＷに表示したり、１０日未満または１１日以上の日付毎の積算発生回数または積算異常中時間を表示ウインドウＷに表示したりしてもよい。また、積算発生回数等が０以外のアラーム番号の積算発生回数等だけでなく、積算発生回数等が０のアラーム番号の積算発生回数等も表示するようにしてもよい。なお、アラーム番号毎や日付毎の積算発生回数または積算異常中時間を１度に多数表示ウインドウＷに表示しようとすると、表示が細かくなって非常に見難くなるという問題が生じるが、以下の（Ａ）、（Ｂ）のようにすることで、表示を見やすくすることができる。（Ａ）所定個数ずつ複数ページに分けて表示する。例えば、まず、アラーム番号毎の積算発生回数を１０個まで表示ウインドウＷに表示し、その後、図３に示した下向き矢印のページキー９ｄが押される度に、次の１０個を順次表示ウインドウＷに表示して行く。また、上向き矢印のページキー９ｄが押される度に、前に表示した１０個を順次表示ウインドウＷに表示して行く。（Ｂ）表示ウインドウＷを拡大表示して、１度に表示する個数を増やす。例えば、図１５に示した項目欄２５の右から７番目に表示されている「ズーム」という項目が指定されたときに、表示ウインドウＷをＣＲＴ５の画面一杯に拡大して、アラーム番号毎の積算発生回数または積算異常中時間を３４個まで表示したり、日付毎の積算発生回数または積算異常中時間を３２個まで表示したりする。
【００９３】
さらに、以上の実施形態では、異常情報表示画面Ｇ２で選択キー８の操作により「回数」項目等が指定されたときに、積算発生回数等の表示要求がされたと判断して、積算発生回数等を表示ウインドウＷに表示した場合を例に挙げているが、これ以外に、工作機械２００で異常が発生したときや、電源を投入したとき等に積算発生回数等を表示ウインドウＷに表示するようにしてもよい。
【図面の簡単な説明】
【００９４】
【図１】本発明を適用した工作機械の制御システムを表すブロック図である。
【図２】操作盤の外観を示す正面図である。
【図３】操作部におけるキーボードのキー配置を示した図である。
【図４】異常発生記憶領域を示す図である。
【図５】セーブ記憶領域を示す図である。
【図６】異常履歴記憶領域を示す図である。
【図７】カウンタ領域を示す図である。
【図８Ａ】異常情報の書き込み手順を示すフローチャートである。
【図８Ｂ】異常情報の書き込み手順を示すフローチャートである。
【図９】電源投入時の異常情報の書き込み手順を示すフローチャートである。
【図１０】電源断記憶領域を示す図である。
【図１１】異常と電源の状態を説明するためのタイムチャートである。
【図１２】異常履歴記憶領域に書き込んだ異常情報を示す図である。
【図１３Ａ】異常情報のＣＲＴへの表示手順を示すフローチャートである。
【図１３Ｂ】異常情報のＣＲＴへの表示手順を示すフローチャートである。
【図１３Ｃ】異常情報のＣＲＴへの表示手順を示すフローチャートである。
【図１３Ｄ】異常情報のＣＲＴへの表示手順を示すフローチャートである。
【図１４】ＣＲＴに表示する表示例を示す図である。
【図１５】ＣＲＴに表示する表示例を示す図である。
【図１６】積算発生回数の演算領域を示す図である。
【図１７】ＣＲＴに表示する表示例を示す図である。
【図１８】積算異常中時間の演算領域を示す図である。
【図１９】ＣＲＴに表示する表示例を示す図である。
【図２０】日付毎の積算発生回数の演算領域を示す図である。
【図２１】ＣＲＴに表示する表示例を示す図である。
【図２２】日付毎の積算異常中時間の演算領域を示す図である。
【図２３】ＣＲＴに表示する表示例を示す図である。
【図２４】他の実施形態を示す図である。
【図２５】他の実施形態を示す図である。
【符号の説明】
【００９５】
１    ＣＰＵ
５    ＣＲＴ
１０  ＰＭＣ
１７  通信部
３１、４１、５１、６１  アラーム番号
３２  積算発生回数
４２  積算異常中時間
５２  日付毎の積算発生回数
６２  日付毎の積算異常中時間
１００、１０１  ＮＣ制御装置
２００  ＮＣ工作機械
３００  ホストコンピュータ
Ｒ    異常履歴記憶領域
Ｍ    異常発生記憶領域
Ｄ    電源断記憶領域
【図１】
2005209046.tif 000003
【図２】
2005209046.tif 000004
【図３】
2005209046.tif 000005
【図４】
2005209046.tif 000006
【図５】
2005209046.tif 000007
【図６】
2005209046.tif 000008
【図７】
2005209046.tif 000009
【図８Ａ】
2005209046.tif 000010
【図８Ｂ】
2005209046.tif 000011
【図９】
2005209046.tif 000012
【図１０】
2005209046.tif 000013
【図１１】
2005209046.tif 000014
【図１２】
2005209046.tif 000015
【図１３Ａ】
2005209046.tif 000016
【図１３Ｂ】
2005209046.tif 000017
【図１３Ｃ】
2005209046.tif 000018
【図１３Ｄ】
2005209046.tif 000019
【図１４】
2005209046.tif 000020
【図１５】
2005209046.tif 000021
【図１６】
2005209046.tif 000022
【図１７】
2005209046.tif 000023
【図１８】
2005209046.tif 000024
【図１９】
2005209046.tif 000025
【図２０】
2005209046.tif 000026
【図２１】
2005209046.tif 000027
【図２２】
2005209046.tif 000028
【図２３】
2005209046.tif 000029
【図２４】
2005209046.tif 000030
【図２５】
2005209046.tif 000031