DINT in REAL Bereich 0 bis 4000

Jim Knopf

Level-1
Beiträge
62
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, ich habe einen Wertebereich von 0 bis 4000 als DINT diesen möchte ich als Real über eine AO Baugruppe raussicken. Leider kommt da momentan kein vernünftiger Wert an. Die Werte die ankommen verhalten sich logarithmisch statt linear.

Ich möchte halt konkrete Werte zwischen 0 und 4000 senden aber auch genauso emfangen.

Ich hab es schon mit einem FC105 Scale probiert und dem FC 106 Unscale.

Zur Erklärung ich bekomme über eine AI Baugruppe einen Wert den ich mit dem FC105 skaliere, sodaß dieser zwischen 0 und 4000 liegt. Nun habe ich das Problem das ich den beim rausschicken über die AO Baugruppe nicht wieder so bekomme.

AO und AI sind auf 4 bis 20 mA eingestellt.
Senden und letztendlich Empfangen tut das Signal eine ABB MP 200 auch über 4 bis 20 mA.

Was kann es sein? Hab mal gelesen das die Siemens AO nur INT können kein Real. Simmt das? Das Problem ist das die ABB MP 200 nur Real empfang kann. Gut ich könnte dort den Wert wandeln aber nur mit Umständen.
 
Ist Dein AO genau dasselbe Wert was Du als AI empfängst? Wenn so, dann brauchst Du den PEW Wert in dem PAW Wort zu kopieren.

Sonst brauchst Du nur Dein REAL, was Du mit FC105 auf 0 - 4000 skaliert hast, mit FC106 wieder in einem INT umzuwandeln und auf Dein AO schreiben. Dein ABB MP 200 sieht nur ein 4 - 20 mA Signal. Ob er dieses Signal danach als REAL oder INT behandelt ist irrelevant.

Dein logarithmisches Verhalten des AOs kommt davon dass der AO nur den unteren Wort des REALs liest und dies verhält sich eben so.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, das mit dem unscale FC106 habe ich schon probiert, leider bekomme ich es nicht skaliert.

Ich gebe dir mal den wichtigsten Auszug aus meinem Quelltext.

Im FC1 hole ich den Wert über die AI.
Im FC2 gebe ich den Wert wieder über die AI.

Der Wertebereich bleibt am AI wie am AO gleich. Nur im Programm benutze ich die einkommenden Werte zur Steuerung. Bereich 0 bis 4000.

Hier der die PEW AI im FC1:

1NW:

L "AI1"
ITD
DTR
L 5.500000e+001
-R
L 9.999999e-001
*R
RND
T MW 86

2NW:

U "false"
= L 12.0
BLD 103
CALL "FC105_Analogw_skalieren"
IN :=MW86
HI_LIM :=4.000000e+003
LO_LIM :=0.000000e+000
BIPOLAR:=L12.0
RET_VAL:=MW82
OUT :=#WBD_out
NOP 0

3NW:

L #WBD_out
RND
T MD 178

Wie muss ich den Wert jetzt im FC106 descalieren. Hab mit HI_LIM und LO_LIM schon rumprobiert, leider kein Erfolg.

mfg
Falk
 
Hallo Falk,

zuerst einmal was soll der Quatsch :confused:
L "AI1"
ITD
DTR
L 5.500000e+001
-R
L 9.999999e-001
*R
RND
T MW 86
.
.
L #WBD_out
RND
T MD 178
Dein PEW enthält den digitalisierten Wert des Stromsignals (0..27648 Einheiten) als 16Bit-Integer-Wert. Es reicht wenn du das PEW direkt an den Aufruf FC105 dranschreibst oder über den Umweg des
L PEWxx
T MW86

In der Lokalvariablen #WBD_out steht dann der skalierte Wert im REAL-Format (0.0 .. 4000.0 entsprechend dem anliegenden Stromsignal).

Am Aufruf der FC106 schreibst du dein #WBD_out (ohne Umwandlung in mittels RND in DINT) an den Eingangsparameter "IN". Die Grenzen HI_LIM und LO_LIM beschreibst du mit 4000.0 und 0.0 wie beim Aufruf der FC105.
Am Ausgang der FC106 steht dann im MW xx (bzw. PAW xx) der Wert 0..27648 (bipolar='false') bzw. -27648..+27648 (bipolar='true').

Schau dir aber ruhig mal die Hilfe zu den Standartfunktionen FC105 und FC106 an...

Gruß willi
 
Hi Falk,

Willi war schon ein Tick schneller, aber im Prinzip hat er alles gesagt, oder versuchst Du in NW1 den Eingangswert zu skalieren? Wenn so, dann sag uns was für Werte Du rein kriegst und was Du haben willst (und warum Du es nicht mit FC105 hin kriegst), denn das sieht ziemlich wild aus!

Das wichtigste aber ist das FC106 der genaue Gegenteil zu FC105 ist. Weil der Ausgang von FC105 ein REAL ist braucht FC106 als Eingang (IN) auch ein REAL. Wenn Du FC106 mit einem DINT futterst, wirst Du sicherlich Schrott herauskriegen!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, das hatte ich auch schon alles ausprobiert! Problem ist ich arbeite mit dem Wert im Programm, sodaß ich diesen Skalieren muss. Es ist nicht genüge getan den Wert durchzuschleifen ich muss den bearbeiteten Wert benutzten.

z.B. kommt ein konkreter Wert aus der ABB von 2000 diesen bekomme ich als 4 bis 20 mA Signal rein oder als 0 bis 27648. Das ist soweit ok, da ich mit diesem Wert gut arbeiten kann. Nur sollte der FC106 dann am Ausgang entweder wieder 2000 oder bei einer Berechnung auch diesen Wert mal 0,9 Anzeigen.

Klar ist das der konkrete Wert 2000 am Ausgang des FC105 nicht 2000 ist. Sondern zwischen 0 bis 27648 liegt. Oder irre ich? Das ist aber nicht das Problem sondern am Ausgang des FC106 also PAWxx soll dann 2000 oder bei Berechnung 1800 stehen (Wert mal 0,9).

Was muss ich dazu machen?
 
Wenn du von der ABB den Wert 2000 bekommst entspricht das einem Stromsignal von 12mA und somit 13824 Einheiten am PEW (0..4000 physikalischer Wert = 4..20mA = 0..27648 Einheiten am PEW), Richtig?

Diese 13824 Einheiten ergeben nach dem FC105 skaliert wieder deinen physikalischen Wert von 2000.0 (im #WBD_out).

Diesen #WBD_out nutzt du nun zu einer Berechnung bspw.

L #WBD_out // 2000.0
L 9.000000e-001 // * 0.9
*R
T MD100 // = 1800.0

das MD100 schreibst du dann an den Eingangsparameter IN des FC106.
Die 1800.0 ergeben dann am PAW einen Wert von 12442 Einheiten, die ca. 11,2 mA entsprechen (vorausgesetzt deine Ausgangskarte ist auf 4..20mA konfiguriert).
 
Zurück
Oben