Новый редактор для создания пользовательских блоков.

Появился в версии 7.

Создаем свой блок. Вопросы, помощь знатоков.
CTAPuK
Рядовой
Сообщения: 68
Зарегистрирован: 06.12.2020{, 20:41}
Репутация: 10
Имя: Михаил

Новый редактор для создания пользовательских блоков.

#261

Сообщение CTAPuK » 26.01.2023{, 22:08}

ecoins писал(а):
26.01.2023{, 21:29}
CTAPuK писал(а):
26.01.2023{, 20:18}
Phazz, да, совершенно верно. Вы всё правильно поняли.
Не вполне понял задачу, но возможно Вам могут оказаться полезными "приемчики", которые мы наработали при создании блоков FLProg средствами профессионального редактора.
1. ... в зависимости от настройки изменяются кол-во входов с выводимыми переменными с выбором типов этих переменных и выбора режима вывода(по изменению одной из переменных, периодически и т.п.)...
2....В главном блоке находится таблица указателей на объекты данных - обычно мы задаем 8-16 объектов - указатели на них занимают немного места - кол-во объектов х4(байт). Сами объекты данных могут быть весьма объемные, но создаются они в проекте ТОЛЬКО по мере необходимости. ...
Спасибо, у меня так и сделано, по первому варианту.

П.С. Я Вам в личку вопрос отправил, чтобы не захламлять тему. Если будет время, посмотрите.

CTAPuK
Рядовой
Сообщения: 68
Зарегистрирован: 06.12.2020{, 20:41}
Репутация: 10
Имя: Михаил

Новый редактор для создания пользовательских блоков.

#262

Сообщение CTAPuK » 26.01.2023{, 22:26}

Phazz писал(а):
26.01.2023{, 21:53}
CTAPuK, порядок в каком размещается код в функции...
Phazz, порядок формируем мы сами и относительно вольны в его формировании. Единственное, он должен соответствовать правилам и логике.
Phazz писал(а):
26.01.2023{, 21:53}
... Ну в принципе пример который был приведен мной ранее вам подходит.
Если Вы имеете ввиду пример с 2-мя ядрами, то я не нашел там реализацию того, как можно вставлять в общую функцию код из функции экземпляра с переменными экземпляра. Вы сами на это обращали внимание: "каждый добавленный блок в проект дописывает в общую функцию свой кусочек кода?".

Или Вы про другое говорите?

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

Новый редактор для создания пользовательских блоков.

#263

Сообщение aidar_i » 27.01.2023{, 07:28}

CTAPuK писал(а):
26.01.2023{, 21:27}
Так как при генерации кода между кодом общей функции и кодом функции каждого экземпляра (то есть между этими фигурными скобками) вклиниваются функции из других ПБ.
Не давайте вклиниваться.
Все другие блоки располагайте вне этого ПБ, соединяйте с ним через клеммы, переменные.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Новый редактор для создания пользовательских блоков.

#264

Сообщение Dryundel » 27.01.2023{, 17:37}

aidar_i писал(а):
25.01.2023{, 06:23}
Вы хотите получить это?
...
Вставка функцию в функцию.flp
Это работать не будет. Даже не скомпилируется.

Внутри функции нельзя объявить другую функцию. Можно только вызвать.
Соответственно можно в главном блоке сделать вызовы других функций, а сами функции создать отдельно.

И да, не забывайте при объявлении функции указывать ее тип (int, float, ... или void)

Отправлено спустя 4 минуты 50 секунд:
CTAPuK писал(а):
26.01.2023{, 21:27}
Так как при генерации кода между кодом общей функции и кодом функции каждого экземпляра (то есть между этими фигурными скобками) вклиниваются функции из других ПБ.
Очередность вставки блоков в проект влияет на очередность компиляции (в пределах платы), независимо от расположения блоков на плате. Включите нумерацию блоков.
Функции из других блоков не вклинятся если они размещены на других платах.

Отправлено спустя 11 минут 11 секунд:
Phazz писал(а):
26.01.2023{, 21:53}
Ну в принципе пример который был приведен мной ранее вам подходит.
Не подходит, применительно к функции. Причина выше.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Новый редактор для создания пользовательских блоков.

#265

Сообщение rw6cm » 27.01.2023{, 18:52}

Соглашусь с постом выше.
CTAPuK, Вы бы выложили реальный код, и блок в котором что то не получается.
Как вариант из того что понял из темы.
Вариант с функцией.flp
(367.95 КБ) 24 скачивания
Win10-64, FLProg (portable)

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Новый редактор для создания пользовательских блоков.

#266

Сообщение artemka19 » 27.01.2023{, 19:23}

у меня так в jeeui2: искусственнно завершаем луп в первом блоке, подсовывая закрывающую скобку и теперь вытаскивая новые блоки на плату - мы наполняем кодом создаваемую функцию.

СпойлерПоказать
void loop {
//тут начало loop
.
.
.
.
//эта функция должна крутиться в лупе чтобы работал остальной код находящийся на самодельной плате-функции
echo();
//т.к. мы искусственоо завершаем луп, то при использовании чужих блоков (в которых имеется код в секции "Конец секции Луп"),
//этот самый код попадает теперь в функцию empty(), поэтому чтоб этот чужлй код тоже работал мы помещаем empty() внутрь лупа
empty();
// искуственно заканчиваем loop
}
// и ниже собираем функции из блоков для веба
void echo()
{
if (test001)page001=ESPControllerWifi_tspWebServer.arg(0); // выясняем номер страницы с которой пришел запрос
if (test001)zpt=0; // это запятая при сборке json
if (test001)ESPControllerWifi_tspWebServer.setContentLength(CONTENT_LENGTH_UNKNOWN); // сообщаем браузеру что длина ответа неизвестна
if (test001)ESPControllerWifi_tspWebServer.chunkedResponseModeStart(200, "application/json");//шлем респонс ответ=200, сообщаем что тип контента "application/json"
if (test001)ESPControllerWifi_tspWebServer.sendContent(nachalo_json());//начало сборки json
/*---*/


//тут НИЖЕ коды блоков вытащенных на плату (т.е. этот код ВНУТРИ функции - вытаскивая новые блоки мы собираем код в этой функции)

//БЛОК1
if ((test001)&&(page001=="0"))ESPControllerWifi_tspWebServer.sendContent(nadpis(0, "59565207", 0, 16, (String("")),(String("")), "n", "n",0, 0));
/*---*/


//БЛОК2 передаем окончание json строки
if (test001)ESPControllerWifi_tspWebServer.sendContent(finish_make_json());
// сообщаем браузеру что закончили передачу фрагментированного ответа
if (test001)ESPControllerWifi_tspWebServer.sendContent("");
if (test001)test001=0;


/*
теперь лайфхаки :)
завершаем функцию по сборке общей функции
*/
}



// пустая функция - обманываем ардуино иде
void empty()
{
// подсовываем Ардуино IDE недостающую открывающую " { "
/*---*/



// это "Последний блок"
/*---*/
}
Отправлено спустя 5 минут 32 секунды:
по аналогии с незакрывающейся скобкой в сетапе (как сделано в гайвер веб)


ну и желательно это делать в конце проекта

Отправлено спустя 9 минут 5 секунд:
rw6cm,
твой вариант не прокатит: в проекте возникает хронологическая зависимость от порядка вытаскивания блоков.

в jeeui2 же, например, нет этой особенности хронологической зависимости при сборке функции)))

CTAPuK
Рядовой
Сообщения: 68
Зарегистрирован: 06.12.2020{, 20:41}
Репутация: 10
Имя: Михаил

Новый редактор для создания пользовательских блоков.

#267

Сообщение CTAPuK » 27.01.2023{, 21:39}

Благодарю всех, кто принял участие в обсуждении проблемы.
Наверное самый простой рабочий вариант - это вариант описанный artemka19.

В сухом остатке имеем.
Что называется правильного решения, то есть решения средствами самого редактора и внутри редактора, на сегодняшний день нет. Пока это объективная реальность, исходя из которой и пишем свои ПБ. Но есть метод "костыль", как его называют, который состоит в расположении закрывающего блока ПБ с "}" после основного ПБ. И лучше, если эта комбинация основной-закрывающий, располагается на отдельной плате, что собственно у меня и сделано.
Но задавая свой вопрос я исходил из того, что может быть кто-то реализовал это другими, более изящными способами.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Новый редактор для создания пользовательских блоков.

#268

Сообщение Phazz » 27.01.2023{, 21:58}

CTAPuK, да, в редакторе это не сделать. Сергей вроде обещал решение, но видимо пока руки не доходят )

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

Новый редактор для создания пользовательских блоков.

#269

Сообщение aidar_i » 28.01.2023{, 13:35}

Ещё раз обращусь Сергею.
support, в следующей версии программы, сделайте, пожалуйста, в обоих редакторах ПБ, чтобы очерёдность расположения кода в сетап, не зависела от порядка вытаскивания блоков, а зависела от расположения блоков в проекте, аналогично loop.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Новый редактор для создания пользовательских блоков.

#270

Сообщение Phazz » 28.01.2023{, 14:00}

Это опять же костыль. Всё-таки нужна общая функция в которую каждый блок мультиблока мог дописывать свой код, а порядок кода зависел от расположения в проекте.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Новый редактор для создания пользовательских блоков.

#271

Сообщение Dryundel » 28.01.2023{, 14:33}

aidar_i писал(а):
28.01.2023{, 13:35}
Ещё раз обращусь Сергею.
support, в следующей версии программы, сделайте, пожалуйста, в обоих редакторах ПБ, чтобы очерёдность расположения кода в сетап, не зависела от порядка вытаскивания блоков, а зависела от расположения блоков в проекте, аналогично loop.
Предполагаю, что кому то удобней порядок компиляции в соответствии с порядком вытаскивания блоков.
Возможно была бы удобна возможность изменять нумерацию блоков в проекте.
Или перераспределение нумерации в соответствии с расположением. (дополнительная кнопка перераспределения нумерации).
Это в основном для кода в loop.

Теперь касаемо setup.
aidar_i, а что если требуется выполнение кода блока в loop согласно расположению блоков в проекте, а код блока setup вставлялся вначале?
Вообще для этого в редакторе Pro существуют разделы "Начало секции Setup", "Конец секции Setup". Кроме того, Есть общий код мультиблока, код блока и код каждого экземпляра, что тоже влияет на расположение кода. В принципе, мне этого всегда хватало.

По моему мнению, расположение кода setup блока, не должно зависеть от расположения блока в проекте, в отличии от кода loop. Это два независимых друг от друга момента.

Однако есть один нелогичный момент. Если код loop блока подчиняется очередности плат в проекте, то код setup блока компилируется в соответствии с очередностью вытаскивания блока и расположение плат на это не влияет. Возможно этот момент и стоило бы поправить.

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Новый редактор для создания пользовательских блоков.

#272

Сообщение Naladchik » 28.01.2023{, 15:18}

Dryundel писал(а):
28.01.2023{, 14:33}
По моему мнению, расположение кода setup блока, не должно зависеть от расположения блока в проекте, в отличии от кода loop.
Есть случаи, когда порядок инициализации блоков (а она как раз и делается в Setup) так же имеет значение.
Если расположение кода будет зависеть от расположения блока - порядок инициализации будет контролируемым.
Сейчас же порядок инициализации можно определить или костылями или сносом блоков и добавлением их в проект в нужном порядке.
(в мультиблоке ESPUI реально поизвращаться пришлось чтоб обойти этот момент).
Dryundel писал(а):
28.01.2023{, 14:33}
Возможно этот момент и стоило бы поправить.
Давно Сергея прошу об этом.
С Declare такая же ситуация.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Новый редактор для создания пользовательских блоков.

#273

Сообщение Dryundel » 28.01.2023{, 15:36}

Naladchik писал(а):
28.01.2023{, 15:18}
Есть случаи, когда порядок инициализации блоков (а она как раз и делается в Setup) так же имеет значение.
Это конечно факт. Однако порядок инициализации в setup и выполнение в loop не взаимосвязанные вещи и то что инициализируется в setup раньше, в loop может выполняться позже.

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Новый редактор для создания пользовательских блоков.

#274

Сообщение Naladchik » 28.01.2023{, 20:35}

Dryundel писал(а):
28.01.2023{, 15:36}
... и то что инициализируется в setup раньше, в loop может выполняться позже.
Да ради бога, лишь бы порядок выполнения участков кода, не важно где Setup или Loop, был бы прогнозируемым и поддавался изменениям без глобального перекраивания проекта, только смещением блоков. А это можно получить только если порядок добавления кода в секции зависит от порядка компиляции.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Новый редактор для создания пользовательских блоков.

#275

Сообщение Dryundel » 29.01.2023{, 10:11}

Naladchik писал(а):
28.01.2023{, 20:35}
Да ради бога, лишь бы порядок выполнения участков кода, не важно где Setup или Loop, был бы прогнозируемым и поддавался изменениям без глобального перекраивания проекта, только смещением блоков.
Вы даже не попытались понять что я написал.
Ок, Предположим я хочу чтобы в Loop код второго блока выполнялся после первого, а в setup надо чтобы код второго блока стоял раньше первого.
Вопрос - По вашей логике, куда в проекте я должен сместить второй блок относительно первого?

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Новый редактор для создания пользовательских блоков.

#276

Сообщение JonyBest » 13.02.2023{, 22:59}

Доброго времени! Подскажите как использовать вход String в редакторе, чтобы в setup в коде получилось ("Вход"), а не (String("Вход")).
Беда в том, что нужно значение типа constchar. А str.c_str() работает только в Loop.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Новый редактор для создания пользовательских блоков.

#277

Сообщение Dryundel » 14.02.2023{, 01:21}

JonyBest, а что в итоге должно получиться? Какой код?

Вход блока это полюбому переменная, а не константа. Иначе зачем тогда вход.
Может через параметр сделать? Там это без проблем.

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Новый редактор для создания пользовательских блоков.

#278

Сообщение ecoins » 14.02.2023{, 05:50}

JonyBest писал(а):
13.02.2023{, 22:59}
Доброго времени! Подскажите как использовать вход String в редакторе, чтобы в setup в коде получилось ("Вход"), а не (String("Вход")).
Беда в том, что нужно значение типа constchar. А str.c_str() работает только в Loop.
Действительно, блоки FLProg в режиме setup() не принимают входных данных.
Это обсуждалось как-то с разработчиком. Ведь в этом случае пришлось бы два раза вставлять один и тот же код в программу.
И наверное это правильно.
Вставлять код в setup не лучшая технология, это исключает возможность программного перезапуска программы.
Мы подобные присвоения всегда делаем в setup.
Для некоторых переменных это организовывается в первой плате которая запускается по условию переменной initParam.

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

Новый редактор для создания пользовательских блоков.

#279

Сообщение aidar_i » 14.02.2023{, 06:54}

Я тоже в loop запускаю со входом.
Если в loop код выполняется только один раз, это равносильно setup. Для этого применяется переменная bool, так называемый "флаг".
Например:
В DeclareSection
bool flag = 1;
В LoopSection
if(flag) { flag = 0;
Код
}

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

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Новый редактор для создания пользовательских блоков.

#280

Сообщение JonyBest » 14.02.2023{, 07:22}

Dryundel писал(а):
14.02.2023{, 01:21}
а что в итоге должно получиться? Какой код?
Хотелось всего лишь в код device.setName("Name"); параметр char "Name" задать через вход. Через параметр всё работает, но не удобно...

Ответить

Вернуться в «Разработка пользовательских блоков»