Показано с 1 по 10 из 48

Тема: FIFO (очередь) ПЛК110-60 MS4D

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Ну ты читай между строк же ) MS4D я только в руки взял и она достаточно громоздкая. А не простые проекты лучше делать на том, что лучше знаешь! Потом перенести алгоритм совсем не проблема. В конечном счёте, проект будет на ПЛК110-60.
    Ну а с FIFO функция первый пришёл - первый ушёл - вроде как реализована. Будем считать это альтернативным вариантом исполнения. Но думаю на настоящем FIFO данную задачу тоже можно и нужно делать!
    Народ, ну чё, никто не потестил?
    Сейчас думаю как доработать очередь и сделать выбор для одновременного обслуживания двух и более (хотя бы двух) абонентов и пока что-то нет мыслей...

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

    По умолчанию

    Цитата Сообщение от Vadik2881 Посмотреть сообщение
    Народ, ну чё, никто не потестил? .
    за народ тестировали фифо авторитетные программисты из оскат сообщества, ихним кодом и пользуемся
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  3. #3

    По умолчанию

    Цитата Сообщение от Vadik2881 Посмотреть сообщение
    Ну ты читай между строк же ) MS4D я только в руки взял и она достаточно громоздкая. А не простые проекты лучше делать на том, что лучше знаешь! Потом перенести алгоритм совсем не проблема. В конечном счёте, проект будет на ПЛК110-60.
    Ну а с FIFO функция первый пришёл - первый ушёл - вроде как реализована. Будем считать это альтернативным вариантом исполнения. Но думаю на настоящем FIFO данную задачу тоже можно и нужно делать!
    Народ, ну чё, никто не потестил?
    Сейчас думаю как доработать очередь и сделать выбор для одновременного обслуживания двух и более (хотя бы двух) абонентов и пока что-то нет мыслей...
    Ну, я потестил! Я в упор не вижу FIFO.
    Owen1.jpg
    Подсчет длительности импульсов (*0,2сек) на каждом входе и потом поиск входа с максимальной длительностью и всё!
    Может надо запихивать длительность каждого импульса на одном входе в буфер?
    Owen2.jpg

    Если хочется буфер на ST?
    Owen3.jpg
    cделайте на ST
    В чём проблема-то ?
    Код:
    function_block FIFO
    
        var_input
            in : udint;
            shift : bool;
        end_var
    
        var_output
            out: udint;
        end_var
    
        var
            out0, out1, out2, out3, out4, out5, out6, out7, out8 : udint;
        end_var
    
        if shift then
            out := out8;
            out8 := out7;
            out7 := out6;
            out6 := out5;
            out5 := out4;
            out4 := out3;
            out3 := out2;
            out2 := out1;
            out1 := out0;
            out0 := in;
        end_if
    
    end_function_block
    Если речь о фиксации входа с исключением, то:
    Owen4.jpg
    самый простой вариант
    Код:
    function_block Push
    
        var_input
            I1, I2, I3, I4, I5, I6, I7, I8 : bool;
        end_var
        
        var_output
            Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8 : bool;
        end_var
    
        var 
            State, newState : udint;
        end_var
    
        newState.0 := I1; newState.1 := I2;  newState.2 := I3;  newState.3 := I4;
        newState.4 := I5; newState.5 := I6;  newState.6 := I7;  newState.7 := I8;
    
        if newState > 0 then
            if newState <> State then
                State := newState;
                Q1 := I1; Q2 := I2; Q3 := I3; Q4 := I4;
                Q5 := I5; Q6 := I6; Q7 := I7; Q8 := I8;
            end_if
        end_if
        
    end_function_block
    Тоже без ST:
    Owen5.jpg

    Фиксация следующего при условии что он единственный активный:
    Код:
    function_block Push
    
        var_input
            I1, I2, I3, I4, I5, I6, I7, I8 : bool;
        end_var
        
        var_output
            Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8 : bool;
        end_var
    
        var 
            State, newState : udint;
            Cnt : udint;    // Кол-во активных входов
        end_var
    
        newState.0 := I1; newState.1 := I2;  newState.2 := I3;  newState.3 := I4;
        newState.4 := I5; newState.5 := I6;  newState.6 := I7;  newState.7 := I8;
    
        Cnt := 0;
        if I1 then Cnt := Cnt + 1; end_if
        if I2 then Cnt := Cnt + 1; end_if
        if I3 then Cnt := Cnt + 1; end_if
        if I4 then Cnt := Cnt + 1; end_if
        if I5 then Cnt := Cnt + 1; end_if
        if I6 then Cnt := Cnt + 1; end_if
        if I7 then Cnt := Cnt + 1; end_if
        if I8 then Cnt := Cnt + 1; end_if
    
        if newState > 0 and Cnt = 1 and newState <> State then
            State := newState;
            Q1 := I1; Q2 := I2; Q3 := I3; Q4 := I4;
            Q5 := I5; Q6 := I6; Q7 := I7; Q8 := I8;
        end_if
        
    end_function_block
    Последний раз редактировалось EFrol; 07.02.2025 в 12:19.

  4. #4

    По умолчанию

    Ух спасибо Вам много всего, буду разбираться.
    ТЗ такое:
    32 цифровых входа и 32 цифровых выхода. Это 32 загрузчика сырья, если физически. Но все они на одном насосе и не могут одновременно обслуживаться, поэтому очередь. Первый пришёл, обслужился, ушёл, следующий. И хаотично навалом они тоже не могут, нужна именно чётко организованная очередь, один за одним.
    Тут предлагали алгоритм "кто первый встал того и тапки" но это совсем не то!

    Почему считаете, что мой вариант не FIFO?! Принцип как раз такой. Мы сейчас о принципе, а не конкретном операторе FiFO32 из библиотеки OSCAT.
    Мой вариант чётко отрабатывает вроде... Но нужна опция дополнительная, это количество одновременного обслуживания - до 3 абонентов или хотя бы до двух. И вот с моим вариантом это походу нереально сделать или не разобрался.
    Сейчас пробую это реализовать на MS4d по цепочке: конвертор булевого в целое - оператор FIFO32 - конвертер целого в булевое.
    Последний раз редактировалось Vadik2881; 07.02.2025 в 13:48.

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

    По умолчанию

    Цитата Сообщение от Vadik2881 Посмотреть сообщение
    Первый пришёл, обслужился, ушёл, следующий.
    а если пока работает первый подключился второй, чтож его не обслуживать когда первый закончил или насос не будет останавливаться пока кто то есть в очереди, вернее пока очередь не пуста
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Похожие темы

  1. Сокеты на ПЛК110 MS4D
    от Спорягин Кирилл в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 12
    Последнее сообщение: 20.01.2023, 16:06
  2. ПЛК110 MS4D и МЭ110-1М
    от win2014 в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 8
    Последнее сообщение: 18.12.2019, 15:10
  3. ПЛК110 MS4D + ПМ210
    от KrAssor в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 9
    Последнее сообщение: 31.05.2019, 13:33
  4. ПЛК110 MS4D + ПМ01
    от Спорягин Кирилл в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 2
    Последнее сообщение: 30.05.2019, 21:27
  5. Очередь Fifo для передачи на пк
    от gr_vl в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 24.12.2010, 22:54

Ваши права

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