1)ТО есть на языке ST IF NOT D THEN
SIGNAL();
END_IF
IF NOT K THEN
KOD()
IF (KN AND ON1) THEN
SIGNAL();
END_IF
IF (KOK AND ON1) THEN
OpenDoor();
END_IF
IF (NOT KOK AND ON1) THEN
INIT();
END_IF
END_IF
И в KOD() свои состояния, где ПЛК останется на следующий рабочий цикл?
Щас у меня KOD написан на SFC и в нём реализовано следующее (пример взят из книги Урусова по 1816 - реализация кодового замка):
1)зажигается лампочка на максимум 100 с и начинается ожидания нажатия кнопки.
2)если в процессе ожидания или нажатия кнопки нажали ручку - то лампочка гаснет, выставляется признак KN и происходит выход из KOD
3)если нажали кнопку, то включается звук (пока кнопка нажата) и запускается таймер на 5 с. Человек за 5 с должен успеть нажать кнопку определённое число раз (в первый последовательности 2 раза)
4)по истечении 5 с происходит проверка - если число нажатий совпало с заданным, то КОК = ТРУ и переход на ожидание второй последовательности. Иначе - КОК = ФАЛСЕ и выход
5)если нажали кнопку, то включается звук (пока кнопка нажата) и запускается таймер на 5 с. Человек за 5 с должен успеть нажать кнопку определённое число раз (во второй последовательности 1 раз)
6)по истечении 5 с происходит проверка - если число нажатий совпало с заданным, то КОК = ТРУ и выход. Иначе - КОК = ФАЛСЕ и выход
7)Если кнопку не нажали, то выход с КОК=ФАЛСЕ (вот это я не сделал - забыл)
Всё в эмуляторе работает, как будет на реальном ПЛК - вопос конечно. Но при попытке написания тела КОД на ST - понял, что не ясно как сделать ожидание.
2)По индикаторам -понял, спасибо.
3)По таймеру - если не сложно, можно даже в виде куска кода с 1-двума строчками объяснения на какое время и по какому сигналу запускается
Спасибо