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

Ergebnis 1 bis 5 von 5

Thema: Skalierung eines nicht linearen Analogwerts

  1. #1
    Registriert seit
    20.01.2012
    Beiträge
    18
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen!

    Hat jemand eine Ahnung (oder gar ein Projektbeispiel) wie ich mit Step7 einen nicht linearen Analogwert - in meinem Fall den Widerstandswert eines Lichtsensors - Skalieren und "sinnvoll" für diverse Schaltaufgaben auswerten könnte?
    Meines wissens müsste es eine Lösung sein, in welche ich mehrere Messpunkte meiner Widerstandskurve eintragen kann.
    Die sollte möglichts mit einer S7-1200 realisierbar sein.

    Besten Dank an alle!
    Gruß Sebastian
    Totally Integrated Automation Portal
    STEP 7 Professional
    Version V13
    Zitieren Zitieren Skalierung eines nicht linearen Analogwerts  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Lies mal hier: lineare interpolation zwischen 20 punkten
    und dann schau dir die Oscat-Lib an, da gibt es wohl so etwas.
    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

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Krümi (13.12.2013)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Ich würde die Messpunkte in Excel eingeben und eine Näherungsformel suchen lassen.
    Falls die Näherungsformel zu komplex oder ungenau wird kann man immer noch die Interpolations-Tabelle verwenden.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Krümi (13.12.2013)

  6. #4
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi Krümi

    wie "nicht linear" ist er denn? quadratisch, kubisch, logarithmisch ... es gibt ja so viele Möglichkeiten.

    Wenn man gar nix weiß, dann braucht man vier Tabellen und dann kann man das abschnittsweise durch SCALE_X linear hin biegen.

    also in etwa so (ohne Rücksicht auf die konkreten Parameternamen und Positionen

    Code:
    for #i := 0 to #tablesize by 1
    if inmintab[#i] < #invalue and #invalue < inmaxtab[#i] then
    outvalue := SCALE_X( outmintab[#i], NORM_X( inmintab[#i], invalue, inmaxtab[#i] ), outmaxtab[#i]);
    end_if
    end_if
    Man kann das auch mit zwei Tabellen machen, dann muss man für die Ränder Ausnahmen machen.

    Code:
    for #i := 0 to #tablesize-1 by 1
    if intab[#i] < #invalue and #invalue < intab[#i+1] then
    outvalue := SCALE_X( outtab[#i], NORM_X( intab[#i], invalue, intab[#i+1] ), outab[#i+1]);
    end_if
    end_if

    Also das setzt sich jetzt aus linearen Stückchen zusammen. Wenn du besser weißt, wie "nicht linear" dein Input ist, dann ist PN/DP Vorschlag bestimmt besser.

    'n schön' Tach auch
    HB

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

    Krümi (13.12.2013)

  8. #5
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Oder man könnts auch mit einem Polynom lösen. Ich hab das mal so gemacht.

    Code:
    FUNCTION AI_scal: Void(*Umwandlungsoperation*)
    TITLE = 'REAL scalierung von Rohwert nach Out'
    VERSION : '1.0'
    AUTHOR  : vor
    NAME    : AI_scal
    FAMILY  : data
    
    
    (*Scaliert den Eingangswert mithilfe eines Polynomes*)
    (*Eignet sich z.B. zur Skallierung nichtlinearter Temperaturfühler*)
    {S7_tasklist:='false';
     S7_blockview:='small'}
    
    
    VAR_INPUT
           a0: REAL; // Offset
           a1: REAL; // Gain
           a2: REAL; // x^2
           a3: REAL; // x^3
          Raw: REAL; //
     LIM_X_UG: REAL; // Unteres Limit des Ausgangswertes
     LIM_X_OG: REAL; // Oberes Limit des Ausgangswertes
    
    
    END_VAR
    
    
    VAR_TEMP
     Act: REAL;
     END_VAR
    
    
    
    
    VAR_OUTPUT
     out: REAL;
    END_VAR    
        
        
    (*Eingang Raw umgerechnet*)
     BEGIN
    Act:= a0 + (a1 * Raw) + (a2 * Raw ** 2) + (a3 * Raw ** 3);
    
    
    (*Ausgang wird limitiert*)
    out:=LIMIT(Mn:=LIM_X_UG, IN:=Act, Mx:=LIM_X_OG); 
    
    
    END_FUNCTION
    mfG René

  9. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    Krümi (13.12.2013)

Ähnliche Themen

  1. Anfangswert eines CHAR wird nicht übernommen
    Von Bensen83 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.04.2012, 11:03
  2. Berechnung Umwandlung in linearen Funktion
    Von Ricko im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.12.2011, 23:32
  3. Zustände eines NICHT bearbeiteten FC's
    Von youfyouk im Forum Programmierstrategien
    Antworten: 10
    Letzter Beitrag: 11.02.2011, 10:33
  4. Umstellen der linearen Skalierung per Skript
    Von rbs_phoenix im Forum HMI
    Antworten: 1
    Letzter Beitrag: 27.08.2010, 17:43
  5. Abfrage eines DB in SCL.Warum geht es nicht
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 31.10.2005, 09:40

Stichworte

Lesezeichen

Berechtigungen

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