AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SMS Senden über AT-Kommandos

Ein Thema von Gehstock · begonnen am 15. Jul 2007 · letzter Beitrag vom 17. Jul 2007
Antwort Antwort
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

SMS Senden über AT-Kommandos

  Alt 15. Jul 2007, 22:24
arbeite wieder mal an meinen AT Commander projekt (Handyverwaltung über AT Kommandos) und hab Probleme beim senden von SMS

Delphi-Quellcode:
procedure TForm1.SendSMSClick(Sender: TObject);
begin
s := 'AT+CMGS=' + inttostr(Length(Edit8.Text) div 2-1); //PDU Länge senden
SendCMD2;
Memo5.Lines.Add(Result1);
s := Edit8.Text+ #$1A; // enthält PDU
SendCMD2;
Memo5.Lines.Add(Result1);
end;
Das Log vom PortMon sieht so aus
Zitat:
Mein Programm
194 0.00100404 ATcommander.exe IRP_MJ_WRITE Serial2 SUCCESS Length 12: AT+CMGS=26..
195 0.07969588 ATcommander.exe IRP_MJ_READ Serial2 TIMEOUT Length 4: ..>
196 0.00077887 ATcommander.exe IRP_MJ_WRITE Serial2 SUCCESS Length 57: 0001000B911027436739F900000ED4F29C0EA296E77410B53C A703...
197 4.07700755 ATcommander.exe IRP_MJ_READ Serial2 TIMEOUT Length 20: ..+CMGS: 218....OK..


Funktionierendes Programm
179 0.00072216 PDUspy.exe IRP_MJ_WRITE Serial2 SUCCESS Length 11: at+cmgs=26.
182 0.00000335 PDUspy.exe IRP_MJ_READ Serial2 SUCCESS Length 4: ..>
187 0.00112249 PDUspy.exe IRP_MJ_WRITE Serial2 SUCCESS Length 55: 0001000B811027436739F900000ED4F29C0EA296E77410B53C A703.
253 0.00000335 PDUspy.exe IRP_MJ_READ Serial2 SUCCESS Length 20: ..+CMGS: 215....OK..
Hab da TimeOuts aber alle anderen sachen am Gerät kann ich fehlerfrei Lesen und Schreiben


Ankommen tut aber nix


Comport

Delphi-Quellcode:
function TForm1.SetupCOMPort: Boolean;
const RxBufferSize = 8192;
  TxBufferSize = 8192;
var DCB: TDCB;
  Config: string;
  CommTimeouts: TCommTimeouts;
begin
  Result := True;
  if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
    Result := False;
  if not GetCommState(ComFile, DCB) then
    Result := False;

  Config := 'baud=' + (iComBaud) + ' parity=n data=8 stop=1';
  if not BuildCommDCB(@Config[1], DCB) then
    Result := False;
  if not SetCommState(ComFile, DCB) then
    Result := False;
  with CommTimeouts do
    begin
    PurgeCom(PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
      ReadIntervalTimeout := 20;
      ReadTotalTimeoutMultiplier := 1;
      ReadTotalTimeoutConstant := 200;
      WriteTotalTimeoutMultiplier := 0;
      WriteTotalTimeoutConstant := 0;
      {ReadIntervalTimeout := 15;
      ReadTotalTimeoutMultiplier := 0;
      ReadTotalTimeoutConstant := 1000;
      WriteTotalTimeoutMultiplier := 0;
      WriteTotalTimeoutConstant := 1000; }

       end;

  if not SetCommTimeouts(ComFile, CommTimeouts) then Result := False;
  PurgeCom(PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
end;

function TForm1.PurgeCom(mode:Dword): boolean; //function
begin
 result := PurgeComm(ComFile,mode);
end;

Portmon Log

Zitat:

Fremdanwendung


56 0.05360402 PDUspy.exe IOCTL_SERIAL_SET_BAUD_RATE Serial2 SUCCESS Rate: 115200
57 0.00276711 PDUspy.exe IOCTL_SERIAL_CLR_RTS Serial2 SUCCESS
58 0.00295568 PDUspy.exe IOCTL_SERIAL_SET_DTR Serial2 SUCCESS
59 0.00000196 PDUspy.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial2 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
60 0.00000168 PDUspy.exe IOCTL_SERIAL_SET_CHAR Serial2 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
61 0.02095518 PDUspy.exe IOCTL_SERIAL_SET_HANDFLOW Serial2 SUCCESS Shake:1 Replace:0 XonLimit:2048 XoffLimit:2048
62 0.00000447 PDUspy.exe IOCTL_SERIAL_PURGE Serial2 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR
63 0.00000475 PDUspy.exe IOCTL_SERIAL_SET_QUEUE_SIZE Serial2 SUCCESS InSize: 8192 OutSize: 8192
64 0.00000140 PDUspy.exe IOCTL_SERIAL_SET_TIMEOUTS Serial2 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
67 0.00000279 PDUspy.exe IOCTL_SERIAL_PURGE Serial2 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR




Meine

146 0.00000670 ATcommander.exe IOCTL_SERIAL_SET_QUEUE_SIZE Serial2 SUCCESS InSize: 8192 OutSize: 8192
147 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_BAUD_RATE Serial2 SUCCESS
148 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial2 SUCCESS
149 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_CHARS Serial2 SUCCESS
150 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_HANDFLOW Serial2 SUCCESS
151 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_BAUD_RATE Serial2 SUCCESS
152 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial2 SUCCESS
153 0.00000140 ATcommander.exe IOCTL_SERIAL_GET_CHARS Serial2 SUCCESS
154 0.00000112 ATcommander.exe IOCTL_SERIAL_GET_HANDFLOW Serial2 SUCCESS
155 0.05347635 ATcommander.exe IOCTL_SERIAL_SET_BAUD_RATE Serial2 SUCCESS Rate: 115200
156 0.00339345 ATcommander.exe IOCTL_SERIAL_SET_RTS Serial2 SUCCESS
157 0.00219693 ATcommander.exe IOCTL_SERIAL_SET_DTR Serial2 SUCCESS
158 0.00000168 ATcommander.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial2 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
159 0.00000251 ATcommander.exe IOCTL_SERIAL_SET_CHAR Serial2 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
160 0.00695591 ATcommander.exe IOCTL_SERIAL_SET_HANDFLOW Serial2 SUCCESS Shake:1 Replace:40 XonLimit:4096 XoffLimit:1024
161 0.00000307 ATcommander.exe IOCTL_SERIAL_PURGE Serial2 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR
162 0.00000140 ATcommander.exe IOCTL_SERIAL_SET_TIMEOUTS Serial2 SUCCESS RI:20 RM:1 RC:200 WM:0 WC:0
163 0.00000112 ATcommander.exe IOCTL_SERIAL_PURGE Serial2 SUCCESS Purge: TXABORT RXABORT TXCLEAR RXCLEAR
Marcel
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
196 Beiträge
 
Delphi XE Professional
 
#2

Re: SMS Senden über AT-Kommandos

  Alt 15. Jul 2007, 23:43
Zitat:
Mein Programm
0 0.00078641 ATcommander.exe IRP_MJ_WRITE Serial2 SUCCESS Length 12: AT+CMGS=26..
1 0.99982903 ATcommander.exe IRP_MJ_READ Serial2 TIMEOUT Length 4: ..>
2 0.00053443 ATcommander.exe IRP_MJ_WRITE Serial2 SUCCESS Length 57: 0001000B911027436739F900000ED4F29C0EA296E77410B53C A703...
3 1.00001425 ATcommander.exe IRP_MJ_READ Serial2 TIMEOUT Length 0:


Funktionierendes Programm
179 0.00072216 PDUspy.exe IRP_MJ_WRITE Serial2 SUCCESS Length 11: at+cmgs=26.
182 0.00000335 PDUspy.exe IRP_MJ_READ Serial2 SUCCESS Length 4: ..>
187 0.00112249 PDUspy.exe IRP_MJ_WRITE Serial2 SUCCESS Length 55: 0001000B811027436739F900000ED4F29C0EA296E77410B53C A703.
253 0.00000335 PDUspy.exe IRP_MJ_READ Serial2 SUCCESS Length 20: ..+CMGS: 215....OK..
An der Stelle fällt mir auf, dass hinter Deinem AT-Befehl zwei Pünktchen sind, beim funktionierenden Programm aber nur ein Punkt. Genauso in der Zeile 2 versus Zeile 187. Sendest Du vielleicht CR+LF und das Mobiltelefon mag nur CR oder LF?
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#3

Re: SMS Senden über AT-Kommandos

  Alt 15. Jul 2007, 23:53
Cr LF? damit kann ich grad nix anfangen
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: SMS Senden über AT-Kommandos

  Alt 16. Jul 2007, 00:42
CR: Carriage Return -> Wagenrücklauf.
LF: Line Feed -> Zeilenvorschub.

Diese Ausdrücke kommen noch der Schreibmaschinentechnik. Um eine neue Zeile anzufangen, war es nötig den Wagen mit dem Papier an den Zeilenanfang zurückzufahren (Carriage return) und die Walze eine Zeile weiterzudrehen (Line feed). In der Computertechnik wurden daraus entsprechende Steuerzeichen. Allerdings Hand habt jedes Betriebssystem eine neue Zeile anders. Unter Windows ist ein CR und ein LF nötig. Unter Linux reicht ein LF und ein MAC OS nimmt ein CR, glaube ich. Deswegen ist es manchmal nötig Textdateien zu konvertieren, um die Zeilenumbrüche wieder herzustellen.
Diese Steuerzeichen werden auch bei manchen Protokollen zur Steuerumng von Hardware benutzt, um eine Befehlszeile abzuschliessen.

Du müsstest jetzt mal gucken, wie bei deinem Protokoll eine Befehlszeile angeschlossen werden muss.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#5

Re: SMS Senden über AT-Kommandos

  Alt 16. Jul 2007, 04:42
Achso ihr meint #13 #10 ist dabei aber auch ohne gehts net hatte ich schon versucht

Delphi-Quellcode:
Procedure TForm1.SENDcmd2;
var BytesWritten: DWORD;
  d: array[1..200] of Char;
  BytesRead: DWORD;
  i: Integer;
begin
  s := s + #13#10;
  WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
// Result1 := '';
  if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
    begin
      StatusBar.Panels[0].text:='Nicht Verbunden';
        exit;
    end;
  s := '';
  for i := 1 to BytesRead do
    s := s+d[I];
  Result1 := s;
end;
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: SMS Senden über AT-Kommandos

  Alt 16. Jul 2007, 04:55
Nicht ohne. Entwerder CR und LF oder eben nur eins von beiden. Aber das sollte auch in den Protokoll-Spezifikationen stehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#7

Re: SMS Senden über AT-Kommandos

  Alt 16. Jul 2007, 05:42
Also bei denen Modems die Ich bisver vertüddelt hab war es immer #13#10 (also beides)

Schau mal unter google: send sms with at commands ---> http://www.developershome.com/sms/ho...dSMSFromPC.asp

Da gibts ein relativ gutes Tutorial welches du unter HyperTerminal durchspielen kannst und es dann mit Delphi probieren kannst.

Und somit komm ich zu meiner 2. Frage:
Hast du deine Kommandos schon mal mit dem Hyperterminal eingetippt währent Portmon lief um nen direkten Vergleich zu haben?

Mfg
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#8

Re: SMS Senden über AT-Kommandos

  Alt 16. Jul 2007, 07:26
nur eins verwenden bringt auch nix

mit dem Hyper Terminal komm ich gar nicht zurecht ich kann nicht einfach eintippen muss es reinkopieren dann dauert es ne halbe stunde bis ich da error stehen hab porteinstellungen nehme ich die selben
Marcel
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#9

Re: SMS Senden über AT-Kommandos

  Alt 16. Jul 2007, 12:19
Probier mal den Code von mir und dann lad dir Docklight runter. Das ist ein 1A Spitzenklasse Terminalprogramm.

Mfg
Tobi
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
17. Jul 2007, 09:36
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Es geht primär um Delphi.
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz