Hallo allerseits,
als Anfänger arbeite ich bisher ich mit der Polling-Lesefunktion, habe damit aber regelmäßig Probleme mit Rahmensynchronisationsfehlern (ca. alle 20 s) und verlorenen oder abgeschnittenen Telegrammen (ca. jedes Zweite).
Das Programm erhält in Zeitabständen zwischen 20 und 5000 ms (meistens nahe 20 ms) Datenpakete mit einer Länge von 32 bis 35 Bytes mit 19200 (Später 57600) Baud.
Kommen meine Probleme vom Polling oder mache ich etwas anderes falsch?
Viele Grüße und danke im Voraus,
Bernhard
Also die Schnittstelle ist eigentlich nicht voll ausgelastet:
1/0.02sek = 50 Hz
50 Hz*35Bytes=1750Bytes/sek
1750Bytes/sek ist << als 19200 Baud
Das heisst daran kann es nicht liegen.
Frameerror und fehlende Bytes kommen eigenlich entweder wegen der Auslastung oder wegen falschen Einstellungen.
Überprüfe die Einstellungen vom Sender und Empfänger, die sollen genau identisch sein.
Beim Initialisieren von VISA gibt es oben einen Flag "Abschlusszeichen". Lese im Help genau nach wozu es da ist. Wahrscheinlich musst du ihn auf False setzen. Ausserdem hast du wahrscheinlich in deiner Polling-While-Schleife eine Wartezeit. Die ist überflüssig, wenn du beim Init von VISA den Timeout eingegeben hast.
Gruss, Eugen
Hallo Eugen,
vielen Dank für deine schnelle Antwort.
Die Einstellungen von Sender und Empfänger stimmen überein, das Abschlusszeichen war auch deaktiviert.
Deinen Tipp mit dem Entfernen der Wartezeit habe ich befolgt, außerdem habe ich meinen Sender versuchsweise so eingestellt, dass er mindestens 1 s nach dem Senden eines Telgeramms wartet.
Leider zeigt "Empfangenes Telegramm" nichts mehr an und es wird auch nichts mehr verarbeitet.
Wenn ich hinter dem Lesen einen Breakpoint setze, dann sehe ich, dass Daten gelesen aber nicht verarbeitet werden.
Wo steckt jetzt mein dummer Anfängerfehler?
Viele Grüße,
Bernhard
Hi,
was siehst du da mit nem Breakpoint genau? Woran siehst du, dass nichts verarbeitet wird? Hast du mal das Fehlercluster angeschaut?
Gruss
Achim
Habe ich es richtig gesehen, dass die Initialisierung sich mit in der While-Schleife befindet?
Wenn ja, die Initialisierung braucht auch Zeit, also lieber aus der While-Schleife rausholen.
Gruss
EDIT: die Deinitialisierung allerdings auch.
Genau, eugen hat recht! Nur 1xInit!