Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Leo, > > > Ich dachte mir schon, daß es keine einfache Lösung gibt. > > Es sollen die unterschiedlichsten Variablen der Heizungsregelung geloggt werden können, also von > > Termpaturen über Outputs der Regelkreise bis zu Ansteuerzustand von Pumpen. > > Diese Variablen sind natürlich quer über die Module verteilt. Ich werde sicher nicht den modularen > > Aufbau opfern, sonst kenne ich mich über kurz oder lang in meine eigenen Programm nicht mehr aus. > > Dumußt nicht den Modularen Aufbau opfern. > Allerdings rate ich dennoch immer ein eigenes Modul z.B. mit dem Namen var.c2 > anzulegen, in dem alle globalen, aus mehreren Modulen genutzten Variablen angelegt werden. > Dazu kannst Du noch eine eben höher ein Modul konst.c2 anlegen. > > So kann man dann folgende Konstrukte machen: > <code>var.temp[konst.puffer_oben]=x;</code> > in var.c2 ist ein Array <code>temp[]</code> mit dern nötigen Größe angelegt. > In konst.c2 legst Du dann einfach Konstanten mit den nötigen Indizies an. > > Bei Ausgängen benötigst Du nur eine Funktion, die Dir anhand eines Index > den entsprechnden Port abfragt. > Als Bsp. aus meinem seit nunmehr fast 4 Jahre alten Provisorium: > <code>function get(int port) returns int > { > if port>=8 return states[port]!=0; > if port>=5 and port<=7 return not rbports.get(port); > if port>=0 and port<=2 return rbports.get(port); > if port==-1 return IWP[0]; > if port==-2 return IWP[1]; > }</code> > > > > Momentan schwebt mir eher vor eine beschränkgte Anzahl an logbaren Variablen zu haben und für jede > > Variable ein Bit zu reservieren, das angibt, ob die Variable nun geloggt werden soll oder nicht. > > Natürlich muß es pro Variable auch einen String mit deren Namen geben (sonst kann man's auf der > > Station ja nicht im Menü auswählen). > > Die zum loggen gekennzeichneten Variablen werden dann einfach in einer zyklischen Log-Routine ins > > RAM-Device kopiert. > > Um die Sache nicht zu komplizhieren sind alle logbaren Variablen Integer oder werden zu Integer auf- > > geblasen. Es gibt momentan keine Motivation Datentypen unterschiedlicher Länge zu implementieren. > > Wie gesagt, ist es dann das einfachste, einfach die globalen Variablen > für Temperaturen in ein Array zu packen, um sie dann über einen Index ansprechen zu können. > für die LCD-Texte kannst Du einfach ein String-Konstanten-Array mit übereinstimmenden > Indizies anlegen. > > > > Jetzt muß ich mich nur noch schlau machen wie man in C2 bits anspricht. Es geht mir schon länger auf > > die Nerven für jede boolsche Variable ein Byte zu verwenden. Wo ich doch glaube, daß der µC Bits und > > Bitfields unterstützt (so diese im Bitadressierbaren Bereich liegen). Bei einzelnen boolschen Variablen > > kann ich es verschmerzen Bytes zu verwenden. Aber wenn ich jetzt ein Array von boolean für das > > log-flag brauche, muß ich mich mir was einfallen lassen ;-). > > Prinzipiell gibt es in C2 keine Bit-Variablen und auch keine VMCodes > für den gezielten Bitzugriff. > Es bleibt hier nur das Maskieren von Bits. (siehe z.B. im Modul srrel.c2 oder rbports.c2) > Man könnte sich hier natürlich auch ASM-Routinen schreiben, aber das wäre für > ein paar Temperaturen ein unnötiger Aufwand. > Den bitadressierbaren bereich kann man aus C2 direkt nicht nutzen. Auch wird ein Teil > bereits vom OS bzw. von Systemtreibern benötigt. > > Auch wenn es natürlich Speicherverschwendungen ist, kannst Du ohne > weiteres ein Bytearray benutzen. Die CC2 hat 64kB RAM. Hier darf > man schon vereinzelt etwas verschwenderisch werden. ;-) > Und selbst bei 100 Variablen, die Du loggen willst, wären es nur 100 Byte von 64kB. > Das sind gerade etwas über 0,15% des RAMs. > Aber soviele unterschiedliche Werte werden es sicher nichteinmal sein. ;-) > > MfG André H.