
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo Leo, die Variablenverwaltung ist nicht nur bei CCBASIC eine heikle Sache, sondern auch allgemein. Bei CCBASIC ist die Beschränkung auf 24 Variablen ein sehr unangenehmes Problem. Folgend meine Variablendefinitionen, die dir als Beispiel dienen mögen. Wie schon mein Vorredner sagte haben die Variablen und Ports nix miteinander zu tun. Wenn du nicht aufpasst, hast du auch eine Überschneidung zwischen Bit-, Byte- und Wortvariablen, unkontrollierte Veränderungen passieren leicht. '*** Variablen ************************************************************************ 'word 1 define bitvar1 word '16 Bit für Bitmerker; hier an ERSTER Stelle, da die 'folgenden Bit-Def's zwingend eine Bitnr. haben müssen. define vorher_be_1 byte[1] 'Vergleichsbyte für die "schnellen" Digitaleingaben '==> "cast" auf die folgenden Bitmerker zur ' schnellen Abfrage in der Sekundenschleife 'ACHTUNG: Die Belegung der folgenden 8 Bitmerker ist angepaßt an die DE 1 - 8 !! ' Siehe oben bei Port-Def's. ' define bit[1] 'da liegt das MUX-Select-Signal drauf 'könnte aber für irgendwas verwendet werden define rn_vorher bit[2] 'RN-Zustand vorheriger Zyklus (Flankenerkennung) ' define bit[3] ' define ww_vorher bit[4] 'Merker für WW-Boiler define ht_vorher bit[5] 'Haustür-Zustand vorheriger Zyklus define quit_vorher bit[6] 'Merker für nicht quittierten Anlagen-Fehler define netz_vorher bit[7] 'DE-Netzausfall vorheriger Zyklus define fehler_vorher bit[8] 'Fehler vorheriger Zyklus define bit1 bit[9] 'allgemeine define bit2 bit[10] ' Bitmerker define ww_war_schon bit[11] 'Merker, dass WW-Boiler schon eingeschaltet war define start bit[12] 'Programmstart-, Erstlaufkennung define start_tag bit[13] 'erster Tag nach Start bis RN-kommen define sh_vorher bit[14] 'Merker für HzEntlade, damit der Mischer etwas zugefahren wird define urlaubs_bit bit[15] '= HI, wenn Urlaubsabsenkung define bit16_nbel bit[16] ' ' ACHTUNG: Wegen der direkten "casts" der Variablen aufeinander, die folgenden Definitionen ' nur mit großer Vorsicht ändern !! 'word 2 define i1 word 'allgemeine Integer-Variable define b1_i1 byte[3] 'gecastete Byte-Variablen: Das Lesen EEPROM erfolgt define b2_i1 byte[4] ' "word"-weise, 'bx_i1' erlaubt einfachen Bytezugriff ' auf das linke/rechte Byte eines gelesenen Wortes 'word 3 define i2 word 'allgemeine Integer-Variable define b1_i2 byte[5] 'gecastete Byte-Variablen define b2_i2 byte[6] ' 'word 4 define i3 word 'allgemeine Integer- und define b1_i3 byte[7] 'gecastete Byte-Variablen define b2_i3 byte[8] ' 'word 5 define tmit word 'Tagesmittelwert, wird stündlich aktualisiert/aufsummiert 'tmit ist Fertigwert und hat IMMER den Faktor 10 !! 'word 6 define m_w_erf word 'erforderliche Aufladeenergie in kWh; Benutzung NUR in 'Sub rn' define m_sel_send word[6] 'selektives Senden von daten an den PC; Benutzung NUR bei Bedienung define m_stellgroesse word[6] 'Stellgröße für Mischerlaufzeit-Berechnung define m_anlaufkennung byte[11] 'Anlaufkennung bei der Datums- + Uhrzeiteingabe, wird NUR bei Anlauf benutzt define m_xxx byte[12] 'noch frei 'word 7 define wartezeit word 'Wartezeit bis zum Einschalten der Aufladung in min 'word 8 define tmax byte 'Aussentemp. Rohwert: Tagesmaximal- und define tmin byte ' -minimaltemperatur 'word 9 define letzte_sekunde byte 'Merker, zum Prüfen auf "Minutenwechsel" define letzte_minute byte 'Merker, zum Prüfen auf "Stundenwechsel" 'word 10 define letzte_stunde byte 'Merker, zum Prüfen auf "Tageswechsel" define byte20 byte ' 'word 11 define ereignisklasse byte '8 Bit für Ereignisklassen define byte22 byte ' 'word 12 define mischerlaufzeit byte 'Mischerlaufzeit in sek, wird im Minutenzyklus gesetzt, im ' Sek.zyklus dekrementiert, geprüft und der Mischer ggf. ausgeschaltet define tv_vorher byte 'Vorlauftemp. Rohwert vorheriger Zyklus für die Differenzbildung Nach diversen Problemen habe ich die Variablen mit der Wortnr. kommentiert. Es erscheint zweckmäßig, alle Variablen mit einer Nummer [nr] zu definieren. So wie oben muss man aufpassen, das die Belegung stimmt, da der Compiler sonst einen anderen Speicherplatz belegt! Einige Variablen habe ich mit "m_..." begonnen. Das sind "mehrfach benutzte Variablen", die zwar über eine längere Codestrecke für einen bestimmten Zweck benutzt werden, mit den im gleichen Wort/Byte liegenden anderen "m_..."-Variablen aber nicht ins Gehege kommen können, da sie bei völlig unabhängigen Programmdurchläufen benutzt werden. Ist ein bisschen viel, aber wirst es schon schaffen. Gruß und schöne Ostern Laika |
| Antwort schreiben |