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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Array für Histogramm

  1. #1
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits.

    Ich möchte ein Array mit Realwerten erstellen um diese in einem Histogramm darzustellen.

    Leider bin ich bisher kläglich gescheitert, wenn es darum ging, Arrays und "Schiebefunktionen" im Strukturierten Text zu definieren.

    Ich möchte ein Array mit 240 Elementen haben. Diese sollen im x-Minuten-Takt (definierbar) geschrieben und weitergeschoben werden.


    Wie müsste ich so etwas im strukturierten Text definieren?

    Muss ich für das Histogramm in das letzte Element des Arrays schreiben und "hoch-schieben"? Oder anders herum?

    Vielen Dank schon mal an: "wer immer sich erbarmt".



    Gruss

    McNugget
    Zitieren Zitieren Array für Histogramm  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    das ist zwar SCL-Code ... sollte aber im Wesentlichen für die zu gebrauchen sein :
    Code:
    FUNCTION_BLOCK FB100              
     
    VAR_INPUT
       neue_Daten : REAL ; 
       Takt_vor    : BOOL ;        // Schiebe-Speicher vor-takten
    END_VAR
    
    VAR
       Daten_Speicher : ARRAY [1..240] OF REAL ;
       FM_Takt : BOOL ;   
    END_VAR
    VAR_TEMP
       i  : INT ; // Schleifen-Variable
    END_VAR
     
    BEGIN
     
    IF Takt_vor AND NOT FM_Takt THEN 
       FOR i := 239 TO 1 BY -1 DO
           Daten_Speicher [i +1] := Daten_Speicher [i]  ;
       END_FOR ;
       Daten_Speicher [1] := neue_Daten  ;
    END_IF ;
    FM_Takt := Takt_vor ;
     
    END_FUNCTION_BLOCK
    Gruß
    LL

  3. #3
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Beitrag

    In der Regel macht man ein Array mit fester Länge und einen Schreib/Lese "Zeiger". Die Zeiger am Ende angelangt machen einen Wrap (Überlauf auf 0) . Das Rumkopieren kostet zuviel Zeit.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Nicht Schieben ...  

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    kommt immer darauf an, was man mit den Daten so vor hat. Ich sehe da nicht Schlimmes daran und der Zykluszeitbedarf für diese Verschiebe-Aktion, die alle paar hundert (oder tausend) Zyklen mal stattfindet hält sich sogar bei Siemens noch in Grenzen ...

    Gruß
    LL

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

    Standard

    Zitat Zitat von Topic
    Array für Histogramm
    Das Histogramm ist eine art Kurve die das Array visualisiert. Ob man hier schiebt oder nicht ist keine Frage der Zykluszeit sondern des Geschmacks. Bei den Histogrammen bevorzuge ich das Schieben der Werte. Bei anderen Anwendungen (FIFO und Co) vermeide ich das.
    If you open your Mind too much, your Brain will fall out.

  6. #6
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Falls du schon Arrays für Histogramme schieben musst, dann dürfte Memcpy performanter sein als Schleife, was vor allem bei nicht sehr rechenstarken Plattformen wichtig ist:

    IF Takt_vor AND NOT FM_Takt THEN
    MEMCPY(ADR(Daten_Speicher[2]), ADR(Daten_Speicher[1]), SIZEOF(Daten_Speicher) - SIZEOF(Daten_Speicher[1]));
    Daten_Speicher[1] := neue_Daten ;
    END_IF ;
    FM_Takt := Takt_vor ;

    Gruß,
    witkatz

  7. Folgender Benutzer sagt Danke zu witkatz für den nützlichen Beitrag:

    McNugget (21.10.2009)

  8. #7
    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

    Danke Euch allen.

    Super, wenn so etwas eine Diskussion auslöst, da kann man sehr gut mit lesen und die Gedankenansätze lernen.

    Also entweder Performance, oder eben Idiotensicherheit für mich..

    @Larry Laffer: Wie muss ich es schreiben, wenn ich das Histogramm nicht von links nach rechts sondern von rechts nach links beschreiben möchte?

    @Witkatz: Was genau macht die Funktion Memcpy und in welcher Bibliothe finde ich die??


    Gruss und guten Appetit

    McNugget

  9. #8
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Zitat Zitat von McNugget Beitrag anzeigen
    @Witkatz: Was genau macht die Funktion Memcpy und in welcher Bibliothe finde ich die??
    Hallo McNugget, im http://infosys.beckhoff.com/ findest du die Antwort:
    http://infosys.beckhoff.com/content/...sys_memcpy.htm

    Gruß und Mahlzeit,
    witkatz

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    die Schleife umgekehrt wäre dann so :
    Code:
    IF Takt_vor AND NOT FM_Takt THEN 
       FOR i := 2 TO 240 BY 1 DO
           Daten_Speicher [i -1] := Daten_Speicher [i]  ;
       END_FOR ;
       Daten_Speicher [240] := neue_Daten  ;
    END_IF ;
    FM_Takt := Takt_vor ;
    den Memcopy (bzw. dessen Syntax) kenne ich leider nicht - der sollte das aber auch können ... wahrscheinlich ungefähr so :
    Code:
    IF Takt_vor AND NOT FM_Takt THEN
       MEMCPY(ADR(Daten_Speicher[1]), ADR(Daten_Speicher[2]), SIZEOF(Daten_Speicher) - SIZEOF(Daten_Speicher[1]));
       Daten_Speicher[240] := neue_Daten ;
    END_IF ;
    FM_Takt := Takt_vor ;
    Gruß
    LL

  11. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    McNugget (21.10.2009)

  12. #10
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @witkatz: Das hatte ich natürlich nicht gesagt: Ich verwende Wago 750-841 mit Codesys 2.3 und der OSCAT.Lib V3.10.

    @Larry Laffer: Vielen Dank. Werde gleich mal ein wenig damit spielen.



    Wie kann ich diese Schleifen sicherer lernen? Gibt es ein howto für Dummies????


    Gruss

    McNugget

Ä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
  •