Normieren von DINT

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen Bräuchte mal wieder eure Hilfe.

Ich weiß, das es schon das Thema mit der normierung gibt aber ich steig da nicht wirklich durch

Folgendes Problem


Ich bekomme einen Wert (DINT) den ich Skalieren möchte
Meßbereich Anfang 0
Meßbereich Ende 1500

Dieser wert soll am Ende als Normierter Real Wert ausgegeben werde
z.b.
Meßbereich Anfang 0
Meßbereich Ende 10

Wie stell ich das jetzt an. Ich hab mal was von einem Faktor gelesen usw. aber ich blick da immoment noch nicht durch wie man so einen Wert Normiert.
Es gibt zwar den FC105 aber ich möchte einen einen FC für diese Geschichte.


Wäre super wenn ihr mich grundsätzlich aufklären würdet wie man selber Normiert und wie ich mein Problem am besten angehe.

vielen dank

Tobi
 
FUNCTION "Analogwerte 0/4 bis 20mA" : VOID
TITLE =Analogwert einlesen 0/4 - 20mA
//
//Beschreibung : Aus Stoerung StUbS und StUbL wir eine Stoerung StUbS_L.
AUTHOR : 'Kleißler'
FAMILY : 'S7-300'
NAME : SAnalog
VERSION : 0.1


VAR_INPUT
PEW : WORD ; //Analogeingang (z.B.EW256)
NrmUGR : REAL ; //UGR der Normierung
NrmOGR : REAL ; //OGR der Normierung
END_VAR
VAR_IN_OUT
Xw : REAL ; //Analogwert normiert
StDrB : BOOL ; //Drahtbruch
StUbS_L : BOOL ; //Uebersteuerung / Ueberlauf
END_VAR
BEGIN
NETWORK
TITLE =Analogwert 0/4 - 20 mA normieren
//Nach folgenden Formeln wird die Normierung berechnet:
//-----------------------------------------------------
//XA =((OGR - UGR)/27648 * EW) + UGR
//Bei Drahtbruch wird XA auf OGR gesetzt.
//
//Darstellung des digitalisierten Meßwertes einer Analogeingabebaugruppe :
//------------------------------------------------------------------------
// 0 bis 20 mA ! 4 bis 20 mA ! Inkremente ! Bereich
//-------------!-------------!------------!---------
// > 23,515 ! > 22,810 ! 32767 ! Überlauf
// ! ! !
//-------------!-------------!------------!---------
// 23,515 ! 22,810 ! 32511 !
// . ! . ! . !Übersteuer-
// . ! . ! . !ungsbereich
// 20,0007 ! 20,0005 ! 27649 !
//-------------!-------------!------------!---------
// 20,000 ! 20,000 ! 27648 !
// 14,998 ! 16,000 ! 20736 !
// . ! . ! . !Nennbereich
// . ! . ! . !
// 0 ! 4 ! 0 !
//-------------!-------------!------------!---------
// -0,0007 ! 3,9995 ! -1 !
// . ! . ! . !Untersteuer-
// . ! . ! . !ungsbereich
// -3,5185 ! 1,1852 ! -4864 !
//-------------!-------------!------------!---------
// <-3,5185 ! <1,1852 ! -32768 !Unterlauf
//
//
//
//
//
UN M 77.7; //-- Stoerung quittieren ?? --
SPB _000; //>>nein,
R #StDrB; //ja, Drahtbruch
R #StUbS_L; //Übersteuerung / Überlauf
_000: L -1000; //-- Drahtbruch ?? --
L #PEW; //Analogeingang
>I ;
S #StDrB; //ja,Drahtbruch
L 28525; //-- Übersteuerung / Überlauf ?? --
>=I ;
TAK ;
S #StUbS_L; //ja,Übersteuerungsbereich
L #NrmOGR; //nein, -- Einheiten pro Inkrement ausrechen -- / oberer Grenzwert
L #NrmUGR; //unterer Grenzwert
-R ; //Normierungsbereich
L 2.764800e+004; //0/4 bis 20 mA entsprechen 27648 Inkremente
/R ; //1 Inkrement entspricht (Ergebnis) Einheit
L #PEW; //Analogeingang
ITD ; //16 Bit Zahl nach 32 Bit Zahl wandeln
DTR ; //Integer nach Real wandeln
*R ; //Normierter Bereich
L #NrmUGR; //unterer Grenzwert
+R ;
T #Xw; //Istwert in normiert
END_FUNCTION

Mit dieser Funktion mache ich das
 
vielen dank für die hilfe nur komme ich da nicht weiter.
MIr fehlen die grundsätze für die normierung

Wie kann ich die werte berechnen und und und .
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tobi,

Da deine Bereiche bei "0" beginnen, kannst du deine Normierung mit einer einfachen Verhältnisgleichung durchführen.
X ist dein Eingangswert, Y dein Ausgangswert.

Code:
X     1500
-  =  ----
Y      10

      10 * X     X
Y  =  ------  = ---
       1500     150
       

In Step7 sieht das dann so aus:

      L     #X
      DTR   
      L     1.500000e+002
      /R    
      T     #Y

Gruss, Onkel
 
Zurück
Oben