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: Zustand z.B. der Digitalport über serielle Schnittstelle auslesen Kategorie: Hardware (von Achim - 7.06.2004 14:32)
 Als Antwort auf Re: Zustand z.B. der Digitalport über serielle Schnittstelle auslesen von Peter - 7.06.2004 7:50
Hi,

[Quote umgestellt]

> > Was spricht gegen
> >
> > print relais
> >
> > vor der Zuweisung an relais?

> Ich glaube ich habe mich falsch ausgedrückt.
> Ich möchte auf die serielle Schnittstelle mit einem C-Programm zugreifen:
>
> 1. aktuellen Zustand auslesen (dass ich den mit print ... ausgeben kann weiß ich)
> 2. danach neu schalten, den ausgelesenen Zustand möchte ich mit meiner Eingabe
>    verknüpfen, so daß nicht irgendwelche Relais ausgeschaltet werden, die ich
>    mit meiner Eingabe nicht schalte.
>
> Wenn ich das Program so betreibe wie oben geschrieben, wartet die C-Control permanent
> auf eine Eingabe von der seriellen Schnittstelle, wie kann ich aber lesend und
> schreibend auf die serielle zugreifen?

Mit RXD und GET statt Input

So wie unten mache ich das gekürzt in meinem Programm.
Wenn Du keinen Timeout brauchst, wird's einfacher.
Wenn Du immer nur eine Ziffer brauchst, wird's einfacher.
Wenn Du auch während der Eingabe langer  Zahlen, bevor der Timeout zuschlägt, andere Sachen
machen willst, wird's komplizierter. ;-)

define BS &H08
define CR &H0D
define LF &H0A
define SPACE &H20

define Null &H30

#loop
 blabla
 if not RXD then goto NoInput
   gosub HandleInput
 #NoInput
 blabla
goto loop

#HandleInput
   if not rxd then return
   gosub InputTempvar
   if tempvar = -1 then return ' Timeout
   if tempvar = 1 then goto handleF1  'macht return
   if tempvar = 2 then goto handleF2  'macht return
   if tempvar = 3 then goto handleF3  'macht return
   ....
   ' else invalid
   beep 3000, 3, 0
return

''##########################
'
' InputTempVar
'
' Einlesen eines Integers von RS232
'
#InputTempvar
 tempvar = 0
 tempvar2 = 0

 #ReadTempvarLoop

 ' Wait for Key for max 10 seconds
 for tempvar2 = 0 TO 100 STEP 1
   pause 5 ' 1/10 Sekunde

   if RXD then goto InputReady
 next

 'Timeout
 print
 print "no key read for 10 sec. Use <enter> to complete Input. Return to Menu"
 beep 5000, 5, 0
 tempvar = -1
 return 'Tempvar is the result


 #InputReady
 get tempvar2

 if tempvar2 = CR then return ' Tempvar is the result

 if tempvar2 <> BS then goto CheckDigit
   ' Letzte Eingabe löschen
   tempvar = tempvar / 10
   goto ReadTempvarLoop

 #CheckDigit

 if tempvar2 >= Null and tempvar2 <= Null + 9 then goto FoundDigit
   ' keine Ziffer ->> Fehler
   beep 1000, 3, 0
   goto ReadTempvarLoop
 #FoundDigit
 tempvar = tempvar * 10 + (tempvar2 - Null) ' Ascii 0 = hex 30 = dez 48

 goto ReadTempvarLoop

> Das wäre insofern wichtig, als das ich den aktuellen Schaltzustand der Relais auf einer
> www-Seite darstelle und deswegen sollte beim Aufruf der Seite der Zustand schon stimmen.

Na, das alleine ginge  ja trivial, indem Du das print Relais nicht vor der Zuweisung, sondern vor dem
Input ausgibst.

HTH

Bye
 Achim

 Antwort schreiben

Bisherige Antworten:

Re: Zustand z.B. der Digitalport über serielle Schnittstelle auslesen (von Peter Weiß - 9.06.2004 9:20)
    Re: Zustand z.B. der Digitalport über serielle Schnittstelle auslesen (von Peter - 1.07.2004 13:16)