Структура блока на C++
Рассмотрим структуру кода блока на С++ через функционал Редактора кода:
- Область автоматического заголовка находится напротив графического представления блока. Код, содержащийся в этой области генерируется на основе заданных параметров входов и выходов блока и недоступен для редактирования. Не передается компилятору и предназначен для удобства при написании кода блока.
- Область заголовочного файла (имя_блока.hpp), код из которой включается в заголовочный файл класса. Используется для объявления дополнительных переменных и функций.
- Область инициализации (вкладка имя_блока.init), код из которой включается в функцию InitInp, вызываемую однократно при инициализации блока, но после вызова конструктора класса блока. Используется для присвоения значений выходам или локальным переменным блока.
- Область работы алгоритма блока (вкладка имя_блока.work), код из которой включается в функцию Work, вызываемой при каждом вызове блока в ходе выполнения программы.
- Область реализации локальных полей блока (вкладка имя_блока.cpp), код из которой включается в файл реализации класса блока. Используется для реализации методов блока.
Важно
Код блока, написанный пользователем, сохраняется в файле проекта.
Для редактирования кода блоков в проектах, использующих хранение кодов блоков вне файла проекта, применяется Редактор файлов.
Особенности реализации блока на С++
Проверка кода блока на языке С++ находится в процессе разработки.
Доступ к системной информации можно получить из статических функций класса runtimeInfo:
- runtimeInfo::nsAbsTime() возвращает значение uint64_t равное количеству нс прошедших от 01.01.1970, можно использовать как абсолютное время в UTC, например, для меток времени. Может подстраиваться NTP клиентом, поэтому не стоит использовать это значение при измерениях интервалов. Обновляется в потоке Таймер, если он один, или в потоке Входы, один раз за цикл.
- runtimeInfo::nsMonotonic() возвращает значение uint64_t равномерно меняющегося счетчика нс. Не подстраивается NTP и при изменении системного времени, поэтому
можно использовать для измерения интервалов, больших таймерного цикла. Обновляется в потоке Таймер, если он один, или в потоке Входы, один раз за цикл.
- runtimeInfo::timerCycle() возвращает значение типа float равное циклу таймерного потока, в котором выполняется блок, в мс. Если блок выполняется в фоновом потоке, то значение не определено.
- runtimeInfo::cpuCoresNum() возвращает количество ядер процессора (тип uint16_t)