Datenerfassung über 2 RS232 Schnittstellen
-
BorisDieKlinge schrieb:
wenn definitv klar ist, das Com 1 ne anfrage sendet, und com 2 auf die antwort wartet. und das konsiquent durchgezogen wird, werden events richtig ankommen?
wenn du jemand ne frage stellst bekommst ne antwort, oder bekommst du ne antwort ohne davor ne frage gestellt zu haben? du kannst ne frage stellen und es kommt keine antwort, gibts keine reaktion frägst evtl. nochmal^^ timeout..
Wenn das so klar wäre würde es ja funktionieren. Sollche Anmerkungen "wenn definitiv klar ist" sollte man nie machen, wenn man auf perifere Geräte zugreift. Deine Annahmen sind zwar kausal, aber wenn du Windows eine Frage stellst, bekommst du nicht immer eine kausale Antwort drauf. Deshalb sollte man das so machen, denn es ist nicht sicher (eben wegen der Überschneidung durch die Abarbeitung der Message-Loop), dass diese Annahme (erst COM1 dann COM2) immer gilt. Somit muss man diesen, wenn auch nicht gewollten oder vermuteten Fall auch ausgrenzen.
Als Beispiel: ich hab eine Anwendung für eine Maschinensteuerung geschrieben. Dort war ein Aktor auszuwerten, dessen einzige Zustände "Anschlag links" oder "Anschlag rechts" sind. Jetzt wird einleuchten, dass wenn das Ding links anliegt, es nicht rechts sein kann und umgekehrt. Blöd war eben nur, dass das Umschalten einige wenige Millisekunden dauerte und wenn man genau dann abgetastet hatte, war keiner der beiden Zustände erreicht. Das kam zufällig alle 1000 Schaltvorgänge vor und das Programm hängte sich auf. Timeouts gingen hier nicht, da die Abfolge der Abfragen zeitlich sehr hintereinander lagen. Somit habe ich den eigentlichen Zustand "mittig" definiert, den es nach der Aussagenlogik so nicht gab. Und damit hatte ich das Problem im Griff.
-
Es ist ja so dass ich nicht davon ausgehen kann, dass ich über COM1 eine anfrage bekomme und COM2 gleich die Antwort, denn es könnte ja passieren, dass keine Antwort zurück kommt und deshalb die anfrage nochmal gestellt werden muss!!! ich bekomme folgendes ergebnis:
anfrage x
anfrage y
antwort x
anfrage z
antwort ypassiert es öffter, dass die hintereinander anfragen folgen, wird die antwort immer weiter nach hinten versetzt. Kommen jedoch mehrere Antworten hintereinander, so geht dies in die gegengesetzte richtung!!!
Man könnte ja nun warten bis sich das wieder einpendelt, jedoch sind die Zeiten die bei anfrage x und antwort x "gemessen" werden zu verschieden und haben nichts mehr mit der realität zu tun, da sie verfällscht werden !!
-
markus.z84 schrieb:
Es ist ja so dass ich nicht davon ausgehen kann, dass ich über COM1 eine anfrage bekomme und COM2 gleich die Antwort, denn es könnte ja passieren, dass keine Antwort zurück kommt und deshalb die anfrage nochmal gestellt werden muss!!! ich bekomme folgendes ergebnis:
anfrage x
anfrage y
antwort x
anfrage z
antwort ypassiert es öffter, dass die hintereinander anfragen folgen, wird die antwort immer weiter nach hinten versetzt. Kommen jedoch mehrere Antworten hintereinander, so geht dies in die gegengesetzte richtung!!!
Man könnte ja nun warten bis sich das wieder einpendelt, jedoch sind die Zeiten die bei anfrage x und antwort x "gemessen" werden zu verschieden und haben nichts mehr mit der realität zu tun, da sie verfällscht werden !!
meine Rede. Ist genau das, was ich vermutet habe. Deine Chance ist nur, jede COM in einen Thread zu stecken und sauber die Synchronisation durchzuziehen. Eventuell müsstest du cachen oder mit timeouts arbeiten, wenn dir nach einer gewissen Zeit die Daten nichts mehr nützen.