Страница 1 из 1

Счётчик

Добавлено: 15.04.2018{, 12:51}
Sancho
Уважаемые форумчане и гости.
Хочу обратить Ваше внимание на небольшой ньюанс при работе счетчика в режиме присутствия входа сброс и выхода Достижение установленного значения.
Очень часто применяется промежуточная булевская переменная для счёта "по кругу" - цепляется к двух вышеописанным выводам.
При этом на один цикл проскакивает значение, которое мы ждём или не ждём...
Это выражается вот в чём: в блоке стоит символ больше >, что подразумевает одно, а в коде >=, что немного другое...
Также, вход сброса, так как он на схеме стоит в начале, обрабатывается позже вывода результатов сравнения,
т.е. значение, которое мы указали в натройках блока "достижение ус...." будет на выходе всего один цикл.
Иногда это приводит к негативным моментам. У меня при записи в память номер блока иногда "съезжал" не туда...
Просто учитывайте это в своих проектах.
Под спойлером на плате 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;

Счётчик

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

Счётчик

Добавлено: 20.05.2018{, 11:31}
garry
Соединяйте через переменную

Счётчик

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

Счётчик

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

Отправлено спустя 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 до максимума включительно.

Счётчик

Добавлено: 18.06.2018{, 08:56}
Sancho
Автор на форуме - ждёмс!!!!! :yahoo:

Счётчик

Добавлено: 19.06.2018{, 08:13}
Goosr
По мне так счетчик должен выдавать сигнал по значению = а не >. Допустим считаем в низ до 0, но т.к. счетчик обрабатывает > то с него постоянно будет идти сигнал на выход.

Счётчик

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