Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Интересная задачка с утра.

  1. #1

    Lightbulb Интересная задачка с утра.

    Стоит тетрадная линия. Есть энкодер enc-1-2-t-24, ПР103, СП307. Необходимо вывести на панель оператора (СП307) линейную скорость линии.
    Колесо энкодера будет крутиться за счет вращения вала, с которым он соприкасается.
    Интересно почитать у кого какие варианты решения на уме.

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

    По умолчанию

    Спымать того, кому энти тетрадки, и пораспрошать его про число пи, попросить у него линейку и померять диаметр колеса/вала. А если он хотя бы не троечник то подкинуть ему енту задачу. Мороженку не забыть купить.
    В общем, автор, не унывай. Не перевелись еще на земле Русской умеющие перевести частоту вращения в линейную скорость. Бог даст, встретишь такого

  3. #3

    По умолчанию

    Самый простой вариант:
    Owen.jpg
    где fValue и fKoef сетевые с плавающей запятой (доступные для СП3xx).
    FI1 настроить как энкодер
    подключить согласно инструкции:
    Owen1.jpg

    а EncoderSpeed:
    Код:
    function_block EncoderSpeed
    
        var_input
           Enc : udint;         // Текущее значение счетчика
        end_var
    
        var_output
           Speed : udint;       // Скорость в имп/сек
        end_var
    
        var
            EncOld : udint;     // Предыдущее значение счетчика
            t : SYS.TON;        // Секундный таймер
        end_var
    
        t(I:=TRUE, T:=T#1s);
        if t.Q then                                     // Каждую секунду
            if Enc >= EncOld then
                Speed := Enc - EncOld;                  // Определяем кол-во накопленных импульсов за последнюю сек.
            else
                Speed := 4294967295 - EncOld + Enc + 1; // Учтем возможность переполнения счетчика
            end_if
            EncOld := Enc; t(I:=FALSE);                 // Запомним текущее значение счетчика и перезапустим таймер
        end_if
                
    
    end_function_block

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

    По умолчанию

    Уважаемый EFrol
    4294967295 - EncOld + Enc + 1
    =>
    (4294967295 + 1) - EncOld + Enc
    =>
    (0) - EncOld + Enc
    =>
    - EncOld + Enc
    =>
    Enc - EncOld

    =>

    Код:
     if Enc >= EncOld then
                Speed := Enc - EncOld;                  // Определяем кол-во накопленных импульсов за последнюю сек.
            else
                Speed := 4294967295 - EncOld + Enc + 1; // Учтем возможность переполнения счетчика
            end_if
    =>
    Код:
     if Enc >= EncOld then
                Speed := Enc - EncOld;                  // Определяем кол-во накопленных импульсов за последнюю сек.
            else
                Speed := Enc - EncOld; // Учтем возможность переполнения счетчика
            end_if
    =>
    Код:
     
    
                Speed := Enc - EncOld; // Не надо ничего учитывать

  5. #5

    По умолчанию

    Спасибо. Не привык к беззнаковой арифметике.
    Для наглядности просто:
    4294967295 - EncOld => сколько осталось до переполнения
    + Enc => сколько накопилось от 0-я
    + 1 => сам 0

    Для новичков факт 4294967295 + 1 = 0 не очевиден.
    Последний раз редактировалось EFrol; 10.07.2024 в 12:51.

  6. #6

    По умолчанию

    Объясните непутевому студенту смысл переменной fKoef (что, откуда и куда), пожалуйста

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

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Для новичков факт 4294967295 + 1 = 0 не очевиден.
    Само 4294967295 помнить - нужно быть 7-ми пядей.
    16#FFFF_FFFF - значительно понятней.
    А если вспомнить только то, что -1 это все единицы в двоичке, то заместо безликого 4294967295 написать DINT_TO_DWORD(-1) значительно выразительней
    Да даже просто:
    (0 - 1) //для лоджика
    Ну и
    (0 - 1) - EncOld + Enc + 1
    или
    DINT_TO_DWORD(-1) - EncOld + Enc + 1
    или
    -1 - EncOld + Enc + 1
    Очевидность приходит майором.

    Поэтому
    4294967295 + 1
    и ненужно помнить
    Последний раз редактировалось Валенок; 10.07.2024 в 15:50.

  8. #8

    По умолчанию

    Цитата Сообщение от Иванище Посмотреть сообщение
    Объясните непутевому студенту смысл переменной fKoef (что, откуда и куда), пожалуйста
    Ну speed это импульсы в секунду, импульсы на оборот знаете? Длину окружности поделите на количество импульсов на оборот, и получите м/импульс. Перемножаем, в итоге м/с... Скорость. Ну это на первый взгляд...

  9. #9

    По умолчанию

    Плохая идея измерять скорость таким энкодером в интервале 1, 2, и.т.п. сек.
    ENC-1-2-T-24 DC12-24V Инкрементальный энкодер, 1cм/имп., выход Totem pole
    Если станок выплёвывает тетрадку в секунду это сколько импульсов? 10-20 на тетрадку? А если разгоняем станок с минимальной скорости?
    Время цикла и таймер, как это отразится на счёте? сколько импульсов будут гулять туда-сюда (между циклами ПР) при срабатывании таймера?
    --------------
    Задачка интересна тем, что выбранным оборудованием стабильный и точный результат не получить.
    Кстати, что предпочтительнее, усреднять скорость за 30 сек, т.к. скачет каждую секунду 5-15% или посчитать время на 10 тетрадок и перевести в скорость?

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

    По умолчанию

    Так там надо не измерять, а подсчитать и записать на бумажке, в смысле, в Т.З. нет условия, что скорость меняется, скажете что двигатель асинхронный, в смысле, скольжение зависит от нагрузки, тоже не верно, это не указано, и скорость будет меняться незначительно, так может там синхронный двигатель стоит, короче, это равносильно что число Пи постоянно подсчитывать, в смысле, тогда логично и Пи(3,1415926535897932384626433832795) на панель вывести, короче, надеюсь смысл понятен, в смысле, он здесь отсутствует!
    А Пи пусть вычисляет, в смысле, ему пригодится чтобы скорость вращения(об/сек, об/мин) перевести в линейную скорость! Вдруг все ошибаются и число Пи постоянно меняется!
    Короче, задача не интересная, а даже совсем наоборот, в смысле, непонятная, вот здесь интересная была:
    https://owen.ru/forum/showthread.php?t=39764
    Последний раз редактировалось Сергей0308; 11.07.2024 в 01:17.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 12
    Последнее сообщение: 18.07.2024, 08:51
  2. Задачка...
    от IPSIV в разделе Подбор Оборудования
    Ответов: 2
    Последнее сообщение: 21.11.2012, 12:23
  3. Интересная петрушка с ЕКОН-134
    от MCBK в разделе Сетевые технологии
    Ответов: 1
    Последнее сообщение: 16.02.2012, 10:45
  4. Задачка...
    от Партизан в разделе Подбор Оборудования
    Ответов: 6
    Последнее сообщение: 15.11.2007, 09:02
  5. Интересная дискуссия про панели
    от Филоненко Владислав в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 16.06.2007, 08:49

Ваши права

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