Abgeschickt von Robert Sturzenegger am 30 Mai, 2003 um 14:07:42:
Antwort auf: Re: Rückmeldungen abfragen mit Interface von Andre Ruff am 30 Mai, 2003 um 08:11:50:
Hallo Andre
: Hast Du Dir hier auf der Seite mal die Internals
: angeschaut oder den Artikel "Warum SelecTrix"
Ja, hab' ich.
: Du fragst über dein Interface nicht die Zentrale nach eine Information ab sondern das Interface selbst da es in einem Buffer genau diese 128 byte Information bereithält.
Das habe ich zwar nirgends gelesen, aber so habe ich es mir vorgestellt.
: Deine 10 ms wird also möglicherweise die Zeit sein die dein Interface benötigt Dir die Information auszulesen.
: Spannend wird das ja erst wenn Du mehrere Informationen hintereinander abfragst. Erst dann benötigst Du die Menge (baud). Sollte es also nur zu 10 ms Verzögerung zwischen Anfrage und Antwort liegen unabhängig der Menge der angefragten Information?
Nein, ich sende einen Rückmeldebefehl und merke mir die Zeit, öffne dann einen read auf dem channel (blocking) und warte hiermit auf die Antwort. Dann merke ich mir wieder die Zeit und betrachte mir die Differenz. Nach der Antwort sende ich sofort wieder einen Rückmeldebefehl für die nächste Adresse und merke mir wieder die Zeit, un so fort. Die Zeit zwischen schreiben und lesen ist immer ca. 10m, wogegen die Zeit zwischen lesen und nächstem schreiben nur einige wenige us (Mikrosekunden) beträgt. Wenn ich nun also 40 Adressen einlesen will dauert ein Zyklus 400 ms, bis ich wieder von vorne anfangen kann.
: Ideal wäre also wenn Dir das Interface einfach immer wieder die 128 byte rübersenden würde.
: Diese 128 byte packst Du dann in ein array (3D wenn Du mehrere Busse hast)und machst lediglich eine Abfrage auf dein array.
Ja oder ein Subset davon. Ich brauche ja nicht alle 128 Byte.
: Du wirst allerdings bemerken wie schwierig es einem PC System fällt diese einfache Aufgabe zu erledigen (auch der PC ist durch und durch asyncron)
Ich sehe da eigentlich keine besondere Schwierigkeit.
: Wie hast Du diese Zeitdifferenz gemessen?
Ich benütze Linux und entwickle in C++. Die Funktion gettimeofday() liefert die Zeit in Sekunden mit Angabe von 6 Stellen nach dem Komma, wobei die wirkliche Genauigkeit sicher kleiner ist, aber ich denke immer noch in der Grössenordnung von 10-20 us (Mikrosekunden).
: Kann es am verwendeten Messverfahren liegen?
Ich habe meine Messmethoden gründlich hinterfragt und auch verschiedenes ausprobiert. Deshalb denke ich, dass es nicht an der Messmethode liegt. Aber jeder kann sich mal täuschen. Ich werde dieses Wochenende zu meinem Linux-Rechner (A) einen zweiten Linux-Rechner (B) dazunehmen, um das Interface zu simulieren. Auf B werde ich die Rückmeldebefehle empfangen und nach jedem sofort ein Antwort-Byte senden. Wenn es dann auf A wesentlich schneller ankommt, dann liegt es sicher nicht am Messverfahren. Wenn es aber auch dann 10 ms dauert, muss ich mich wohl löffeln.
Gruss
Robert