Daten Übertragung

mfg_mr.e

Level-1
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Merkerwörter übertragen

Guten Abend zusammen,

ich habe eine CPU 315 PN/DP die ist mit einer Messeinheit mit Messtaster über Profibus verbunden.
Die Messeinheit fährt raus tastet den Gegenstand ab und gibt den Wert an die Messeinheit.
Nun soll die Messeinheit mir den Wert über Profibus an meine CPU schicken.

Und hier fängt das Problem an vom Herstellern dieser Messeinheit hab ich eine Software für den PC, über usb kann ich auf den Messtaster zugreifen und sehe den genauen Wert wo er gemessen hat.
Aber in die CPU kommt ein ganz anderer Wert!!!???

Beispiel:
Hex: 198D ----> 6541 um nun den tatsächlichen Wert in mm zu erhalten muss man den Wert durch 100 dividieren (Hersteller Angabe)

Meine SPS gibt mir nach dem Move Befehl 16#00008d19 raus

hab auch einen screenshot gemacht bei Bedarf bitte melden.


Bin euch schon im vorraus dankbar!
 
Guten Abend zusammen,

ich habe eine CPU 315 PN/DP die ist mit einer Messeinheit mit Messtaster über Profibus verbunden.
Die Messeinheit fährt raus tastet den Gegenstand ab und gibt den Wert an die Messeinheit.
Nun soll die Messeinheit mir den Wert über Profibus an meine CPU schicken.

Und hier fängt das Problem an vom Herstellern dieser Messeinheit hab ich eine Software für den PC, über usb kann ich auf den Messtaster zugreifen und sehe den genauen Wert wo er gemessen hat.
Aber in die CPU kommt ein ganz anderer Wert!!!???

Beispiel:
Hex: 198D ----> 6541 um nun den tatsächlichen Wert in mm zu erhalten muss man den Wert durch 100 dividieren (Hersteller Angabe)

Meine SPS gibt mir nach dem Move Befehl 16#00008d19 raus




Bin euch schon im vorraus dankbar!
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    66,6 KB · Aufrufe: 36
Zuviel Werbung?
-> Hier kostenlos registrieren
Standard Merkerwörter übertragen

Hallo,

es sieht so aus als ob dein Messsystem mit Little Endian arbeitet.

füge mal folgende Codezeilen ein.
Code:
l "messwert_vom System"   // litte Endian z.B.MW40
taw                               // tauschen der Bytes
t "umgeformter_Wert"       // Big Endian    z.B.MW42
mit vielen Grüßen Bernard
 
Zuletzt bearbeitet:
sorry hab den Befehl noch nie ausgeführt, bei mir wird die schrift rot uns wenn ich mit der maus drüber gehe dann steht da syntaxfehler bei edian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Thomas, das komische ist nur wenn ich der Messeinheit einzelne Bits schicke kommen die auch richtig an
z.B

im MW22 im zweiten BIT ist der Befehl "TEACH" hinterlegt

U E0.0
= M22.1

fährt der Messtaster aus
 
Bit in MW

das zweite bit im Mw22 ist M 23.1.

die Bytes müssen gedreht werden,oder vlt. kann man beim slave in der HW-Konfig über die Eigenschaften von Little Endian auf Big Endian umschalten.

Hier nochmal der Code für dein Programm in einem Netzwerk in AWL
Code:
l ew3       // little Endian Messwert
taw         // umwandlung in Big Endian durch drehen der Bytes
t MW14    // übergabe

viel Grüße Bernard
 
Da ist nochmals ein Problem aufgetreten, jetzt muss ich umgekehrt einen Wert aus der SPS an die Messeinheit senden,

L 25
TAW
T PAW 14

(wenn ich den wert beobachte steht da L 25: 19
TAW: 1900
T PAW 14: 1900)

Und bei der Messeinheit HEX: 0019

was mach ich falsch?
 
Zuletzt bearbeitet:
Da ist nochmals ein Problem aufgetreten, jetzt muss ich umgekehrt einen Wert aus der SPS an die Messeinheit senden,

L 25
TAW
T PAW 14

(wenn ich den wert beobachte steht da L 25: 19
TAW: 1900
T PAW 14: 1900)

Und bei der Messeinheit HEX: 0019

was mach ich falsch?

Ist doch richtig. Du lädst 25dez beim beobachten siehst du es in hex, also 19. Wenn du 25hex übertragen willst schreibst du:
L w#16#0025...

die Anzeige beim beobachten kannst du per rechtsklick auf dezimal umstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen

ich habe einen Toleranz Byte MB 23 mit dem ich für den messvorgang Toleranzwerte vorgeben kann.

Jetz ist das Problem:

///
///
L 10
TAW
T MB 23
///
///

Dann bekomme ich gar keinen Wert in der Messsystem Software zu sehen!

mache ich das ganze ohne
///
"TAW"
///

kommt in der Software der Wert HEX: A00 an.
 
Bei den Beispielen vorher hast Du ein Word übertragen.
Dieses Word besteht aus zwei Byte, also Low und High-Byte.
Diese waren scheinbar verdreht (little und big endian)

Hier bei den Toleranzwert überträgst Du eine Byte! Dieses ist nicht verdreht und mit dem TAW drehst Du ja in einem Word (2 Byte) High- und Low Byte.
Somit würde aus z.B. A0 -> 0A 00. Kann man ganz gut im Status sehen!
Ebenfalls wenn man auf TAW mit der Maus geht und dann F1 drück kommt ne Hilfe ...
 
Woran liegt es dann wenn ich im den Wer 10 dez eingebe:

L 10 dez
T MB 23

das in den Messsensor A00 hex ----->2560 dez
ankommt?

wie kann ich das ganz so übertragen das ich am Messsensor den richtigen wert erhalte?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist der gleiche Fehler wieder. Eine grundsätzliche Beschäftigung mit dem Aufbau der Bytes / Wörter / Doppelwörter in der S7 Welt und den verschiedenen Zahlensystemen bringt hier sofort Licht ins Dunkel:

Z.B. belegt MW23 die beiden MB23 und MB24, wobei der höherwertige Teil des Merkerwortes im MB23 landet, der niederwertige Teil im MB24. Beschreibst du nun allein das MB23 mit dem Wert 10dez (also 0x0A), so enthält das MW23 anschließend insgesamt den Wert 2560 (also 0x0A00).

Ist doch alles klar und nachvollziehbar, oder?
 
Ich würde sagen, weil du dort auch das falsch MB nimmst. Übertrage deine 10 mal in MB24 oder

MW23
TAW

obwohl man keine ungeraden Wörter nimmt
 
Zuletzt bearbeitet:
@hovolo

das ist mir mir schon verständlich, doch der Toleranzberich ist in dem Messtaster festgelegt mit MB 23, wie bekomm ich den genauen wert darein?
 
Zurück
Oben