Составные пользовательские блоки могут содержать внутри блоки из библиотеки paSync. В этом случае синхронизация блоков работает автоматически. Количество вложенностей составных блоков должна быть не больше 7. Пользовательские блоки на С++ могут также быть синхронизируемыми. Для этого при создании блока необходимо:
  1. значения, которые должны синхронизироваться, сделать выходами блока
  2. описать дополнительные переменные в классе, в которых будут храниться значения синхронизированные с ведущего (одна дополнительная переменная на каждый выход из п.1)
  3. при инициализации задать соответсвие между дополнительными переменными (из п.2) и выходами (из п.1) при помощи функции paSync_SyncManager::regSyncData
  4. в основном цикле проверять активность синхронизации при помощи функции paSync_SyncManager::isSyncOn и подставлять синхронизированные значения
  5. в проекте или библиотеке обеспечить наличие ссылок на библиотеки paControls и paSync (это можно сделать создав любой блок из этих библиотек, либо вручную как описано ниже)

Пример создания библиотеки Test с синхронизируемым блоком TestInteg

  1. В библиотеке Test создаем ссылку на paControls. Для этого в разделе Ссылки делаем ПКМ- создать группу типов, называем paControls. В свойствах нового раздела добавляем свойство Уникальный идентификатор и копируем в него значение из такого же свойства библиотеки paControls (сам идентификатор в библиотеке не выделяется, но достаточно кликнуть по полю и нажать Сtrl+C).
  2. Аналогичным образом добавляем ссылку на paSync.
  3. Добавляем тип блока TestInteg
  4. В блоке TestInteg создаем файл TestInteg.hpp. Там создаем вспомогательную переменную.
    TestInteg.hpp
    float m_bal_out; //значение от мастера для балансировки выхода ведомого
  5. В блоке TestInteg создаем файл TestInteg.init. В нем вызываем paSync_SyncManager::regSyncData для связки выхода out ведущего с переменной внутри ведомого.
    TestInteg.init
    paSync_SyncManager::regSyncData( (CBaseBlock*)this, &out, &m_bal_out );
  6. Добавляем код в work. Обрабатываем условие: если синхронизация активна, то в промежуточные переменные подставляем нужные значения, т.е. 1 на бит балансировки и m_bal_out на балансировочное значение.
    TestInteg.work
        // локальные переменные для входов и выходов
        float loc_base = (*base);
        uint8_t loc_reset = (*reset);
        float loc_out = out;
    
        if ( paSync_SyncManager::isSyncOn(this) )
        {
            // синхронизация включена, это ведомый
            loc_reset = 1;
            loc_base = m_bal_out;
        }
    
        if ( ( loc_reset ) == 0 )
        {
            for ( int i=0; i<inputs_num; i++ )
            {
                loc_out += (*inputs[i]);
            }
        }
        else
            loc_out = loc_base;
    
        // обновление выхода
        out = loc_out;
    			

Ссылки