Показано с 1 по 10 из 606

Тема: Создать функцию на ST

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от gmz_001 Посмотреть сообщение
    Браво!
    Но да, выходных переменных нехватает. Конечного автомата не сделаешь. Только для расчетов годится.
    Как пример - кусок кода. Не знаю как правильно его вставлять:
    FUNCTION State: udint; //имя функции и тип данных выхода

    VAR_INPUT //объявление входных переменных
    SaveState : udint; // сохраненное значения состояния в предыдущем цикле
    MdRevKM : bool; // режим работы реверсивных контакторов 0=ручной / 1=автомат
    MdFuelVlv : bool; // режим работы топливного крана 0=ручной / 1=автомат
    MdGen : bool; // режим работы генератора 0=ручной / 1=автомат
    InSplOk : bool; // сетевое питание в норме
    GenSplOk : bool; // питание от генератора в норме
    FuelVlvOpn : bool; // топливный кран 1=открыт
    FuelVlvCls : bool; // топливный кран 1=закрыт
    Start : bool; // импульс первого выполнения программы после загрузки
    S0_Tmr : bool; // таймер состояния (загрузка)
    S6_Tmr : bool; // таймер состояния (закрытие топливного клапана)
    S7_Tmr : bool; // таймер состояния (команда остановки генератора)
    S24_Tmr : bool; // таймер состояния (заполнение бензином поплавковой камеры)
    END_VAR

    VAR //объявление локальных переменных
    boolVAR : bool := FALSE;
    END_VAR

    IF Start THEN
    State := 0;
    ELSE
    CASE SaveState OF
    0: // запуск графа, пауза для срабатывания реле контроля напряжения (должно быть более TON19/20)
    IF S0_Tmr THEN
    State := 1;
    ELSE
    State := 0; // остаемся в текущем состоянии
    END_IF

    1: // запуск графа, проверка режима работы реверсивных контакторов
    IF MdRevKM THEN
    State := 2;
    ELSE
    State := 1; // остаемся в текущем состоянии
    end_if

    2: // проверка наличия сетевого питания
    IF InSplOk THEN
    State := 3;
    ELSE
    State := 4;
    END_IF

    3: // включение контактора питания от сети КМ1
    IF InSplOk = FALSE THEN // если сетевое напряжение пропало
    State := 2;
    ELSE
    State := 3; // остаемся в текущем состоянии
    END_IF

    4: // проверка наличия питания от генератора
    IF GenSplOk THEN
    State := 5;
    ELSE
    // уходим на запуск генератора
    State := 20;
    END_IF

  2. #2
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,150

    По умолчанию

    Цитата Сообщение от CORSAR1500 Посмотреть сообщение
    Как пример - кусок кода. Не знаю как правильно его вставлять:
    FUNCTION State: udint; //имя функции и тип данных выхода

    VAR_INPUT //объявление входных переменных
    SaveState : udint; // сохраненное значения состояния в предыдущем цикле
    MdRevKM : bool; // режим работы реверсивных контакторов 0=ручной / 1=автомат
    MdFuelVlv : bool; // режим работы топливного крана 0=ручной / 1=автомат
    MdGen : bool; // режим работы генератора 0=ручной / 1=автомат
    InSplOk : bool; // сетевое питание в норме
    GenSplOk : bool; // питание от генератора в норме
    FuelVlvOpn : bool; // топливный кран 1=открыт
    FuelVlvCls : bool; // топливный кран 1=закрыт
    Start : bool; // импульс первого выполнения программы после загрузки
    S0_Tmr : bool; // таймер состояния (загрузка)
    S6_Tmr : bool; // таймер состояния (закрытие топливного клапана)
    S7_Tmr : bool; // таймер состояния (команда остановки генератора)
    S24_Tmr : bool; // таймер состояния (заполнение бензином поплавковой камеры)
    END_VAR

    VAR //объявление локальных переменных
    boolVAR : bool := FALSE;
    END_VAR

    IF Start THEN
    State := 0;
    ELSE
    CASE SaveState OF
    0: // запуск графа, пауза для срабатывания реле контроля напряжения (должно быть более TON19/20)
    IF S0_Tmr THEN
    State := 1;
    ELSE
    State := 0; // остаемся в текущем состоянии
    END_IF

    1: // запуск графа, проверка режима работы реверсивных контакторов
    IF MdRevKM THEN
    State := 2;
    ELSE
    State := 1; // остаемся в текущем состоянии
    end_if

    2: // проверка наличия сетевого питания
    IF InSplOk THEN
    State := 3;
    ELSE
    State := 4;
    END_IF

    3: // включение контактора питания от сети КМ1
    IF InSplOk = FALSE THEN // если сетевое напряжение пропало
    State := 2;
    ELSE
    State := 3; // остаемся в текущем состоянии
    END_IF

    4: // проверка наличия питания от генератора
    IF GenSplOk THEN
    State := 5;
    ELSE
    // уходим на запуск генератора
    State := 20;
    END_IF
    Целое сочинение ,которое заменяется несколькими квадратиками
    электронщик до мозга костей и не только

  3. #3
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,438

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    Целое сочинение ,которое заменяется несколькими квадратиками
    Согласен: исписали два карандаша!
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  4. #4
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,150

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Согласен: исписали два карандаша!
    Для формул, расчетов еще туда-сюда ...
    электронщик до мозга костей и не только

  5. #5

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    Целое сочинение ,которое заменяется несколькими квадратиками
    Конечный автомат очень удобен для проектирования - сразу продумываешь состояния, удобен на этапе отладки - она практически и не нужна, вся отладка прошла еще на листочке на этапе проектирования. Работа КА предсказуема, точно известно состояние ситемы в целом в любой момент времени. Да, он более громоздкий чем переплетения из комбинационной логики.
    Вообще, его можно и на fbd и на lad делать, для ПР200 писал. Но st с его CASE of - просто идеальный язык, но опять вылазят ограничения конкретной реализации и вновь нужны костыли.

Похожие темы

  1. Ответов: 14
    Последнее сообщение: 01.07.2023, 21:30
  2. Ответов: 6
    Последнее сообщение: 22.12.2021, 10:50
  3. Ответов: 3
    Последнее сообщение: 13.09.2021, 13:31
  4. ПЛК160. Чем заменить функцию записи 0x05?
    от FallenDAY в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.08.2017, 13:19
  5. Как написать собственную функцию wait()
    от PavelKazakov в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 23.07.2009, 11:37

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •