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 12:18)
 Als Antwort auf Re: Wie programmiert man Siemens M20 Terminal über C-Control?? von Achim - 12.05.2005 10:07
Alex nutzt:  CC1-Unit V1.1

>
> >
> > > > 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





 Antwort schreiben

Bisherige Antworten:

Re: Wie programmiert man Siemens M20 Terminal über C-Control?? (von Martin T. - 12.05.2005 13:47)
    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)
Re: Wie programmiert man Siemens M20 Terminal über C-Control?? (von Achim - 12.05.2005 13:23)