Vorgehen bei Fehlersuche

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • New

      Nofalls den ganzen EEprom-Bereich mit einer Testsoftware in der Umgebung beschreiben.
      Aufwärtszählen z.B. und die Daten nach einander mit etwas Abstand an zwei unterschiedlichen Adressen speichern.
      Anschließend die entspr. Daten in einer Schleife wieder lesen und subtrahieren -> das Ergebnis prüfen.

      a_56_df238249
    • New

      An welchen Adressen werden die Eeprom Daten gespeichert? Ich gehe davon aus dass der erste DIm auch an Adresse 0 speichert.

      BASCOM Source Code

      1. '########################################### Eeprom Variablen #############################
      2. Dim Valideeprom_ee As Eram Byte
      3. Dim X As Eram Byte 'platzhalter vor Fahrerwunsch
      4. Dim Fahrerwunsch_ee As Eram Word
      5. Dim Sensor_nummer_ee As Eram Byte
      6. Dim Toleranz_prozent_ee As Eram Byte
      7. Dim Pumpzeit_ee As Eram Byte
      8. Dim Max_absenkversuche_ee As Eram Byte
      9. Dim Parkzeit_ee As Eram Byte
      10. Dim Anzahlmessungen_ee As Eram Byte
      11. Dim Anzeige_aktiv_ee As Eram Byte
      12. Dim Pos_oben_ee As Eram Word
      13. Dim Pos_unten_ee As Eram Word
      14. Dim Toleranz_error_ee As Eram Byte
      15. Dim Switchsensor_ee As Eram Byte
      16. Dim Ledtyp_ee As Eram Byte
      17. Dim Messinterval_ee As Eram Byte
      18. Dim Startcount_ee As Eram Word
      19. Startcount = Startcount_ee 'anzahl der Systemstarts lesen
      20. Incr Startcount 'anzahl der Systemstarts erhöhen
      21. Startcount_ee = Startcount 'anzahl systemstarts zurückschreiben
      22. X = 0
      Display All
      Valideeprom_ee wird doch an Adresse 0 gespeichert und je nach länge so weiter... Ich habe mal vor Fahrerwunsch ein Dummybyte eingefügt falls Fahrerwunsch aus irgend einem Grund geschreddert wird. Geht so was?

      Pluto25 wrote:

      Ist der Fehler denn ein Versatz von 256 zu viel?
      Pluto, wieso diese Frage?
    • New

      Hab ich richtig in Erinnerung, du hast das Programm umgebaut auf state machine? Und vorher ging alles? Dann liegt's ja nicht an der eram hardware, wo jetzt ja grad gesucht wird. Es ist einfach ein Programmierfehler :D , der bei der Umschreibung entstanden ist. Warum hast du ein funktionierendes Programm umgebaut?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • New

      Die Umsetzung in eine Statemachine war schon die richtige Entscheidung. Den Grund haste ja eben genannt.
      Und ich würde auch dabei bleiben.

      Aber du hast irgendwo bei der Umsetzung einen Fehler gemacht.
      Vielleicht die States nicht korrekt definiert oder zu viel in einen State gepackt.

      Kann auch sein, dass du die Übergangsbedingungen an den falschen Stellen auswertest. Die gehören in die States (Cases) rein.

      Vielleicht zeigst du mal die Schleife, in der die States abgehandelt werden und wo die tastenabfrage eingreift, um den State zu ändern.
    • New

      Mitch64 wrote:

      Vielleicht zeigst du mal die Schleife, in der die States abgehandelt werden und wo die tastenabfrage eingreift
      Gern aber ich hab ein Problem damit wenn ihr meine Arbeit macht. a_56_df238249

      Die Tastenabfrage steuert nur den Kompressor oder das Ventil und übernimmt beim Loslassen den neuen Fahrerwunsch.
      Files
    • New

      Pac-Man wrote:

      Eine Platine arbeitet im Fahrzeug, eine Andere auf meiner Arbeitsblatte. Auf der Arbeitsplatte ist der Fehler noch nie passiert was natürlich auch daran liegt dass die Bewegungen vom Wegnehmer nicht der Realität entsprechen.
      Du hast das Glück, dass du ein funktionierendes Duplikat hast. Drum würde ich, an deiner Stelle, mit dem Tauschen anfangen. Wenn beide Platinen wirklich gleich sind und auch das Programm darauf, dann testen, ob sich die Platinen auch genau gleich verhalten. Wandert der Fehler auf den Schreibtisch, ist die Platine schuld. Bleibt der Fehler im Fahrzeug, ist die Umgebung schuld. Läge es am Programm, müsste der Fehler ja überall auftreten.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • New

      Wie ich es mir gedacht habe.
      Statemachine ist fehlerhaft umgesetzt!

      In der Do Loop
      Fragst du zwar die States ab.
      Aber außerhalb der Select Case Struktur (Statemachine) fragst du die Tasten ab und hast anderen Code, der die States ändert.
      Da wird das Problem seine Wurzel haben. Die Zustandswechsel gehören immer in die entsprechenden Zustände.

      In der Schleife mit der Statemachine darf im Grunde nur die Select case Struktur sein. Aller Code muss in die Cases und zwar zum richtigen Case.
      So wie es jetzt ist wird in der select case vielleicht ein State geändert und nach der Select Case Struktur änderst du es wieder.
      Das kann zu unerwartetem Verhalten der Steuerung führen und könnte der Grund für dein Problem sein.

      Genau das soll die Statemachine ja verhindern.
      Außerhalb der Select Case gehört nur das, was du in jedem State im Loop Code ausführen müsstest.

      Ziel der Statemachine ist ja, dass du dein Steuerprozess in Zustände aufgliederst.
      Und jeder Zustand hat eine Teilaufgabe im Prozess. Und da sind bestimmte Ereignisse (Taster-Abfragen oder ADC-Abfragen z.B.) in einzelnen Zustanden vielleicht nicht relevant.
      Deswegen teilt man das ja auf. Das macht den Code übersichtlicher und auch wartbar.
      Fehlersuche gehört auch zur Wartung!
      Ist der Code sauber gegliedert, findet sich recht schnell der kleine Code-Teil, der als Ursache für Probleme in Betracht kommt.
      Zumindest wenns am Code liegt.

      Verstehst du was ich meine?
    • New

      Ich möchte einmal auf das wichtigste hin weisen. Das Bordnetz eines Fahrzeuges ist das sinngemäß schlimmste das man sich vorstellen kann.
      Hier ein Link dazu: mk4-wiki.denkdose.de/artikel/kfz-bordnetz/start

      Es wäre empfehlenswert, dieses Bordnetz genauer zu analysieren und die Platine darauf anzupassen. Zumindest mal ins Auge fassen, dass dieses Bordnetz
      kein Labornetzteil ist, sondern eine Unmenge Störungen beinhalten kann. Klar ist, was auf dem Tisch störungsfrei funktioniert, hat eine ganz andere Stromversorgung! Wer ein Scope besitzt, sollte sich mal das Bordnetz eines Fahrzeuges anschauen. Eventuell auch mal genauer die Platinen-Stromversorgung unter Bordnetzbedingungen anschauen und so anpassen, dass ein möglichst sicherer Betrieb möglich ist.
    • New

      Mitch64 wrote:

      Aller Code muss in die Cases und zwar zum richtigen Case.
      Sonst muss alles aus der Do-Loop raus?

      Source Code

      1. End Select 'ende der Statemachine
      2. If Ignition = 1 Then
      3. If Handle_up = 1 And Handle_down = 1 Then Call System_off()
      4. If Handle_up = 1 And Handle_down = 0 Then Call Taster_hoch()
      5. If Handle_up = 0 And Handle_down = 1 Then Call Taster_ab()
      6. End If
      Das ist z.B. nach End Select der Statemachine. Bedeutet das dass ich die Zeilen in alle relevanten States einfügen muss?
    • New

      Das kommt drauf an.

      Erstens muss man nicht diesen Code in alle States einfügen.
      Typischerweise würde man den Code dann in einer Sub bereit stellen und wurde dann von den States aus einfach einen Call machen.

      Die Frage ist doch, ob du in jedem State alle Tasten prüfen musst. Und die Antwort ist normalerweise nein.

      Aber Code, der von jedem Zustand immer ausgeführt werden müsste, kann natürlich außerhalb der Select case Struktur sein.
      Aber der sollte nicht die States verändern.

      Nur innerhalb der States werden nur genau die relevanten Bedingungen geprüft, die notwendig sind, um dann die Zustandsänderung zu machen.
      Das macht man auch nicht in einer Tastenabfrage wie in deinem Beispiel, oder in Routinen außerhalb der Select case struktur.

      Wenn du in dem State Zündung_Aus bist, macht es ja keinen sinn die Tasten hoch oder runter zu prüfen, oder?
      Genau das meine ich.

      Und wenn du "Taste Hoch" prüfst dann wird dort auch kein State geändert.

      Die Prüfung einer Taste sollte lediglich zurück liefern, ob die Taste betätigt wurde oder nicht. Sie sollte keine Aktionen auslösen wie Effekte oder Zustandsänderungen.
      Wenn du Aktionen brauchst, dann prüfe in einem zustand (Case) die Taste und wenn die Bedingung erfüllt ist, rufst du diesen Effekt per Call von dem State aus auf.

      Die Steuerung ist in die Select Case-Struktur eingebettet und nicht im Code und verschiedenen Routinen verteilt.
      So machst du dein Programm nur unübersichtlich und verstehst selber nicht, wie die Abläufe im Programm sind.

      Deshalb Zustandsänderungen nur in der Select case Struktur. Die Bedingungen dazu in dem State prüfen und wenn die zutrifft, dann den zustand dort ändern.

      So ist das ganze Wirkprinzip.

      Eine Select Case Struktur bildet immer einen Prozess ab, der in sich quasi geschlossen ist.
      Wenn du sowas in eine eigene Sub packst, z.B. ProzessNivellierung(),
      brauchst du die nur in der Hauptschleife aufrufen.
      Weitere Calls auf andere Prozesse können dann viele Prozesse quasi parallel laufen lassen.

      Aber auch ein Lob an dich.
      Du hast es gewagt, auch mal was neues zu probieren.
      Wenn du das erst mal richtig durchstiegen hast wirst du selber feststellen, dass plötzlich die Programmabläufe stabiler laufen und besser zu kontrollieren sind.
      Leider hast du dir zur "Übung" nicht gerade ein Einsteiger-Projekt ausgesucht.

      Aber bleib dran!

      The post was edited 1 time, last by Mitch64 ().