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 Martin T., Homepage - 12.05.2005 13:47)
 Als Antwort auf Re: Wie programmiert man Siemens M20 Terminal über C-Control?? von Alex - 12.05.2005 12:18
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
>
>
>
>
>


Meine Homepage: http://home.tele2.it/marthal/C-Control

 Antwort schreiben

Bisherige Antworten:

Re: Wie programmiert man Siemens M20 Terminal über C-Control?? (von Alex - 12.05.2005 14:37)
    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)