Блок пользователя содержащий другие блоки пользователя.

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Блок пользователя содержащий другие блоки пользователя.

#1

Сообщение Max » 24.06.2016{, 11:39}

Кто пробовал делать блоки пользователя содержащие другие блоки пользователя и в свою очередь имеющие в себе еще блоки пользователя? Ну, по типу матрешки.
Да уж...

Проблем не возникнет с компиляцией и работоспособностью?

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 33
Откуда: Коломна
Имя: Станислав
Контактная информация:

Блок пользователя содержащий другие блоки пользователя.

#2

Сообщение Boroda » 24.06.2016{, 12:15}

В пользовательский блок FBD вообще нельзя воткнуть другой пользовательский блок - нет вкладки "пользовательские".
Последний раз редактировалось Boroda 24.06.2016{, 12:16}, всего редактировалось 1 раз.

Аватара пользователя
slavas
Лейтенант
Сообщения: 568
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

Блок пользователя содержащий другие блоки пользователя.

#3

Сообщение slavas » 24.06.2016{, 12:29}

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

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 33
Откуда: Коломна
Имя: Станислав
Контактная информация:

Блок пользователя содержащий другие блоки пользователя.

#4

Сообщение Boroda » 24.06.2016{, 13:14}

slavas писал(а):огород в огороде
А как, допустим, вставить ПБ на СИ состоящий из одной строчки (например, Out=In1 xor In2 xor In3 xor In4;) в ПБ на FBD? Стандартного-то блока XOR для переменных типа Byte нет. Лепить FBD огород:
- прочитать бит0/1/2/3/4/5/6/7 переменной IN1
- прочитать бит0/1/2/3/4/5/6/7 переменной IN2
- каждую пару заксорить
- записать биты0/1/2/3/4/5/6/7 в переменную темп
- прочитать бит0/1/2/3/4/5/6/7 переменной темп
- прочитать бит0/1/2/3/4/5/6/7 переменной IN3
- каждую пару заксорить
- записать биты0/1/2/3/4/5/6/7 в переменную темп
- и т.д.

Представляете себе размер коробочки?

Тоже самое с побитовым сдвигом вправо/влево (ну тут можно делением/умножением обойтись), AND и OR.
Последний раз редактировалось Boroda 24.06.2016{, 13:26}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Блок пользователя содержащий другие блоки пользователя.

#5

Сообщение Max » 24.06.2016{, 14:10}

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

Добавлено (24.06.2016, 14:10)
---------------------------------------------
Boroda писал(а):В пользовательский блок FBD вообще нельзя воткнуть другой пользовательский блок - нет вкладки "пользовательские".
Вот если в пользовательском блоке нет одинаковых переменных, или вообще нет переменных, то по идее его можно было бы использовать в своем блоке? Было бы крайне удобно и не надо было бы повторять логику нужного имеющегося блока.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 33
Откуда: Коломна
Имя: Станислав
Контактная информация:

Блок пользователя содержащий другие блоки пользователя.

#6

Сообщение Boroda » 24.06.2016{, 14:28}

Max писал(а):если в пользовательском блоке нет одинаковых переменных
Так они и так перед компиляцией преобразуются.
СпойлерПоказать
Было в блоке пользователя:

byte N_byte;
unsigned long time;
unsigned long time_old;
byte bsumm;
byte bsumm_in;

Стало в Arduino IDE (два блока на плате):

byte N_byte_125723286_1;
unsigned long time_125723286_1;
unsigned long time_old_125723286_1;
byte bsumm_125723286_1;
byte bsumm_in_125723286_1;

и второй

byte N_byte_125723286_2;
unsigned long time_125723286_2;
unsigned long time_old_125723286_2;
byte bsumm_125723286_2;
byte bsumm_in_125723286_2;
Добавлено (24.06.2016, 14:28)
---------------------------------------------
Правда тогда наверное переменная блока в блоке будет например такой: byte Temp_125723286_1_789723286_1, а если вложение будет десятым, то сами представляете, что будет. Тут палка о двух концах... А когда длина имени переменной превысит 255 символов - у компилятора крыша съедет...
Последний раз редактировалось Boroda 24.06.2016{, 14:41}, всего редактировалось 1 раз.

Аватара пользователя
slavas
Лейтенант
Сообщения: 568
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

Блок пользователя содержащий другие блоки пользователя.

#7

Сообщение slavas » 24.06.2016{, 15:15}

а как вы вообще собираетесь вставлять блоки?

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 33
Откуда: Коломна
Имя: Станислав
Контактная информация:

Блок пользователя содержащий другие блоки пользователя.

#8

Сообщение Boroda » 24.06.2016{, 16:59}

slavas писал(а):а как вы вообще собираетесь вставлять блоки?
А пока никак не получится, и предположу, что Автор так же думает, потому как базовай функционал писался давно и все уже забылось. А трогать работающее чревато последствиями.

Добавлено (24.06.2016, 16:59)
---------------------------------------------
Поэтому, если надо сделать какую-либо хитрую коробочку - открываю Arduino.cc или Arduino.ru и пытаюсь на СИ наваять, благо опыта в программировании на ST, Асме и Бейсике навалом.
Последний раз редактировалось Boroda 24.06.2016{, 17:01}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Блок пользователя содержащий другие блоки пользователя.

#9

Сообщение Max » 24.06.2016{, 17:26}

Boroda писал(а):А пока никак не получится
Ну, это понятно...
Есть свои специфичные блоки (для себя) и хотелось бы их задействовать (так же для себя) не делая повторно работу, которую уже делал... Вот и весь смысл темы.

Ответить

Вернуться в «Спросить у знатоков»