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!
03.01.2008, 12:06 (Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2008 12:10 von Dorian.)
ich hab folgendes Problem.
Ich lese Daten über XCP vom Steuergerät aus (NI ECU Measurement and Calibration Toolkit).
Da ich die Daten exakt jede 10ms auslesen muss, hab ich eine Zeitgesteuerte Schleife gemacht mit
10 ms Periode und Priorität 100. Für die Anzeige und Eventauswertung etc (alles was nicht
Zeitkritisch ist) hab ich ne andere Schleife, mit timer von 100ms.
Mein Problem ist jetzt, das trotz alles die Werte nicht exakt jede 10 ms ausgelesen werden (meistens
ja, aber es gibt inzwischen immer Verzögerungen von 10ms).
Dabei hab ich LabVIEW schon auf Priorität "Hoch" unter Windows XP laufen und meine CPU Belastung liegt
"nur" bei 15-20%.
Kann man da sonst irgendwie die Priorität bzw das Echtzeitverhalten einstellen?
Mfg,
Dorian
ps: kann das VI nicht posten, weil man das Toolkit benötigt um zu laufen.
Anzeige
03.01.2008, 12:29 (Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2008 12:30 von Achim.)
Wenn du ne Echtzeit-Anwendung haben willst, musst du ein "Real-Time"-Betriebssystem, bzw. LV-Realtime auf nem PXI-System laufen lassen. Ansonsten kannst du die "exakte" Abfrage nicht realisieren!
Evtl. könntest du über den DAQmx-Treiber dir mit ner Counter-Karte ein ziemlich genaues Rechteck-Signal ausgeben, dass du irgendwie als HW-gesteuerten Auslese-Trigger verwendest...damit wäre die Echtzeit-Abfrage zwar auch nicht genau erreicht, aber vermutlich wesentlich besser, weil das relativ unabhängig vom Betriebssystem läuft...die Darstellung der Daten würde aber auf jeden Fall hinterherhinken. Wie du das mit deiner speziellen Anwendung verheiraten könntest, kann ich dir aber auch nicht sagen...
Gruß
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Danke für die schnelle Antwort. Ja, leider kann ich jetzt keine Realtime Hardware oder Os benutzen.
Ich dachte nur vielleicht gäbe es irgendwo noch spezielle LabVIEW Funktionen dafür, da meine CPU nicht allzusehr belastet ist. Und 10ms nun auch nicht "extrem" schnell ist, selbst für Windows.
Ich schau noch mal wie ich das am besten löse.
freundliche Grüße,
Dorian
03.01.2008, 19:29 (Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2008 19:30 von rolfk.)
' schrieb:Danke für die schnelle Antwort. Ja, leider kann ich jetzt keine Realtime Hardware oder Os benutzen.
Ich dachte nur vielleicht gäbe es irgendwo noch spezielle LabVIEW Funktionen dafür, da meine CPU nicht allzusehr belastet ist. Und 10ms nun auch nicht "extrem" schnell ist, selbst für Windows.
Ich schau noch mal wie ich das am besten löse.
freundliche Grüße,
Dorian
Windows NT (und damit 2000, XP, Vista, etc) kann Dir nicht garantieren dass ein Task innerhalb einer bestimmten Zeit wieder zum Laufen kommt. Das kann kein Desktop OS. 10ms scheint zwar viel aber unter Windows und anderen Desktop OSen sind bis zu 100ms Verzögerungen keine Unmöglichkeit, etwa wenn Netzwerkverkehr behandelt werden muss oder dergleichen.
Alles unter 100ms Genauigkeit kann nur mit einem RT System sicher erreicht werden, selbst mit heutigen high speed multicore CPUs und auch über 100ms gibts keine wirkliche Garantie, auch wenn die Chancen gut sind dass es eigentlich immer gut geht.
Wenn Du LabVIEW 8.5 hast und eine multicore CPU kannst Du aber eventuel die Wahrscheinlichkeit dass es auch mit 10ms noch gut geht signifikant erhöhen indem Du die zeitkritischen Dinge in eine RT Loop setzt und diese Loop einem der CPU cores zuweist. Aber 100% Garantie dass es dann immer funktioniert ist auch dann nicht möglich.
Danke für die ausführliche Antwort.
Hab meine Processorlast jetzt unter 10 %, dann läufts "ziemlich" gut. Kann aber während der Zeit nichts anzeigen, sonst geht alles den Bach runter :)Versuche die Anzeigen in einer zeitgesteuerten Schleife mit viel kleinerer Priorität zu machen. Funktioniert zwar, aber ist so elegant.
Das mit dem RT Loop hört sich ganz interessant an, muss meinem Chef mal um das Update zu 8.5 bitten, noch läuft 8.2.
Muss ich dazu auch das "Real-Time Module" haben?
Danke für die ausführliche Antwort.
Hab meine Processorlast jetzt unter 10 %, dann läufts "ziemlich" gut. Kann aber während der Zeit nichts anzeigen, sonst geht alles den Bach runter :)Versuche die Anzeigen in einer zeitgesteuerten Schleife mit viel kleinerer Priorität zu machen. Funktioniert zwar, aber ist so elegant.
Das mit dem RT Loop hört sich ganz interessant an, muss meinem Chef mal um das Update zu 8.5 bitten, noch läuft 8.2.
Muss ich dazu auch das "Real-Time Module" haben?
mfg,Dorian
nein, das RT-Modul brauchst du NUR, wenn du SW für ein RT-Ziel programmieren willst, z.B. wenn du einen PXI-Controler verwendest oder einen cRIO Controler. Es gibt auch die Möglichkeit einen "stinknormalen" Desktop PC in ein RT-Ziel umzuwandeln, dabei wird das Betriebssystem auf diesem Desktop PC ersetzt (durch PharPab), auch darauf kann man dann RT-SW laufen lassen.
auf das "funktioniert ganz gut" würde ich mich nur verlassen, wenn der PC, auf dem dein VI jetzt läuft auch später NUR für deine LV-Software verwendet wird. Sobald damit noch etwas anderes gemacht wird, oder z.B. weitere Software installiert wird kann sich das ganz schnell ändern ...
' schrieb:nein, das RT-Modul brauchst du NUR, wenn du SW für ein RT-Ziel programmieren willst, z.B. wenn du einen PXI-Controler verwendest oder einen cRIO Controler. Es gibt auch die Möglichkeit einen "stinknormalen" Desktop PC in ein RT-Ziel umzuwandeln, dabei wird das Betriebssystem auf diesem Desktop PC ersetzt (durch PharPab), auch darauf kann man dann RT-SW laufen lassen.
ok, alles klar.
' schrieb:auf das "funktioniert ganz gut" würde ich mich nur verlassen, wenn der PC, auf dem dein VI jetzt läuft auch später NUR für deine LV-Software verwendet wird. Sobald damit noch etwas anderes gemacht wird, oder z.B. weitere Software installiert wird kann sich das ganz schnell ändern ...
Ja, das stimmt schon. Aber soweit ist es erstmal ne Lösung für uns.
Hab nochmal ne Frage zu den Zeiten: Wie macht denn so eine Software wie CANape das, damit man über XCP (normales Ethernet, und auch ein normaler Windows-Treiber) mit 1ms sampling Zeit, Werte aus dem Steuergerät (und damit vom CAN-Bus) auslesen kann? (Die werden ja da auch nicht zwischengespeichert)