Страница 7 из 69 ПерваяПервая ... 567891757 ... ПоследняяПоследняя
Показано с 61 по 70 из 688

Тема: Программирование ПЛК110 [М02] для задач реального времени

  1. #61

    По умолчанию

    Появилась минутка, сделал блок на ST.
    Получается, для генерации следующей пачки импульсов нужно передёрнуть вход enable (сделать enable==false, дождаться пока ready перейдёт в false, потом передать enable=true и тогда пойдёт вторая пачка). Это то, что ожидалось?

    По поводу изменения частоты импульсов: текущий подход к программированию PRU предполагает, что PRU выполняется своим циклом, поэтому тут я сделал "переключение сигнала out при каждом цикле PRU". Норм? Или делитель какой-то нужен?
    Или с такой стороны: нормально ли, если для изменения частоты меандра нужно перезаливать PRU программу?
    Нужны ли меандры разной частоты по разным выходам?


    Код:
    FUNCTION_BLOCK PRU_GENER_BURST
    VAR_INPUT
      enable : BOOL;
      quantity : WORD;
    END_VAR
    VAR_OUTPUT
      out : BOOL;
      ready : BOOL;
    END_VAR
    VAR
      qtyLeft : WORD;
    END_VAR
      IF enable THEN
        IF qtyLeft > 0 THEN
          (* Идёт генерация *)
          qtyLeft := qtyLeft - 1;
        ELSIF ready THEN
          (* Всё сгенерировали, ждём пока передёрнут enable для следующего включения *)
        ELSE
          (* Поступила команда на включение *)
          qtyLeft := quantity * 2;
        END_IF;
      ELSE
        (* Выключаемся *)
        qtyLeft := 0;
      END_IF;
      ready := qtyLeft = 0;
      (* Если всё сделали, то out выключится. Если пачка ещё генерируется, то младший бит и есть меандр *)
      out := qtyLeft.0;
      
    END_FUNCTION_BLOCK
    Последний раз редактировалось Владимир Ситников; 26.08.2016 в 09:03.

  2. #62

    По умолчанию

    Цикл можно менять, в т.ч. и на ходу, для этого предполагается использовать семейство FB START, START_CONST и START_VAR
    Если же период генерации на порядки больше цикла PRU - нужен внешний делитель сигнала тактирования
    Тролль-наседка, добрый, нежный и ласковый

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

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Появилась минутка, сделал блок на ST...
    Код:
    FUNCTION_BLOCK PRU_GENER_BURST
    VAR_INPUT
      enable : BOOL;
      quantity : WORD;
    END_VAR
    VAR_OUTPUT
      out : BOOL;
      ready : BOOL;
    END_VAR
    ....
    1.Отчего то кажется что нехватает period'а
    2.А почему низзя изменить quantity пряма на ходу ?
    "А куда миня ?" - "В морг"
    "А может на процедуры ?" - "Врач сказал в морг, значит в морг"

  4. #64

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Появилась минутка, сделал блок на ST.
    Получается, для генерации следующей пачки импульсов нужно передёрнуть вход enable (сделать enable==false, дождаться пока ready перейдёт в false, потом передать enable=true и тогда пойдёт вторая пачка). Это то, что ожидалось?

    По поводу изменения частоты импульсов: текущий подход к программированию PRU предполагает, что PRU выполняется своим циклом, поэтому тут я сделал "переключение сигнала out при каждом цикле PRU". Норм? Или делитель какой-то нужен?
    Или с такой стороны: нормально ли, если для изменения частоты меандра нужно перезаливать PRU программу?
    Нужны ли меандры разной частоты по разным выходам?
    1. Для генерации следующей пачки импульсов нужно вход Enable перевести в false, при этом Ready автоматически должен сброситься в false.
    2. Для изменения частоты меандра перезаливать PRU программу конечно не надо, должна быть возможность оперативной смены частоты по входу PERIOD.

  5. #65

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    "А куда миня ?" - "В морг"
    "А может на процедуры ?" - "Врач сказал в морг, значит в морг"
    В общем, ждём что скажет Владислав.

    Собственно, 2 вопроса:
    1) Норм ли получился блок (я в почте переслал реализацию на ассемблере)
    2) Можно ли мне выкладывать обновлённые библиотеки, или это только через ОВЕН

    Я снова в командировках -- пишу "по приборам", вернее, без ПЛК.
    Поэтому было бы хорошо, если бы
    3) Кто-нибудь попробовал этот самый блок PRU_GENER_BURST
    4) Рассказали как тестировать, если в хозяйстве из быстродействующего только ПЛК110 1шт и есть. Осциллографа у меня нет, мультиметра тоже нет, "населена роботами".
    Замыкать быстрый вход на быстрый выход и делать программу, которая сама себя проверяет?
    Либо, опять же, нужно чтобы какой-нибудь обладатель "быстрого счётчика импульсов" проверил.

  6. #66

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Сколько стоит "хороший осциллограф" если "без фанатизма"?
    В 10'000 р уложится?

    Можно наводку какую-нибудь? (ну, я вообще не в теме выбора этих приборов)
    Нужен аналоговый осциллограф с полосой пропускания не ниже 50 мГц. За 10 т.р. такой не купить. Проще взять где-нибудь на время. Приличный цифровой осциллограф стоит 20...30 т.р.
    Последний раз редактировалось Вольд; 26.08.2016 в 13:57.

  7. #67

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Появилась минутка, сделал блок на ST.
    Код для PRU можно писать на ST ?

  8. #68

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Меньше всего хочется погружаться в "изучение основ выбора правильных осциллографов и щупов к ним".
    С щупом для осциллографа все просто. Бери щуп с делителем 1:10.
    Последний раз редактировалось Вольд; 26.08.2016 в 17:33.

  9. #69

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Код для PRU можно писать на ST ?
    И да и нет.
    Если есть ST код, то его можно вручную перевести на PRU-понятный ассемблер.

    Но
    1) ST код нужен и для общего понимания, и для того, чтобы в КДС эмуляция работала
    2) Переводить ST на ассемблер проще, чем сразу писать на asm

    Примерно так (я исключил половину строк-комментариев, которые нужны для связки PRU-КДС. Привет Владиславу, если можно со спец комментариями выкладывать, то могу и с ними):
    Код:
    .origin 0
    .entrypoint __INIT_PROGRAM
    ;include "standart_classes.m"
    #include "Defs.h"
    
    #define enableIn R1.b0
    #define quantityIn R1.w0
    
    #define out R1.b0
    #define readyOut R1.b0
    #define qtyLeft R1.w0
    
    
    ;FB_WORKTIME=9
    ;FB_NAME=PRU_GENER_BURST
    
    
    __INIT_PROGRAM:
            QBEQ _NEED_STOP, enableIn, 0 //% если сказали выключатьс_, идём выключатьс_
            QBEQ _BURST_DONE, qtyLeft, 0 //% если импульсы кончились, идём ждать передёргивани_ enable
            SUB qtyLeft, qtyLeft, 1 //% минус импульс
            QBA _FINISH_5TICK //%
    
    _BURST_DONE: ; 3-ий такт
            QBEQ _FINISH_4TICK, readyOut, 1 //% пока ready не сбросилось, ждём передёргивани_ enable
            LSL qtyLeft, quantityIn, 1 //% qtyLeft := quantity * 2
            QBA _FINISH_6TICK //%
    
    _NEED_STOP: ; 2-ой такт
            LDI qtyLeft, 0 //% останавливаемс_ -- обнул_ем qtyLeft
    
    _FINISH_3TICK: ; 3ий такт
            ADD temp, temp, 0 //% NOP
    
    _FINISH_4TICK: ; 4ый такт
            ADD temp, temp, 0 //% NOP
    
    _FINISH_5TICK: ; 5ый такт
            ADD temp, temp, 0 //% NOP
    
    _FINISH_6TICK: ; 6ый такт
            MIN temp.w0, qtyLeft, 1 //% Смотрим, осталось ли что генерировать
            XOR readyOut, temp.b0, 0 //% readyOut := MIN(qtyLeft, 1) XOR 1  ==  qtyLeft = 0
            ADD temp.w0, qtyLeft, 0 //% загружаем qtyLeft в регистр, чтобы потом считать младший бит
            AND out, temp.b0, 1 //% out := qtyLeft.0

  10. #70

    По умолчанию

    Пока ПЛК нет под рукой, решил сделать нехитрый компилятор ST -> PRU.asm.
    Так что, +100500 к скорости написания PRU блоков.

    Вот так выглядит:
    Снимок экрана 2016-08-29 в 14.12.25.png

Страница 7 из 69 ПерваяПервая ... 567891757 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 38
    Последнее сообщение: 24.01.2022, 11:56
  2. Ответов: 10
    Последнее сообщение: 11.06.2021, 14:55
  3. часы реального времени
    от vetaly в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 28.08.2015, 16:21
  4. Таймер реального времени УТ1-РiС
    от ser10 в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 16.09.2010, 12:24

Ваши права

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