Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation mit GSM-Modem
hallo leute :)
ich möchte gern unter linux über die RS232 schnittstelle AT-Kommandos an ein GSM-Modem schicken.
Ich öffne also die ttyUSB0 mit open (wie ganz normal ein file) und schreibe mit write und lese mit read.
das schreiben funktioniert einwandfrei.
aber beim lesen bekomm ich dann immernur bruchteile der kompletten antwort des modems zurück.
ich lese 16 byte, die eigtl komplett gefüllt sein müssten... bekomm aber immer nur 1-5 byte ....
bin ratlos...
gibt es was zu eachten beim kommunizieren mit modems? oder was mach ichfalsch? :confused:
grüße
hallo nochmal...
also ich hab es jetzt hinbekommen... :)
hab einfach ein sleep eingebaut um zu warten bis das langsame rs232 den buffer gefüllt hat.... würde es aber lieber eleganter lösen... kann man irgendwie herausfinden, ob daten anliegen und ob das modem fertig mit senden ist?
grüße
ChaosKrieger
06.09.2005, 17:52
moin,
würd mir deine arbeit gern mal anschaun wenn es so weit ist ;)
ich mach gerade das selbe, allerdings über ttySx
das modem sendet glaube ich die daten sollange bis du was neues abfragst,
oder ist das falsch? bei mir ist es so..
Wenn das Ganze über nen normalen seriellen Port
funktioniert (UART16550 oder sowas) vom PC, dann sollten
hier Bits gesetzt sein für "Information liegt an". (in den
Registern des UART). Man kann ein reinkommendes Byte sogar
einen Interrupt auslösen lassen (und das Byte in einen
Ringpuffer werfen oder sowas).
Problem ist natürlich, daß sich Linux u.ä. wahrscheinlich
bei direkten Hardwarezugriffen in die Hose machen. Aber
vielleicht bietet das System ja irgendwelche Statusbytes
für die Ports an, die den UART-Bytes entsprechen.
es gibt ein ioctl()-makro was die anzahl der bytes im fifo der rs232 zurückgibt.
damit kann man gut erkennen, wann etwas anliegt, und wann es komplett da ist...
also hab ich jetzt zwar so ziemlich alles hinbekommen nur stellt mich das modem jetzt ncoh vor eine richtig schwere aufgabe...
es passiert ab und an wenn ich eine sms verschicken will und während der übermittlung der sms ans modem kommt gerade eine sms an. genau dann sagt das modem ERROR und blockiert... nach ein paar sekunden (zwischen 20 und 60) reagiert es dann wieder....
und bei ca 100 sms mit übertragungsprotokoll passiert das ca alle 10 sms :( .
hat von euch schonmal jemand erfahrung mit soetwas gemacht? ob es ein AT-Kommando gibt, mit dem man dem modem sagen kann es soll keine sms empfangen (während ich sende)?? anfragen an siemens wurden nicht beantwortet :/
wo könnte ich da mal schauen?
danke euch bis hier her....
Nach ca. 20 bis 60 Sekunden kommt auf eine SMS
normalerweise eine "Antwort"-Meldung zurück, daß die SMS
zugestellt wurde (enthält auch Datum + Uhrzeit des Empfangs).
Vielleicht isses das.
Dann: Jede SMS muß dazu eine andere "Nummer" kriegen - denn
die Antwort enthält diese Nummer auch (zweistellig, 00 bis 99).
Diese kann eine zufällige Zahl sein - jedoch kann man nicht
dieselbe Nummer zweimal benutzen, bevor sie nicht "bestätigt"
wurde.
Wieso manchmal nur 10 SMS gehen - möglicherweise hat der
Anbieter eine "Sperre" drin, die das "gleichzeitige" Senden
von mehr als 10 SMS pro "Session" nicht zuläßt - damit
nicht irgendwem die Möglichkeit gegeben wird, Kosten zu
sparen oder so vielleicht.
Modems empfangen nix "anderes", wenn sie grade schon
"verbunden" sind - dann sind sie im Datenmodus und senden
und empfangen nur Bytes auf dieser einen Leitung.
ABER: Heutzutage können SMS auch ans Festnetz gesendet
werden usw. Was ich damit sagen will:
Also isses vielleicht möglich, daß auf der Telefonleitung
dieses "Anklopfen" aktiviert ist (so'n Signal, damit man
merkt, daß einen gerade jemand versucht anzurufen) - und
dieses Signal dann durch die Leitung geschmissen wird und
somit die Daten stört. (Man kann Modemleitung auch stören,
indem man nen Telefon, was an selber Leitung hängt, abnimmt
und da reinbrüllt oder sowas.) - Aber vielleicht erzähl ich
ja auch nur Mist.
Ich selbst benutze seit einiger Zeit erfolgreich ein
selbstgestricktes Programm mit nem normalen seriellen
Analog-Modem (57k) anner normalen Telefonstrippe, um damit
SMS zu verschicken. Funktioniert auch tadellos.
Weiß jetzt nicht, was mit GSM-Modem gemeint ist - imo ist
ein Handy ja ein solches...
ja eine bestätigung kommt... aber es gibt ja auch das übertragungsprotokoll, was man anfordern kann, was sozusagen als eigenständige sms den empfang der sms bestätigt...
das mit der sms-numer stimmt, aber von 00-99 ist viel platz... und bis ich 99 verschickt hab hab ich die bestätigung für die ersten paar sms schon lang erhalten.... und kann wieder von vorn durchnummerieren.
kurze erklärung "gsm-modem": ist quasi ein handy ohne tastatur nud ohne display, nur mit antenne, sim-card einschub, rs232 schnittstelle und mit etwas glück sogar nen anschluss für kopfhörer und mikrophon.
die sms laufen jedoch entgegen deiner vermutung bei einem gsm-modem über den steuerkanal und NICHT über den Datenkanal.... deswegen sind sms auch nur 160 zeichen lang, weil der steuerkanal ziemlich dünn ist :)
über den datenkanal kommen sprache und gprs-daten (wap)
mich würde mal interessieren wie genau das funktioniert mit sms über analoges modem... wählst du da einfach eine smsc über festnetz an? oder wie soll das gehen? und was bezahlt man dafür?
es soll ja auch eine möglichkeit geben sms über gprs zu versenden, jedoch habe ich dazu auch noch nix gelesen.... ich brauch dringend quellen :) (google enttäuscht da leider etwas)
grüße
Ich wähl so'n SMS-Provider an. Es gibt deren wohl mehrere.
Glaub das könnt man sogar mit nem normalen Terminalprogramm,
weil die auch Klartextmodus haben oder so. (So "ANSI für
Arme" halt.)
Muß man glaub als erstes 2x ESC senden. (Erinnert mich an
alte BBS... - funzt auch so ähnlich.)
ICH allerdings benutze den "Daten"Modus, in dem ich so SMS
halt in diesem komischen SMS-Format sende:
ASCII2 - Nachricht - ASCII3
Und "Nachricht" besteht halt aus mehreren Sektionen, die
alle (mehr oder weniger) "alphanumerische" Inhalte haben
und durch / getrennt sind. Der Text selber wird dabei
übrigens in aneinandergeklatschten Hex-Codes übertragen,
also 2 Bytes pro Zeichen, HALLO wäre also z.B. 48414C4C4F.
Kumpel hat sich zu diesem Format mal schlaugemacht und mir
da so paar Docs geschmissen. Desweiteren auch eine
vollständige Tabelle, wo die "Übersetzung" von normalem
Win-ASCII ("Codepage852" = ISO..wasweißich, glaub 8851)
in diesen speziellen GSM7-Zeichensatz. Manche Sonderzeichen
sind da halt ein klein wenig anders angeordnet. (Ja: Nix
Unicode...)
Schreib mir ne Mail, wenn Du den Kram haben willst und ich
sammel das mal zusammen und schicks als Anhang (keine Sorge,
ist nicht viel) an diese Addy.
Sorry, daß ich so lang nichts geschrieben hab.
1.) Das Board scheint mich nicht mehr zu mögen - es schickt
mir jedenfall keine Mails mehr, wenn in abonnierten Threads
was neues steht.
2.) Ich hatte Ende September aber auch wenig Zeit und danach
hab ichs wahrscheinlich irgendwie verdrängt.
3.) Ich hatte gedacht, jemand kompetenteres als ich könnte
sich vielleicht melden und hätt was besseres beizutragen als
ich.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.