TIA Symbolisch auf unstrukturierte Datentypen zugreifen

PeterPan-35

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

heute bin ich auf ein Problem gestoßen, welches ich mir so recht nicht erklären kann.

Bei Motorola, wonach Siemens auch arbeitet, ist Byte 0 High Byte und Byte 1 Low Byte.

Folgendes Beispiel mit der Hexzahl C8 mit einem Merkerbereich.
MW 0 = 00C8
MB 0 = 00
MB 1 = C8

Wenn ich das jedoch Symbolisch programmiere, ergibt sich für mich ein Problem.

Zahl_1 ist ein Integer mit dem Wert Hex C8.

Zahl_1 = 00C8
Zahl_1.%B0 = C8
Zahl_1.%B1 = 00

Warum ist beim symbolischen Programmieren das Low Byte in Byte 0 und das High Byte in Byte 1 gerutscht?

Meiner Meinung nach kann das eigentlich nicht sein, dass bei den zwei Arten der Aufschlüsselung unterschiedliche Ergebnisse herauskommen.
 
Wenn du bei deinem absolut adressierten Beispiel mit nicht optimierten Bausteinen und bei deinem symbolischen Beispiel mit optimierten Bausteinen arbeitest ist das glaub ich so. Den bei optimierten Bausteinen werden Low und High Bytes vertauscht um die PLC perfomanter (schneller) zu machen.

Das ist im übrigen auch der Grund, warum man optimierte und nicht optimierte Bausteine nicht gemischt verwenden sollte, da dann immer ein internes umtauschen der Bytes notwendig ist, was die Zykluszeit verlangsamt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

heute bin ich auf ein Problem gestoßen, welches ich mir so recht nicht erklären kann.

Bei Motorola, wonach Siemens auch arbeitet, ist Byte 0 High Byte und Byte 1 Low Byte.

Folgendes Beispiel mit der Hexzahl C8 mit einem Merkerbereich.
MW 0 = 00C8
MB 0 = 00
MB 1 = C8

Wenn ich das jedoch Symbolisch programmiere, ergibt sich für mich ein Problem.

Zahl_1 ist ein Integer mit dem Wert Hex C8.

Zahl_1 = 00C8
Zahl_1.%B0 = C8
Zahl_1.%B1 = 00

Warum ist beim symbolischen Programmieren das Low Byte in Byte 0 und das High Byte in Byte 1 gerutscht?

Meiner Meinung nach kann das eigentlich nicht sein, dass bei den zwei Arten der Aufschlüsselung unterschiedliche Ergebnisse herauskommen.
Da ist nix verrutscht.
Wie Du selbst festgestellt hast, befindet sich auch bei der absoluten Adressierung das Low Byte (= Byte 0) im MB1 und das High Byte (= Byte 1) im MB0.

Das symbolische .%Bx orientiert sich also nicht an der absoluten Adresse sondern an der Wertigkeit im Datentyp.
Und bei der optimierten Speicherung ist die absolute Adresse ja auch nicht verfügbar.

Noch auffälliger ist das im DW am Beispiel MW0:
MB0 = Byte 3 = .%B3 (High Byte)
MB1 = Byte 2 = .%B2
MB2 = Byte 1 = .%B1
MB3 = Byte 0 = .%B0 (Low Byte)


PS:
Und bei einer Adresse, die nicht gerade auf 0 endet bzw. beginnt, ist es dann auch offensichtlicher, dass das Symbol nichts mit der Adresse sondern nur mit der Wertigkeit zu tun hat.
Z.B. MW4 :
MB4 = Byte 3 = .%B3 (High Byte)
MB5 = Byte 2 = .%B2
MB6 = Byte 1 = .%B1
MB7 = Byte 0 = .%B0 (Low Byte)
 
Zuletzt bearbeitet:
Okay, klingt nach einer plausiblen Erklärung. Jedoch wenn man sich verbissen an das Motorola-System hält, wie ich es heute gemacht habe, klingt es erstmal falsch.

Da ja das Byte mit der kleineren Nummer das High Byte ist und das Byte mit der größten Nummer das Lowerest Byte.
Die Nummerierung von 0 beginnend habe ich zur verdeutlichung genommen.
Anstatt 0 kann man auch wie hier X einsetzten. Da bleibt Motorola dennoch Motorola.

Word:
Byte X = High Byte
Byte X +1 = Lower Byte

DWord:
Byte X = High Byte
Byte X +1 =
Byte X +2 =
Byte X + 3 = Lowest Byte

Das andere sieht ja eher wie Intel aus.
Aber wenn die das in optimierten Bausteinen so machen, ist es gut zu wissen.
 
Du darfst halt Symbol nicht mit Adresse verwechseln.
Hat nix miteinander zu tun.

Symbol = Wertigkeit.
Und die Wertigkeit beginnt nun mal auch mit 0 = lowest.
 
Zuletzt bearbeitet:
Genau diese Formulierung ist das Missverständnis:
Word:
Byte X = High Byte
Byte X +1 = Lower Byte

DWord:
Byte X = High Byte
Byte X +1 =
Byte X +2 =
Byte X + 3 = Lowest Byte
Besser ist:
Code:
Word:
Adresse X   = Byte X+1 = High Byte
Adresse X+1 = Byte X   = Lower Byte


DWord:
Adresse X   = Byte X+3 = High Byte
Adresse X+1 = Byte X+2
Adresse X+2 = Byte X+1
Adresse X+3 = Byte X   = Lowest Byte
 
Wenn ich dich dann richtig verstehe, besteht der Unterschied zwischen Motorola und Intel auch alleine in der unterschiedlichen absoluten Adressierung?

Motorola:
Adresse X = Byte X+1 = High
Adresse X+1 = Byte X = Low

Intel:
Adresse X = Byte X = Low
Adresse X+1 = Byte X+1 = High
 
Auf den Ansatz bin ich noch nicht gekommen, Motorola und Intel so zu betrachten.

Aber man lernt nie aus.
Teilweise bin ich dann doch noch zu sehr oldschool in der rein absoluten Adressierung von damals drin.
 
Zurück
Oben