Analogwertverarbeitung

bluesky

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, habe folgendes Problem,

Über eine SM331 soll ein Analoger Wert 4-20 ma eingelesen werden und auf eine Panel als Wegstrecke engezeigt werden, (0-12,7 mm).

Folgenden Programmteil habe ich dazu geschrieben:

L PEW 256
ITD //16 in 32 Bit umwandeln
DTR //32 Bit in Gleitpunktzahl
L 2.764800e+004
/R
L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
*R
L 0.000000e+000 // +0mm (Offset)
+R
RND
T MW 20 //nur für test
T "Allg OP->Status".d_6

Dieser funktioniert, nun soll aber mit einer genauigkeit von 2 nachkommastellen angezeigt werden.

Meine Idee:

L PEW 256
ITD //16 in 32 Bit umwandeln
DTR //32 Bit in Gleitpunktzahl
L 2.764800e+004
/R
L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
*R
L 0.000000e+000 // +0mm (Offset)
+R
L 100 // Multiplikation mit 100
*R
T MW 20 //nur für test
T "Allg OP->Status".d_6

Im Simulator läuft es, in der CPU aber nicht, ist das der falsche Lösungsansatz, kann man die Berechnung besser machen/ander???

Vielen Dank für die Hilfe im Vorraus.

Grüsse bluesky
 
Code:
blueskys Idee:
 
L PEW 256
ITD //16 in 32 Bit umwandeln
DTR //32 Bit in Gleitpunktzahl
L 2.764800e+004
/R 
L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
*R 
L 0.000000e+000 // +0mm (Offset)
+R
[COLOR=red]L 100 // Multiplikation mit 100 [/COLOR]
[COLOR=red]*R [/COLOR]
T MW 20 //nur für test
T "Allg OP->Status".d_6
müsste das nicht

Code:
[COLOR=red]L 1.000000e+002 // Multiplikation mit 100 [/COLOR]
[COLOR=red]*R [/COLOR]
und

Code:
T MD 20 //nur für test
heißen?!?
 
Ja richtig, so würde ich allerdings bei meiner Gleitpunktzahl bleiben und müsste diese dann mit RND Runden, Mir war nur aufgefallen, das er bei dem momentigen Code direkt in die Festkommazahl umwandelt, aber eventuell hängt sich die CPU daran auf??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja richtig, so würde ich allerdings bei meiner Gleitpunktzahl bleiben und müsste diese dann mit RND Runden, Mir war nur aufgefallen, das er bei dem momentigen Code direkt in die Festkommazahl umwandelt, aber eventuell hängt sich die CPU daran auf??

S CPUs kennen keine Festkommazahlen!
die multiplikation sollte im richtigen format erfolgen PUNKT
 
Danke für die schnelle Hilfe, daran lags, seltsamerweise hat der Simulator auch mit der Vermischung Gleitkomma Real gearbeitet, aber die Cpu nicht. Mit dem folgenden Code funktioniert es nun.


L PEW 256
ITD //16 in 32 Bit umwandeln
DTR //32 Bit in Gleitpunktzahl
L 2.764800e+004
/R
L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
*R
L 0.000000e+000 // +0mm (Offset)
+R
L 1.000000e+002 // Multiplikation mit 100
*R
RND
T MD 20 //nur für test
T "Allg OP->Status".d_6

Vielen Dank!!!!
 
Hallo Bluesky,

wenn Du die Zahl als Festpunkt übergeben willst geht das entweder so:
Code:
L PEW 256
ITD //16 in 32 Bit umwandeln
DTR //32 Bit in Gleitpunktzahl
L 2.764800e+004
/R 
L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
*R 
L 0.000000e+000 // +0mm (Offset)
+R 
RND 
L 100
*I
T MW 20 //nur für test
T "Allg OP->Status".d_6
oder so:
Code:
L PEW 256
ITD //16 in 32 Bit umwandeln
DTR //32 Bit in Gleitpunktzahl
L 2.764800e+004
/R 
L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
*R 
L 0.000000e+000 // +0mm (Offset)
+R 
L 1.000000e+002
*R
RND
T MW 20 //nur für test
T "Allg OP->Status".d_6
Oder aber Du übergibst eine Realzahl ans OP. (Änderungen am OP musst Du ja eh machen,
wegen der Kommastellen). Dann muss Du aber auch Deinen DB anpassen und "Allg OP->Status".d_6
als REAL deklarieren. Dann sähe der Code so aus:
Code:
 L PEW 256
 ITD //16 in 32 Bit umwandeln
 DTR //32 Bit in Gleitpunktzahl
 L 2.764800e+004
 /R 
 L 1.270000e+001 //Multiplikation mit 12,7mm (12,7-0)
 *R 
 L 0.000000e+000 // +0mm (Offset)
 +R 
T MD 20 //nur für test
 T "Allg OP->Status".d_6

Grüße
Gebs

P.S. Wenn Du die Zahl rundest, brauchst Du kein MD.
 
Zurück
Oben