Hallo,
die Bausteine werden zyklisch aufgerufen und unterliegen auch keiner Bedingung.
So werden die Bausteine in meinem Programm aufgerufen (LOG_Durchluss und LOG_Durchluss_Zaehler_Tag sind DLOG_REAL Bausteine):
DLOG_DT(
FMT:=,
COLUMN:='Datum/Zeit' ,
DELTA:= ,
X:=X );
LOG_Durchfluss(
VALUE:=MAIN.Durchfluss.MW ,
N:= 1, (*Nachkommastellen*)
D:='.' ,
COLUMN:= 'Durchfluss.Messwert',
DELTA:=5 ,
DELTA_ONLY:= TRUE,
MIN_DELAY:= t#10s,
X:= X);
LOG_Durchluss_Zaehler_Tag(
VALUE:=MAIN.DFL_Zaehler.Zaehlerstand_Tag ,
N:= 0, (*Nachkommastellen*)
D:='.' ,
COLUMN:= 'DFL_Zaehler.Zaehlerstand_Tag',
DELTA:=1 ,
DELTA_ONLY:= TRUE,
MIN_DELAY:= t#1m,
X:= X);
DLOG_STORE_FILE_CSV(
ENABLE:=Filename <> '' AND DLOG_FILE_TO_STRING.FILE_COUNT < 100 , (*Es wird nur aufgezeichnet, wenn die Freigabe gesetzt ist und weniger als 100 Files im Buffer vorhanden sind*)
TRIG_M:= TIMER_INIT_SAVE.Q,
TRIG_T:= ,
FILENAME:=Filename ,
DTI:= Uhrzeit_Lokal,
SEP:= 59, (*ASCII-Zeichen für ; *)
AUTO_CLOSE:=t#5m, (*in diesem Intervall wird das File zwingend gespeichert*)
RETAIN_DATA:=MAIN.DLOG_RETAIN,
X:= X,
ERROR_C=> ,
ERROR_T=> );
Hier noch der Code vom abgeänderten DLOG_REAL Baustein:
TIMER_delay(IN:=TRUE, PT:= MIN_DELAY); (*Mindestzeit zwischen zwei Wertänderungen*)
CASE x.ADD_COM OF
01: (* ADD INFO *)
X.ID_MAX := X.ID_MAX + USINT#1;
id := WORD#16#0201; (* Quelltype REAL , Zieltype STRING *)
02: (* ADD HEADER *)
X.UCB.D_STRING := COLUMN;
X.UCB.D_HEAD := id;
X.UCB.D_MODE := 1;
UCB(DATA:=X.UCB); (* Daten eintragen *)
value_log:= REAL_TO_STRF(IN:=VALUE,N:=N,D:=D); (*RHC - Wert initialisieren*)
03: (* ADD DATA *)
IF (DELTA_ONLY) THEN
X.UCB.D_STRING := value_log;
value_log:= '';
ELSE
X.UCB.D_STRING := REAL_TO_STRF(IN:=value_last,N:=N,D:=D);
delta_last := value_last;
END_IF
X.UCB.D_HEAD := id;
X.UCB.D_MODE := 1;
UCB(DATA:=X.UCB); (* Daten eintragen *)
04: (* ADD DATA REQ *)
IF DELTA <> 0.0 THEN
IF (VALUE <= (delta_last - DELTA) OR VALUE >= (delta_last + DELTA)) AND TIMER_delay.Q THEN
value_log:= REAL_TO_STRF(IN:=VALUE,N:=N,D:=D);
X.ADD_DATA_REQ := TRUE;
delta_last := VALUE;
TIMER_delay(IN:= FALSE);
END_IF;
END_IF;
END_CASE;
value_last := VALUE;
Ich sehe leider keinen Fehler...