Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: Array für Histogramm

  1. #11
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Auch die WAGO sollte sowas anbieten: SysMemCpy SysMemCpy aus der SysLibMem.lib
    If you open your Mind too much, your Brain will fall out.

  2. #12
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    @zotos: Recht hast Du.. hab´s gefunden. Ich hatte gar nicht erst geschaut, da ich annahm, dass es sich um eine ausschliessliche Beckhoff-Funktion handeln würden. Danke.

    Wenn ich dieses Array jetzt etwas aufpusten möchte, also 20 Real-Werte zum gleichen Zeitpunkt schreiben möchte. Wie erweitere ich es um diese Dimension? (Ist Dimension richtig?)

    Die Ausgabe müsste dann ungefähr so lauten :
    Daten_Speicher[1]= 1.11; 2.22; 3.33;...; 22.22;
    Daten_Speicher[1]= 1.11; 2.22; 3.33;...; 22.22;

    (Habe da mal Beispielhaft Wert=Kanal genommen.)

    Und wie greife ich zum Beipiel aus dem Trend-Element direkt in diese Wertreihen?

    Also zum Beispiel in den dritten Wert (3.33).



    Gruss

    McNugget

  3. #13
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Für die Datenreihe bietet sich ja geradezu ein zweidimensionales Array an.
    Damit kann man dann z.B. 20 Messreihen mit je 100 Messwerten erfassen.
    Das Problem ist nun aber das Histogramm das bei mir ums Verrecken keinen Zugriff auf einen Teil des Array macht. Ich bekomme es nicht geregelt dort eine Auswahl einzutragen die nur eine Datenreihe über einen Indes annimmt. Aber mit Pointern kommt das Teil klar und daher habe ich eine Lösung erarbeitet die zwar Q&D ist aber funktioniert.
    Ich hoffe Du hast keine Angst vor Pointern ;o)

    Code:
    PROGRAM PLC_PRG
    VAR
        MyArray : ARRAY[0..19,0..99] OF REAL;
        pMyArray : POINTER TO  ARRAY[0..19,0..99] OF REAL;
        pMyDummy : POINTER TO  ARRAY[0..99] OF REAL;
        i : INT;     (* aktuelle Messreihe *)
        x :INT;  (* aktueller Messpunkt *)
    END_VAR
    
    (* Die FOR-Schleife ist nur zum testen damit da Daten reinkommen *)
    FOR x := 0 TO 99 DO
     MyArray[i,x] :=  MyArray[i,x] + 0.1;
    END_FOR;
    
    pMyArray := ADR(MyArray[i,0]); (* Setze Pointer auf die Messreihe i *)
    pMyDummy := pMyArray; (* Kopiere die Pointer adresse *)
    So und nun zum Histogramm da habe ich dann als Variable einfach:
    PLC_PRG.pMyDummy^
    verwendet. Das ^ am Ende ist wichtig!


    Vielleicht gibt es ja schönere Lösungen aber die hier verbraucht ausser den paar DWORDs für die Pointer keinen zusätzlichen Speicher.
    If you open your Mind too much, your Brain will fall out.

  4. Folgender Benutzer sagt Danke zu zotos für den nützlichen Beitrag:

    McNugget (21.10.2009)

  5. #14
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Ähhh... Alle schlottern vor Pointern, da sie sehr abstrakt sind, das tue ich dann auch mal...
    (Mal sehen, wie lange ich brauche, es durch learning by doing zu kapieren.)

    Was ich nun nicht ganz verstehe: wo gebe ich die 20 Real-Werte rein? Ich muss doch irgendwie Daten reinreichen.
    So wie das jetzt ist, ist der Baustein doch abgeschlossen, oder??

    LERNEN WILL..



    Zwischenzeitlich habe ich mal testweise eine Struktur aus meinen Realwertem und einem timestamp gemacht.
    Hätte den Vorteil, dass man das dann so mit timestamp wegloggen könnte um es später noch mal mit excel etc. auszuwerten.
    Diese Struktur konnte ich wieder gut in mein Array schreiben. Aber ich hab mir auch die Zähne dran ausgebissen, die Werte aus dem Innern des Arrays in das Histogramm zu bekommen.

    Sehr sympathisch, dass Du das gleiche Problem hattest, das bedeutet, dass ich zum Teil schon auf dem richtigen Weg war..



    Bei der Lösung mit der Struktur, hatte mein Progrämmchen nur 12 ms Laufzeit, finde ich super.



    Gruss

    McNugget

  6. #15
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Eine Struktur mit Zusatzinformationen hätte halt das Problem das man mit dem Pointer Trick nicht arbeiten kann da das Histogramm das Array mit den Werten ja in einem Block erwartet.

    Dann bliebe Dir wohl nur die Alternative eine Schleife zu basteln die Dir aus Deinem Array der Struktur die relevanten Werte in ein extra Anzeige Array umkopiert.
    If you open your Mind too much, your Brain will fall out.

  7. #16
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Naja... Diese Schleife hätte ich ja schon aus den ersten Beiträgen in diesen Thread. Ich müsste es nur pro Kanal, den ich anzeigen möchte, instanziieren.

    Die Histogramm-Anzeige wäre mir aber gar nicht so wichtig wie eine Möglichkeit, die Daten aus dem Controller rauszubekommen und später auf dem PC zu visualisieren.


    Noch mal der Vollständigkeit halber: wie bekomme ich das zweidimensionale Array gefüllt?



    Gruss

    McNugget

  8. #17
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    ... und wüsste jemand ein ausführliches How-To, wie man Schleifen, Schieberegister und Arrays sauber in ST schreibt?

    Gruss und schönen Abend noch

    McNugget

  9. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... ein how-to-do für ST-Programmierung im Allgemeinen und Schleifen-Erstellung im Besonderen kenne ich nicht - man kann sich aber auch Schritt-für-Schritt da herein-arbeiten - ggf. in dem man seine bisherige Arbeit ins Forum stellt und bewerten läßt.

    Gruß
    LL

  10. #19
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Guten Morgen.

    Hmm, Na dann werde ich mich mal weiter reinfuchsen.
    Pascal Büchlein noch mal anlesen..


    Bezugnehmend auf den Beitrag von zotos von gestern 14:27 Uhr:
    ...und wie bekomme ich nun dieses zweidimensionale Array gefüllt?

    Gruss

    McNugget

  11. #20
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    In Dem Du die Werte in die einzelnen Zellen hineinschreibst z.B. mit einer Schleife.

    Ein zweidimensionales Array ist ja quasi eine Tabelle mit Zeilen und Spalten. Daher hat es eine x und eine y Koordinate.

    Datenspeicher[x,y] := MyRealValue;

    Im Prinzip musst DU doch nur den Code von Larry um die Information einer Spalte erweitern.
    If you open your Mind too much, your Brain will fall out.

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Array
    Von macmanay2010 im Forum Programmierstrategien
    Antworten: 8
    Letzter Beitrag: 17.07.2011, 21:46
  3. Twincat Webvisu mit Histogramm
    Von Pepper im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 11.01.2010, 20:08
  4. Array?????
    Von Adenauer im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 20.04.2006, 10:32
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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