On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



ссылка на сообщение  Отправлено: 22.03.16 17:41. Заголовок: суммирование времени


подскажите, допустим есть какой-то датчик мгновенного действия, т е есть событие какое-то длящееся минуту - он выдает единицу на выходе минуту, нет события - он мгновенно выдает 0.
Возможно ли как-то реализовать сохранение суммарного времени, которое выдавался единичный сигнал?
ну допустим - датчик движения, нужно сохранить время, которое он суммарно выдавал единичный сигнал?
как это можно сделать?
Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 19 [только новые]







ссылка на сообщение  Отправлено: 22.03.16 21:13. Заголовок: Вас там начальник му..


Вас там начальник муштрует что ли такими задачками? ))

DIGITAL_INPUT input;
ANALOG_OUTPUT time_per_second;

CHANGE input
{
if(input=1){time_per_second=0;}
while (input=1)
{
time_per_second=time_per_second+1;
delay(100);
}
}

Это если не более 65535с что чуть более 18ч. Если надо считать в годах, днях, и т.д. то придется повозиться, либо попытаться отмазаться выводя в сериальные выходы время начала и время окончания.

+79161734005 Спасибо: 1 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 22.03.16 21:25. Заголовок: Если на квадратиках:..


Если на квадратиках:
Осциллятор 1с на каскад RingCounter завести Первый считает секунды, с его 60 выхода на clock следующего который считает минуты и т.д.
Потом как то свести воедино, ну и на reset входы заводить сигнал через one shot , а на gate осциллятора сигнал напрямую.

Таким же образом и + можно модернизировать, считая до 60, потом +1 к минутам и сбросить секунды в 0
При 60 минутах +1 к часам и сбросить минуты в 0.
При 24 часах +1 к дням и сбросить часы в 0.
и т.д.

+79161734005 Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 22.03.16 21:29. Заголовок: Люди занимаются само..


Люди занимаются самообразованием на внезапных задачах.
Это нормальный метод.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 23.03.16 09:45. Заголовок: Вячеслав спасибо! ща..


Вячеслав спасибо! щас поизучаю

не)) я просто решил наделать на будущее разных мини-программок нестандартных)) вдруг пригодится - ну и узнаются функции разные

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 23.03.16 09:50. Заголовок: Игорь K. ну в принци..


Игорь K. ну в принципе да
часто используемое - это все понятно, а на чем-то таком и новые элементы и комманды всплывают обычно

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 23.03.16 16:04. Заголовок: Самое ценный опыт ра..


Самое ценный опыт распарсить какой нибудь фидбэк от устройства.
Матрица типа Kramer и Extron для начала подойдет.
Набора:
If
find
while
for
byte
chr
ATOI
ITOA
wait
RemoveByLength
mid
makestring
break
pulse
delay
len
switch
GetLastModifiedArrayIndex
Time
Function
Integer_Function
String_Function
nonvolatile
Достаточно для 95% программ на SIMPL+. Изучайте

+79161734005 Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 23.03.16 16:12. Заголовок: Вячеслав пишет: CHA..


Спасибо!
Вячеслав пишет:

 цитата:
CHANGE input
{
if(input=1){time_per_second=0;}


а зачем это приравнивание нулю? и почему не push?))

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 23.03.16 16:56. Заголовок: PUSH обнаруживает пе..


PUSH обнаруживает переход сигнала только в направлении от 0 к 1 (передний фронт), а
CHANGE обнаруживает переход в обоих направлениях и от 0 к 1 и от 1 к 0.
Если был PUSH цикл while никогда бы не завершился, даже при снятии внешнего сигнала.

Приравнивание к нулю необходимо, если начинать при каждом новом удержании сигнала в единице заново отсчет времени.
Если задача, накапливать интервалы последовательных удержаний сигнала то эту строку можно убрать.
Учитывая что это выход, который по определению после загрузки равен 0, то первичной инициализации не потребуется.
Либо сделайте отдельный вход для инициализации этой переменной по необходимости начинать отсчет заново.

+79161734005 Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 23.03.16 17:41. Заголовок: Вячеслав спасибо но..


Вячеслав
спасибо
но не пойму, разве while не завершится, когда input станет равен 0 при push?

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 23.03.16 18:16. Заголовок: Наверное вы правы, м..


Наверное вы правы, можно и PUSH

+79161734005 Спасибо: 1 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 24.03.16 10:15. Заголовок: kislez2015 пишет: н..


kislez2015 пишет:

 цитата:
но не пойму, разве while не завершится, когда input станет равен 0 при push?


Я бы на это не закладывался.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 25.03.16 17:11. Заголовок: Нужно отжать и тут ж..


Пример - как не надо) Нужно отжать и тут же нажать этот вход - тогда первый обработчик не успеет завершиться (потому что отжатие-нажатие попадёт в период delay(100), цикл while() продолжится), второй обработчик (по отжатию) тут же завершится ничего не сделав, а третий обработчик - по нажатию обнулит счётчик и начнёт работать в параллель с первым и они станут считать вместе один счётчик, но в два раза быстрее)

Для этих изощрений с задержками нужно бы вкурить wait() и все эти cancelWait(), либо воспользоваться Simpl Timers или Analog Ramp))

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 26.03.16 00:07. Заголовок: Старожилам палец в р..


Старожилам палец в рот не клади )
Давайте взорвем мозг рекурсией:

Function counter()
{
wait(100)
{
time_per_second=time_per_second+1;
counter();
}
}

CHANGE input
{
if(input=1){time_per_second=0;}else{CancelAllWait();}
counter();
}

+79161734005 Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 27.03.16 21:30. Заголовок: Вячеслав, это к счас..


Вячеслав, это к счастью не рекурсия: да, функция приводит к вызову самой себя, но в стеке вызовов не накапливаются копии её окружения - она каждый раз заканчивается и до следующей секунды живёт одно отложенное событие в очереди таймера, и это очень хорошо по сравнению с function count() { ... delay(100); count(); }

Вот мой вариант)

digital_input timer; 
analog_output seconds;

function tick() { // вызывается раз в секунду пока нажат timer
seconds = seconds+1;
wait( 100, tickWait ) tick();
}

change timer {
cancelWait( tickWait );
if( timer ) {
seconds = -1;
tick();
}
}


Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 27.03.16 23:57. Заголовок: Так это же те же яйц..


Так это же те же яйца только вид сбоку

Давайте реабилитируем вариант номер 1:

DIGITAL_INPUT input;
ANALOG_OUTPUT time_per_second;

THREADSAFE CHANGE input //исключаем повторный вызов
{
if(input=1){time_per_second=0;}
while (input=1)
{
delay(100);
if(input=1) {time_per_second=time_per_second+1;} //дыбы не округлять сигналы меньше секунды вверх
}
}

+79161734005 Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 03.05.18 11:52. Заголовок: Добрый день! Не наше..


Добрый день!
Не нашел модуль секундомера. Чтобы время в аналоге выдавал.
SIMPL+ пока для меня далек, а в обычном SIMPl не вижу его.

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 03.05.18 19:30. Заголовок: А какая задача? Можн..


А какая задача? Можно нагромоздить oscillator+ring counter (c 60-тью выходами на 60с)+analog initialize Но это же беспредел.
В примерах выше готовые программы. Одна из них в в виде модуля click here
P.S. Это только до 65535с, один выход с абсолютным значением в секундах (нет минут часов и т.п.)

Спасибо: 1 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 03.05.18 21:40. Заголовок: Добрый вечер) Можно..


Добрый вечер)
Можно записать Date(), Time() и GetHSeconds() на push и на release в S+ и посчитать разницу в 32-битное значение в сотых долях секунды, и складывать это счётчик с каждым новым нажатием.
По идее можно побаловаться с Clock Driver, Serial to Analog, Analog 2's Offset Converter, Analog Sum - тоже увлекательно.
Можно поставить Roomview, и там функцию подсчёта часов использования лампы)

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 04.05.18 06:34. Заголовок: SIMPL+ пока для меня..


SIMPL+ пока для меня темный лес)

Вячеслав, спасибо, секундомер как мне нужно:)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 31
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет