Speicherbänke

Speicherbänke (Memory Banks) sind frei zugängliche Speicherbereiche, in denen gerätespezifische Informationen und Eigenschaften gespeichert werden. Der Inhalt der Speicherbänke kann mit FB_DALI10xReadMemoryLocation (siehe FB_DALI102ReadMemoryLocation und FB_DALI103ReadMemoryLocation) ausgelesen und, soweit freigegeben, mit FB_DALI10xWriteMemoryLocationNoReply (siehe FB_DALI102WriteMemoryLocationNoReply und FB_DALI103WriteMemoryLocationNoReply) beschrieben werden.

Ein Teil der Speicherbänke kann mit einem Schreibschutz belegt werden.

Ein DALI-Gerät kann maximal 256 Speicherbänke mit je bis zu 255 Byte unterstützen, wobei die Speicherbänke 200 bis 255 zurzeit reserviert sind. Durch die IEC 62386 sind die Speicherbank 0 und Speicherbank 1 vordefiniert.

Aufbau der Speicherbank 0:

Speicherbank 0 ist Read Only und beinhaltet allgemeine, herstellerspezifische Informationen über das DALI-Vorschalt- bzw. DALI-Steuergerät. Jedes zertifizierte DALI-Gerät muss die Speicherbank 0 implementieren. Bis zum Offset 16#1A sind die Felder durch die IEC 62386 wie folgt definiert.

Offset

Beschreibung

Default Werte

16#00

Offset des letzten Speicherbereichs, innerhalb der Speicherbank, auf den zugegriffen werden kann.

Herstellerspezifisch

16#01

Reserviert, nicht implementiert

 

16#02

Nummer der letzten Speicherbank, auf die zugegriffen werden kann.

Herstellerspezifisch

16#03

GTIN byte 0 (MSB)

Herstellerspezifisch

16#04

GTIN byte 1

Herstellerspezifisch

16#05

GTIN byte 2

Herstellerspezifisch

16#06

GTIN byte 3

Herstellerspezifisch

16#07

GTIN byte 4

Herstellerspezifisch

16#08

GTIN byte 5 (LSB)

Herstellerspezifisch

16#09

Firmware Version (major)

Herstellerspezifisch

16#0A

Firmware Version (minor)

Herstellerspezifisch

16#0B

Identification number byte 0 (MSB)

Herstellerspezifisch

16#0C

Identification number byte 1

Herstellerspezifisch

16#0D

Identification number byte 2

Herstellerspezifisch

16#0E

Identification number byte 3

Herstellerspezifisch

16#0F

Identification number byte 4

Herstellerspezifisch

16#10

Identification number byte 5

Herstellerspezifisch

16#11

Identification number byte 6

Herstellerspezifisch

16#12

Identification number byte 7 (LSB)

Herstellerspezifisch

16#13

Hardwareversion (major)

Herstellerspezifisch

16#14

Hardwareversion (minor)

Herstellerspezifisch

16#15

101 Versionsnummer des aktuellen DALI-Standards

Herstellerspezifisch

16#16

102 Versionsnummer aller integrierten DALI-Vorschaltgeräte

Herstellerspezifisch

16#17

103 Versionsnummer aller integrierten DALI-Steuergeräte

Herstellerspezifisch

16#18

Anzahl der logischen Steuergeräteeinheiten im Teilnehmer

Herstellerspezifisch

16#19

Anzahl der logischen Vorschaltgeräteeinheiten im Teilnehmer

Herstellerspezifisch

16#1A

Indexnummer dieses logischen DALI-Vorschalt- bzw. DALI-Steuergeräts

Herstellerspezifisch

16#1B…16#7F

Reserviert, nicht implementiert

 

16#80…16#FE

Zusätzliche Geräteinformationen

Herstellerspezifisch

16#FF

Reserviert, nicht implementiert

 

Aufbau der Speicherbank 1:

Die Speicherbank 1 kann vom Gerätehersteller genutzt werden, um weiterführende Informationen im DALI-Gerät zu hinterlegen. Bis zum Offset 16#10 sind die Felder durch die IEC 62386 wie folgt definiert.

Offset

Beschreibung

Default Werte

Speicher

16#00

Offset des letzten Speicherbereichs, innerhalb der Speicherbank, auf den zugegriffen werden kann.

Hersteller-spezifisch

(16#10…16#FE)

 

16#01

Indikatorbyte

Hersteller-spezifisch

 

16#02

Sperrbyte für die Speicherbank 1. Beschreibbare Bytes werden durch den Wert 16#55 veränderbar. Durch alle anderen Werte ist ein Beschreiben nicht möglich.

16#FF

 

16#03

OEM GTIN byte 0 (MSB)

16#FF

Verriegelbar durch Byte 16#02

16#04

OEM GTIN byte 1

16#FF

Verriegelbar durch Byte 16#02

16#05

OEM GTIN byte 2

16#FF

Verriegelbar durch Byte 16#02

16#06

OEM GTIN byte 3

16#FF

Verriegelbar durch Byte 16#02

16#07

OEM GTIN byte 4

16#FF

Verriegelbar durch Byte 16#02

16#08

OEM GTIN byte 5 (LSB)

16#FF

Verriegelbar durch Byte 16#02

16#09

OEM Identification number byte 0 (MSB)

16#FF

Verriegelbar durch Byte 16#02

16#0A

OEM Identification number byte 1

16#FF

Verriegelbar durch Byte 16#02

16#0B

OEM Identification number byte 2

16#FF

Verriegelbar durch Byte 16#02

16#0C

OEM Identification number byte 3

16#FF

Verriegelbar durch Byte 16#02

16#0D

OEM Identification number byte 4

16#FF

Verriegelbar durch Byte 16#02

16#0E

OEM Identification number byte 5

16#FF

Verriegelbar durch Byte 16#02

16#0F

OEM Identification number byte 6

16#FF

Verriegelbar durch Byte 16#02

16#10

OEM Identification number byte 7 (LSB)

16#FF

Verriegelbar durch Byte 16#02

16#11…16#FE

Zusätzliche Geräteinformationen

Hersteller-spezifisch

 

16#FF

Reserviert, nicht implementiert

 

 

Aufbau der Speicherbank 2 bis 199:

Die Speicherbänke 2 bis 199 kann der Gerätehersteller nutzen, um weitere Parameter mitzuliefern. Der Aufbau der Speicherbänke ist immer wie unten dargestellt. Der Inhalt und die Möglichkeit des Beschreibens einzelner Bytes ist beim Hersteller des DALI-Gerätes zu erfragen.

Offset

Beschreibung

Default Werte

Speicher

16#00

Offset des letzten Speicherbereichs, innerhalb der Speicherbank, auf den zugegriffen werden kann.

Hersteller-spezifisch

(16#03…16#FE)

 

16#01

Indikatorbyte

Hersteller-spezifisch

 

16#02

Sperrbyte für die Speicherbank. Beschreibbare Bytes werden durch den Wert 16#55 veränderbar. Durch alle anderen Werte ist ein Beschreiben nicht möglich.

16#FF

 

16#03…16#FE

Zusätzliche Geräteinformationen

Hersteller-spezifisch

Herstellerspezifisch, soweit vom Hersteller freigegeben verriegelbar durch Byte 16#02

16#FF

Reserviert, nicht implementiert

 

 

Zugriff auf die Speicherbank 2 bei der EL6821

Da die KL6821/EL6821 ein DALI-Steuergerät nach der IEC 62386 darstellt, muss die Busklemme die Speicherbank 0 und die Speicherbank 1 anbieten. Andere DALI-Steuergeräte können über die entsprechenden DALI-Befehle auf diese Speicherbänke zugreifen.

Zusätzlich bietet die EL6821 noch die Speicherbank 2 an. In der EL6821 wird die Speicherbank 2 durch das CoE-Objekt 16#8002 abgebildet. Die ersten drei Felder (16#8002:01 ... 16#8002:03) sind durch die IEC 62386 definiert (siehe weiter oben). Die Felder 16#8002:04 bis 16#8002:FF können individuell beschrieben und/oder gelesen werden.

Beachten Sie, dass der Offset in der Speicherbank 2 und der Subindex vom CoE verschoben sind. So entspricht der Offset 10 in der Speicherbank 2 dem Feld 16#8002:0B.

Speicherbänke 1:

Für den Zugriff auf die Speicherbänke eines DALI-Gerätes über den DALI-Bus stehen die Funktionsblöcke FB_DALI102ReadMemoryLocation/FB_DALI103ReadMemoryLocation bzw. FB_DALI102WriteMemoryLocationNoReply/FB_DALI103WriteMemoryLocationNoReply zur Verfügung.

Soll aus einem SPS-Programm heraus auf die Speicherbank 2 der eigenen EL6821 zugegriffen werden, so erfolgt der Zugriff über das EtherCAT CoE-Interface. Die TwinCAT Bibliothek Tc2_EtherCAT bietet hierfür die notwendigen Funktionsblöcke an (siehe FB_EcCoeSdoRead und FB_EcCoeSdoWrite).

Das folgende Beispiel liest den Offset 3 (Subindex 4) und schreibt den Offset 4 (Subindex 5) der Speicherbank 2. Die EL6821 muss sich am gleichen Controller befinden, auf dem auch das SPS-Programm ausgeführt wird.

VAR
  fbCoERead      : FB_EcCoESdoRead;
  fbCoEWrite     : FB_EcCoESdoWrite;
  nValue         : USINT;
  bExecuteRead   : BOOL;
  bExecuteWrite  : BOOL;
END_VAR
fbCoERead(sNetId := F_CreateAmsNetId(GVL.stEL6821InData01.stAdsAddr.netId),
          nSlaveAddr := GVL.stEL6821InData01.stAdsAddr.port,
          nIndex := 16#8002,
          nSubIndex := 16#04,
          pDstBuf := ADR(nValue),
          cbBufLen := SIZEOF(nValue),
          bExecute := bExecuteRead);
IF (NOT fbCoERead.bBusy) THEN
  bExecuteRead := FALSE;
END_IF

fbCoEWrite(sNetId := F_CreateAmsNetId(GVL.stEL6821InData01.stAdsAddr.netId),
           nSlaveAddr := GVL.stEL6821InData01.stAdsAddr.port,
           nIndex := 16#8002,
           nSubIndex := 16#05,
           pSrcBuf := ADR(nValue),
           cbBufLen := SIZEOF(nValue),
           bExecute := bExecuteWrite);
IF (NOT fbCoEWrite.bBusy) THEN
  bExecuteWrite := FALSE;
END_IF