
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 "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 |