PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Compilier - Fehler???



Toxic
26.03.2004, 13:56
Ok,
langam han ich für heut genug. Wieder nur Probleme:

1. Wenn ich F1 ein paar mal hintereinander betätige (nur im Basic-Editor),
passiert es zwischenzeitlich (1v5 mal) das er die routiene für F2 startet (nein! ich bin nicht zu dumm zum klicken!!!)

2. Wenn ich das Prog auf die Station lade, F1 drücke (für Shutdown) beendet sich das Prog (wie ja auch gewollt), nur das, wenn ich sie wieder anmache er immer wierder shutdown2 aufruft (also quasi "end")

hier main Code:
' --- Definitionen ---

' Die Digital-Ports für das öffnen der Tür
' und der Lüfterregelungund im Bad
define DP1 port[1]
define DP2 port[2]
define DP3 port[3]
define DP4 port[4]
' Die Relais
define K1 port[7]
define K2 port[8]
' Die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
' Die LED`S für die Zustandsanzeige und
' die Tastendruck-Bestätigung
define LED1 port[13]
define LED2 port[14]
define LED3 port[15]
define LED4 port[16]
' Die Analogports für die Überwachung
' der Tür und der Luftfeuchtigkeit im Bad
define AP1 ad[1]
define AP2 ad[2]
' Die Temperatursensor-Ports
define TS1 ad[5]
define TS2 ad[6]
' Zwei Variablen zur Speicherung der Temperatur
define temp word[1]
define temp2 word[2]
' Variable für die Speicherung empfangener
' Daten und zum counten der Shutdown-Schleife
define Data byte[5]
define ShutCnt byte[6]
' Variablen zum counten der Temperaturschaltung
define v_IntCoolOn bit[49]
define v_IntCoolOff bit[50]
define v_ExHeatOn bit[51]
define v_ExHeatOff bit[52]
' symbolische Konstanten für die Schaltschwellwerte
' (zehnfache Temperaturwerte)
define IntCool 220 ' = 24.0 °C
define ExHeat 250 ' = 20.0 °C
define Dong 155 ' = 1,55 V

' --- das Programm ---

' Initialisierung
DP1 = 0
DP2 = 0
DP3 = 0
DP4 = 0
K1 = OFF
K2 = OFF
LED1 = OFF
LED2 = OFF
LED3 = OFF
LED4 = OFF
ShutCnt = 0
v_IntCoolOn = 0
v_IntCoolOff = 0
v_ExHeatOn = 0
v_ExHeatOff = 0

#Main
' AD-Wandlerwert in Temperatur umrechnen
temp = 5 * TS1 - 250 '(5 * T1 - 250) /10
temp2 = 5 * TS2 - 250 '(5 * T2 - 250) /10
' Datenkontainer leeren
Data = 0
' Abfragen
if temp => IntCool then gosub IntCoolOn Else gosub IntCoolOff
if temp2 =< ExHeat then gosub ExHeatOn Else gosub ExHeatOff
if AP1 => Dong then gosub Klingeln
if not F1 then gosub F1Push
if not F2 then gosub F2Push
goto Main

#IntCoolOn
If v_IntCoolOn = -1 then Return
v_IntCoolOn = v_IntCoolOn -1
v_IntCoolOff = 0
Print "1"
Pause 10
K1 = ON
LED3 = ON
return

#IntCoolOff
If v_IntCoolOff = -1 then Return
v_IntCoolOff = v_IntCoolOff -1
v_IntCoolOn = 0
Print "2"
Pause 10
K1 = OFF
LED3 = OFF
return

#ExHeatOn
If v_ExHeatOn = -1 then Return
v_ExHeatOn = v_ExHeatOn - 1
v_ExHeatOff = 0
Print "3"
K2 = ON
LED4 = ON
return

#ExHeatOff
If v_ExHeatOff = -1 then Return
v_ExHeatOff = v_ExHeatOff - 1
v_ExHeatOn = 0
Print "4"
K2 = OFF
LED4 = OFF
return

#F1Push
LED1 = ON
Beep 568,5,0
Wait F1
Print "101"
Pause 25
LED1 = OFF
if not RXD then Print "101" Else gosub RxData
gosub Shutdown1

#F2Push
LED2 = ON
Beep 568,5,0
Wait F2
Pause 10
if v_IntCoolOn = -1 then Print "1" Else Print "2"
gosub SendTemp1
pause 10
if v_ExHeatOn = -1 then Print "3" Else Print "4"
gosub SendTemp2
LED2 = OFF
return

#Shutdown1
Beep 480,15,10
ShutCnt = ShutCnt + 1
if ShutCnt = 4 then gosub Shutdown2
if not RXD then Print "101" Else gosub RxData
gosub Shutdown1

#Shutdown2
Beep 568,10,2
Beep 568,10,2
Beep 568,10,2
Beep 480,15,0
end


#RxData
Input Data
if Data = 101 then gosub Shutdown2
if Data = 112 then gosub SendTemp1
if Data = 123 then gosub SendTemp2
if Data = 202 then gosub DoorOpen1
if Data = 213 then gosub DoorOpen2
if Data =< 100 then goto Main
Data = 0
return


#SendTemp1
print "Temperatur an T1 = "; temp; "°C";
print
tog LED3
pause 10
tog LED3
pause 10
tog LED3
pause 10
tog LED3
return

#SendTemp2
print "Temperatur an T2 = "; temp2; "°C";
print
tog LED4
pause 10
tog LED4
pause 10
tog LED4
pause 10
tog LED4
return

#Klingeln
Print "DingDong"
Pause 5
Print "DingDong"
return

#DoorOpen1
LED3 = ON
Beep 568,5,0
LED3 = OFF
return

#DoorOpen2
LED3 = ON
Beep 568,5,0
LED3 = OFF
return

Frank
26.03.2004, 14:57
Bitte nicht für jeden kleinen Compilerfehler immer einen neuen Thread öffnen. Nenn Thread dann lieber "Syntax fehler im C-COntrol Basic" oder so ähnlich um und schreib da dann alle Problemchen rein.

Wenn man mit C-Control Basic anfängt ist es ganz normal das es am Anfang Fehlermeldungen hagelt - man muß halt noch lernen.

Toxic
26.03.2004, 15:10
Ok, OK! Werde mich daran halten.
Dir fällt nicht gerade so zufällig auch mein Fehler auf oder weist was es seien könnte?

Frank
26.03.2004, 15:31
Leider verstehe ich nicht so ganz deine Fehlerbeschreibung! Was heißt "Wenn ich F1 ein paar mal hintereinander betätige". Ist das ein Taster den du an einem Port hast oder was? Das müsstest du genauer beschreiben

Toxic
26.03.2004, 15:38
OK, vieleicht sollte ich, das ich das Gerät Namens C-Control-Station besitze.
2. vieleicht auch das sich in dieser 4 taster befinden (Standars F1-F4)
welche mit Pull-Up/Down(?)-Wiederständen an D-Ports (p[9] - p[13]) angeschlossen sind.

Bitte nich übelnehmen, bin schon etwas lääääääääääääääääänger wach... ;)

jörg
26.03.2004, 17:34
Ich weiss zwar nicht, was Du machen willst, aber Dein Source sieht bisschen komisch aus, ohne ihn genauer anzuschauen:

1. #F1Push (""F1 gedrückt"?)
wird mit GOSUB angesprungen, aber es gibt da gar kein Return am Ende. Die letzte Anweisung in #F1Push ist "gosub Suhdown1", und danach gehts im Source mit #F2Push weiter -- das heisst: "Wenn F1 gedrückt wird, soll abschliessend noch dasselbe gemacht werden, wie bei F2". Wolltest Du das?
Das könnte auf jeden Fall Deine Beobachtung erklären.

2. #Shutdown1 ("Beenden fwegen F1"?)
wird mit GOSUB angesprungen, und hört mit "gosub Shutdown1" auf; ruft sich selbst also rekursiv auf.
Kann mir nicht vorstellen, dass das wolltest; müsste wohl "goto Shutdown1" heissen.

3. Was vermutlich passiert:
Du rufst die Programmteile immer als Unterprogramm auf, obwohl die vermutlich nie zurückkehren sollen. Mit den GOSUBs wird aber der CCBASIC Stack immer mehr aufgebaut (hängt bisschen von Deinen Abfragen RXD / PRINT ab), und das kann dann zu Stack-Überlauf führen.

Vorschlag: GOTO statt GOSUB an den betreffenden Stellen...

Toxic
26.03.2004, 23:32
Danke, werde es gleich ändern.

#F1Push ist nur zur überückung. eigendlich wollte ich später mir in Bleigel-Akku besorgen und mir ne kleine schaltung bauen die an nen D-Port anschließen und wenn der Strom ausfällt (Altbau; schlechtes verteilersystem,; miese Leitungen...) das "merkt" und dann ann meinen PC nen Shutdownbefehl erteilt (Print "101") wie in den schleifen die ich da ja auch hab.

F2 soll bei betätigung einfach die 2 Temps und den Schaltzustand 2er Geräte an den Pc ausgeben.

Klingel und der rest kommen Später, will vom Pc aus die Türe öffnen (unten wie oben) und die Sprechanlage bedienen und und und
später halt... ;)

Toxic
28.03.2004, 16:53
Weiß denn keiner Rat?