DBconfig
Der Funktionsbaustein RK512 arbeitet in zwei Betriebsarten. In der passiven Betriebsart empfängt er Daten und Anforderungstelegramme von einem Kommunikationspartner, der Datenbausteine über ihre Datenbausteinnummer adressiert. Nummerierte Datenbausteine sind in der IEC-1131 und damit auch in TwinCAT zunächst unbekannt. Datenbausteine sind in TwinCAT Variablen verschiedenen Typs, z. B. Arrays oder Datenstrukturen (STRUCT).
Zur Definition eines nummerierten Datenbausteins wird in einer Initialisierungsphase die Methode DBconfig des Funktionsbausteins RK512 mit allen notwendigen Parametern aufgerufen. Der Aufruf der Methode wird einmalig für jeden Datenbaustein durchgeführt, der vom Kommunikationspartner adressiert werden soll. Für die aktive Betriebsart (Send und Fetch) ist diese Konfiguration nicht notwendig.
In der aktiven Betriebsart können unabhängig von dieser Datenbausteinkonfiguration Variableninhalte zum Kommunikationspartner gesendet bzw. von diesem geholt werden. Die Datenbausteinnummer bezieht sich in der aktiven Betriebsart auf die Gegenstelle und muss nur dort bekannt sein.
Parameter
DbAdr
DbAdr ist die Speicheradresse einer SPS-Variablen, die als Datenbaustein definiert werden soll. Die Adresse wird mit der ADR-Funktion ermittelt.
z. B.: DbAdr := ADR( PLCvar );
Die SPS-Variable kann beliebigen Typs sein. Beispielsweise ist ein ARRAY OF WORD oder eine Datenstruktur STRUCT geeignet.
DbSize
DbSize ist die Größe der SPS-Variablen an DbAdr in Byte, die mit der SIZEOF-Funktion ermittelt wird.
z. B. DbSize := SIZEOF( PLCvar );
RemoteDbNr
RemoteDbNr enthält die Nummer des Datenbausteins beim Kommunikationspartner.
TxBuffer
Der Sendedatenpuffer TxBuffer ist vom Typ COMbuffer. Dieser Parameter wird für die Konfiguration nicht benötigt, muss aber als IN_OUT-Parameter übergeben werden.
RxBuffer
Der Empfangsdatenpuffer RxBuffer ist vom Typ COMbuffer. Dieser Parameter wird für die Konfiguration nicht benötigt, muss aber als IN_OUT-Parameter übergeben werden.
Beispiel
VAR
(* declare some DB
(* the type of data doen't matter but the
(* size shouldn't be larger than 128 bytes
(**)
DB1 : ARRAY[1..64] OF WORD; (* exemplary type of db *)
DB5 : ARRAY[1..64] OF WORD; (* exemplary type of db *)
DB10 : ARRAY[1..64] OF WORD; (* exemplary type of db *)
(* input and ouput data for the RK512 function block *)
RK512com : RK512;
initialized : BOOL;
END_VAR
IF NOT initialized THEN
RK512com.DBconfig( RemoteDbNr:=5, DbAdr:=ADR(DB5), DbSize:=SIZEOF(DB5), TxBuffer:=TxBuffer, RxBuffer:=RxBuffer );
RK512com.DBconfig( RemoteDbNr:=10, DbAdr:=ADR(DB10), DbSize:=SIZEOF(DB10), TxBuffer:=TxBuffer, RxBuffer:=RxBuffer );
initialized := TRUE;
END_IF
Durch die Initialisierung im Beispiel wird erreicht, dass der Kommunikationspartner die Datenbausteine 5 und 10 beschreiben und lesen darf. Jeder Zugriff auf einen anderen Datenbaustein wird mit einem Fehler abgewiesen.