27.11.2006, 23:44
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
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