Normierung mit FC 105

uz_ohio

Level-1
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
moin moin,

ich nutze eine ET200S zur steuerung meiner heizung (öl+holz).

zur normierung von analogeingangssignalen nutze ich den FC 105. meine belimos geben mir eine rückmeldung von 2-10V. wenn ich mit o.g. funktion die normierung durchführe, komme ich bei geschlossener klappe (2V) immer auf 20 oder 2, je nachdem wie man die grenzen festlegt.

U M 5.0
= L 0.0
BLD 103
CALL "SCALE"
IN :="Rueckm_prim_Bel"
HI_LIM :=1.000000e+002
LO_LIM :=0.000000e+000
4292132.jpg

BIPOLAR:=L0.0
RET_VAL:=MW102
OUT :="DB_AGT".Rueckm_prim_Bel
NOP 0



wer kann mir da einen tipp geben?

grüße
uwe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tipp:
Dreisatz, Linear

... erst mal danke für die antwort.

leider geht das nicht so einfach:
10V = 100%
2V = 0%

da hätte man entweder das problem der division durch null bwz. die multiplikation mit 0,

ich hatte mal eine grobe wertetabelle gemacht:
2V ~ 0%
4V ~ 25%
6V ~ 50%
8V ~ 75%
10V ~100%

grüße
uwe
 
Zuletzt bearbeitet:
Wenn du jetzt deine Wertetabelle noch nach unten, sprich 0V erweiterst,
hat sich deine Frage beantwortet, exakt dieser Wert repräsentiert dann LO_LIM.
 
danke nochmal, habe mich einfach zu blöd bei der negativen gleitpunktzahl angestellt (2.50000e-001 statt -2.500000e+001)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hab schon manchmal Probleme mit FC105 gehabt; insbesonders bei Messbereichsüberschreitungen.

Ich hab da selbst einen Skalier-FC gemacht:
Code:
FUNCTION FC 999 : 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
... und der Aufruf (Beispiel)
Code:
//Wert einlesen
      CALL  "FC_Skalier"
       Ana_In  :=PEW272
       Ogr_EB  :=2.764800e+004
       Ugr_EB  :=-2.764800e+004
       Ogr_NB  :=5.000000e+003
       Ugr_NB  :=-5.000000e+003
       NormWert:=MW4000
Du brauchst nur zu einem bestimmte Eingangswert den gewünschten Ausgangswert zuordnen (2Punkte) alles weitere Funktioniert.

Gruß
S7_programmer

Ich hoffe, das hilt Dir witer
 
Zurück
Oben