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 

Zum Zeitpunkt X was ausführen



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!

18.08.2008, 13:50
Beitrag #1

Martin_München Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: May 2007

8.2
2007
kA

82152
Deutschland
Zum Zeitpunkt X was ausführen
Hallo liebe Community!

Ich hätte da mal eine Frage: Und zwar liegt mein Problem darin, dass zu bestimmten, festen Zeitpunkten x1, x2, ..., xn mein Programm Aufgaben erledigen muss. Nun wäre es super, wenn diese Aufgaben so zeitnah wie möglich passieren. Momentan läuft es folgendermaßen, dass ich in einer event-Struktur die vorgegeben Zeitpunkte x1, x2, etc alle 50ms überprüfe. Dementsprechend kann es einen Fehler von 50ms geben...

Ist es denn nicht irgendwie möglich die Zeitpunkte für einen Schleifendurchlauf festzulegen? Geht das vielleicht mit der timed loop structure? Ich würde ja am liebsten das stetige Überprüfen mit einer while-Schleife umgehen wollen und etwas "eleganter" vorgehen (wenn möglich).

Danke schon einmal für Eure Hilfe!!

Viele Grüße,

Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.08.2008, 16:00
Beitrag #2

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
Zum Zeitpunkt X was ausführen
Mit einer Timeloop Struktur kannst du genau die Zeit eines Schleifendurchlaufes bestimmen. Die Schleife zeigt auch auf, sollte es Abweichungen in der Ausführungszeit geben.

Die Frage ist, was du genau machen musst / willst zu den Zeitpunkten. Dann kann man auch sagen, wie es eventuell elegant zu lösen geht.
Von einer Eventstruktur würde ich sonst eher abraten für Zeitmessungen. Nutz hier besser den Millisekundentimer oder die Funktion "Bis zum nächsten Vielfachen warten". Damit kannst du zeitkritische Erledigungen bis theoretisch 1ms timen.

Grüße

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.08.2008, 16:45
Beitrag #3

Martin_München Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: May 2007

8.2
2007
kA

82152
Deutschland
Zum Zeitpunkt X was ausführen
Hallo Kvasir!

Danke für deine Antwort.

Die Sache ist folgende:

Der Benutzer steuert ein Gerät per Software und hat die Möglichkeit 4 verschiedene Ventile zu schalten. Diese 4 Ventile haben jeweils nur 2 Positiionen (offen und geschlossen).

Nun kann der Benutzer für jedes Ventil das Zeitintervall einstellen, in welchem es geschaltet werden soll.

z.B.:
V1 schaltet alle 2,5s,
V2 schaltet alle 10s,
V3 und V4 schalten alle 24,8s.

Es gibt hierfür momentan zwei Möglichkeiten, welche ich angewandt habe:

1) Erstellung eines Zeitpunkt-Arrays, in welchem die Zeitpunkte vorberechnet sind. Die Überprüfung, ob geschaltet werden soll oder nicht, wird in einem timeout vorgenommen.
2) Sequentielles berechnen der Zeitpunkte. Das Programm hat keine festen Zeitpunkte mehr, sondern berechnet nach jedem erfolgtem Schaltvorgang die nächste Schaltzeit.

Das Problem bei den Punkten 1und2 ist, dass ein einfaches Verschieben des Programmfensters, die Subroutinen unterbricht und es zu Unregelmäßigkeiten in den Schaltvorgängen kommt. --> Einfach ein Programm die ganze Zeit verschieben, dann weißt du was ich meine...

Ich hoffe das Problem ist nun etwas klarer gewordenSmile

Viele Grüße, Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 07:59
Beitrag #4

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Zum Zeitpunkt X was ausführen
' schrieb:Das Problem bei den Punkten 1und2 ist, dass ein einfaches Verschieben des Programmfensters, die Subroutinen unterbricht und es zu Unregelmäßigkeiten in den Schaltvorgängen kommt. --> Einfach ein Programm die ganze Zeit verschieben, dann weißt du was ich meine...

Ich hoffe das Problem ist nun etwas klarer gewordenSmile

Das heisst, das dein zeitkritischen Code im UserInterface ausgeführt wird, und nicht für sich ein eigenes "Execution System" hat.
Da nützt auch die Einstellung "Subroutine" nichts, oder jedenfalls nicht viel.

Das heisst, du musst die Bedienung und die Logik für die Ventile trennen.
Ich nehme mal an, das du das direkt aus der Eventstruktur machst, und das ist falsch.
Dazu gibt es hier viele Themen die das Thema Eventstruktur, StateMachine und Queue thematisieren, lies dich doch mal durch.

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 11:05
Beitrag #5

Martin_München Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: May 2007

8.2
2007
kA

82152
Deutschland
Zum Zeitpunkt X was ausführen
' schrieb:Das heisst, das dein zeitkritischen Code im UserInterface ausgeführt wird, und nicht für sich ein eigenes "Execution System" hat.
Da nützt auch die Einstellung "Subroutine" nichts, oder jedenfalls nicht viel.

Das heisst, du musst die Bedienung und die Logik für die Ventile trennen.
Ich nehme mal an, das du das direkt aus der Eventstruktur machst, und das ist falsch.
Dazu gibt es hier viele Themen die das Thema Eventstruktur, StateMachine und Queue thematisieren, lies dich doch mal durch.

hmmm, also ich weiß nicht, wie mir da jetzt die state machine weiterhilft...das Problem bleibt das Gleiche: Wenn ich das Fenster bewege, braucht LabVIEW länger zum Ausführen der Prozesse...vielleicht kannst du mir ja in dieser Richtung einen spezifischen Link geben, der das Problem löst.

Anbei ein Beispiel VI in welchem mit einer State-Machine 3 Balken gefüllt und geleert werden.

Viele Grüße und Danke, Martin

LabVIEW Version 8.5:

Sonstige .vi  Beispiel.vi (Größe: 34,98 KB / Downloads: 241)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.08.2008, 13:56
Beitrag #6

Martin_München Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: May 2007

8.2
2007
kA

82152
Deutschland
Zum Zeitpunkt X was ausführen
' schrieb:hmmm, also ich weiß nicht, wie mir da jetzt die state machine weiterhilft...das Problem bleibt das Gleiche: Wenn ich das Fenster bewege, braucht LabVIEW länger zum Ausführen der Prozesse...vielleicht kannst du mir ja in dieser Richtung einen spezifischen Link geben, der das Problem löst.

Anbei ein Beispiel VI in welchem mit einer State-Machine 3 Balken gefüllt und geleert werden.

Viele Grüße und Danke, Martin

LabVIEW Version 8.5:
[attachment=41446:Beispiel.vi]

ist das Ganze zu kompliziert oder trivial? Denn egal, wie ich es bewerkstellige, das Problem bleibt das Gleiche...Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.08.2008, 08:01
Beitrag #7

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Zum Zeitpunkt X was ausführen
' schrieb:ist das Ganze zu kompliziert oder trivial? Denn egal, wie ich es bewerkstellige, das Problem bleibt das Gleiche...Sad

Sorry, aber ich habe im Moment grad etwas wenig zeit.

Habe mir deine Antworten nochmals durchgelesen.
Verwendest du zum ansteuern der Ventile, NI-DAQ/VISA ?

Wenn du damit das ansteuern der Ventile in einer eigenen Schlaufe machst, sollte das automatisch von LV in den DAQ Task gestellt werden und die Ventile werden zeitgenau angesteuert. (soweit das unter Windows halt möglich ist)

Die Anzeige wird aber vermutlich immer noch verzögert sein. (wobei es da auch eine Einstellung, glaube in der INI gibt, fällt mir grad nicht ein)
Ich denke mal, das noch viele das Problem haben und noch gar nie bemerkt haben.Wink

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2008, 09:44
Beitrag #8

Martin_München Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: May 2007

8.2
2007
kA

82152
Deutschland
Zum Zeitpunkt X was ausführen
' schrieb:Sorry, aber ich habe im Moment grad etwas wenig zeit.

Habe mir deine Antworten nochmals durchgelesen.
Verwendest du zum ansteuern der Ventile, NI-DAQ/VISA ?

Wenn du damit das ansteuern der Ventile in einer eigenen Schlaufe machst, sollte das automatisch von LV in den DAQ Task gestellt werden und die Ventile werden zeitgenau angesteuert. (soweit das unter Windows halt möglich ist)

Die Anzeige wird aber vermutlich immer noch verzögert sein. (wobei es da auch eine Einstellung, glaube in der INI gibt, fällt mir grad nicht ein)
Ich denke mal, das noch viele das Problem haben und noch gar nie bemerkt haben.Wink

so wieder zurückSmile

Hmmm, leider läuft die Ansteuerung nicht über VISA/NI-DAQ sondern über simple serielle Befehle, welche von unserem Gerät verarbeitet werden...

Es muss doch möglich sein, auf die Millisekunde genau eine Aktion auszuführen, ohne zu sehr von der CPU-Auslaustung abhängig zu sein.

Wäre cool, wenn ihr mir da weiterhelfen könntet...

Danke schon malSmile

Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2008, 10:15
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Zum Zeitpunkt X was ausführen
' schrieb:Hmmm, leider läuft die Ansteuerung nicht über VISA/NI-DAQ sondern über simple serielle Befehle, welche von unserem Gerät verarbeitet werden...
Und wie gehen sie seriellen Befehle von LV raus? VISA oder DaqMX? Oder was anderes? Was dann?

Zitat:Es muss doch möglich sein, auf die Millisekunde genau eine Aktion auszuführen, ohne zu sehr von der CPU-Auslaustung abhängig zu sein.
Eigentlich möchte ich sagen, unter Standard-Windows geht "auf die Millisekunde genau" nicht.

Du könntest ein hochpriorisiertes SubVi als Task machen. Das ist dann relativ unabhängig. Nur: Der Nachweis hierfür ist schwierig.

Oder du nimmst ein RT-System.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2008, 10:22
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Zum Zeitpunkt X was ausführen
' schrieb:Eigentlich möchte ich sagen, unter Standard-Windows geht "auf die Millisekunde genau" nicht.
Und wie lange dauert überhaupt das Schalten der Ventile selber? Brauchst du wirklich 1 ms genau? Ist im Standard-Win mit seriellen Befehlen sicher nicht möglich.

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Zeitpunkt des Maximums wanze 2 3.379 24.06.2010 14:50
Letzter Beitrag: wanze
  Messung zu einem bestimmten Zeitpunkt starten? Moonray 2 4.297 20.05.2008 11:36
Letzter Beitrag: Moonray

Gehe zu: