DWORD to Byte

hank12

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

habe an dem Ausgang des FB41 reglers einen REAL Ausgang. Gibt es eine Möglichkeit diesen Real-Wert (DWORD) in ein Byte zu wandeln?

Wollte den Block Actuator_3P von der oscat bibliothel hernehen, uind der verlangt bei IN den Datentyp Byte!

grüsse
 
Wenn sichergestellt werden kann, dass der Wertebereich eines Bytes ausreicht, dann ja. Zu beachten ist allerdings, dass ein Byte vorzeichenlos ist und je nach Regler auch negative Werte vorkommen können, die dann eventuell Ärger machen. Ansonsten heißt der Befehl RND. Dieser wandelt eine Realzahl in eine Ganzzahl (eigentlich DINT) und bei eingehaltenem Wertebrecih kann das Byte direkt verwendet werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Danke,

der Informationsgehalt ist ausreichend, da der Aktor sowieso eine kleinere Auflösung hat.

Aber DINT ist doch immer noch ein Doppelwort. Wie komm ich da auf 1 Byte runter?

grüsse
 
nimm das LSB von deinem DINT.
Wenn du z.B. dein DINT im MD0 (MB0-MB3) stehen hast dann nimmst du das MB3.
 
Hallo,

1 DWord = 2 Word = 4 Byte

indem du das rechte Byte lädst und weiterverarbeitest.

Du wandelst zwar in ein DINT (DW), aber wenn du im Bereich vom 0 bis 255 bleibst, wird für dein Ergebnis nur das rechte Byte benötigt.


Gruß

Heiner
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay,

vielen Dank für Eure beiträge hat mir schon geholfen.


Allerdings wie mache ich das dann andem Ausgang des PID reglers? Der gibt ja nach meiner Skalierung -100 (LMN_low)…+100(LMN_high) einen real wert heraus, der also zwischen -100 und +100 Liegt.

Wie bekomme ich diesen Wert -100…100 auf einen Wert 0….255? Oder wie muss ich die Skalierung anpassen?

Oder habe ich da jetzt ein Verständnisproblem?
 
also das Einfachste wäre jetzt:
-100 bis +100 | +100
gibt dann
0 bis +200 | *1.275
gibt dann
0 bis 255 :D

also erst plus 100 und dann mal 1,275 (Reihenfolge beachten)
danach noch wandeln
Code:
RND
T  MB10  //oder wohin du willst
 
Oder könnte ich auch:


Zuerst die Skalierung im FB41 -255...+255 anpassen. Sodass der Ausgang in REAL zwischen -255 und +255 liegt und dann
T MD1 //Abspeichern in MD1

L MD1
ABS //Absolutwertbildung (Aktor kann nur positive Werte)
T MD2
RND // Wandeln in Ganzzahl
T MB1


Wäre das korrekt so?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder könnte ich auch:


Zuerst die Skalierung im FB41 -255...+255 anpassen. Sodass der Ausgang in REAL zwischen -255 und +255 liegt und dann
T MD1 //Abspeichern in MD1

L MD1
ABS //Absolutwertbildung (Aktor kann nur positive Werte)
T MD2
RND // Wandeln in Ganzzahl
T MB1


Wäre das korrekt so?
Gefährliche Programmierart: MD 1 und MD 2 überlappen sich um drei Bytes! Das gibt Chaos. Darüber hinaus kann ein Byte nicht +/- 255 sondern maximal +127 / -128 (wenn mit Vorzeichen betrachtet, was ja CHAR wäre)
 
Gefährliche Programmierart: MD 1 und MD 2 überlappen sich um drei Bytes! Das gibt Chaos. Darüber hinaus kann ein Byte nicht +/- 255 sondern maximal +127 / -128 (wenn mit Vorzeichen betrachtet, was ja CHAR wäre)

okay ein kleiner Fehler von Mir:

natürlich MD1 und dann erst wieder MD 5 usw.

aber nach der Absolutwertbildung ergibt sich doch nach dem FB41 ein Wert von 0....+255

danach RND == 0...255 vorzeichenlos und dann in das Byte transferrieren

funktioniert das nicht?


Wie kann ich denn sagen, dass nur das z.Bsp. 3 Byte von dem Doppelwort in den MB100 z.Bsp. transferriert werden soll?
 
MD 1 besteht aus MB1 bis MB4. Also kannst du MB3 in dein MB 100 transferieren.
Es ist zwar kein Muss, aber Merkerdoppelworte sollte man immer an Adressen beginnen lassen, die ohne Rest durch 4 teilbar sind. Also MD0, MD4 usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt mal ganz was anderes ... ich habe mir soeben mal die Oscat Lib in aktueller Version (3.04) runtergeladen,
und der Baustein "Actuator_3P" erwartet bei IN ganz klar und eindeutig ein Real, und kein Byte ...

War mir nur nicht ganz sicher, da ich Oscat für Step7 bisher noch nie verwendet hatte.

Mfg
Manuel
 
entschuldigung, ein Schreibfehler: Actuator _2p


aber nochmal zu meiner Frage: aber nach der Absolutwertbildung ergibt sich doch nach dem FB41 ein Wert von 0....+255, wenn die Skalierung -255...+255 war

danach RND == 0...255 vorzeichenlos und dann in das Byte transferrieren

funktioniert das nicht?
 
MD 1 besteht aus MB1 bis MB4. Also kannst du MB3 in dein MB 100 transferieren.
Es ist zwar kein Muss, aber Merkerdoppelworte sollte man immer an Adressen beginnen lassen, die ohne Rest durch 4 teilbar sind. Also MD0, MD4 usw.

Ein MD10 wäre für mich auch ok. Aber ungerade Doppelwörter sind nicht gerade schön, tut man nicht, finde ich auch.

Gruß
Flinn
 
Ein MD10 wäre für mich auch ok. Aber ungerade Doppelwörter sind nicht gerade schön, tut man nicht, finde ich auch.

Gruß
Flinn
Das lassen wir auch noch durchgehen :)

@Gerri
man bekommt halt zu leicht Überlappungen und dadurch evtl. Fehler im Programm, wenn man willkürlich Adressen benutzt. Es steht aber jedem frei es trotzdem zu tun ;-)
 
Zurück
Oben