Довідка

 Зміст

 Редактор блоків користувача
   Редактор Professional
    Основні налаштування
     Код
      Гілка «Елемент коду»

Гілка «Елемент коду»




Ця гілка служить для створення елемента коду блоку.




Також цій гілці задаються ім'я елемента коду і за необхідності умова його вставлення в код проекту.

Для вибору умови вставки є три варіанти.




У разі вибору варіанта «Немає умов» код, безумовно, вставляється в скетч за необхідності.

У двох випадках необхідно вибрати умову вставки коду в скетч.

Це робиться за допомогою кнопки "Вибрати умову" (2). При цьому відкривається вікно зі списком умов, доступних для даного елемента коду.




Якщо вибрано умову за допомогою кнопки «Перейти на умову»(1), можна безпосередньо перейти на гілку налаштування вибраної умови.

При виборі варіанта "Умова істинно" код вставлятиметься в скетч, тільки якщо логічне вираження умови повертає True. Відповідно, якщо вибрано варіант «Умова хибно» код буде вставлятися в скетч, лише якщо логічне вираження умови повертає False.

Тоолбар редактора коду залежить від розташування даного елемента коду.

Розглянемо можливі варіанти.


Загальний код мультиблоку, загальний код групи блоків, загальний код блоку – секція Declare.




При такому розташуванні елемента коду в тулбарі присутні кнопки Вставити UUID (1), Вставити тег параметра (2) і чек бокс Заборонити компілятору бачити #Include (3).

Якщо натиснути кнопку «Вставити UUID»(1), відкриється вікно вибору ідентифікатора.





«Унікальне число» - при кожному виборі даного ідентифікатора, буде генеруватися унікальне число і вставлятися в код у місце розташування курсора.

"Ідентифікатор мультиблоку" - при виборі цього ідентифікатора код вставляється тег . При компіляції проекту замість нього вставиться ID мультиблоку, який буде однаковий у всьому коді, що входить у цей мультиблок.

Якщо натиснути кнопку «Вставити тег параметра»(2), відкриється вікно вибору тега.




Після вибору тега вставляється в позицію курсора в редакторі.




Чек бокс "Заборонити компілятору бачити #Include"(3) присутній у тулбарі редактора елемента коду тільки при розміщенні цього елемента в розділі Declare. Він призначений для керування компілятором проекту. Якщо його не відзначити, то компілятор збере всі рядки #Include з секцій Declare всіх екземплярів блоків і вставить їх у код скетча в тому місці, яке вважає за потрібне, підкоряючись своєю логікою. Установка даного чек боксу повідомляє компілятору, що в даному елементі коду не можна чіпати рядок #Include і необхідно вставити її в скетч там, де його прописав розробник блоку. У деяких випадках це необхідно. Наприклад, де включення однієї бібліотеки має здійснюватися лише після включення іншої, від якої перша залежить. Але в цьому випадку можливе дублювання підключення бібліотек. Це не страшно звичайно, але як кажуть – «не кошерно».

Загальний код мультиблоку, загальний код групи блоків, загальний код блоку - решта секцій.




При такому розташуванні елемента коду в тулбарі присутні кнопки Вставити UUID (1), Вставити тег параметра (2) і Вставити тег тимчасової змінної (3).

Роботу кнопок «Вставити UUID»(1) та «Вставити тег параметра»(2) ми розглянули вище.

Якщо натиснути кнопку «Вставити тег тимчасової змінної»(3), відкриється вікно вибору типу тимчасової змінної.




Після вибору тега, він вставляється в редактор у розташування курсору.

Тепер розглянемо, що таке тимчасова змінна. Це така змінна, яка може використовуватись блоком для проміжних розрахунків. При компіляції проекту компілятор запитує у всіх блоків (як стандартних, так і користувача) тимчасова змінна якого типу потрібна. Після цього при необхідності він створює за однією змінною кожногозапитаного типу. Ось саме ім'я цієї змінної і вставиться в скетч при компіляції натомість тега.

Зверніть увагу, що робота з цією змінною має розпочатися (запис до неї) і закінчиться в межах однієї ділянки коду. Оскільки блок, що компілюється після даного блоку, може записати в цю змінну інші значення.


Приклад використання тимчасової змінної.

Блок виведення на екран значення змінної.

Цей блок залежно від типу вибраної змінної перетворює значення цієї змінної на String і потім виводить її на екран. У цьому блоці в секції Loop коду кожного інстансу в місці вставки блоку створено 4 елементи коду.

Перші три – умовні та вставляються у код залежно від типу обраної змінної.

У цих елементах коду в тимчасову змінну типу String записується конвертоване значення вибраної змінної.








У четвертому елементі коду значення даної тимчасової змінної виводимо на екран. Цей елемент безумовний.




В результаті компіляції при вибраній змінній типу Boolean отримаємо такий код.

if (_gtv1)
 {
 _tempVariable_String = "Ні";
 }
else  {
 _tempVariable_String = "Так";   }
if ((0))
 {
 myOLED.print(_tempVariable_String, 0, 0);
  }




Код кожного примірника – секція Declare




При такому розташуванні елемента коду в тулбарі присутні кнопки "Вставити UUID" (4), "Вставити тег параметра" (1), "Вставити тег входу" (5), "Вставити тег виходу" (6) і чек бокс "Заборонити компілятору бачити # Include »(2).

Роботу кнопки «Вставити тег параметра»(1) та чек боксу «Заборонити компілятору бачити #Include»(2) ми розглянули вище.

При натисканні кнопки «Вставити UUID»(4) при такому розташуванні елемента коду відкривається розширене вікно вибору ідентифікатора.




У цьому вікні з'явився новий пункт – «Ідентифікатор примірника». При виборі цього пункту в місце знаходження курсору в редакторі коду вставляється тег . При компіляції блоку проекті замість нього вставляється ID конкретного екземпляра блоку.



Приклад

У секції Declare коду кожного інстансу оголошуємо змінну.




А в секції Loop кожного інстансу у місці вставки блоку записуємо в неї значення.




У проект вставляємо два екземпляри даного блоку




В результаті компіляції отримуємо код:

Секція Declare

int Var_176673836;
int Var_127258073;


Секція Loop місце вставки першого примірника.

Var_176673836 = 200;

Секція Loop місце вставки другого примірника.

Var_127258073 = 200;




При натисканні кнопок «Вставити тег входу»(5) , «Вставити тег виходу»(6) відкривається вікно вибору відповідного тега зі списку входів або виходів блоку.




Після вибору необхідного тега він вставляється в місце розташування курсору у редакторі коду.

Розглянемо роботу входу.

На відміну від старого (Basic) редактора блоків користувача в цьому редакторі для входів змінні не створюються. Це зроблено для збереження пам'яті мікроконтролера. Замість тега входу в код вставляється логічний вираз, отриманий з входу, укладений у дужки. Найчастіше це ім'я зміною виходу блоку підключеного до входу.

Наприклад, розглянемо такий код




При підключенні на вхід константи отримаємо наступний результат.




if ((50) ==20)
 {
 // Якийсь код
 }


Якщо подамо на вхід, вихід блоку зі змінною виходу, отримаємо наступне.




if (((_d18x2x1O)) ==20)
 {
 // Якийсь код
  }


Але на вході можлива і математика, яка задля економії пам'яті розраховується на лету.

Наприклад, за такої схеми отримаємо складніший варіант.




if ((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))) ==20)
 {
 // Якийсь код
 }


При цьому використанні входу в блок це не критично. Але можливий варіант, коли вхід використовують як параметр якоїсь функції в бібліотеці. Далеко не всі бібліотеки «люблять» коли їм як параметр підсовують вираз.

Наприклад, перепишемо код блоку.




Отримаємо результат

Out_238022926_164280164 = abstractCrazyFunction(((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L))));

Функція abstractCrazyFunction швидше за все, залаяється, коли отримає як параметра ось таке: ((((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L)))

Тому коли Ви не впевнені, що використання входу буде коректним для будь-яких даних, що приходять на вхід, рекомендую використовувати таку конструкцію.




Тоді результат компіляції задовольнить будь-яку функцію.

_tempVariable_int = (((((_d18x2x1O))+(100))*(85.00))-(((_d18x2x1O))*(45L)));
Out_238022926_164280164 = abstractCrazyFunction(_tempVariable_int);
Out_142227144_164280164 = abstractCrazyFunction1(_tempVariable_int);


Код кожного блоку – решта секцій.




Тут є кнопки, роботу яких ми розглянули раніше.







10

Автор публікації

Офлайн 14 години

Сергей Глушенко

766
Коментарі: 15Публікації: 389Реєстрація: 04-02-2018

53 коментарі до “Довідка”

  1. ошибка в описании блока “Блок обнаружения изменения числа”

    “Блок служит для обнаружения изменения числа подаваемого на вход “EN” . При изменении значении на выходе”Q” формируется импульс длительностью в один цикл программы. Для блока возможно задание зоны нечувствительности раздельно для каждого направления изменения числа. Эти параметры задаются в редакторе блока.”

    вместо первого “EN”  должно быть  “Value”

    0
  2. что то не так с массивами.
    скетч использовал данные из той же строки другого массива.  менял названия (ставил не совпадающие цифры), удалял/ ставил блоки – (не копировал а притаскивал новый), проверял / менял настройки. есть 3 разных массива. заполненных.  но берёт почему то  из одного … созданного первым.
    костыль  – использование не повторяющихся номеров строк (индексов) .  (помогает)
    ардуино uno. версия FLP- актуал.

    0
  3. Здравствуйте ! Спасибо огромное всем кто внес свой вклад в этот проект! Программа сделана интуитивно понятно и за месяц я дошел до коммуникаций но с протоколом Modbus остановился на ошибке 244 . Scada мастер, Uno слейв  соединены через Max485. Задача кнопкой на Scada включать диод на Uno и на оборот. Подскажите пожалуйста возможные решения этой проблемы и еще в каких случаях назначать пин pe-de ?

    С уважением Влад!

    0
  4. Добрый день!

    В справке по блоку SVCM (отправка переменной через коммуникации) показаны активными два устройства: Arduino Ethernet Wiznet 5100  и ESP8266 WiFi Module. В версии программы 4.3.4 можно выбрать только Arduino Ethernet Wiznet 5100.

    В обновлении 6.3.1 ESP8266 WiFi Module также недоступен для выбора.

    Подскажите пожалуйста, может нужно что-то доустановить или настроить?

    3
  5. Добрый день.

    Параметр “Time” – на этот вход подаётся время регулирования (в миллисекундах).” – так и не смог понять на что именно он влияет… Можно где то узнать что это за параметр?

    0
  6. Добрый день! Мне требуется отправка по UART данных для MIDI протокола. Нашёл на просторах интернета готовый скетч, там отправка происходит вот таким образом


    1. void noteOn(int chan, int note, int velocity) {
          Serial.write( (0x90 | chan) );
          Serial.write(note);
          Serial.write(velocity);
      }

    2. Всю голову сломал как сделать это в данной программе, ничего не получается. Подскажите плиз какие есть варианты.
    3. получается там из массива подставляются переменные и пакетом отсылаются на порт
    4. вообщем вот от сюда брал скетч http://forum.amperka.ru/threads/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B1%D0%B0%D1%80%D0%B0%D0%B1%D0%B0%D0%BD%D1%8B-%D0%BD%D0%B0-arduino-%D0%BA%D1%80%D0%B8%D0%B2%D1%8B%D0%BC%D0%B8-%D1%80%D1%83%D0%BA%D0%B0%D0%BC%D0%B8.15477/
    0
  7. Вопрос: плата Arduino Nano strong (т.е. плата и шилд сразу) при использовании блока матричная клавиатура подключение 2 пин основной 3,4,5,6,7 уже исполняющие
    так вот при такой раскладке после прошивки на 4 пине появляется сигнал и ничего с этим не сделать если-же подключать так-же с 8 по 13 то на 10 он наоборот пропадает и ничем его не получить.
    Flprog стоит 5.3.0 для 64 виндовс, это можно как-то решить т.к. проект готов и затык только в этом (не резать-же шлейф да сейчас такие шлейфы что :)))   )
    спасибо

    0
  8. Вопрос: плата Arduino Nano strong (т.е. плата и шилд сразу) при подключении 2 пин основной 3,4,5,6,7 уже исполняющие
    так вот при такой раскладке после прошивки на 4 пине появляется сигнал и ничего с этим не сделать если-же подключать так-же с 8 по 13 то на 10 он наоборот пропадает и ничем его не получить.
    Flprog стоит 5.3.0 для 64 виндовс, это можно как-то решить т.к. проект готов и затык только в этом (не резать-же шлейф да сейчас такие шлейфы что :)))   )
    спасибо

    0
  9. Приветствую! Подскажите пожалуйста, какова длина/(время) импульса на выходе блока “Установка события по часам реального времени” и минимальная длина/(время) импульса на входе для срабатывания блоков типа “Триггер”? Плата, Arduino UNO.  (Осциллографа нет, а монитором COM порта эти величины с нужной точностью замерять затруднительно.) Или существует формула для этих расчетов?

    0
  10. xatabmail250986

    Здравствуйте, у меня такой вопрос, я хочу запрограммировать Ардуинку на определенный алгоритм вращения шагового двигателя. У меня есть шаговик Nema23 и Драйвер DM556. Я столкнулся с проблемой: В вашей программе для управления шаговиком используется 4 вывода а у меня от драйвера на Ардуино только 2

     2019-11-10 12:23:12

    Аватар

    xatabmail250986

    (PUL, DIR) и земля. Подскажите как я могу реализовать мое подключение с вашей программой?

    0
  11. Здравствуйте уважаемый Сергей Глушенко.

    У меня такой вопрос.

    Есть ли способ понизить скорость мне случайных чисел в данном блоке, как например в блоке “Generator”, с функцией “Несимметричный мультивибратор”…? А то данный блок “RANDOM”, меняет случайные числа с бешеной скоростью, из-за чего на дисплее не успеваешь разглядеть эти числа…

    0
  12. Здравствуйте, Сергей!

    Прежде всего хочу поблагодарить Вас за прекрасную программу. Мне, как в пошлом,инженеру, очень комфортно создавать свой проект в Вашей среде.

    Но у меня вопрос, на который не нашел ответа: Я создаю проект с участием нескольких контроллеров ESP8266 NodeMCU с OLED дисплеем. Очень не хватает такого модуля и модуля ESP32 WiFi LoRa с OLED дисплеем в предустановке.Мои контроллеры должны выполнять некоторые действия, и обмениваться между собой данными и информацией по WiFi в реальном времени. Причем, радиус действия  WIFI сети каждого из модулей не должен влиять на передачу данных между конечными контроллерами. Поэтому контроллеры самонастраиваются, и записывают данные для входа всех контроллеров WIFI сети в память для постоянного коннекта по цепи (от начального до конечного).  Вопрос: Можно ли в Вашей среде создать подобный алгоритм взаимодействия между контроллерами сети?

    С уважением, Аркадий

    0
  13. Здравствуйте! Не могу понять в чём причина. В счётчике на уменьшение, при подключении переменных к входу R и выходу <L он не считает вниз, а если убрать с R то счёт идёт но, не совсем правильно(на ноль не сбрасывается). Подскажите, в чём может быть причина?

     

    0
  14. Здравствуйте, На сериал порт приходит сообщение 18 байт, мне нужно использовать несколько байт из него. Какой функцией выделить (извлечь) например 5-й байт? Или присвоить переменной значение 5-го байта из сообщения? Спасибо.

    0
  15. Здравствуйте.

    Скажите как сделать так что бы при достижении времени установленного в настройках блока на выходе установится высокий уровень не на 1 минуту, а до времени отключения будильник?

    В данной версии блока будильника высокий сигнал на выходе пропадает через 1 минуту.

    0
  16. Здравствуйте!

    В FLProg есть блок MCP23017.

    Но ка только в «FLProg» начинает компилировать в «IDE» программа ругается и пишет, что нужны библиотеки MCP23x17.h и MCP23017.h.  Без этой библиотеки блок не рабочий.

    Где их можно скачать?

    0
  17. Здравствуйте.  Не могу запустить версию 5.00

    —————————

    flp.exe – Системная ошибка

    —————————

    Запуск программы невозможен, так как на компьютере отсутствует api-ms-win-crt-runtime-l1-1-0.dll. Попробуйте переустановить программу.

    —————————

    ОК

    —————————

    Что делать.

    1
  18. Доброго времени суток! Скажите пожалуйста, какова максимальная частота счета для этого счетчика? При превышении какой частоты счета, следует выбирать “Скоростной счетчик”? Заранее спасибо.

    0

Залишити коментар

Войти с помощью: