PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : unterschiedliche Print-Daten in einer Sub ausgeben



mat-sche
13.09.2011, 09:33
Hallo Kollegen,

ich bin gerade dabei mir eine Motorradalarmanlage über GPS & GSM zu bauen. Dabei stehe ich gerade vor dem Problem wie ich in einer Sub unterschiedliche Texte per SMS sende.
Das heißt, dass bei unterschiedlichen Aktionen eine SMS-sende-Sub angesprungen werden soll und in dieser soll dann per rs232 Festtexte oder variable Texte (Längen- und Breitengrade...) übertragen werden soll. Nun kann ich für jede mögliche Sendung eine SUB erstellen oder eine generelle SUB basteln und dann die entsprechenden Daten an diese Übergeben. Aber wie kann ich dies machen? Einige Bsp.:

Festwert: Print #2 , "Alarm Standortwechsel"
Variabler Wert: Print #2 , "Latitude= " ; Nmea_latitude_grad ; " " ; Nmea_n_s ; " " ; Nmea_latitude_min_sec

Hätte jemand eine Idee dazu? Vielleicht eine SUB mit parameterübergabe mit byref?

Vielen DAnk für Eure Hilfe!

Gruß MAT

PicNick
13.09.2011, 10:29
Für Programmstrukturen gibt's kaum allgemein und immer gültige regeln.
Mal einfach vor mich hingeplappert:
Jedes SMS braucht 3 Steps, die man als Sub ausführen kann:
1) SMS-Init /Header etc.
Das sind hauptsächlich feste werte, wie TelNr etc.
2) SMS-Nutzdaten
Das ist die eigentliche Nachricht, bestehend aus Festwerten und Variablen.
3) SMS-Close & Abschicken

1) u. 3) können vermutl. mit GOSUB ausgeführt werden, das sie kaum durch Argumente variierbar sind (denk' ich)

Am unterschiedlichsten wird die Sache wohl bei 2) sein
Glaube aber, dass es ein durchaus überschaubares Repertoire an "message-Typen" gibt, die weitgehend, auch ohne viel parameter, wissen, was sie brauchen. Die könnte man als SUB ausführen
z.B "SEND_STANDORTWECHSEL:"
könnte mir vorstellen, dass bestenfalls die latitude-werte selbst als Parameter benötigt werden, die Texte wüsste die Funktion wohl selbst. Und wenn diese PositionsWerte eigentlich im Programm als "globale" werte geDIMt sind, wären auch die nicht wirklich notwendig.


Zusammenfassend:
Im Hauptprogramm könnten immer 3 gogubs stehen:
GOSUB SMS_HEADER
GOSUB SEND_STANDORTWECHSEL
GOSUB SMS_SEND
oder z.B.
GOSUB SMS_HEADER
GOSUB SEND_UHRZEIT
GOSUB SMS_SEND

Mal so dahingeschwätzt

mat-sche
13.09.2011, 12:53
Hallo PicNick,

hmmmm.... interessant was Du schreibst. Bin mir noch sicher wie ich weiter machen werde.
Werde mir das mal durch den Kopf gehen lassen...

Danke für Deine Antwort
MAT

Richard
13.09.2011, 13:57
Für Programmstrukturen gibt's kaum allgemein und immer gültige regeln.
Mal einfach vor mich hingeplappert:
Jedes SMS braucht 3 Steps, die man als Sub ausführen kann:
1) SMS-Init /Header etc.
Das sind hauptsächlich feste werte, wie TelNr etc.
2) SMS-Nutzdaten
Das ist die eigentliche Nachricht, bestehend aus Festwerten und Variablen.
3) SMS-Close & Abschicken

1) u. 3) können vermutl. mit GOSUB ausgeführt werden, das sie kaum durch Argumente variierbar sind (denk' ich)

Am unterschiedlichsten wird die Sache wohl bei 2) sein
Glaube aber, dass es ein durchaus überschaubares Repertoire an "message-Typen" gibt, die weitgehend, auch ohne viel parameter, wissen, was sie brauchen. Die könnte man als SUB ausführen
z.B "SEND_STANDORTWECHSEL:"
könnte mir vorstellen, dass bestenfalls die latitude-werte selbst als Parameter benötigt werden, die Texte wüsste die Funktion wohl selbst. Und wenn diese PositionsWerte eigentlich im Programm als "globale" werte geDIMt sind, wären auch die nicht wirklich notwendig.



Hmm, 1 und 3 werden doch bei jeder Nachricht benötigt? Einzig 2 hat unterschiedlichen Inhalt. Also würde ich die Nema Auswertung in der Hauptschleife machen und bei erkannten Standortwechsel ein call Subraoutine_Senden machen. Alle Konstanten und auch wechselnden Variablen schon im Header als Global deklarieren.
1 und 3 dann fest in der Sub einbinden da sie bei jeder Sendung gebraucht werden. So bleibt für die Hauptschleife halt "nur" die Entscheidung Standort_ALT = Standort_NEU ? mit einer gewissen zugelassener Differenz. Fragt sich wie oft gesendet werden soll wenn das geklaute Objekt sich in Bewegung befindet oder nur einmal beim Start und dann wieder nach xyz Zeit mit Stillstand = neue ( End ) Position...

Gruß Richard

PicNick
13.09.2011, 15:42
Wie von mir vorausgeschickt, fix ist nix.
Bei jedem Senden werden 1) u. 3) einmal aufgerufen, so oder so. Natürlich kann man es auch so machen, wie du sagst.
Meine motovation geht dahin, dass 2) eigentlich weniger SMS-spezifisch ist, sondern eigentlich nix als eine Stríng-Konstruktion, die man genauso auch für ein LCD-oder terminal Display verwenden kann (zwecks Testen z.B). Da käme mir eine fixe Bindung an SMS-Spezifika in die Quere.
Aber ---> siehe oben

mat-sche
13.09.2011, 16:15
Hi,

im Moment lasse ich eine SMS so senden:



Sub Send_sms

Print #2 , "at+cmgs=+49150000000" : At_ok = 4
Call Gsm_ok(at_ok)
Print #2 , "Alarm Standortwechsel"
Print #2 , "Latitude= " ; Nmea_latitude_grad ; " " ; Nmea_n_s ; " " ; Nmea_latitude_min_sec
Print #2 , "Longitude= " ; Nmea_longitude_grad ; " " ; Nmea_e_w ; " " ; Nmea_longitude_min_sec
Print #2 , "Speed= " ; Nmea_speed
Print #2 , Chr(26) : At_ok = 19
Call Gsm_ok(at_ok)
Stop Timer0
Disable Timer0
Byte_in_count = 0
Timer_count = 0
End Sub



ich habe mir überlegt, dass ich eine Weitere Sub schreibe, in der dann Festdaten übertragen werden. Die Festdaten werden dann von mir dann festgelegt und mit einer SUB übergeben.
Die Auswertung und das senden einer SMS beim Standortwechsel funktioniert schon. Ich wollte mir nur eine allgemeine SUB basteln in die ich dann die zu sendenden Daten übergeben kann.
Aber ich denke mal wie ich es jetzt so mache ist es am einfachsten.

Grüße Mat