TYPE UDT1
//
// Datenstruktur CONT_C
//
STRUCT
COM_RST : BOOL ; //complete restart
MAN_ON : BOOL := TRUE; //manual value on
PVPER_ON : BOOL ; //process variable peripherie on
P_SEL : BOOL := TRUE; //proportional action on
I_SEL : BOOL := TRUE; //integral action on
INT_HOLD : BOOL ; //integral action hold
I_ITL_ON : BOOL ; //initialization of the integral action
D_SEL : BOOL ; //derivative action on
CYCLE : TIME := T#1S; //sample time
SP_INT : REAL ; //internal setpoint
PV_IN : REAL ; //process variable in
PV_PER : WORD ; //process variable peripherie
MAN : REAL ; //manual value
GAIN : REAL := 2.000000e+000; //proportional gain
TI : TIME := T#20S; //reset time
TD : TIME := T#10S; //derivative time
TM_LAG : TIME := T#2S; //time lag of the derivative action
DEADB_W : REAL ; //dead band width
LMN_HLM : REAL := 1.000000e+002; //manipulated value high limit
LMN_LLM : REAL ; //manipulated value low limit
PV_FAC : REAL := 1.000000e+000; //process variable factor
PV_OFF : REAL ; //process variable offset
LMN_FAC : REAL := 1.000000e+000; //manipulated value factor
LMN_OFF : REAL ; //manipulated value offset
I_ITLVAL : REAL ; //initialization value of the integral action
DISV : REAL ; //disturbance variable
LMN : REAL ; //manipulated value
LMN_PER : WORD ; //manipulated value peripherie
QLMN_HLM : BOOL ; //high limit of manipulated value reached
QLMN_LLM : BOOL ; //low limit of manipulated value reached
LMN_P : REAL ; //proportionality component
LMN_I : REAL ; //integral component
LMN_D : REAL ; //derivative component
PV : REAL ; //process variable
ER : REAL ; //error signal
sInvAlt : REAL ;
sIanteilAlt : REAL ;
sRestInt : REAL ;
sRestDif : REAL ;
sRueck : REAL ;
sLmn : REAL ;
sbArwHLmOn : BOOL ;
sbArwLLmOn : BOOL ;
sbILimOn : BOOL := TRUE;
END_STRUCT
END_TYPE
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DATA_BLOCK DB10 FB41
//
// Dummy DB
// Instanz-DB FB41
//
BEGIN
END_DATA_BLOCK
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
FUNCTION FC1 : VOID
VAR_INPUT
DB_Nr : INT; //DB-Nr CONT_C
END_VAR
VAR_TEMP
tAnyDB : ANY;
_AnyDB AT tAnyDB : STRUCT
ID : BYTE;
DataTyp : BYTE;
Count : WORD;
DBNr : WORD;
BytePointer : DWORD;
END_STRUCT;
tAnyDummy : ANY;
_AnyDummy AT tAnyDummy : STRUCT
ID : BYTE;
DataTyp : BYTE;
Count : WORD;
DBNr : WORD;
BytePointer : DWORD;
END_STRUCT;
tRetVal : INT;
END_VAR
BEGIN
//Any-Pointer auf DB zusammenstellen
_AnyDB.ID := B#16#10; //Muss so sein
_AnyDB.DataTyp := B#16#2; //Datentyp Byte
_AnyDB.Count := W#16#7E; //Anzahl 126 Bytes
_AnyDB.DBNr := INT_TO_WORD(DB_Nr); //DB
_AnyDB.BytePointer := DW#16#84000000; //Pointer auf DBX0.0
//Any-Pointer auf Dummy-DB zusammenstellen
_AnyDummy.ID := B#16#10; //Muss so sein
_AnyDummy.DataTyp := B#16#2; //Datentyp Byte
_AnyDummy.Count := W#16#7E; //Anzahl 126 Bytes
_AnyDummy.DBNr := W#16#A; //Dummy DB-Nr 10
_AnyDummy.BytePointer := DW#16#84000000; //Pointer auf DBX0.0
//DB-Struktur in Dummy-DB kopieren
tRetVal := BLKMOV(SRCBLK := tAnyDB, DSTBLK := tAnyDummy);
//Bausteinaufruf CONT_C mit Dummy Instanz-DB
CONT_C.DB10();
//Dummy-DB in DB-Struktur kopieren
tRetVal := BLKMOV(SRCBLK := tAnyDummy, DSTBLK := tAnyDB);
END_FUNCTION