Step 7 Msb, msb-1, lsb

RainerP

Level-1
Beiträge
26
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde,
ich muss mit einem CP340 über RS422 eine ELGO-EMAX-Positionsanzeige in eine S7-300 einlesen.
Die Daten kommen in folgendem Format und Reihenfolge:

MSB, MSB-1, LSB

die gemessene Position wird binär in den 3 Datenbytes dargestellt

Wie krieg ich daraus eine für die S7 verarbeitbare Zahl?
 
Zuletzt bearbeitet:
Hallo,
in dem du die einzelnen Bytes in DINT's umwandelst (als DINT's weiterverarbeitest) und entsprechend ihrer Wertigkeit multiplizierst.
Also (ich weiß nun nicht was MSB und MSB-1 darstellen soll) z.B. so :
Gesamt = LSB + (MSB_1 * 256) + (MSB * 65536)
Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MSB heißt wohl Most Signifikant Byte,
das nächste im Telegramm ist dann MSB-1
und dann kommt das Least Signifikant Byte.

Ich nehme an das ich die Daten vorher BCD-Int umwandeln muss?
 
Das hängt ja davon ab, was genau die Anzeige über RS232 ausgibt.
Schau dir die ankommenden Daten an, die weißt ja was die Anzeige anzeigt, dann siehst du sicher auch, ob die Daten BCD-Codiert sind oder nicht.
Im Zweifelsfall versuchst du es einmal mit und einmal ohne BCD nach Int und schaust, was plausibel ist.
 
Leider hat die Anzeige nur die RS422´Schnittstelle, keine RS232
Da muss ich nochmal dumm fragen:
woran erkenne ich das die Daten BCD-Codiert sind?
Meine Annahme beruht auf der Bezeichnung im Handbuch:
Zitat: "Die gemessene Position wird binär in den 3 Datenbytes dargestellt"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lies mal das hier: http://de.wikipedia.org/wiki/BCD-Code

Kann durchaus mal zufällig für einen normal binär codierten Wert auch BCD passen, aber auf Dauer werden auch mal nicht erlaubte Codierungen (Pseudotetraden) auftauchen, dann weiß man, dass es keine BCD-Codierung sein kann. Zweite Möglichkeit ist natürlich, wenn du das Ergebnis kennst, die Zahl "zusammenbaust" und dann siehst, ob das Ergebnis mit der Positionsanzeige übereinstimmt.

PS: Ja klar, RS232 oder RS422, wenn du die 340 nutzt, ist das ja für dich im Prinzip egal, es muß halt die richtige Baugruppe it dem richtigen Protokoll sein.
 
"binär" ist ein bisschen schwammig. Da explizit nichts angegeben ist würde ich von einer Dualzahl ausgehen. Um diese Zahl in Step7 verarbeiten zu können, müssten die drei Bytes in ein DINT geschrieben und rechtsbündig(?) ausgerichtet werden.

Code:
      L     "MSB"               // Doppelwort ab Adresse "MSB"
      SRD   8                   // 8 Stellen nach rechts verschieben
      T     "DEIN_MESSWERT"     // DINT

Oder so ähnlich ;-)
 
Die Variante mit dem ASCII-Code hatte ich noch gar nicht erwogen (wahrscheinlich wegen der Thread-Überschrift LSB-MSB).
Bei vielen seriell gekoppelten Geräten wird ja der Wert als eine Art ASCII-Zeichenkette übertragen.

@TE:
Du solltest hier wirklich erstmal schauen, was da reinkommt.
In welchem Zahlenbereich liegen denn deine erwarteten Werte ? 0 ... 999 ? Oder eher 0 ... 16000000 ?

Gruß
Larry
 
Zurück
Oben