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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Wertetabelle erstellen

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich ich möchte eine wertetabelle erstellen. Habe eine Formel, an dieser soll nach jeder Berchnung ein wert um 1 erhöt werden. Das ergebinis soll in eine Array INT gespeichert werden. Es sollten ca 100 werte sein.

    Mein Problem ist das ich nur FUP behersche. Gibt es da einen Baustein ?
    Oder muss ich mit in AWL einen schreiben ? Wenn ja wie ?

    Zitieren Zitieren Wertetabelle erstellen  

  2. #2
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.532
    Danke
    1.152
    Erhielt 1.253 Danke für 982 Beiträge

    Cool

    In FUP ist das kaum möglich.
    In AWL geht es.
    Ich würde es in SCL lösen. Damit ist es deutlich einfacher als in AWL.

    Gruß
    Dieter

  3. #3
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Ich benötige einen Baustein den ich dann in fup verwenden kann.

    Wie schreibt man den in scl ?

  4. #4
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.532
    Danke
    1.152
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    Mit SCl erstelltst du normale Bausteine, also FC oder FB. Die damit erstellten Bausteine kannst du ganz normal von FUP,KOP oder sonst was aufrufen und mit Parametern versehen.

    Gruß
    Dieter

  5. #5
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo habe einen scl erstelle. Leider funtioniert es nicht wenn die sps Anlauft. Kann es am array liegen ?
    Rote Funktionen sind die einselnen Punkte um einen Graf zu erstellen.

    Meine Berechnung geht aber nicht das übertragen der einzelnen Punktie in das Array


    Hier mal das SCL
    FUNCTION FC001 : INT

    (*********************************************************
    Lineare Funktion F(y)= m*x+b
    ***********************************************************)
    VAR_INPUT
    Y1 : INT;
    X1 : INT;
    Y2 : INT;
    X2 : INT;
    Ausentemp : REAL;

    END_VAR

    VAR_OUTPUT
    Fy : REAL;
    Wertetabelle : ARRAY [0..40] OF INT;


    END_VAR

    VAR
    Y1R : REAL;
    X1R : REAL;
    Y2R : REAL;
    X2R : REAL;
    i :INT;
    iR : REAL;
    Ergebnis: REAL;

    END_VAR

    BEGIN

    Y1R :=INT_TO_REAL (Y1);
    X1R :=INT_TO_REAL (X1);
    Y2R :=INT_TO_REAL (Y2);
    X2R :=INT_TO_REAL (X2);


    Fy:= (Y2R - Y1R)/(X2R - X1R)* Ausentemp +(Y1R - ((Y2R - Y1R)/(X2R - X1R))*X1R);


    FOR i := 18 TO 100 BY +2 DO
    Wertetabelle [i]:= i ;
    iR :=INT_TO_REAL (i);
    Ergebnis:= (Y2R - Y1R)/(X2R - X1R)* (iR+Y1R) +(Y1R - ((Y2R - Y1R)/(X2R - X1R))*X1R);
    Wertetabelle [i] :=REAL_TO_INT (Ergebnis);


    END_FOR;


    FC001 := 100;

    END_FUNCTION

    Hier der OB1
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg ob1.JPG (29,3 KB, 18x aufgerufen)
    Geändert von emilio20 (14.07.2011 um 04:29 Uhr)

  6. #6
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hi,
    das einzige was mir auf die schnelle auffällt, ist, dass deine FOR Schleife Grösser ist als dein Array.
    Dein Array geht bis 40, deine Schleife bis 100.
    Somit schreibst du über dein Array hinaus..

    Gruss Andi
    Wenn ich einen meiner Finger in eines deiner Nasenlöcher stecke, haben wir beide nen Finger in der Nase

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.261
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Da du dein Array als Out deklarierst, mußt du darauf achten, alle Elemente zu beschreiben. Die Elemente, die von deiner Schleife gar nicht beschrieben werden, sind undefiniert und können alle beliebigen Werte annehmen. Es macht also sinn, das Array entweder vorab mit 0 (oder einem anderen Wert) zu befüllen oder in der Schleife alle Elemente von 0 bis 40 zu berechnen und in das Array einzutragen. Ansonsten gilt natürlich, was im vorigen Beitrag bereits gesagt wurde, das Array ist zu kurz.

    PS: wenn die Array-Elementt nicht unbedingt bei den Werten I-Werten liegen müssen, könnte man mit 2 Indizees arbeiten, einen für das Beschreiben des Arrays (0-40) und einen für die Berechnung (18-100 in Zweierschritten).
    Geändert von Ralle (14.07.2011 um 08:37 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo der Fehler mit der Array von 18 bis 100 habe ich vergessen zu ändern. Hatte erst 0-40 und als BY +1
    Hat aber auch nicht funktoniert.

    Wie beschreibe ich das komplette Array.

    So habe ich es jetzt

    FUNCTION FC001 : INT

    (*********************************************************
    Lineare Funktion F(y)= m*x+b
    ***********************************************************)
    VAR_INPUT
    Y1 : INT;
    X1 : INT;
    Y2 : INT;
    X2 : INT;
    Ausentemp : REAL;

    END_VAR

    VAR_OUTPUT
    Fy : REAL;
    Wertetabelle : ARRAY [0..40] OF INT;


    END_VAR

    VAR
    Y1R : REAL;
    X1R : REAL;
    Y2R : REAL;
    X2R : REAL;
    i :INT;
    iR : REAL;
    Ergebnis: REAL;
    END_VAR

    BEGIN

    Y1R :=INT_TO_REAL (Y1);
    X1R :=INT_TO_REAL (X1);
    Y2R :=INT_TO_REAL (Y2);
    X2R :=INT_TO_REAL (X2);


    Fy:= (Y2R - Y1R)/(X2R - X1R)* Ausentemp +(Y1R - ((Y2R - Y1R)/(X2R - X1R))*X1R);


    FOR i := 0 TO 40 BY +1 DO
    Wertetabelle [i]:= i ;
    iR :=INT_TO_REAL (i);
    Ergebnis:= (Y2R - Y1R)/(X2R - X1R)* (iR+Y1R) +(Y1R - ((Y2R - Y1R)/(X2R - X1R))*X1R);
    Wertetabelle [i] :=REAL_TO_INT (Ergebnis);

    END_FOR;


    FC001 := 100;

    END_FUNCTION


    Kann mir jemand einfüge was geändert werden muss??
    Geändert von emilio20 (15.07.2011 um 00:13 Uhr)

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Zitat Zitat von emilio20 Beitrag anzeigen
    Wie beschreibe ich das komplette Array.
    Tut es das denn nicht?

  10. #10
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich woll doch erst das array mit 0 füllen ? das fehlt doch noch ?

Ähnliche Themen

  1. LDB erstellen
    Von Servernexus im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.02.2012, 19:19
  2. UDT in SCL erstellen
    Von Felse im Forum Simatic
    Antworten: 33
    Letzter Beitrag: 11.09.2009, 09:39
  3. FB/FC erstellen
    Von Black Scorpion im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 02.05.2008, 18:24
  4. FB erstellen?
    Von ottopaul im Forum Simatic
    Antworten: 39
    Letzter Beitrag: 29.03.2008, 13:25
  5. Kurverdarstellung und Wertetabelle
    Von Anonymous im Forum HMI
    Antworten: 1
    Letzter Beitrag: 10.05.2004, 21:10

Lesezeichen

Berechtigungen

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