Skalierung in AWL

adi5

Level-2
Beiträge
55
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

wollte über den Analogeingang eine Spannung von 3 bis 8 Volt einlesen und auf ein Wert von 150 bis 240 skalieren.Hab einen Skalierbaustein in AWl geschrieben.Aber leider funktioniert er nicht richtig.Ich kann keinen Fehler finden.Vielleicht könnt ihr mir helfen.:razz:


Code:
      L     #Analogeingang
      DTR   
      T     #AnalogeingangReal

      L     #Xmax
      ITD   
      DTR   
      T     #ObergrenzeEinReal

      L     #Xmin
      ITD   
      DTR   
      T     #UntergrenzeEingangReal

      L     #YmaxNormierung
      L     #YminNormierung
      -R    
      T     #ErgebnisY

      L     #ObergrenzeEinReal
      L     #UntergrenzeEingangReal
      -R    
      L     #ErgebnisY
      /R    
      L     #AnalogeingangReal
      *R    
      T     #Ergebnis
Hier die Beschaltung des FB.
 

Anhänge

  • Aufzeichnen.JPG
    Aufzeichnen.JPG
    11,3 KB · Aufrufe: 71
Hallo, hier mach ich folgendes:

Code:
FUNCTION FC 105 : VOID
TITLE =Skalieren/Normieren von Analogsignalen zu Integer
//
//           Ogr_NB-Ugr_NB
//NormWert = -------------  x  (Ana_In - Ugr_EB) + Ugr_NB
//           Ogr_EB-Ugr_EB
//
VERSION : 0.1


VAR_INPUT
  Ana_In : WORD ;    //Analog Input
  Ogr_EB : REAL ;    //Obere Grenze Eingangsbereich
  Ugr_EB : REAL ;    //Untere Grenze Eingangsgereich
  Ogr_NB : REAL ;    //Obere Grenze Normierungsbereich
  Ugr_NB : REAL ;    //Untere Grenze Normierungsbereich
END_VAR
VAR_OUTPUT
  NormWert : INT ;    //Normierter Ausgangsert (Integer)
END_VAR
VAR_TEMP
  Ana_In_Real : REAL ;    //Eingangs-Analogwert in Real
  Delta_EB : REAL ;    //Differenz von Eingangsbereich
  Delta_NB : REAL ;    //Differenz von Normierungsbereich
END_VAR
BEGIN
NETWORK
TITLE =Eingangs-Analogwert in Real

      L     #Ana_In; 
      ITD   ; 
      DTR   ; 
      T     #Ana_In_Real; 
NETWORK
TITLE =Differenz von Eingangsbereich

      L     #Ogr_EB; 
      L     #Ugr_EB; 
      -R    ; 
      T     #Delta_EB; 
NETWORK
TITLE =Differenz von Normierungsbereich

      L     #Ogr_NB; 
      L     #Ugr_NB; 
      -R    ; 
      T     #Delta_NB; 
NETWORK
TITLE =

      L     #Ana_In_Real; 
      L     #Ugr_EB; 
      -R    ; 
      L     #Delta_NB; 
      *R    ; 
      L     #Delta_EB; 
      /R    ; 
      L     #Ugr_NB; 
      +R    ; 
      RND   ; 
      T     #NormWert; 
NETWORK
TITLE =Baustein-Ende

      BEA   ; 

END_FUNCTION
Ich wünsche weiter viel Erfolg!

S7_Programmer
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir fehlt ein wenig an deiner Frage etwas, ich würde gerne
die Variablen Deklaration sehen, um zu beurteilen ob das
Format passt.
Zusätzlich würde ich gerne deine Formel sehen, wie du das
berechnen würdest. Irgendwas fehlt mir da bei deinen Code.


hier mal eine Normierungsformel als beispiel
Code:
          OGRNB - UGRNB
REAW = ----------------- * ( AE - UGREB ) + UGRNB
          OGREB - UGREB
 
REAW   =  Normierter Analogwert
OGRNB  =  Obergrenze Eingangs-Nennbereich
UGRNB  =  Untergerenze Eingangs-Nennbereich
OGRNB  =  Obergrenze Normierungsbereich
UGRNB  =  Untergrenze Normierungsbereich
AE     =  Digitalisierter Analogeingabewert
 
hallo,

der FC105 von Siemes arbeitet nur bis zu den Grenzwerten der Analog-Karte.
Den vorgestellten Skalierbaustein kann man immer einsetzen (auch zum Umrechnen unabhängig von Analogwerten). Wenn am andere E/A Bereiche (Int/Dint/Real) will, muss man den Code bei den Umwandlungen entsprechend anpassen;).

Den Baustein habe ich einmal erstellt und ist x-mal im Einsatz.

Viele Grüße

S7_Programmer
 
Zurück
Oben