Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: звeно зaпaздывания на SТ

  1. #1

    Question звeно зaпaздывания на SТ

    что то я не очень понял что получается...
    Помогите разобраться
    на выходе получаем - 0.
    записывает в первый элемент массива 1 и всё, деятельность невидна(
    PHP код:
    FUNCTION_BLOCK ZP
    VAR_INPUT
        vhod
    :REAL;
        
    T:TIME;
        
    N:BYTE;
    END_VAR
    VAR_OUTPUT
        y
    :REAL;
    END_VAR
    VAR
        
    mas:ARRAY[1..10OF REAL;
        
    TP:TP;
        
    i:BYTE;
    END_VAR

    IF TP.Q=FALSE THEN
    TP
    (in:=TRUEPT:=TQ=>, ET=>);
    y:=mas[N];
    i:=N;
    REPEAT
    mas
    [i]:=mas[i-1];
    i:=i-1;
    UNTIL i=1
    END_REPEAT
    ;
    mas[i]:=vhod;
    END_IF

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    заполняется один раз,потому что не правильно используется таймер
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3

    По умолчанию

    "Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q устанавливается в TRUE и таймер начинает отсчет времени (в миллисекундах) на выходе ET до достижения длительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q генерирует импульс длительностью PT по фронту входа IN."
    не очень понял про это.
    помогите с кодом

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    прочтите документацию на таймер, посмотрите эпюры, выход ТР станет вновь фальш, когда вход будет тоже фальш, а у Вас это где?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #5

    По умолчанию

    IF TP.IN=TRUE THEN
    TP(PT:=T, Q=>, ET=>);
    y:=mas[N];
    i:=N;
    REPEAT
    mas[i]:=mas[i-1];
    i:=i-1;
    UNTIL i=1
    END_REPEAT;
    mas[i]:=vhod;
    END_IF;
    TP.IN:=FALSE;
    такой же результат(
    p.s. посмотрел Эпюры, т.е. при переводе IN в тру Q сама переводится в тру?

  6. #6
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Цитата Сообщение от longalier Посмотреть сообщение
    такой же результат(
    p.s. посмотрел Эпюры, т.е. при переводе IN в тру Q сама переводится в тру?
    Как по мне, так проще использовать TON.
    А по коду вы вызов таймера запихиваете в цикл, и при выходе из этого цикла таймер не изменит своего значения.
    А в конце вы его еще и сбрасываете каждый цикл.
    Последний раз редактировалось приборист; 11.11.2014 в 23:14.

  7. #7

    По умолчанию

    мне сказали "вот тебе звено запаздывания на ST" а видите как.
    а если поступить иначе, что они тут хотели сказать? это должно быть звено запаздывания перед динамическим звеном. как я понял оно должно передавать значение с задержкой, так? а начерта тут массив?
    смысл-"просто чтобы у нас отрабатывался не каждый шорох возмущения, а раз в .... секунд" или как?
    TP.IN:=TRUE;
    IF TP.IN=TRUE THEN
    TP(PT:=T, Q=>, ET=>);
    y:=mas[N];
    i:=N;
    REPEAT
    mas[i]:=mas[i-1];
    i:=i-1;
    UNTIL i=1
    END_REPEAT;
    mas[i]:=vhod;
    END_IF;
    TP.IN:=FALSE;
    тот же результат...
    p.s. и еще вопрос, вот редактирую я свой элемент, сохраняю в библиотеку, а окном открыт проект с этим элементом, при компиляции в этом основном проекте элемент будет уже обновленный(т.е. каждый раз при компиляции вызывается из библиотеки) верно?
    Последний раз редактировалось longalier; 11.11.2014 в 23:29.

  8. #8
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Как-то решали подобную задачку, посмотрите по ссылке может оно?
    http://www.owen.ru/forum/showthread....l=1#post125912

  9. #9
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    оно должно передавать значение с задержкой, так? а начерта тут массив?
    смысл-"просто чтобы у нас отрабатывался не каждый шорох возмущения, а раз в .... секунд" или как?
    Зачем массив? Просто куда-то надо складывать значения за период задержки. В идеале этот буфер должен быть достаточно большим, чтобы вмещать каждую порцию данных, то есть иметь размер N = Td / Ts, где Td — время задержки, Ts — наименьшее время цикла ПЛК. Если наименьшее время неизвестно или принимается неограниченно малым, то N стремится к бесконечности, из-за чего приходится вводить искусственное ограничение частоты сэмплирования при помощи, например, таймера. Если известно Ts, но неизвестно Td, то N вновь может получиться бесконечно большим. Наконец, при известных Td и Ts можно уже принимать окончательный размер буфера.

    Поэтому вы сначала назовите величину задержки и приемлемую частоту сэмплирования, и тогда мы сможем предложить вам реализацию.

  10. #10

    По умолчанию

    longalier, прочитайте книгу Петрова И.В. "Программируемые контроллеры." Там доступно и просто рассказано и об основном цикле ПЛК, и о том, как правильно пользоваться таймерами. Сразу станет понятно, в чём тут ошибка и как сделать, чтобы всё заработало.

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 03.03.2017, 08:25
  2. Файловый менеджер на Delphi на основе утилиты plc_io
    от kandiral в разделе Помощь Разработчикам
    Ответов: 18
    Последнее сообщение: 09.12.2016, 14:52
  3. Ответов: 8
    Последнее сообщение: 15.03.2011, 12:04
  4. Ответов: 7
    Последнее сообщение: 26.01.2011, 07:58

Ваши права

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