Analogwert skalieren!

bastler

Level-2
Beiträge
258
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich habe ein Problem mit der Skalierung eines Analogwertes. Habe schon im Forum gesucht, aber nichts richtiges gefunden, was mein Problem beheben kann.
Folgendes will ich machen:
Ein Ultraschallsensor soll den Füllstand eines Tank's überwachen und liefert mir 4-20mA. Dieser Analogwert wird über dezentrale Peripherie eingelesen und per Profibus als Word in einen DB an die CPU geschickt. Wenn ich den DB beobachte sehe ich, das bei 4mA ein Wert von 6500 angezeigt wird und bei 20mA ein Wert von 32767. 4mA bedeuten einen vollen Tank und soll 5000L entsprechen. 20mA bedeuten, der Tank ist leer, also 0L. Wie kann ich das skalieren? Im FC105 hab ich das schonmal versucht:

CALL FC 105
IN :=DB2.DBW0 //Eingangswort
HI_LIM :=0.000000e+000 //Skalierungsobergrenze
LO_LIM :=5.000000e+003 //Skalierungsuntergrenze
BIPOLAR:=M100.0 //unipolar
RET_VAL:=DB2.DBW20 //Fehlerinformation
OUT :=DB2.DBD16 //Skalierter Messwert in REAL

Im DB2.DBD16 bekomme ich bei 4mA einen Wert von ca. 3807.000 und bereits bei 16,8mA bekomme ich einen Wert von 0 angezeigt.
Was läuft denn da falsch?

MfG
bastler
 
in der hardware konfiguration den eingang als 4..20mA, statt auf 0..20mA einstellen und schon sollte es funktionieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in der hardware konfiguration den eingang als 4..20mA, statt auf 0..20mA einstellen und schon sollte es funktionieren

Hi,

@4L sagmal denkst du schon digital? Ich hab ein wenig gebraucht um sein Problem zu erkennen... aber bei dir scheint das eine etwas kürzere "Zykluszeit" zu sein :ROFLMAO:

Gruß

Philipp
 
In der Hardwarekonfig kann ich nichts ändern, es ist dezentrale Peripherie von Wago(750-465).
Diese Module haben keinen 4-20mA Eingang, sondern 0-20mA, hab ich aber auch erst gerade eben gesehen. Kann man da trotzdem die Skalierung irgendwie hinbekommen?

MfG
bastler
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Hardwarekonfig kann ich nichts ändern, es ist dezentrale Peripherie von Wago(750-465).
Diese Module haben keinen 4-20mA Eingang, sondern 0-20mA, hab ich aber auch erst gerade eben gesehen. Kann man da trotzdem die Skalierung irgendwie hinbekommen?

MfG
bastler

ja, du kannst das signal anpassen und zwar mit

y = 1,25 * x - 5

wobei x deinem 4..20mA Signal, y dann dem angepassten 0..20mA-Signal entspricht

andersrum gehts mit y = 0,8 *x + 4
 
Das hab ich mir schon gedacht, allerdings hab ich keinen Plan wie die Formel zur richtigen Berechnung aussehen muß.
(Bezogen auf die Antwort von OHGN)
MfG
bastler
 
Zuletzt bearbeitet:
Geh mal auf den FC105 und dann F1, da steht die Formel drin, die kannst du auch nutzen,mußt nur deine Werte entsprechend einsetzen.
 
... der Einwand war berechtigt - allerdings geht das Ding dann nicht in den Überlauf. Es werden ja nur noch 16 mA ausgewertet, die Skalierung ist aber auf 20mA ausgelegt. Das heißt, der Endwert müßte 20/16 des ursprünglichen Endwertes sein - also 6250.
Ich würde mir da allerdings auch eher eine eigene Skalierung bauen ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab mir die Formel vom FC105 angesehen, wenn ich da meine Werte eintrage, kommt aber nur Müll raus. Oder die zweite Möglichkeit, ich hab das Rechnen verlernt.

MfG
bastler
 
Sie kunnen das auch direct programmieren ohne FC105

Code:
In S7 code
l 32767  // Max ana wert = 0 liter
l DB2.DBW2    //AI
-I
ITD            
DTR
L  5000.0 // totaal tank inhalt
*R
L 26276.0       //= 32767 - 6500
/R
T DB2.DBW16 // inhoud tank in REAl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für Deine Gegebenheiten sollte das hier so funktionieren:
Code:
      L     DB2.DBW    0              //Rohwert
      L     6500                      //Nullpunkt anpassen
      -I    
      L     26267                     //den verbliebenen Maxwert subtrahieren (entspr.0L)
      -I    
      NEGI                            //negieren um eine positive Zahl zu erhalten 
      ITD   
      DTR                             // in eine Real wandeln
      L     1.903529e-001             //Faktor: (ergibt sich aus 5000 / 26267)
      *R    
      T     DB2.DBD   16              //Ergebnis
.
 
Zuletzt bearbeitet:
Habe Dir mal einen allgemein gültigen FC reingestellt, mit dem Du beliebige lineare Funktionen skalieren kannst. Ist nichts anderes als Y= mx+b.

Alle Eingänge sind vom Typ Real, Du müsstest bei Verwendung des FCs Deine Prozesswerte in Real wandeln.

Mit:
4 mA -> 5000 L (6500)
20 mA -> 0 L (32767)

würde der Aufruf so aussehen:

Prozesswort : Dein Wert von der Wago-Klemme
Real_1 : 5000.0
Prozess_1 : 6500.0
Real_2 : 0.0
Prozess_2 : 32767.0
Value : Dein Ergebnis-Füllstandswert als Real

Der FC:

Code:
[SIZE=2]// alle Parameter vom Typ Real
// In-Parameter 
- Prozesswort -> Wert vom Geber
- Real_1        -> Realwert bei Meßpunkt 1 
- Real_2        -> Realwert bei Meßpunkt 2
- Prozess_1   -> Prozesswert bei Meßpunkt 1
- Prozess_2   -> Prozesswert bei Meßpunkt 2
// temp_parameter
- m
- b
- dy
- dx
// out - Parameter 
- Value
 
 
L #Prozess_2
L #Prozess_1
-R 
T #dx
L #Real_2
L #Real_1
-R 
T #dy
 
L #dy
L #dx
/R 
T #m
 
L #m
L #Prozess_1
*R 
L -1.000000e+000
*R 
L #Real_1
+R 
T #b
 
L #m
L #Prozesswort
*R 
L #b
+R 
T #Value
[/SIZE]
 
Hallo
Dein Ultraschallgeber gibt dir ein Signal, das die Entfernung zu deiner Mediumoberflache angibt. Deshalb denke ich, dass du deine Skalierung mit 0 Liter und 5000 Liter noch mal überdenken solltest.

Gruß

Andreas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt läuft es,:D

Hab mir die Formel vom FC105 angesehen, wenn ich da meine Werte eintrage, kommt aber nur Müll raus. Oder die zweite Möglichkeit, ich hab das Rechnen verlernt.

es war natürlich mein Fehler, ich mich einfach nur verrechnet.

Znarf, was meinst du genau damit, Behälterfüllstände werden doch meist mit Ultraschallsensoren abgefragt, zumindest kenn ich das so.

MfG
bastler
 
ich glaub znarf möchte dich darauf hinweisen, dass die auflösung des 4..20mA-signals nicht optimal ist um auf 0-5000 skaliert zu werden, geeigneter wäre eine skalierung auf 0..100% ... zumindest würde ich das so machen :rolleyes:
 
Zurück
Oben