//Input
Wert : REAL/INT... (was auch immer)
BenuterHMI : INT
//InOut
Buffer : ARRAY [1..*] OF UDT_Buffereintrag
//Out
AktIndex : INT
//Static
Index : INT
WertVorher: REAL/INT... (was auch immer)
//Temp
ArraySize : UDINT
ReturnValue : INT
CDT : DATE_AND_TIME
//Start des Codes...
#ArraySize := COUNT_OF_ELEMENTS(#Buffer); //Array Größe ermitteln
IF #Index > ArraySize OR #Index = 0 THEN //Index initialisieren
#Index := 1;
END_IF;
#ReturnValue := READ_CLK(CDT := #CDT); //Uhrzeit lesen
IF #Wert <> #WertVorher THEN //Änderung erfasst
Buffer[#Index].BenutzerID := #BenutzerHMI;
Buffer[#Index].WertVorher := #WertVorher;
Buffer[#Index].WertJetzt := #Wert;
Buffer[#Index].DatumUhrzeit := #CDT:
END_IF;
#WertVorher := #Wert; //Aktuellen Wert als alten Wert ablegen
#AktIndex := #Index; //Aktuelle Zeile als OUT ausgeben