Счётчик

Ньюанс с счётом до.

Вопросы по использованию встроенных в программу блоков
Ответить
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Счётчик

#1

Сообщение Sancho » 15.04.2018{, 12:51}

Уважаемые форумчане и гости.
Хочу обратить Ваше внимание на небольшой ньюанс при работе счетчика в режиме присутствия входа сброс и выхода Достижение установленного значения.
Очень часто применяется промежуточная булевская переменная для счёта "по кругу" - цепляется к двух вышеописанным выводам.
При этом на один цикл проскакивает значение, которое мы ждём или не ждём...
Это выражается вот в чём: в блоке стоит символ больше >, что подразумевает одно, а в коде >=, что немного другое...
Также, вход сброса, так как он на схеме стоит в начале, обрабатывается позже вывода результатов сравнения,
т.е. значение, которое мы указали в натройках блока "достижение ус...." будет на выходе всего один цикл.
Иногда это приводит к негативным моментам. У меня при записи в память номер блока иногда "съезжал" не туда...
Просто учитывайте это в своих проектах.
Под спойлером на плате 1 счётчик из "подручных" блоков, на 2-й - стандартный счётчик. Обратите внимание на последние строки, gtv9 - bool сброс.
СпойлерПоказать

Код: Выделить всё

//Плата:1
if (_gtv8) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; 
 if (_trgrt1) {
_gtv7 = (_gtv7)+(1);
}
if ((_gtv7) > (7654)) {
_gtv7 = 0;
}

//Плата:2

if (_gtv8) 
   { 
   if (! _count1I)  
      {
       _count1P = _count1P+1;
       _count1I = 1;
      }
   }
else
   {
   _count1I=0;
   }
if (_gtv9) _count1P = 0;
_gtv9 =  _count1P  >=  7654;
_gtv10 = _count1P;
Вложения
Счётчик тест 2 альтерн.flp
(108.39 КБ) 131 скачивание
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

golowa70
Сержант
Сообщения: 195
Зарегистрирован: 20.02.2016{, 00:05}
Репутация: 6

Счётчик

#2

Сообщение golowa70 » 19.05.2018{, 22:06}

К стати у меня в версии 3. 0.3 в счётчике не получается присоединиться к входу сброса. Хотя в версии 2.5 работал без проблем. Просто когда тянешь линию от другого блока, она не присоединяется. Это только у меня так или ещё у кого наблюдается такая особенность?

Аватара пользователя
garry
Рядовой
Сообщения: 99
Зарегистрирован: 22.01.2016{, 11:20}
Репутация: 7

Счётчик

#3

Сообщение garry » 20.05.2018{, 11:31}

Соединяйте через переменную

golowa70
Сержант
Сообщения: 195
Зарегистрирован: 20.02.2016{, 00:05}
Репутация: 6

Счётчик

#4

Сообщение golowa70 » 20.05.2018{, 11:34}

garry писал(а):
20.05.2018{, 11:31}
Соединяйте через переменную
Значит не только у меня так...

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Счётчик

#5

Сообщение Sancho » 20.05.2018{, 12:18}

К чему весь сыр-бор:
Если нужен счётчик от и до, с гарантированным диапазоном, лучше делать самопальный, пусть и на отдельной плате...

Отправлено спустя 14 минут 20 секунд:
Если-бы в коде немного изменить - вопрос бы снялся:
СпойлерПоказать

Код: Выделить всё

// это 
if (reset) _count1P = 0;
reset =  _count1P  >=  maksimum ;
out = _count1P;

// На это
if (reset || (_count1P  >  maksimum) ) _count1P = 0;
out = _count1P;

//Или так
_count1_res =  _count1P  > maksimum ; // _count1_res bool переменная счётчика, если необходима как выход
if (reset || _count1_res ) _count1P = 0;
out = _count1P;
Счёт бы шёл от 0 до максимума включительно.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Счётчик

#6

Сообщение Sancho » 18.06.2018{, 08:56}

Автор на форуме - ждёмс!!!!! :yahoo:
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Goosr
Сержант
Сообщения: 184
Зарегистрирован: 07.06.2016{, 08:25}
Репутация: 16
Откуда: Тольятти
Имя: Дмитрий

Счётчик

#7

Сообщение Goosr » 19.06.2018{, 08:13}

По мне так счетчик должен выдавать сигнал по значению = а не >. Допустим считаем в низ до 0, но т.к. счетчик обрабатывает > то с него постоянно будет идти сигнал на выход.
FLProg 6.3.1 - 7.3.4 - Linux

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Счётчик

#8

Сообщение Sancho » 19.06.2018{, 12:55}

Goosr писал(а):
19.06.2018{, 08:13}
По мне так счетчик должен выдавать сигнал по значению = а не >. Допустим считаем в низ до 0, но т.к. счетчик обрабатывает > то с него постоянно будет идти сигнал на выход.
Это всё можно поменять на равно, сделать два условия, отслеживающие направление счёта...
Вопрос в том, что в существующем варианте счётчик, в режиме внешней переменной bool "сброс" на входе/выходе, т.е. счёт по кругу, выдаёт true на один цикл при значении, которое мы установили как "Достижение установленного значения", при этом на картинке блока обозначенный как >L, т.е. больше.
При этом, на выходе V это значение также появится, но на один цикл, пока в следующем не сбросится. Такой вот нежданчик.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Ответить

Вернуться в «Встроенные блоки»