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...
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
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.
> 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.
Man kann das Modem aber auch so konfigurieren, dass es nur Zahlen für die einzelnen Meldungen ausgibt...
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?
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!
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...
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.
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...
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.