PDA

View Full Version : Gewicht umrechnen...



anne
07.06.2010, 11:43
Hallo Ihr,

brauche mal etwas Nachhilfe... ;)

Ich möchte zwei unterschiedliche Gewichtseinheiten, nämlich g und kg miteinander verlgeichen - aber das geht ja nicht:

L 200 // für 200kg
L 0,5 // für 0,5 kg oder 500g
>I
S M0.0

Muss ich da eine Formatsumrechnung machen - nur wie?

Lieben Dank!

Manfred Stangl
07.06.2010, 11:46
HI!
entweder du mul die kg *1000 od. div die g (ersteres besser) dann hast du immer ganzzahlen. nötigenfalls als double

Larry Laffer
07.06.2010, 11:47
Hallo Anne,
was du da gerade machst ist Äpfel und Schrauben vergleichen ...
Du mußt beide Variablen im gleichen Format haben (z.B. als REAL-Zahlen) und dann natürlich auch einen REAL-Vergleich durchführen :


L 200.0
L 0.5
>R
S M0.0

bzw.

L MD200
L MD204
>R
S M 0.0

Gruß
LL

volker
07.06.2010, 11:48
im format int lassen sich nur ganze zahlen darstellen

L 200.0 // für 200kg
L 0.5 // für 0,5 kg oder 500g
>R
S M0.0

der befehl um eine int in real zu wandeln ist dtr

also so
l 200
itd //kann men weglassen wenn man sicher ist, das keine negativen zahlen vorkommen
dtr
t md100

rostiger Nagel
07.06.2010, 11:50
ich würde versuchen im Int-Format zu bleiben. Jetzt kannst du das
ganze in Gramm rechnen oder die KG um eine 10er potenz erweitern.




für Gramm
L L#200 // für 200kg
L L#1000
*D
L L#500 // für 0,5 kg oder 500g
>D
S M0.0

oder

für Kilogramm mit einer Nachkommstelle
L 200
L 10
*I
L 5
>I
S M0.0

SPSKILLER
07.06.2010, 11:52
Hallo Ihr,

brauche mal etwas Nachhilfe... ;)

Ich möchte zwei unterschiedliche Gewichtseinheiten, nämlich g und kg miteinander verlgeichen - aber das geht ja nicht:

L 200 // für 200kg
L 0,5 // für 0,5 kg oder 500g
>I
S M0.0

Muss ich da eine Formatsumrechnung machen - nur wie?

Lieben Dank!

hi anne,

nix für ungut, aber das macht mich sprachlos.
Es sollte heutzutage doch jedem/jeder möglich sein g in kg umzurechnen.
Das ist nun wirklich kein Hexenwerk.

Aus dem Bauch raus würde ich die Variablen ins REAL Format bringen.
Für Vergleicher sollte das immer passen.

Bei Addition muss man die Bereiche betrachten, da es nicht mehr möglich ist zu 20t 1g zu addieren.

Micha

anne
07.06.2010, 12:02
Ja ok, danke!

Nun habe ich noch folgendes Problem:

In einem DB (DB6.DBW0) wird das Gewicht in kg eingetragen. Nun möchte ich im gleichen DB (DB6.DBW2) das Gewicht in g stehen haben - wie kann ich das machen?

L DB6.DBW0

?

T DB6.DBW2

@Micha: Ja, mathematisch ist die Umrechnung von g in kg oder umgekehrt natürlich kein Problem - aber das in einen SPS-Code zu schreiben, war mein Problem!

marlob
07.06.2010, 12:05
1 kg entspricht 1000 g
Das sollte die Frage eigentlich beantworten:rolleyes:
Du solltest nur aufpassen, das der wert nicht zu gross für ein DW wird.
Eventtuell ein Doppelwort benutzen

Larry Laffer
07.06.2010, 12:06
:confused: ... so wie du es auf dem taschenrechner machst, so ähnlich geht es auch in der SPS - das heißt da auch multiplizieren ...

Manfred Stangl
07.06.2010, 12:07
minimum 10 zeichen

Ja ok, danke!

Nun habe ich noch folgendes Problem:

In einem DB (DB6.DBW0) wird das Gewicht in kg eingetragen. Nun möchte ich im gleichen DB (DB6.DBW2) das Gewicht in g stehen haben - wie kann ich das machen?

L DB6.DBW0
L 1000
*I
T DB6.DBW2

@Micha: Ja, mathematisch ist die Umrechnung von g in kg oder umgekehrt natürlich kein Problem - aber das in einen SPS-Code zu schreiben, war mein Problem!

anne
07.06.2010, 12:12
Ja ok, danke für die Hilfe!

Im Nachhinein ist es logisch... selbst für mich. :p

marlob
07.06.2010, 12:16
Ja ok, danke für die Hilfe!

Im Nachhinein ist es logisch... selbst für mich. :p
Und dran denken das in einem WORD nur 65535 g (65,535 kg) gespeichert werden können.

vierlagig
07.06.2010, 12:21
Und dran denken das in einem WORD nur 65535 g (65,535 kg) gespeichert werden können.

was aber nur mit <>=D funktioniert ...
ansonsten eben 32767g

anne
07.06.2010, 12:22
Und dran denken das in einem WORD nur 65535 g (65,535 kg) gespeichert werden können.

Yep, danke für den Hinweis!

@vierlagig: wo nur 32767g?

vierlagig
07.06.2010, 12:25
Y
@vierlagig: wo nur 32767g?

mit INT ... stichwort: zweierkomplement

marlob
07.06.2010, 12:25
was aber nur mit <>=D funktioniert ...
ansonsten eben 32767g
Könnte auf jeden Fall zu wenig sein (in vielen Fällen) -> Doppelwort beutzen :rolleyes:

Gerhard K
07.06.2010, 12:41
Ja ok, danke!

Nun habe ich noch folgendes Problem:

In einem DB (DB6.DBW0) wird das Gewicht in kg eingetragen. Nun möchte ich im gleichen DB (DB6.DBW2) das Gewicht in g stehen haben - wie kann ich das machen?

L DB6.DBW0

?

T DB6.DBW2

@Micha: Ja, mathematisch ist die Umrechnung von g in kg oder umgekehrt natürlich kein Problem - aber das in einen SPS-Code zu schreiben, war mein Problem!

Sorry ich bin sprachlos.Das ist Grundschule.Ein 10-jähriger weiß wie das geht.:rolleyes:

Programmierst du wirklich Steuerungen, bzw. versuchst es??Ajajaja

Blockmove
07.06.2010, 13:53
Aus dem Bauch raus würde ich die Variablen ins REAL Format bringen.
Für Vergleicher sollte das immer passen.



Und genau DAS ist ein Riesenfehler.
Gerade Realzahlen machen aufgrund der Rundung Probleme bei Vergleichern. Ein simpler Vergleich auf Gleich geht bei Real nämlich meist schief!
Bei SPS sollte man - wann immer möglich - immer mit Int oder DINT arbeiten.

Gruß
Dieter

SPSKILLER
07.06.2010, 13:59
zeig mal ein Beispiel her

marlob
07.06.2010, 14:04
zeig mal ein Beispiel her

Das sagt Siemens dazu
Wie kann ich Real-Zahlen auf Gleichheit prüfen? (http://support.automation.siemens.com/WW/view/de/24000326)

marlob
07.06.2010, 14:06
Hier noch ein Link dazu
Wie genau kann ich mit REAL Zahlen rechnen, die in umfangreichen Formeln verwendet werden? (http://support.automation.siemens.com/WW/view/de/22172161)

Blockmove
07.06.2010, 14:13
Das sagt Siemens dazu
Wie kann ich Real-Zahlen auf Gleichheit prüfen? (http://support.automation.siemens.com/WW/view/de/24000326)

Danke Marlob
Jetzt musst ich nicht den Link bei Siemens raussuchen.
Ist halt ein nettes Beispiel für die Taschenrechner und Excel-Fraktion :p

Gruß
Dieter

anne
07.06.2010, 18:05
Sorry ich bin sprachlos.Das ist Grundschule.Ein 10-jähriger weiß wie das geht.:rolleyes:


Siehst du Gerhard, da ich keine 10 bin, wusste ich nicht, wie ich es in STEP7 umsetzen kann... :icon_mrgreen:

Aber jetzt weiß ich es ja...

Gerhard K
07.06.2010, 18:18
Siehst du Gerhard, da ich keine 10 bin, wusste ich nicht, wie ich es in STEP7 umsetzen kann... :icon_mrgreen:

Aber jetzt weiß ich es ja...

Mathematik ist bei Step7 nicht anders wie beim Taschenrechner,oder sonst wo. Beim umwandeln sowieso-> 1000g sind immer 1kg,egal welche Plattform:D.

Aber gut, dass du dich jetzt auskennst;)

pinolino
07.06.2010, 18:24
Was ist denn mit dem Forum los....?

pinolino
08.06.2010, 06:40
Aja, jetzt klappt es ja wieder – wollte gestern noch was hochladen, aber es ging nicht...


Eine Frage zu der Formatwandlung:

Wenn ich beispielsweise in einem DB einen Wert von 2000 angezeigt bekomme und dieser Wert 2kg entspricht – wie kann ich dann erreichen, dass das Gewicht in folgendem Format angezeigt wird:

00,000kg

Wenn ich den Wert durch 1000 teile, dann erhalte ich ja nur 2kg – möchte aber auch die drei Nachkommastellen angezeigt haben?

Hoffe, es ist nicht auch so eine "Grudschulfrage"!

Danke, pinolino

Manfred Stangl
08.06.2010, 06:49
wo willst du die angezeigt bekommen? Beim beobachten im DB oder auf einer HMI?

pinolino
08.06.2010, 06:57
Hallo Manfred,

nun auf einem HMI kann ich das Format ja entsprechend einstellen. Für weiterführende Rechnungen bräuchte ich das Format im DB.

pinolino
08.06.2010, 06:59
Muss ich da nach etwas Anderes wandeln?

Manfred Stangl
08.06.2010, 07:04
soweit ich weiß geht das nicht im DB mit 12,3456, wobei das schon geht nämlich in der exp Darstellung der REALzahl als 1.23456e+001. Im Programmeditor kannst du die Ansicht umstellen. Aber bei 00,000 wird er immer 0 anzeigen. Für deine Berechnungen müßte das ja wurscht sein, da es ja nur eine Darstellungsform ist.

pinolino
08.06.2010, 07:23
Ja ok, danke Manfred.

Um einen Vergleich anzustellen muss ja die gleiche Einheit vorliegen; dazu wurde gestern folgender Vorschlag angeboten:


für Gramm
L L#200 // für 200kg
L L#1000
*D
L L#500 // für 0,5 kg oder 500g
>D
S M0.0



Wird denn durch



L L#200 // für 200kg
L L#1000
*D


nicht der Wertebereich von "D" überschritten?

rostiger Nagel
08.06.2010, 07:25
Ja ok, danke Manfred.

Um einen Vergleich anzustellen muss ja die gleiche Einheit vorliegen; dazu wurde gestern folgender Vorschlag angeboten:


für Gramm
L L#200 // für 200kg
L L#1000
*D
L L#500 // für 0,5 kg oder 500g
>D
S M0.0



Wird denn durch



L L#200 // für 200kg
L L#1000
*D


nicht der Wertebereich von "D" überschritten?

nein der wertebereich "D" ist Doppelwortformat 2^31 + Vorzeichen,
damit kommst du in den Zahlenbereich der Staatsverschuldung ;)

Manfred Stangl
08.06.2010, 07:29
aus der sepp7 hilfe
für Gleitpunktzahlen:



Wertebereich der Gleitpunkzahlen


Anhand des oben dargestellten Gleitpunktformats ergeben sich die

kleinste Gleitpunktzahl = 1,0 * 2 hoch (1-127) = 1,0 * 2 hoch (-126)
= 1,175 495E-38 und
größte Gleitpunktzahl = 2-2 hoch (-23) * 2 hoch (254-127) = 2-2 hoch (-23) * 2 hoch (+127)
= 3,402 823E+38
Für Ganzzahlen:


-2 147 483 648 bis +2 147 483 647

pinolino
08.06.2010, 07:30
Ja danke, hab's grad gesehen.

Hatte beim Prog. einen Fehler gemacht... danke!

pinolino
08.06.2010, 07:44
Hab grad mal was eingegeben:



L 2000 // kg
L 1000 // Umrechnung in g
*I
L 500
<=I
= M 15.0


Es wird der Merker M15.0 gesetzt.

Bei Eingabe von <=D wird der Merker M15.0 nicht gesetzt - somit passt das ja dann!

rostiger Nagel
08.06.2010, 07:47
bei deinen Rechnungen mußt du auf den Zahlenbereich aufpassen,
I ist Integer und D ist Doppelinteger. Du überschreitest mit deiner
Rechnung 2000 x 1000 den Integer Zahlenbereich. Also bitte mit
Doppelinteger rechnen. Zahlenformate mit den vorindex "L" wie
L#1000 und Rechnung mit D wie *D.

vierlagig
08.06.2010, 07:48
Hab grad mal was eingegeben:



L 2000 // kg
L 1000 // Umrechnung in g
*I
L 500
<=I
= M 15.0


Bei mir wird jetzt der Merker M15.0 gesetzt?

nu, 2 000 000 INT, was in 16 bit ja nicht abbildbar ist und deswegen < 0, weil als 1000 0100 1000 0000, also -31616 interpretiert wird

pinolino
08.06.2010, 07:52
Also bitte mit
Doppelinteger rechnen. Zahlenformate mit den vorindex "L" wie
L#1000 und Rechnung mit D wie *D.

Es klappt aber auch ohne Angabe des Vorindex "L" - muss der echt angegeben werden?

@vierlagig: Ja danke, das war eben mein Fehler, dass ich versehentlich den Vergleich mit <=I durchgeführt hatte...

rostiger Nagel
08.06.2010, 08:05
das wird klappen, es ist halt eine sache der Philosphie...

pinolino
08.06.2010, 08:59
das wird klappen, es ist halt eine sache der Philosphie...

Ok, wofür steht denn dieses L# überhaupt - oder soll das nur auf das Format Doppelinteger hinweisen? :confused:

vierlagig
08.06.2010, 09:05
Ok, wofür steht denn dieses L# überhaupt - oder soll das nur auf das Format Doppelinteger hinweisen? :confused:

naja, "nur" ... es stellt sicher, dass eine negative zahl < -32768 auch richtig eingetragen wird und der gesamt 32bit-vorrat dementsprechend richtig befüllt wird.

rostiger Nagel
08.06.2010, 09:16
Ok, wofür steht denn dieses L# überhaupt - oder soll das nur auf das Format Doppelinteger hinweisen? :confused:

Wenn du jetzt eine Konstante ladest sagt das "L#" aus das es ein Wert
in Doppelwortformart (DINT) ist.

pinolino
08.06.2010, 09:55
naja, "nur" ... es stellt sicher, dass eine negative zahl < -32768 auch richtig eingetragen wird und der gesamt 32bit-vorrat dementsprechend richtig befüllt wird.

Was dann ohne das vorangestellte L# nicht der Fall wäre?

Danke!

Manfred Stangl
08.06.2010, 09:58
naja, "nur" ... es stellt sicher, dass eine negative zahl < -32768 auch richtig eingetragen wird und der gesamt 32bit-vorrat dementsprechend richtig befüllt wird......
nu, 2 000 000 INT, was in 16 bit ja nicht abbildbar ist und deswegen < 0, weil als 1000 0100 1000 0000, also -31616 interpretiert wird

eben deswegen, dann kannst du ein prob mit den negativen zahlen haben (Stichwort Zahlenkreis!)