LabVIEWForum.de - Umwandlung von Ticks in Sec und Übertragung an Host

LabVIEWForum.de

Normale Version: Umwandlung von Ticks in Sec und Übertragung an Host
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
So Leute,

vielen Dank für Eure tolle Hilfe. Eure Vorschlage haben mir ein paar Inspirationen beschert. Ich habe ein meiner Meinung nach ziemlich geiles FPGA VI programmiert. Ich würde gerne Eure Meinung dazu hören.
Es besteht im Großen und Ganzen aus drei parallelen Schleifen für Zeit, Analog Input und Analog Output.

Zeit:
In diesem VI generiere ich eine FPGA Uhr mit einer Taktzeit von 1us. (40Takte). Daraus erzeuge ich einen Sekunden und Mikrosekundenzähler. Ist der Mikrosekundenzähler gleich der gewünschten Sample Rate wird ein FIFO Eintrag "FPGA Time" generiert, der in der Schleife AI einen Analog Input Akt auslöst. Gleichzeitig wird die momentane Zeit als U64 umgewandelt und in ein Memory Element geschrieben. Dieses Memory Element wird in der Schleife AO ausgelesen um analoge Ausgangssignale zu diskreten Zeitpunkten zu triggern.

AI:
Sobald ein FPGA_Time FIFO Element vorhanden ist (Siehe Schleife Zeit) wird ein AI durchgeführt und die Werte zusammen mit der Zeitinformation als U64 in das FIFO_AI transferiert um zum RT VI weitergeleitet und verarbeitet zu werden.

AO:
Über das FIFO_AO werden Sollwerte (Spannung zu Zeitpunkt x) in das FPGA VI transferiert. Überschreitet der Wert der FPGA Uhr den Sollwert wird der gewünschte Spannungswert an das AO übertragen und das nächste Element aus dem FIFO_AO geholt.


Ich fände es toll, wenn Ihr den Code kommentieren könntet. Gibt es noch was, was Euch auffällt was man verbessern kann?

Danke für Eure Hilfe!

Andy


PS

Zitat:Der andere Teil deiner Frage sollte bei >10 Jahre LabVIEW und CLA eigentlich auch kein Problem sein

CLA Evaluation: Style 10/10 Cool
Hallo Andy,

Zitat:Ich fände es toll, wenn Ihr den Code kommentieren könntet. Gibt es noch was, was Euch auffällt was man verbessern kann?
- Du speicherst einen U64-Wert im Time-Memory, den du zuerst (recht umständlich, warum kein Join) aus 2 U32-Werte bildest und später dann wieder in 2 U32 aufsplittest. Warum speicherst du nicht einfach 2 U32-Werte im Memoryblock?
- Bei Verwendung von 2 U32-Werten für TIME könntest du in der AI-Loop auch mit U32-Werten arbeiten und massig Bits/Fabric einsparen…
- Andererseits verwendest du immer U64 für den TIME-Wert, machst den Vergleich im AO-Teil aber aufwendig mit 2 U32…
- Die Berechnung des SyncAlarm ist auch etwas RubeGoldberg: Ersetze das "=0" durch "<>0" und das Select durch ein AND…

Zitat:CLA Evaluation: Style 10/10
Echt? Versteckte Drähte…
Seiten: 1 2
Referenz-URLs