Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Kennfeld und Array Kategorie: Programmierung (von Alexander Richter - 14.05.2006 22:40)
Als Antwort auf Re: Kennfeld und Array von André H. - 14.05.2006 15:12

> Hallo Alex,
>
> > ich habe mir vor einiger Zeit eine C-Control II zugelegt, mir mit der Zeit ein Applicationboard drum herum gebaut
> > (alles was ich brauche) und scheiter nun leider so ein wenig an der Programmierung.
> > Oft komme ich mit lesen und fragen irgendwie weiter... aber nun bäuchte ich professionelle Hilfe :-)
> > Also, ich möchte eine Art Kennfeld erstellen, in dem eine Ausgangsvariable von 2 Eingangsvariablen
> > abhängt; ich messe z.B. Spannung 1 und Spannung 2, und mein Ausgabewert ist Spannung 3. Mit dem Stichwort Array
> > kam ich via Internetrecherche nur bedingt weiter, da C++ in dieser Hinsicht ja doch etwas anders
> > funktioniert und die C-Control laut Handbuch nur eindimensionale Arrays unterstützt. Also kurzum: Ich
> > komme als motivierter Laie mit dem Handbuch nur Mühsam zurecht.
> > Daher meine Bitte an Euch: Ich erwarte nicht daÃ? mir hier einer ein Programm runterschreibt, aber
> > für eine Literaturempfehlung oder noch vielmehr ein BEISPIELPROGRAMM, das diese Problematik bearbeitet,
> > wäre ich sehr dankbar!
>
> Rudimentär gesehen kann die CC2 keine Mehrdimensionalen Arrays.
> Technisch gesehen jedoch schon.
> Die Frage ist nur, wie groÃ? dieses Array sein muÃ?.
> Als Variable kann man beispielsweise ein zweidimensionales Array in C2 folgendermaÃ?en anlegen:
>
> type meinArray
> {
>  int y[64];
> }
>
> meinArray x[64];
>

> Das wäre ein Beispiel für ein zweidimensionales Integer-Array mit 64 x 64 Feldern.
> Und so wird z.B. darauf zugegriffen:
>
> x[0].y[1]=12345;
> x[5].y[4]=6789;
>

Diese Lösung gefällt mir sehr, nur habe ich ja Spannungs- bzw. Frequenzsignale als Variablen, und
nicht [1], [2] oder [3]....
lese ich dann erst x als Spannungssignal ein und dann mein Y als Frequenz? Mein Ergebnis ist z.B.
nicht 12345 sondern ein Befehl der nen Digitalport schaltet, kann ich diesen direkt hinter das "="-Zeichen schreiben??

> Sei aber vorsichtig it der Grö�e. Die CC2 hat "nur" 64kB RAM.
> Schon einfache Mehrdimensionale Arrays können sehr gro� werden.
> Das obige Array hat beispielsweise eine Grö�e 64 x 64 x 2 Byte= 8192Byte = 8kB
> Auf dieselbe Weise könnte man auch dreidimensionale Arrays aufbauen.
> Aber hier kommt man sehr schnell an die Grenzen des RAMs, so daÃ? man
> dann eher gro�e externe Speciher benötigt.
> (Ein dreidimensionales Integer-Array mit z.B. 64 x 64 x 64 Feldern würde 512kB benötigen.)
>
> Auch über Konstanten-Arrays könnte man mehrere Dimensionen verwirklichen.
> Dies jedoch nur über den mathematischen Umweg.
> D.h., Du benutzt ein eindimensionales Array als zweidimensionales.
> Der Vorteil hier wäre jedoch, da� 128kB für konstanten bereitstehen. Zusätzlich
> könnte man zwei komplette Flashsegmente (ebenfalls 128kB) dafür "mi�brauchen".
> Ein einfaches Bsp. für ein kleinesKonstanten-Array, das zweidimensional genutzt wird:
> (5x5 Felder)
> const Array[]= 1, 2, 3, 4, 5,
>               11,12,13,14,15,
>               21,22,23,24,25,
>               31,32,33,34,35,
>               41,42,43,44,45;
> const Offset=5;
>    
> function getArray(int x, int y) returns int
> {
>  return Array[x+(y*Offset)];
> }
>

> Auf das Array wird dann einfach über die Funktion getArray() zugegriffen:
> wert=getArray(0,4); //erste Spalte, fünfte Zeile
>

>
Ist vom "Platz" bzw Speicher her interessanter....

> Die Frage ist aber, ob das das ganze überhaupt benötigst, oder, ob sich
> Deine Aufgabe evtl. auch rechnerisch löschen lä�t.
> Beschreib' mal grob, für was Du vorhast, vielleicht gibt's eine ganz einfache Lösung
> unter Verwendung einer Formel.

Ich bin ein sog. Ventilaffe und möchte ein Einspritzventil antakten. Das funktioniert super mittels den
Digitalausgängen.
Nun soll der Wert, der von Last (Spannungswert zw.0-5V) und Drehzahl abhängt (Frequenz), in einem
Kennfeld abgelegt werden, welches
vorher experimentell ermittelt wird. Mit meinen Informatikkenntnissen, die im Maschinenbaustudium
nicht gerade zu den Schwerpunkten zählen, wollte ich das echt schon mit lauter Schleifen lösen.
Das dies natürlich nicht die eleganteste und nicht die übersichtlichste Lösung ist, ist mir schnell klar geworden.
Was die Grö�e des Kennfeldes angeht denke ich dass je 30 Werte jeder Variablen genügen würden; ich
will nicht ausschlie�en das sich dieses Problem mittels einer Formel lösen lä�t, mir erscheint die Kennfeldlösung
mittels Arrays sehr elegant, und sie reizt mich auch....

Was "taugt" denn das Buch "Messen steuern und Regeln mit C-Control"??

Also erstmal vielen vielen Dank für die ausführliche Antwort. Das hat mich schonmal weiter gebracht.
Werde gleich weiterprobieren, nur ist das mit dem Probieren so eine Sache... wenn man so gar keinen Erfolg sieht
verliert man schnell die Lust... ich bin aber Lernwillig und Ehrgeizig....




Vielen Dank schonmal im Voraus!

GruÃ? Alex


    Antwort schreiben


Antworten: