Страница 10 из 15 ПерваяПервая ... 89101112 ... ПоследняяПоследняя
Показано с 91 по 100 из 149

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

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

    По умолчанию

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

  2. #92

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    1. Ненужно учитывать переполнение.
    2. Зачем считать обязательно с нуля? Совершенно ни к чему обнулять регистр счетчика, нужно продолжать считать импульсы с того состояния, которое осталось в нем от предыдущего цикла.

    Просто из текущего значения в счетчике нужно вычитать значение, которое было в нем перед стартом, т.к. WORD - без знаковое целое число, то результат арифметической операции "вычитание" всегда будет правильным, не смотря не то, что после 65535 счетчик начнет считать с 0.
    Например
    в счетчике было 65530
    после старта значения в нем будут увеличиваться 65530, 65531, 65532, 65533, 65534, 65535, 0, 1, 2 ....
    т.е. начальное значение в счетчике было 65530.
    Теперь каждый раз при обращении в программе к регистру счетчика нужно вычитать начальное значение, в нашем случае получим
    65530-65530=0
    65531-65530=1
    65532-65530=2
    65533-65530=3
    65534-65530=4
    65535-65530=5
    0 - 65530=6
    1 - 65530=7
    2 - 65530=8
    3 - 65530=9
    и т.д.
    Т.е. никакое переполнение учитывать не надо.
    petera, вы попробуйте в симуляторе CoDeSys сделать A := 0 - 65530; , где A объявлено как WORD и посмотрите что получается.

  3. #93

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    petera, вы попробуйте в симуляторе CoDeSys сделать A := 0 - 65530; , где A объявлено как WORD и посмотрите что получается.
    petera всё правильно написал, но тут нужно не только счётчик получать, но и реагировать на него быстрее, чем ПЛК цикл.

    Такой код работает в симуляторе: total := total + WORD_TO_DWORD(newValue - prevValue);

    Но это не решает проблему "быстрого управления" -- эта проблема решится PRU программой.

  4. #94
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,825

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    petera, вы попробуйте в симуляторе CoDeSys сделать A := 0 - 65530; , где A объявлено как WORD и посмотрите что получается.
    A: WORD;
    С: WORD := 65530;

    A:=0-C;
    Получится "6".
    Простой пример

    Код:
    PROGRAM PLC_PRG
    VAR
    	old: WORD;
    	curr_count: WORD := 65500;
    	NOTAL_count: WORD;
    	PUSK: BOOL;
    	TON1: TON;
    	state: INT;
    END_VAR
    
    TON1(IN:=NOT TON1.Q , PT:= t#100ms );
    CASE state OF
    0:
    	IF PUSK THEN
    	old:=curr_count;
    	state:=1;
    	END_IF
    1:
    	curr_count:=curr_count + BOOL_TO_INT(TON1.Q);
    	NOTAL_count:=curr_count-old;
    	IF NOT PUSK THEN
    	NOTAL_count:=0;
    	state:=0;
    	END_IF
    END_CASE
    Последний раз редактировалось petera; 06.10.2016 в 15:30.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #95

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Получится "6".
    Простой пример
    Поменяйте тип NOTAL_count на DWORD и ваш пример "сломается".

    И, да, если отслеживать достаточно не более 65535 импульсов, то можно и WORD'ом обойтись.
    Последний раз редактировалось Владимир Ситников; 06.10.2016 в 15:36.

  6. #96

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    petera всё правильно написал, но тут нужно не только счётчик получать, но и реагировать на него быстрее, чем ПЛК цикл.

    Такой код работает в симуляторе: total := total + WORD_TO_DWORD(newValue - prevValue);

    Но это не решает проблему "быстрого управления" -- эта проблема решится PRU программой.
    total := total + WORD_TO_DWORD(0 - 65530); Если total равно 0, то результат операции получится 4294901766 , а не 6.

  7. #97
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,825

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Поменяйте тип NOTAL_count на DWORD и ваш пример "сломается".

    И, да, если отслеживать достаточно не более 65535 импульсов, то можно и WORD'ом обойтись.
    Да, в этом виде сломается.
    Просто хотел ответить на частный вопрос
    Если обнулять счетчик в принципе невозможно вообще никак и нигде, то какой смысл в этом счетчике?
    Формат регистра счетчика - WORD, т. е. 0…65535 по абсолютному значению, т. е. придется программно учитывать переполнение аппаратного счетчика?
    И показал, что обнулять счетчик не надо.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #98
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,825

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    total := total + WORD_TO_DWORD(0 - 65530); Если total равно 0, то результат операции получится 4294901766 , а не 6.
    Да не константы 0 и 65530 надо использовать, а переменные WORD
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  9. #99

    По умолчанию

    Правильно будет так: total := total + WORD_TO_INT(newValue - prevValue);
    Последний раз редактировалось Newcomer; 06.10.2016 в 15:55.

  10. #100

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Да не константы 0 и 65530 надо использовать, а переменные WORD
    Вы свою запись приведите, как я привел в посте #99. И не надо много кода писать и кино показывать. Всего одна строчка.

Страница 10 из 15 ПерваяПервая ... 89101112 ... ПоследняяПоследняя

Похожие темы

  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, 08:38

Ваши права

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