-         
+ Antworten
Ergebnis 1 bis 8 von 8

Thema: Compilier - Fehler???

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.02.2004
    Beiträge
    53

    Compilier - Fehler???

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

  2. #2
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    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.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.02.2004
    Beiträge
    53
    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?

  4. #4
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    25.02.2004
    Beiträge
    53
    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...

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.01.2004
    Ort
    München
    Alter
    66
    Beiträge
    214
    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...

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    25.02.2004
    Beiträge
    53
    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...

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    25.02.2004
    Beiträge
    53
    Weiß denn keiner Rat?

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •