Справка

 Содержание

 Редактор пользовательских блоков
   Редактор 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);


Код каждого блока – остальные секции.




Здесь присутствуют кнопки, работу которых мы рассмотрели ранее.







9

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

не в сети 1 неделя

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

782
Комментарии: 15Публикации: 391Регистрация: 04-02-2018

54 комментария к “Справка”

  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

Оставьте комментарий

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