|
|
|
|
106613 437 18 1 |
|
Опции темы | Поиск в этой теме |
08.11.2013, 17:30 | 341 | |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
правильная ссылка на него -> http://lux-rc.com/content/n... в тактическом я запретил блокировку на 4 нажатия. А мониторы все в нем работают. Т.е. блокировка аккумулятора работает и из него тоже |
|
08.11.2013, 17:44 | 342 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Опана!
Обнаружил на совершенно ровном месте одну "багофичу". Не знаю даже как ее характеризовать. Кто рисовал схемы, поделитесь, сталкивались ли? Ну и нужно думать что с этим делать, оставлять или что-то изобретать. Идея вот в чем. Серия кликов (даже одиночный) может вызвать непредусмотренный переход даже когда на этот клик нет условия. Пример http://lux-rc.com/content/n... Очень простой. Нажимае кнопку - ставим флаг. Отпускаем - сбрасываем и возвращаемся. Т.е. по логике вещей когда вернулись, флаг уже сброшен и поэтому условие перехода в строб по флагу не выполнится никогда. Но не тут то было. Если нажимать "задумчиво", с удержарнием, чтобы клик не сформировался - то все так и работает. Но если кликнуть, то ситуация меняется. Выполняется правило на нажатие, ставится флаг, потом вы отпускаете кнопку и формируется слик, который отсылает к ноде, где он начинался, т.е. к самое первой. А там срабатывает правило на флаг. Что делать то будем? Кто-то спотыкатся об эту "особенность"? |
08.11.2013, 18:17 | 343 |
Weekend Warrior
Регистрация: 24.09.2012 Последняя активность: 26.07.2019 10:38 Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
У меня в интерфейсе это проявляется нежеланием оного обрабатывать оч. быстрый клик.
|
08.11.2013, 18:33 | 344 | |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
Ну или давайте пример, если я не о том. [Исправлено: lux-rc.com, 08.11.2013 в 18:35] |
|
08.11.2013, 18:38 | 345 |
Weekend Warrior
Регистрация: 24.09.2012 Последняя активность: 26.07.2019 10:38 Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Нужно заюзать костыль надо только подумать, какой. Это один из тех случаев, гне не работают приоритеты. Такое ощущение, что сим не успевает за флагами.
[Исправлено: Vasiq, 08.11.2013 в 18:54] |
08.11.2013, 18:40 | 346 |
Ветеран Фонарёвки
Регистрация: 11.08.2011 Последняя активность: Вчера 21:52 Адрес: Дубна
Сообщений: 10697
Записей в дневнике: 1 Сказал(а) спасибо: 2635
Поблагодарили: 12043 раз(а) в 4383 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Посмотрл парочку действительно на svg тормозит. так что этот вопрос снимается)
__________________
* |
08.11.2013, 18:45 | 347 |
Ветеран Фонарёвки
Регистрация: 22.11.2011 Последняя активность: 13.11.2020 16:01
Сообщений: 1009
Сказал(а) спасибо: 534
Поблагодарили: 247 раз(а) в 138 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
|
08.11.2013, 18:56 | 348 | |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
на самом деле я рад что такое нашлось сейчас а не потом. с одной стороны больно бы это не ударило, т.к. из 40 проектов только я на своем случайно это обнаружил. Остальные как-то работают и так. с другой - если можно что-то найти и исправить сейчас - нужно искать и исправлять Нужно как-то простимулировать народ потыкать в Ваши интерфейсы. Может что еще всплывет пока не поздно [Исправлено: lux-rc.com, 08.11.2013 в 19:00] |
|
08.11.2013, 19:35 | 349 |
Ветеран Фонарёвки
Регистрация: 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; кучка ультрафаеровоподобного хлама |
08.11.2013, 22:31 | 350 |
Weekend Warrior
Регистрация: 24.09.2012 Последняя активность: 26.07.2019 10:38 Адрес: Minsk.by
Сообщений: 144
Сказал(а) спасибо: 70
Поблагодарили: 20 раз(а) в 14 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Вариант решения проблемы с флагом. До конца не понял, как работает, но работает.
http://lux-rc.com/content/n... |
09.11.2013, 03:52 | 351 | |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Цитата:
У этой проблемы или фичи есть только одно правильное решение - это изоляция транзакций в каком-то виде. Точнее даже не изоляция, т.к. это всегда в одну сторону, а "машина времени". По сути, когда машина ловит клик уже в другом состоянии, не в том где этот клик начинался, то по идее мы должны вернутся во времени назад в то состояние где клик начался и проверить условия с тем состоянием машины, которое было тогда. Если условие выполнится - то клик засчитан и откат во времени состоялся, т.е. мы идем по альтернативной цепочке во времени. Если же условие не выполняется, то мы забываем про то, что мы вообще туда ходили. Собрать такую "машину времени" в ядре можно, но если все делать честно и чисто - оверхед будет колоссальным. Ведь нужно иметь возможность делать полный снимок момента с учетом всех параметров которые могут повлиять на исход условий. Одно дело сохранить текущий режим драйвера и память. Но в идеале этого мало - нужно сохранять и транзиентные параметры на любой момент времени - т.е. значение напряжения, темпепатуру, что было с кнопками тогда. В общем это за граню добра и зла и делать это из-за очень редких "глюков" не хочется. Можно подумать что я ничего не сделал, но я сделал. Сейчас при получении клика мы откатываемся назад во времени на тот момент, когда он произошел, но не все параметры из прошлого нам видны. Пока только параметры регулятора. У меня был глюк в диаграмме 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. [Исправлено: lux-rc.com, 09.11.2013 в 04:36] |
|
09.11.2013, 12:41 | 352 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
добавил к снимку времени всю флеш-память, т.е. флаги и слоты.
пока добавил только в симе. "железо" пока не успел поправить в симе не заметил сильного измемения в скорости отклика. Пример: http://lux-rc.com/content/n... Постарался сделать просто и наглядно. Стартуем и сразу ставим флаг 8, свет не горит. Если нажать, то мы снимаем восьмой и ставим первый, включаем 4 ватта и сохряняем это во второй слот. Отпускаем - снимаем перый флаг. Быстрый одиночный клик теперь не сбрасывает в строб, т.к. флаг 1 в любом варианте чистится. Либо явно по отпусанию кнопки, либо неявно из-за возврата в "прошлое" во время проверки одиночного клика. Теперь двойной клик. Он нужен чтобы показать, что было до начала нажатия кнопки. Нужно закрыть сим и снова его открыть чтобы стартовать с начала. В начале у нас ничего не горит, все слоты пустые и стоит только 8й флаг. Мы делаем двойной клик, пока мы его делаем, машина успевает отработать включение света, снятие и установку флагов, сохранение 4W во второй слот но когда приходит второй клик, все это отменяется и мы откатываемся во времени к состоянию, когда стоял только 8 флаг и больше ничего. Так и получается. Проверяйте. [Исправлено: lux-rc.com, 09.11.2013 в 12:43] |
09.11.2013, 15:34 | 353 |
закрыто
|
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 - проверка условий внешней освещенности и отраженного света. Оба - внешие и как температура и напряжение - меняются медленно, пропускаем. В снимок НЕ ВХОДЯТ |
09.11.2013, 23:21 | 354 |
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] |
10.11.2013, 02:26 | 356 |
закрыто
|
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] |
10.11.2013, 22:29 | 357 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
друзья, кому не безразлична эта тема, прошу поддержать меня в благом начинании
https://forum.fonarevka.ru/... |
11.11.2013, 01:16 | 358 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Приделал простецкий пока список проектов на сервере.
Есть пожелания какие фишки добавить к списку? На вскидку думаю имеет смысл показывать владельца, дату обновления и каким-то образом считать кол-во установок (заливок). Смущает что в одном большом списке начнется беспорядок, все свалено в кучу. Возможно потребуется какой-то способ классификации или рубрикатор или разделы. В общем не знаю пока что с этим делать |
11.11.2013, 01:34 | 359 |
Почти не ждун
Регистрация: 15.02.2012 Последняя активность: 06.11.2021 14:48 Адрес: СПб
Сообщений: 745
Сказал(а) спасибо: 217
Поблагодарили: 274 раз(а) в 136 сообщениях
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
Какой-нибудь раздел для тестовых или недописанных прошивок. Допустим, я поковырял какие-то определенные функции и залил на сервер прошивку чисто в качестве личных записок на будущее. Плюс раздел с официально одобренными примерами по разработке.
__________________
|
11.11.2013, 01:40 | 360 |
закрыто
|
Re: Nexus - Язык описания алгоритма работы любого фонаря
я вот думаю может решить вопрос просто статусом проекта. К примеру "двафт" (черновик), "final" (финальное решение) и к примеру "rubbish" (мусор, вроде корзины). И Вы можете выбирать что видеть, по умолчанию видны только final.
А все примеры вынести в PDF в виде картинок. Там же описание-справочник. Все-таки не место примерам в каталоге софта |