Step 7 REAL Zahl mit Komma?

ds-90

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

ich habe das Problem, dass ich einen Analogausgang von einer REAL Zahl ansteuern lassen will. Ich habe das ganze jetzt mal im Versuch aufgebaut. Dazu habe ich den "unscale" Baustein (FC105 oder 106?) genommen. Das funktioniert soweit auch ganz gut. Das Problem ist jedoch folgendes: Den Wert, den ich "unscalen" will, ist ein Wert ohne Komma (zwischen 40 und 120). Damit der Baustein funktioniert, verlangt er jedoch einen Eingangswert mit Komma (z.B. 80.0). Wahrscheinlich ist das total einfach den Wert von 80 auf 80.0 umzuwandeln aber irgendwie hab ich da ne Wissenslücke :-?
Es wäre toll wenn mir da jemand helfen könnte :)
 
Zahl ohne Komma? Kein Real! Real hat immer ein Komma, auch wenn's vom Wert her 'ne ganze Zahl ist.
;)


Vlt. kannst Du ja mal einen relevanten Ausschnitt posten?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zahl ohne Komma? Kein Real! Real hat immer ein Komma, auch wenn's vom Wert her 'ne ganze Zahl ist.
...
Hier eine Zahl ohne Komma aber trotzdem Real: 1.2345:ROFLMAO:
Spass beiseite:
@ds-90
Hast du eine Integer Zahl? MW oder DW zum Beispiel
In AWL kannst du die mit
Code:
ITD
DTR
nach Real wandeln.

Ansonsten mal deinen Code zeigen wie hucki schon schrieb
 
Dazu habe ich den "unscale" Baustein (FC105 oder 106?) genommen. Das funktioniert soweit auch ganz gut.
Du bist so weit das du den FC106 Beustein in dein Projekt reinkopiert hast, aber beim eingabe von die Parameter scheitert es. Ist das richtig ?

Vielleicht hast du dein Zahlenwert in ein INT abgespeichert.
In den Fall kannst du einfach so machen:

L "myINT"
ITD
DTR
T "myREAL"

Und danach den REAL Wert auf FC106 übergeben.

Oder noch besser, alle Berechnungen die nicht um reine Zähler handelt mit REALs machen. Mit Ganzzahlen Berechnungen zu machen gehört zu den Vergangenheit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Code kann ich erst am Montag nachliefern aber der wird kommen ;)

Ich habe einen Wert aus der Maschine der zwischen 40 und 120 liegt. Ich hab das ganze dann mal im Versuch aufgebaut und über die Variablentabelle dann Werte zum Test über ein Merkerwort oder Doppelwort (bin ich mir grad nichtmehr sicher, schau ich aber nach) eingefügt. mit jetzt beispielsweise 80 hats nicht funktioniert, mit 80.0 hingegen schon, daher dachte ich jetzt das es an der Maschine das gleiche Problem geben wird da mir da die Werte auch nur als z.B. 80 angezeigt werden ohne Komma dahinter.

Jesper ich werde das mal mit dem Code von dir ausprobieren aber geht wie gesagt erst am Montag ;)
 
Welches Datenformat ist dein Wert, mit dem du den Baustein füttern willst? INT oder DINT? Es gibt in FUP auch unter der Rubrik Umwandler oder so Bausteine, die deine Zahl in eine Gleitkommazahl wandeln können.
 
Hallo,

so hier ist endlich das versprochene Bild, sorry das es solange gedauert hat. habs jetzt mit ITD und DTR probiert, leider hat das nicht geklappt, der Wert ändert sich nicht wenn ich die eingangsvariable ändere. hab davon auch mal ein bild gemacht.

So war "mein" Ursprung




Und so dann die neue Variante:





 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist unbehaglich dies anzuschauen. Es ist alles durcheinander.
Du verwendest MD1 und MD3.
MD3 kann in REAL sein, aber MD1 kann nicht ein INT sein weil es ist ein Doppelwort. MD1 kann ein DWORD, ein DINT oder ein REAL sein.
Also macht L MD1 .. ITD kein Sinn.

MD1 und MD3 überlapt einander !
MD1 besteht von MB1, MB2, MB3 und MB4.
MD3 besteht von MB3, MB4, MB5 und MB6.
Also sind MB3 und MB4 bestandteil von MD1 und MD3 !

Hinweise:
Immer auf gerade Byte-Zahl starten. Kein ungerade Byte-Zahl.
INTs und WORDs müssen immer mit 2 Bytes steigen. MW0-MW2-MW4 usw.
DINTs, DWORDs und REALS müssen immer mit 4 Bytes steigen. MD0-MD4-MD8 usw.

Dein Code für den Umwandlung auf REAL kommt nach FC106. Bist du sicher das es gibt kein Code das MD3 beeinflusst bevor nächsten Aufruf von FC106 ?

Woher stammt den ursprüclichen Wert, bevor Skalierung ?
Ist es ein REAL, ein INT oder ein DINT ?
 
Click mal mit der Maus auf den Unscale Baustein und dann "F1". Da bekommst du die zugehörige Hilfe angezeigt.
Dein Input-Wert muß eine Real-Zahl sein. Hast du eine INT oder DINT zwischen 40 und 120. so mußt du diese erst in eine Real wandeln.

Also vor dem Baustein:

L MD3
DTR
T MD 100 //das ist deine Realzahl für den IN des FC Unscale

In MD 3 sollte ein Wert zwischen 40 und 120 stehen

Am Ausgang des FC muß eine INT angetragen werden.
Diese sollte dann als Ergebnis einen Wert zwischen 0 und 27648 bzw. zwischen -27648 und +27648 annehmen. Je nachdem, wie du den M0.0 angesteuert hast!

Ret_Val 8 bedeutet Fehler -->

Fehlerinformation


Liegt der Eingabewert nicht in dem Bereich zwischen LO_LIM und HI_LIM, dann wird der Ausgang (OUT) an den nächsten Grenzwert (den oberen oder den unteren) für den angegebenen Bereich des jeweiligen Typs (BIPOLAR oder UNIPOLAR) gebunden und ein Fehler ausgegeben. Der Signalzustand von ENO wird auf "0" und RET_VAL wird auf W#16#0008 gesetzt.

Ich glaube, das Unscale-Ergebnis in dem Beispiel in der Siemens-Hilfe ist Müll (22 soll da lt. Siemens rauskommen, kann ich grad nicht nachvollziehen :-( ) zumindest in meiner Version, also nicht irritieren lassen.

PS: Ich schließe mich Jesper an, ungerade MD, DBW oder DBD ist kein guter Programmierstil!
 
Zuletzt bearbeitet:
Hallo,

habs jetzt genau so gemacht wie du geschrieben hast Ralle und es funktioniert genau so wie es soll! Vielen dank für die Hilfe. Bin einfach schon zulang aus dem Thema raus das is voll schlimm wenn man dann so "Feinheiten" einfach vergisst :(
 
Zurück
Oben