S5 Sättigungsdruck in Sättigungstemperatur Umrechnen

UnRockStar

Level-1
Beiträge
28
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich habe Folgendes Problem und zwar muss ich einen Sättigungsdruck in eine Sättigungstemperatur Umrechnen.

Leider gehen meine S5 Fähigkeiten nicht so weit.

Das ganze benötige ich um in einer Kälteanlage
eine Überhitzung auszurechnen die mir den Istwert für den OB251 Liefert.

Der Ob251 regelt dabei den Öffnungsgrad meines Elektronischen Expansionsventil kurz EEV

ich habe es bis jetzt mit 2 PT100 an Verdampfer ein und ausgang gemacht und mir einfach daraus ein deltaT errechnet.

Da ich aber ein Druckabfall über den Plattenwärmetauscher habe,
mess ich je nach Ventilöffnung einen Höheren wert als am Ausgang und bekomme somit einen negativen Überhitzungswert
was praktisch nicht sein kann.


Zurück zu meinem Problem:

Eingesetzte hardware:
S5 115U 943 2 Serielle schnittstellen

Das problem was ich habe ist das ich nicht weiß wie ich eine Wertetabelle in S5 einrichte,
um mir den Gemessenen Verdampfungsdruck am Ausgang des Wärmetauschers in eine VerdampfungsTemperatur umzurechnen.

Am ausgang sitzt noch ein PT100 Element was mir die Temperatur misst.

das Ventil muss so gesteuert werden das ich am ausgang ca 7K über der Verdampfungstemperatur bin.

Ich hab eine Tabelle angehängt um zu sehen was ich umrechnen möchte.

also ich hab in einem MW den Verdampfungsdruck und muss dies umrechnen und in ein anderes MW Schreiben.

z.b.

1 bar ---> -40°C Verdampfung
1,1 bar ---> -39°C Verdampfung
1,2 bar ---> -37°C Verdampfung
1,5 bar ---> -25°C Verdampfung
Wäre nett wenn mir hier der ein oder andere bei der lösung helfen könnte.
ich such keine eierlegende wollmilchsau dir mir hier die lösung als Code schreibt sondern jegendlich hilfe bei der umsetzung.

Danke Im vorraus .
 

Anhänge

  • R404.JPG
    R404.JPG
    227,7 KB · Aufrufe: 42
Es gibt im Prinzip 3 Möglichkeiten.

1. Du nimmst einen DB, trägst dort deine Werte ein (das geht leider nicht als Array oder Matrix, sondern nur einspaltig) und berechnest mit anhand des Druckes die indirekte Adresse, an welcher die zugehörige Temperatur steht.

2. Du trägst in den DB immer 1 Paar hintereinander ein:

0: Druck 1
1: Temp 1
2: Druck 2
3: Temp 2

Dann durchsuchst du in einer Schleife solange den DB, bis der Druck gefunden ist und zwar immer in jedem 2. DW. Das darauffolgende DW ist die zugehörige Temperatur.

3. Du trägst deine Werte in eine Exceltabelle ein, machst ein Diagramm daraus und läßt dir die interpolierte Formel dazu ausgeben. Mit dieser Formel programmierst du einen FB, der dann direkt Druck in Temp umrechnet.
Siehe dazu hier: http://www.sps-forum.de/showpost.php?p=19489&postcount=24

PS: Deine Tabelle stimmt aber nicht mit deinen Beispielwerten überein oder?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke unter 1 kann ich mir leider nichts genauer vorstellen

bei 2 seh ich das problem das ich mit meinem druck nie genau einen wert treffen werde.

3. hört sich schonmal gut an ich muss mich jetzt nur noch mal mit excel beschäftigen aber sieht schonmal nach einem guten ansatz aus.

wobei ich befürchte das die S5 nicht alle rechenoptionen bereit stellt?

Die beispiele stimmen nicht überein sollte nur verdeutlichen das es nicht Linear ist
 
Zuletzt bearbeitet:
zu 1.
Die Temperatur hast du ja in Grad und in 1K-Schritten. Du könntest nun in einem DB in jedem DW einen Druck hinterlegen. Begonnen wird bei der 1. Temperatur bei -57°. Dann in Einerschritten 41 Werte und du bist bei -16°. Nun kann man die Tabelle Schrittweise durchsuchen und schauen, ob der gesuchte Druck > als der in der Tabelle ist. Wenn ja, dann nächsten Wert, wenn nein, weiß man ja, bei welchem Zählschritt man ist. Ist man bei Zählschritt 1 währe man bei -57 °, bei Zählschritt 2 ist man bei -56° usw.

zu 2.
Ist eigentlich wie 1., nur daß man die Zählschritte zum Berechnen der Temperatur braucht, sondern immer die zum Druck gehörende Temperatur im folgenden Wert stehen hat.

zu 3.
Die Rechenoperationen könnten tatsächlich ein Problem darstellen, ich hab jetzt auf Anhieb nicht mehr alle Möglichkeiten und Einschränkungen der S5 im Kopf, bei S7 wäre das gar kein Problem. Geht auf jeden Fall, u.U. nur mit zusätzlichen Bausteinen oder/und mit umständlichen Rechenschritten.
 
zu 3.
Die Rechenoperationen könnten tatsächlich ein Problem darstellen, ich hab jetzt auf Anhieb nicht mehr alle Möglichkeiten und Einschränkungen der S5 im Kopf, bei S7 wäre das gar kein Problem. Geht auf jeden Fall, u.U. nur mit zusätzlichen Bausteinen oder/und mit umständlichen Rechenschritten.

Für die S5 gibt/gab es einen Satz von mathematischen FBs von Siemens für "kleines" Geld zu kaufen. Damit kannst du eigentlich nahezu alles erschlagen.
Ich würd aber das Problem auch mit einer Wertepaartabelle in DB lösen.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab mal ein bisschen mit Excel gestern herumversucht.

allerdings passt die Formel so garnicht die er mir gibt.
oder ich bin einfach zu blöd :ROFLMAO:

Also sollte dann in S5 so aussehen:

Code:
A DB30

L PW128
L DW1
>F
L DW2
T MW2

L PW128
L DW3
>F
L DW4
T MW2

L PW128
L DW5
>F
L DW6
T MW2


So oder überseh ich grad was,

so hatte ichs versucht aber hatte nicht geklappt.

Oder kann man die Rechenbausteine noch irgendwo bekommen?
 
Lade- und Transferbefehle sind VKE-Abhängig. Es muß also ein Sprung erfolgen. Etwa so:

Code:
A DB30

L PW128
L DW0
<F
SPB=T002

L DW1
T MW2
SPA = ENDE

T002:L PW128
L DW2
<F
SPB=T003

L DW3
T MW2
SPA=ENDE

L PW128
L DW4
<F
SPB= T004

L DW5
T MW2
SPA= ENDE

T004: ...

.
.
.

ENDE: BE

Besser wäre allerdings, das Ganze in einer Schleife abzuarbeiten (falls die Zykluszeit nicht zu kritisch wird) und mittels indirekter Adressierung und dem Bearbeite-Befehl zu arbeiten.

Etwa so:

Code:
A DB30

//Vorbelegen mit 0
L KF+0
T MW200
T MW2

//Wiedereinsprung für die Schleife
T003:B MW200
L DW0
T MW202

//Eingelesener Wert noch kleiner als Tabellenwert?
L PW128
L MW202
<F
SPB=T002  //wenn ja, dann prüfen, ob Anzahl der Schleifendurchläufe erreicht ist 

L MW200 //wenn nein, dann den zugehörigen Temperaturwert ind. auslesen
L KF+1
+F
T MW200
B MW200
L DW0
T MW2
SPA=ENDE //Wert ermittelt, fertig und ans Ende

//prüfen, ob Anzahl der Schleifendurchläufe erreicht ist 
T002: L MW200
L KF+80  //Anzahl der Wertepaare (0-81)
>=F
SPB=ENDE //wenn ja, dann ohne Ergebnis zum Ende, in MW2 steht Null
L MW200  //wenn nein, dann Zählmerker um 2 erhöhen und hoch springen zur Schleife
L KF+2
+F
T MW200
SPA=T003

ENDE: BE

Der DB geht mit DW 0 los, so hab ich das erstmal geschrieben. das ganze ist nur mal so aus dem Gedächtnis hingeschrieben, nicht getestet. Wer einen Fehler entdeckt, bitte posten!

PS: Der DB muß mind. 82 Einträge haben (0-81)!!!
Ist eine 41-er Schleife für die Zykluszeit zu belastend, muß das Ganze in mehrere Teilabfragen pro SPS-Zyklus aufgeteilt werden,
 
Zuletzt bearbeitet:
Ok danke,

mir wird grad wieder bewusst wie wenig ich doch mit S5 kann :cry:


das erste beispiel versteh ich inzwischen dank dem 115U handbuch.

beim 2ten Schau ich noch nicht ganz durch.

das mit der Zykluszeit könnte wirklich ein problem werden, da ich die überhitzung für insgesamt 4 Ventile Bestimmen muss die unabhängig voneinander sind.

desweiteren ruf ich ca 11 mal den OB251 auf.


kann mir jemand sagen wie der FB für S5 heißt um mit ln zu rechnen?

meine Formel sieht atm so aus : f(x)=0,66*1,08^X+56

wenn ich sie Umstelle nach f(x)=y bräuchte ich allerdings den Ln um das x da runter zu hohlen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
beim 2ten Schau ich noch nicht ganz durch.

das mit der Zykluszeit könnte wirklich ein problem werden, da ich die überhitzung für insgesamt 4 Ventile Bestimmen muss die unabhängig voneinander sind.

desweiteren ruf ich ca 11 mal den OB251 auf.


kann mir jemand sagen wie der FB für S5 heißt um mit ln zu rechnen?

meine Formel sieht atm so aus : f(x)=0,66*1,08^X+56

wenn ich sie Umstelle nach f(x)=y bräuchte ich allerdings den Ln um das x da runter zu hohlen

Die 115U ist ziemlich beschränkt, was Gleitpunkt-Operationen angegeht.
Mach es lieber in der Wertetabelle.wie von Ralle beschrieben.

Der "Trick" ist eigentlich nur der Bearbeite-Befehl.
Damit kannst du in S5 indirekt adressieren.

Wenn du z.B. DW5 laden willst, dann sieht das mit dem Bearbeite-Befehl so aus:

Code:
L KF+5
T MW200

B MW200
L DW0
Du musst also immer den nachfolgenden Befehl mitbetrachten.

Gruß
Dieter
 
Ok Dann werde ich es mit einer Wertetabelle machen wie vorgeschlagen.
hatte es anfangs auch mit einer wertetabelle versucht nur leider hab ich es falsch angegangen.

ich werd es in der woche mal an der Anlage testen und melde mich zurück obs klappt oder probleme gibt.
 
Ok Dann werde ich es mit einer Wertetabelle machen wie vorgeschlagen.
hatte es anfangs auch mit einer wertetabelle versucht nur leider hab ich es falsch angegangen.

ich werd es in der woche mal an der Anlage testen und melde mich zurück obs klappt oder probleme gibt.

Hast du nicht erstmal irgendeine S5 zum testen?
Wenn was falsch läuft, ist die SPS schnell mal im STOP oder Daten werden überschrieben.
Erst danach an die Anlage, wäre mein Vorschlag.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
a) Für die PT100 einzulesen gibt es festeingebaute FBs, ( FB250 ?, lange her :) die die Skalierung vornehmen. Ist in 115U- Handbuch.

b) die 943 kann nur 16-Bit-Zahlen, und zwar addieren und Subtrahieren, selbst zur Multiplikation und Division brauchst Du einen FB ( eingebaut, -> Handbuch ).

aus a) und b) -> Skaliere deine Werte so, daß Du möglicht viel von der 16-Bit-Zahl ausnutzt. ( Uberschreitung berücksichtigen, also maximal 16383).
Für z.B. 0 .. 100 Grad würde ich 0..10000 [0.01 Grad] nehmen.

Teile durch 100 -> Grad, Nachkommastellen

Baue eine Tabelle (DB),
nur die Y -Werte eintragen, X kannst Du vergessen, denn X ( Grad, Ganzzahlig ) gibt den Pointer.

im DW 0 = Wert für 0 Grad ... DW 100 = Wert für 100 Grad .. lieber noch ei paar Zahlen, denn FB 250 (?) begrenzt nicht auf OGR !

Also : Analogwert einlesen
FB250
in PW 128
OGR KF+10000
UGR KF+0
AUSG MW 100 // MW 100 [ 0.01 Grad]

Teile MW 100 durch 100 ( FB, s.o.)
-> MW 102 Grad Ganzzahl
-> MW 104 Grad Rest

// Jetzt die Interpolation:
//
A DB "Tabelle"
B MW 102
L DW 0
T MW 200 -> Wert für Grad [Ganzzahl]
L MW 102
l kf 1
+F
T MW 102 -> Ptr auf Grad +1

B MW 102
L DW 0
T MW 202 -> Wert für Grad + 1[Ganzzahl]

Wäre z.B. Grad = 25.35

Dann hätte MW 200 den Wert für 25 Grad und MW 202 den Wert für 26 Grad

Dazwischen interpolieren:
wir wissen: Schrittweite sind 100 * [0.01 Grad]

Also
L MW 202 // Grad +1
L MW 200 // Grad
-F
T MW 210 // Diffferenz bei 100 [0.01 Grad] an der Stelle 25 Grad s.o.

Da wir aber nur MW 104 = 35 ( gedachte 0.35) haben:

FB ( Multiplikation) ..
MW 210 // Differenz bei 100 [0.01 Grad]
MW 104 // Rest des Messwerts

-> MW 220 ( Multiplikationsergebnis)

Noch durch die stillschweigenden 100, weil 0.01 Grad in MW 104, teilen:

FB ( Division) ..
MW 220 ( Multiplikationsergebnis)
KF +100
-> MW230 Dies ist das Interpolationsergebnis für .35 Grad, von 25 Grad
aus betrachtet,

noch zusammenbauen

L MW 200 // Wert für Grad [Ganzzahl]
L MW 230 // Interpolationsergebnis
+F

.. et voila
Sollte recht genau sein, wenn die Tabelle genau war.

Kommt ohne Schleife aus, indir. adressierung geht schneller.

Gruss
Werner
 
Danke =)

ja das netzteil und die CPU943 Steht neben mir am pc hab sie mir extra aus der anlage zum testen mitgenommen damit ich ein bisschen versuchen kann wie ichs löse.

vielleicht sollte ich erwähnen das ich die temperaturen bei PT100 von -190 bis +120 nur benötige

dabei benötige ich keine 0,1°C schritte sondern es reicht mir auf 1-2°C genau

Aber Trotzdem ein Danke an heisch ist auch mal interresant zu sehen wie man es genau machen könnte =)


@ Ralle:

Wenn die CPU mal an der Anlage in Stop geht ist dies garnicht weiter schlimm, dann steht halt alles wieder, auserdem kann ich es testen ohne das eine gefahr aufkommt da die anlage so ausgelegt ist das bei stromausfall alles sicher stehen bleibt ein CPU Stop ist in dem fall so Ziemlich das selbe.


Ich Verlink jetzt mal in ein Anderes Forum wo man mal sehen kann was es für eine anlage überhaupt ist.


http://www.extremecooling.de/forum/kaskaden/903-5-stufige-kaskade-by-unrockstar.html

Nehmts mit der *vde* nicht zu genau ich bin kein gelernter schaltanlagenbauer sondern jegendlich Azubi für "Mechatroniker für Kältetechnik" im 3 lehrjahr.. :D
 
Zuletzt bearbeitet:
ENDE: BE[/CODE]Besser wäre allerdings, das Ganze in einer Schleife abzuarbeiten (falls die Zykluszeit nicht zu kritisch wird) und mittels indirekter Adressierung und dem Bearbeite-Befehl zu arbeiten.

Etwa so:

Code:
A DB50

//Vorbelegen mit 0
L KF+0
T MW200
T MW2

//Wiedereinsprung für die Schleife
T003:B MW200
L DW0
T MW202

//Eingelesener Wert noch kleiner als Tabellenwert?
L PW192
L MW202
>=F (  < auf >= abgeändert da es andersrum nicht funktioniert hatte)
SPB=T002  //wenn ja, dann prüfen, ob Anzahl der Schleifendurchläufe erreicht ist 

L MW200 //wenn nein, dann den zugehörigen Temperaturwert ind. auslesen
L KF+1
+F
T MW200
B MW200
L DW0
T MW2
T MW4 (MW 4 ist das ausgangswort wenn ich MW2 benutze steht zu oft 0 im ergebnis)
SPA=ENDE //Wert ermittelt, fertig und ans Ende

//prüfen, ob Anzahl der Schleifendurchläufe erreicht ist 
T002: L MW200
L KF+321  //Anzahl der Wertepaare (0-322)
>=F
SPB=ENDE //wenn ja, dann ohne Ergebnis zum Ende, in MW2 steht Null
L MW200  //wenn nein, dann Zählmerker um 2 erhöhen und hoch springen zur Schleife
L KF+2
+F
T MW200
SPA=T003

ENDE: BE


Ich hab Die werte oben mal abgeändert das es bei mir Funktioniert.

Danke Nochmal an dieser stelle =)


ich steh grad vor dem problem das ich nicht höher komme als -73

das liegt daran das ich den tempbereich von -200 bis +120 auflösen will und somit 640 DW´s brauche.

bei >DW255 kann ich nur noch mit den befehlen Lir und Tir arbeiten.

ich hab versucht es in die schleife reinzuarbeiten bekomm aber immer ein quitierungsverzug.

hat jemand eine Lösung oder ein ansatz dafür?


ist es eigentlich auch möglich mit LIR auf die Datenwörter 0-255 zuzugreifen das würde es einfacher machen.

sonst müsste ich ab 255 irgendwie auf lir umschalten?
 
Zurück
Oben