Forum: Mikrocontroller und Digitale Elektronik µC fernsteuern per Modem?


von Ithamar G. (antimon)


Lesenswert?

Hallo,

sicher kennt Ihr das Szenario: Irgend eine SPS- oder sonstige Steuerung
beim Kunden hat einen Fehler. Daraufhin wählt sich der Support per Modem
in die Steuerung ein und diagnostiziert bzw. den Fehler.

Geht das mit halbwegs einfachen Mitteln mit einem Mikrocontroller auch?
Eine serielle Verbindung mit einem PC aufzubauen ist ja kein Problem -
aber von einem PC über ein Modem in ein anderes Modem einwählen, an dem
ein µC hängt?
Schliesslich muss der µC das Klingelsignal erkennen, das Modem zum
Abheben bewegen und dann den Datenverkehr überwachen - machbar oder so
gut wie unmöglich? Was meint Ihr? Hat jemand damit schon mal
gearbeitet? Braucht man da ein spezielles Modem oder nicht? Vermute mal
nein...

Das wär genial, wenn man so z.B. von unterwegs daheim vergessene Geräte
ausschalten kann oder so...

von Tim O. (Gast)


Lesenswert?

Na wenn das Aufbauen einer Verbindung zwischen MCU und PC kein
Problem ist, bau doch einfach ein paar "Neuerungen" ins Protokoll
ein..

Wenn die MCU z.B. ein "RING" empfängt, soll es "ATA<cr>" senden..
Nun sollte vom Modem abgehoben werden und eine Verbindung hergestellt
werden, bei Erfolg bekommt die MCU (und der PC) ein CONNECT....
je nach Modemkonfiguration ..

Damit das Modem auch weiss, was es tun soll, kannst du ja (z.B.
regelmässig oder nur auf Anweisung) weitere AT-Befehle ans Modem
absetzen..

Gruss,
Tim

von Jojo S. (Gast)


Lesenswert?

sollte nicht so schwierig sein. Das Modem hat ein Hardware Signal
'Ring' das man verwenden kann und es sendet auch Ring als Ascii wenn
es klingelt. Dann kann man mit ATA (Answer) abheben und die Verbindung
aufbauen. Das geht alles mit einfachen Modems, auch wenn die schon ein
paar Jahre alt sind. Jetzt muss noch ein Protokoll implementiert sein
mit dem man verschiedene Dinge im µC abfragen kann.

von H-A-L-9000 (Gast)


Lesenswert?

Machbar.
Ich schätze das sogar als eine der leichteren Übungen ein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Schliesslich muss der µC das Klingelsignal erkennen,
> das Modem zum Abheben bewegen

Einerseits ist das nicht besonders kompliziert -
Modem sendet RING<CR> beim Klingeln, Rufannahme kann durch Senden von
ATA<CR> an das Modem eingeleitet werden ... und wird durch die Meldung
"CONNECT" vom Modem als positiv abgeschlossen gemeldet. Beendigung
der Verbindung meldet das Modem mit "NO CARRIER", das gibt's auch
bei nicht erfolgreichem Verbindungsaufbau.

andererseits ist das gar nicht nötig; jedes Modem kennt auch einen
"Auto-Answer"-Betrieb. Der wird mit ATS0=1 eingestellt, fertig.

> und dann den Datenverkehr überwachen

Der µC sollte sich nicht verschlucken oder explodieren, wenn von der
seriellen Schnittstelle Texte wie "RING", "CONNECT" und "NO
CARRIER" oder auch Varianten* davon übertragen werden. Davon abgesehen
ist nicht viel Aufwand zu treiben.
Soll vom µC gesteuert aufgelegt werden, so kann dies auf zwei Arten
geschehen:
- Durch Senden von "+++" an das Modem, dann etwas abwarten und dann
"ATH<CR>" an das Modem senden.

- Durch Deaktivieren der DTR-Leitung an der seriellen Schnittstelle.

All dies ist mit stinknormalen Standardmodems hinzubekommen, im Detail
mag es bei GSM-Modems (Siemens M20 etc) Unterschiede geben.

Es empfiehlt sich, ein etwas ausgefeilteres Protokoll oder dergleichen
über die serielle Schnittstelle zu fahren; der µC sollte erst dann
irgendwelche Befehle entgegennehmen, wenn der Benutzer ein Passwort
oder sich sonstwie identifiziert hat.
Auch sollten Eingaben genau überprüft werden (und niemals, niemals!
scanf() direkt auf die serielle Schnittstelle losgelassen werden).

*) näheres steht im Handbuch des Modems. Verbreitet ist es, daß das
Modem auch noch näheres über die Verbindungsgeschwindigkeit und das
verwendete Protokoll erzählt, das kann dann so aussehen: "CONNECT
14400 V.42BIS/MNP4". Diese Zusatzinformationen lassen sich aber
abschalten.

von Rahul D. (rahul)


Lesenswert?

Man kann das Modem aber auch so konfigurieren, dass es nur Zahlen für
die einzelnen Meldungen ausgibt...

von Ithamar G. (antimon)


Lesenswert?

Na das hört sich schon mal gut an :)

Das Problem mit dem Protokoll sollte nicht so groß sein, denn wenn der
µC mit dem PC kommunizieren soll, muss ich ja auch ein Protokoll
implementieren...

Aber wie läuft das mit der Verbindungsgeschwindigkeit? Beim PC stelle
ich im Terminal 9600,8,N,1 ein, okay. Aber ein Modem handelt das
höchstmögliche aus oder? Muss ich im anrufenden oder im angerufenen
Modem die Geschwindigkeit einstellen?

Und wenn das Modem beispielsweise "NO CARRIER" sendet, weil der
Stecker während ner Verbindung gezogen wurde, kommt die Meldung dann
einfach im bereits laufenden Datenstrom und muss rausgefiltert werden?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Geschwindigkeit, mit der die Modems untereinander kommunizieren, ist
nicht von weiterer Bedeutung, solange die nur höher ist als die
Geschwindigkeit, mit der der PC und vor allem Dein µC mit dem Modem
kommuniziert.
Die Modems machen eine nahezu transparente Geschwindigkeitsanpassung;
werden PC und µC zu schnell, "bremsen" die Modems durch Aktivierung
der entsprechenden Handshakeleitungen.
Möchtest Du Dich auf der µC-Seite nicht mit Handshake herumschlagen,
solltest Du eine ausreichend langsame Baudrate verwenden.
Heutige Modems können untereinander mit maximal 33600 Baud
kommunizieren (die 56000 Baud des V.90 gibt's nur mit speziellen
Gegenstellen, nie aber untereinander), daher liegst Du mit 9600 Baud
auf dem µC im sicheren Bereich. Auf der PC-Seite kannst Du auch mit
anderen Baudraten mit dem Modem kommunizieren, Du solltest nur nicht
den µC mit einer zu hohen genutzten Datenrate "überfahren".

Bei Verbindungsabbruch fügt das Modem in der Tat "NO CARRIER" in den
laufenden Datenstrom ein. Allerdings deaktiviert das Modem auch noch
eine Handshakeleitung (DCD, "data carrier detect"), wenn Du die
auswertest, sollte das die Filterung vereinfachen. Diese
Handshakeleitung wird vom Modem auch erst mit erfolgreichem
Verbindungsaufbau aktiviert; also kannst Du alles, was das Modem
mitzuteilen meint, getrost ignorieren, solange DCD inaktiv ist.

Viel Erfolg!

von Ithamar G. (antimon)


Lesenswert?

Super, das hat mir sehr viel weitergeholfen!

Jetzt muss ich nur noch ein zweites Modem suchen und dann mich um die
Implementierung kümmern :)

9600 Baud langen mir vollkommen, ich will nur ein paar Steuersignale
übertragen und den Status abfragen, das wars...

von AntonWert (Gast)


Lesenswert?

Das Thema scheint sehr interressant zu sein, gibt es denn auch eine
möglichkeit sowas "zu Hause" zu Testen, also ohne Amtsleitung? 2
Modems lassen sich ja nicht so einfach auf der Amts-Seite verbinden.

von Ithamar G. (antimon)


Lesenswert?

Also mich interessierts zumindest ;)

Ganz einfach gehts, wenn du ne Telefonanlage mit mehreren
Analoganschlüssen hast - an jeden klemmst du ein Modem und zum
Verbinden wählst du einfach die interne Nummer...

Ansonsten fehlt dir das Freizeichen vom Amt, etc. - obs da ne einfache
Möglichkeit gibt, kann ich allerdings nicht sagen...

von mthomas (Gast)


Lesenswert?

Ich nutze fuer solche Tests ein analoge Telefonanlage BJ ca. 1980 "vom
Schrott". So etwas duefte auch sehr guenstig in
Internetauktionshaeusern zu finden sein. Bei diesen alten Teilen muss
man evtl. Puls- statt Tonwahl verwenden und, wie meist auch bei
aktuellen Anlagen, "Dialtone"-Erkennung deaktivieren.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Man kann zwar die reine Datenübertragung analoger Modems mit 'nem Stück
Draht und 'ner Batterie testen, dann aber funktioniert weder das Wählen
noch die automatische Rufannahme. Die muss man dann entsprechend im
richtigen Zeitpunkt "von Hand" einleiten.

"Schaltung":

    +---------o  a
    |              Modem 1
    |         o  b
  + o         |
              |
  - o         o  a
    |              Modem 2
    +---------o  b

Die Polarität der Spannungsversorgung ist irrelevant; eine
Gleichspannung von 12V "oder so" genügt.

Verbindungsaufbau:

An Modem A "ATD" senden.

An Modem B "ATA" senden.

Vorher Wähltonerkennung der Modems mit ATX0 deaktivieren.

Das ist aber eine rein akademische Nutzung, da eben das "angerufen
werden" nicht vom Modem erkannt werden kann und es daher auch nicht
"RING" ausgibt.

Prinzipiell ist daher so ein Test mit 'ner simplen analogen
Telephonanlage wesentlich praktischer. Da Telephonanlagen andere
Wähltöne haben als "das Amt", empfiehlt sich aber auch hier die
Deaktivierung der Wähltonerkennung mit ATX0.

Viel Erfolg!

von seidl (Gast)


Lesenswert?

Hallo,
ich hab 2 acer modems und möchte damit eine Datenverbindung herstellen.
Jetzt noch mitn PC später mit mc. Das mit den Befehlen klappt auch 
wunderbar.
Ich kann aber nur von einem Modem das andere anrufen, das erkennt zwar 
das es
angerufen wird ->"Ring" wenn ich aber dann Abheb "ATA" tut sich nichts.
Das erste Modem sagt " Connect 1200/NONE" und setzt die DCD Leitung auf 
1.
Ich hab ISDN und mach das ganze mit den Internen Nummern.
Hab schon alles versucht auf Grundeinstellung zurücksetzten und die 
ganzen ATX befehle aber ich komm damit nicht weiter.
Was könnt ich denn übersehen haben dass das modem keine verbindung 
aufbauen kann?

Vielen Dank
mfG
S. Seidl

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.