Светодиодные фонари и световые приборы. Всё о светотехнике.
Изображения Дневники Группы Поиск
Вернуться   Форум FONAREVKA.RU Мастерские светотехников Архив мастерских Мастерская: Lux-RC
Расширенный поиск
Забыли пароль? Регистрация

  • О нашем проекте
  • Светотехника и световые приборы
  • Правила форума
Проект FONAREVKA.RU специализируется на предоставлении всей необходимой информации по светотехнике:

— светодиодные фонари;
— различные источники питания;
— разнообразные зарядные устройства;
— освещение помещений и наружное освещение;
— световые приборы для личного, пассажирского и грузового транспорта;
— специальные световые приборы для медицины, для растений, для аквариумов, для террариумов, а также аварийно-сигнальные световые приборы;
— альтернативные источники света;
— лазеры и лазерная техника.

Если у вас есть вопросы по выбору фонарей, аккумуляторов и зарядных устройств ознакомьтесь с FAQ от наших экспертов:

F.A.Q. по выбору фонарей различных типов;
F.A.Q. по выбору аккумуляторов;
F.A.Q. по выбору зарядных устройств.
Ответ  Создать новую тему
Просмотров в теме 89026   Ответов в теме 437   Подписчиков на тему 18   Добавили в закладки 1
Опции темы Поиск в этой теме
Старый 08.11.2013, 17:30 Автор темы   341
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от 4ward :
Что-то перестал работать выход из тактического по shutdown. И еще вопрос: в тактическом режиме при нажатой кнопке правила ДЛЯ ВСЕХ должно выполняться?
извиняюсь, криво переименовал вчера проект fl33. Поправил.
правильная ссылка на него -> http://lux-rc.com/content/n...

в тактическом я запретил блокировку на 4 нажатия. А мониторы все в нем работают. Т.е. блокировка аккумулятора работает и из него тоже
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 17:44 Автор темы   342
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Опана!

Обнаружил на совершенно ровном месте одну "багофичу". Не знаю даже как ее характеризовать.

Кто рисовал схемы, поделитесь, сталкивались ли? Ну и нужно думать что с этим делать, оставлять или что-то изобретать.

Идея вот в чем. Серия кликов (даже одиночный) может вызвать непредусмотренный переход даже когда на этот клик нет условия.

Пример
http://lux-rc.com/content/n...

Очень простой. Нажимае кнопку - ставим флаг. Отпускаем - сбрасываем и возвращаемся. Т.е. по логике вещей когда вернулись, флаг уже сброшен и поэтому условие перехода в строб по флагу не выполнится никогда.

Но не тут то было. Если нажимать "задумчиво", с удержарнием, чтобы клик не сформировался - то все так и работает. Но если кликнуть, то ситуация меняется. Выполняется правило на нажатие, ставится флаг, потом вы отпускаете кнопку и формируется слик, который отсылает к ноде, где он начинался, т.е. к самое первой. А там срабатывает правило на флаг.

Что делать то будем? Кто-то спотыкатся об эту "особенность"?
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 18:17   343
Vasiq
Weekend Warrior
 
Регистрация: 24.09.2012
Последняя активность: 26.07.2019 10:38
Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

У меня в интерфейсе это проявляется нежеланием оного обрабатывать оч. быстрый клик.
Vasiq вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 18:33 Автор темы   344
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от Vasiq :
У меня в интерфейсе это проявляется нежеланием оного обрабатывать оч. быстрый клик.
не, это другое. Чисто особенность симулятора, в железе такого нет. В симе из-за медленного JS машина просыпается раз в 63мс, поэтому клики короче этого будут пропущены. Железный модуль намного быстрее - там цикл - 8мс

Ну или давайте пример, если я не о том.

[Исправлено: lux-rc.com, 08.11.2013 в 18:35]
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 18:38   345
Vasiq
Weekend Warrior
 
Регистрация: 24.09.2012
Последняя активность: 26.07.2019 10:38
Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Нужно заюзать костыль надо только подумать, какой. Это один из тех случаев, гне не работают приоритеты. Такое ощущение, что сим не успевает за флагами.

[Исправлено: Vasiq, 08.11.2013 в 18:54]
Vasiq вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 18:40   346
AEDe
Ветеран Фонарёвки
 
Аватар для AEDe
 
Регистрация: 11.08.2011
Последняя активность: Сегодня 19:49
Адрес: Дубна
Сообщений: 10407
Записей в дневнике: 1
Сказал(а) спасибо: 2542
Поблагодарили: 11454 раз(а) в 4202 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от lux-rc.com :
по поводу тормозов, "другие сайты" это ведь не редакторы на SVG.
Посмотрл парочку действительно на svg тормозит. так что этот вопрос снимается)
__________________
*
AEDe вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 18:45   347
Enn
Ветеран Фонарёвки
 
Регистрация: 22.11.2011
Последняя активность: 13.11.2020 16:01
Сообщений: 1009
Сказал(а) спасибо: 534
Поблагодарили: 247 раз(а) в 138 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от lux-rc.com :
Что делать то будем? Кто-то спотыкатся об эту "особенность"?
я не спотыкался, но мне кажется надо фиксить, т.к. логики нет и придется постоянно это в голове держать.
Enn вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 18:56 Автор темы   348
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от Enn :
я не спотыкался, но мне кажется надо фиксить, т.к. логики нет и придется постоянно это в голове держать.
осталось понять как :-)
на самом деле я рад что такое нашлось сейчас а не потом.
с одной стороны больно бы это не ударило, т.к. из 40 проектов только я на своем случайно это обнаружил. Остальные как-то работают и так.
с другой - если можно что-то найти и исправить сейчас - нужно искать и исправлять

Нужно как-то простимулировать народ потыкать в Ваши интерфейсы. Может что еще всплывет пока не поздно

[Исправлено: lux-rc.com, 08.11.2013 в 19:00]
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 19:35   349
dmn42
Ветеран Фонарёвки
 
Аватар для dmn42
 
Регистрация: 20.05.2010
Последняя активность: 23.02.2024 22:41
Адрес: Дефолтсити
Сообщений: 2234
Сказал(а) спасибо: 288
Поблагодарили: 200 раз(а) в 150 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Бегло проглядел пару страниц, но не нашёл:
- Какие данные сохраняются в слотах? (мощность основного света, aux, ещё что-то)
- Если у меня будет нода button a pressed, и несколько переходов из неё вида timer>1, timer>2 .. я получу последовательный переход по нодам?
__________________
Zl: H30, SC51, H502d, H602w, H32Fw; Fenix: E15, PD32ue; Sunwayman: C20c mod nichia, M20A; TI Illuminati; 47 Atom A0; Convoy S2, L6; Armytec Predator G109.1; Lux-RC FL33; Convoy: S9, L6; кучка ультрафаеровоподобного хлама
dmn42 вне форума   Ответить с цитированием Вверх
Старый 08.11.2013, 22:31   350
Vasiq
Weekend Warrior
 
Регистрация: 24.09.2012
Последняя активность: 26.07.2019 10:38
Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Вариант решения проблемы с флагом. До конца не понял, как работает, но работает.
http://lux-rc.com/content/n...
Vasiq вне форума   Ответить с цитированием Вверх
Старый 09.11.2013, 03:52 Автор темы   351
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от Enn :
я не спотыкался, но мне кажется надо фиксить, т.к. логики нет и придется постоянно это в голове держать.
Пофиксил в первом приближении. Перезалил сим на сервер, проверяйте Ваши UI (не забыааем CTRL+F5 чтобы перезагрузить свежие библиотеки)

У этой проблемы или фичи есть только одно правильное решение - это изоляция транзакций в каком-то виде. Точнее даже не изоляция, т.к. это всегда в одну сторону, а "машина времени". По сути, когда машина ловит клик уже в другом состоянии, не в том где этот клик начинался, то по идее мы должны вернутся во времени назад в то состояние где клик начался и проверить условия с тем состоянием машины, которое было тогда. Если условие выполнится - то клик засчитан и откат во времени состоялся, т.е. мы идем по альтернативной цепочке во времени. Если же условие не выполняется, то мы забываем про то, что мы вообще туда ходили.

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

В общем это за граню добра и зла и делать это из-за очень редких "глюков" не хочется.

Можно подумать что я ничего не сделал, но я сделал. Сейчас при получении клика мы откатываемся назад во времени на тот момент, когда он произошел, но не все параметры из прошлого нам видны. Пока только параметры регулятора.

У меня был глюк в диаграмме FL33 потому, что срабатывало условие на MODE> в "прошлом", хотя оно там сработать не могло. Происходило это из-за того, что нажатие на кнопку изменяло режим, а если после этого отпускли кнопку, то мы отлетали в то состояние, которое было еще до нажатия, и там условие на MODE> срабатывало, хотя на самом деле до нажатия оно сработать не могло.

Сейчас это пофикшено, т.к. MODE восстанавливается в том виде, как оно было в момент начала клика.

Чтобы не быть голословным - вот пример с кликами, но вместо флагов в памяти мы меняем режим (включаем свет).

http://lux-rc.com/content/n...

По сути это то самое место, что глючило в FL33. Когда я нажимаю на кнопку медленно, клик не формируется, мы сначала идем в режим 4 ватта, потом спокойно по кнопке возвращаемся в начальное и выключаем свет. В начальном стоит условие проверки есть ли свет. Если он есть - включаем строб и запираемся в тупике.

Ну так вот, по логике схемы в тупик мы попадать не должны никогда, тк. возвращаясь мы выключаем свет. А уходя - он еще не горит. Но если кликать быстро, то получалось так. Мы сначала по нажатию уходили в 4 ватта. Там машина ловила отпусание кнопки и нас откидывало в состояние еще перед нажатием, но свет то уже горит. И мы по условию mode>off улетали в тупик со стробом. Сейчас этого уже не происходит, т.к. mode - часть снимка времени и откатываясь в прошлое условия проверяются для значения mode которое было тогда, а не сейчас.

Вот еще один пример, на нем хорошо видно, что является частью снимка времени, а то нет.

http://lux-rc.com/content/n...

Тут у нас две "пути эволюции". Вилка. Кликаем один раз - идем по верхнему пути. Кликаем два раза - по нижнему. Понятное дело, что когда мы кликаем один раз, про второй еще ничего не известно и мы сразу идем по вверхнему - ставим режим 1.2 ватта и включаем первый флаг (флаги нужно смотреть в экпертном режиме сима). Когда приходит второй клик - нам нужно вернуться в прошлое и проверить, а нет ли там случайно условия на двойной клик? Опа, оно там есть, тогда все что было - отменяется и мы на самом деле должны были идти по нижнему пути. И идем, просто ставим флаг два. Что должно быть в идеале на выходе? Должен просто стоять флаг 2 и темнота, верно? А на деле мы имеем темноту (это хорошо, это мы откатывать уже умеем, флаг 2, мы его сами поставили по двойному клику и флаг 1 из другой "альтенативной вселенной". Т.е. из того места, где бы мы могли быть, елси бы не двойной клик.

В принципе с не очень большими затратами можно добавить к "снимку состояния" всю память. Тогда нормально заработает пример с флагами и кликами. Но тянуть туда все физические параметры я точно не буду. Закопаюсь. Да и памяти контроллера на такие вещи может не хватить. Уверен в такие дебри никто не залезет и вероятность попасть на эту особенность очень небольшая.

Только память делать имеет смысл наверное уже не в симе, а в железной версии. Мой сим уже с напрягом переваривает FL33, интерфейс явно задумчивый, тяжело ему на i7 2.7GHz. Если по кажлому клику мы будем делать снимок памяти а потом откатывать ее назад т.к. клик никому не нужен был - сами понимаете сим притормозит еще больше.

Т.е. подытоживая, снимок времени должен по идее содержать только те параметры, на которые мы можем влиять и которые становятся таким образом частью нашей логики. Физические параметры такие как напряжение, температура по идее можно с минимальным рисками выкинуть из снимка, т.к. они ведут себя независимо от логики машины, мы на них повлиять не можем и значит заранее в логике не может рассчитывать на какое-то определенное значение, что в настоящем, что в прошлом. Т.е. к пример если мы кликнули, машина откатилась на посенунды в прошлое и там вдруг сработал "перегрев", хотя на самом деле полсекунды назад он не срабатывал еще - это совсем не криминал. Он мог бы и сработать тогда, т.к. температура - величина непрерывная и инетртная и полсекунды для нее никакого значения не имеют.

PS.
Казалось бы, сим с ядром 361 - сложная штука, там столько всего и еще визуальная морда с кнопками и флагами. А всего-то кода на пару строчек :-)

function w(){if(!$("#nexus-sim").length&&$(".nexus-node.initial").length){$(".nexus-node.initial").addClass("sim-active");var a=$('<div id="nexus-sim"></div>');$("#nexus-url-opt.opt-en").length||a.addClass("real-mode");$("#nexus-url-opt.opt-exm").length&&a.addClass("expert-mode");a.b=[];a.d=[];a.l=[];a.p=!1;a.g=!1;a.h=!1;a.appendTo($("#nexus-editor")).append(x(a)).append($('<div class="sim-controls"></div>').append($("#nexus-url-opt.opt-en, #nexus-narrative").length?"":$('<div class="tip"></div>')).append(y(a)).append(z(a)).append(A(a)).append(B(a)).append(C(a)).append(D(a)).append(E(a)).append(F(a)).append(G(a)).append(H(a)).append($('<b class="button btngray">expert mode</b>').click(function(){a.addClass("expert-mode");
$(this).css("display","none")}).each(function(){$("#nexus-sim.expert-mode").length&&$(this).css("display","none")}))).append($('<i class="button btnred">stop</i>').click(function(){clearInterval(a.r);$(".nexus-node.sim-active").removeClass("sim-active");a.remove()})).append($('<div id="nexus-sim-id" title="System Core">361a</div>'));if($("#nexus-narrative").length){var b,c,d,e;a.append(b=$('<div id="nexus-narr-view"></div>').append(c=$("#nexus-narrative").draggable({axis:"y",stop:function(){var a=
$(this).position().top,c=Math.min(0,b.height()-$(this).height()-30);0<a?$(this).css("top",0):a<c&&$(this).css("top",c);e()},drag:function(){e()}})).append(d=$('<i class="scrollbar"></i>')).append($('<span class="button btngray">Close</span>').click(function(){$(this).parent().remove()})));(e=function(){var a=(b.height()-30)/c.height();1>a?d.css("display","block").css("top",2+Math.floor(-c.position().top*a)+"px").css("height",Math.floor(b.height()*a)+"px"):d.css("display","none")})()}a.c=function(){for(var b=
[],c=0;c<a.l.length;c++)b[c]=a.l[c].c();return{q:$(".nexus-node.sim-active"),m:b}};a.a=function(b){$(".nexus-node.sim-active").removeClass("sim-active");b.q.addClass("sim-active");for(var c=0;c<a.l.length;c++)a.l[c].a(b.m[c])};a.r=setInterval(function(){a.trigger("sim-newcycle");if(!a.h){var b,c,d;a.g?(b=a.g.q.attr("id"),c=a.c(),a.a(a.g)):b=$(".nexus-node.sim-active").attr("id");$(".nexus-link").each(function(){var c=$(this).attr("srcref");if(c==b||$(".nexus-node-all[id="+c+"]").length)if(d=!0,c=
$(".nexus-stat[linkref="+$(this).attr("id")+"]"),c.find(".nexus-cond").each(function(){var b=I($(this).attr("databits"));if(d&&b[0])return!1;var c=a.b[b[1]];if(c)d&&!b[0]?d=d&&c(b)d&&b[0]&&(d=d||c(b));else return d=!1}),d){var f=a.g||a.c(),e=$("#"+$(this).attr("dstref"));e.hasClass("nexus-node")?f.q.is(e)||(f.q.removeClass("sim-active"),e.addClass("sim-active"),a.p=f):a.p&&(a.a(a.p),a.p=!1);c.find(".nexus-act").each(function(){var b=I($(this).attr("databits")),c=a.d[b[1]];c&&c(b)});a.trigger("sim-newstate");
return!1}});!d&&a.g&&a.a(c);a.g=!1;a.trigger("sim-endcycle")}},63)}}
function x(a){var b=0,c,d,e,g,f=$('<div id="nexus-sim-mode" class="sim-module"></div>').append(e=$("<b></b>")).append($("#nexus-meta-act>li:eq(0) ul:eq(0)").clone()).append(g=$('<div class="narr"></div>').each(function(){$(this).text($(".nexus-node.sim-active p").text())})).append($('<i title="Toggle between simulation and engineering modes"></i>').click(function(){$("#nexus-sim").hasClass("real-mode")?($("#nexus-sim").removeClass("real-mode"),$("#nexus-url-opt").addClass("opt-en"),$(this).css("background-position",
"0 0"))$("#nexus-sim").addClass("real-mode"),$(this).css("background-position","0 -40px"))}).each(function(){$("#nexus-sim.real-mode").length&&$(this).css("background-position","0 -40px")})).append($('<div class="title"></div>').text($("#nexus-caption p").text())).on("remove",function(){clearTimeout(d)});f.c=function(){return{e:b,f:c}};f.a=function(a){b=Math.max(0,Math.min(32,a.e));f.find("li").css("display","none");f.find("li").eq(b).css("display","block");var g="brightness("+b/20+")";e.css("-moz-filter",
g);e.css("-webkit-filter",g);e.css("-o-filter",g);e.css("-ms-filter",g);e.css("filter",g);e[0].style.length||f.addClass("err");if(!a.f)clearTimeout(d),c=!1,e.css("display","block");else if(!J(a.f,c)){clearTimeout(d);c=a.f;var k=0,n=function(){e.css("display",0.5<k%2?"none":"block");d=setTimeout(n,c[k<c.length||(k=0),k++])};n()}};a.on("sim-newstate",function(){g.text($(".nexus-node.sim-active p").text())});a.b[2]=function(a){if(0==a[2])return b>a[3];if(1==a[2])return b<=a[3]};a.d[0]=function(a){f.a({e:a[2],
f:c})};a.d[3]=function(a){f.a({e:b+(a[2]?-(a[3]+1):a[3]+1),f:c})};a.d[5]=function(a){f.a({e:b,f:0==a[2]?!1:1==a[2]?[333,333,333,333,333,2E3,1E3,333,1E3,333,1E3,2E3,333,333,333,333,333,3E3]:2==a[2]?[50,50]200,200,200,2E3]})};a.l[0]=f;f.a({e:0,f1});return f}
function y(a){var b=0,c=$('<div id="nexus-sim-auxled" class="sim-module">Off</div>');c.c=function(){return b};c.a=function(a){b=a;c.css("background-position","0 "+(b?"-50px":"0"));c.text(b?"On":"Off")};a.d[2]=function(a){c.a(a[2])};return a.l[1]=c}
function z(a){var b=0,c=$('<div id="nexus-sim-timer" class="sim-module"></div>');a.on("sim-newcycle",function(){b=a.h?0:b+63;c.text(K(b))}).on("sim-newstate",function(){c.text(K(b=0))}).b[5]=function(a){var c=15.625*Math.pow(2,a[3]);if(0==a[2])return b>c;if(1==a[2])return b<=c};return c}
function A(a){for(var b=$('<div id="nexus-sim-buttons" class="sim-module"></div>').append($("#nexus-meta-cond>li:eq(4) ul:eq(0)").clone()),c=b.find("li"),d=[],e=[],g=0;g<c.length;g++)d[g]={j:0,n:0,o:0,i]},e[g]={j:0,i]};c.addClass("button").on("touchstart mousedown",function(b){b.preventDefault();"touchstart"==b.type&&$(this).off("mousedown");b=d[$(this).index()];b.j=1;-300>b.n-(b.n=+new Date)&&(b.o=0,b.alt=a.c())}).on("touchend mouseup",function(b){b.preventDefault();"touchend"==b.type&&$(this).off("mouseup");
b=d[$(this).index()];b.j=0;-300>b.n-(b.n=+new Date)?b.n=b.o=0b.i[b.o++]=1,a.g=b.alt,4<=b.o&&(b.n=b.o=0))});a.on("sim-newcycle",function(){for(var a=0;a<d.length;a++)e[a].j=d[a].j,e[a].i=d[a].i,d[a].i=[]});a.on("sim-endcycle",function(){for(var a=0;a<e.length;a++)e[a].i=[]});a.b[4]=function(a){return 0==a[3]?e[a[2]].j:1==a[3]?!e[a[2]].j:e[a[2]].i[a[3]-2]};return b}
function L(a,b,c,d){var e=c.find("li").length-1,g=$('<div id="'+a+'" class="sim-module sim-slider"></div>').text(b).append(c.clone().draggable({axis:"x",containment:"parent",drag:function(){g.k=Math.max(0,Math.min(e,Math.floor(e*$(this).position().left/205)));$(this).find("*").css("display","none");$(this).find("li").eq(g.k).css("display","block")}}).addClass("button btngray"));g.find(".button>li").eq(d).css("display","block");g.find(".button").css("left",Math.ceil(205*d/e)+"px");g.k=d;return g}
function B(a){var b,c=L("nexus-sim-volt","voltage",$("#nexus-meta-cond>li:eq(1) ul:eq(1)"),12);a.on("sim-newcycle",function(){b=c.k}).b[1]=function(a){if(0==a[2])return b>a[3];if(1==a[2])return b<=a[3]};return c}function C(a){var b,c=L("nexus-sim-temp","temperature",$("#nexus-meta-cond>li:eq(3) ul:eq(1)"),14);a.on("sim-newcycle",function(){b=c.k}).b[3]=function(a){if(0==a[2])return b>a[3];if(1==a[2])return b<=a[3]};return c}
function D(a){var b,c=L("nexus-sim-amblight","ambient light level",$("#nexus-meta-cond>li:eq( ul:eq(1)"),0);a.on("sim-newcycle",function(){b=c.k}).b[8]=function(a){if(0==a[2])return b>a[3];if(1==a[2])return b<=a[3]};return c}function E(a){var b,c=L("nexus-sim-reflight","reflected light level",$("#nexus-meta-cond>li:eq(9) ul:eq(1)"),0);a.on("sim-newcycle",function(){b=c.k}).b[9]=function(a){if(0==a[2])return b>a[3];if(1==a[2])return b<=a[3]};return c}
function F(a){var b=$('<div id="nexus-sim-flash" class="sim-module"></div>');$("#nexus-meta-act>li:eq(6) ul:eq(0)").clone().addClass("flash-bits").appendTo(b).find("li").click(function(){$(this).hasClass("on")?$(this).removeClass("on"):$(this).addClass("on")});$("#nexus-meta-act>li:eq(4) ul:eq(0)").clone().addClass("flash-slots").appendTo(b).find("li").each(function(){$(this).addClass("slot");$(this).append($("#nexus-meta-act>li:eq(0) ul:eq(0)").clone().addClass("param"))});a.b[6]=function(a){var d=
b.find(".flash-bits li:eq("+a[2]+")").hasClass("on");return a[3]?!d:d};a.d[6]=function(a){var d=b.find(".flash-bits li:eq("+a[2]+")");a[3]?d.removeClass("on"):d.addClass("on")};a.d[1]=function(c){var d=a.c();d.m[0].e=b.find(".slot:eq("+c[2]+") li[sel=1]").index();a.a(d)};a.d[4]=function(c){b.find(".slot:eq("+c[2]+") li").css("display","none").attr("sel",0);b.find(".slot:eq("+c[2]+") li:eq("+a.c().m[0].e+")").css("display","block").attr("sel",1)};return b}
function G(a){var b=$('<div id="nexus-sim-shutdown" class="sim-module"></div>'),c=!1,d=0;$('<span class="button btnred">main power</span>').appendTo(b).on("touchstart mousedown",function(c){c.preventDefault();"touchstart"==c.type&&$(this).off("mousedown");b.hasClass("active")?(b.removeClass("active"),a.h=!1,setTimeout(function(){d||e.text("---")},5E3))b.addClass("active"),a.h=!0)});var e=$("<p>---</p>").appendTo(b);a.on("sim-newcycle",function(){if(a.h&&!c){c=a.c();var b=a.c();b.m[0].e=0;b.m[0].f=
!1;b.m[1]=0;a.a(b);d=0}else a.h&&c?e.text(K(d+=63))a.h&&c&&(a.a(c),c=!1)});a.on("sim-newstate",function(){d=0});a.b[0]=function(a){if(0==d)return!1;var b=15.625*Math.pow(2,a[3]);if(0==a[2])return d>b;if(1==a[2])return d<=b};return b}function H(a){var b=$('<div id="nexus-sim-motion" class="sim-module"></div>'),c=!1;$('<span class="button btngray">move it</span>').appendTo(b).click(function(){c=!0});a.on("sim-newstate",function(){c=!1}).b[7]=function(){return c};return b}
function I(a){a=a.split("-");for(var b=0;b<a.length;b++)a[b]=parseInt(a[b]);return a}function K(a){var b,c="."+(((b=Math.floor(a%1E3/10))&&10>b?"0"+b:b)||"00"),c=":"+(((b=Math.floor(Math.floor(a/=1E3)0))&&10>b?"0"+b:b)||"00")+c,c=":"+(((b=Math.floor(Math.floor(a/=60)0))&&10>b?"0"+b:b)||"00")+c,c=" "+(((b=Math.floor(Math.floor(a/=60)0))&&10>b?"0"+b:b)||"00")+c;return c=((b=Math.floor(Math.floor(a/60)%24))&&b+"d "||"")+c}
function J(a,b){var c=b.length;if(c!=a.length)return!1;for(;c--if(b[c]!==a[c])return!1;return!0};

[Исправлено: lux-rc.com, 09.11.2013 в 04:36]
lux-rc.com вне форума   Ответить с цитированием Вверх
Поблагодарили: 3 раз(а)
Enn (09.11.2013), Vasiq (09.11.2013), Жуков (09.11.2013)
Старый 09.11.2013, 12:41 Автор темы   352
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

добавил к снимку времени всю флеш-память, т.е. флаги и слоты.
пока добавил только в симе.
"железо" пока не успел поправить
в симе не заметил сильного измемения в скорости отклика.

Пример:
http://lux-rc.com/content/n...

Постарался сделать просто и наглядно.
Стартуем и сразу ставим флаг 8, свет не горит.
Если нажать, то мы снимаем восьмой и ставим первый, включаем 4 ватта и сохряняем это во второй слот.
Отпускаем - снимаем перый флаг.
Быстрый одиночный клик теперь не сбрасывает в строб, т.к. флаг 1 в любом варианте чистится. Либо явно по отпусанию кнопки, либо неявно из-за возврата в "прошлое" во время проверки одиночного клика.

Теперь двойной клик. Он нужен чтобы показать, что было до начала нажатия кнопки. Нужно закрыть сим и снова его открыть чтобы стартовать с начала. В начале у нас ничего не горит, все слоты пустые и стоит только 8й флаг.

Мы делаем двойной клик, пока мы его делаем, машина успевает отработать включение света, снятие и установку флагов, сохранение 4W во второй слот но когда приходит второй клик, все это отменяется и мы откатываемся во времени к состоянию, когда стоял только 8 флаг и больше ничего. Так и получается. Проверяйте.

[Исправлено: lux-rc.com, 09.11.2013 в 12:43]
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 09.11.2013, 15:34 Автор темы   353
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

пробежимся быстро по условиям, проверим как каждое может изменить "настоящее" если вдруг сработает в "прошлом". поправьте меня если я что забыл:

1) Shutdown, срабатывает если было прерывание питания. В "снимок времени" НЕ ВХОДИТ. Условие внешнее, мы на него повлиять не можем. К тому же еще и транзиентное, т.е. после первой же проверки снимается, а значит изменить "настоящее" может только в случае повторного прерывания питания в тот момент, когда мы вернулись в прошлое проверить условие на клик.

2) Voltage, проверяет напряжение. От логики не зависит. В снимок времени НЕ ВХОДИТ. В теории может по клику сработать "в прошлом" и поменять "настоящее". Но это ровно тоже самое, что если бы оно и так отработало в прошлом, что совершенно неприципиально для напряжение, которое меняется медленно, т.к. речь идет об очень небольшом интервале времени - а именно о времени совершения полного клика.

3) Mode - проверка текущего режима. Зависит от логики, мы может менять режимы. Входит в снимок времени и поэтому в случае с кликом в состоянии начала клика будет соотв. режиму, который был на тот момент времени.

4) Temp. - проверка температуры. Как и напряжение, от логики не зависит, в снимок времени НЕ ВХОДИТ, поэтому в теории может по клику сработать "в прошлом" и поменять "настоящее". Но это ровно тоже самое, что если бы оно и так отработало в прошлом, что совершенно неприципиально, т.к. речь идет об очень небольшом интервале времени - а именно о времени совершения полного клика.

5) Button - условие на действие с кнопкой. Клики сразу исключаем, потому как они - именно то, что проверяется в "прошлом", там из значение точно соотв. произошедшему. С моментальным состояние кнопки (НАЖАТА или ОТПУЩЕНА) все сложнее. Это внешнее условие, т.е. алгоритмом мы на него повлиять не можем, поэтому их нет в снимке времени. Вопрос - может ли состояние кнопки изменить ход настоящего непредскзуемым образом? Похоже что нет, т.к. в момент времени, который непосдердственно предшествует началу движения кнопки вниз эта кнопка по факту - отпущена. В момент замыкания контактов мы фиксируем это состояние чтобы вернутся к нему когда будет сделан полный клик. Когда это произойдет, кнопка уже по факту будет снова отпущена и пойдем в прошлом по той ветке, которая соотв. отпущенной кнопке. Т.е. ровно так же, как если бы клика не было вообще. Единственный возможный негативный момент - допустим мы имеем некий безконечный цикл. И в одном месте мы проверяем состояние кнопки НАЖАТО чтобы выйти из него. Так вот если "выходить" нажимая и удерживая кнопку - мы выйдем. А если сделать клик, то сначала мы можем на мговение выйти, но клик вернет нас обратно в цикл. Вот живой пример -

http://lux-rc.com/content/n...

Мне такое поведение кажется нормальным и даже почти логичным. Что скажете?

6) Timer - проверка времени нахождения в последнем состоянии. Это спорная штука. Таймер в снимок времени сейчас не входит, но мне кажется его стоит туда добавить, т.к. он может повлиять на логику принятия решения в прошлом если значение таймера там будет не такое как оно было на момент начала клика.

7) Flag - проверка флага во флеш памяти. Тут полный порядок, флеш память на момент проверки клика в прошлом будет ровно в таким виде, как она была тогда, когда клик начинался.

Motion - проверка наличия ускорения. Как и Shutdown - в снимок НЕ ВХОДИТ, внешнее и транзиентное.

9) Amb Light 10) Ref. Light - проверка условий внешней освещенности и отраженного света. Оба - внешие и как температура и напряжение - меняются медленно, пропускаем. В снимок НЕ ВХОДЯТ
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 09.11.2013, 23:21   354
Vasiq
Weekend Warrior
 
Регистрация: 24.09.2012
Последняя активность: 26.07.2019 10:38
Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

В общем так: сейчас все работает как надо, клики определяются верно, нажатия с кликами различаются верно. Все нормально

Да, еще небольшое имхо: в замкнутом цикле режимов удобнее работать с условиями "нажато-отпущено", ибо не нужно описывать все серии кликов (клик, 2-клик и т.д.)

А при заказе 361 будет ли доступна опция изменения цвета Aux led ?

[Исправлено: Vasiq, 10.11.2013 в 00:17]
Vasiq вне форума   Ответить с цитированием Вверх
Старый 10.11.2013, 00:19 Автор темы   355
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от Vasiq :
А при заказе 361 будет ли доступна опция изменения цвета Aux led ?
конечно да
lux-rc.com вне форума   Ответить с цитированием Вверх
Поблагодарили: 1 раз
Vasiq (10.11.2013)
Старый 10.11.2013, 02:26 Автор темы   356
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

все, последняя доработка - добавлен таймер к снапшоту момента времени. Очень долго не мог придумать пример, где может потребоваться восстанавливать значение таймера в прошлом, учитвая что он же сбрасывается при каждом переходе.

А на самом деле пример нашелся рядом. И даже не извращенный, а вполне из жизни, мог всплыть как бага.

http://lux-rc.com/content/n...

Все просто. Нажатием - переводим в строб. А если постоять в начале 8 секунд, то клик переведет в 4 ватта. Если бы не откатывали таймер к прошлому значению при проверки на клик - никогда бы туда не попали, потому как нажатие переводит в строб и тут же стирает таймер. Последующий клик бы вернул нас в начальное состояние, но там таймер уже сброшен и даже если мы отмерили до этого 8 секунд - переход в 4 ватта не произойдет.

А в нашем примере он происходит.

---------------------------------------

Хочу чтобы последние несколько постов у новичком не отбили желения рисовать схемы. Это все очень внутренняя кухня, в которой совершенно не нужно разбираться, чтобы сделать свой фонарь. Это как управлять авто можно и без знаний устройства двигатетеля и не помня наизусть HEX таблицу ECU двигателя :-) Внутри машина - сложная штука. Но все сделано так, чтобы для конечного пользователя она была простой и понятной в использовании.

Тут тоже самое. Для обывателя нормально рисовать две стрелки на клик и на двойной клик из одного состояния. С точки зрения "машинной" логики - это бред, т.к. нельзя исполнить двойной клик без одинарого. А значит управление у "тупой машины" уйдет по пути одного клика и все тут. Но мы тут напрягались чтобы сделать "умную машину", которая пытается мыслить так же как человек и для нее такая вилка - нормальное дело. Она поймет Вас правильно и если вы кликните два раза, то она забудет что был один и сделает то, что положено на два клика как будто первого и не было. Это удобно.

-----------------

Не помню писал ли про подстказки-шпоргалки к симулятору, смотрите как это работает - http://lux-rc.com/content/n...

Вы тоже такое можете сделать для финальных версий Ваших диаграмм чтобы пользователи могли попробовать Ваше управления в действии не вникая в схему переходов.

Пишите тут в теме текст и ID поекта - я добавляю.

[Исправлено: lux-rc.com, 10.11.2013 в 02:29]
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 10.11.2013, 22:29 Автор темы   357
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

друзья, кому не безразлична эта тема, прошу поддержать меня в благом начинании
https://forum.fonarevka.ru/...
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 11.11.2013, 01:16 Автор темы   358
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Приделал простецкий пока список проектов на сервере.
Есть пожелания какие фишки добавить к списку?
На вскидку думаю имеет смысл показывать владельца, дату обновления и каким-то образом считать кол-во установок (заливок).
Смущает что в одном большом списке начнется беспорядок, все свалено в кучу. Возможно потребуется какой-то способ классификации или рубрикатор или разделы. В общем не знаю пока что с этим делать
lux-rc.com вне форума   Ответить с цитированием Вверх
Старый 11.11.2013, 01:34   359
molvinec
Почти не ждун
 
Аватар для molvinec
 
Регистрация: 15.02.2012
Последняя активность: 06.11.2021 14:48
Адрес: СПб
Сообщений: 745
Сказал(а) спасибо: 217
Поблагодарили: 274 раз(а) в 136 сообщениях

По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

Цитата:
Посмотреть сообщение Сообщение от lux-rc.com :
Возможно потребуется какой-то способ классификации или рубрикатор или разделы. В общем не знаю пока что с этим делать
Какой-нибудь раздел для тестовых или недописанных прошивок. Допустим, я поковырял какие-то определенные функции и залил на сервер прошивку чисто в качестве личных записок на будущее. Плюс раздел с официально одобренными примерами по разработке.
__________________
Armytek Predator 1.0, 1.2 XP-G R5 5/24; Fenix LD20 XR-E Q5 SMO; ; Lux-RC FL-33 #FL3300239 & #FL3300441; Thrunite 1A XM-L T4 OP, Catapult V3 XM-L T5 SMO Diffuser; Zebra H51w
molvinec вне форума   Ответить с цитированием Вверх
Старый 11.11.2013, 01:40 Автор темы   360
lux-rc.com
закрыто
 
Регистрация: 25.05.2010
Последняя активность: 16.09.2018 23:01
Сообщений: 8806
Сказал(а) спасибо: 576
Поблагодарили: 3969 раз(а) в 1526 сообщениях

Отправить сообщение для lux-rc.com с помощью Skype™
По умолчанию Re: Nexus - Язык описания алгоритма работы любого фонаря

я вот думаю может решить вопрос просто статусом проекта. К примеру "двафт" (черновик), "final" (финальное решение) и к примеру "rubbish" (мусор, вроде корзины). И Вы можете выбирать что видеть, по умолчанию видны только final.

А все примеры вынести в PDF в виде картинок. Там же описание-справочник. Все-таки не место примерам в каталоге софта
lux-rc.com вне форума   Ответить с цитированием Вверх
Ответ  Создать новую тему





Copyright ©2007 - 2024, FONAREVKA.RU

Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot

Правила форума | Отказ от ответственности
Время генерации страницы 0.19963 секунды с 16 запросами