(19)
(11) EP 0 612 917 A1

(12) EUROPÄISCHE PATENTANMELDUNG

(43) Veröffentlichungstag:
31.08.1994  Patentblatt  1994/35

(21) Anmeldenummer: 93102978.9

(22) Anmeldetag:  25.02.1993
(51) Internationale Patentklassifikation (IPC)5: F02D 41/26
(84) Benannte Vertragsstaaten:
DE FR GB IT

(71) Anmelder: SIEMENS AKTIENGESELLSCHAFT
D-80333 München (DE)

(72) Erfinder:
  • Neugebauer, Heinz, Dipl.-Ing. (FH)
    W-8431 Seubersdorf (DE)
  • Ziegler, Herbert, Dipl.-Ing. (FH)
    W-8440 Straubing (DE)


(56) Entgegenhaltungen: : 
   
       


    (54) Motorsteuerung


    (57) Eine Steuerung (1) für einen Kraftfahrzeugmotor enthält einen Rechenteil (2), durch den Meßwerte erfaßt und ausgewertet werden, die Betriebsgrößen des Motors wiedergeben (z.B. die Ansauglufttemperatur), und Steuersignale für Stellglieder erzeugt werden, die auf den Motorbetrieb einwirken (z.B. die Kraftstoffeinspritzung steuern). Die Steuerung 1 weist ein Betriebssystem auf, das die Verwaltung von zeitabhängig anzustoßenden Aufgaben vereinfacht. Es schließt ein eine erste Zeitüberwachung für Aufgaben, deren Aktivierung in kurzen Zeitabständen zu überprüfen ist (z.B. Diagnosekommunikation), und eine zweite Zeitüberwachung für Aufgaben, deren Aktivierung in langen Zeitabständen zu überprüfen ist (z.B. Messung der Ansaugluft- und der Kühlmitteltemperatur, Heizung der λ-Sondenheizung usw.).




    Beschreibung


    [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.


    Ansprüche

    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.
     




    Zeichnung
















    Recherchenbericht