"内燃機関の排気通路に設けられ、排ガスの空燃比を検出するとともに、混合気の理論空燃比に相当する排ガスの空燃比である理論排ガス空燃比を中心とするリーン側空燃比とリッチ側空燃比との間で次第に変化する出力特性を有する空燃比センサの異常を判定する空燃比センサの異常判定装置であって、前記空燃比センサの出力値の微分値を算出する微分値算出手段と、当該算出された空燃比センサの出力値の微分値が所定値になったときの前記空燃比センサの出力値と所定のしきい値との比較結果に基づいて、前記空燃比センサの異常を判定する異常判定手段と、を備えることを特徴とする空燃比センサの異常判定装置。前記空燃比センサは、前記理論排ガス空燃比付近において変化度合が最大になる出力特性を有し、前記所定値は前記微分値の極値であり、前記しきい値には所定の第1しきい値および第2しきい値が含まれ、前記異常判定手段は、前記微分値が前記所定値になったときの前記空燃比センサの出力値が前記第1しきい値と前記第2しきい値の間にあるか否かに応じて、前記空燃比センサの異常を判定することを特徴とする、請求項1に記載の空燃比センサの異常判定装置。前記空燃比センサは、前記理論排ガス空燃比付近において変化度合が最大になる出力特性を有し、前記所定値は0と前記微分値の極値との間の値であり、前記しきい値には所定の第3しきい値および第4しきい値が含まれ、前記異常判定手段は、前記微分値が前記所定値になったときの前記空燃比センサの出力値が前記第3しきい値と前記第4しきい値の間にあるか否かに応じて、前記空燃比センサの異常を判定することを特徴とする、請求項1または2に記載の空燃比センサの異常判定装置。前記しきい値には、前記空燃比センサの出力範囲の上限付近および下限付近の少なくとも一方に設定された第5しきい値が含まれ、前記異常判定手段は、前記空燃比センサの出力値が前記第5しきい値をまたいで変化したか否かに応じて、前記空燃比センサの異常を判定することを特徴とする、請求項1ないし3のいずれかに記載の空燃比センサの異常判定装置。前記異常判定手段は、前記内燃機関への燃料の供給を停止するフューエルカット運転の開始に伴い、排ガスの空燃比が前記理論排ガス空燃比のリッチ側から当該理論排ガス空燃比を経てリーン側に変化するとき、および/または前記フューエルカット運転の終了に伴い、排ガスの空燃比が前記理論排ガス空燃比のリーン側から当該理論排ガス空燃比を経てリッチ側に変化するときに、前記空燃比センサの異常判定を実行することを特徴とする、請求項1ないし4のいずれかに記載の空燃比センサの異常判定装置。前述したように、特許文献1および2の異常判定装置はいずれも、空燃比センサの出力値が停滞しているときに、空燃比センサに異常が発生していると判定するものである。このため、それ以外のパターンの空燃比センサの異常が発生したときに、その異常を判定することができない。例えば、空燃比センサの出力値の微分値を空燃比センサの異常判定に用いているので、出力値の全体的なオフセットによる空燃比センサの出力特性のずれの異常が発生しても、微分値は正常時と変わらないため、空燃比センサの異常を判定することができない。本発明は、以上のような課題を解決するためになされたものであり、空燃比センサの停滞以外の様々なパターンの異常を適切に判定することができる空燃比センサの異常判定装置を提供することを目的とする。上記の目的を達成するために、請求項1に係る発明は、内燃機関3の排気通路排気管5に設けられ、排ガスの空燃比排ガス空燃比A/FEXを検出するとともに、混合気の理論空燃比に相当する排ガスの空燃比である理論排ガス空燃比A/FTHEXを中心とするリーン側空燃比とリッチ側空燃比との間で次第に変化する出力特性を有する空燃比センサ酸素濃度センサ21の異常を判定する空燃比センサの異常判定装置1であって、空燃比センサの出力値O2出力値SVO2の微分値O2微分値DSVO2を算出する微分値算出手段ECU2、図3のステップ3と、算出された空燃比センサの出力値の微分値が所定値開始時ピーク微分値DINP、開始時基本微分値DINBASE、終了時ピーク微分値DOUTP、終了時基本微分値DOUTBASEになったときの空燃比センサの出力値と所定のしきい値第1上限値VH1、第2上限値VH2、第1下限値VL1、第2下限値VL2との比較結果に基づいて、空燃比センサの異常を判定する異常判定手段ECU2、図5、図9と、を備えることを特徴とする。本発明の異常判定装置によれば、空燃比センサの出力値の微分値を算出するとともに、算出された微分値が所定値になったときの空燃比センサの出力値と所定のしきい値との比較結果に基づいて、空燃比センサの異常を判定する。空燃比センサは、理論排ガス空燃比を中心とするリーン側空燃比とリッチ側空燃比との間で次第に変化する出力特性を有する。このため、排ガスの空燃比が理論排ガス空燃比を中心として変化する際、空燃比センサが正常であれば、空燃比センサの出力値およびその微分値は、互いに空燃比センサの出力特性に応じた所定の関係を保ちながら変化する。このような関係から、微分値が所定値になったときの空燃比センサの出力値以下基準時出力値というが上記の所定の関係に基づく所定のしきい値に対してずれていることは、例えば出力値の全体的または部分的なオフセットなどによる空燃比センサの出力特性のずれの異常が発生していることを示す。したがって、空燃比センサの基準出力値と所定のしきい値を比較し、その比較結果に基づいて空燃比センサの異常を判定することによって、様々なパターンの異常に対応しながら、空燃比センサの異常を適切に判定することができる。また、例えば、そのような空燃比センサの異常判定の結果に応じて、内燃機関の空燃比制御を適切に行うことが可能になり、それにより、内燃機関の排ガス特性を向上させることができる。請求項2に係る発明は、請求項1に記載の空燃比センサの異常判定装置1において、空燃比センサは、理論排ガス空燃比A/FTHEX付近において変化度合が最大になる出力特性を有し、所定値は微分値の極値開始時ピーク微分値DINP、終了時ピーク微分値DOUTPであり、しきい値には所定の第1しきい値第1上限値VH1および第2しきい値第1下限値VL1が含まれ、異常判定手段は、微分値が所定値になったときの空燃比センサの出力値開始時ピーク出力値VINP、終了時ピーク出力値VOUTPが第1しきい値と第2しきい値の間にあるか否かに応じて、空燃比センサの異常を判定する図6のステップ43、図10のステップ83ことを特徴とする。この構成によれば、空燃比センサの出力値の微分値が極値になったときの空燃比センサの出力値を基準時出力値とするとともに、この基準時出力値が第1しきい値と第2しきい値の間にあるか否かに応じて、空燃比センサの異常を判定する。この空燃比センサは、理論排ガス空燃比付近において変化度合が最大になる出力特性を有するため、出力値の微分値は、理論排ガス空燃比付近において極値になる。このため、基準時出力値が第1しきい値と第2しきい値の間にないことは、理論排ガス空燃比付近において、空燃比センサの出力特性のずれが発生していることを示す。したがって、基準時出力値が第1しきい値と第2しきい値の間にあるか否かに応じて、理論排ガス空燃比付近における空燃比センサの異常を適切に判定することができる。さらに、基準時出力値を定める所定値が微分値の極値であるため、所定値が極値以外である場合と比較して、異常判定を行うべき基準点がより明確に現れるので、空燃比センサの異常判定を適切に行うことができる。請求項3に係る発明は、請求項1または2に記載の空燃比センサの異常判定装置1において、空燃比センサは、理論排ガス空燃比A/FTHEX付近において変化度合が最大になる出力特性を有し、所定値は0と微分値の極値との間の値開始時基本微分値DINBASE、終了時基本微分値DOUTBASEであり、しきい値には所定の第3しきい値第2上限値VH2および第4しきい値第2下限値VL2が含まれ、異常判定手段は、微分値が所定値になったときの空燃比センサの出力値開始時リッチ出力値VINR、開始時リーン出力値VINL、終了時リーン出力値VOUTL、終了時リッチ出力値VOUTRが第3しきい値と第4しきい値の間にあるか否かに応じて、空燃比センサの異常を判定する図7のステップ54、図8のステップ62、図11のステップ94、図12のステップ102ことを特徴とする。この構成によれば、上述した請求項2と同様、空燃比センサは、理論排ガス空燃比付近において変化度合が最大になる出力特性を有するため、出力値の微分値は、理論排ガス空燃比付近において極値になる。また、微分値が0と微分値の極値との間にある所定値になったときの空燃比センサの出力値を基準時出力値とするとともに、この基準時出力値が第3しきい値と第4しきい値の間にあるか否かに応じて、空燃比センサの異常を判定する。このため、基準時出力値が第3しきい値と第4しきい値の間から外れていることは、理論排ガス空燃比付近以外の排ガスの空燃比の領域において空燃比センサの出力特性のずれが発生していることを示す。したがって、基準時出力値が第3しきい値と第4しきい値の間にあるか否かに応じて、上記の排ガスの空燃比の領域における空燃比センサの異常を適切に判定することができる。また、所定値が0と微分値の極値との間の値であるため、排ガスの空燃比が理論排ガス空燃比を経て変化する際、微分値は、理論排ガス空燃比のリッチ側およびリーン側のいずれにおいても所定値になる。したがって、基準時出力値が第3しきい値と第4しきい値の間にあるか否かに応じて、理論排ガス空燃比付近よりもリッチ側およびリーン側の領域における空燃比センサの異常を適切に判定することができる。また、上述した請求項2の異常判定と併せて異常判定を行う場合には、理論排ガス空燃比付近を含む、排ガスの空燃比のより広い領域を対象として、空燃比センサの異常を総合的にかつきめ細かく適切に判定することができる。請求項4に係る発明は、請求項1ないし3のいずれかに記載の空燃比センサの異常判定装置1において、しきい値には、空燃比センサの出力範囲の上限付近および下限付近の少なくとも一方に設定された第5しきい値第2上限値VH2、第2下限値VL2が含まれ、異常判定手段は、空燃比センサの出力値が第5しきい値をまたいで変化したか否かに応じて、空燃比センサの異常を判定する図7のステップ52、図8のステップ64、図11のステップ92、図12のステップ104ことを特徴とする。この構成によれば、異常判定手段は、空燃比センサの出力値が第5しきい値をまたいで変化したか否かに応じて、空燃比センサの異常を判定する。第5しきい値は、空燃比センサの出力範囲の上限付近および/または下限付近に設定されている。このため、例えば、この第5しきい値を空燃比センサの本来の出力範囲の上限よりも小さな値に設定した場合において、空燃比センサの出力値が第5しきい値をまたいでいないときには、空燃比センサの出力値が出力範囲の上限に達しないようなずれが発生していると判定できる。また、第5しきい値を空燃比センサの本来の出力範囲の上限よりも大きな値に設定した場合において、空燃比センサの出力値が第5しきい値をまたいでいるときには、空燃比センサの出力値が出力範囲の上限を超えるようなずれが発生していると判定できる。したがって、空燃比センサの出力値が第5しきい値をまたいで変化したか否かに応じて、空燃比センサの出力範囲の上限付近および/または下限付近に相当する排ガスの空燃比の領域における空燃比センサの異常を適切に判定することができる。また、上述した請求項2および3の異常判定と併せて異常判定を行う場合には、排ガスの空燃比のさらに広い領域を対象として、空燃比センサの異常をさらに総合的にかつきめ細かく適切に判定することができる。請求項5に係る発明は、請求項1ないし4のいずれかに記載の空燃比センサの異常判定装置1において、異常判定手段は、内燃機関3への燃料の供給を停止するフューエルカット運転の開始に伴い、排ガスの空燃比が理論排ガス空燃比A/FTHEXのリッチ側から理論排ガス空燃比A/FTHEXを経てリーン側に変化するとき、および/またはフューエルカット運転の終了に伴い、排ガスの空燃比が理論排ガス空燃比A/FTHEXのリーン側から理論排ガス空燃比A/FTHEXを経てリッチ側に変化するときに、空燃比センサの異常判定を実行する図3のステップ9,10,13,14ことを特徴とする。この構成によれば、フューエルカット運転の開始および/または終了に伴い、排ガスの空燃比が理論排ガス空燃比を経て変化するときに、空燃比センサの異常判定を実行する。このように、フューエルカット運転の開始および/または終了に伴い、排ガスの空燃比が確実にかつ大きく変化するときに空燃比センサの異常判定を実行するので、この異常判定を適切に行うことができる。また、上述したように排ガスの空燃比の様々な領域において異常判定を行う場合には、それらの異常判定を一括して行うことができる。また、フューエルカット運転の開始時および終了時のいずれにおいても、空燃比センサの異常判定を実行する場合には、空燃比センサの出力特性がフューエルカット運転の開始時と終了時で互いに異なるときでも、それらの異常を個別に判定することができる。以下、図面を参照しながら、本発明の好ましい実施形態について説明する。図1に示すように、本発明を適用した異常判定装置1は、ECU2を備えており、このECU2は、内燃機関以下エンジンという3の空燃比制御を含む各種の制御処理を行う。エンジン3は、車両図示せずに搭載された、例えば4気筒のガソリンエンジンである。エンジン3の吸気管4には、スロットル弁6が設けられ、その下流側の吸気マニホールド図示せずには、燃料噴射弁以下インジェクタという7が気筒ごとに設けられている。各インジェクタ7の開弁時間および開閉タイミングは、ECU2によって制御され、それにより、燃料噴射量QINJおよび燃料噴射時期が制御される。一方、排気管5の下流側には、触媒8が設けられている。この触媒8は、三元触媒で構成されており、酸化還元作用によって、排ガス中のCO、HCおよびNOxを浄化する。また、排気管5の触媒8よりも下流側には、酸素濃度センサ以下O2センサという21が設けられている。O2センサ21は、触媒8の下流側における排ガス中の酸素濃度を検出し、混合気の空燃比に応じて変化する排ガスの空燃比以下排ガス空燃比というA/FEXに応じた電圧を有する信号をECU2に出力する。図2に示すように、O2センサ21は、混合気の理論空燃比に相当する排ガスの空燃比以下理論排ガス空燃比というA/FTHEXのときに、O2センサ21の出力信号の電圧値以下O2出力値というSVO2がストイキ出力値VTHEX例えば450mVを示すとともに、理論排ガス空燃比A/FTHEXの前後において急激に変化する出力特性を有する。具体的には、O2出力値SVO2は、排ガス空燃比A/FEXがリッチなときには、高い値例えば600mVを示し、排ガス空燃比A/FEXがリーンなときには、低い値例えば150mVを示すとともに、その間では急激に変化する。また、その変化度合は、排ガス空燃比A/FEXに応じて変化し、排ガス空燃比A/FEXが理論排ガス空燃比A/FTHEX付近のときに、この例では、排ガス空燃比A/FEXが、O2出力値SVO2がストイキ出力値VTHEXよりも50mVだけ小さい値=400mVに相当するときに、最大になる。また、O2センサ21の検出部図示せずには、温度センサ22が設けられている。温度センサ22は、検出部の温度TSO2を検出し、その検出信号をECU2に出力する。また、吸気管4のスロットル弁6よりも上流側には、エアフローメータ23が設けられている。エアフローメータ23は、吸気管4を流れる空気の質量以下吸気量というGAIRを検出し、その検出信号をECU2に出力する。また、ECU2は、CPU、RAM、ROMおよび入出力インターフェースいずれも図示せずなどから成るマイクロコンピュータ図示せずで構成されている。ECU2は、上述したセンサ21~23の検出信号に応じ、ROMに記憶された制御プログラムなどに基づいて、空燃比制御などのための各種の演算処理を実行する。なお、本実施形態では、ECU2は、微分値算出手段および異常判定手段に相当する。次に、図3~図13を参照しながら、ECU2で実行されるO2センサ21の異常判定処理について説明する。この異常判定処理は、O2センサ21の出力特性の変化に伴う出力値SVO2の異常を判定するものであり、図3がメインルーチン、図4~図13がサブルーチンに相当する。各処理は、所定時間ごとに実行される。図3のメインルーチンではまず、ステップ1S1と図示。以下同じにおいて、モニタ条件判定処理を実行する。このモニタ条件判定処理は、O2センサ21の異常判定処理の実行条件が整っているか否かを判定するものであり、図4はそのサブルーチンを示す。本処理ではまず、ステップ21~23において、以下の1~3の条件が成立しているか否かをそれぞれ判別する。1O2センサ21の検出部の温度TSO2が所定温度TREF以上であること2O2センサ異常フラグF_SO2ERRが0であることO2センサ21の異常が確定していないこと3O2センサ21に断線や出力値の停滞振動などの他の異常が発生していないことこれらの1~3の条件がすべて成立しているときには、モニタ条件が成立していると判定し、そのことを表すために、ステップ24において、モニタ条件フラグF_MONを1にセットし、本処理を終了する。一方、1~3の条件のいずれかが成立していないときには、モニタ条件が成立していないと判定し、そのことを表すために、ステップ25において、モニタ条件フラグF_MONを0にセットし、本処理を終了する。図3に戻り、前記ステップ1に続くステップ2では、モニタ条件フラグF_MONが1であるか否かを判別する。この答がNOで、モニタ条件が成立していないときには、そのまま本処理を終了する。一方、上記ステップ2の答がYESで、モニタ条件が成立しているときには、O2出力値SVO2の今回値と前回値との差を、O2微分値DSVO2として算出するステップ3とともに、算出されたO2微分値DSVO2を、O2出力値SVO2の今回値とともに記憶するステップ4。次に、ステップ5において、フューエルカットフラグF_FCが1であるか否かを判別する。この答がYESで、エンジン3がフューエルカットF/C運転中のときには、ステップ6において、F/C開始時異常判定終了フラグF_INENDが1であるか否かを判別する。この答がYESで、フューエルカット運転開始時の異常判定がすでに終了しているときには、そのまま本処理を終了する。一方、上記ステップ6の答がNOで、フューエルカット運転開始時の異常判定がまだ終了していないときには、ステップ7において、フューエルカット運転の終了時からの吸気量GAIRの積算値以下終了時吸気量積算値というΣGOUTを0にリセットし、ステップ8において、フューエルカット運転の開始時から前回時までの吸気量GAIRの積算値ΣGINに吸気量GAIRを加算することによって、今回時までの吸気量GAIRの積算値以下開始時吸気量積算値というΣGINを算出する。次に、ステップ9において、算出した開始時吸気量積算値ΣGINが第1所定量GREF1以上であるか否かを判別する。この答がNOのときには、そのまま本処理を終了する。一方、上記ステップ9の答がYESのときには、フューエルカット運転を開始してから十分な量の空気がエンジン3に供給され、フューエルカット運転の実行に伴って排ガス空燃比A/FEXがリッチ側からリーン側に変化したとして、ステップ10において、フューエルカット運転開始時の異常判定処理を実行し、ステップ15に進む。このフューエルカット運転開始時の異常判定処理は、フューエルカット運転の開始後に前記ステップ4で記憶されたO2出力値SVO2およびO2微分値DSVO2を用いて、O2センサ21の異常を判定するものであり、図5はそのサブルーチンを示す。本処理ではまず、ステップ31において、開始時ピーク異常判定終了フラグF_INPENDが1であるか否かを判別する。この答がNOのときには、ステップ32において、フューエルカット運転開始時のピーク異常判定処理を実行し、図5の処理を終了する。このピーク異常判定処理は、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常を判定するものであり、図6はそのサブルーチンを示す。本処理ではまず、ステップ40において、開始時ピーク微分値DINPを算出する。この開始時ピーク微分値DINPは、O2微分値DSVO2が極小値を示すときピーク時の値であり、次のようにして算出される。まず、フューエルカット運転を開始してから開始時吸気量積算値ΣGINが第1所定量GREF1以上になるまでの間以下、この期間を開始時移行期間というに記憶されたO2微分値DSVO2のうち、O2微分値DSVO2が極小値になったタイミングをピーク時と判定する。このタイミングは、O2微分値DSVO2をさらに微分した値O2微分値の増加量が3回以上連続して正の値になったときの1回目の制御サイクルの開始タイミングに定められる。次に、ピーク時のO2微分値DSVO2を開始時ピーク微分値DINPとして算出する。次に、ステップ41において、開始時ピーク微分値DINPに対応するO2出力値SVO2を開始時ピーク出力値VINPとして算出する。なお、前述したように、O2センサ21は、理論排ガス空燃比A/FTHEX付近において出力値の変化度合が最大になる出力特性を有するため、O2センサ21が正常なときには、開始時ピーク微分値DINPおよび開始時ピーク出力値VINPは、理論排ガス空燃比A/FTHEX付近において得られる。次に、ステップ42において、開始時ピーク微分値DINPの1/2=DINP/2を、開始時基本微分値DINBASEとして算出する。この開始時基本微分値DINBASEは、後述するリッチ側異常判定およびリーン側異常判定に用いられる。次に、ステップ43において、算出した開始時ピーク出力値VINPが第1下限電圧VL1以上で、かつ第1上限電圧VH1以下であるか否かを判別する。この第1下限電圧VL1は、ストイキ出力値VTHEXよりも150mVだけ小さな値=300mVに、第1上限電圧VH1は、ストイキ出力値VTHEXよりも50mVだけ大きな値=500mVに、それぞれ設定されている。ステップ43の答がYESで、VL1≦VINP≦VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ44において、開始時ピーク異常フラグF_INPERRを0にセットし、ステップ46に進む。一方、前記ステップ43の答がNOで、VINP<VL1またはVINP>VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常が発生していると判定し、そのことを表すために、ステップ45において、開始時ピーク異常フラグF_INPERRを1にセットし、ステップ46に進む。ステップ44またはステップ45に続くステップ46では、フューエルカット運転開始時のピーク異常判定処理が終了したことを表すために、開始時ピーク異常判定終了フラグF_INPENDを1にセットし、本処理を終了する。図5に戻り、前記ステップ31の答がYESで、開始時ピーク異常判定終了フラグF_INPENDが1のときには、ステップ33において、開始時リッチ異常判定終了フラグF_INRENDが1であるか否かを判別する。この答がNOのときには、ステップ34において、フューエルカット運転開始時のリッチ側異常判定処理を実行し、図5の処理を終了する。このリッチ側異常判定処理は、理論排ガス空燃比A/FTHEX付近よりもリッチ側の領域におけるO2センサ21の出力特性のずれの異常を判定するものであり、図7はそのサブルーチンを示す。本処理ではまず、ステップ51において、開始時上限通過フラグF_INVH2を設定する。図示しないが、この開始時上限通過フラグF_INVH2は、開始時移行期間の始点からピーク時までの間に記憶されたO2出力値SVO2が、第2上限電圧VH2よりも大きい側から第2上限電圧VH2をまたいで小さい側に変化したときに0にセットされ、それ以外のときに1にセットされる。第2上限電圧VH2は、前記第1上限電圧VH1よりも大きく、O2センサ21の出力範囲の上限よりも50mVだけ小さな値=550mVに設定されている。次に、ステップ52において、開始時上限通過フラグF_INVH2が0であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2上限電圧VH2をまたいで大きい側から小さい側に変化していないときには、O2出力値SVO2が出力範囲の上限に達しない異常が発生しているとして、ステップ56において、開始時リッチ異常フラグF_INRERRを1にセットし、ステップ57に進む。一方、上記ステップ52の答がYESで、O2出力値SVO2が、第2上限電圧VH2をまたいで変化しているときには、O2出力値SVO2が出力範囲の上限に達していると判定し、ステップ53において、開始時リッチ出力値VINRを算出する。この開始時リッチ出力値VINRは、開始時移行期間の始点からピーク時までの間において、O2微分値DSVOがステップ42で算出された開始時基本微分値DINBASEに最も近い値を示すときのO2出力値SVO2である。具体的には、開始時移行期間の始点からピーク時までの間に前記ステップ4で記憶されたO2微分値DSVOの中から、開始時基本微分値DINBASEとの差の絶対値=|DINBASE-DSVO2|が最も小さいO2微分値DSVOを求め、それに対応するO2出力値SVO2を開始時リッチ出力値VINRとして算出する。次に、ステップ54において、算出した開始時リッチ出力値VINRが、第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この第2下限電圧VL2は、前記第1下限電圧VL1よりも小さく、かつO2センサ21の出力範囲の下限よりも50mVだけ大きな値=200mVに設定されている。ステップ54の答がNOで、VINR<VL2またはVINR>VH2のときには、第2上限電圧VH2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、前記ステップ56に進み、開始時リッチ異常フラグF_INRERRを1にセットする。一方、上記ステップ54の答がYESで、VL2≦VINR≦VH2のときには、上記の領域におけるO2センサ21の出力特性は正常であると判定するとともに、前記ステップ52の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリッチ側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ55において、開始時リッチ異常フラグF_INRERRを0にセットし、ステップ57に進む。ステップ55またはステップ56に続くステップ57では、フューエルカット運転開始時のリッチ側異常判定処理が終了したことを表すために、開始時リッチ異常判定終了フラグF_INRENDを1にセットし、本処理を終了する。図5に戻り、前記ステップ33の答がYESで、開始時リッチ異常判定終了フラグF_INRENDが1のときには、ステップ35において、開始時リーン異常判定終了フラグF_INRENDが1であるか否かを判別する。この答がNOのときには、ステップ36において、フューエルカット運転開始時のリーン側異常判定処理を実行し、図5の処理を終了する。このリーン側異常判定処理は、理論排ガス空燃比A/FTHEX付近よりもリーン側の領域におけるO2センサ21の出力特性のずれの異常を判定するものであり、図8はそのサブルーチンを示す。本処理ではまず、ステップ61において、開始時リーン出力値VINLを算出する。この開始時リーン出力値VINLは、ピーク時から開始時移行期間の終点までの間において、O2微分値DSVOが開始時基本微分値DINBASEに最も近い値を示すときのO2出力値SVO2である。具体的には、ピーク時から開始時移行期間の終点までの間に記憶されたO2微分値DSVOの中から、開始時基本微分値DINBASEとの差の絶対値が最も小さいO2微分値DSVOを求め、それに対応するO2出力値SVO2を開始時リーン出力値VINLとして算出する。次に、ステップ62において、算出した開始時リーン出力値VINLが、前記第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この答がNOで、VINL<VL2またはVINL>VH2のときには、第2下限電圧VL2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、ステップ66において、開始時リーン異常フラグF_INLERRを1にセットし、ステップ67に進む。一方、上記ステップ62の答がYESで、VL2≦VINL≦VH2のときには、上記の領域におけるO2センサ21の出力特性は正常であると判定し、ステップ63において、開始時下限通過フラグF_INVL2を設定する。図示しないが、この開始時下限通過フラグF_INVL2は、ピーク時から開始時移行期間の終点までの間に記憶されたO2出力値SVO2が、第2下限電圧VL2よりも大きい側から第2下限電圧VL2をまたいで小さい側に変化したときに0にセットされ、それ以外のときに1にセットされる。次に、ステップ64において、開始時下限通過フラグF_INVL2が0であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2下限電圧VL2をまたいで大きい側から小さい側に変化していないときには、O2出力値SVO2が出力範囲の下限に達しない異常が発生しているとして、前記ステップ66に進み、開始時リーン異常フラグF_INLERRを1にセットする。一方、上記ステップ64の答がYESで、O2出力値SVO2が、第2下限電圧VL2をまたいで変化しているときには、O2出力値SVO2が出力範囲の下限に達していると判定するとともに、前記ステップ62の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリーン側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ65において、開始時リーン異常フラグF_INLERRを0にセットし、ステップ67に進む。ステップ65またはステップ66に続くステップ67では、フューエルカット運転開始時のリーン側異常判定処理が終了したことを表すために、開始時リーン異常判定終了フラグF_INLENDを1にセットし、本処理を終了する。図5に戻り、前記ステップ35の答がYESで、開始時リーン異常判定終了フラグF_INLENDが1のときには、フューエルカット運転開始時の一連の異常判定処理が終了しているため、そのことを表すために、ステップ37において、開始時異常判定終了フラグF_INENDを1にセットし、本処理を終了する。図3に戻り、前記ステップ5の答がNOで、フューエルカットフラグF_FCが0であり、エンジン3のフューエルカット運転が終了しているときには、ステップ11において、開始時吸気量積算値ΣGINを0にリセットし、ステップ12において、前回時までの終了時吸気量積算値ΣGOUTに吸気量GAIRを加算することによって、今回時までの終了時吸気量積算値ΣGOUTを算出する。次に、ステップ13において、算出した終了時吸気量積算値ΣGOUTが第2所定量GREF2以上であるか否かを判別する。この答がNOのときには、そのまま本処理を終了する。一方、上記ステップ13の答がYESのときには、フューエルカット運転の終了に伴って排ガス空燃比A/FEXがリーン側からリッチ側に変化したとして、ステップ14において、フューエルカット運転終了時の異常判定処理を実行し、ステップ15に進む。このフューエルカット運転終了時の異常判定処理は、前述したフューエルカット運転開始時の異常判定処理と同様のものであり、図9はそのサブルーチンを示す。本処理ではまず、ステップ71において、終了時ピーク異常判定終了フラグF_OUTPENDが1であるか否かを判別する。この答がNOのときには、ステップ72において、フューエルカット運転終了時のピーク異常判定処理を実行し、図9の処理を終了する。図10はそのサブルーチンを示す。本処理ではまず、ステップ80において、終了時ピーク微分値DOUTPを算出する。この終了時ピーク微分値DOUTPは、O2微分値DSVO2が極大値を示すときピーク時の値であり、フューエルカット運転を終了してから終了時吸気量積算値ΣGOUTが第2所定量GREF2以上になるまでの間以下、この期間を終了時移行期間というに記憶されたO2微分値DSVO2に基づき、前述した開始時ピーク微分値DINPと同様にして算出される。次に、ステップ81において、終了時ピーク微分値DOUTPに対応するO2出力値SVO2を終了時ピーク出力値VOUTPとして算出する。次に、ステップ82において、終了時ピーク微分値DOUTPの1/2=DOUTP/2を、終了時基本微分値DOUTBASEとして算出する。この終了時基本微分値DOUTBASEは、後述するリッチ側異常判定およびリーン側異常判定に用いられる。次に、ステップ83において、算出した終了時ピーク出力値VOUTPが前記第1下限電圧VL1以上で、かつ前記第1上限電圧VH1以下であるか否かを判別する。この答がYESで、VL1≦VOUTP≦VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ84において、終了時ピーク異常フラグF_OUTPERRを0にセットし、ステップ86に進む。一方、前記ステップ83の答がNOで、VOUTP<VL1またはVOUTP>VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常が発生していると判定し、そのことを表すために、ステップ85において、終了時ピーク異常フラグF_OUTPERRを1にセットし、ステップ86に進む。ステップ84またはステップ85に続くステップ86では、フューエルカット運転終了時のピーク異常判定処理が終了したことを表すために、終了時ピーク異常判定終了フラグF_OUTPENDを1にセットし、本処理を終了する。図9に戻り、前記ステップ71の答がYESで、終了時ピーク異常判定終了フラグF_OUTPENDが1のときには、ステップ73において、終了時リーン異常判定終了フラグF_OUTLENDが1であるか否かを判別する。この答がNOのときには、ステップ74において、フューエルカット運転終了時のリーン側異常判定処理を実行し、図9の処理を終了する。図11はそのサブルーチンを示す。本処理ではまず、ステップ91において、終了時下限通過フラグF_OUTVL2を設定する。図示しないが、この終了時下限通過フラグF_OUTVL2は、フューエルカット運転を終了してからピーク時までの間に、O2出力値SVO2が第2下限電圧VL2よりも小さい側から第2下限電圧VL2をまたいで大きい側に変化したときに0にセットされ、それ以外のときに1にセットされる。次に、ステップ92において、終了時下限通過フラグF_OUTVL2が0であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2下限電圧VL2をまたいで小さい側から大きい側に変化していないときには、O2出力値SVO2が出力範囲の下限に達しない異常が発生しているとして、ステップ96において、終了時リーン異常フラグF_OUTLERRを1にセットし、ステップ57に進む。一方、上記ステップ92の答がYESで、O2出力値SVO2が、第2下限電圧VH2をまたいで変化しているときには、O2出力値SVO2が出力範囲の下限に達していると判定し、ステップ93において、終了時リーン出力値VOUTLを算出する。この終了時リーン出力値VOUTLは、終了時移行期間の始点からピーク時までの間において、O2微分値DSVOがステップ82で算出された終了時基本微分値DOUTBASEに最も近い値を示すときのO2出力値SVO2であり、前述した開始時リッチ出力値VINRと同様の方法で算出される。次に、ステップ94において、算出した終了時リーン出力値VOUTLが前記第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この答がNOで、VOUTL<VL2またはVOUTL>VH2のときには、第2下限電圧VL2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、前記ステップ96に進み、終了時リーン異常フラグF_OUTLERRを1にセットする。一方、上記ステップ94の答がYESで、VL2≦VOUTL≦VH2のときには、上記の領域におけるO2センサ21の出力特性は正常であると判定するとともに、前記ステップ92の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリーン側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ95において、終了時リーン異常フラグF_OUTLERRを0にセットし、ステップ97に進む。ステップ95またはステップ96に続くステップ97では、フューエルカット運転終了時のリーン側異常判定処理が終了したことを表すために、終了時リーン異常判定終了フラグF_OUTLENDを1にセットし、本処理を終了する。図9に戻り、前記ステップ73の答がYESで、終了時リーン異常判定終了フラグF_OUTLENDが1のときには、ステップ75において、終了時リッチ異常判定終了フラグF_OUTRENDが1であるか否かを判別する。この答がNOのときには、ステップ76において、フューエルカット運転終了時のリッチ側異常判定処理を実行し、図9の処理を終了する。図12はそのサブルーチンを示す。本処理ではまず、ステップ101において、終了時リッチ出力値VOUTRを算出する。この終了時リッチ出力値VOUTRは、ピーク時から終了時移行期間の終点までの間において、O2微分値DSVOが終了時基本微分値DOUTBASEに最も近い値を示すときのO2出力値SVO2であり、前述した開始時リーン出力値VINLと同様の方法で算出される。次に、ステップ102において、算出した終了時リッチ出力値VOUTRが、前記第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この答がNOで、VOUTR<VL2またはVOUTR>VH2のときには、第2上限電圧VH2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、ステップ106において、終了時リッチ異常フラグF_OUTRERRを1にセットし、ステップ107に進む。一方、前記ステップ102の答がYESで、VL2≦VOUTR≦VH2のときには、ステップ103において、終了時上限通過フラグF_OUTVH2を設定する。図示しないが、この終了時上限通過フラグF_OUTVH2は、ピーク時から終了時移行期間の終点までの間に記憶されたO2出力値SVO2が、第2上限電圧VH2よりも小さい側から第2上限電圧VH2をまたいで大きい側に変化したときに0にセットされ、それ以外のときに1にセットされる。次に、ステップ104において、終了時上限通過フラグF_OUTVH2が0であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2上限電圧VH2をまたいで小さい側から大きい側に変化していないときには、O2出力値SVO2が出力範囲の上限に達しない異常が発生しているとして、前記ステップ106に進み、終了時リッチ異常フラグF_OUTRERRを1にセットする。一方、上記ステップ104の答がYESで、O2出力値SVO2が、第2上限電圧VH2をまたいで変化しているときには、O2出力値SVO2が出力範囲の上限に達していると判定するとともに、前記ステップ102の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリッチ側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ105において、終了時リッチ異常フラグF_OUTRERRを0にセットし、ステップ107に進む。ステップ105またはステップ106に続くステップ107では、フューエルカット運転終了時のリッチ側異常判定処理が終了したことを表すために、終了時リッチ異常判定終了フラグF_OUTRENDを1にセットし、本処理を終了する。図9に戻り、前記ステップ75の答がYESで、終了時リッチ異常判定終了フラグF_OUTRENDが1のときには、フューエルカット運転終了時の一連の異常判定処理が終了しているため、そのことを表すために、ステップ77において、終了時異常判定終了フラグF_OUTENDを1にセットし、本処理を終了する。図3に戻り、前記ステップ10またはステップ14に続くステップ15では、終了時異常判定終了フラグF_OUTENDが1であるか否かを判別する。この答がNOのときには、そのまま本処理を終了する。一方、上記ステップ15の答がYESで、フューエルカット運転終了時の異常判定処理が終了しているときには、ステップ16において、総合判定処理を実行し、図3の処理を終了する。この総合判定処理は、上述した各種の異常判定においてセットされた異常フラグを用いて、O2センサ21の異常を総合的に判定するものであり、図13はそのサブルーチンを示す。本処理ではまず、ステップ111~116において、以下の1~6の条件が成立しているか否かをそれぞれ判別する。1開始時ピーク異常フラグF_INPERR=02開始時リッチ異常フラグF_INRERR=03開始時リーン異常フラグF_INLERR=04終了時ピーク異常フラグF_OUTPERR=05終了時リーン異常フラグF_OUTLERR=06終了時リッチ異常フラグF_OUTRERR=0これらの1~6の条件がすべて成立しているときには、O2センサ21は正常であると判定し、そのことを表すために、ステップ117において、O2センサ異常フラグF_SO2ERRを0にセットし、ステップ119に進む。一方、1~6の条件のいずれかが成立していないときには、O2センサ21の異常が発生していると判定し、そのことを表すために、ステップ118において、O2センサ異常フラグF_SO2ERRを1にセットし、ステップ119に進む。ステップ117またはステップ118に続くステップ119およびステップ120では、開始時異常判定終了フラグF_INENDおよび終了時異常判定終了フラグF_OUTENDをいずれも0にセットし、本処理を終了する。次に、図14~図18を参照しながら、これまでに説明した異常判定処理による判定例を、フューエルカット運転開始時の異常判定処理の場合を例にとり説明する。図14a~fは、異常発生時のO2センサ21の出力特性細線を、正常時の出力特性太線とともに、異常パターンごとに示し、図15~18は、フューエルカット運転の開始に伴う各種パラメータの変化を示す。図15に示すように、O2センサ21が正常な場合には、フューエルカット運転を開始する前にF_FC=0、O2出力値SVO2は第2上限値VH2よりも大きなほぼ一定の値になっており、したがって、O2微分値DSVO2は0である。フューエルカットフラグF_FCが1にセットされ、フューエルカット運転が開始されると、O2出力値SVO2は、O2センサ21の出力特性に従って減少し、最終的に第2下限値VL2よりも小さなほぼ一定の値になる。その間、O2微分値DSVO2は、O2センサ21の出力特性に従って、理論排ガス空燃比A/FTHEX付近において開始時ピーク微分値DINPまで減少した後、増加に転じ、0に戻る。同図に示すように、O2出力値SVO2は、第2上限値VH2および第2下限値VL2をまたいで変化しており、開始時ピーク出力値VINPは、第1上限値VH1と第1下限値VL1の間にあり、開始時リッチ出力値VINRおよび開始時リーン出力値VINLはいずれも、第2上限値VH2と第2下限値VL2の間にある。したがって、O2センサ21が正常なときには、図19に示すように、開始時上限通過フラグF_INVH2、開始時ピーク異常フラグF_INPERR、開始時リッチ異常フラグF_INRERR、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2がすべて0にセットされる。その結果、図13に示す総合判定において、O2センサ21は正常と判定される。これに対し、図14aの細線に示すように、O2出力値SVO2が全体的に増加側にオフセットする異常以下リッチ側オフセットというが発生している場合には、図16の1点鎖線に示すように、O2微分値DSVO2は、O2センサ21が正常なときと同じであり、したがって、開始時ピーク微分値DINPおよび開始時基本微分値DINBASEも同じである。一方、O2出力値SVO2は、第2上限値VH2をまたいで変化するものの、第2下限値VL2はまたがず、その上側大きい側に留まる。また、開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも上側大きい側にあり、開始時リッチ出力値VINRは第2上限値VH2よりも上側にある。したがって、リッチ側オフセットが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2は0にセットされ、開始時ピーク異常フラグF_INPERR、開始時リッチ異常フラグF_INRERR、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも1にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。また、図14bの細線に示すように、O2出力値SVO2が全体的に減少側にオフセットする異常以下リーン側オフセットというが発生している場合には、図16の2点鎖線に示すように、O2微分値DSVO2は、O2センサ21が正常なときと同じであり、したがって、開始時ピーク微分値DINPおよび開始時基本微分値DINBASEも同じである。一方、O2出力値SVO2は、第2下限値VL2をまたいで変化するものの、第2上限値VH2はまたがず、その下側小さい側に留まる。また、開始時リッチ出力値VINRは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも下側小さい側にあり、開始時リーン出力値VINLは第2下限値VL2よりも下側にある。したがって、リーン側オフセットが発生しているときには、図19に示すように、開始時下限通過フラグF_INVL2は0にセットされ、開始時上限通過フラグF_INVH2、開始時ピーク異常フラグF_INPERR、開始時リッチ異常フラグF_INRERRおよび開始時リーン異常フラグF_INLERRはいずれも1にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。また、図14cの細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリッチ側の出力範囲において増加側にオフセットする異常以下リッチ片側オフセットというが発生している場合には、図17の1点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリッチ側にずれ、そのときの開始時ピーク微分値DINPはより小さくO2微分値DSVO2の変化量が大きくなり、したがって、開始時基本微分値DINBASEもより小さくなっている。一方、O2出力値SVO2は、第2上限値VH2および第2下限値VL2をまたいで変化する。しかし、開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも上側にあり、開始時リッチ出力値VINRは第2上限値VH2よりも上側にある。したがって、リッチ片側オフセットが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも0にセットされ、開始時リッチ異常フラグF_INRERRおよび開始時ピーク異常フラグF_INPERRはいずれも1にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。また、図14dの細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリーン側の出力範囲において減少側にオフセットする異常以下リーン片側オフセットというが発生している場合には、図17の2点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリーン側にずれ、そのときの開始時ピーク微分値DINPはより小さくO2微分値DSVO2の変化量が大きくなり、したがって、開始時基本微分値DINBASEもより小さくなっている。一方、O2出力値SVO2は、第2上限値VH2および第2下限値VL2をまたいで変化する。しかし、開始時リッチ出力値VINRは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1下限値VL1よりも下側にあり、開始時リーン出力値VINLは第2下限値VL2よりも下側にある。したがって、リーン片側オフセットが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2、開始時リッチ異常フラグF_INRERRおよび開始時下限通過フラグF_INVL2はいずれも0にセットされ、開始時ピーク異常フラグF_INPERRおよび開始時リーン異常フラグF_INLERRはいずれも1にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。また、図14eの細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリッチ側の出力範囲において減少側にオフセットする異常以下リッチ側つぶれというが発生している場合には、図18の1点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリーン側にずれ、そのときの開始時ピーク微分値DINPはより大きくO2微分値DSVO2の変化量が小さくなり、したがって、開始時基本微分値DINBASEもより大きくなっている。一方、O2出力値SVO2は、第2下限値VL2をまたいで変化するものの、第2上限値VH2はまたがず、その下側小さい側に留まる。また、開始時リッチ出力値VINRおよび開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1下限値VL1よりも下側にある。したがって、リッチ側つぶれが発生しているときにO2センサ21の異常判定処理を実行すると、図19に示すように、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも0にセットされ、開始時上限通過フラグF_INVH2、開始時リッチ異常フラグF_INRERRおよび開始時ピーク異常フラグF_INPERRはいずれも1にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。また、図14fの細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリーン側の出力範囲において増加側にオフセットする異常以下リーン側つぶれというが発生している場合には、図18の2点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリッチ側にずれ、そのときの開始時ピーク微分値DINPはより大きくO2微分値DSVO2の変化量が小さくなり、したがって、開始時基本微分値DINBASEもより大きくなっている。一方、O2出力値SVO2は、第2上限値VH2をまたいで変化するものの、第2下限値VL2はまたがず、その上側大きい側に留まる。また、開始時リッチ出力値VINRおよび開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも下側にある。したがって、リーン側つぶれが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2および開始時リッチ異常フラグF_INRERRはいずれも0にセットされ、開始時ピーク異常フラグF_INPERR、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも1にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。以上の結果から、図19に示すように、5つのフラグの値の組み合わせが、O2センサ21の異常パターンに応じて異なるので、それらの組み合わせに基づいて、異常パターンを特定することも可能である。以上のように、本実施形態によれば、O2微分値DSVO2が所定値開始時ピーク微分値DINP、開始時基本微分値DINBASE、終了時ピーク微分値DOUTP、終了時基本微分値DOUTBASEになったときのO2出力値SVO2を用いてO2センサ21の異常を判定するので、O2センサ21にリッチ側オフセットやリーン側オフセットなどのO2微分値DSVO2に変化が現れない異常が発生しているときでも、出力特性のずれが発生しているとして、O2センサ21の異常を適切に判定することができる。また、開始時ピーク出力値VINPおよび終了時ピーク出力値VOUTPがそれぞれ第1上限値VH1と第1下限値VL1の間にあるか否かに応じて、O2センサ21の異常を判定するので、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常を適切に判定することができる。さらに、開始時ピーク微分値DINPはO2微分値DSVO2の極小値であり、終了時ピーク微分値DOUTPはO2微分値DSVO2の極大値であるため、異常判定を行うべき基準点がより明確に現れることで、O2センサ21の異常判定を適切に行うことができる。また、開始時リッチ出力値VINR、開始時リーン出力値VINL、終了時リーン出力値VOUTLおよび終了時リッチ出力値VOUTRがそれぞれ第1上限値VH1と第1下限値VL1の間にあるか否かに応じてO2センサ21の異常を判定するので、理論排ガス空燃比A/FTHEX付近よりもリッチ側およびリーン側の領域におけるO2センサ21の異常を適切に判定することができる。また、O2出力値SVO2が第2上限値VH2および第2下限値VL2をそれぞれまたいで変化したか否かに基づいてO2センサ21の異常を判定するので、O2センサ21の出力範囲の上限付近および下限付近に相当する排ガス空燃比A/FEXの領域におけるO2センサ21の異常を適切に判定することができる。また、上述したように排ガス空燃比A/FEXの様々な領域において異常判定を行うので、排ガス空燃比A/FEXの広い領域を対象として、O2センサ21の異常を総合的にかつきめ細かく適切に判定することができる。また、フューエルカット運転の開始時および終了時のいずれにおいても、O2センサ21の異常判定を実行するので、O2センサ21の出力特性がフューエルカット運転の開始時と終了時で互いに異なるときでも、O2センサ21の異常を判定することができる。なお、本発明は、説明した実施形態に限定されることなく、種々の態様で実施することができる。例えば、実施形態では、開始時基本微分値DINBASEとして、開始時ピーク微分値DINPの1/2を用いているが、0と開始時ピーク微分値DINPの間の値であればよく、開始時ピーク微分値DINPに相関しない値や固定値でもよい。このことは、終了時基本微分値DOUTBASEについても同様である。また、実施形態では、O2センサ21の異常判定を、F/C開始終了時移行期間が経過し、フューエルカット運転の開始終了に伴う排ガス空燃比A/FEXの変化が終了してから行っているが、これに限らず、フューエルカット運転の開始終了時から、O2出力値SVO2およびO2微分値DSVO2のその時点の値を用いて、リアルタイムにO2センサ21の異常判定を行ってもよく、あるいは、フューエルカット運転の終了後に、フューエルカット運転の開始時および終了時の異常判定処理をまとめて行ってもよい。また、実施形態では、第1上限値VH1、第2上限値VH2、第1下限値VL1および第2下限値VL2は、フューエルカット運転開始時と終了時とで同じであるが、異なる値にしてもよい。また、リッチ側異常判定およびリーン側異常判定を行う場合の第2上限値および第2下限値と、上限下限通過フラグを設定する場合の第2上限値および第2下限値を、それぞれ互いに同じ値第2上限値VH2、第2下限値VL2に設定し、共通に用いているが、互いに異なる値に設定してもよい。例えば、開始時上限通過フラグF_INVH2および終了時上限通過フラグF_OUTVH2の設定に用いる第2上限値を、O2センサ21の出力範囲の上限よりも大きな値に設定し、および/または、開始時下限通過フラグF_INVL2および終了時下限通過フラグF_OUTVL2の設定に用いる第2下限値を、O2センサ21の出力範囲の下限よりも小さな値に設定するとともに、O2出力値SVO2が第2上限値および/または第2下限値を通過したときに異常と判定してもよい。また、実施形態では、O2センサ21の異常判定を、フューエルカット運転の開始時および終了時の双方において実行しているが、いずれか一方において実行してもよい。また、実施形態では、O2センサ21は、触媒8の下流側に設けられているが、上流側に設けられていてもよい。また、実施形態は、本発明を車両に搭載されたガソリンエンジンに適用した例であるが、本発明は、これに限らず、ガソリンエンジン以外のディーゼルエンジンなどの各種のエンジンに適用してもよく、また、車両用以外のエンジン、例えば、クランク軸を鉛直に配置した船外機などのような船舶推進機用エンジンにも適用可能である。その他、本発明の趣旨の範囲内で、細部の構成を適宜、変更することが可能である。"