Zeitsprünge bei der Laufzeiterfassung eines Prüfstandes
Ich hab mir mal das MusterVI angekuckt und bin zu folgendem Ergebnis gekommen: Einen Zustand gemäß dem von mir oben beschriebenen Effekt kann ich hier nicht feststellen. Aber einen ablaufspezifischen:
Erstens:
Vor (nicht nach) einem "Dateneingabe" (siehe Statemachine) muss unbedingt ein "Neue Messung starten" gemacht werden. Würde ein "Neue Messung starten" vor einem "Dateneingabe" nicht gemacht werden, würde im Cluster nicht die aktuelle Laufzeit stehen. Damit würde in einem folgenden "Dateneingabe" ein alter Laufzeitstand (oberes DBL-Schieberegister) für neu genommen werden.
Beispiel für fehlerhaften Ablauf: "Dateneingabe", "Neue Messung starten", sonstiger Case (irgendwelche müssen gemacht werden, sonst könnte man sie ja auch weg lassen), sonstiger Case (irgendwie muss die Zeit ja vergehen), sonstige Cases, "Dateneingabe": Jetzt wird ein alter Laufzeitstand übernommen. Auf jeden Fall weniger. Es muss also geprüft werden, dass die Reihenfolge der Cases immer konsistent ist.
Das Problem hierbei kommt von folgendem:
Das VI "Verstrichene Zeit" liefert ja dem Namen nach die Dauer der letzten Messung (sag ich jetzt mal so). Eigentlich solle genau zu dem Zeitpunkt, zu dem diese Dauer ermittelt wird (nämlich mit dem VI), diese Dauer auch zum aktuellen Wert der Laufzeit addiert werden (also innerhalb des Clusters). Die Dauer wird aber in einem Schieberegister zwischengespeichert - zusammen mit der bisherigen Laufzeit. Jetzt gibt es aber zwei Speicherbereiche (Schieberegister und Cluster) mit der selben Eigenschaft: nämlich Laufzeit. Zwei Speicherbereiche für eine Eigenschaft zu haben ist aber redundant - und damit überflüssig und fehleranfällig.
Hinweis: Die Funktionalität "Anhalten" kann man auch anders, und auch sehr einfach, realisieren als hier dargestellt.
Zweitens:
Das mit dem VI "Verstriche Zeit" gefällt mir nicht. Problem: Dieses VI muss zum Startzeitpunkt und zum Endzeitpunkt der zu messenden "verstrichenen Zeit" aufgerufen werden. Das geht aber nur, wenn der selbe Case zweimal aufgerufen wird: Einmal am Anfang der Messung und dann am Ende der Messung. Den selben Case zweimal aufrufen zu müssen, kann aber Probleme beim Ablauf (Statemachine) aufwerfen. Was passiert zwischen Ende und Anfang? Es würde mir besser gefallen, wenn das VI "verstrichene Zeit" in einen SubVI wäre und wenn dann dieses SubVI im Case "MyStartOfMeasure" und im Case "MyEndOfMeasure" aufgerufen werden würde.
Fazit:
Ich tippe auf einen Ablauffehler innerhalb der Schrittkette. Die Fehlerbeschreibung "plötzlich zu geringe Laufzeit" spricht dafür, dass einmal die Summe aus aktueller Laufzeit und verstrichene Zeit nicht richtig abgespeichert wurde, bevor diese Zeit wieder geladen wird.
Diese meine Überlegungen können natürlich ganz einfach widerlegt werden, indem man die Richtigkeit der Ablaufsteuerung nachvollziehbar und vollständig nachweist.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|