Страница 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

    По умолчанию

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

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

    Справедливо. Спасибо

  7. #7

    По умолчанию

    Цитата Сообщение от Иванище Посмотреть сообщение
    Объясните непутевому студенту смысл переменной fKoef (что, откуда и куда), пожалуйста
    Если Вас устроит в имп/сек поставьте fKoef = 1.0.
    Но можно в любой единице измерения (даже в попугаях/сек), если Вы точно знаете сколько Ваших единиц (попугаев) приходится на 1 импульс.

  8. #8

    По умолчанию

    Предложу начальнику новую систему измерения. До меня у нас в попугаях точно никто ничего не измерял. Спасибо)

  9. #9
    Пользователь
    Регистрация
    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; // Не надо ничего учитывать

  10. #10

    По умолчанию

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

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

Страница 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

Ваши права

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