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

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

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

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

#241

Сообщение JonyBest » 14.01.2023{, 22:21}

ecoins писал(а):
14.01.2023{, 19:09}
попробуем поисследовать.
Благодарю! Поражаюсь, как Вас хватает и свои проекты вести и другим помогать :)

Не получается этот сенсор добавить.
Но думается дело в другом. Я уже через отдельную переменную пробовал

Код: Выделить всё

string ValueSensor<INS.UUID> = <Вход>;
, тоже ошибка компиляции.
Последний раз редактировалось JonyBest 15.01.2023{, 20:12}, всего редактировалось 2 раза.

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

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

#242

Сообщение Phazz » 14.01.2023{, 22:23}

JonyBest, так там должен быть char а не string

Отправлено спустя 4 минуты 17 секунд:

Код: Выделить всё

valve190208383.setValue(_swi1.c_str()); 
Попробуйте так

Отправлено спустя 4 минуты 9 секунд:
JonyBest писал(а):
14.01.2023{, 22:21}
получается этот сенсор добавить

А вон оно что, вы задумали интегрировать с HA? Интересная тема.

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

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

#243

Сообщение JonyBest » 14.01.2023{, 23:14}

Phazz писал(а):
14.01.2023{, 22:32}
так там должен быть char а не string
Спасибо! Всё получилось.
Phazz писал(а):
14.01.2023{, 22:32}
А вон оно что, вы задумали интегрировать с HA? Интересная тема.
Это здорово снизит порог входа для работы с HA. Получается легкого и просто пробросить свои значения в HA и управлять ими.
СпойлерПоказать
Скриншот 14-01-2023 230637.jpg

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

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

#244

Сообщение CTAPuK » 21.01.2023{, 15:20}

Phazz писал(а):
27.02.2022{, 19:39}
А вот чего действительно иногда не хватает, так это вставки кода из блока в общую функцию в мультиблоке
Кто-нибудь решил эту проблему вставки кода из "функции каждого экземпляра" в "функцию общего блока", если заведомо неизвестно какое кол-во однотипных вставок потребуется (вставки различаются переменными индексами).

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

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

#245

Сообщение artemka19 » 21.01.2023{, 16:00}

CTAPuK, только через костыли.
Пример реализации можно посмотреть в jeeui2

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

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

#246

Сообщение JonyBest » 22.01.2023{, 21:49}

artemka19 писал(а):
21.01.2023{, 16:00}
Пример реализации можно посмотреть в jeeui2
Тоже столкнулся с данной проблемой. Можно чуть расписать алгоритм, не всё понял...

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

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

#247

Сообщение Phazz » 22.01.2023{, 23:41}

viewtopic.php?p=116871#p116871
Вот тут конкретный пример

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

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

#248

Сообщение CTAPuK » 24.01.2023{, 20:36}

Спасибо всем, кто откликнулся.
Но, к сожалению, я не нашел решение вставки кода из функции каждого экземпляра в функцию общего блока.

artemka19, пользуюсь Ваши блоками jeeui2 v.4.09. Не нашел в них методу реализации вышеописанной вставки. Допускаю, что плохо искал, поэтому прошу указать конкретный блок из Вашего мутиблокового пакета, где это реализовано.

Phazz, в Вашем примере использован старый редактор, а потому в нем нет кода для общего блока и кода для блока каждого экземпляра. Если не затруднит, поясните как увязать пример с моим вопросом о многократной вставки из кода экземпляра в общий код.

Допускаю, что я сформулировал свой вопрос не достаточно конкретно, поэтому повторюсь.
Другими словами я столкнулся с проблемой вставки из кода функции для блока каждого экземпляра в код функции для общего блока. Проблема решается тривиально, если ставка требуется только одна. Но если этих вставок 2-3 или 15, то проблема для меня на текущий момент не решена. Кроме словесного описания прилагаю графическую иллюстрацию своего вопроса для более детального описания.
Пока использую ручной перенос в IDE, что не сильно удобно.
Вложения
Блок-схема.jpg
Блок-схема.jpg (21.76 КБ) 869 просмотров

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

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

#249

Сообщение Phazz » 24.01.2023{, 21:10}

CTAPuK, а тут не имеет значения какой редактор. Главное сам принцип реализации. Закрываем луп и открываем функцию

Отправлено спустя 1 минуту 17 секунд:
а покажите пример кода

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

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

#250

Сообщение ecoins » 24.01.2023{, 21:40}

CTAPuK писал(а):
24.01.2023{, 20:36}
Кроме словесного описания прилагаю графическую иллюстрацию своего вопроса для более детального описания.
Пока использую ручной перенос в IDE, что не сильно удобно.
Путь реализации сформулированной задачи средствами FLProg не единственный.
Для разовых случаев да.
Можно (и так пожалуй правильнее) сделать функцию на C++, оформить её как библиотеку и обращаться из FLProg к ней.

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

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

#251

Сообщение CTAPuK » 24.01.2023{, 23:57}

Phazz писал(а):
24.01.2023{, 21:11}
Закрываем луп и открываем функцию
В простейшем случае это понятно.
Phazz писал(а):
24.01.2023{, 21:11}
а покажите пример кода
Да собственно вот пример простейшего кода.
Крутится loop, который вызывает функцию общего блока FuncCommon().
В свою очередь FuncCommon() вызывает FuncSingle(), которая имеет следующий вид:

Код: Выделить всё

FuncSingle()
{
...
...
Index1=random(0, 25);
Index2=Index1 + random(25, 50);
Index3=Index2 * random(50, 75);
Index4=Index3 / random(75, 100);
...
...
}
Заведомо знать кол-во Index'ов невозможно, так как это задаваемый в пользовательском блоке параметр, который зависит от количества блоков, используемых в скетче. Поэтому функция общего блока FuncCommon() тоже не догадывается сколько этих Index'ов используется в каждом конкретном случае. Об этом знают только блоки каждого экземпляра, в том числе FuncSingle().

* Причём имена Index1...Index4 это имена переменных и ни не могут быть массивом.
** На арифметические действия в FuncSingle() не обращайте внимания они носят чисто декоративный характер.

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

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

#252

Сообщение CTAPuK » 25.01.2023{, 00:08}

ecoins писал(а):
24.01.2023{, 21:40}
Путь реализации сформулированной задачи средствами FLProg не единственный.
Для разовых случаев да.
Можно (и так пожалуй правильнее) сделать функцию на C++, оформить её как библиотеку и обращаться из FLProg к ней.
Вы абсолютно правы.
Но, я уже написал ПБ в FLProg для реализации своей небольшой потребности. Поэтому хочется, по возможности, в FLProg и допилить.
А делать это на сиплюсах, честно говоря трудозатраты того не стóят. :-)

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

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

#253

Сообщение Phazz » 25.01.2023{, 04:53}

CTAPuK, я правильно понимаю, что каждый добавленный блок в проект дописывает в общую функцию свой кусочек кода?

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

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

#254

Сообщение aidar_i » 25.01.2023{, 06:23}

CTAPuK писал(а):
24.01.2023{, 20:36}
решение вставки кода из функции каждого экземпляра в функцию общего блока.
Вы хотите получить это?

Код: Выделить всё

void setup()
{
}
void loop()
{
    //Плата:1
    FuncCommon();
  }
FuncCommon() 
{
     FuncSingle201012471();
     FuncSingle223914946();
     FuncSingle24947798();
}
FuncSingle201012471()
    {
        Index1=random(0, 25);
        Index2=Index1 + random(25, 50);
        Index3=Index2 * random(50, 75);
        Index4=Index3 / random(75, 100);
    }
    FuncSingle223914946()
    {
        Index1=random(0, 25);
        Index2=Index1 + random(25, 50);
        Index3=Index2 * random(50, 75);
        Index4=Index3 / random(75, 100);
    }
    FuncSingle24947798()
    {
        Index1=random(0, 25);
        Index2=Index1 + random(25, 50);
        Index3=Index2 * random(50, 75);
        Index4=Index3 / random(75, 100);
    }
В таком виде пойдет?

Код: Выделить всё

void setup()
{
}
void loop()
{
    //Плата:1
    FuncCommon();
}
FuncCommon() 
{
    FuncSingle201012471()
    {
        Index1=random(0, 25);
        Index2=Index1 + random(25, 50);
        Index3=Index2 * random(50, 75);
        Index4=Index3 / random(75, 100);
    }
    
   FuncSingle223914946()
    {
        Index1=random(0, 25);
        Index2=Index1 + random(25, 50);
        Index3=Index2 * random(50, 75);
        Index4=Index3 / random(75, 100);
    }
    
   FuncSingle24947798()
    {
        Index1=random(0, 25);
        Index2=Index1 + random(25, 50);
        Index3=Index2 * random(50, 75);
        Index4=Index3 / random(75, 100);
    }
}
Вставка функцию в функцию.flp
(224.15 КБ) 26 скачиваний

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

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

#255

Сообщение CTAPuK » 26.01.2023{, 20:18}

Phazz писал(а):
25.01.2023{, 04:53}
CTAPuK, я правильно понимаю, что каждый добавленный блок в проект дописывает в общую функцию свой кусочек кода?
Phazz, да, совершенно верно. Вы всё правильно поняли.

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

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

#256

Сообщение Phazz » 26.01.2023{, 20:44}

CTAPuK, порядок имеет значение?

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

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

#257

Сообщение CTAPuK » 26.01.2023{, 21:27}

aidar_i писал(а):
25.01.2023{, 06:23}
CTAPuK писал(а):
24.01.2023{, 20:36}
решение вставки кода из функции каждого экземпляра в функцию общего блока.
Вы хотите получить это?
...
aidar_i, спасибо за Вашу помощь, но чуть-чуть не так.

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

И потом, функция FuncCommon() ничего не знает об "идентификаторе экземпляра", а потому я не смогу ей объяснить как можно вызвать FuncSingle<INS.UUID>().
Пожалуйста поправьте меня, если где-то я ошибаюсь.

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

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

#258

Сообщение ecoins » 26.01.2023{, 21:29}

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

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

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

#259

Сообщение CTAPuK » 26.01.2023{, 21:35}

Phazz писал(а):
26.01.2023{, 20:44}
CTAPuK, порядок имеет значение?
Phazz, не понял вопрос, если честно. Про какой порядок Вы спрашиваете?

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

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

#260

Сообщение Phazz » 26.01.2023{, 21:53}

CTAPuK, порядок в каком размещается код в функции. Ну в принципе пример который был приведен мной ранее вам подходит.

Ответить

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