Wandlung Zahlenwerte

Martin L.

Level-1
Beiträge
219
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Profi´s

habe eine S7-300 CPU 317, damit werden Achsen mit Bosch-Rexroth Servoregler positioniert. Läuft alles prima.
Nun kommt zusätzlich eine Meßstation hinzu die vorab die Rohteile vermessen soll. Dafür wird ein Analoger Sensor 4-20 mA mit FC105
genutzt, Daten werden richtig gelesen, alles O.K.



Jetzt mein Problem:
Verfahrdaten DB222.DBD0 (Wert L#10080 in Status Variable Ansicht)
Messdaten DB122.DBD44 (Wert 0.186 in Status Variable Ansicht)

Habe mit DTB,DTR,Floor,Ceil etc versucht die Daten anzugleichen!!
Beispiel:

L DB122.DBD44 (Sensor Daten)
DTR
T DB122.DBD48 (gewandelte Sensor Daten)

L DB222.DBD0 (Verfahrdaten für den Servoregler)
L DB122.DBD48 ( Pluss Messdaten gewandelt vom Sensor)
+R
T DB222.DBD200 (Reale Verfahrdaten für Servo)

Die Daten müssen nur addiert werden, aber habe alle Wandlungsformate genutzt. Mir ist klar dass die Messdaten (DB122.DBD44) im Gleitpunktformat vorliegen.

Wie kann ich die Datenformate anpassen.

Vorab danke für eure Hilfe.
 
Die Achsdaten liegen meist in 1/1000 mm vor (Kann meistes eingestellt werden)
Aus dem FC105 kommt ja ein Real, aus dem regler aber Dint.
Das anpassen der Werte ist kein Problem, jedoch musst Du die größen anpassen (Hast Du nicht angegeben)

Wenn Der Analogsensor z.B. mm liefert , der Regler jedoch 1/1000mm so musst Du das erst auf einen Nenner bringen.

Beim Wandel ist schon richtig:
Code:
L DB222.DBD0 (Verfahrdaten für den Servoregler)
DTR 
L 1000.0
/R
L DB122.DBD48 ( Pluss Messdaten gewandelt vom Sensor)
+R
T DB222.DBD200 (Reale Verfahrdaten für Servo)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Achsdaten liegen meist in 1/1000 mm vor (Kann meistes eingestellt werden)
Aus dem FC105 kommt ja ein Real, aus dem regler aber Dint.
Das anpassen der Werte ist kein Problem, jedoch musst Du die größen anpassen (Hast Du nicht angegeben)

Wenn Der Analogsensor z.B. mm liefert , der Regler jedoch 1/1000mm so musst Du das erst auf einen Nenner bringen.

Beim Wandel ist schon richtig:
Code:
L DB222.DBD0 (Verfahrdaten für den Servoregler)
DTR 
L 1000.0
/R
L DB122.DBD48 ( Pluss Messdaten gewandelt vom Sensor)
+R
T DB222.DBD200 (Reale Verfahrdaten für Servo)

Wobei ich es unbedingt vorziehen würde, die Daten vom Sensor- in das Reglerformat zu wandeln.

Also vom Sensor (Real) in DINT wandeln, dann *1000 und zum Regler addieren. Realzahlen sind in der Genauigkeit begrenzt.
Code:
      L     #realSensor
      TRUNC 
      L     L#1000
      *D   
      L     #dintIstServo
      +D
      T     #dintZielServo
 
Im Grunde sehe ich das auch so,
in dem Beispiel sind aber die Reglersollwerte als Real.
Falls der Sollwert auch als DINT geschrieben werden muss dann kein Frage sollte es bei DINT bleiben.
 
Hallo Ralle & Jabba,

die Servo-Verfahrsollwerte vom Touchpanel zum Indradrive müssen Dint
sein. da liegt auch nicht dass Problem!!

In dr Variablen Ansicht sehe ich z.B. als Sollwert für den Servoregler
DBD22.DBD0 = L#10098 (Dint) (100,98 mm) O.K.
Messwert:
DB122.DBD44 = 0.186 (Gleitpunkt) (0.186 mm)

Diese Werte müssen addiert werden. da aber die Servoregler Daten,die nicht verändert werden sollten, da der Bosch-Rexroth Indradrive dass
Dint Format braucht, muss ich natürlich die Sensordaten auf das Dint Format anpassen und addieren!! Aber wie?
Mit Trunc zB. gehen mir alle Nachkommastellen verloren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wobei ich es unbedingt vorziehen würde, die Daten vom Sensor- in das Reglerformat zu wandeln.

Also vom Sensor (Real) in DINT wandeln, dann *1000 und zum Regler addieren. Realzahlen sind in der Genauigkeit begrenzt.
Code:
      L     #realSensor
      TRUNC 
      L     L#1000
      *D   
      L     #dintIstServo
      +D
      T     #dintZielServo


Nimm das Beispiel von Ralle und multipliziere erst mit 1000, dann klappts auch mit den Nachkommastellen.

Also :
Code:
      L     #realSensor
      L     1000.0
      *R
      TRUNC   
      L     #dintIstServo
      +D
      T     #dintZielServo

Stephan

Nachtrag:
Wenn du nicht sicher ausschließen kannst das du den Dint Bereich nicht überschreitest ist es auf jeden Fall noch sinnvoll das Overflow-Bit auszuwerten.
 
Zuletzt bearbeitet:
Hallo Ralle & Jabba,

die Servo-Verfahrsollwerte vom Touchpanel zum Indradrive müssen Dint
sein. da liegt auch nicht dass Problem!!

In dr Variablen Ansicht sehe ich z.B. als Sollwert für den Servoregler
DBD22.DBD0 = L#10098 (Dint) (100,98 mm) O.K.
Messwert:
DB122.DBD44 = 0.186 (Gleitpunkt) (0.186 mm)

Diese Werte müssen addiert werden. da aber die Servoregler Daten,die nicht verändert werden sollten, da der Bosch-Rexroth Indradrive dass
Dint Format braucht, muss ich natürlich die Sensordaten auf das Dint Format anpassen und addieren!! Aber wie?
Mit Trunc zB. gehen mir alle Nachkommastellen verloren.

Da Du in 1/100 mm die Werte vom Servo verarbeitest muss Du den Realwert erst mit 100.0 mutiplizieren und dann wandeln. Dabei geht dir aber die Rundung der letzten Stelle verloren 1/100mm.
Code:
//DBD22.DBD0 = L#10098 (Dint) (100,98 mm) O.K. 
// Messwert:
L DB122.DBD44 = 0.186 (Gleitpunkt) (0.186 mm)
L 100.0
*R                  //= 18.6 1/100mm
TRUNC            //=L#18 = 0.18mm
L #DIntIstServo
+D
T #DintSollServo
 
Zuletzt bearbeitet:
@Isch und Jabba

Yep, korrekt, in dem Falle erst multiplizieren.

RND statt TRUNC rundet beim Wandeln nach DINT auch noch.
 
Zuletzt bearbeitet:
Zurück
Oben