TIA Adressierung Datenbaustein mit nicht optimertem Bausteinzugriff

Berger

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

ich muss einen vordefinierten Datenbaustein mit vorgegebener Struktur für eine BDE in der Steuerung ablegen.
Komisch ist folgendes:

So soll es aussehen:
DB500.DBX0.0 BOOL
DB500.DBX0.1 BOOL
DB500.DBX0.2 BOOL
DB500.DBX0.3 BOOL
DB500.DBX0.4 BOOL
DB500.DBX0.5 BOOL
DB500.DBX0.6 BOOL
DB500.DBX0.7 BOOL
DB500.DBD1 DINT
...

TIA lässt jetzt leider die Adresse DB500.DBD1 für das DINT nicht zu, sondern generiert die Adresse DB500.DBD2, lässt also automatisch ein Byte frei.

Das z.B. funktioniert:
DB500.DBX0.0 BOOL
DB500.DBX0.1 BOOL
DB500.DBX0.2 BOOL
DB500.DBX0.3 BOOL
DB500.DBX0.4 BOOL
DB500.DBX0.5 BOOL
DB500.DBX0.6 BOOL
DB500.DBX0.7 BOOL
DB500.DBB1 BYTE
DB500.DBD2 DINT

Weiss eventuell jemand warum das so ist?
 
Am besten du vereinbarst eine andere Datenstruktur.

Alternativ könnte man evtl. byteweise Schreiben. Ist aber Mist:

L DINTWert
T Localvariable1 // 1.DWord Lokale Adresse 0
L LB0
T DB500.DBB1
L LB1
T DB500.DBB2
L LB2
T DB500.DBB3
L LB3
T DB500.DBB4
 
Zuletzt bearbeitet:
Hallo zusammen

als Quelle hast du ein Byte, also auch als Ziel nur ein Byte verwenden!
Code:
T %DB500.DBB1
T %DB500.DBB2
T %DB500.DBB3
T %DB500.DBB4
verwenden!

Wenn du für eine 1200/1500 programmierst, dann würde in SCL auch

Code:
%DB500.DBB1 := dintwert.%B3;
%DB500.DBB2 := dintwert.%B2;
%DB500.DBB3 := dintwert.%B1;
%DB500.DBB4 := dintwert.%B0;

Ich gehe mal davon aus, dass deine BDE big-endian will.

In KOP/FUP geht das genauso -- eben mit MOVE :D

'n schön' Tach auch
HB
 
Es geht hier darum, einen DINT auf einer ungeraden Adresse zu deklarieren. Ein SWAP() hilft bei dem Problem nicht.

Man könnte die Struktur mit einem führenden Dummy-Byte deklarieren und zum Senden das führende Byte abschneiden bzw. ab dem zweiten Byte senden.

Harald
 
Zurück
Oben