[0001] Die Erfindung betrifft eine Motorsteuerung nach dem Oberbegriff von Anspruch 1.
[0002] Bei einer bekannten Motorsteuerung (DE 38 26 526 A1) laufen Programme unterschiedlicher
zeitlicher Priorität ab, und zwar zeitunabhängige Programme und kurbelwinkelabhängige
Programme. Prioritätshoch sind Programme, mit denen bei einem vorgegebenen Kurbelwinkel
ein Motorsteuervorgang ausgelöst wird, z.B. Kraftstoff eingespritzt oder gezündet
wird. Mit niedriger Priorität laufen sogenannte Hintergrundprogramme ab. Zeitabhängige
Programme sind in verschiedene Gruppen eingeteilt, mindestens eine sogenannte abstandskürzeste
Programmgruppe und abstandlängere Programme. An die abstandskürzesten Programme ist
mindestens eines der abstandslängeren Programme angefügt, wobei eine Verbundgruppe
gebildet wird. Dieses Betriebssystem ist aufwendig.
[0003] Bei vielen Anwendungen in der Motorsteuerungstechnik ist es wichtig, Aufgaben, die
von der Motorsteuerung abzuarbeiten sind - im folgenden auch als Tasks bezeichnet
- nicht durch kurbelwellenabhängige Anstöße zu aktivieren, sondern zeitabhängig anzustoßen.
Ein Echtheitbetriebssystem hat deshalb Hilfsmittel zur Verfügung zu stellen, die es
erlauben, zeitabhängige Ereignisse zu steuern.
[0004] Der Erfindung liegt die Aufgabe zugrunde, eine Motorsteuerung zu schaffen, durch
deren Betriebssystem der Aufwand für die Zeitverwaltung verringert wird.
[0005] Diese Aufgabe wird erfindungsgemäß durch die Motorsteuerung nach Anspruch 1 gelöst.
[0006] Vorteilhafte Weiterbildungen der Erfindung sind in den Unteransprüchen niedergelegt.
[0007] Ein Ausführungsbeispiel der Erfindung wird im folgenden anhand der Zeichnung erläutert.
Es zeigen:
- Figur 1
- die wesentlichen Bestandteile einer erfindungsgemäßen Motorsteuerung als Blockschaltbild,
- Figur 2
- den Aufbau einer ersten Zeitüberwachung der Motorsteuerung nach Figur 1,
- Figur 3
- ein Struktogramm einer zyklischen Routine der ersten Zeitüberwachung,
- Figur 4
- den Aufbau einer zweiten Zeitüberwachung der Motorsteuerung nach Figur 1,
- Figur 5
- das Struktogramm einer zyklischen Routine der zweiten Zeitüberwachung,
- Figur 6
- das Struktogramm einer Routine zur Erteilung eines Zeitauftrags, und
- Figur 7
- das Struktogramm einer Routine zum Löschen eines Zeitauftrags.
[0008] Wesentliche Bestandteile einer Motorsteuerung 1 sind ein Rechenteil 2 und ein Echtzeitteil
3 (Figur 1). Der Rechenteil und der Echtzeitteil sind durch ein sog. Zwei- oder Drei-Port-RAM
4, durch mehrere sog. Handshake-Leitungen 5 und durch eine Interrupt-Leitung 6 miteinander
verbunden.
[0009] An den Rechenteil 2 sind ebenfalls mehrere Eingangsleitungen 10 und Ausgangssleitungen
11 angeschlossen. Über eine Eingangsleitung 10 gelangen z.B. analoge Temperatursignale
zu dem Rechenteil und werden in diesem in einem internen AD-Wandler digitalisiert.
Andere Eingangsleitungen 10 sind an einen sog. HSI-Eingang und an Port-Pins des Rechenteils
2 angeschlossen. Über die Ausgangsleitungen 11 werden von einem sog. HSO-Ausgang des
Rechenteils pulsweitenmodulierte Steuersignale LLFS an den Leerlauffüllungssteller
des Motors und Signale TEV an das Tankentlüftungsventil des Fahrzeugs ausgegeben.
In der Zeichnung sind die nicht zu der Motorsteuerung 1 gehörenden Fahrzeugs- und
Motorbestandteile nicht dargestellt, ebenso nicht der interne Aufbau der verwendeten
Prozessoren, da sie den Handbüchern des Herstellers entnommen werden können. Von den
Eingangs- und Ausgangsleitungen sind nur einige wenige stellvertretend für alle tatsächlich
vorhandenen Leitungen dargestellt.
[0010] Eine Leitung 14 bildet eine serielle Schnittstelle des Rechenteils 2 und über einen
Bus 15 ist dieser mit zwei Speicherbausteinen, einem RAM 16 und einem EPROM 17, verbunden.
[0011] Die Aufgabe des Rechenteils in 2 ist es, die - entweder direkt oder über den Echtzeitteil
3 - empfangenen Meßdaten zu erfassen und auszuwerten und darauf basierend Steuersignale
für die Zündung, die Einspritzung usw. zu berechnen und über den Echtzeitteil 3 an
die entsprechenden Aktoren auszugeben. Um die Arbeiten mit der erforderlichen Genauigkeit
und Schnelligkeit erledigen zu können, wird für die Motorsteuerung ein Betriebssystem
eingesetzt, das wie nachfolgend beschrieben ausgebildet ist.
[0012] Das Betriebssystem enthält eine Zeitverwaltung, durch die folgende Anforderungen
zu erfüllen sind:
- Ein Zeitereignis ist von jeder Task (jedem Auftrag) zu jeden Zeitpunkt einer - in
bestimmten Grenzen - wählbaren Laufzeit zu starten.
- Ein gestartetes aber noch nicht erreichtes Zeitereignis muß jederzeit und von jeder
Task abgebrochen können.
- Die Reaktion auf einen Zeitauftrag hat innerhalb einer Grundeinheit des Systemzeitrasters
zu erfolgen.
[0013] Der Eintritt eines Zeitereignisses ist hierbei gleichzusetzen mit der Aussage, daß
die für das Ereignis vorgegebene Wartezeit abgelaufen ist.
[0014] Die vorliegende Motorsteuerung weist zwei verschieden ablaufende Zeitüberwachungen
auf. Das Zeitraster ist für beide Zeitüberwachungen gleich und beträgt 10 ms. Eine
feinere Zeitstufung ist möglich, aber nicht erforderlich. Sie hängt von dem verwendeten
Prozessor ab.
[0015] Eine erste Zeitüberwachung ZV_KURZ des Betriebssystem generiert kurze Zeitintervalle,
d.h. Zeitintervalle bis etwa 50 ms, wie nachfolgend beschrieben. Jeder Task, d.h.
jedem von der ersten Motorsteuerung abzuarbeitenden Auftrag, wird ein eigener Zeiteintrag
zugeordnet, der durch die Zeitverwaltung verwaltet wird. Nach einer Aktivierung der
Task wird dieser Zeiteintrag auf seinen Initialwert gesetzt. Beim Eintragen eines
Zeitauftrags wird der einzutragende Ereigniszeitpunkt aus der aktuellen Systemzeit
plus dem Zeitintervall des Auftrags errechnet.
[0016] Durch die erste Zeitüberwachung wird nun bei jedem Programmdurchlauf ein Taskszeitzähler
mit der aktuellen Systemzeit AKZEIT verglichen. Erreicht der Zähler seinen Endstand,
d.h. die eingetragene Wartezeit ist abgelaufen, werden die zur Abarbeitung der Tasks
durchzuführenden Aktionen aktiviert oder angestoßen. Zeitlich sehr kurze Aktionen
werden dabei noch während des Ablaufs des Zeitverwaltung sofort ausgeführt, andernfalls
wird eine Task in den Zustand "bereit" versetzt. Jede Aktion wird durch ein Programmteil
- z.B. ein Unterprogramm - durchgeführt. Dementsprechend ist jeder Aktion eine Adresse
in einem Programmspeicher zugeordnet.
[0017] Vorteilhaft ist bei dieser ersten Zeitüberwachung der geringe Verwaltungsaufwand
beim Erteilen und Löschen von Zeitaufträgen. Allerdings ist der Aufwand an Verarbeitungszeit
für das Anfragen der Zeitzähler größer, da bei jedem Grundzeitereignis jeder Zähler
abgefragt werden muß. Diese Zeitverwaltung eignet sich somit in erster Linie für wiederkehrende
Ereignisse mit unterschiedlicher Zeitdauer. Für einmalig auftretende Ereignisse hingegen
ist der Verarbeitungsaufwand relativ hoch.
[0018] Die erste Zeitverwaltung wird in erster Linie für die Diagnosekommunikation, d.h.
zum durchführen eines Datenaustausches zwischen der Motorsteuerung 1 und einem externen
Diagnosegerät, eingesetzt.
[0019] Die erste Zeitüberwachung weist drei Tabellen auf:
- eine Zeitauftragsliste 19 (Figur 2),
- eine Adressenliste für die auszuführenden Aktionen und
- eine Tabelle der zyklischen Zeiten.
[0020] Der Aufbau der Zeitauftragsliste 19, die als Tabelle in dem RAM 16 abgelegt ist,
ist aus Figur 2 ersichtlich. Jedem Zeitauftrag wird ein Listenplatz 0,1, ..., n zugeteilt.
Jeder Zeitauftrag besteht aus 4 Bytes. Zwei davon werden in eine erste Zeile 20 eines
Listenplatzes, z.B. des Listenplatzes 0, eingeschrieben. Von diesen stellt das höherwertige
High-Byte die Adresse und das niederwertige Low-Byte die zugehörige Statusinformation
dar. Diese Statusinformation ist folgendermaßen codiert:

.
[0021] In einer zweiten Zeile 21 des Listenplatzes wird der Ereigniszeitpunkt eingetragen,
d.h. der Zeitpunkt, zu dem mit Ablauf Wartezeit das jeweilige Ereignis eintritt und
die zugehörige Aktion gestartet wird. Die für ein Ereignis berechnete und in die Zeile
21 eingetragene Zeit wird in dem Systemzeitraster, d.h. alle 10 ms, mit der aktuellen
Zeit verglichen, die von einer hier nicht hergestellten Systemzeituhr geliefert wird.
Stimmen beide Zeiten überein, so wird das jeweilige Ereignis ausgelöst, z.B. ein Programmlauf
gestartet, ein Bitt gesetzt oder eine Task einer Prioritätsstufe zugeordnet.
[0022] Ein Zeitauftrag wird durch einen Makroaufruf SETZA (= "setze Zeitauftrag") mit den
Parametern Zeitintervall, Listenplatz, Reg_1, Reg_2 und Reg_3 erteilt. Darin ist das
Zeitintervall die Zeitdauer ab dem augenblicklichen Zeitpunkt bis zu dem Zeitpunkt,
zu dem das Ereignis auftritt. Das Zeitintervall kann eine Konstante oder eine festlegbare
Größe sein. Der Listenplatz gibt an, an welcher Stelle in der Liste das Zeitereignis
eingetragen wird eintreten und welche Aktionen beim Eintreten des Ereignisses durchzuführen
sind. Der Status enthält die oben genannten zusätzlichen Informationen über den Zeitauftrag.
Reg_1 bis Reg_3 sind Arbeitsregister der jeweiligen Taskebene.
[0023] Ein bereits erteilter Zeitauftrag kann mit einem Aufruf RESZA (= "reset Zeitauftrag")
mit den Parametern Status, Listenplatz, Reg_1 und Reg_2 annulliert werden.
[0024] Die vorstehend beschriebene erste Zeitüberwachung ZV_KURZ ist in einem Struktogramm
22 in Figur 3 in der Übersicht dargestellt.
[0025] Eine zweite Zeitüberwachung ZV_LANG, ist so realisiert, daß die Bearbeitungszeit,
die zu jedem Grundzeitereignis auftritt, möglichst gering ist und daß auch einmalige
Ereignisse ohne großen Mehraufwand verwaltet werden können. Sie wird eingesetzt für
Zeitintervalle ab etwa 50 ms bis zu der bei der hier beschriebenen Motorsteuerung
maximal zulässigen Zeit von rund 655.350 ms. Bei Eintritt eines Zeitereignisses hier
auszuführende Aktionen sind, eine Task zu aktivieren oder Zeitmarken an eine oder
mehrere Tasks weiterzuleiten. Die zweite Zeitüberwachung wird z.B. für die Steuerung
einer Nachlaufzeit, während der die Motorsteuerung nach Abschalten der Zündung noch
Aufgaben (z.B. Fehlersuche) durchführen und deshalb mit Strom versorgt werden muß.
Sie wird auch zum Steuern der Ansaugluft- und Kühlmittel-Temperaturmessung, der λ-Sondenheizung,
der Erzeugung des Drosselklappen-Istwertsignals, der Kraftstoffpumpe und von vielem
anderem eingesetzt.
[0026] Wesentlicher Bestandteil der zweiten Zeitüberwachung sind zwei Listen: eine Zeitauftragsliste
24, die frei definierbare Zeitereignisse enthält, und eine Adreßliste 24, die die
Anfangsadressen der auszuführenden Aktionen, die den einzelnen Zeitaufträgen zugeordnet
sind, aufnimmt (Figur 4). Wird ein Zeitauftrag erteilt, wird er in die Zeitauftragsliste
24 eingetragen. Ist der erteilte Zeitauftrag nicht der einzige in der Liste, werden
die Aufträge nach den Ereigniszeitpunkten sortiert. Derjenige Zeitauftrag, dessen
Ereigniszeitpunkt als nächster Auftritt, steht danach als erster in der Liste. Der
Auftrag mit dem am weitesten in der Zukunft liegenden Zeit ist an der letzten Stelle
in der Liste aufgeführt. Der Vorteil dieser zweiten Zeitüberwachung liegt in der geringen
Bearbeitungsdauer. Bei jedem im Grundzeitraster auftretenden Zeitverwaltungsaufruf
muß immer nur der erste Eintrag auf Ablauf abgefragt werden. Ist dessen Ereignis noch
nicht eingetreten, d.h. die Zeit bis zum Ereignis noch nicht abgelaufen, so braucht
die Liste 24 nicht weiter abgefragt werden.
[0027] Sind bereits mehrere Aufträge in der Liste 24 enthalten, so müßte, wenn ein neuer
Auftrag erteilt wird und er wegen seiner Ereigniszeit nicht hinten an der Liste angefügt
werden kann, zumindest ein Teil der Zeitauftragsliste umkopiert werden. Solche zeitraubenden
Umkopieraktionen und die damit verbundene Prozessorbelastung werden aber hier durch
sogenannte Linkverbindungen vermieden. Jeder Zeitauftrag in der Zeitauftragsliste
24 weist neben einem Zeitfeld 26 auch ein Linkfeld 27 auf, das die Verbindung zwischen
den einzelnen Zeitaufträgen herstellt. Bei einem Sortiervorgang müssen im ungünstigsten
Fall maximal drei Links - auch als Pointer oder Adreßzeiger bezeichnet - 28 behandelt
werden. Der Anfang der Liste wird in einem sogenannten Listenanker 30 vermerkt, der
die Anzahl der Listeneinträge (im Beispiel 5) und einen Verweis auf den ersten Zeitauftrag
in der Liste (im Beispiel: Listenplatz 3) enthält.
[0028] Die Adreßliste 25 enthält in den einzelnen Listenplätzen die Adressen 32 der auszuführenden
Aktionen, die dem jeweiligen Zeitereignis zugeordnet sind.
[0029] Die Verwaltung von Zeitaufträgen schließt drei Routinen ein:
- Erteilung von Zeitaufträgen,
- zyklische Überprüfung auf abgelaufene oder eingetretene Zeitereignisse und Überprüfung
der damit verbundenen Aktionen, sowie
- vorzeitiges Abbrechen von generierten Zeitaufträgen, ohne daß eine zugeordnete Aktion
ausgeführt wird.
Ein Zeitauftrag wird durch eine Task mit einem Makroaufruf
ZAERT
[Listenplatz
],
[Zeitintervall
]
erteilt. Dessen Parameter sind:
Listenplatz gibt an, an welcher Stelle in der Liste das Zeitereignis eingetragen
wird und welche Aktionen bei Eintreten des Ereignisses durchgeführt werden.
Zeitintervall ist die Zeitdauer ab dem augenblicklichen Zeitpunkt, bis das Ereignis
eintritt. Das Zeitintervall kann eine Konstante oder eine vorgebbare Größe sein.
[0030] Ist ein Zeitauftrag bereits erteilt worden und noch nicht abgelaufen, so wird der
ursprüngliche Auftrag ignoriert, und das Ereignis auf die neue Zeit gesetzt.
[0031] Ein bereits erteilter Zeitauftrag kann mit einem Aufruf
ZADEL
[Listenplatz
]
annulliert werden; er wird dabei aus der Zeitauftragsliste entfernt.
[0032] Im Raster der Systemgrundzeit, d.h. in Intervallen von 10 ms, wird die Zeitauftragsliste
nach abgelaufenen Zeitaufträgen durchsucht. Wird ein abgelaufener Zeitauftrag gefunden,
d.h. ein Auftrag dessen Wartezeit abgelaufen ist, wird er aus der Liste entfernt und
die mit ihm verbundenen Aktionen ausgeführt. Anschließend wird die Liste erneut nach
einem weiteren abgelaufenen Zeitauftrag durchsucht. Der Vorgang wird solange wiederholt,
bis kein abgelaufener Zeitauftrag in der Liste mehr vorhanden ist. Die hierzu durchgeführte
zyklische Zeitüberwachungsroutine SUABZA ( = suche nach abgelaufenen Zeitaufträgen)
ist in Figur 5 in Form eines Struktogramms 34 veranschaulicht.
[0033] Beim Einrichten eines neuen Zeitauftrags sind programmtechnisch folgende Schritte
durchzuführen:
In einem Datenmodul SYSDAT.A96, in dem der RAM-Speicher 16 beschrieben ist, ist eine
Tabelle ZA_LIST_LA um die Anzahl der neu einzufügenden Zeitaufträge zu vergrößern.
Dies ist durch eine Platzreservierung von 4 Bytes pro Zeitauftrag möglich. In einem
Modul ZEITVERW.A96 ist für jeden Zeitauftrag eine EQU-Anweisung oder Zuordnungsanweisung
des Listenplatzes vorhanden. Jedem neuem Zeitauftrag ist seine Listenplatznummer über
eine EQU-Anweisung zuzuteilen. In einer Tabelle AKTIONS_TAB wird die Anfangsadresse
des Programmabschnitts eingetragen, der bei dem Zeitereignis auszuführen ist. Der
Platz an dem die Anfangsadresse hinterlegt wird, muß mit der Listenplatznummer übereinstimmen.
Die Aktionen, die auszuführen sind, werden am Ende des Moduls definiert. Die Programmsequenz
ist mit einem unbedingten Sprung auf das Label SUABZA abzuschließen.
[0034] Eine bei der Zeitauftragserteilung abzuwickelnde Routine SETIM ( = setze Zeitauftrag)
ist in Figur 6 in Gestalt eines Struktogramms 35 dargestellt. Entsprechend ist die
zum Löschen eines Zeitauftrags abzuarbeitende Routine
deltim ( = setze Zeitauftrag) durch ein Struktogramm 36 in Figur 7 verdeutlicht. Die einzelnen
Schritte dieser Struktogramme 22 und 34 bis 36 sind in Klartext niedergelegt, so daß
die Struktogramme selbst erläuternd sind.
1. Motorsteuerung (1) mit einem Rechenteil (2), durch den Meßwerte, die Betriebsgrößen
des Motors wiedergeben, programmgesteuert erfaßt und ausgewertet und Steuersignale
für Stellglieder, die auf den Motorbetrieb einwirken, erzeugt werden, und mit einem
die Erfassung und Auswertung und die Erzeugung von Steuersignalen steuernden Betriebssystem,
unter welchem unterschiedliche Arten von Programmen zeitabhängig aktiviert werden,
dadurch gekennzeichnet, daß durch das Betriebssystem eine Zeitverwaltung mit folgenden Zeitüberwachungen
festgelegt ist:
- eine erste Zeitüberwachung für Aufgaben, deren jeweilige Aktivierungszeit in kurzen
Zeitabständen zu überprüfen ist, und
- eine zweite Zeitüberwachung für Aufgaben, deren jeweilige Aktivierungszeit in langen
Zeitabständen zu überprüfen ist.
2. Motorsteuerung nach Anspruch 1, dadurch gekennzeichnet, daß durch die erste Zeitüberwachung
Aufgaben verwaltet werden, deren Abarbeitung oder Aktivierung innerhalb einiger wenige
Systemzeiteinheiten zu erfolgen hat, und durch die zweite Zeitüberwachung Aufgaben
verwaltet werden, deren Abarbeitung oder Aktivierung eine größere Anzahl Systemzeiteinheiten
dauert.
3. Motorsteuerung nach Anspruch 1, dadurch gekennzeichnet, daß die Systemzeit in ein
Raster mit einer Zeiteinheit von 10 ms unterteilt ist.
4. Motorsteuerung nach Anspruch 1, dadurch gekennzeichnet, daß die erste Zeitüberwachung
drei Tabellen einschließt:
- eine Zeitauftragsliste (19),
- eine Adressenliste für die auszuführenden Aktionen und
- eine Tabelle der zyklischen Zeiten.
5. Motorsteuerung nach Anspruch 4, dadurch gekennzeichnet, daß in der Zeitauftragsliste
(19) jeder Zeitauftrag in einen Listenplatz (0,..., n) eingetragen wird, und daß der
einzutragende Zeitauftrag eine Adresse, eine Statusinformation und einen Zeitpunkt,
an dem die dem Zeitauftrag zugeordnete Aktion zu aktivieren ist, enthält.
6. Motorsteuerung nach Anspruch 5, dadurch gekennzeichnet, daß der eingetragene Zeitpunkt
bei jedem Programmdurchlauf mit dem Inhalt eines die aktuelle Systemzeit (AKZEIT)
darstellenden Zählers verglichen und im Falle einer Übereinstimmung die dem Zeitauftrag
zugeordneten Aktionen angestoßen werden.
7. Motorsteuerung nach Anspruch 1, dadurch gekennzeichnet, daß die zweite Zeitüberwachung
eine Zeitauftragsliste (24), in der die Zeitaufträge abgelegt sind, und eine Adreßliste
(25) enthält, in der die Anfangsadressen der Aktionen abgelegt sind, die den einzelnen
Zeitaufträgen zugeordnet sind.
8. Motorsteuerung nach Anspruch 7, dadurch gekennzeichnet, daß die Zeitaufträge in der
Zeitauftragsliste (24) in aufsteigender zeitlicher Reihenfolge angeordnet sind und
daß diese Reihenfolge durch Links (Pointer), realisiert ist, die die Verbindungen
zwischen den einzelnen Zeitaufträgen festlegen.
9. Motorsteuerung nach Anspruch 7, dadurch gekennzeichnet, daß bei jedem im Systemzeitraster
erfolgenden Aufruf durch die Zeitverwaltung jeweils nur der erste Auftrag in der Zeitauftragsliste
(24) auf Ablauf abgefragt wird.