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

Тема: ПЛК110.60[М2] + энкодер + счетчик.

Древовидный режим

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

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Господа программисты, малость облегчу задачу для моего случая. Время работы двигателя транспорта программно ограничено по времени (1 сек) при любом состоянии счетчика и любой ситуации. Это сделано для предотвращения недопустимых ситуаций из за поломки энкодера и\или ошибки оператора станка при его настройке. По расчетам у меня получается примерно следующее: частота вращения двигателя транспорта 3000об\мин = 50 об\с, при разрешении энкодера 500 имп\об имеем 25000 импульсов. При среднем фактическом времени работы 0.4 сек имеем 10000 импульсов. Типы DWORD и DINT в моей задаче не актуальны.
    А кто вас спрашивает? Шутка.

    Держите программу: pru_cutter_v2.zip

    Порядок пользования:
    "online -> write file to plc -> PRU0.prg"
    перезагружаем ПЛК

    ФБ PRU_ABZ и PRU_CUTTER.
    Через PRU_ABZ.ZERO_DETECTED можно узнать "обнаружен ли уже ноль"
    Через PRU_CUTTER управляем мотором (указываем нужное количество импульсов и говорим "поехали!").


    Энкодер подключать к 1-ым трём входам.
    На какие именно фронты сигнала энкодера реагировать это, похоже, тот ещё вопрос, поэтому я сделал первое что пришло в голову: блок реагирует на вообще все фронты A и B сигналов. Фильтрации от дребезга нет. Возможно, стоит добавить.

    Код:
    FUNCTION_BLOCK PRU_ABZ
    VAR_INPUT
    (*
      A -- in1
      B -- in2
      Z -- in3
    *)
    END_VAR
    VAR_OUTPUT
      VALUE : WORD; (* increases or decreases depending on encoder direction *)
      COUNTER : WORD; (* always increases *)
      ZERO_DETECTED: BOOL; (* true when Z was detected at least once *)
    END_VAR
    
    
    FUNCTION_BLOCK PRU_CUTTER
    (*
    When ENABLE=TRUE, the block activates out1 until RUN_LENGTH encoder pulses observed.
    RUN_LENGTH can be changed at any time.
    *)
    VAR_INPUT
      ENABLE: BOOL;
      RUN_LENGTH: DWORD; (* pulses *)
    END_VAR
    VAR_OUTPUT
      STATE : PRU_CUTTER_STATE; (* INIT -> RUN -> STOP *)
      OFFSET: DWORD; (* actual offset *)
    END_VAR
    
    TYPE PRU_CUTTER_STATE : (
      INIT_CUTTER, (* CUTTER is waiting for new configuration and activation ENABLE=TRUE signal *)
      RUN_CUTTER, (* CUTTER is moving *)
      STOP_CUTTER (* CUTTER is stopped and it is waiting for ENABLE=FALSE to switch to INIT state *)
    );
    END_TYPE


    Собственно, программа:
    Снимок экрана 2016-10-07 в 12.07.32.png

    PRU_ABZ:
    Снимок экрана 2016-10-07 в 12.09.37.png

    PRU_CUTTER:
    Снимок экрана 2016-10-07 в 12.10.15.png
    Последний раз редактировалось Владимир Ситников; 07.10.2016 в 12:28.

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 01.12.2015, 11:55
  2. ПЛК110 счетчик моточасов
    от NIKO007 в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 29.11.2015, 10:19
  3. Снова энкодер ПЛК110
    от Алексей Дмитриев в разделе ПЛК1хх
    Ответов: 58
    Последнее сообщение: 25.01.2015, 16:41
  4. ПЛК110-220.32 и энкодер
    от DKFLBVBH в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 15.01.2015, 10:49
  5. ПЛК110-32 и энкодер
    от nestor в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 23.03.2012, 07:38

Ваши права

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