Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Wie programmiert man Siemens M20 Terminal über C-Control?? Kategorie: Programmierung Basic (von Alex - 12.05.2005 14:37)
 Als Antwort auf Re: Wie programmiert man Siemens M20 Terminal über C-Control?? von Martin T. - 12.05.2005 13:47
Alex nutzt:  CC1-Unit V1.1

> Hallo Alex,
>
> es empfiehlt sich erst mal mit ganz einfachen Routinen zu beginnen, und dann erst zu komplexeren Angelegenheiten überzugehen. Um zu testen, ob das Problem wirklich bei der Kommunikation zwischen C-Control und Modem liegt, hier mein Programm-Vorschlag für die C-Control:
>
>
> print "ATD1755203102"
> end
>
>
> Daraufhin müsste das Modem die betreffende Nummer anwählen. Falls nicht, liegt das Problem effektiv bei nicht korrekt gesetzten Übertragungsparametern oder bei der Kabelverbindung.
>
> Den PIN-Code kannst du schon vorher über Hyperterminal an das Modem übergeben, ebenso die baudrate auf 9600 setzen (warum auch auf 2400, wenn die C-Control auf 9600 läuft?).
>
> die Routine zum Entleeren des Pufferspeichers sollte so aussehen:
>
>
> define response byte
>
> #rxdleeren              
> IF RXD THEN GET response
> IF NOT RXD THEN RETURN
> GOTO rxdleeren
>
>
> Viel Spaß,
> Martin
>
>
>
> ,
> >
> > >
> > > >
> > > > > > Ich benutze meine SIM-Karte für das M20 Terminal von Siemens. Wenn ich das M20 über Hyperterminal ansteuere --> AT-Befehle, dann funktioniert das prima. Aber sobald ich das über
> > > > > > die C-Control versuche, reagiert das M20 überhaupt nicht.
> > > > >
> > > > > Dann stimmt die Baudrate und / oder Handshake und / oder Verkabelung nicht.
> > > > >
> > > > > > Ist dieser AT-Befehl für Eingabe der Baudrate des M20 unter CCBasic richtig eingegeben?:
> > > > >
> > > > > >   PRINT "AT+IPR=2400";
> > > > >
> > > > > Mal angenommen, er wäre richtig: Wie soll die M20 ihn verstehen, wenn er laut Deines Kommentares
> > > > >
> > > > > > Weil die Baudrate der C-Control ist von Haus aus mit 9600 Bits/s und die des
> > > > > > M20 mit 19,2 kBits/s eingestellt.
> > > > >
> > > > > mit 9600 bps gesendet, aber mit 19200 bps zu empfangen versucht wird? Die M20 muss vorher auf 9600 bps und kein Handshake eingestellt werden, bevor sie die CC versteht
> > >
> > > > Kannst du mir vielleicht eine kleine Anleitung zeigen, wie man ein Siemens M20 Terminal mit
> > > > der C-Control/plus Steuercomputer auf Applicationboard richtig ansteuert und wie man die AT-Befehle
> > > > zum ändern der Baudrate
> > >
> > > Wie ich geschrieben habe, ist es aus meiner Sicht prinzipiell nicht möglich, ein auf 19200 bps stehendes M20 mit der CC zu einer anderen Baudrate zu überreden.
> > >
> > > > und zum anmelden der SIM-Karte --> AT+CPIN="XXX" richtig im
> > > > Source-Code von CCBasic schreibt.
> > >
> > > Deine CC-Basic-Zeilen sahen syntaktisch schon ok aus.
> > >
> > > Bye
> > >  Achim
> > >
> > Hallo
> >
> > Was könnte das sein, wenn ich bereits ein Null-Modem Kabel (sprich gekreuzt) von CC auf M20
> > benutze, das M20 bereits auf einer Baudrate von 2400 bps eingestellt ist (habe ich über Hyperterminal
> > bereits schon gemacht und gespeichert auf aktuelles Profil)
> > --> AT+IPR=2400
> > OK
> >      AT&W   --> speichert das ganze dauerhaft ab ( über AT&V kann man Profil betrachten in bezug
> >                                                                           auf Einstellungen (Baudrate usw.))
> >
> > Dann im Programmcode von CCBasic bevor ich einen AT-Befehl aufrufe die Baudrate der
> > CC mit dem Befehl BAUD R2400 runtersetze.
> >
> > Wie kann ich das Handshaking des M20 ausschalten?? mit AT+IFC=0,0 (Xon/Xoff)??
> > Meinst du das es daran liegt weil das Handshaking des M20 nicht ausgeschalten ist?
> > Weil nach dem ausschalten des Handshaking kann man das auch wieder mit AT&W wieder
> > dauerhaft über Hyperterminal abspeichern bevor man es an die C-Control hängt.
> >
> > Der Pufferspeicher der RS232 (C-Control) ist doch 8 Byte groß, oder? Also muss ich doch
> > bevor ich einen AT-Befehl aufrufe den Pufferspeicher leeren mit
> >
> > define response byte[8]    'eigentlich doch 8 oder weil 8 Byte Pufferspeicher der RS232 oder???
> >
> > #rxdleeren                 'Subroutine für leert den Buffer der seriellen Schnittstelle
> >   PAUSE 5
> >   IF RXD THEN GET response
> >   IF NOT RXD THEN RETURN
> > GOTO rxdleeren
> >
> >
> > -------------------Hier ist mein eigentliches Programm bis jetzt:------------------------------
> >
> > ' *** Definition LCD-Ports ***
> > define lcd_port byteport[2]
> > define lcd_rs port[14]
> > define lcd_rw port[13]
> > define lcd_e port[15]
> > '---Digitale I/Os----
> > define Fuellstandssensor1 port[1]
> > 'define LED1 port[2]
> > define SMSUeberwachung1 port[3]
> >
> > '---LCD Display---
> > define lcd_buf byte[10]
> > define lcd_param byte[11]
> >
> > '*** ASM-Progs ***
> > 'define fastbas &H151
> > 'define lesen &H16F
> >
> > '---User Data---
> > define response byte[20]
> >
> > '*** ASCII-Codes ***
> > define gf_ &H22
> > define sp_ &H20
> > define A_ &H41
> > define B_ &H42
> > define C_ &H43
> > define D_ &H44
> > define E_ &H45
> > define F_ &H46
> > define G_ &H47
> > define H_ &H48
> > define I_ &H49
> > define J_ &H4A
> > define K_ &H4B
> > define L_ &H4C
> > define M_ &H4D
> > define N_ &H4E
> > define O_ &H4F
> > define P_ &H50
> > define Q_ &H51
> > define R_ &H52
> > define S_ &H53
> > define T_ &H54
> > define U_ &H55
> > define V_ &H56
> > define W_ &H57
> > define X_ &H58
> > define Y_ &H59
> > define Z_ &H5A
> > '*** Hauptprgramm ***
> >   SYS fastbas       'Proggi etwas verschnellern
> >   gosub LCD_INIT    'LC-Display initialisieren
> >   BAUD R2400        'Baudrate auf 2400 runtersetzen( fチr schnellere ist CControl zu lahm)
> > '--------------------------------------------------------------------------------------
> >   response = 0
> >   GOSUB rxdleeren
> >   PRINT"AT+CMGF=1";
> >   PUT 13                       'entspricht Enter-Taste
> >   PUT 10                       'entspricht Enter-Taste
> >   Pause 150
> >   PRINT"AT+CPIN=";
> >   PUT 34                       'entspricht "
> >   PRINT"6284";
> >   PUT 34                       'entspricht "
> >   PUT 13
> >   PUT 10
> >   Pause 2000              '20 sec. Pause zum Netz suchen und anmelden des Modems von SIM-K.
> >
> > #mainloop                 'Hauptschleife
> >
> >   response = 0
> >   GOSUB rxdleeren          'Buffer sollte leer sein
> >   PRINT"AT";                   'AT-Kommando nur zum チberprチfen
> >                                       'ob das Handy da ist
> >   PUT 13                         'entspricht Enter-Taste
> >   PUT 10                         'entspricht Enter-Taste
> >   pause 15                       'auf Modem warten
> >   IF RXD THEN GOSUB modemok ELSE GOSUB modemfehler            
> >   GOSUB Wasserstand
> >   Pause 150                    'Pause zum Ende jeder Runde
> > GOTO mainloop
> > END                               'Eigentlich nur symbolisch
> >
> > '--------------------------------------------------------------------------------------
> > #Wasserstand
> > IF Fuellstandssensor1 = 0 THEN GOTO SMS
> > RETURN
> > '--------------------------------------------------------------------------------------
> > #SMS
> >
> >   'Die nach PUT stehenden Nummern sind ASCII-Formate z.B. PUT 34 entpricht --> Ascii(34) = "
> >
> >   PRINT "AT+CMGF=1";            'setze Message-Format auf "Text"
> >   PUT 13                                  'Zeilenumbruch entspricht CR
> >   PUT 10
> >   PAUSE 50
> >   PRINT "AT+CMGS=";             'Befehl zum SMS-schreiben
> >   PUT 34                                  'entspricht "
> >   PRINT "+491755203102";        'Ziel-Handynummer in Anfチhrungsstrichen
> >   PUT 34                                  'entspricht "
> >   PUT 13                                  'Zeilenumbruch (NUR CR)
> >   PAUSE 50
> >   PRINT "Hallo Chef, hier ist -control: Wasserstand erreicht."                'SMS-Text
> >   PAUSE 10
> >   PUT 26                                   'SMS werden mit Character 26 (eof "End Of File")
> >   PAUSE 200                            ' abgeschlossen
> >   GOSUB rxdleeren
> >   beep 300,100,0                       'ertönt ein akustisches Signal
> >   PAUSE 10
> >   GOSUB SMSgesendet            'Schreibt ins Display SMS gesendet
> >   LED1 = 1                              
> >   GOSUB Schalter1
> >   DEACT LED1                          'Port 2 wird wieder abgeschalten (LED an Port 2 hört auf zu leuchten).
> >
> > GOTO mainloop
> >
> > 'Hier läuft die Steuerung solange in einer Schleife bis ein Taster den Port 3 gegen GND geschalten hat.
> >
> > #Schalter1
> > IF SMSUeberwachung1 = 0 THEN RETURN
> > GOTO Schalter1
> >
> > '*** Funktionen ***
> > #modemok
> >   lcd_param = 1 : gosub LCD_GOTOLINE  '"MODEM OK" in der ersten Zeile
> >   lcd_param = M_ : gosub LCD_WRITECHAR
> >   lcd_param = O_ : gosub LCD_WRITECHAR
> >   lcd_param = D_ : gosub LCD_WRITECHAR
> >   lcd_param = E_ : gosub LCD_WRITECHAR
> >   lcd_param = M_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = O_ : gosub LCD_WRITECHAR
> >   lcd_param = K_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   GOSUB rxdleeren           'Buffer leeren
> > RETURN
> >
> > ' Handy scheinbar nicht da...
> > #modemfehler
> >   lcd_param = 1 : gosub LCD_GOTOLINE      '"MODEM NOT OK" in die erste Zeile
> >   lcd_param = M_ : gosub LCD_WRITECHAR
> >   lcd_param = O_ : gosub LCD_WRITECHAR
> >   lcd_param = D_ : gosub LCD_WRITECHAR
> >   lcd_param = E_ : gosub LCD_WRITECHAR
> >   lcd_param = M_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = N_ : gosub LCD_WRITECHAR
> >   lcd_param = O_ : gosub LCD_WRITECHAR
> >   lcd_param = T_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = O_ : gosub LCD_WRITECHAR
> >   lcd_param = K_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   GOSUB rxdleeren          'Buffer leeren
> > RETURN
> >
> > #SMSgesendet
> >   lcd_param = 1 : gosub LCD_GOTOLINE  '"SMS GESENDET" in der ersten Zeile
> >   lcd_param = S_ : gosub LCD_WRITECHAR
> >   lcd_param = M_ : gosub LCD_WRITECHAR
> >   lcd_param = S_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = G_ : gosub LCD_WRITECHAR
> >   lcd_param = E_ : gosub LCD_WRITECHAR
> >   lcd_param = S_ : gosub LCD_WRITECHAR
> >   lcd_param = E_ : gosub LCD_WRITECHAR
> >   lcd_param = N_ : gosub LCD_WRITECHAR
> >   lcd_param = D_ : gosub LCD_WRITECHAR
> >   lcd_param = E_ : gosub LCD_WRITECHAR
> >   lcd_param = T_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   lcd_param = sp_ : gosub LCD_WRITECHAR
> >   GOSUB rxdleeren           'Buffer leeren
> > RETURN
> >
> > '--------------------------------------------------------------------------------------
> > #rxdleeren  'leert den Buffer der seriellen Schnittstelle
> >   PAUSE 5
> >   IF RXD THEN GET response
> >   IF NOT RXD THEN RETURN
> > GOTO rxdleeren
> > '--------------------------------------------------------------------------------------
> > '*** LCD_Interface ***
> > '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
> >
> > #LCD_INIT
> >
> > ' alle ports 0
> >   lcd_port = OFF
> >
> > ' 8-Bit-Modus aktivieren
> >   lcd_param=&H38 : gosub LCD_WRITECMD
> >
> > ' mit 8-Bit-Command in 4-Bit-Modus umschalten
> >   lcd_port=&B00000010
> >   tog lcd_e
> >   tog lcd_e
> >
> > ' ab jetzt 4-Bit-Modus
> >   lcd_param = &H28 : gosub LCD_WRITECMD
> >   lcd_param = &H0C : gosub LCD_WRITECMD
> >
> > ' Display loeschen
> > #LCD_CLS
> >   lcd_param = &H02 : gosub LCD_WRITECMD
> >   lcd_param = &H01 : gosub LCD_WRITECMD
> > return
> >
> > ' Zeilenwechsel
> > #LCD_GOTOLINE
> >   if lcd_param = 1 then lcd_param = &H80
> >   if lcd_param = 2 then lcd_param = &HC0
> >   goto LCD_WRITECMD
> >
> > ' LCD-Kommando
> > #LCD_WRITECMD
> >   lcd_buf = OFF
> >   goto LCD_WRITE
> >
> > ' Zeichenausgabe
> > #LCD_WRITECHAR
> >   lcd_buf = &B00100000
> >
> > ' Kommando oder Zeichen an Display senden
> > #LCD_WRITE
> >   lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
> >   tog lcd_e
> >   tog lcd_e
> >   lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
> >   tog lcd_e
> >   tog lcd_e
> > return
> > '--------------------------------------------------------------------------------------
> > 'mチssen beim ersten Mal mit チbertragen werden
> > 'SYSCODE "fastbas.s19"
> > 'SYSCODE "lesen.s19"
> > '--------------------------------------------------------------------------------------
> >
> > Du kannst ruhig zwischen den Zeilen dein Kommentar reinschreiben was nicht stimmt,
> > wäre super Happy wenn ich das Ding endlich zum laufen bekommen würde und ich
> > zumindest nur mal eine SMS über M20 verschicken kann wenn z.B. ein Dig. Port ein 0 Signal
> > führt(auf Eingang gestellt).
> >
> > Gruss
> > Alex
> >
Hallo Martin
Hallo Achim

Es FUNKTIONIERT!! HURRA, HURRA.

Habe meinen Fehler gefunden. Das M20 hat reagiert und hat mir auf ein anderes Handy eine
SMS geschickt, gesteuert von C-Control.

Über Hyperterminal:
Und zwar habe ich erstens das Handshaking ausgeschalten über Hyperterminal
mit Befehl AT&D0 (Disable Data Terminal Ready(DTR)) anschließend mich eingewählt mit AT+CPIN="xxxx" zuvor natürlich Baudrate runtergestellt mit AT+IPR=2400. Dann mit Befehl AT+CSCA="+491710760000" für D1-Netz, da die SIM-Karte die ich ins M20 reingesteckt habe auf
einen D1-Vertrag läuft. Das ganze dauerhaft im M20 gespeichert mit Befehl AT&W.

(Auf der SIM-Karte,
die in das M20 eingeschoben werden muss, befindet sich u.a. die Telefonnummer des
Short Message Service Centers (SMSC) und Platz für maximal zehn Textnachrichten.
Die eingetragene SMSC-Nummer hängt vom Kartenvertrag ab. Beispielsnummern sind
bei D1-Telekom: +491710760000 und bei D2-Privat: +491722270333. Mit AT+CSCA?
kann man sich die eingetragene Nummer anzeigen lassen. Per
AT+CSCA=“+491710760000“ lässt sich die Nummer festlegen. Mit solchen AT-Befehlen
lassen sich noch zahlreiche weitere Optionen einstellen. So kann z.B. festgelegt werden,
wie lange eine Textnachricht beim SMSC auf seine Abholung warten soll, bevor sie
gelöscht werden kann.)

 - Dann im Programmcode von CCBasic bevor man den ersten AT-Befehl schreibt zuvor die Baudrate   der C-Control runtergestellt mit Befehl BAUD R2400.

- Dann habe ich statt dem gekreuzten Kabel ein 1zu1 Kabel V.24 Kabel hergenommen!

Jetzt probiere ich mal ob ich mich programmtechnisch über C-Control anmelden kann
also sprich --> AT+CPIN="xxxx" dann Pause 500 (10 sec. Pause um dem Modem Zeit zu
lassen das es sich über die SIM-Karte ein Netz sucht und einwählt).

Ich halte euch auf dem laufenden.

Gruss
Alex


 Antwort schreiben

Bisherige Antworten:

Re: Wie programmiert man Siemens M20 Terminal über C-Control?? (von Alex - 13.05.2005 15:22)
    Re: Wie programmiert man Siemens M20 Terminal über C-Control?? (von Alex - 13.05.2005 15:32)