Страница 73 из 75 ПерваяПервая ... 23637172737475 ПоследняяПоследняя
Показано с 721 по 730 из 742

Тема: Функциональные блоки на языке ST

  1. #721

    По умолчанию

    Если запоминать просто фронта, а потом формировать импульс произвольной длины, то конечно массив булей не нужен.

  2. #722
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,161

    По умолчанию

    Да и если надо прям повторить сигналы, то тоже самое - только время

  3. #723

    По умолчанию

    А если 100-й спад затрётся 101-м фронтом? Что будет на выходе?
    А если и он затрётся 102-м спадом?
    Если время ещё не наступит для сдвига массива?

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

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    А если 100-й спад затрётся 101-м фронтом? Что будет на выходе?
    А если и он затрётся 102-м спадом?
    Если время ещё не наступит для сдвига массива?
    Так чел же написал, что задержка требуется 3 сек, а период импульсов 2 сек, так что здесь и массив как таковой не нужен. Можно и на квадратиках нарисовать
    А вот, что он не написал, так требуется ли обрабатывать паузу, когда входящий импульс пришел и конвейер остановился до того как выход сработал

  5. #725
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,161

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Так чел же написал, что задержка требуется 3 сек, а период импульсов 2 сек, так что здесь и массив как таковой не нужен. Можно и на квадратиках нарисовать...
    Чел написал что нужно повторить входное следование сигналов с задержкой а не создать независимую генерацию.
    Предполагать что что-то механическое на входе имеет строгие 2 сек, насколько это принципиально, учесть банальное отсутствие одного (или.. ) изделий на ленте, колебания скорости конвейра прям в процессе - автор внятно не объяснил. Пока ясно только то, что нужны только передние фронты. Если это всё учесть, то на квадратиках и без массива-архива зае...тесь пыль глотать.
    Допускаю что это всё вообще не нужно и есть какие-то принципиально другие решения, но это нужно знать полную технологию и итоговые задачи. Но "кушает" за это - автор.

    Всех с Днем Великой Победы!

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

    По умолчанию

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

    Иначе на диаграмме везде было бы указано Т перед включением.
    Последний раз редактировалось melky; 09.05.2026 в 19:59.

  7. #727
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,161

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    А если 100-й спад затрётся 101-м фронтом? Что будет на выходе?..
    Спад не парит - автору не нужен. У вас массив на 101 значение)) т.к. 0..100.
    Норм будет на выходе, как и хотели.

    Цитата Сообщение от EFrol Посмотреть сообщение
    ...А если и он затрётся 102-м спадом?..
    Так ранее вы сами же обозначали края.
    Тот же вопрос: А если размер памяти для хранения необходимого окна архива будет больше наличной памяти?
    Обычный ответ: Это проблема техники и/или того кто заявил свою хотелку.
    Решение очевидное: Заменить технику и/или урезать осетра.
    Здесь размер для массива ограничивает только память/синтаксис ОЛ. Ну и 2^32-1 мс таймера))

    Тоже самое и если длина выходного импульса (по словам автора - какая-то константа) будет больше интервала между входными фронтами.
    Обычное слипание.

    Цитата Сообщение от EFrol Посмотреть сообщение
    ...А если и он затрётся 102-м спадом?
    Если время ещё не наступит для сдвига массива?
    Всё - выше. А сдвигать ничего не нужно. Индексы циклические и всего делов.
    Последний раз редактировалось Валенок; 09.05.2026 в 21:01.

  8. #728

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    А если 100-й спад затрётся 101-м фронтом? Что будет на выходе?
    А если и он затрётся 102-м спадом?
    Если время ещё не наступит для сдвига массива?
    Счастья в жизни нет и не будет - у любого алгоритма есть ограничения и границы применимости. А также - структуры данных можно оптимизировать по разным критериям (размер, скорость доступа, простота и скорость написания).
    Автор вопроса не привёл ограничения из ТЗ - обсуждать критерии нет оснований.

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

    Так что, я бы подождал результатов осмысления советов.

  9. #729

    По умолчанию

    Если больше 101, то писать снова с 1го. Вчера только такой алгоритм для ИИ в кодесисе задал, но не стал тут выкладывать. Он почти аналогичен приведённому выше, только с данным условием.

    PS

    Код:
    VAR
        xInput        : BOOL;        // Входящий сигнал
        tDelay        : TIME := T#5S; // Желаемая задержка
        xOutput       : BOOL;        // Выходной сигнал
        
        // Структура для хранения события
        fbGetTime     : GET_TIME;    // Псевдокод (зависит от целевого устройства, обычно TIME())
        tCurrentTime  : TIME;
        
        // Очередь событий
        arrValues     : ARRAY[0..100] OF BOOL; // Состояния
        arrTimestamps : ARRAY[0..100] OF TIME; // Когда выдать
        
        iWriteIdx     : INT := 0;    // Индекс записи
        iReadIdx      : INT := 0;    // Индекс чтения
        xLastInput    : BOOL;        // Для отслеживания изменений
    END_VAR
    
    
    
    tCurrentTime := TIME(); // Получаем текущее время системы (мс)
    
    // --- ЗАПИСЬ В FIFO ---
    // Если сигнал изменился, записываем новое состояние и время его выхода
    IF xInput <> xLastInput THEN
        arrValues[iWriteIdx] := xInput;
        arrTimestamps[iWriteIdx] := tCurrentTime + tDelay;
        
        // Сдвигаем индекс записи по кольцу
        iWriteIdx := (iWriteIdx + 1) MOD 101; 
        xLastInput := xInput;
    END_IF
    
    // --- ЧТЕНИЕ ИЗ FIFO ---
    // Проверяем, не пора ли выдать сигнал, стоящий первым в очереди
    IF iReadIdx <> iWriteIdx THEN
        // Если текущее время больше или равно запланированному
        IF tCurrentTime >= arrTimestamps[iReadIdx] THEN
            xOutput := arrValues[iReadIdx];
            
            // Сдвигаем индекс чтения по кольцу
            iReadIdx := (iReadIdx + 1) MOD 101;
        END_IF
    END_IF
    Последний раз редактировалось МихаилГл; 10.05.2026 в 09:22.

  10. #730
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,161

    По умолчанию

    Да не нужен здесь массив булей. Время истекло - инверсия

Страница 73 из 75 ПерваяПервая ... 23637172737475 ПоследняяПоследняя

Похожие темы

  1. ПЛК73 (Функциональные кнопки)
    от necro в разделе ПЛК63/73
    Ответов: 8
    Последнее сообщение: 18.05.2022, 10:03
  2. Функциональные блоки
    от ribamuka в разделе СПК2xx (архив)
    Ответов: 4
    Последнее сообщение: 08.04.2018, 15:01
  3. Функциональные блоки насосов в CoDeSys
    от Алексей Ермолаев в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 28.03.2017, 13:50
  4. Функциональные блоки- где искать?
    от Xops в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 01.03.2016, 11:07
  5. СПК функциональные клавиши
    от Lyohin в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 30.03.2015, 15:10

Ваши права

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