ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Понедельник
8 августа
1210706 Топик полностью
symbions (21.05.2022 21:03, просмотров: 84) ответил _Илья на ПЛК нигде не остаётся на следующий цикл.
Понял. ТО есть для написания на ST в моём случае надо ввести переменную для состояния и тупо сделать в самом начале CASE и делать переходы на нужный мне кусок кода. 

Типа такого

VAR
  usSOST :USINT= 1;
END_VAR

CASE usSOST OF
  1: //ЧОТО ТУТ ДЕЛАЕМ ЧТО НАДО В ИНИТЕ ДЕЛАТЬ
    IF NOT D THEN
      SIGNAL();(*usSOST делает равным 2 и запускает таймер MyTimer*)
      //ПО ФАКТУ ЭКВИАВАЛЕНТ БЛОКУ Е НА МОДЕЛИ SFC
    END_IF
    IF NOT K THEN
      KOD();(*usSOST делает равным 3..10 в зависисмости на каком этапе внутри процедуры остаюсь*)
      //ПО ФАКТУ ЭКВИАВАЛЕНТ БЛОКУ Е НА МОДЕЛИ SFC
    END_IF
  2:
    IF MyTimer.Q=TRUE THEN
      MyTimer.IN:=FALSE;
      usSOST :=1;(*ПЕРЕХОД НА INIT*)
    END_IF
  3..9:
    KOD();(*usSOST МЕНЯЕТ В ПРЕДЕЛАХ 3..10 в зависисмости на каком этапе внутри процедуры остаюсь*)
  10: (*работа блока KOD окнчена была*)
    IF KN THEN
      SIGNAL();(*usSOST делает равным 2 и запускает таймер MyTimer*)
      //ПО ФАКТУ ЭКВИАВАЛЕНТ БЛОКУ Е НА МОДЕЛИ SFC
    END_IF
    IF KOK THEN
      OpenDoor();(*usSOST делает равным 11*)
    ELSE
      usSOST :=1;(*переход на init*)
    END_IF
  11: //ПОХОЖЕЕ ДЛЯ БЛОКА OpenDoor
  12: //ПОХОЖЕЕ ДЛЯ БЛОКА WaitClose
  ELSE
    usSOST :=1;(*переход на init - на всякий случай*)
  END_CASE

Ну или несколько переменных состяний - то уже на любителя

Вроде бы понял, спасибо