JPH06231004A - アナログ/デジタル変換のシミュレーション方法 - Google Patents

アナログ/デジタル変換のシミュレーション方法

Info

Publication number
JPH06231004A
JPH06231004A JP1271093A JP1271093A JPH06231004A JP H06231004 A JPH06231004 A JP H06231004A JP 1271093 A JP1271093 A JP 1271093A JP 1271093 A JP1271093 A JP 1271093A JP H06231004 A JPH06231004 A JP H06231004A
Authority
JP
Japan
Prior art keywords
job
conversion
variable
crank
crank position
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP1271093A
Other languages
English (en)
Inventor
Masaru Kurihara
優 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Subaru Corp
Original Assignee
Fuji Heavy Industries Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Heavy Industries Ltd filed Critical Fuji Heavy Industries Ltd
Priority to JP1271093A priority Critical patent/JPH06231004A/ja
Publication of JPH06231004A publication Critical patent/JPH06231004A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】 アナログ/デジタル変換結果を使用する処理
プログラムのデバッグを容易にし、且つ、デバッグ効率
を向上させる。 【構成】 ドリームモード変数DRM_ADがゼロであ
るか否かを調べ、DRM_AD≠0であり、ドリームモ
ードへの移行が指示されているときには、ドリームモー
ド変数DRM_ADの値を4倍した擬似的なA/D変換
の数値をアキュムレータAにロードし、所定のメモリ領
域にストアする。これにより、例えば、吸入空気量デー
タを使用するジョブに対しデバッグを行なう場合、対応
するドリームモード変数DRM_ADに希望する吸入空
気量となるような数値を書き込むことにより、実際に吸
入空気量センサからA/D変換器に信号を入力しなくと
も希望する吸入空気量のA/D変換結果を得ることがで
き、極めて容易に且つ効率良くデバッグを行なうことが
できる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、デバッグ効率を向上す
ることのできるアナログ/デジタル変換のシミュレーシ
ョン方法に関する。
【0002】
【従来の技術】近年、自動車などの車輌にマイクロコン
ピュータが導入され、エンジン、パワートレインなどを
高精度に制御することが可能となった。これにより、車
輌制御システムの開発においては、マイクロコンピュー
タのソフトウエア開発が大きな比重を占めるようにな
り、制御アルゴリスム上の処理の効率化が重要な課題と
なっている。
【0003】このマイクロコンピュータは、定電圧回路
や各種周辺回路を加えた電子制御装置(ECU)として
車輌に搭載され、例えば、エンジン制御などにおける吸
入空気量の算出、燃料噴射量の設定、点火時期の設定な
どといった所定時間時間周期毎あるいは所定クランク角
毎の割込み要因による数多くのジョブを実行する。
【0004】上記ECUで実行されるプログラムの開発
には、例えば特開昭61−204703号公報や特開平
3−62202号公報などに記載されているように、開
発支援装置を用い、この開発支援装置のホストコンピュ
ータにより、車載用のECUをターゲットとして、各種
制御ストラテジーに基づくプログラムの作成、データセ
ッティング、デバッグなどを行なうようになっている。
【0005】
【発明が解決しようとする課題】ところで、上記ECU
で実行されるプログラムのデバッグのためには、実際に
車輌を運転して外部から各種センサ・スイッチ類の信号
を入力する必要があるため、運転条件の制約により上記
ECUへの入力データを変更して様々な状況を再現する
ことは困難であった。
【0006】この場合、外部入力信号を擬似的に発生さ
せて上記ECUに入力し、実際に車輌を運転せずに上記
ECU内のプログラムを実行させようとすると、上記E
CUへの入力される外部信号には、例えば、吸入空気量
信号、スロットル開度信号、冷却水温信号、吸入管圧力
信号などのようなアナログ信号と、クランク位置検出信
号、スイッチ信号などのようなデジタル信号とがあり、
車輌の運転状態に対応してデジタル信号を擬似的に発生
させることは比較的容易であるのに対し、車輌の運転状
態に対応して意味のあるアナログ信号を擬似的に発生さ
せることは容易ではなく、大規模な装置を必要とする。
【0007】従って、例えば、吸入空気量のデータを使
用するジョブプログラムのみをデバッグしたいといった
場合でも、データの変更が困難であるばかりでなく、大
規模な装置を使用してシステム全体に渡ってデバッグの
ための処置を施さなければならないといった事態にな
り、特にアナログ/デジタル変換結果を使用するジョブ
をデバッグする際のデバッグ効率は、必ずしも満足でき
る状態ではなかった。
【0008】本発明は上記事情に鑑みてなされたもの
で、アナログ/デジタル変換結果を使用する処理プログ
ラムに対して簡単にデバッグを行なうことができ、デバ
ッグ効率を向上することのできるアナログ/デジタル変
換のシミュレーション方法を提供することを目的として
いる。
【0009】
【課題を解決するための手段】本発明は、一定時間毎
に、車輌に備えた個々のアナログ/デジタル変換器に対
応して外部書込み可能な所定の変数を参照することによ
り、シミュレーションモードへの移行が指示されている
か否かを調べ、シミュレーションモードへの移行が指示
されていない場合、上記変数に対応するアナログ/デジ
タル変換器から変換結果を読取り、シミュレーションモ
ードへの移行が指示されている場合、上記変数に基づい
て設定した値を、対応するアナログ/デジタル変換器の
変換結果として読取ることを特徴とする。
【0010】
【作用】本発明では、車輌に備えた個々のアナログ/デ
ジタル変換器に対し、一定時間毎に、各変換器に対応し
て外部書込み可能な所定の変数を参照してシミュレーシ
ョンモードへの移行が指示されているか否かを調べる。
そして、シミュレーションモードへの移行が指示されて
いない場合、上記変数に対応するアナログ/デジタル変
換器から変換結果を読取り、シミュレーションモードへ
の移行が指示されている場合、上記変数に基づいて設定
した値を、対応するアナログ/デジタル変換器の変換結
果として読取るため、シミュレーションモードであって
も通常のモードであってもアナログ/デジタル変換結果
は同様に扱われ、アナログ/デジタル変換結果を使用す
る処理プログラムを容易にデバッグすることができる。
【0011】
【実施例】以下、図面を参照して本発明の実施例を説明
する。図面は本発明の一実施例に係り、図1は読取り及
びSSHBへのストア処理サブルーチンのフローチャー
ト、図2は0.5ms毎の定期割込み処理のフローチャ
ート、図3はクラセン割込み処理のフローチャート、図
4はジョブ優先処理のフローチャート、図5はジョブ実
行サブルーチンの部分フローチャート1、図6はジョブ
実行サブルーチンの部分フローチャート2、図7はジョ
ブ実行サブルーチンの部分フローチャート3、図8はジ
ョブ実行サブルーチンの部分フローチャート4、図9は
クランク位置算出サブルーチンのフローチャート、図1
0は半回転時間推定サブルーチンのフローチャート、図
11はCCAS・RCAS判別サブルーチンのフローチ
ャート、図12はクラセンタイマのオーバーフロー割込
み処理のフローチャート、図13はA/D変換サブルー
チンのフローチャート、図14はジョブの実行状態を示
す説明図、図15はジョブフラグの説明図、図16はク
ランク位置変数の説明図、図17はジョブ実行中フラグ
とオーバーラップカウンタの変化を示す説明図、図18
はクラセン間隔テーブルの説明図、図19は気筒・クラ
ンク位置状態マップの説明図、図20は変換順番テーブ
ルの説明図、図21はSSHBストア番地テーブルの説
明図、図22はシステムシフトバッファの説明図、図2
3はドリームモード変数の説明図、図24はクランク位
置とエンジンの行程を示すタイムチャート、図25はエ
ンジン系の概略構成図、図26はクランクロータとクラ
ンク角センサの正面図、図27はカムロータとカム角セ
ンサの正面図、図28は電子制御系の回路構成図であ
る。
【0012】本実施例における車輌制御システムは、例
えば、燃料噴射制御、点火時期制御などを行なうエンジ
ン制御システムであり、図28に示すマイクロコンピュ
ータを中核とした電子制御装置(ECU)50により図
25に示すエンジン系が制御される。
【0013】上記ECU50のマイクロコンピュータに
は、新しい概念に基づくオペレーティングシステム(O
S)が搭載され、このOSにより、各センサ類からの信
号入力処理、エンジン回転数算出処理、吸入空気量算出
処理、燃料噴射量設定処理、点火時期設定処理などとい
った各制御項目毎のジョブが管理されて効率的に実行さ
れるようになっている。
【0014】まず、上記ECU50によって制御される
エンジン系の機器構成について説明する。図25に示す
ように、エンジン1(図においては水平対向4気筒型エ
ンジンを示す)は、シリンダヘッド2の吸気ポート2a
にインテークマニホルド3が連通され、このインテーク
マニホルド3の上流にエアチャンバ4を介してスロット
ル通路5が連通されている。このスロットル通路5の上
流側には、吸気管6を介してエアクリーナ7が取付けら
れ、このエアクリーナ7が吸入空気の取り入れ口である
エアインテークチャンバ8に連通されている。
【0015】また、上記排気ポート2bにエキゾースト
マニホルド9を介して排気管10が連通され、この排気
管10に触媒コンバータ11が介装されてマフラ12に
連通されている。一方、上記スロットル通路5にスロッ
トルバルブ5aが設けられ、このスロットル通路5の直
上流の上記吸気管6にインタークーラ13が介装され、
さらに、上記吸気管6の上記エアクリーナ7の下流側に
レゾネータチャンバ14が介装されている。
【0016】また、上記レゾネータチャンバ14と上記
インテークマニホルド3とを連通して上記スロットルバ
ルブ5aの上流側と下流側とをバイパスするバイパス通
路15に、アイドルスピードコントロールバルブ(IS
CV)16が介装されている。さらに、このISCV1
6の直下流側に、吸気圧が負圧のとき開弁し、またター
ボチャージャ18によって過給されて吸気圧が正圧にな
ったとき閉弁するチェックバルブ17が介装されてい
る。
【0017】上記ターボチャージャ18は、上記吸気管
6の上記レゾネータチャンバ14の下流側にコンプレッ
サハウジングが介装され、タービンハウジングが上記排
気管10に介装されている。さらに、上記ターボチャー
ジャ18のタービンハウジング流入口には、ウエストゲ
ート弁19が介装され、このウエストゲート弁19に
は、ウエストゲート弁作動用アクチュエータ20が連設
されている。
【0018】上記ウエストゲート弁作動用アクチュエー
タ20は、ダイヤフラムにより2室に仕切られ、一方が
ウエストゲート弁制御用デューティソレノイド弁21に
連通される圧力室を形成し、他方が上記ウエストゲート
弁19を閉方向に付勢するスプリングを収納したスプリ
ング室を形成している。
【0019】上記ウエストゲート弁制御用デューティソ
レノイド弁21は、上記レゾネータチャンバ14と上記
吸気管6の上記ターボチャージャ18のコンプレッサハ
ウジング下流とを連通する通路に介装されており、EC
U50から出力される制御信号のデューティ比に応じ
て、上記レゾネータチャンバ14側の圧力と上記コンプ
レッサハウジング下流側の圧力とを調圧し、上記ウエス
トゲート弁作動用アクチュエータ20の圧力室に供給す
る。
【0020】すなわち、上記ECU50によって上記ウ
エストゲート弁制御用デューティソレノイド弁21を制
御し、上記ウエストゲート弁作動用アクチュエータ20
を作動させて上記ウエストゲート弁19による排気ガス
リリーフを調整することにより、上記ターボチャージャ
18による過給圧を制御するようになっている。
【0021】また、上記インテークマニホルド3に絶対
圧センサ22が通路23を介して連通され、この通路2
3に、上記絶対圧センサ22と上記インテークマニホル
ド3あるいは大気とを選択的に連通する吸気管圧力/大
気圧切換ソレノイド弁24が介装されている。
【0022】さらに、上記インテークマニホルド3の各
気筒の各吸気ポート2aの直上流側にインジェクタ25
が臨まされ、また、上記シリンダヘッド2の各気筒毎
に、その先端を燃焼室に露呈する点火プラグ26aが取
付けられ、この点火プラグ26aに連設する点火コイル
26bにイグナイタ27が接続されている。
【0023】上記インジェクタ25には、燃料タンク2
8内に設けたインタンク式の燃料ポンプ29から燃料フ
ィルタ30を経て燃料が圧送され、プレッシャレギュレ
ータ31にて調圧される。
【0024】また、上記吸気管6の上記エアークリーナ
7の直下流に、ホットワイヤ式あるいはホットフィルム
式などの吸入空気量センサ32が介装され、上記スロッ
トルバルブ5aに、スロットル開度センサ33aとアイ
ドルスイッチ33bとを内蔵したスロットルセンサ33
が連設されている。
【0025】さらに、上記エンジン1のシリンダブロッ
ク1aにノックセンサ34が取付けられるとともに、こ
のシリンダブロック1aの左右両バンクを連通する冷却
水通路35に冷却水温センサ36が臨まされ、上記排気
管10の上記エキゾーストマニホルド9の集合部にO2
センサ37が臨まされている。
【0026】また、上記シリンダブロック1aに支承さ
れたクランクシャフト1bにクランクロータ38が軸着
され、このクランクロータ38の外周に、電磁ピックア
ップなどからなるクランク角センサ39が対設されてい
る。さらに、上記エンジン1のカムシャフト1cに連設
するカムロータ40に、電磁ピックアップなどからなる
気筒判別用のカム角センサ41が対設されている。尚、
上記クランク角センサ39及び上記カム角センサ41
は、電磁ピックアップなどの磁気センサに限らず、光セ
ンサなどでも良い。
【0027】上記クランクロータ38は、図26に示す
ように、その外周に突起38a,38b,38cが形成
され、これらの各突起38a,38b,38cが、各気
筒(#1,#2と#3,#4)の圧縮上死点前(BTD
C)θ1,θ2,θ3 の位置に形成されており、本実施例に
おいては、θ1 =97°CA、θ2 =65°CA、θ3
=10°CAである。
【0028】上記クランクロータ38の各突起は、上記
クランク角センサ39によって検出され、BTDC97
°,65°,10°のクランクパルスがエンジン1/2
回転毎(180°CA毎)に出力される。そして、各信
号の入力間隔時間がタイマによって計時され、エンジン
回転数が算出される。
【0029】尚、突起38bは、点火時期設定の際の基
準クランク角となり、また、突起38cは、始動時噴射
開始時期の基準クランク角となるとともに始動時の固定
点火時期を示すクランク角となる。
【0030】また、図27に示すように、上記カムロー
タ40の外周には、気筒判別用の突起40a,40b,
40cが形成され、突起40aが#3,#4気筒の圧縮
上死点後(ATDC)θ4 の位置に形成され、突起40
bが3個の突起で構成されて最初の突起が#1気筒のA
TDCθ5 の位置に形成されている。さらに、突起40
cが2個の突起で形成され、最初の突起が#2気筒のA
TDCθ6 の位置に形成されている。本実施例において
は、θ4 =20°CA、θ5 =5°CA、θ6=20°
CAである。
【0031】そして、上記カムロータ40の各突起が上
記カム角センサ41によって検出され、各気筒の燃焼行
程順を#1→#3→#2→#4とした場合、この燃焼行
程順と、上記カム角センサ41からのカムパルスをカウ
ンタによって計数した値とのパターンに基づいて、気筒
判別がなされる。
【0032】一方、図28に示すECU50は、燃料噴
射制御、点火時期制御などを行なうメインコンピュータ
51と、ノック検出処理を行なう専用のサブコンピュー
タ52との2つのコンピュータを中心として構成され、
各部に所定の安定化電源を供給する定電圧回路53や各
種の周辺回路が組込まれている。
【0033】上記定電圧回路53は、ECUリレー54
のリレー接点を介してバッテリ55に接続され、このバ
ッテリ55に、上記ECUリレー54のリレーコイルが
イグニッションスイッチ56を介して接続されている。
また、上記バッテリ55には、上記定電圧回路53が直
接接続され、さらに、燃料ポンプリレー57のリレー接
点を介して燃料ポンプ29が接続されている。
【0034】すなわち、上記定電圧回路53は、上記イ
グニッションスイッチ56がONされ、上記ECUリレ
ー54のリレー接点が閉となったとき、制御用電源を供
給し、また、上記イグニッションスイッチ56がOFF
されたとき、バックアップ用の電源を供給する。
【0035】上記メインコンピュータ51は、CPU5
8(以下、メインCPU58と称する)、ROM59、
RAM60、上記イグニッションスイッチ56がOFF
されたときにも上記定電圧回路53からバックアップ電
源が供給されてデータを保持するバックアップRAM6
1、カウンタ・タイマ群62、シリアル通信インターフ
ェースであるSCI63、及び、I/Oインターフェー
ス64がバスライン65を介して接続されたマイクロコ
ンピュータである。
【0036】尚、上記カウンタ・タイマ群62は、フリ
ーランカウンタ、カム角センサ(以下、適宜、カムセン
と略記する)信号の入力計数用カムセンカウンタなどの
各種カウンタ、燃料噴射タイマ、点火タイマ、後述する
0.5ms毎の定期割込みを発生させるための定期割込
みタイマ、クランク角センサ(以下、適宜、クラセンと
略記する)信号の入力間隔計時用クラセンタイマ、及
び、システム異常監視用のウオッチドッグタイマなどの
各種タイマを便宜上総称するものであり、上記メインコ
ンピュータ51においては、その他、各種のソフトウエ
アカウンタ・タイマが用いられる。
【0037】また、上記サブコンピュータ52も、上記
メインコンピュータ51と同様、CPU71(以下、サ
ブCPU71と称する)、ROM72、RAM73、カ
ウンタ・タイマ群74、SCI75、及び、I/Oイン
ターフェース76がバスライン77を介して接続された
マイクロコンピュータであり、上記メインコンピュータ
51とサブコンピュータ52とは、上記SCI63,7
5を介してシリアル通信ラインにより互いに接続されて
いる。
【0038】上記メインコンピュータ51のI/Oイン
ターフェース64には、入力ポートに、吸入空気量セン
サ32、スロットル開度センサ33a、水温センサ3
6、O2 センサ37、絶対圧センサ22、車速センサ4
2、及び、バッテリ55が、8チャンネル入力のA/D
変換器66を介して接続されるとともに、アイドルスイ
ッチ33b、クランク角センサ39、カム角センサ41
が接続されており、さらに、始動状態を検出するために
スタータスイッチ43が接続されている。
【0039】尚、本実施例においては、上記A/D変換
器66は、7チャンネル分の入力が使用され、残りの1
チャンネルは予備となっている。
【0040】また、上記I/Oインターフェース64の
出力ポートには、イグナイタ27が接続され、さらに、
駆動回路67を介して、ISCV16、インジェクタ2
5、燃料ポンプリレー57のリレーコイル、および、ウ
エストゲート弁制御用デューティソレノイド弁21、吸
気管圧力/大気圧切換ソレノイド弁24が接続されてい
る。
【0041】一方、上記サブコンピュータ52のI/O
インターフェース76は、入力ポートに、クランク角セ
ンサ39、カム角センサ41が接続されるとともに、A
/D変換器78、周波数フィルタ79、アンプ80を介
してノックセンサ34が接続されており、上記ノックセ
ンサ34からのノック検出信号が上記アンプ80で所定
のレベルに増幅された後に上記周波数フィルタ79によ
り必要な周波数成分が抽出され、上記A/D変換器78
にてデジタル信号に変換されて入力されるようになって
いる。
【0042】上記メインコンピュータ51では、各セン
サ類からの検出信号を処理し、燃料噴射パルス幅、点火
時期などを演算する。すなわち、吸入空気量センサ32
の出力信号から吸入空気量を算出し、RAM60及びバ
ックアップRAM61に記憶されている各種データに基
づき、吸入空気量に見合った燃料噴射量を演算し、ま
た、点火時期などを算出する。
【0043】そして、上記燃料噴射量に相応する駆動パ
ルス幅信号を、駆動回路67を介して所定のタイミング
で該当気筒のインジェクタ25に出力して燃料を噴射
し、また、所定のタイミングでイグナイタ27に点火信
号を出力し、該当気筒の点火プラグ26aを点火する。
【0044】その結果、該当気筒に供給された混合気が
爆発燃焼し、エキゾーストマニホルド9の集合部に臨ま
されたO2 センサ37により排気ガス中の酸素濃度が検
出され、この検出信号が波形整形された後、上記メイン
CPU58で基準電圧(スライスレベル)と比較され、
エンジンの空燃比状態が目標空燃比に対し、リッチ側に
あるか、リーン側にあるかが判別され、空燃比が目標空
燃比となるようフィードバック制御される。
【0045】一方、上記サブコンピュータ52では、エ
ンジン回転数とエンジン負荷とに基づいてノックセンサ
34からの信号のサンプル区間を設定し、このサンプル
区間でノックセンサ34からの信号を高速にA/D変換
して振動波形を忠実にデジタルデータに変換し、ノック
発生の有無を判定する。
【0046】上記サブコンピュータ52のI/Oインタ
ーフェース76の出力ポートは、上記メインコンピュー
タ51のI/Oインターフェース64の入力ポートに接
続されており、上記サブコンピュータ52でのノック判
定結果がI/Oインターフェース76に出力される。そ
して、上記メインコンピュータ51では、上記サブコン
ピュータ52からノック発生有りの判定結果が出力され
ると、SCI63を介してシリアル通信ラインよりノッ
クデータを読込み、このノックデータに基づいて直ちに
該当気筒の点火時期を遅らせ、ノックを回避する。
【0047】このようなエンジン制御において、上記メ
インコンピュータ51では、各センサ類からの信号入力
処理、エンジン回転数算出、吸入空気量算出、燃料噴射
量算出、点火時期算出といった各項目毎の各種プログラ
ムが、一つのOSの管理下で効率的に実行される。この
OSは、車輌制御のための各種マネジメント機能、及
び、このマネジメント機能に密着した内部ストラテジー
を有し、各種ジョブを体系的に結合する。
【0048】上記OSのマネジメント機能としては、 (1-1)ジョブの優先処理 (1ー2)セクション定義による各ジョブの分割ファイル対
応 (1-3)スタックの使用状況モニタ機能 (1-4)異常割込み動作のモニタ機能 (1-5)ジョブ毎に固有の制約を作らない標準マップ・標
準ワークメモリ設定 などの機能があり、制御ストラテジーの開発環境を向上
させるとともに、限られたCPU能力を最大限に発揮さ
せ、デジタル制御理論の基本である等時間間隔処理を可
能な限り達成することができる。
【0049】等時間間隔処理としては、0.5ms毎の
定期割込みを基本として、2,4,10,50,250
ms毎の5種類の等間隔割込みジョブが用意されてお
り、また、エンジン回転に同期した処理として、クラン
ク角信号入力により即割込み実行される高優先クラセン
ジョブ(以下、単にクラセンジョブと称する)と、より
優先順位が高い他のジョブがないときにクランク角信号
入力により割込み実行される比較的緊急度の低い低優先
クラセンジョブとが用意されている。
【0050】これらの各ジョブには、クラセンジョブ>
2msジョブ>4msジョブ>10msジョブ>低優先
クラセンジョブ>50msジョブ>250msジョブの
順で、7〜1の優先レベルが高位側から低位側に向かっ
て付けられており、図14に示すように、高速ジョブに
対し低速ジョブが分割して処理されるとともに、各ジョ
ブの多重待ち処理が行なわれる。
【0051】また、上記OSの下で働く各プログラム
は、機能別の管理領域すなわちセクション領域毎に順番
に配列されており、各セクション領域には機能毎にセク
ション宣言によって名前が付けられている。各ストラテ
ジーファイル側で使用する主なセクション領域は、 ○変数宣言領域 ○自己ファイル名、ファイル制作時の自動記録領域 ○セッティングデータ領域 ○クラセンジョブ領域 ○2msジョブ領域 ○4msジョブ領域 ○10msジョブ領域 ○低優先クラセンジョブ領域 ○50msジョブ領域 ○250msジョブ領域 ○リセット時初期化ジョブ領域 ○エンスト時初期化ジョブ領域 ○バックグランドジョブ領域 ○プログラム本体の領域 であり、機能毎にファイルを分割してプログラム開発が
可能になるとともに、プログラムの構造化記述を可能に
する。
【0052】また、上記OSには、以上のマネジメント
機能に密着した内部ストラテジーとして、 (2-1)A/D変換処理 (2-2)クランク位置に係る各種情報の算出 (2-3)デバッグ用シミュレーション機能(エンジン回転
及びA/D変換) (2-4)点火タイマのセット (2-5)燃料噴射タイマのセット などの機能を備えており、さらに、これらの機能に係る
各種サービスルーチンが各ジョブ中に用意されている。
【0053】従来、このような機能は各ジョブレベルで
達成するようになっていたが、本システムにおいては、
すべてOS側に用意され、OS側で処理したA/D変換
結果、クランク位置情報、エンジン回転数などに基づい
て、ユーザー側の各ジョブで、燃料噴射量、点火時期な
どを設定すると、これらの指示値がOSによって燃料噴
射タイマ、点火タイマにセットされるようになってい
る。
【0054】次に、上記メインコンピュータ51におけ
るジョブ処理の機能を、図1〜図13のフローチャート
に基づいて説明する。尚、サブコンピュータ52はノッ
ク検出処理専用のコンピュータであるため、その動作説
明を省略する。
【0055】まず、イグニッションスイッチ56がON
されてシステムに電源が投入されると、リセットに伴う
リセット割込みが起動し、各種イニシャライズが行なわ
れるとともに、0.5ms毎に定期割込みを起動するた
めの定期割込みタイマが起動され、クランク角センサ3
9からの信号入力毎(BTDC97°,65°,10°
CA毎のエンジン1回転に6回)に起動されるクラセン
割込みが許可され、その後、バックグランドジョブの実
行状態となる。
【0056】そして、このバックグランドジョブの上
で、0.5ms毎の定期割込みと、エンジン1回転に6
回のクラセン割込みとにより、7レベルのジョブが優先
処理される。この2つの割込みにおいては、各自の処理
を実行後、共通のアドレスにジャンプし、ジョブ優先処
理を実行する。
【0057】尚、上記リセット割込みは、内部演算にお
いて0による除算を実行した場合や、無限ループが発生
した場合など、正常時には発生しない要因によっても、
起動される。
【0058】まず、図2に示す0.5ms毎の定期割込
みについて説明する。この定期割込みでは、ステップS1
00で、OS用ワークエリアを設定し、ステップS101で、
ウオッチドッグタイマを初期化すると、ステップS102へ
進んで、P−RUNフラグを20回に1回すなわち10
ms毎に反転する。このP−RUNフラグは、図示しな
い保護回路によってシステムが自動的にリセットされな
いようにするためのフラグであり、システムが正常に動
作して一定時間毎(10ms毎)に反転される限り、上
記保護回路の作動が阻止される。
【0059】次いで、ステップS103へ進み、スイッチ出
力の転写を行なう。このスイッチ出力は、各ジョブ中で
メモリに書き込んだビットのON,OFF値であり、各
ジョブからは直接I/Oインターフェース64の出力ポ
ートに出力せず、OS側で0.5ms毎にメモリの値を
出力ポートに転写する。
【0060】次に、ステップS104へ進むと、後述するA
/D変換サブルーチンを実行してA/D変換に係る各種
設定を行ない、ステップS105で、ジョブフラグ作成サブ
ルーチンを実行して、2,4,10,50,250ms
毎の各ジョブ割込み要求を示すジョブフラグJB_FL
Gを作成した後、ステップS106で、A/D変換をスター
トする。
【0061】上記A/D変換は、基本的に、A/D変換
器66の8チャンネル入力が0.5ms毎に所定の変換
順番毎に処理され、4ms周期で全入力の変換が行なわ
れる。但し、特定の1つのチャンネルは、回転脈動が発
生する吸入管圧力などをA/D変換するためクランク角
90°毎に(0.5msの時間精度で)同期し、変換順
番に対して割込んだ形で処理が行なわれ、その後の入力
の順番を1つ遅れにする。
【0062】また、図15に示すように、上記ジョブフ
ラグJB_FLGは、1バイト変数の各ビットを各ジョ
ブに対応するフラグとして割当てたものであり、複数の
ジョブ要求が同時に可能なようになっている。この1バ
イト変数のビット1〜ビット7は優先レベル1〜7に対
応し、それぞれ、250msジョブ、50msジョブ、
低優先クラセンジョブ、10msジョブ、4msジョ
ブ、2msジョブ、クラセンジョブのフラグに割当てら
れている。そして、所定のビットが立てられたとき、対
応する優先レベルのジョブ割込み要求がなされる。尚、
ビット0はバックグランドジョブのフラグに割当てられ
て通常は参照されない。
【0063】そして、上記ステップS105でジョブフラグ
作成サブルーチンによりジョブフラグJB_FLGを作
成し、上記ステップS106でA/D変換をスタートした後
は、ステップS107へ進み、ジョブフラグJB_FLGの
いずれかのジョブに対応するビットが立っているか否か
を調べる。
【0064】その結果、ジョブフラグJB_FLGのビ
ットが一つも立っていないときには、どのジョブからも
要求がないため割込みを終了し、ジョブフラグJB_F
LGのいずれかのビットが立っているときには、ステッ
プS108へ進んで、現状レベル(この定期割込みが実行さ
れる時点で所定の優先レベルのジョブが実行されていた
状態)以下のフラグがないか否かを調べる。
【0065】上記ステップS108で、現状レベル以下のフ
ラグがないときには、ラベルWAR_JBで示される図
4のジョブ優先処理にジャンプし、現状レベル以下のフ
ラグがあるときには、ステップS109で、現状レベル以下
のレベルのオーバーラップカウンタOLCを1増加させ
る。
【0066】上記オーバーラップカウンタOLCは、ジ
ョブ要求を記憶するためのカウンタであり、各優先レベ
ル毎に1バイト割当てられ、上記ジョブフラグJB_F
LGによるジョブ要求時にインクリメント、ジョブ終了
時にデクリメントされる。すなわち、カウンタによって
ジョブ要求を記憶することによりジョブの多重要求に対
応することができるのである。
【0067】次いで、上記ステップS109からステップS1
10へ進み、現状レベルより高いフラグがないか否かを調
べ、現状レベルより高いフラグがないときには、ルーチ
ンを抜けて割込みを終了し、現状レベルより高いフラグ
があるときには、ラベルWAR_JBのジョブ優先処理
へジャンプする。
【0068】一方、この0.5ms毎の定期割込みに対
し、図3のクラセンによる割込みでは、ステップS200
で、OS用ワークエリアを設定すると、ステップS201
で、後述するクランク位置・半回転時間算出のサブルー
チンを実行し、現在のクランク位置を判別するためのク
ランク位置変数、及び、最新の3つのクラセン間隔の和
であるエンジン半回転の経過時間すなわち半回転時間を
算出する。
【0069】上記クランク位置変数は、OS中で用意さ
れるシステム変数であり、図16に示すように、#1〜
#4気筒に対するクランク位置を、97°,65°,1
0°CAによって12の状態に区分し、現在のクランク
位置を表わす。
【0070】すなわち、各気筒毎に、0,1,2の数値
でクラセン入力順を示すクランク位置情報変数S_CC
AS、#1気筒を0、#3気筒を1、#2気筒を2、#
4気筒を3として気筒の燃焼順を示す気筒情報変数S_
RCAS、及び、0〜11の数値でクラセン順序及び気
筒順序を総合的に表わす総合位置変数S_ACASの3
変数によって現在のクランク位置を表わし、さらに、ク
ランク位置が確証をもって正常に判別されたときを0、
判別結果がつじつまが合わず不安の残る推定状態を1、
不明な状態を2とするエラーレベルS_ECASによ
り、クランク位置の判別状況を表わすようになってい
る。尚、図16においては、システム変数であることを
示すS_を省略している。
【0071】次いで、上記ステップS201からステップS2
02へ進むと、クランク位置・半回転時間算出のサブルー
チンにおいてクランク位置判定が正常に終了したかある
いは判定不能であったかを、アキュムレータAにストア
されているコードを読み出すことにより調べる(エラー
コード1、正常終了コード0)。
【0072】そして、上記ステップS202で、アキュムレ
ータAの値が1であり、クランク位置が判定不能であっ
たときには、割込みを終了し、アキュムレータAの値が
0であり、クランク位置が正常に判定されているときに
は、ステップS203へ進み、エンストフラグを解除する。
【0073】尚、上記エンストフラグは、エンジンがエ
ンスト状態であることを示すフラグであり、クラセン間
隔が0.5sec以上の時間(約30rpm以下)のと
き、50msジョブに用意されているエンスト処理ルー
チンによりセットされ、このクラセン割込みによりクリ
アされてエンスト状態が解除される。
【0074】次に、ステップS204へ進むと、点火タイマ
セットのサブルーチンを実行し、ユーザージョブ側で設
定した点火時期の指示値に基づいて作成された点火スケ
ジュールに従って点火タイマをセットする。この点火ス
ケジュールは、ドエル開始時期、ドエルオン待ち時間、
ドエルオフ待ち時間などをメンバーとする構造体変数で
あり、10msジョブ中に作成ルーチンが用意され、こ
の点火スケジュールに従って点火シーケンスが決定され
る。
【0075】次いで、スップS205で、燃料噴射タイマセ
ットのサブルーチンを実行し、ユーザージョブ側で設定
した燃料噴射量の指示値(各気筒毎の噴射幅)に対し、
燃料噴射開始時期などを燃料噴射タイマにセットしてス
テップS206へ進む。
【0076】ステップS206では、このクラセンが実行さ
れた現状のジョブレベルが自身のジョブレベルであるか
否かを判別し、現状がクラセンジョブ自身のレベルであ
るときには、ステップS207、S208で、クラセンジョブ、
低優先クラセンジョブのオーバーラップカウンタOLC
を、それぞれ1増加させて割込みを終了し、現状のジョ
ブレベルがクラセンジョブのレベルでないときには、ス
テップS209で、現状のジョブレベルが低優先クラセンジ
ョブのレベル以上であるか否かを調べる。
【0077】そして、現状のジョブレベルが低優先クラ
センジョブ以上であるときには、上記ステップS209から
ステップS210へ進んで、低優先クラセンジョブのオーバ
ーラップカウンタOLCを1増加させると、ステップS2
11で、クラセンジョブのジョブフラグをセットし、ラベ
ルWAR_JBのジョブ優先処理へジャンプする。
【0078】一方、上記ステップS209で、現状のジョブ
レベルが低優先クラセンジョブ以上でないときには、上
記ステップS209からステップS212へ進み、クラセンジョ
ブのジョブフラグをセットすると、ステップS213で、低
優先クラセンジョブのジョブフラグをセットし、ラベル
WAR_JBのジョブ優先処理へジャンプする。
【0079】このジョブ優先処理では、ステップS300
で、ジョブの優先レベルを示す1バイト変数であるジョ
ブレベルJB_LEVを1つ上げると、ステップS301へ
進んで、この優先レベルに対応するジョブフラグが立っ
ていないか調べる。そして、ジョブフラグが立っていな
いときには、ステップS300へ戻ってさらにジョブレベル
JB_LEVを1つ上げ、ジョブフラグが立っていると
きには、ステップS302へ進み、ジョブフラグの立ってい
るジョブのオーバーラップカウンタOLCを初期値の0
から1にし、ステップS303へ進む。
【0080】ステップS303では、より上のジョブフラグ
があるか否かを調べ、より上のジョブがあるときには、
ステップS300へ戻って前述の処理を繰り返し、より上の
ジョブがないときには、ステップS304へ進んで、ジョブ
実行中フラグJB_RUNをセットすると、ステップS3
05で、後述するジョブ実行サブルーチンにより最上位の
ジョブを実行する。
【0081】上記ジョブ実行中フラグJB_RUNは、
ジョブの実行開始時にセットされ、終了時にクリアされ
るフラグであり、このフラグにより、処理の途中で、よ
り優先度の高いジョブによって割込まれたジョブを識別
することができる。
【0082】例えば、図17に示すように、JB_LE
V=4の10msジョブを実行中、JB_LEV=6の
2msジョブの割込み要求がなされると、10msジョ
ブの処理が中断され、より優先度の高い2msジョブ
が、JB_RUN=1、OLC=1にセットされ、実行
される。そして、この2msジョブの処理中に、JB_
LEV=5の4msジョブの割込み要求が発生すると、
この4msジョブは、JB_RUN=0、OLC=1と
されて割込みが受付けられるが、実行はされず待機状態
となる。
【0083】その後、ジョブ実行サブルーチンによるジ
ョブの実行が終了すると、上記ステップS305からステッ
プS306へ進んでオーバーラップカウンタOLCを1減ら
し、ステップS307で、オーバーラップカウンタOLCが
ゼロになったか否かを調べる。その結果、オーバラップ
カウンタOLCがゼロになっておらず、同じ優先レベル
でジョブ割込み要求が複数回あるときには、ステップS3
05へ戻ってジョブを繰返し実行し、オーバラップカウン
タOLCがゼロになったとき、ステップS307からステッ
プS308へ進んで、ジョブ実行中フラグJB_RUNをク
リアする。
【0084】次に、ステップS309へ進み、ジョブレベル
JB_LEVを1つ下げて次のジョブレベルに移ると、
ステップS310で、このジョブレベルJB_LEVがゼロ
になったか否かを調べる。そして、ジョブレベルJB_
LEVがゼロのときには、この割込みを終了し、ジョブ
レベルJB_LEVがゼロでないときには、ステップS3
11へ進んで、オーバーラップカウンタOLCがゼロか否
かを調べる。
【0085】上記ステップS311で、オーバーラップカウ
ンタOLCがゼロのときには、このレベルではジョブ要
求はないため、上記ステップS311からステップS309へ戻
って、ジョブレベルJB_LEVをさらに1つ下げて同
様の処理を繰返し、オーバーラップカウンタOLCがゼ
ロでないときには、ステップS312へ進んで、このジョブ
レベルにおいて、ジョブ実行中フラグJB_RUNがセ
ットされているか否かを調べる。
【0086】上記ステップS312で、ジョブ実行中フラグ
JB_RUNがセットされているときには、割込み前に
ジョブを実行中であったため、割込みを終了して割込み
前のジョブへ戻り、ジョブ実行中フラグJB_RUNが
セットされていなければ、ステップS304へ戻って、この
レベルのジョブを実行し、同様の処理を繰返す。
【0087】すなわち、図17において、JB_LEV
=6の2msジョブが終了し、OLC=0、JB_RU
N=0になると、ジョブレベルが1つ下げられ、JB_
LEV=5の4msジョブが、JB_RUN=0、OL
C=1の待機状態からJB_RUN=1にセットされ、
実行される。さらに、4msジョブが終了すると、JB
_LEV=4に移り、JB_RUN=1(ジョブ実行
中)の状態から、2msジョブ及び4msジョブによっ
て中断されていた10msジョブの処理が再開される。
【0088】このように、0.5ms毎の定期割込み、
クラセン割込みを基本タイミングとして、各ジョブの優
先レベル及び実行タイミングを知らせるジョブフラグJ
B_FLGを作成するため、可能な限り正確に、等時間
間隔処理、エンジン回転同期処理を実現し、各ジョブを
効率良く処理することができる。さらに、基本タイミン
グとなる各割込み毎に更新されるジョブフラグJB_F
LGによらず、オーバーラップカウンタOLCによって
ジョブの多重要求を記憶するため、あるジョブの処理時
間が長引き、再度、同じジョブを実行すべきタイミング
となった場合においても、処理を途中で放棄することな
く、可能な限り最後まで処理を継続することができる。
【0089】この際、クランク位置を常に的確に把握し
ておく必要があり、クラセン割込み毎に、図9に示すク
ランク位置算出サブルーチンが実行されて前述したクラ
ンク位置変数S_CCAS,S_RCAS,S_ACA
S,S_ECASが算出される。尚、以下の説明におい
ては、システム変数であることを示すS_をクランク位
置変数から省略する。
【0090】このクランク位置算出サブルーチンでは、
まず、ステップS600で、クラセンタイマの下2バイトを
ソフトタイマの下2バイトにストアする。このクラセン
タイマはECU50に備えられたハードウエアタイマで
あり、本実施例においては、16ビットタイマで最大2
55msまで計数が可能であるが、メモリ上に3バイト
の連続した領域を確保して下2バイトにクラセンタイマ
の2バイトを転写し、クラセンタイマのオーバーフロー
により発生する割込みで3バイト目をカウントアップす
ることによりソフトタイマとして使用する。
【0091】すなわち、クラセンタイマにオーバーフロ
ーが発生したとき、図12のオーバーフロー割込みが発
生し、ステップS900で、ソフトタイマの3バイト目を1
増やすと、ステップS901で、ソフトタイマの3バイト目
が255を越えていないかを判別する。そして、255
を越えていないときには、ステップS901からステップS9
03へジャンプし、255を越えているときには、ステッ
プS901からステップS902へ進んでソフトタイマの3バイ
ト目を255で止め、ステップS903へ進む。
【0092】ステップS903では、ソフトタイマの3バイ
ト目が2でないか否か、すなわち、クラセン間隔が0.
5sec(255ms×2)を越えてエンスト状態であ
るか否かを調べる。そして、ソフトタイマの3バイト目
が2でないときには割込みを終了し、ソフトタイマの3
バイト目が2のときには、上記ステップS903からステッ
プS904へ進んで、エンストフラグが立っているか否かを
調べる。
【0093】上記ステップS904では、エンストフラグが
立っているときには割込みを終了し、エンストフラグが
立っていないときには、ステップS905で、前述した50
msジョブに用意されているエンスト処理ルーチンを起
動させるエンスト処理要求フラグを立てて割込みを終了
する。
【0094】これにより、クラセン間隔を最大64se
c(255ms×256)まで計数することが可能とな
り、16ビット以上の特別なハードウエアタイマを使用
することなく、クランキング時などクラセン間隔が極め
て長い場合にも容易に対応することができる。
【0095】一方、クランク位置算出のサブルーチンで
は、ステップS600からステップS601へ進むと、クラセン
間隔が設定時間以下か否かを調べる。この設定時間は、
最大エンジン回転数に対応するクラセン間隔としての時
間、例えば0.3msであり、上記ステップS601でクラ
セン間隔が設定時間以下のときには、ノイズの混入など
によるクラセンタイマの計数エラーとしてステップS602
でアキュムレータAにエラーコード1を格納し、上記ス
テップS601で、クラセン間隔が設定時間より長いときに
は、クラセンタイマの計数が正常であるとしてステップ
S603へ進む。
【0096】ステップS603では、後述するCCAS・R
CAS判別サブルーチンを実行してクランク位置を判別
し、ステップS604で、エラーレベルECASが2である
か否か、すなわち、クランキング時などのように気筒判
別がなされていない状態であるか否かを調べ、ECAS
=2のときには、ステップS605へ分岐してアキュムレー
タAにエラーコード1を格納し、ルーチンを抜ける。
【0097】一方、上記ステップS604で、ECAS≠2
のときには、ステップS606へ進み、ソフトタイマの3バ
イト目を0とする。そして、ステップS607へ進み、クラ
ンク位置情報変数CCASが1であるか否か、すなわ
ち、現在のクランク位置がBTDC65°CA〜10°
CAの間(図16参照)であるか否かを調べ、CCAS
=1のときには、ステップS607からステップS609へジャ
ンプし、CCAS≠1のときには、ステップS607からス
テップS608へ進んで、A/D変換リクエストを1増加さ
せ、ステップS609へ進む。
【0098】このA/D変換リクエストは、クランク角
90°毎にクランク同期A/D変換を指示するためのフ
ラグ的な変数であり、0、1の値をとり、値が1のとき
クランク同期A/D変換を指示する。すなわち、前述し
たように、8チャンネルのA/D変換のうち1チャンネ
ルのA/D変換はクランク角90°毎に行なわれるが、
CCASが0になったとき(BTDC97°)と、CC
ASが2になったとき(BTDC10°)、クランク同
期のA/D変換リクエストをセットし、0.5ms毎の
A/D変換順番に対してクランク角90°毎のA/D変
換を割込ませるのである。
【0099】その後、ステップS609では、気筒情報変数
RCASを3倍してクランク位置情報変数CCASを加
算することにより総合位置変数ACASを算出すると
(ACAS=RCAS×3+CCAS)、ステップS610
で、ソフトタイマを2バイトでリミットし、クラセンタ
イマがオーバーフローしている場合には下2バイトをF
FFF(255ms)としてステップS611へ進む。
【0100】ステップS611では、総合位置変数ACAS
=0,1,2,…,11を添字とする配列TCAS[A
CAS](配列の要素)にクラセン間隔データをストア
し、ステップS612で、クランク位置情報変数CCAS=
0,1,2を添字とする配列MTCSX[CCAS]
(配列の要素)にクラセン間隔データをストアする。
【0101】配列TCASは、図18(a)に示すよう
に、ACAS=0,1,2,…、11に対応するエンジ
ン2回転分のクラセン間隔データがストアされた12ワ
ードのクラセン間隔テーブルであり、配列MTCSX
は、図18(b)に示すように、CCAS=0,1,2
に対応する3ヶのクラセン間隔データがストアされた3
ワードのクラセン間隔テーブルである。
【0102】すなわち、配列TCASを参照することに
より、各気筒の各クランク位置におけるクラセン間隔の
変化(回転速度の変化)を知ることができ、各気筒の失
火の有無、燃焼状態などを判断することができ、全気筒
の運転状況を把握することができる。また、配列MTC
SXを参照することにより、常に最新のクラセン間隔を
得ることができ、現在の運転状況を迅速に把握すること
ができる。
【0103】次いで、ステップS613へ進むと、再び、エ
ラーレベルECASの値を調べる。ここでは、前述のス
テップS604においてECAS≠2であることを既に確認
してあるため、エラーレベルECASが1か否か、すな
わち、クランク位置の判別が不安の残る推定状態である
か否かを調べる。
【0104】上記ステップS613でECAS≠1(すなわ
ちECAS=0)であり、クランク位置が確証をもって
判別されているときには、上記ステップS613からステッ
プS614へ進んで、最新3ヶのクラセン間隔データの和
(配列MTCSXの和)を、3バイトの半回転時間MT
CS18として算出する(MTCS18=ΣMTCS
X)。すなわち、半回転時間MTCS18は、クラセン
割込み毎にクランク位置情報変数CCASが更新されて
配列MTCSX内のデータが更新される毎に算出され、
BTDC97°,65°,10°の各位置毎にクラセン
間隔の移動和を取ることにより常に最新のデータが得ら
れるようになっている。
【0105】一方、上記ステップS613で、ECAS=1
であり、クランク位置の判別が不安の残る推定状態であ
るときには、配列MTCSXから半回転時間MTCS1
8を算出せず、ステップS615で半回転時間推定のサブル
ーチンを実行して半回転時間MTCS18を推定する。
【0106】この半回転時間MTCS18の推定につい
て説明すると、まず、図10のステップS700で、クラン
ク位置情報変数CCASが1か否か、すなわち、現在の
クランク位置がBTDC65°〜10°の間か否かを調
べ、CCAS=1のときには、ステップS701で、BTD
C97°〜65°間の角度32°から、前回のクラセン
間隔×180/32を半回転時間MTCS18と推定し
てリターンする。
【0107】一方、上記ステップS700で、CCAS≠1
のときには、上記ステップS700からステップS702へ進ん
で、クランク位置情報変数CCASが2か否か、すなわ
ち、現在のクランク位置がBTDC10°からATDC
83°(次の気筒のBTDC97°)の間か否かを調
べ、CCAS≠2のとき(CCAS=0のとき)には、
ステップS703へ進んで、BTDC10°〜ATDC83
°間の角度93°から前回のクラセン間隔×180/9
3を半回転時間MTCS18と推定してリターンする。
【0108】また、上記ステップS702で、CCAS=2
のときには、上記ステップS702からステップS704へ分岐
し、BTDC65°〜10°間の角度55°から前回の
クラセン間隔×180/55を半回転時間MTCS18
と推定してリターンする。
【0109】そして、クランク位置算出サブルーチンで
は、ステップS614で半回転時間MTCS18を算出した
後、あるいは、以上説明したステップS615のサブルーチ
ンにより半回転時間MTCS18を推定した後は、ステ
ップS616へ進み、3バイトの半回転時間MTCS18を
2バイトにリミットして所定の変数MTCSKにストア
すると、ステップS617で、この変数MTCSKを2倍し
て変数MTCSK4にストアし、ステップS618で、正常
終了コード0をアキュムレータAに格納してルーチンを
抜ける。
【0110】次に、図11に示されるCCAS・RCA
S判別サブルーチンについて説明する。このサブルーチ
ンでは、まず最初に、ステップS800で、カムセンカウン
タを0〜4にリミットする。このカムセンカウンタで計
数されるカム角センサ41からのカムパルスの数は、図
24に示すように、正常状態の場合0〜3であるが、ノ
イズなどの影響により4以上の異常な計数値となるおそ
れがあるため、カムセンカウンタを0〜4にリミットし
て異常な状態を4で代表するのである。
【0111】次に、ステップS801へ進み、カムセンカウ
ンタ(の計数値)、気筒情報変数RCAS、クランク位
置情報変数CCASから、5×4×2の組合わせ(カム
センカウンタが0〜4の5種類、気筒情報変数RCAS
が0〜3の4種類、クランク位置情報変数CCASが
0,1と2の場合の2種類)に対する状態データがスト
アされている気筒・クランク位置状態マップCCHMA
Pを読む。
【0112】この気筒・クランク位置状態マップCCH
MAPには、図19(a)及び(b)に示すように、ク
ランク位置情報変数CCASが0あるいは1の場合と、
気筒情報変数RCASの変化点であるクランク位置情報
変数CCASが2の場合とで、カムセンカウンタと気筒
情報変数RCASの各組合わせの起こり得る全ての状態
に対し、正常か異常か、確定して良いか推定すべきかを
示す状態データがストアされており、現在の状態を評価
し、次にとるべき状態を知ることができる。
【0113】すなわち、通常の条件判断による処理に比
較して大幅にプログラムを簡略化することができ、メモ
リ容量の節約、処理速度の向上を図ることができるとと
もに、仕様変更に対しても柔軟に対処することができ
る。
【0114】上記状態データは2ビットのデータであ
り、ビット0の値により確定か推定かを表わし、ビット
1の値により正常か異常かを表わす。ビット0の値は、
0のとき確定、1のとき推定を示し、図24からわかる
ように、カムセンカウンタが2,3の場合にのみ確定で
あって、それ以外は推定せざるを得ない状態である。ま
た、ビット1の値は、0のとき正常、1のとき異常を示
し、カムセンカウンタが3以下で、且つ、図16及び図
24による組合せに合致する場合のみ正常であって、そ
れ以外は異常な状態である。
【0115】例えば、CCAS=0あるいは1、すなわ
ち、ある気筒のBTDC97°〜10°に対し、カムセ
ンカウンタが0で気筒情報変数RCASが0となる組合
せは、図16及び図24からもわかるように、クランク
位置を正常に推定すれば良い状態であるため、気筒・ク
ランク位置状態マップCCHMAPの該当領域に2進数
で01(正常推定)の状態データがストアされており、
さらに、カムセンカウンタが1で気筒情報変数RCAS
が0となる組合せは、明らかに異常であって推定するし
かない状態であるため、気筒・クランク位置状態マップ
CCHMAPの該当領域に2進数で11(異常推定)の
状態データがストアされている。
【0116】また、CCAS=2、すなわち、ある気筒
のBTDC10°〜ATDC83°に対し、カムセンカ
ウンタが3で気筒情報変数RCASが0となる組合せ
は、#1気筒のTDCを挟んだクランク位置と正常に確
定できるため、気筒・クランク位置状態マップCCHM
APの該当領域に2進数で00(正常確定)の状態デー
タがストアされており、さらに、カムセンカウンタが2
で気筒情報変数RCASが0となる組合せは、明らかに
異常ではあるがカムセン入力が2ヶある以上確定せざる
を得ない状態であるため、気筒・クランク位置状態マッ
プCCHMAPの該当領域に2進数で10(異常確定)
の状態データがストアされている。
【0117】そして、上記ステップS801で気筒・クラン
ク位置状態マップCCHMAPから状態データを読込む
と、ステップS802へ進み、エラーレベルECASが2で
ないか否か、すなわち、現在の状態が気筒判別のなされ
ていない不明な状態であるか否かを調べ、ECAS=2
のときには、ステップS803で気筒・クランク位置状態マ
ップCCHMAPから読込んだ状態データのビット0が
0か否か、すなわち確定状態か否かを調べ、確定状態の
ときにはステップS804へ進み、確定状態でなく推定状態
であるときにはルーチンを抜けて確定状態となるまで待
つ。
【0118】一方、上記ステップS802でECAS≠2の
ときにはステップS804へ進んで、推定状態か否かを調
べ、確定状態、推定状態に応じてステップS805以降の処
理あるいはステップS812以降の処理へ進む。また、上記
ステップS803において確定状態でテップS804へ進んだと
きには、ステップS805以降の処理へ進む。
【0119】まず、ステップS805以降の処理について説
明すると、このステップS805へ進んだときには、正常、
異常に拘らず気筒判別がなされた確定状態であるため、
図24のタイムチャートからもわかるように、今回のク
ラセン割込みはカムパルスが3ヶあるいは2ヶ入力され
た後のBTDC97°の割込みであるため、クランク位
置情報変数CCASを0にする。
【0120】次いで、ステップS806へ進んでカムセンカ
ウンタが3でないか否かを調べ、カムセンカウンタが3
でないとき、すなわちカムセンカウンタが2のときに
は、#2気筒の点火後であるため、ステップS807で気筒
情報変数RCASを3にしてステップS809へ進み、カム
センカウンタが3のときには、#1気筒の点火後である
ため、ステップS808で気筒情報変数RCASを1にして
ステップS809へ進む。
【0121】ステップS809では、更新したクランク位置
情報変数CCAS、気筒情報変数RCAS、及び、カム
センカウンタをパラメータとして再び気筒・クランク位
置状態マップCCHMAPから状態データを読込み、こ
の状態データのビット1が1であるか、すなわち異常状
態であるか否かを調べる。
【0122】その結果、上記ステップS809において、状
態データのビット1が1で異常状態と判定されるときに
は、クランク位置情報変数CCAS、気筒情報変数RC
ASの更新結果は不安の残る推定であるとしてステップ
S810でエラーレベルECASを1にしてルーチンを抜
け、状態データのビット1が0であり正常状態であると
きには、ステップS811でエラーレベルECASを0とし
てルーチンを抜ける。
【0123】一方、ステップS812以降の処理では、ステ
ップS812で、現在のクランク位置情報変数CCAS(前
回のクラセン割込みで算出されたクランク位置情報変数
CCAS)が2、すなわち、気筒情報変数RCASの変
化点であるか否かを調べ、CCAS=2のときには、ス
テップS812からステップS813へ進んで、気筒情報変数R
CASを1増加させ、ステップS814でクランク位置情報
変数CCAS=0にしてステップS817へ進む。
【0124】一方、上記ステップS812で、CCAS≠2
のときには、上記ステップS812からからステップS815へ
進んでカムセンカウンタが0でないか否かを調べ、カム
センカウンタが0でないときには、前述のステップS813
へ分岐し、カムセンカウンタが0のときには、ステップ
S816でクランク位置情報変数CCASを1増加させ、ス
テップS817へ進む。
【0125】ステップS817では、更新したクランク位置
情報変数CCAS、気筒情報変数RCAS、及び、カム
センカウンタをパラメータとして再び気筒・クランク位
置状態マップCCHMAPから状態データを読込んで異
常状態であるか否かを調べ、状態データのビット1が0
であり、正常状態であるときには、そのまま(現在のエ
ラーレベルECAS=0のまま)ルーチンを抜ける。ま
た、上記ステップS817で、状態データのビット1が1で
異常状態のときにはステップS818へ進み、クランク位置
情報変数CCAS、気筒情報変数RCASの更新結果は
不安の残る推定であるとしてエラーレベルECASを1
にし、ルーチンを抜ける。
【0126】前述のクランク位置算出サブルーチンのス
テップS608におけるA/D変換リクエストは、図13の
A/D変換サブルーチン中で参照され、等時間間隔A/
D変換とクランク同期A/D変換とが所定のタイミング
で実行される。以下、図13のフローチャートに従って
説明する。
【0127】このA/Dサブルーチンでは、ステップS1
000で、第1回目のA/D変換処理であるか否かを調
べ、第1回目の処理であるときには、ステップS1001
で、A/D変換器66に対し、変換順番テーブルADC
_Nの先頭データADC_N[0]で示されるチャンネ
ルの変換器をセットし、ステップS1002で、変換順番テ
ーブルADC_NのポインタADC_I(初期値は0)
を1増やしてルーチンを抜ける。
【0128】上記変換順番テーブルADC_Nは、図2
0に示すように、A/D変換器66の0番〜7番の8チ
ャンネルの変換器に対し、A/D変換順番をストアした
テーブルであり、ポインタADC_Iによって指示され
るテーブル内データに従ってA/D変換が行なわれる。
本実施例においては、基本的に、6,7,1,4,0,
2,3,5番の順にA/D変換が行なわれ、例えば、ス
ロットル開度、吸入空気量など変化の速いものを先とし
て、冷却水温、電圧など比較的変化の遅いものが後にな
るように設定し、最後の5番の変換器をクランク同期入
力に設定してある(但し、前述したように、最後の5番
の変換器はクランク同期のタイミングによって順番が変
わる)。
【0129】一方、上記ステップS1000で第1回目の処
理でないときには、上記ステップS1000からステップS10
03へ進んで、後述する読取り及びシステムシフトバッフ
ァSSHBへのストア処理サブルーチンを実行し、前回
のA/D変換データを、A/D変換器66の該当するチ
ャンネルから読取り、読取ったデータをシステムシフト
バッファSSHBへストアする。
【0130】上記システムシフトバッファSSHBは、
図22に示すように、8チャンネルの各A/D変換結果
がストアされる先頭オフセットアドレス0,+8,+1
6,+24,+32,+34,+36,+38番の各メ
モリ、及び、4ms毎のクランク同期のA/D変換結果
がストアされる先頭オフセットアドレス−2番地の1ワ
ードのメモリからなり、0.5ms毎に実行される1回
のA/D変換結果が1ワード(2バイト)でストアされ
る。
【0131】先頭オフセットアドレス0番地からは、4
段のシフトメモリとなっており、90°CA毎のA/D
変換結果がストアされ、最新4データ(1回転分)をジ
ョブから参照することができる。また、先頭オフセット
アドレス+32,+34,+36,+38番地は、各1
ワードのメモリであり、なまし処理機能が選択されたと
き、A/D変換結果を加重平均した値がストアされてノ
イズ除去と精度向上を図ることができるようになってお
り、これらのメモリのデータは、低速ジョブで利用でき
る。
【0132】また、各先頭オフセットアドレス+8,+
16,+24番地からは、各4ワードのメモリであり、
4msジョブで利用するようになっている。これらの各
メモリは、先頭に最新のA/D変換結果がストアされ、
4msジョブのオーバーラップカウンタOLCの値に応
じて順にシフトされ、先にストアしたデータから読出さ
れるFIFOバッファとなっている。
【0133】その後、ステップS1003からステップS1004
へ進むと、8チャンネル分のA/D変換周期を保つため
のループカウンタADC_C(初期値は8)を1減ら
し、ステップS1005で、ループカウンタADC_Cが0
でないか否かを調べ、ADC_C≠0のときには、ステ
ップS1007へジャンプし、ADC_C=0のとき、すな
わち8チャンネル分のA/D変換が終了したときには、
ステップS1006で、ポインタADC_I、ループカウン
タADC_Cを、それぞれ、初期値である0、8にして
ステップS1007へ進む。
【0134】ステップS1007では、クラセン同期A/D
変換リクエストがあるか否かを調べる。このクラセン同
期A/D変換リクエストは、クランク角90°毎にクラ
ンク同期A/D変換を指示するためのフラグ的な変数で
あり、0、1の値をとり、クラセン割込みにおけるクラ
ンク位置算出サブルーチンにおいて、クランク位置情報
変数S_CCASがS_CCAS≠1のとき、値1にセ
ットされ、クランク同期A/D変換を指示する。
【0135】すなわち、前述したように、8チャンネル
のA/D変換のうち1チャンネルのA/D変換はクラン
ク角90°毎に行なわれるが、S_CCASが0になっ
たとき(BTDC97°)と、S_CCASが2になっ
たとき(BTDC10°)、クランク同期のA/D変換
リクエストを1にセットし、0.5ms毎のA/D変換
順番に対してクランク角90°毎のA/D変換を割込ま
せるのである。
【0136】そして、上記ステップS1007で、クラセン
同期A/D変換リクエストがない場合には、上記ステッ
プS1007からステップS1008へ進んで、ポインタADC_
Iの示す変換順番テーブルADC_Nの変換器をセット
し、ステップS1009で、ポインタADC_Iを1増やし
てルーチンを抜ける。一方、上記ステップS1007で、ク
ラセン同期A/D変換リクエストがある場合には、上記
ステップS1007からステップS1010へ分岐し、クラセン同
期A/D変換リクエストを1減らすと、ステップS1011
で、A/D変換器66の5番目のチャンネルであるクラ
ンク同期変換器をセットしてルーチンを抜ける。
【0137】すなわち、クラセン同期A/D変換リクエ
ストがなされた場合には、ポインタADC_Iは増やさ
ずに、クランク同期変換を行ない、ループカウンタAD
C_Cによって8チャンネル分の周期を保ちつつ、その
後のA/D変換順番を1つ遅れにする。この場合、エン
ジン回転数3750rpm以上では、A/D変換の最後
の順番の入力が完全に停止し、7500rpm以上で
は、最後から2番目の入力も停止するが、A/D変換の
順番が、スロットル開度、吸入空気量など変化の速いも
のを先として、冷却水温、電圧など比較的変化の遅いも
のが後になるようにし、且つ、最後のA/D変換順番を
クランク同期入力に設定してあるため、特に支障は生じ
ない。
【0138】次に、上記ステップS1003における読取り
及びSSHBへのストア処理サブルーチンについて図1
のフローチャートに従って説明する。まず、ステップS1
100で、A/D変換のドリームモードへの移行を指示す
るドリームモード変数DRM_ADがゼロであるか否か
を調べる。
【0139】上記ドリームモードは、エンジン系のハー
ドウエアと完全に分離した状態でソフトウエアの実行デ
バッグを行なうためのシミュレーションモードであり、
A/D変換のドリームモードへの移行を指示する上記ド
リームモード変数DRM_ADは、図23に示すよう
に、A/D変換器66の8チャンネル入力に対応して各
1バイトの変数DRM_AD+nが設けられている。
【0140】尚、上記ドリームモードには、A/D変換
のシミュレーションモードの他、クラセン・カムセンの
入力シミュレーションモードがあり、カムセン・クラセ
ンのドリームモードへの移行は、バックグランドジョブ
中で調べられる。
【0141】そして、上記ステップS1100で、DRM_
AD≠0であり、ドリームモード変数DRM_ADにゼ
ロ以外の数値が書き込まれてドリームモードへの移行が
指示されているときには、上記ステップS1100からステ
ップS1101へ進んで、ドリームモード変数DRM_AD
の値を4倍した擬似的なA/D変換の数値をアキュムレ
ータAにロードし、ステップS1103へ進む。
【0142】すなわち、例えば、吸入空気量データを使
用するジョブに対しデバッグを行なう場合、対応するド
リームモード変数DRM_ADに希望する吸入空気量と
なるような数値を書き込むことにより、実際に吸入空気
量センサ32からA/D変換器66に信号を入力しなく
とも希望する吸入空気量のA/D変換結果を得ることが
でき、極めて容易に且つ効率良くデバッグを行なうこと
ができるのである。
【0143】一方、上記ステップS1100で、DRM_A
D=0のときには、上記ステップS1100からステップS11
02へ進んで、前回A/D変換を行なった変換器から変換
結果を読取ってアキュムレータAにロードすると、ステ
ップS1103で、前回A/D変換を行なった変換器がクラ
セン同期A/D変換を行なった変換器であるか否かを調
べ、クラセン同期A/D変換を行なった変換器のときに
は、ステップS1114以降の処理へ進み、クラセン同期A
/D変換を行なった変換器でないときには、ステップS1
104以降の処理へ進む。
【0144】ステップS1104以降の処理は、等時間A/
D変換結果をシステムシフトバッファSSHBの+8番
地以上にストアする処理であり、ステップS1104で、A
/D変換器66の0〜8番の変換器に対応して各変換器
の変換結果をストアすべきシステムシフトバッファSS
HBの番地が格納されている図21のSSHBストア番
地テーブルADC_Mを参照し、A/D変換結果のスト
ア番地が32以上であるか否かを調べる。
【0145】上記ステップS1104で、A/D変換結果の
ストア番地が32以上ではなく、4mSジョブで利用す
るストア番地+8,+16,+24のFIFOバッファ
であるときには、上記ステップS1104からステップS1105
へ進み、4msジョブのオーバラップカウンタOLCを
3でリミットすると、ステップS1106で、このオーバラ
ップカウンタOLCを2倍してストア番地を加えた番
地、すなわち、ジョブの実行状態に応じて2バイト単位
でシフトしたFIFOバッファの番地に、アキュムレー
タAにロードされたA/D変換結果をストアし、ルーチ
ンを抜ける。
【0146】一方、上記ステップS1104で、A/D変換
結果のストア番地が32以上であるときには、上記ステ
ップS1104からステップS1107へ分岐し、A/D変換結果
を加重平均によりなましてストアする機能を使用しない
ことを示すなまし処理キャンセルフラグがあるか否かを
調べる。
【0147】そして、なまし処理キャンセルフラグがあ
るときには、上記ステップS1107からステップS1108へ進
んで、A/D変換結果をそのまま該当するストア番地に
ストアしてルーチンを抜け、なまし処理キャンセルフラ
グがないときには、上記ステップS1107からステップS11
09へ進んでA/D変換結果を16倍し、ステップS1110
で、2度目以降のなまし処理であるか否かを調べる。
【0148】2度目以降のなまし処理であるときには、
上記ステップS1110からステップS1111へ進んで、今回の
A/D変換結果に対して1/16の加重平均なまし処理
を行ない、ステップS1112で、その結果を該当するスト
ア番地にストアしてルーチンを抜け、2度目以降のなま
し処理でなく、第1回目の処理であるときには、上記ス
テップS1110からステップS1113へ進んで、アキュムレー
タAにロードされたA/D変換結果を該当するストア番
地に初期値としてストアし、ルーチンを抜ける。
【0149】一方、前回A/D変換を行なった変換器が
クラセン同期A/D変換を行なった変換器であり、上記
ステップS1103からステップS1114以降の処理へ進んだ場
合には、まず、ステップS1114でポインタADC_Iが
8でないか否か、すなわち、等時間A/D変換の順番に
割込んだクラセン同期A/D変換なのか、予め最後に設
定されているクラセン同期A/D変換なのかを調べる。
【0150】そして、ADC_I≠8であり、予め設定
された変換順番に対して割込んだクラセン同期A/D変
換であるときには、上記ステップS1114からステップS11
15へ進んで、システムシフトバッファSSHBの+0番
地から+6番地までの内容を順にシフトすると、ステッ
プS1116で、システムシフトバッファSSHBの0番地
に、アキュムレータAにロードされたA/D変換結果を
ストアしてルーチンを抜ける。これにより、システムシ
フトバッファSSHBの0番地からの4段のシフトレジ
スタに、90°CA毎の1回転分のデータがストアされ
る。
【0151】また、上記ステップS1114で、ADC_I
=8であり、予め最後に設定されているクラセン同期A
/D変換であるときには、上記ステップS1114からステ
ップS1117へ進み、システムシフトバッファSSHBの
−2番地に、アキュムレータAにロードされたA/D変
換結果を、予め設定されたA/D変換順番上のクラセン
同期A/D変換結果としてストアし、ルーチンを抜け
る。
【0152】以上のようにしてシステムシフトバッファ
SSHBにストアされたA/D変換結果は、各ジョブで
利用される。次に、ジョブ実行サブルーチンについて図
5〜図8のフローチャートに従って説明する。
【0153】まず、ステップS500で、ジョブフラグJB
_FLGを参照して実行すべきジョブがクラセンジョブ
でないか否かを調べ、クラセンジョブでないときには、
ラベルALJ10へ分岐し、クラセンジョブのときに
は、ステップS501へ進んで、気筒判別がついているか否
かを調べる。
【0154】そして、気筒判別がついていないときに
は、そのままルーチンを抜けてジョブを実行せず、気筒
判別がついているとき、上記ステップS501からステップ
S502へ進んで、オーバーラップカウンタOLCの値を参
照して多重待ち状態であるか否かを調べる。
【0155】上記ステップS502では、多重待ち状態でな
いとき、ステップS503へ進んで、クラセン割込み毎に算
出されるシステム変数S_ACAS(クランク総合位置
変数)をユーザー変数ACASとし、一方、多重待ち状
態のときには、ステップS504へ分岐し、ユーザー変数A
CASを一つ増やして12で割った剰余をとって新たな
ユーザー変数ACASとし、このユーザー変数ACAS
を0,1,2,…,11,0,1,…とソフトウエア的
に更新してゆく。
【0156】すなわち、クラセンジョブ及び低優先クラ
センジョブは、自身または優先度の高いジョブに邪魔さ
れて遅れることがあるが、クラセン割込みは正確にクラ
ンク角センサ信号に同期して実行され、システム変数S
_ACASはジョブの遅れに関係なく更新される。
【0157】従って、ジョブ中でシステム変数S_AC
ASを参照してクランク位置を知り、このクランク位置
に応じた仕事を行なおうとしても、自身が他のジョブに
邪魔されて遅れた場合には、自身の仕事に対応したクラ
ンク位置を知ることができなくなる。このため、クラセ
ンジョブ及び低優先クラセンジョブ中では、多重待ち状
態でないときにOS用のシステム変数S_ACASをユ
ーザー用変数ACASとして取込み、このユーザー変数
ACASをジョブ実行毎に更新して多重要求の場合にも
クランク位置に対応した適正な処理がなされるようにす
るのである。
【0158】その後、上記ステップS503あるいは上記ス
テップS504からステップS505へ進み、ジョブのワークエ
リアを設定すると、ステップS506で、レベルゼロの割込
みを許可し、ステップS507で、クラセンジョブのセクシ
ョンに移る。そして、このクラセンジョブセクションに
リンクされた処理を実行し、ステップS508で、割込みを
禁止してルーチンを抜ける。
【0159】次に、ステップS500で、これから実行すべ
きジョブがクラセンジョブでないときには、ラベルAL
J10のステップS510で、2msジョブでないか否か調
べ、2msジョブのとき、ステップS511で、ジョブのワ
ークエリアを設定すると、ステップS512で、レベルゼロ
の割込みを許可し、ステップS513で、2msジョブのセ
クションに移る。そして、このセクションにリンクされ
ているジョブ本体(ユーザー側の制御ストラテジーに基
づくルーチン、あるいは、OS側で用意したサービスル
ーチン)を実行し、ステップS514で、割込みを禁止して
ルーチンを抜ける。
【0160】一方、上記ステップS510で、実行すべきジ
ョブが2msジョブでないときには、ステップS510から
ステップS520へ分岐し、実行すべきジョブが4msジョ
ブか否かを調べる。そして、4msジョブでないときに
は、ラベルALJ30へ分岐し、4msジョブのときに
は、ステップS521で、ジョブのワークエリアを設定する
と、ステップS522へ進む。
【0161】ステップS522では、レベルゼロの割込みを
許可し、次いで、ステップS523へ進むと、スイッチ入力
を読み込み、ステップS524で、4msジョブのセクショ
ンに移って、リンクされているジョブ本体を実行する。
その後、4msジョブのセクションから抜けると、ステ
ップS525で、割込みを禁止し、ステップS526へ進んで、
システムシフトバッファSSHBをシフトしてルーチン
を抜ける。
【0162】この4msジョブは、システムシフトバッ
ファSSHBを介してA/D変換データを受け取るA/
D変換利用ジョブであるが、A/D変換が0.5ms毎
の定期割込みにより4ms周期で正確に行なわれるのに
対し、4msジョブは優先度の高いジョブに邪魔されて
遅れることがある。
【0163】従って、上記ステップS524の4msジョブ
実行に際して、FIFOバッファである+8〜,+16
〜,+24〜番地のシステムシフトバッファSSHBか
らオーバーラップカウンタOLCの値に応じたデータ、
すなわち、割込みの発生順にストアされたA/D変換結
果を受取り、4msジョブの終了後、上記ステップS526
で、FIFOバッファのデータを順にシフトするのであ
る。
【0164】これにより、4msジョブが多重割込みの
状態になった場合でも、実行段階でシステムシフトバッ
ファSSHBを介して適正なA/D変換結果を受取るこ
とができ、等時間間隔処理の処理結果に矛盾を生じるこ
ともなく、正確な制御を実現することができる。
【0165】一方、上記ステップS520で、実行すべきジ
ョブが4msジョブでなく、ラベルALJ30へ分岐し
たときには、ステップS530で、実行すべきジョブが10
msジョブか否かを調べ、10msジョブのとき、ステ
ップS531で、ジョブのワークエリアを設定し、ステップ
S532で、レベルゼロの割込みを許可すると、ステップS5
33で、10msジョブのセクションに移って、ジョブ本
体を実行し、ステップS534で割込みを禁止してルーチン
を抜ける。
【0166】尚、上記10msジョブのセクションに
は、半回転時間からエンジン回転数を算出するサービス
ルーチン、前述した点火スケジュールを作成するサービ
スルーチンなどがOS側で用意されている。
【0167】また、上記ステップS530で、実行すべきジ
ョブが10msジョブでないときには、上記ステップS5
30からステップS540へ分岐し、実行すべきジョブが低優
先クラセンジョブであるか否かを調べる。そして、低優
先クラセンジョブでないときには、上記ステップS540か
らラベルALJ50へ分岐し、実行すべきジョブが低優
先クラセンジョブのときは、上記ステップS540からステ
ップS541へ進んで、現在の状態が多重待ち状態であるか
否かを調べる。
【0168】そして、現在の状態が多重待ち状態でない
ときには、上記ステップS541からステップS542へ進ん
で、システム変数S_ACAS(クランク総合位置変
数)をユーザー変数ACASとしてステップS544へ進
み、多重待ち状態のときには、上記ステップS541からス
テップS543へ分岐し、ユーザー変数ACASを一つ増や
して12で割った剰余をとった後、ステップS544へ進
む。
【0169】ステップS544では、ジョブのワークエリア
を設定し、ステップS545で、レベルゼロの割込みを許可
すると、ステップS546で、低優先クラセンジョブのセク
ションに移り、ジョブ本体を実行した後、ステップS547
で割込みを禁止し、ルーチンを抜ける。
【0170】さらに、ラベルALJ50では、ステップ
S550で、実行すべきジョブが50msジョブであるか否
かを調べ、50msジョブのときには、ステップS551へ
進んでジョブのワークエリアを設定し、ステップS552へ
進む。
【0171】ステップS552では、レベルゼロの割込みを
許可すると、ステップS553で、50msジョブのセクシ
ョンに移り、OS側で用意したエンスト処理ルーチン、
気筒別の点火時期リタードルーチン、燃料噴射開始時期
設定ルーチンなどを実行し、また、ユーザ側の制御スト
ラテジーに基づくルーチンを実行する。そして、ジョブ
の終了後、ステップS554で割込みを禁止し、ルーチンを
抜ける。
【0172】一方、上記ステップS550で実行すべきジョ
ブが50msジョブではないときには、上記ステップS5
50からステップS560へ分岐し、ジョブのワークエリアを
設定すると、ステップS561で、レベルゼロの割込みを許
可し、ステップS562へ進んで、250msジョブのセク
ション領域へ移行し、ジョブ本体を実行後、ステップS5
63で割込みを禁止してルーチンを抜ける。
【0173】
【発明の効果】以上説明したように本発明によれば、車
輌に備えた個々のアナログ/デジタル変換器に対し、一
定時間毎に、各変換器に対応して外部書込み可能な所定
の変数を参照してシミュレーションモードへの移行が指
示されているか否かを調べ、シミュレーションモードへ
の移行が指示されている場合、上記変数に基づいて設定
した値を、対応するアナログ/デジタル変換器の変換結
果として読取るため、アナログ/デジタル変換結果を使
用する処理プログラムに対して簡単にデバッグを行なう
ことができ、デバッグ効率を向上することができるなど
優れた効果が得られる。
【図面の簡単な説明】
【図1】読取り及びSSHBへのストア処理サブルーチ
ンのフローチャート
【図2】0.5ms毎の定期割込み処理のフローチャー
【図3】クラセン割込み処理のフローチャート
【図4】ジョブ優先処理のフローチャート
【図5】ジョブ実行サブルーチンの部分フローチャート
【図6】ジョブ実行サブルーチンの部分フローチャート
【図7】ジョブ実行サブルーチンの部分フローチャート
【図8】ジョブ実行サブルーチンの部分フローチャート
【図9】クランク位置算出サブルーチンのフローチャー
【図10】半回転時間推定サブルーチンのフローチャー
【図11】CCAS・RCAS判別サブルーチンのフロ
ーチャート
【図12】クラセンタイマのオーバーフロー割込み処理
のフローチャート
【図13】A/D変換サブルーチンのフローチャート
【図14】ジョブの実行状態を示す説明図
【図15】ジョブフラグの説明図
【図16】クランク位置変数の説明図
【図17】ジョブ実行中フラグとオーバーラップカウン
タの変化を示す説明図
【図18】クラセン間隔テーブルの説明図
【図19】気筒・クランク位置状態マップの説明図
【図20】変換順番テーブルの説明図
【図21】SSHBストア番地テーブルの説明図
【図22】システムシフトバッファの説明図
【図23】ドリームモード変数の説明図
【図24】クランク位置とエンジンの行程を示すタイム
チャート
【図25】エンジン系の概略構成図
【図26】クランクロータとクランク角センサの正面図
【図27】カムロータとカム角センサの正面図
【図28】電子制御系の回路構成図
【符号の説明】
50 ECU 66 アナログ/デジタル変換器 DRM_AD ドリームモード変数

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 一定時間毎に、車輌に備えた個々のアナ
    ログ/デジタル変換器に対応して外部書込み可能な所定
    の変数を参照することにより、シミュレーションモード
    への移行が指示されているか否かを調べ、 シミュレーションモードへの移行が指示されていない場
    合、上記変数に対応するアナログ/デジタル変換器から
    変換結果を読取り、 シミュレーションモードへの移行が指示されている場
    合、上記変数に基づいて設定した値を、対応するアナロ
    グ/デジタル変換器の変換結果として読取ることを特徴
    とするアナログ/デジタル変換のシミュレーション方
    法。
JP1271093A 1993-01-28 1993-01-28 アナログ/デジタル変換のシミュレーション方法 Pending JPH06231004A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1271093A JPH06231004A (ja) 1993-01-28 1993-01-28 アナログ/デジタル変換のシミュレーション方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1271093A JPH06231004A (ja) 1993-01-28 1993-01-28 アナログ/デジタル変換のシミュレーション方法

Publications (1)

Publication Number Publication Date
JPH06231004A true JPH06231004A (ja) 1994-08-19

Family

ID=11812979

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1271093A Pending JPH06231004A (ja) 1993-01-28 1993-01-28 アナログ/デジタル変換のシミュレーション方法

Country Status (1)

Country Link
JP (1) JPH06231004A (ja)

Similar Documents

Publication Publication Date Title
JP3191676B2 (ja) 内燃機関の点火時期制御装置
JP3455243B2 (ja) アナログ/デジタル変換結果の利用方法
JPH06231004A (ja) アナログ/デジタル変換のシミュレーション方法
JP3337149B2 (ja) エンジンのクランク位置判別方法
JPH06249053A (ja) アナログ/デジタル変換方法
JP3324818B2 (ja) エンジンのクランク位置情報利用方法
JP3645576B2 (ja) エンジンの回転時間算出方法
JPH06257500A (ja) エンジン運転状態の把握方法
JP3530549B2 (ja) 多気筒エンジンの燃料噴射制御方法
JPH06257501A (ja) エンジンの半回転時間推定方法
JPH06257502A (ja) エンジン回転数の算出方法
JP3442806B2 (ja) ジョブの優先処理方法
JP3555689B2 (ja) 多気筒エンジンの燃料噴射制御方法
JP3530551B2 (ja) 多気筒エンジンの燃料噴射制御方法
JP3294366B2 (ja) エンジンの点火制御における点火コイルの通電状態判別方法
JP3331237B2 (ja) 多気筒エンジンの気筒別噴射開始区間設定方法
JPH06200819A (ja) マイクロコンピュータのワークエリアの設定方法
JP3294365B2 (ja) エンジンの点火制御方法
JPH06272650A (ja) エンジンの点火制御における処理遅れ解消方法
JPH06249054A (ja) 車輌制御用コンピュータにおけるスイッチ入力データの読込み方法
JP3617847B2 (ja) ジョブの統合方法
JPH0138176B2 (ja)
JPH07103052A (ja) 多気筒エンジンの燃料噴射制御方法
JPH0719100A (ja) 多気筒エンジンの気筒別噴射開始区間設定方法
JP3530550B2 (ja) 多気筒エンジンの燃料噴射制御方法