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 

Synchronisation



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!

27.11.2006, 23:44
Beitrag #1

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Synchronisation
Hallo Leute,

ich habe mehrere Tasks zur Datenverarbeitung:

1) Daten asynchron mit VISA über serielle Schnittstelle auslesen und in eine Queue reinschreiben
2) Daten aus dieser Queue auslesen und mit Concantenate Strings in einen Parser (Schiftregister) dazuhängen. Dieser Parser holt das Paket aus dem Schieberegister, nach dem das Paket alle Prüfungen bestanden hast, raus.
3) Das geparste Paket wird in eine neue Queue reingeschmissen.
4) Diese Queue wird ausgelesen und das entsprechende Paket wird angezeigt.

Dabei kommen zwei Pakete mit 100 Hz und andere 15 mit 10 Hz.

Das Problem ist, wenn die Pakete viel zu schnell kommen, wird meine zweite Queue irgendwann mehr als ein Paket hat, weil meine Nachfolgertasks mit der Berechznung und Darstellung nicht nachkommen. Z.B. hat diese 100 Pakete, die angezeigt werden sollen. Diese werden aber zu langsam angezeigt, weil ich einen Timeout von 100 ms in meinem Parser habe, aber die Queue mit Rohdaten keine Elemente mehr hat, weil auch keine Daten an der seriellen Schnittstelle (wenn ich diese trenne) anliegen. Somit läuft meine Parsetask und auch alle nachfolgenden Tasks zu langsam.

Was könnt ihr vorschlagen? Ich denke dabei an eine Case-Struktur, die z.B. die Queuegrösse überprüft und abhängig davon meinen Timeout vergrössert oder verkleinert.

Gruss, Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 00:33
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Synchronisation
Hier ein Screenshot und Beispiel für LV 8.0 , bitte anschauen.

Danke, Eugen


Angehängte Datei(en) Thumbnail(s)
   

Sonstige .vi  Synchronisation.vi (Größe: 33,31 KB / Downloads: 180)

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 07:43
Beitrag #3

Achimedes Offline
LVF-Freak
****


Beiträge: 544
Registriert seit: Aug 2005

2011
2001
DE

72461
Deutschland
Synchronisation
Vielleicht so.
So wartet die schleife länger wenn nixlosist. wens was zum arbeiten giebt ist sie schneller.
Grüße
Achimedes

Sonstige .vi  Synchronisation.vi (Größe: 36,06 KB / Downloads: 232)

Wer Rechtschreibfehler findet .... darf sie behalten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 10:34
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Synchronisation
Danke erstmal für die Antwort.

Aber nein, gerade umgekehrt, wenn ich deinen Vorschlag richtig verstanden habe. Wenn keine Daten in der Queue mit Rohdaten sich befinden, soll die Task in der Mitte schnell den Schieberegister abarbeiten. Sorry, dass ich micht vielleicht nicht klar ausgedrückt habe.

P.S. mir ist gerade noch aufgefallen, dass man Task1 und 2 vereinigen könnte, aber das löst das Problem trotzdem nicht. Wenn ich das mach muss ich auf VISA startt auf die Queue mit Rohdaten warten.

Gruss, Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 13:56
Beitrag #5

Achimedes Offline
LVF-Freak
****


Beiträge: 544
Registriert seit: Aug 2005

2011
2001
DE

72461
Deutschland
Synchronisation
OK.
Jetzt aber.

Erste Schleife holt Daten und legt sie in die 1Q.
Zweite Schleife - wenn was in der 1Q dann, rausholen und in das Schieberegister reinlegen, schieberegister
weiterverarbeiten.
- wenn nix in der 1Q dann, nur schieberegister weiterverarbeiten und in die 2Q eintragen.

dritte schleife - liest 2Q aus und zeigt sie an..


Sollte es so funktionieren?

Sonstige .vi  Synchronisation.vi (Größe: 35,77 KB / Downloads: 205)

Wer Rechtschreibfehler findet .... darf sie behalten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 14:00
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Synchronisation
Ja, so wie du es vorgeschlagen hast wird funktionieren. Mir gefällt aber nicht, dass wenn in der Q1 keine Daten sind, aber auch im Schieberegister nichts zu verarbeuiten ist, dann läuft die Task2 viel zu schnell und frisst die CPU.

Gruss, Eugen


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
28.11.2006, 15:33
Beitrag #7

Achimedes Offline
LVF-Freak
****


Beiträge: 544
Registriert seit: Aug 2005

2011
2001
DE

72461
Deutschland
Synchronisation
jetzt wird das schieberegister noch ausgewertet.

den vergleich musst du ja noch anpassen.
musst halt mal schauen was denn so, in deinem string, übrig bleibt. Null wird der nicht werden weil du ja immer wenigstens das letzte     im String hast.




Sonstige .vi  Synchronisation.vi (Größe: 38,34 KB / Downloads: 221)

Wer Rechtschreibfehler findet .... darf sie behalten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 16:58
Beitrag #8

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Synchronisation
Habe es so gelöst:

1) Schauen wie viele Bytes am Port anliegen
2) Wenn mehr als 0, dann in den Schieberegister dazuhängen und parsen
3) Wenn 0, dann schauen ab mein Schieberegister Daten hat, wenn
4) Daten im Schieberegister, dann parsen
5) Wenn keine Daten im Schieberegister, dann auf VISA Event warten

Gruss, Eugen


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 19:04
Beitrag #9

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Synchronisation
Wenn es jemand noch nicht verstanden hat.
Man kann also sagen:

wenn keine Zeichen am Port anliegen und keine Daten zum verarbeiten gibt, dann auf VISA Event warten, ansonsten parsen, parsen und parsen.

Gruss, Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.11.2006, 22:00
Beitrag #10

Achimedes Offline
LVF-Freak
****


Beiträge: 544
Registriert seit: Aug 2005

2011
2001
DE

72461
Deutschland
Synchronisation
Tippen

   

Wer Rechtschreibfehler findet .... darf sie behalten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Synchronisation mehrerer Geräte BenW 1 3.376 03.04.2016 11:19
Letzter Beitrag: IchSelbst
  "Ringbuffer overflow" bei Synchronisation von analog und digital Signal MNLF 14 11.565 20.01.2014 12:15
Letzter Beitrag: MNLF
  Synchronisation atul 6 5.959 28.09.2013 19:48
Letzter Beitrag: Trinitatis
  Synchronisation mit Queues Masterg4941 9 8.157 25.09.2013 12:24
Letzter Beitrag: GerdW
  Zeitliche Synchronisation mehrere Prozesse mit unterschiedlichen Laufzeiten lennox_mcdough 8 9.947 23.08.2010 12:42
Letzter Beitrag: lennox_mcdough
  Flüssige Synchronisation zweier Sinussignale Guest 8 6.354 22.08.2008 09:31
Letzter Beitrag: Guest

Gehe zu: