Страница 32 из 765 ПерваяПервая ... 2230313233344282132532 ... ПоследняяПоследняя
Показано с 311 по 320 из 7646

Тема: Вопросы начинающего

  1. #311

    По умолчанию

    Для организации таймера в 1 сек пробывал сделать так:
    Программа ST:
    PROGRAM MAIN_PROGRAM

    VAR_INPUT
    in:bool;
    front_out:bool;
    END_VAR

    VAR_OUTPUT
    out:bool;
    front_in:bool;
    END_VAR

    (*TODO: TYPE PROGRAM CODE HERE*)
    if in = true then
    if front_in = false and front_out = false then
    front_in := true;
    out := true;
    elsif front_in = true and front_out = false then
    front_in := false;
    out := false;
    end_if;
    end_if;
    END_PROGRAM
    и ФБ Передний фронт.Связь Вход-front_in, передний фронт-front_out.
    Схема в принципе работает, но не 1 сек, а примерно в 2.Это и понятно,потому что 1 такт программы 1сек. Пробывал уменьшить время опроса объектов. Не помогло. Что еще можно сделать?

  2. #312

    По умолчанию

    Вот такой код попробуйте. Опрос у ФБ "Скрипт ST" поставьте периодический (опрос остальных объектов можно не менять)
    PROGRAM MAIN_PROGRAM

    VAR_INPUT
    in:bool;
    END_VAR

    VAR_OUTPUT
    out:bool;
    END_VAR

    var
    m:bool:=false;
    Trig1:R_Trig;
    end_var

    (*TODO: TYPE PROGRAM CODE HERE*)
    Trig1(Clk:=in);
    if out=true then
    out:=false;
    end_if;
    if m=true then
    out:=true;
    m:=false;
    end_if;
    if Trig1.Q=true then
    m:=true;
    end_if;
    END_PROGRAM
    Спасибо.

  3. #313

    По умолчанию

    Это код я как понял будет так.Поменялось in с 0 на 1 через 1сек поменялся out. и все.Чтобы опять out стал равен 1, а потом 0 надо in снова поменять на 0, а потом на 1.Мне же надо сделать так.Если на in пришла 1,то out поочередно сам меняется с 0 на 1. и меняется до тех пор,пока in равен 1, как только in равен 0, out перестает менятся.

  4. #314

    По умолчанию

    сделал так:
    PROGRAM MAIN_PROGRAM

    VAR_INPUT
    in:bool;
    END_VAR

    VAR_OUTPUT
    out:bool;
    END_VAR

    VAR
    timer:TON;
    timer1:TON;
    END_VAR

    (*TODO: TYPE PROGRAM CODE HERE*)
    if in = true then
    timer();
    timer1();
    if not timer.in then
    timer1(in:=false);
    timer(in:=true,PT :=T#1s);
    out := true;
    end_if;

    if timer.Q then
    out := false;
    timer1(in:=true,PT:=T#1s);
    end_if;

    if timer1.Q then
    timer(in:=false);
    end_if;
    end_if;
    END_PROGRAM
    Насколько можно(оптимально) уменьшить время цикла программы?

  5. #315

    По умолчанию

    Можно вопрос.Я так думаю что Время цикла программы должно быть таким же как время цикла опроса ОРС сервера, иначе если время программы будет меньше время цикла ОРС, то могут пойти ошибки.А можно ли время для ОРС задать 20 мс?Не произойдут ли какие нибудь сбои из-за времени?

  6. #316

    По умолчанию

    20 мс слишком мало. Сам ОРС за это время не успеет устройство опросить.
    Мы не рекомендуем снижать цикл опроса ОРС и объектов ниже 500 мс. Тем более что ниже этого значения - это бессмысленно, все равно оператор не успеет среагировать с такой скоростью.
    Спасибо.

  7. #317

    По умолчанию

    А тогда можно сделать так:время цикла программы одно допустим 50мс, а время опроса ОРС оставить 1000мс?Или все таки они должны быть одинаковы?

  8. #318

    По умолчанию

    В принципе можно, но тогда объекты будут исполняться в разных потоках.
    Может получится что слишком короткие импульсы которые вы будете передавать из "быстрого" объекта в "медленный" могут не пройти.
    А зачем вам такой маленький цикл?
    Спасибо.

  9. #319

    По умолчанию

    Просто надо было отобразить аварийное состояние клапана.Это состояние состоит из 2 изображений. И надо переключать эти изображения с переодичностью 1 сек. при аварии.Сделал Программу ST:
    PROGRAM MAIN_PROGRAM

    VAR_INPUT
    in:bool;
    END_VAR

    VAR_OUTPUT
    out:bool;
    END_VAR

    VAR
    timer:TON;
    timer1:TON;
    END_VAR

    (*TODO: TYPE PROGRAM CODE HERE*)
    if in = true then
    timer();
    timer1();
    if not timer.in then
    timer1(in:=false);
    timer(in:=true,PT :=T#1s);
    out := true;
    end_if;

    if timer.Q then
    out := false;
    timer1(in:=true,PT:=T#1s);
    end_if;

    if timer1.Q then
    timer(in:=false);
    end_if;
    end_if;
    END_PROGRAM
    этот код зависит от времени выполнения цикла.Если поставить 1000мс, то out меняется с периодичностью 2 сек.Вот для этого уменьшил.

  10. #320

    По умолчанию

    Попробовал сделать отдельный объект Таймер и перенес Программу ST.Поставил Собственный цикл и выставил 20мс. Так в принципе можно сделать?Если объект Таймер входит в объект с периодом 1000мс.
    Последний раз редактировалось Ильнур; 30.11.2012 в 12:31.

Страница 32 из 765 ПерваяПервая ... 2230313233344282132532 ... ПоследняяПоследняя

Похожие темы

  1. вопросы начинающего
    от Flomaster в разделе ПЛК1хх
    Ответов: 25
    Последнее сообщение: 11.03.2015, 20:50
  2. Ethernet - вопрос начинающего.
    от Продамщебень)) в разделе Сетевые технологии
    Ответов: 8
    Последнее сообщение: 20.06.2013, 16:35
  3. вопросы начинающего
    от Chifa в разделе Сетевые технологии
    Ответов: 1
    Последнее сообщение: 30.07.2010, 14:32
  4. вопрос начинающего
    от gladkiynikita в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 22.03.2010, 05:43
  5. Вопросы
    от Мурат в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 27.01.2007, 03:24

Ваши права

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