Запуская в OB1
Код обрабатывается в FB.
FB включён в OB1.
Подозревал что в переменой типа TEMP что то подобное присутствует. Сделал ради эксперимента ити переменные типа InOut и передаю их в глобальную DB сделанную только для этого. И начало работать большая часть таймеров, но пару таймеров всё равно не хотят работать, видно как на них приходит IN=TRUE, PT=10сек но ET стоит на месте и не считает, из за этого программа дальше не двигается.
всё перепроверил всё абсолютно одинаково что там где таймеры работают что там где не работают. ШАЙТАНАМА.
Код: Выделить всё
"К_Дребезг_концевик_Закрыто".TON(IN:=#Концевик_клапан_закрыт,PT:=#Время_задержки_концевиков);
"К_Дребезг_концевик_20_30".TON(IN:=#Концевик_клапан_20_30,PT:=#Время_задержки_концевиков);
"К_Дребезг_Концевик_100".TON(IN:=#Концевик_клапан_100,PT:=#Время_задержки_концевиков);
#Режим_налива_temp := #Режим_налива;
CASE #Режим_налива OF
0: //
#Запуск_таймера_концевика_100 := FALSE;
#"Запуск_таймера_ концевика_20_30" := FALSE;
#Запуск_таймера_налива_первой_стадии := FALSE;
#Запуск_таймера_третьей_стадии := FALSE;
#Запуск_таймера_концевик_закрытия := FALSE;
#Запуск_таймера_вакумсброса := FALSE;
#Запуск_таймера_концевика_20_30_закрытие:= FALSE;
IF #Датчик_температуры < #Температура_запрета_работы_клапана THEN
#Режим_налива_temp := 1;
ELSE
#Режим_налива_temp := 2;
END_IF;
1: //
#Нагрев_клапана := TRUE;
IF #Датчик_температуры >= #Температура_разрешения_нагрева THEN
#Нагрев_клапана := FALSE;
#Режим_налива_temp := 2;
END_IF;
3: //
IF "К_Дребезг_концевик_20_30".Q OR "К_Дребезг_Концевик_100".Q OR NOT "К_Дребезг_концевик_Закрыто".Q THEN
#Режим_налива_temp := 20;
END_IF;
4: //
IF #Количество_стадий_открытия THEN
// Если налив по стадиям
#Открыть_20_30 := TRUE;
#"Запуск_таймера_ концевика_20_30" := TRUE;
#Запуск_таймера_налива_первой_стадии := TRUE;
#Режим_налива_temp := 5;
ELSE
#Режим_налива_temp := 7;
END_IF;
5: //
IF "K_Таймер_отработки_концевика_20_30".Q THEN
IF "К_Дребезг_концевик_20_30".Q AND NOT "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q THEN
#"Запуск_таймера_ концевика_20_30" := FALSE;
#Режим_налива_temp := 6;
ELSE
#Открыть_20_30 := FALSE;
#"Запуск_таймера_ концевика_20_30" := FALSE;
#Запуск_таймера_налива_первой_стадии := FALSE;
#Режим_налива_temp := 20;
END_IF;
END_IF;
6: //
IF "K_Таймер_первой_стадии_налива".Q THEN
IF "К_Дребезг_концевик_20_30".Q AND NOT "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q THEN
#Запуск_таймера_налива_первой_стадии := FALSE;
#Режим_налива_temp := 7;
ELSE
#Открыть_20_30 := FALSE;
#"Запуск_таймера_ концевика_20_30" := FALSE;
#Запуск_таймера_налива_первой_стадии := FALSE;
#Режим_налива_temp := 7;
END_IF;
IF NOT "К_Дребезг_концевик_20_30".Q AND "К_Дребезг_концевик_Закрыто".Q AND "К_Дребезг_Концевик_100".Q THEN
#Открыть_20_30 := FALSE;
#Запуск_таймера_налива_первой_стадии := FALSE;
#Режим_налива_temp := 20;
END_IF;
END_IF;
7: //
#Открыть_100 := TRUE;
#Открыть_20_30 := FALSE;
#Запуск_таймера_концевика_100 := TRUE;
#Режим_налива_temp := 8;
8: //
IF "K_Таймер_отработки_концевика_100".Q THEN
IF NOT "К_Дребезг_концевик_20_30".Q AND NOT "К_Дребезг_концевик_Закрыто".Q AND "К_Дребезг_Концевик_100".Q THEN
#Запуск_таймера_концевика_100 := FALSE;
#Режим_налива_temp := 9;
ELSE
#Открыть_100 := FALSE;
#Запуск_таймера_концевика_100 := FALSE;
#Режим_налива_temp := 20;
END_IF;
END_IF;
9: //
IF "К_Дребезг_концевик_20_30".Q OR "К_Дребезг_концевик_Закрыто".Q OR NOT "К_Дребезг_Концевик_100".Q THEN
#Открыть_100 := FALSE;
#Режим_налива_temp := 20;
END_IF;
10: //
#"Запуск_таймера_ концевика_20_30" := FALSE;
#Запуск_таймера_налива_первой_стадии := FALSE;
IF #Количество_стадий_открытия THEN
#Открыть_100 := FALSE;
#Открыть_20_30 := TRUE;
#Запуск_таймера_концевика_20_30_закрытие := TRUE;
#Запуск_таймера_третьей_стадии := TRUE;
#Режим_налива_temp := 11;
ELSE
#Режим_налива_temp := 13;
END_IF;
11: //
IF "К_Таймер_отработки_концевика_20_30_закрытие".Q THEN
IF "К_Дребезг_концевик_20_30".Q AND NOT "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q THEN
#Запуск_таймера_концевика_20_30_закрытие := FALSE;
#Режим_налива_temp := 12;
ELSE
#Запуск_таймера_концевика_20_30_закрытие := FALSE;
#Открыть_20_30 := FALSE;
#Режим_налива_temp := 20;
END_IF;
END_IF;
12: //
IF "K_Таймер_третьей_стадии_налива".Q THEN
IF "К_Дребезг_концевик_20_30".Q AND NOT "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q THEN
#Запуск_таймера_третьей_стадии := False;
#Режим_налива_temp := 13;
ELSE
#Запуск_таймера_третьей_стадии := False;
#Открыть_20_30 := FALSE;
#Режим_налива_temp := 20;
END_IF;
END_IF;
IF NOT "К_Дребезг_концевик_20_30".Q OR "К_Дребезг_концевик_Закрыто".Q OR "К_Дребезг_Концевик_100".Q THEN
#Открыть_20_30 := FALSE;
#Запуск_таймера_третьей_стадии := False;
#Режим_налива_temp := 20;
END_IF;
13: //
#Запуск_таймера_концевик_закрытия := TRUE;
#Открыть_20_30 := FALSE;
#Открыть_100 := FALSE;
#Режим_налива_temp := 14;
14: //
IF "K_Таймер_отработки_концевика_закрытия".Q THEN
IF "К_Дребезг_концевик_20_30".Q AND NOT "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q THEN
#Запуск_таймера_концевик_закрытия := FALSE;
#Режим_налива_temp := 15;
ELSE
#Запуск_таймера_концевик_закрытия := FALSE;
#Режим_налива_temp := 20;
END_IF;
END_IF;
15: //
IF #Наличие_вакумсброса THEN
#Вакум_сброс := TRUE;
#Запуск_таймера_вакумсброса := TRUE;
#Режим_налива_temp := 16;
ELSE
#Режим_налива_temp := 17;
END_IF;
16: //
IF "K_Таймер_вакумсброса".Q THEN
#Вакум_сброс := FALSE;
#Запуск_таймера_вакумсброса := FALSE;
#Режим_налива_temp := 17;
END_IF;
17: //
IF NOT "К_Дребезг_концевик_Закрыто".Q OR "К_Дребезг_Концевик_100".Q OR "К_Дребезг_концевик_20_30".Q THEN
#Режим_налива_temp := 20;
END_IF;
20: //
#Вакум_сброс := FALSE;
#Открыть_20_30 := FALSE;
#Открыть_100 := FALSE;
IF "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q AND NOT "К_Дребезг_концевик_20_30".Q THEN
#Режим_налива_temp := 21;
ELSE
#Режим_налива_temp := 20;
END_IF;
21: //
IF "К_Дребезг_концевик_Закрыто".Q AND NOT "К_Дребезг_Концевик_100".Q AND NOT "К_Дребезг_концевик_20_30".Q THEN
#Режим_налива_temp := 21;
ELSE
#Режим_налива_temp := 20;
END_IF;
END_CASE;
"K_Таймер_отработки_концевика_100".TON(IN := #Запуск_таймера_концевика_100,PT := #Контрольное_время_концевика_100);
"K_Таймер_отработки_концевика_20_30".TON(IN := #"Запуск_таймера_ концевика_20_30",PT := #Контрольное_время_концевика_20_30);
"K_Таймер_первой_стадии_налива".TON(IN := #Запуск_таймера_налива_первой_стадии,PT := #Время_1_стадии - #Контрольное_время_концевика_20_30);
"K_Таймер_третьей_стадии_налива".TON(IN := #Запуск_таймера_третьей_стадии,PT := #Время_3_стадии);
"K_Таймер_отработки_концевика_закрытия".TON(IN := #Запуск_таймера_концевик_закрытия,PT := #Контрольное_время_концевика_закрытия);
"K_Таймер_вакумсброса".TON(IN := #Запуск_таймера_вакумсброса,PT := #"Время_вакум_ сброса");
"К_Таймер_отработки_концевика_20_30_закрытие".TON(IN:=#Запуск_таймера_концевика_20_30_закрытие,PT:=#Контрольное_время_концевика_20_30);
#Режим_налива := #Режим_налива_temp;
Работают
"K_Таймер_отработки_концевика_100"
"K_Таймер_отработки_концевика_20_30"
"K_Таймер_первой_стадии_налива"
Не работают
"К_Таймер_отработки_концевика_20_30_закрытие"
"K_Таймер_третьей_стадии_налива"