Страница 4 из 5 ПерваяПервая ... 2345 ПоследняяПоследняя
Показано с 31 по 40 из 46

Тема: Обработка сигнала датчика продукта на дискретный вход ПР

  1. #31

    По умолчанию

    Это ближе к телу. Делал похожим способом на ПЛК с Codesys. Вот и думал перейти на ПР. Погрешность + - 10 мс не имеет значения.

  2. #32

    По умолчанию

    Период следования импульсов от 300 мсек

  3. #33

    По умолчанию

    Тогда и ST в руки.
    Массив bool, два индекса на запись и на чтение, тактирование при помощи BLINK и RTrig.

    Столь простые вещи не буду делать - неинтересно, и подозреваю, что исходная задача решается не через звено чистого запаздывания.
    Последний раз редактировалось FPavel; 16.01.2025 в 21:16.

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

    По умолчанию

    Так это же проще пареной репы, вот когда-то очень давно кому-то помогал на форуме, в смысле, делал задержку почти на 2000 тактов:

    Задержка на 1984 такта.owle

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

  5. #35

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Тогда и ST в руки.
    Массив bool, два индекса на запись и на чтение, тактирование при помощи BLINK и RTrig.

    Столь простые вещи не буду делать - неинтересно, и подозреваю, что исходная задача решается не через звено чистого запаздывания.
    Типа FIFO буфера. Только что в него заносить? Метки времени прихода импульса на входе.

  6. #36

    По умолчанию

    Код:
    A: array [0..999] of bool;  // буфер на 1000 * 10 мс = 10 с
    InIndx: udint;
    OutIndx: udint;
    
    if CLK then // если на тактовом входе true - выполнить пересчёт
      A[InIndx] := In;
      OutIndx := InIndx + 123;  // 123 * 10 ms = 1 s 23 ms - задержка при такте 10 ms
      if OutIndx > 999 then
        OutIndx := OutIndx - 1000; //минус длина массива
      end_if
      Out := A[OutIndx];  // значение выхода
      InIndx := InIndx + 1;
      if InIndx > 999 then
        InIndx := InIndx - 1000; //минус длина массива
      end_if
    end_if
    На вход CLK подать выход связки BLINK+RTrig с полным периодом 10 мс (5+5 мс).

  7. #37

    По умолчанию

    Мне не нужено масштабирование входного импульса, просто по восходящему фронту выдать импульс с задержкой

  8. #38

    По умолчанию

    Немогу понять как работает выше проведённый код. Что такое In и Out. Типа состояние входа и выхода?
    Сначала идёт блок Blink, а затем Rtrig?
    Типа змейки, которая непрерывно бегает и ловит вход
    ℅-/
    Гениально
    Последний раз редактировалось Антон_Б; 16.01.2025 в 22:20.

  9. #39

    По умолчанию

    Преобразуем Ваш импульс в целое число: целое умножаем, делим,,, записываем полученное в таймер ТР или TOF - так может?

  10. #40
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,009

    По умолчанию

    Антон_Б почему змейки? Blink дает половину выставленного периода 1 а половину 0, если время Th, Tl равны. А для работы вашего или иного макроса нужен импульс, а не удержание 1 Н-ное время. вот RTrig и дает этот самый импульс, длительностью в 1 цикл программы.

Страница 4 из 5 ПерваяПервая ... 2345 ПоследняяПоследняя

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 22.09.2024, 12:38
  2. Дискретный вход ТРМ-10
    от Алексей Дмитриев в разделе Эксплуатация
    Ответов: 29
    Последнее сообщение: 14.04.2022, 14:36
  3. Ответов: 1
    Последнее сообщение: 30.01.2019, 14:47
  4. Ответов: 5
    Последнее сообщение: 11.04.2016, 14:55
  5. частота сигнала на дискретный вход
    от Gerkules в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 06.05.2009, 07:09

Ваши права

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