djmsc schrieb:
bei mir funktioniert Charpos
SIM800L Handling
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.
Hinweis kann nach Kenntnisnahme deaktiviert werden!
-
-
Pac-Man schrieb:
Mein Problem ist jetzt ein CRLF am Stringanfang. Ich kriege das einfach nicht weg. Was kann ich da machen?
Soweit funktioniert es. Kann man das so machen? Sollte ich kontrollieren was ich vorne abschneide? Immerhin kann man sich ja nicht darauf verlassen dass das Modul immer CRLF am Anfang mit sendet. -
Pac-Man schrieb:
Sollte ich kontrollieren was ich vorne abschneide?
Also wird man überprüfen müssen ob da jetzt was ist was man braucht und den String in Ruhe lassen oder da ist eben ein unerwünschtes Steuerzeichen, dann muss man den String eben um dieses kürzen müssen.
Hast du beim Auswerten (und vor allem beim Empfang) auch berücksichtigt, dass auch im eigentlichen SMS-Text Steuerzeichen enthalten sein können und zwar entweder ein CR oder ein LF (eines der beiden, ich erinnere mich jetzt nicht genau) für im SMS-Text befindliche Zeilenumbrüche. Oder kannst du sicher Ausschließen derartigen Text zu empfangen? -
Pac-Man schrieb:
Kann man das so machen?
(Echo ist aus ? )
PS Weshalb stören die? Solange mit instr/charpos gearbeitet wird ist es nur (kaum störender?) Zeitverlust -
Zitronenfalter schrieb:
dass auch im eigentlichen SMS-Text Steuerzeichen enthalten sein können und zwar entweder ein CR oder ein LF
Pluto25 schrieb:
(Echo ist aus ? )
Pluto25 schrieb:
Ist der PC noch angeschlossen? Ein Mitschnitt (hex) wäre hilfreich.
41 54 45 30 0d 0d 0a 4f 4b 0d 0a 0d 0a 4f 4b 0d ATE0...OK....OK.
0a 0d 0a 2b 43 50 49 4e 3a 20 52 45 41 44 59 0d ...+CPIN: READY.
0a .
0d 0a 43 61 6c 6c 20 52 65 61 64 79 0d 0a ..Call Ready..
0d 0a 53 4d 53 20 52 65 61 64 79 0d 0a 0d 0a 4f ..SMS Ready....O
4b 0d 0a 0d 0a 4f 4b 0d 0a K....OK..
ist die Antwort auf
Quellcode
- Sub Sim800_init
- Led_5 = 0 'Fehler LED aus
- Flag_fehler = 0 'Fehlerflag löschen
- Sim_reset = 0 : Waitms 200 : Sim_reset = 1 : Wait 5 '10 'SIM800l mit portpin resetten
- 'Print "AT" ; Chr(13); 'modul erreichbar?
- 'Call Auf_string_warten( "OK" , 1 , "Keine Antwort auf AT")
- Print "ATE0" ; Chr(13); 'echo abschalten
- If Flag_fehler = 0 Then Call Auf_string_warten( "OK" , 1 , "Keine Antwort auf ATE0")
- If Flag_fehler = 0 Then Print "AT+CPIN=1111" ; Chr(13 ) ; 'sim-pin eingeben
- If Flag_fehler = 0 Then Call Auf_string_warten( "OK" , 6 , "1" )
- If Flag_fehler = 0 Then Call Auf_string_warten( "+CPIN: READY" , 6 , "2" )
- If Flag_fehler = 0 Then Call Auf_string_warten( "Call Ready" , 6 , "3" )
- If Flag_fehler = 0 Then Call Auf_string_warten( "SMS Ready" , 6 , "Keine Antwort auf PIN Eingabe" )
- If Flag_fehler = 0 Then Print "AT+CMGF=1" ; Chr(13); 'modul für Text SMS konfigurieren
- If Flag_fehler = 0 Then Call Auf_string_warten( "OK" , 1 , "Keine Antwort auf SMS Konfiguration" )
- If Flag_fehler = 0 Then Print "AT+CSMP=17,167,0, 0" ; Chr(13) ; 'SMS Parameter konfigurieren
- If Flag_fehler = 0 Then Call Auf_string_warten( "OK" , 1 , "Keine Antwort auf SMS Parameter")
- 'Print "AT+CMGL=" ; Chr(34) ; "ALL" ; Chr(34) ; Chr(13)
- End Sub
Onrxd nicht, das Modul macht das. So wie ich sehe sendet es vor und nach jeder Antwort CRLF. Ich suche nicht mehr nach LF sondern jetzt nach CR.
Pluto25 schrieb:
PS Weshalb stören die? Solange mit instr/charpos gearbeitet wird ist es nur (kaum störender?) Zeitverlust
Ich stelle es mir so einfacher vor...
-
Pac-Man schrieb:
nur zur Konfiguration
Oder unter 13 wie das auskommentierte If Temp > 13. Gab es ein Problem damit?
Immer noch unklar wie ein Cr Lf in den Empfangsstring kommt. Es war kein Lf Lf?
Auch noch unklar weshalb die 10 als Empfang-fertig Indikator nicht geht. Sendet das Modul nicht immer CrLf am ende (ausser bei >)? Bei 13 gibts (immer?) noch ein Lf das Entsorgt werden muß.
Dann gibts noch die Möglichkeit zu kurze Nachrichten einfach "platt zu machen"
Quellcode
Pac-Man schrieb:
Ich stelle es mir so einfacher vor...
-
Ist das >Modul ein ESP32-Modul?
Wenn ja, habe ich damit auch meine Erfahrungen gemacht.
CR oder RCLF wird immer nach der Antwort gesendet, nicht davor.
Also etwa
OK[CRLF]
Das Teil sendet außerdem man nur ein CR und bei anderen Antworten ein CRLF.
Ich hatte auch dolche Konstellationen, dass ein CRCRLF kam.
Ein Weg dem Dilemma Herr zu werden ist, eine eigene Leseroutine zu schreiben, die so lange Byte für Byte aus dem Empfangsbuffer liest, bis ein CR oder ein LF gefunden wird.
Bei jedem Aufrüf werden der Routine werden anfangs führende CR oder LF einfach ignoriert, bis ein vernünftiges Zeichen >32 kommt. Dann Byte für Byte lesen, bis CR oder LF.
Als Buffer würde ich den SerialIn Buffer nehmen und den ausreichend groß halten.
Also gar nicht mit Input aus dem Buffer in einen eigen String lesen und dort mit Charpos suchen,
sondern direkt aus dem SerialIn-Buffer Byte für Byte lesen und den Empfangsstring zusammen setzen.
Dafür brauch man auch keine eigene ISR schreiben. Die Bascom RxD ist da sehr effektiv.
Abfrage einfach ber IsCharWaiting() und wenn ja, dann die Leseroutine starten. -
Mitch64 schrieb:
Ist das >Modul ein ESP32-Modul?
-
Den Hex-Mitschnitten nach verhält es sich fast so.
Die beschriebene Rangehensweise #67 würde trotzdem funktionieren. -
Mitch64 schrieb:
Den Hex-Mitschnitten nach verhält es sich fast so.
Dummheit:
die Sache mit den CRLF hab ich mir selbst eingebrockt. Um zu sehen was der MC empfängt hab ich mir alles mit
Print#2 , empfangene_daten
ausgeben lassen. Richtig bemerkt, Ich hänge damit ein CRLF selbst an, vergleiche es mit dem was der PC empfängt (bei dem sie ja nicht ankommen) und versuche dieses CRLF wieder von meinem Programm aus zu löschen. War ja der Meinung dass ich im Programm was vermurkse.
Unwissenheit:
Hängt direkt mit dem Print #2 zusammen. Manche Strings vom Modul sehen so aus.
+CMGR: "REC READ","+491727xxxxxxx","","20/10/29,12:36:41+04"
Hallo
OK
Soweit so gut, nur hab ich mich gewundert dass das "Hallo" nie ankam. Hmmmm, warum wohl? Irgendwann fiel der Groschen und ich hab mir nur die ersten 3 Buschstaben ausgeben lassen mit
Print#2 , Left(empfangene_daten , 3)
und siehe da, Alle antworten kommen an.
Noch mal sorry und vielen Dank für Eure Geduld und Hilfe
x1000 -
Pac-Man schrieb:
Alle antworten kommen an.
Die Schaltung mit den Dioden (#1) ist nicht mehr aktuell?
PS Mir fehlt das "Hallo"
PPS Bei mir fehlten Abarbeitungen (anderes Projekt) weil ich aufs LCD ausgab -
Pac-Man schrieb:
Ich hänge damit ein CRLF selbst an,
Michael schrieb:
Auch das Print #2 Incoming_data sendet an den PC mindestens ein CRLF, was ja so im Datenstrom nicht vorkommt
Und im Beitrag #19
Und nach dem dritten mal ist es meiner Meinung nach nicht mehr nötig, weiter Tips zu geben, wenn sie nicht ankommen.
Wenigstens hast du jetzt nach 70 Posts dieses Teilproblem erkannt. -
Michael schrieb:
Und nach dem dritten mal
Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem. -
Michael schrieb:
wenn sie nicht ankommen.
Pluto25 schrieb:
Die kommen Alle hintereinander?
Die Print #2 brauche ich eigentlich nicht zum Betrieb. Hab die nur eingebaut damit ich sehe was der MC empfängt und als Ausgabe für Left() und Charpos().
Pluto25 schrieb:
Die Schaltung mit den Dioden (#1) ist nicht mehr aktuell?
Pluto25 schrieb:
PS Mir fehlt das "Hallo"
Gruß -
Pac-Man schrieb:
Ja, soll doch auch so sein!?
...
hängt immer noch dran. Warum?
...
war der Inhalt der SMS
Weil der PC dort was anderes empfängt als aus #2.
Für den Inhalt und auch wie genau der ankommt reichen meine Hellseherfähigkeiten (quasi 0) leider nicht.
Das mal was überlesen wird ist leider normal, aber
Pac-Man schrieb:
hab ich den Rest nicht mehr beachtet.
-
Pluto25 schrieb:
Weil der PC dort was anderes empfängt als aus #2.
+CMGR: "REC UNREAD","+49172xxxxxx","","20/10/30,09:56:30+04"
Test
OK
der MC sendet zum PC:
+CMGR: "REC UNREAD","+49172xxxxxxx","","20/10/30,09:56:30+04"TestOK
Pluto25 schrieb:
"Da steht man in der Küche..."
-
Pac-Man schrieb:
Jetzt passt es
Das brachte mich zum schmunzeln:
Sub Fehler_behandeln(fehler)
Print#2 , "Fehler: " ; Fehler
End Sub
Gibt es schon einen Plan was es tun soll wenn der PC nicht mehr da ist?
OK Led 5 blinzelt, aber da steht vermutlich auch nicht immer jemand neben und wartet auf ein Problem -
Pluto25 schrieb:
Gibt es schon einen Plan was es tun soll wenn der PC nicht mehr da ist?
Sub Fehler_behandeln(fehler)
mit einer Select case weiter machen
case1 'Modul resetten
Case2 'Modul initialisieren
case3 'SMS an andere nummer schicken
...
allerdings mache ich immer noch an meiner Empfangsroutine rum. Momentan warte ich immer auf ein OK. Das kommt aber nicht in allen Fällen. Ich fange so oft von vorne an bis ich es kapiert hab. -
Pac-Man schrieb:
kommt aber nicht in allen Fällen.
Der Pc kann beide Kanäle gleichzeitig anzeigen? Wenn die Terminalprogramme nun mitloggen und Zeitstempel einfügen sollte es gut zu erkennen sein wo(ob) was fehlt.
Die drei Zeichen Print #2 brauchen solange wie drei Zeichen vom Modul. Kommt dann da sowas wie OK13101310 ist das ok weg. Mit höhere SWBaudrate sollte es besser werden. (Bascom warnt nicht falls sie zu hoch ist: 115k geht noch, 256KBaud sollte ausprobiert werden.) -
Pluto25 schrieb:
nicht vom Modul oder nicht im MC zur Bearbeitung an?
+CMTI: "SM",1
Und hier kommt das OK.
+CMGR: "REC UNREAD","+49172xxxxxxx","","20/11/04,07:27:14+04"
Testnachricht
OK
Die erste Nachricht besteht aus einem String, die zweite aus mehreren mit CRLF. Wie kann ich diese aus dem String entfernen? Mit Replacechars Dummy , chr(13) , "-" funktioniert es nicht. Momentan addiere ich die Strings und warte auf das OK was natürlich dazu führt dass ich die erste Nachricht nicht erkenne.
Quellcode
- Do
- If Flag_gefunden = 1 Then
- Flag_gefunden = 0
- Dummy = Dummy + Empfangene_daten
- 'Print #2 , ">" ; Left(empfangene_daten , 2)
- 'Print #2 , Empfangene_daten
- If Left(empfangene_daten , 2) = "OK" Then
- 'Replacechars Dummy , "c" , "-"
- Print#2 , Dummy
- Dummy = ""
- 'Nachricht mit OK abgeschlossen
- End If
- End If
- Loop
Pluto25 schrieb:
Mit höhere SWBaudrate sollte es besser werden.
Pluto25 schrieb:
Die drei Zeichen Print #2 brauchen solange wie drei Zeichen vom Modul.
Quellcode
Ich weiß nicht mal ob alle meine Überlegungen so stimmen.
Gruß, Martin
-
Ähnliche Themen