Step 7 Einzelne Bytes eines Arrays auslesen bzw. berechnen

knollsimi

Level-1
Beiträge
81
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hy leute!

Ich bekomme von einem Zähler die Werte: (Dezimal)
ED1: 4985
ED2: 1276160
ED3: 326696960
ED4: 2030043136

(Hexadezimal)
ED1: DW#16#00001382
ED2: DW#16#00138400
ED3: DW#16#13820000
ED4: DW#16#81000000​

Ich sollte nun von diesen Zahlen die einzelnen Bytes vom Array herauslesen, weil man nur so den Wert des Zählers definieren kann... Leider habe ich keinen Plan wie man das machen soll??

Weiß jemand von euch wie das geht?

Hier ist noch ein Beispiel wie das aussehen soll:
Byte 0 = 0
Byte 1 = 0
Byte 2 = x
Byte 3 = x

 
Zuerst solltest du dich mal über die Adressierung einer S7 informieren.
Deine Adressbereiche überschneiden sich.

Der Zugriff auf ein einzelnes Byte erfolgt durch L EBx

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Dieter!

Danke für deine Antwort!

Bekomme jetzt folgende Werte:
EB1: 0
EB2: 19
EB3: 89
EB4: 0
Ich habe irgendwo gelesen, dass man die Bytes irgendwie zuammenrechnen muss, um den wahren Wert des Zählers angezeigt zu bekommen. Weißt du auch wie das geht??

VIelen Dank
 
Verrate uns doch mal was für einen Zähler (Type,Handbuch, etc.) du hast und wie und wo du ihn angeschlossen hast...
Ich habe irgendwo gelesen, dass man die Bytes irgendwie zuammenrechnen muss, um den wahren Wert des Zählers angezeigt zu bekommen. Weißt du auch wie das geht?
Die Betonung liegt wohl auf "irgendwo". Mit dem bisschen an Information kann man nur raten.
Nur aus irgendwelchen in den Raum geworfenen Zahlen heraus werden wir das nicht herausfinden. :sad:

[IRONIE ON]
Ich bin dafür das wir ein Glaskugel/Hellseher-Emoticon einführen, wir brauchen das einfach viel zu oft...

Ohhhh... Geister der Vergangenheit, Geister der Gegenwart und Zukunft. Hört mich an...
smiley_emoticons_glaskugel2.gif
Offenbart mir das was hier niemand erahnen kann... knollsimis Gedankengänge....
...
...
...
Nichts?!?!
Verdammtes Ding! Muss wohl kaputt sein...
smiley_emoticons_glaskugel.gif
[IRONIE OFF]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Allso

Habe einen Kamstrup Multical 402 mit M-Bus ausgang. Das M-Bus signal wandle ich mittels Wachendorffs Gateway (HD67053-B2-40) in ein Profibussignal um, und dieses lese ich mit der Siemens s7 300 ein. In der Variabeltabelle sehe ich dann diese Bytes. Angeblich sollte ich diese dann irgendwie zusammenrechenen um den Wahren Wert (Vorlauftemperatur von ca. 14°C) herauszubekommen.
 
Allso
Habe einen Kamstrup Multical 402 mit M-Bus ausgang. Das M-Bus signal wandle ich mittels Wachendorffs Gateway (HD67053-B2-40) in ein Profibussignal um, und dieses lese ich mit der Siemens s7 300 ein.
smiley_emoticons_doh.gif Duh! Als hätt ich's nicht gewusst. Sag mal ernsthaft knollsimi, wenn du deinen Eingangspost selber liest... bist du wirklich der Meinung das wir aus dem bisschen Info was rauskratzen und dir helfen können, Kein Wunder das meine Glauskugel Bildstörungen hatte.

OK, schwamm drüber.
Damit wir dir sinnvoll helfen können postest du uns jetzt einen Screenshot (evtl. sogar das File, am besten beides) deiner Wachendorf-Konfiguration sowie einen Screenshot deiner Hardware-Konfig wo das Gate dranhängt.
 
Bei M-Bus hat man öfters mal BCD-kodierte Werte. Deine ca. 14°C könnten dann den Bytes 1382hex entsprechen, wäre dann 13,82°C. Wenn die Bytereihenfolge passt, kannst du die S7-Konvertierungsfunktionen von BDC nach Int verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
(Hexadezimal)
ED1: DW#16#00001382
ED2: DW#16#00138400
ED3: DW#16#13820000
ED4: DW#16#81000000​
:confused:
Hier hast Du Dich bestimmt verschrieben.

Wie Blockmove Dir mitgeteilt hat und Du Dich ja jetzt bestimmt auch belesen hast, besteht bei den 4 angegebenen Doppelwörtern eine Byteüberschneidung. Da sollten also bei den verschiedenen EDs trotzdem die gleichen Werte in den gemeinsamen Bytes enthalten sein:
Code:
[FONT=Courier New]ED1  = EB1 + EB2 + EB3 + EB4
DW#16#  00    00    13    82
      
ED2  = EB2 + EB3 + EB4 + EB5
DW#16#  00    13    8[COLOR=#ff0000][B][U]4[/U]?[/B][/COLOR]   00

ED3  = EB3 + EB4 + EB5 + EB6
DW#16#  13    82    00    00

ED4  = EB4 + EB5 + EB6 + EB7
DW#16#  8[COLOR=#ff0000][B][U]1[/U]?[/B][/COLOR]   00    00    00[/FONT]
Oder stammen die Werte aus verschiedenen Zyklen?


Wie Du aus den ganzen EBs vlt. erkennen kannst, ist mit dem richtigen Anschluß des Zählers und der richtigen Auswahl des EDs der Wert als Doppelwort auslesbar, ohne die einzelnen Bytes manuell zusammen rechnen zu müssen.
Daher die Frage, welchen Wert hat denn der Zähler dazu in Echt übertragen?

Ein wenig komisch bzw. unüblich ist noch, das Dein Zähler-Eingang mit EB1 anfängt. Üblich ist für ein DW eher ED0 bzw. als nächstes ED4.
Das hängt aber auch davon ab, wie Deine Hardware parametriert und Dein Zähler an die digitalen Eingänge angeschlossen ist.
Irgendwie kann ich mir überhaupt nicht vorstellen, das da 32 einzelne Adern (plus Spannungsversorgung) vom Zähler zur SPS verdrahtet sind. Das klingt viel zu aufwendig für einen Zähler. Daher wäre das an erster Stelle von Interesse.


PS: Da sind mir beim Schreiben gerade einige Posts entgangen, die schon einiges beantworten?!
:(
 
Seit wann zeigt ein Zähler denn 'ne Temperatur an?
;)
hucki komm schon!

Das....
"Ich sollte nun von diesen Zahlen die einzelnen Bytes vom Array herauslesen, weil man nur so den Wert des Zählers definieren kann",
automatisch...
"Habe einen Kamstrup Multical 402 mit M-Bus ausgang. Das M-Bus signal wandle ich mittels Wachendorffs Gateway (HD67053-B2-40) in ein Profibussignal um"
... bedeutet...

Das hätten wir beide doch wissen müssen oder...? *ROFL*
 
Zuletzt bearbeitet:
Zurück
Oben