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

Тема: Реверсивный счет

  1. #1

    По умолчанию Реверсивный счет

    Здравствуйте!

    Задача заключается в создании реверсивного счетчика на ПЛК 110-30 [М02] от энкодера с двумя входами А и В. В конфигураторе ПЛК в CoDeSys поменял первый вход на fast counters с двумя входами в формате WORD. На этом и "завис", а что делать дальше? Счетчики накапливают значения по двум входам в режиме прямого счета, но как осуществить реверсивный счет? Потом еще этот WORD не сильно вдохновляет с его 65535...

  2. #2

    По умолчанию

    Цитата Сообщение от Владислав Г. Посмотреть сообщение
    Здравствуйте!

    Задача заключается в создании реверсивного счетчика на ПЛК 110-30 [М02] от энкодера с двумя входами А и В. В конфигураторе ПЛК в CoDeSys поменял первый вход на fast counters с двумя входами в формате WORD.
    Почему Fast Counters, а не Fast Encoder ?

  3. #3

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Почему Fast Counters, а не Fast Encoder ?
    Согласен, выбрал Fast Encoder - счет реверсивный, только как быть с WORD? Если энкодер переходит ниже нуля - получаю 65535?

  4. #4

    По умолчанию

    Цитата Сообщение от Владислав Г. Посмотреть сообщение
    Согласен, выбрал Fast Encoder - счет реверсивный, только как быть с WORD? Если энкодер переходит ниже нуля - получаю 65535?
    Разберись с примером и все поймешь.
    Вложения Вложения

  5. #5

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Разберись с примером и все поймешь.
    Значение DINT, в приведенном примере, меняет значение с минуса до нуля и в плюс в зависимости от величины DWORD. В моем случае приходиться работать с WORD, емкость которого свободно вмещается в DINT, поэтому здесь уже не получается воспользоваться вышеприведенной программой. Если я не прав - поправьте.
    Переполнение может быть при старте в случае обратного хода (должен выводиться знак минус), при достижении 65535 при прямом ходе и в случае дрейфа - когда счетчик остановился в районе 65535.

  6. #6

    По умолчанию

    Замени в программе где надо DWORD на WORD DINT на INT и все будет работать. Если надо работать с отрицательными значениями, то это то же не сложно сделать. Только ты давай уже начинай шевелить своими мозгами, а то стоишь в какой-то непонятной позе и ждешь манны небнсной.
    Последний раз редактировалось IVM; 07.08.2017 в 14:36.

  7. #7

    По умолчанию

    c := c + WORD_TO_DWORD(count_new - count_old);


    При такой расстановке счетчик считает в положительную сторону, но как сделать обратный счет?

    Попытался сделать следующее:

    IF btn_top = TRUE THEN
    IF encoder = 0 AND count = 65535 THEN
    n:= n + 1;
    END_IF
    count:= encoder;
    END_IF

    IF btn_down = TRUE THEN
    IF encoder = 65535 AND count = 0 THEN
    n:= n - 1;
    END_IF
    count:= encoder;
    END_IF


    Если энкодер вращать очень медленно, то при переполнении n работает корректно, стоит увеличить скорость - n остается без изменения.

  8. #8
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,033

    По умолчанию

    Владислав Г.
    Hardella IDE вам в помощь. Сам пользуюсь активно для написания высокоскоростных модулей со своими хотелками для входов FDI1..FDI4.
    --------------------
    По вашей программе.
    ...IF encoder = 0 AND count = 65535 THEN...
    Из за медленности цикла ПЛЦ_ПРГ и короткого импульса encoder = 0 происходит пропуск этого импульса. Т. е. ПЛЦ_ПРГ его просто "не видит". Поэтому n и не меняется.
    --------------------------
    ...IF btn_top = TRUE THEN...
    = TRUE писать не обязательно, без этого Кодесис проверяет переменную на true.
    Т. е. достаточно будет ...IF btn_top THEN...
    или ...IF NOT btn_top THEN... , если нужно проверить на FALSE.
    Последний раз редактировалось Sulfur; 19.10.2017 в 13:48.

  9. #9

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Владислав Г.
    Hardella IDE вам в помощь. Сам пользуюсь активно для написания высокоскоростных модулей со своими хотелками для входов FDI1..FDI4.
    Про Hardella, конечно, всё так.


    Но неужели встроенный encoder в простых случаях не работает? (чесслово не знаю)
    Пример, как может работать тут: http://www.owen.ru/forum/showthread....l=1#post222994
    Иными словами, для "реверсивного" счёта (ну, чтобы считалось в обе стороны) нужно использовать WORD_TO_INT, а все IF'ы выкинуть.
    Последний раз редактировалось Владимир Ситников; 19.10.2017 в 13:56.

  10. #10
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,033

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Но неужели встроенный encoder в простых случаях не работает? (чесслово не знаю)
    Пытался пользовать фирменные блоки энкодеров, не понравилось. На старой версии ПЛК писал обработку сам, и затолкал её в прерывание 20 мкс. Благо энкодер на 360 линий и крутится со скоростью максимум 15 об\мин. Однако, когда на столе руками издевался, то довольно легко получал пропуск счета. В данный момент на новых ПЛК и с Харделлой - нет проблем.

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

Похожие темы

  1. СИ8 счет длины кабеля
    от Alex_storn в разделе Эксплуатация
    Ответов: 10
    Последнее сообщение: 18.10.2014, 20:57
  2. реверсивный счетчик
    от avn в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 17.12.2012, 10:23
  3. На счет МНС1
    от Gans в разделе Разработки
    Ответов: 7
    Последнее сообщение: 31.07.2011, 05:49
  4. счет отдозируемого материала
    от niklud19511 в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 30.06.2011, 15:07
  5. быстрый счет по входам плк-150-220
    от maksimov в разделе ПЛК1хх
    Ответов: 14
    Последнее сообщение: 04.02.2010, 20:01

Ваши права

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