я пробовал через RETAIN и VAR RETAIN PERSISTENT ну или я может что то не так делаю или не понимаю, но после сброса питания(даже записав перед этим значение) на плк он устанавливает переменную в 0
Вид для печати
я пробовал через RETAIN и VAR RETAIN PERSISTENT ну или я может что то не так делаю или не понимаю, но после сброса питания(даже записав перед этим значение) на плк он устанавливает переменную в 0
PROGRAM PLC_PRG
VAR_INPUT
PUSK: BOOL:=TRUE;
END_VAR
VAR
time_ton: TIME:=T#1s;
TON1: TON;
result: BOOL;
fileName: STRING := 'myFile';
mode: STRING := 'w';
state: INT:=0;
in_ton: BOOL;
cycle: INT;
OUT_flag: BOOL;
PULSE: BOOL:=TRUE;
END_VAR
VAR RETAIN PERSISTENT
counter:INT ;
END_VAR
IF PUSK=TRUE THEN
cycle:=counter;
PUSK:=FALSE;
END_IF
CASE state OF
0: IF PULSE=TRUE THEN
in_ton:=TRUE;
state:=10;
END_IF
10:
IF in_ton=TRUE THEN
cycle:=cycle+1;
state:=20;
END_IF
20:
TON1(IN:=in_ton, PT:= time_ton, Q=>OUT_flag);
state:=30;
30:
in_ton:=FALSE;
OUT_flag:=FALSE;
state:=40;
40:
IF PULSE=FALSE THEN
counter:=cycle;
ELSE
state:=0;
END_IF
END_CASE
вот такой тестовый код написал для проверки и пробы
Из всего этого нужно всего лишь
Память убить нельзя, т.к. RETAIN переменные физически записываются в момент выключения питанияКод:PROGRAM PLC_PRG
VAR
TON1: TON:=(PT:=T#1s);
OUT_flag: BOOL;
END_VAR
VAR RETAIN
cycle: UDINT;
END_VAR
TON1(IN:=NOT OUT_flag, Q=>OUT_flag );
cycle:= cycle + BOOL_TO_INT(OUT_flag);