Страница 7 из 36 ПерваяПервая ... 5678917 ... ПоследняяПоследняя
Показано с 61 по 70 из 353

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

  1. #61
    Пользователь
    Регистрация
    22.02.2012
    Адрес
    Челябинск
    Сообщений
    123

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    В том то весь и смысл, мало того, что выход один, функция не сохраняет данные, и каждый раз будет снова запускаться, сделали бы ФБ даже с одним выходом, можно было бы и таймеры и что угодно делать.
    Возможно дело в том, что в ОВЕН хотят, чтобы все эти изделия назывались непременно "программируемые реле". А у таких реле уже устоявшийся вид среды и методики программирования. Т.е. нет задачи превратить это в ПЛК (я помню давнюю дискуссию на эту тему здесь где-то). Поэтому такой усеченный вид. Пригодный только для упрощения комбинационной логики и вычислений, т.е. того, что сильно занимает экран. Бесило рисовать например 8-входовое ИЛИ, а тут раз и просто. Или посчитать что-нибудь большее чем сложить/умножить. А так: вроде и упростили работу и "фундаментальных основ" не затронули.

  2. #62
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    70

    По умолчанию

    Странно, в макрос запихать функцию на ST нельзя, можно пользоваться только в основной программе

  3. #63

    По умолчанию

    Посмотрим что дальше будет, но думаю грань между ПЛК и ПР они не передут. Если не передут то разбегутся от них все. И ПР103 будет не востребован.

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

    По умолчанию

    Цитата Сообщение от Адрей Посмотреть сообщение
    Посмотрим что дальше будет, но думаю грань между ПЛК и ПР они не передут. Если не передут то разбегутся от них все. И ПР103 будет не востребован.
    А что есть такая грань?
    Кроме Вас об этом кто-то знает?
    Сколько было тем по этому вопросу, пока грань не получалось обозначить, короче, не томите, грани нарисуйте!
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  5. #65

    По умолчанию

    Цитата Сообщение от gmz_001 Посмотреть сообщение
    Браво!
    Но да, выходных переменных нехватает. Конечного автомата не сделаешь. Только для расчетов годится.
    Добрый вечер! Конечный автомат сделать можно. На входе создаете переменную, например, PrevState. И с помощью "линии задержки" передаете выходное значение Q (UDInt - код шага в автомате) на вход. Таким образом при вызове функция узнает на каком шаге автомата она остановилась в прошлом цикле. Внутри делаете CASE по PrevState и все. Получился такой себе FB с хранением предыдущего состояния "снаружи". Все таймеры внешние. Если шаг =10, то таймер 1 запустить. Таймер через время задержки Т выдает TRUE на вход функции. Управление исполнительными механизмами - по номеру состояний. скрин 1.JPGскрин 2.JPG

  6. #66

    По умолчанию

    Цитата Сообщение от 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

  7. #67

    По умолчанию

    Важно, чтобы в каждом состоянии в любом случае выполнялась команда присвоения State := ... . Тогда все будет работать.

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

    По умолчанию

    Цитата Сообщение от 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
    Целое сочинение ,которое заменяется несколькими квадратиками
    электронщик до мозга костей и не только

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

    По умолчанию

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

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

    По умолчанию

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

Страница 7 из 36 ПерваяПервая ... 5678917 ... ПоследняяПоследняя

Похожие темы

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

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

Ваши права

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