INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Gaspruefstand - Programm



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

22.02.2010, 19:36
Beitrag #1

Andinger Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Feb 2010

7.1
2010
de_en

95447
Deutschland
Gaspruefstand - Programm
Hallo,
ich habe ein kleines LabVIEW-Projekt vor mir, um die letzte Woche meines Praktikums sinnvoll zu nutzen.
Ich habe ein bisschen LabVIEWerfahrung, aber eben nur ein bisschenSmile

Ich versuche es moeglichst kurz zu machen, damit eure Zeit nicht so beansprucht wirdBig Grin:

Das Programm soll ohne Details Folgendes koennen:[list]Eine Steuerdatei einlesen die Zeitschrittinformationen enthaelt, die dann umgesetzt werden in neun analoge Spannungen an den Gasflusscontrollern.<>
[st][list]kontinuierlich CAN schreiben und 10 Kanaele lesen (das Schreiben dient nur dazu damit der zugehoerige Sensor nicht abschaltet)<>
[st][list]kontinuierlich 16 analoge Signale lesen.<>
[st][list]Das Lesen der AI's soll mit konstanter Frequenz zwischen 1 und 10kHz moeglich sein. Die gelesenen Daten sollen gemittelt mit 1 - 100 Hz in eine Datei geschrieben werden.<>
[st][list]einen manuellen Modus zur Steuerng der Gasflusscontroller haben<>
[st]Das momentane Programm ist alt, verbuggt, wird nicht sauber beendet, verwendet kein DAQmx und kann kein CAN schreiben (momentan ist ein anderer Computer zusaetzlich an den CAN-Bus angeschlossen, der das CAN-Write uebernimmt um den Sensor im aktiven Zustand zu halten). Und es ist nur fuer niedrige Frequenzen ausgelegt.

Ich versuch mal meine Ueberlegungen bisher zu schildern:

Ich wuerde ein Mainloop verwenden, dass das Lesen der Steuerdatei und das Stellen der Controller uebernimmt. Hierzu wuerde ich einfach die Zeit mit GetTime abchecken und jedesmal wenn der Wert groesser ist, als "Startzeit plus Wert fuer naechsten Zeitschritt aus der Steuerdatei" die Spannung fuer die Controller aendern. Hier wuerde auch die manuelle Kontroller reinkommen. Wenn der User auf manual Mode stellt, wird die Zeit angehalten und man kann selber bissi rumspielen. Wenn man den manuellen Modus wieder ausschaltet, geht es in der Steuerdatei weiter. Saemtliche Informationen ueber Startzeit, Wartezeit, Spannungskonfiguration vor einschalten des manuellen Modus wuerde ich in lokalen Variablen oder in einem Cluster und einem Shiftregister ablegen.

In einem parallelem Loop wuerde ich CAN in einer Flat-Sequence-Structure Lesen und Schreiben lassen ab dem Moment wo das Programm gestartet wurde. Lasst uns dieses Loop als CAN-Loop bezeichnenSmile

In einem weiteren parallelem Loop (AI-Loop) soll nun das analoge Lesen und Mitteln stattfinden und wahrscheinlich waere es auch am schlausten hier die Dateiausgabe der Messwerte zu implementieren.

In dem aktuellen, alten, verbuggten Programm gibt es nur ein einziges Loop das alles uebernimmt. In dem Loop wird jedes Mal EIN Messwert von AI und CAN erfasst und in eine Datei geschrieben. Das Timing ist dementsprechend an die Samplefrequenz von der AI Karte gekoppelt. Das hat den Charme, dass es bei niedrigen Frequenzen ein eisernes Timing ohne Schwanungen ist. Und natuerlich den riesen Nachteil, dass man bei hoeheren Sampleraten kein korrektes Timing mehr hat, da nichts gepuffert wird und der PC einfach zu lang braucht um alles zu verarbeiten und jeden Wert in die Datei zu schreiben.

Hier kommen meine Probleme ins Spiel:

Ich weiss nicht so recht wie ich ein gutes Timing fuer mein AI-Loop machen kann. Bzw. brauch ich das ueberhaupt?
Ich wuerde die Messkarte auf kontinuierlich samplen mit 10kHz stellen und dann in meinem AI-Loop abhaenig von meiner gewuenschten Schreibfrequenz immer z.B. 100 Messwerte aus dem Puffer erfassen und verarbeiten. Sprich mitteln und in die Datei schreiben. Waere das OK oder hat das irgendwelche gravierenden Nachteile bzw. uebersehe ich hier was?

Die naechste Frage ist, wie schnell kann ich das CAN-Loop laufen lassen. Bzw. konkreter wie mache ich hier das Timing. Meine Idee ist bisher fuer das Loop: eine flat sequenz structure mit 1 x einen Wert schreiben, 1x einen Wert lesen, z.B. 20 ms warten
Ist das ok?
Die Daten vom CAN-Loop muessen dann natuerlich an das AI-Loop uebergeben werden. Nachdem diese Daten langsamer herein kommen als das AI-Loop ablaueft, wuerde ich zur Uebergabe eine lokale Variable fuer das Array mit den CAN Daten verwenden. Ein Notifier wuerde ja immer haengen und warten bis die Daten da sind. Dabei laueft der Puffer ja sofort ueber. Deshalb muesste man ein Timeout fuer 'Wait on Notification setzen'. Aber wie lang macht man das? 1 ms? 5 ms? Eine lokale Variable scheint mir deshalb besser geeignet, da ich ja nur an einer Stelle (im CAN-Loop) in sie schreibe.

Und die letzte Frage zu den bisherigen Ueberlegungen betrifft das Mainloop, wenn der User auf manuellen Modus umgestellt hat:
Hier werden ja nun irgendwelche Controls vom Frontpanel gelesen und in Stellsignale umgewandelt.An jeden Control gekoppelt ist eine Berechnung die ueber ein Schalten von Relais entscheidet. Langer Rede kurzer Sinn: Ich moechte, dass diese Berechnung nur dann stattfindet, wenn der User auch wirklich etwas an den Controls geaendert hat.
Meine Loesung bisher fuer so etwas, war jeden Controlwert mit einem Shiftregister durchzuschleifen (oder halt einen Cluster) und fuer jeden Wert zu ueberpruefen ob sich etwas zum Wert zuvor geaendert hat (und dann eben fuer jeden Wert eine Case-Strukture). Das ist sehr unuebersichtlich und gefaellt mir nicht. Gibts da bessere Methoden?

Ohweia, das ist jetzt doch laenger geworden als ich dachte. Danke fuer alle die bis hier durchgehalten habeSmile- und danke an die anderen natuerlich auchTongue

Ich wuerde mich ueber jeglichen Tipp, jegliche Ergaenzung, jegliche Korrektur und jegliche komplett neue, bessere Idee sehr freuen. DankeSmile

Andinger
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Nachrichten in diesem Thema
Gaspruefstand - Programm - Andinger - 22.02.2010 19:36
Gaspruefstand - Programm - IchSelbst - 22.02.2010, 22:37
Gaspruefstand - Programm - Andinger - 22.02.2010, 23:34
Gaspruefstand - Programm - IchSelbst - 23.02.2010, 09:42
Gaspruefstand - Programm - Andinger - 23.02.2010, 15:02
Gaspruefstand - Programm - IchSelbst - 23.02.2010, 15:41
Gaspruefstand - Programm - Andinger - 23.02.2010, 23:01
Gaspruefstand - Programm - IchSelbst - 23.02.2010, 23:46
Gaspruefstand - Programm - Andinger - 24.02.2010, 14:51
Gaspruefstand - Programm - Andinger - 24.02.2010, 15:04
Gaspruefstand - Programm - IchSelbst - 24.02.2010, 16:38
Gaspruefstand - Programm - Andinger - 24.02.2010, 17:09
Gaspruefstand - Programm - Andinger - 24.02.2010, 18:40
Gaspruefstand - Programm - IchSelbst - 24.02.2010, 18:54
Gaspruefstand - Programm - IchSelbst - 24.02.2010, 19:06
Gaspruefstand - Programm - Andinger - 24.02.2010, 20:08
Gaspruefstand - Programm - Andinger - 03.03.2010, 15:43
Gaspruefstand - Programm - IchSelbst - 03.03.2010, 16:44

Gehe zu: