Modem vom PC aus steuern

#295614
Lesenswert?

Hallo miteinander!

Es ist seltsam, welche eigentlich trivialen Probleme doch gar nicht so
einfach zu lösen sind...

Ich möchte von Java aus ein Modem ansteuern, um eine serielle
Verbindung mit einem entfernten Mikrocontroller (mit eigenem Modem)
aufbauen zu können.

Eigentlich könnte ich dem Modem ja einen AT-Befehl schicken, warten bis
die Antwort gekommen ist und die dann bearbeiten.
Beispiel: Ich sende ein "AT" und warte auf ein "OK" - damit weiss
ich dass ein Modem angeschlossen und betriebsbereit ist.

Allerdings - wenn ich das so wie eben beschrieben mache, hängt meine
Anwendung ja derweil, da die serielle Schnittstelle ja nicht besonders
schnell ist.

Also kann ich es ja so machen, dass ich einen Befehl absetze, und wenn
ein Event hereinkommt, dass eine Antwort vorhanden ist, bearbeite ich
die weiter.
Allerdings hat mein Programm ja in der Zwischenzeit (seit dem Senden
des Befehls) irgendwas anderes gemacht und weiss gar nicht mehr, wo die
Antwort eigentlich zuzuordnen ist.

Wie kann ich das am besten synchronisieren?
Ich könnte natürlich beispielsweise einen Zähler laufenlassen:
Habe ich z.B. 5 Befehle, läuft ein Zähler von 1-10 (je eine Nummer für
Befehl und Antwort), aber sobald ein Fehler im Befehlsablauf auftritt,
kommt er aus dem Konzept. Bzw. Verzweigungen sind damit auch schwer zu
realiseren...

Ich hoffe ich konnte einigermaßen verständlich machen, was mein Problem
ist. Gibt es da eine elegante Lösung des Problems?
#295616
Lesenswert?

Sorry, genau das hatte ich vergessen zu sagen ;)

Ich dachte ursprünglich auch an Threads, aber davon wurde mir
abgeraten, weil das sehr schwer zu debuggen sei, und da ich mit Threads
(ausser in anderen Programmiersprachen) noch nie gearbeitet habe, wollte
ich lieber die Finger davon lassen...

Aber mit den Events sollte sich das doch auch irgendwie lösen lassen
oder?
#295618
Lesenswert?

Also mir ist das Einfachste auch recht, da ich da (noch) nicht so viel
Ahnung habe, muss ich mich auf das verlassen, was ich gesagt bekomme...
gut vielleicht ist in meinem Fall das Debuggen der Threads einfacher,
weil das noch nicht so komplex wird...

Also ich erzeuge einen Thread, der sich dann um das Senden und
Empfangen auf der Seriellen Schnittstelle kümmert. Der kann dann
ungestört im Hintergrund laufen und beeinträchtigt den Haupt-Thread
nicht oder?

Und der Thread macht dann ja im Prinzip nichts anderes als einen Befehl
senden, warten bis die Antwort kommt, wieder was senden, warten...

Aber was passiert wenn etwas aus der Reihe tanzt? Also beispielsweise
wenn ein "NO Carrier" unerwartet empfangen wird, obwohl ich gar nicht
auf eine Antwort warte? Soll ich dann ein Event generieren lassen und
das bearbeiten oder einfach den Thread pollen lassen ob was
eingetroffen ist?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren