При создании защищенной модели ее поведение можно настроить путем определения обратных вызовов. Обратные вызовы указывают код, который выполняется при просмотре, моделировании или создании кода для защищенной модели. Обратные вызовы защищенной модели с поддержкой генерации кода HDL, включенной для защищенной модели, невозможны. Дополнительные сведения об ограничениях генерации кода HDL см. в разделе Ограничения защищенной модели для генерации кода HDL (кодер HDL).
Пользователь защищенной модели не может просматривать или изменять обратный вызов. Если модель ссылается на защищенную модель с обратными вызовами, защитить модель невозможно.
Чтобы создать защищенную модель с обратными вызовами:
Определить Simulink.ProtectedModel.Callback для каждого обратного вызова.
Чтобы создать защищенную модель, вызовите Simulink.ModelReference.protect функция. Используйте 'Callbacks' позволяет указать массив ячеек обратных вызовов для включения в защищенную модель.
Чтобы создать и определить обратный вызов защищенной модели, создайте Simulink.ProtectedModel.Callback объект. Объекты обратного вызова задают:
Код для выполнения обратного вызова. Код может быть символьным вектором команд MATLAB ® или сценарием на пути MATLAB.
Событие, запускающее обратный вызов. Событие может быть 'PreAccess' или 'Build'.
Функциональность защищенной модели, к которой относится событие. Функциональность может быть 'CODEGEN', 'SIM', 'VIEW', или 'AUTO'. При выборе 'AUTO', и событие 'PreAccess', обратный вызов применяется к каждой функции. При выборе 'AUTO', и событие 'Build', обратный вызов применяется только к 'CODEGEN' функциональные возможности. Если функция не выбрана, поведение по умолчанию: 'AUTO'.
Возможность переопределения защищенного процесса построения модели. Этот параметр применяется только к 'CODEGEN' функциональные возможности.
Для каждого события и функциональности можно создать только один обратный вызов.
Код обратного вызова можно определить с помощью символьного вектора команд MATLAB или сценария на пути MATLAB. При написании кода обратного вызова следуйте следующим инструкциям:
Обратные вызовы должны использовать код MATLAB (.m или .p).
Код может включать защищенные функции модели или команду MATLAB, которая не требует загрузки модели.
Код обратного вызова не должен вызывать внешние утилиты, если только эти утилиты не доступны в среде, где используется защищенная модель.
Код обратного вызова не может ссылаться на исходную защищенную модель, если не используются функции защищенной модели.
Вы можете использовать Simulink.ProtectedModel.getCallbackInfo функция в коде обратного вызова для получения информации о защищенной модели. Функция возвращает Simulink.ProtectedModel.CallbackInfo объект, предоставляющий имя защищенной модели и имена подмоделей. Если обратный вызов указан для 'CODEGEN' функциональные возможности и 'Build' событие, объект предоставляет идентификатор цели и тип интерфейса кода модели ('Top model' или 'Model reference').
В этом примере создается защищенная модель с обратным вызовом для генерации кода.
На пути MATLAB создайте сценарий обратного вызова, pm_callback.m, содержащий:
s1 = 'Code interface is: '; cbinfobj = Simulink.ProtectedModel.getCallbackInfo(... 'sldemo_mdlref_counter','Build','CODEGEN'); disp([s1 cbinfobj.CodeInterface]);
Создайте обратный вызов с использованием сценария.
pmCallback = Simulink.ProtectedModel.Callback('Build',... 'CODEGEN', 'pm_callback.m');
Создайте защищенную модель и укажите обратный вызов генерации кода.
Simulink.ModelReference.protect('sldemo_mdlref_counter',... 'Mode', 'CodeGeneration','Callbacks',{pmCallback})
Создайте защищенную модель. Перед построением обратный вызов отображает интерфейс кода.
slbuild('sldemo_mdlref_basic')
Simulink.ModelReference.protect | Simulink.ProtectedModel.Callback | Simulink.ProtectedModel.getCallbackInfo