Чтобы выполнить оборудование в цикле (HIL) симуляция с меньшими тактами и увеличенной точностью, разверните модели объекта управления Simscape™ в FPGAs на борту модулей ввода-вывода Speedgoat.
Сгенерируйте модель реализации HDL при помощи HDL Workflow Advisor Simscape. Моделью реализации является Simulink® модель, которая заменяет компоненты Simscape на совместимые с HDL блоки Simulink.
Сгенерируйте HDL-код для модели реализации, и затем разверните сгенерированный код в типовой FPGAs, SoCs или FPGAs на борту модулей ввода-вывода FPGA Speedgoat при помощи HDL Workflow Advisor.
При помощи этой возможности можно смоделировать и развернуть комплексные физические системы в Simscape, который ранее занял много времени к модели при помощи блоков Simulink.
Для генерации HDL-кода можно спроектировать собственный алгоритм Simscape или выбрать из списка моделей в качестве примера, которые создаются в Simscape. Модели в качестве примера включают:
Повысьте конвертер
Мостовой выпрямитель
Понижающий конвертер
Полупериодный выпрямитель
Три выпрямителя фазы
Два идеала конвертера уровня
Два конвертера уровня IGBT
Модель инвертора солнечной энергии
Швейцарский выпрямитель
Венский выпрямитель
Все примеры снабжаются префиксом sschdlex
и снабженный постфиксом Example
. Например, чтобы открыть модель конвертера повышения, в MATLAB® командная строка, введите:
load_system('sschdlexBoostConverterExample') open_system('sschdlexBoostConverterExample/Simscape_system')
Следуйте этим инструкциям при разработке алгоритма Simscape для совместимости с HDL Workflow Advisor Simscape. Чтобы заменить подсистему, которая использует блоки Simscape с соответствующим алгоритмом пространства состояний, следуйте этим дополнительным инструкциям как описано в Руководствах по моделированию для Замены Подсистемы Simscape.
Создайте модель Simscape при помощи линейного, и переключил линейные блоки. Линейные блоки являются блоками, которые заданы линейным соотношением, таким как резисторы. Коммутируемые линейные блоки являются блоками, такими как диоды и переключатели. Эти блоки также заданы линейным соотношением такой как V = IR, где R может переключиться между двумя или больше значениями в зависимости от состояния диодов или переключателей.
Нелинейные блоки не поддерживаются. Чтобы проверить, что модель Simscape не содержит нелинейные блоки, используйте simscape.findNonlinearBlocks
(Simscape) функция. Обеспечьте путь к своей модели Simscape в качестве аргумента к этой функции.
simscape.findNonlinearBlocks('current_model')
В качестве альтернативы, чтобы проверить, что модель не содержит нелинейные блоки, осуществляет переключенную линейную задачу Проверки HDL Workflow Advisor Simscape.
Сконфигурируйте опции решателя для генерации HDL-кода при помощи блока Solver Configuration (Simscape).
В диалоговом окне Block Parameters этого блока:
Выберите Use локальный решатель.
Используйте Backward Euler
как тип Решателя.
Задайте дискретный шаг расчета, Ts.
Чтобы проверить, что настройки решателя заданы правильно, запустите задачу настройки решателя Проверки HDL Workflow Advisor Simscape.
После создания модели сконфигурируйте модель для генерации HDL-кода путем выполнения hdlsetup
функция. hdlsetup
конфигурирует настройки решателя, такие как использование решателя фиксированного шага, указывает, что симуляция запускается и времена остановки и так далее. Запускать команду для вашего current_model
:
hdlsetup('current_model')
HDL Coder™ не поддерживает генерацию кода от сетей Simscape, которые содержат:
События
Графики режима
Задержки
Параметры периода выполнения
Периодические источники
Блоки Simscape Multibody™
Simscape Electrical™ Специализированные блоки Энергосистем
Нелинейные и изменяющиеся во времени блоки Simscape. Изменяющиеся во времени блоки включают блоки, такие как Переменный Индуктор и Переменный конденсатор.
Нескалярные состояния или входные параметры к сети. Разделите нескалярные входные параметры в скалярные входные параметры и уменьшайте второй операнд оператора двоеточия одним для ошибки, вызванной нескалярными состояниями. Например:
% Suppose this code generates an error tmp1 = u(1:4); % Fix the error by reducing second operand by 1 tmp1 = u(1:3);