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

Создаем свой блок. Вопросы, помощь знатоков.
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

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

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

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

string ValueSensor<INS.UUID> = <Вход>;
, тоже ошибка компиляции.
Последний раз редактировалось JonyBest 15 янв 2023, 20:12, всего редактировалось 2 раза.
Аватара пользователя
Phazz
Полковник
Сообщения: 3126
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 233 раза
Поблагодарили: 114 раз

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

Сообщение Phazz »

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

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

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

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

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

А вон оно что, вы задумали интегрировать с HA? Интересная тема.
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

Phazz писал(а): 14 янв 2023, 22:32 так там должен быть char а не string
Спасибо! Всё получилось.
Phazz писал(а): 14 янв 2023, 22:32 А вон оно что, вы задумали интегрировать с HA? Интересная тема.
Это здорово снизит порог входа для работы с HA. Получается легкого и просто пробросить свои значения в HA и управлять ими.
[spoiler]
Скриншот 14-01-2023 230637.jpg
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
CTAPuK
Рядовой
Сообщения: 70
Зарегистрирован: 06 дек 2020, 20:41
Имя: Михаил
Благодарил (а): 1 раз

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

Сообщение CTAPuK »

Phazz писал(а): 27 фев 2022, 19:39 А вот чего действительно иногда не хватает, так это вставки кода из блока в общую функцию в мультиблоке
Кто-нибудь решил эту проблему вставки кода из "функции каждого экземпляра" в "функцию общего блока", если заведомо неизвестно какое кол-во однотипных вставок потребуется (вставки различаются переменными индексами).
artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03 сен 2020, 15:41
Откуда: Питер
Имя: Артем
Поблагодарили: 1 раз

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

Сообщение artemka19 »

[ref]CTAPuK[/ref], только через костыли.
Пример реализации можно посмотреть в jeeui2
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

artemka19 писал(а): 21 янв 2023, 16:00 Пример реализации можно посмотреть в jeeui2
Тоже столкнулся с данной проблемой. Можно чуть расписать алгоритм, не всё понял...
Аватара пользователя
Phazz
Полковник
Сообщения: 3126
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 233 раза
Поблагодарили: 114 раз

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

Сообщение Phazz »

viewtopic.php?p=116871#p116871
Вот тут конкретный пример
CTAPuK
Рядовой
Сообщения: 70
Зарегистрирован: 06 дек 2020, 20:41
Имя: Михаил
Благодарил (а): 1 раз

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

Сообщение CTAPuK »

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

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

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

Допускаю, что я сформулировал свой вопрос не достаточно конкретно, поэтому повторюсь.
Другими словами я столкнулся с проблемой вставки из кода функции для блока каждого экземпляра в код функции для общего блока. Проблема решается тривиально, если ставка требуется только одна. Но если этих вставок 2-3 или 15, то проблема для меня на текущий момент не решена. Кроме словесного описания прилагаю графическую иллюстрацию своего вопроса для более детального описания.
Пока использую ручной перенос в IDE, что не сильно удобно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Phazz
Полковник
Сообщения: 3126
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 233 раза
Поблагодарили: 114 раз

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

Сообщение Phazz »

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

Отправлено спустя 1 минуту 17 секунд:
а покажите пример кода
ecoins
Полковник
Сообщения: 4007
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 153 раза

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

Сообщение ecoins »

CTAPuK писал(а): 24 янв 2023, 20:36 Кроме словесного описания прилагаю графическую иллюстрацию своего вопроса для более детального описания.
Пока использую ручной перенос в IDE, что не сильно удобно.
Путь реализации сформулированной задачи средствами FLProg не единственный.
Для разовых случаев да.
Можно (и так пожалуй правильнее) сделать функцию на C++, оформить её как библиотеку и обращаться из FLProg к ней.
CTAPuK
Рядовой
Сообщения: 70
Зарегистрирован: 06 дек 2020, 20:41
Имя: Михаил
Благодарил (а): 1 раз

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

Сообщение CTAPuK »

Phazz писал(а): 24 янв 2023, 21:11 Закрываем луп и открываем функцию
В простейшем случае это понятно.
Phazz писал(а): 24 янв 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
Рядовой
Сообщения: 70
Зарегистрирован: 06 дек 2020, 20:41
Имя: Михаил
Благодарил (а): 1 раз

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

Сообщение CTAPuK »

ecoins писал(а): 24 янв 2023, 21:40 Путь реализации сформулированной задачи средствами FLProg не единственный.
Для разовых случаев да.
Можно (и так пожалуй правильнее) сделать функцию на C++, оформить её как библиотеку и обращаться из FLProg к ней.
Вы абсолютно правы.
Но, я уже написал ПБ в FLProg для реализации своей небольшой потребности. Поэтому хочется, по возможности, в FLProg и допилить.
А делать это на сиплюсах, честно говоря трудозатраты того не стóят. :-)
Аватара пользователя
Phazz
Полковник
Сообщения: 3126
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 233 раза
Поблагодарили: 114 раз

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

Сообщение Phazz »

[ref]CTAPuK[/ref], я правильно понимаю, что каждый добавленный блок в проект дописывает в общую функцию свой кусочек кода?
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

CTAPuK писал(а): 24 янв 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
CTAPuK
Рядовой
Сообщения: 70
Зарегистрирован: 06 дек 2020, 20:41
Имя: Михаил
Благодарил (а): 1 раз

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

Сообщение CTAPuK »

Phazz писал(а): 25 янв 2023, 04:53 [ref]CTAPuK[/ref], я правильно понимаю, что каждый добавленный блок в проект дописывает в общую функцию свой кусочек кода?
[ref=#808080]Phazz[/ref], да, совершенно верно. Вы всё правильно поняли.
Аватара пользователя
Phazz
Полковник
Сообщения: 3126
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 233 раза
Поблагодарили: 114 раз

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

Сообщение Phazz »

[ref]CTAPuK[/ref], порядок имеет значение?
CTAPuK
Рядовой
Сообщения: 70
Зарегистрирован: 06 дек 2020, 20:41
Имя: Михаил
Благодарил (а): 1 раз

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

Сообщение CTAPuK »

aidar_i писал(а): 25 янв 2023, 06:23
CTAPuK писал(а): 24 янв 2023, 20:36 решение вставки кода из функции каждого экземпляра в функцию общего блока.
Вы хотите получить это?
...
[ref=#ff8000]aidar_i[/ref], спасибо за Вашу помощь, но чуть-чуть не так.

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

И потом, функция FuncCommon() ничего не знает об "идентификаторе экземпляра", а потому я не смогу ей объяснить как можно вызвать FuncSingle<INS.UUID>().
Пожалуйста поправьте меня, если где-то я ошибаюсь.
ecoins
Полковник
Сообщения: 4007
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 153 раза

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

Сообщение ecoins »

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

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

Сообщение CTAPuK »

Phazz писал(а): 26 янв 2023, 20:44 [ref]CTAPuK[/ref], порядок имеет значение?
[ref=#808080]Phazz[/ref], не понял вопрос, если честно. Про какой порядок Вы спрашиваете?
Аватара пользователя
Phazz
Полковник
Сообщения: 3126
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 233 раза
Поблагодарили: 114 раз

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

Сообщение Phazz »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя