Step 7 SMS mit AT-Befehlen über eine TCP-Verbindung versenden

Ripidi

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte gerne von der Siemens SPS (CPU315-2 PN/DP) aus SMS-Nachrichten über die interne Ethernet-Schnittstelle versenden.
Dafür verwende ich einen LTE Mobilfunk-Router und versende von der SPS AT-Befehle zum Router über eine TCP Verbindung.

In den Routereinstellungen habe ich das AT-SMS Protokoll über TCP mit dem Port 2000 aktiviert.
Das Aufbauen der TCP Verbindung und das Versenden der AT-Befehle mache ich mit Hilfe von den Kommunikationsbausteinen FB63,FB64,FB65,FB66 und den Open Communication Wizard von Siemens.
Projektiert wurde alles unter STEP7 V5.5+SP4.

Um eine SMS zu versenden sende ich 3 Befehle hintereinander zeitlich verzögert:

1: AT+CMGF=1$R (Textmodus aktivieren)

2: $R$LAT+CMGS="+49XXXX"$R (SMS an die angegebene Handynummer senden)

3: Nachricht$1A (Inhalt der Nachricht)

$R: Carriage Return (\r)
$L: Line Feed (\n)
$1A: Ctrl+Z (\1A)

Nach dem 1. Befehl erhalte ich das zu erwartende "OK" und nach dem 2. Befehl ein ">".
Jedoch kommt keine Bestätigung mit "+CMGS: X" am Ende des 3. Befehls, sondern wieder ein ">" und somit wird auch keine SMS versendet.

Ich habe bereits die gleichen Befehle vom Rechner aus zum Router mit einem Terminal getestet, hier funktioniert es und eine SMS wird erfolgreich verschickt.
Auch eine Analyse mit Wireshark hat mich nicht weitergebracht.

Kennt sich jemand damit aus und kann mir helfen?
 
Warum beginnt Dein 2. Befehl mit $R$L vor dem AT?

Ohne zu sehen was Du da programmiert hast kann man nur raten...
- "Zeitlich verzögert" heißt, Du wartest einfach nur eine Zeit ohne die Antworten auszuwerten?
- Wertest Du von TRCV auch das NDR aus?
- Wieviele Zeichen holst Du mit TRCV ab?
- Kann es sein, daß die Antworten unterschiedlich lang sind? Vielleicht wartet TRCV auf 3 Zeichen und vom Router kommt nur 1 Zeichen zurück? Dann solltest Du mit TRCV immer nur 1 Zeichen abholen und die Antwort in Deinem Programm zusammenbasteln.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"Zeitlich verzögert" heißt, Du wartest einfach nur eine Zeit ohne die Antworten auszuwerten?

Genau,aktuell habe ich zur Vereinfachung TRCV rausgenommen, möchte es aber später wieder einbauen wenn das Senden korrekt läuft.
Soweit ich das verstanden habe sollte es auch ohne gehen. Die Antworten des Routers werte ich mit Wireshark aus.

Ohne dem $R$L vor dem zweiten AT-Befehl würde ich kein Antwortpaket mit dem ">" vom Router erhalten, warum das nicht auch ohne dem geht weiß ich nicht.

Ich habe hier mal Screenshots vom Programm gemacht:

1.jpg
2.jpg
3.PNG
4.jpg
5.jpg


TSEND.DATA bekommt die AT-Befehle als String ab dem 3.Bit übergeben, um nur den reinen AT-Befehl ohne String-Header zu verschicken.

Es basiert auf dem Siemens Beispiel zu den Kommunikationsbausteinen FB63,FB64,FB65,FB66.
https://support.industry.siemens.com/cs/document/29737950/wie-werden-die-kommunikationsbausteine-fb63-tsend-fb64-trcv-fb65-tcon-und-fb66-tdiscon-programmiert-um-das-tcp-protokoll-f%C3%BCr-den-datenaustausch-%C3%BCber-die-integrierte-profinet-schnittstelle-einer-s7-300-s7-400-cpu-zu-nutze?dti=0&lc=de-WW
 
Ich würde sagen, das was Du als $1A sendest ist nicht das erwartete <CTRL-Z>-Zeichen. Schau Dir mal genau den Inhalt des Bytes an bzw. setze da mal B#16#1A ein.

Ich kenne die AT-Befehls-Sequenz zum SMS senden so (S:Send / R:Response/Receive):
Code:
S: [COLOR="#0000FF"]AT+CMGF=1<CR>[/COLOR]
R: [COLOR="#008000"]<CR><LF>OK<CR><LF>[/COLOR]
S: [COLOR="#0000FF"]AT+CMGS="+49XXXX"<CR>[/COLOR]
R: [COLOR="#008000"]<CR><LF>><Space>[/COLOR]
S: [COLOR="#0000FF"]Nachrichttext<CTRL-Z>[/COLOR]
R: [COLOR="#008000"]<CR><LF>+CMGS:<Space><mr><CR><LF><CR><LF>OK<CR><LF>[/COLOR]

    <mr> ist eine Message Reference Nummer (Ganzzahl)

    <CR> = B#16#0D = '$R'
    <LF> = B#16#0A = '$L'
 <Space> = B#16#20 = ' '
<CTRL-Z> = B#16#1A

Harald
 
Hallo,

in dem Paket was ich versende kann ich in Wireshark sehen das der Hex-Wert 1A drinsteht.
Auch dein Tipp mit B#16#1A habe ich versucht mit dem gleichen Ergebnis.

Wenn ich die Nachrichten die ich von der SPS versende eins zu eins kopiere (HEX-Werte) und mit einem Terminal auf dem PC versende funktioniert es.
Die Sequenz ist genau so wie von dir oben beschrieben.

Das ich TSEND mehrfach zum versenden benutze ist aber kein Problem oder?
 
Es funktioniert jetzt!

Das Problem war, dass die einzelnen Strings in denen die Befehle standen länger waren als der Befehl selber.
Somit war der Rest mit "\00" gefüllt.
Da der Router ja trotzdem mit Response geantwortet hat, dachte ich das sei nicht das Problem.
Strings auf die Länge der Befehle und Nachricht angepasst und es läuft. :smile:

Danke für die Hilfe.
 
Welcher LTE Mobilfunk-Router unterstütz das versenden von AT Befehlen

Hallo zusammen

ich bin auf der Suche nach einem Router der AT Befehle über eien TCP Port unterstützt.

Danke und Gruss
 
Zurück
Oben