exponenta event banner

Создание кода с помощью системного объекта VideyDevice

Использование codegen Функция

VideyDevice System object™ поддерживает генерацию кода в MATLAB ® через codegen функция. Для использования codegen необходимо иметь лицензию MATLAB Coder™. Системные объекты также поддерживают генерацию кода с использованием функционального блока MATLAB в Simulink ®. Можно также использовать системный объект с Compiler™ MATLAB.

Примечание

Программное обеспечение компилятора MATLAB поддерживает системные объекты для использования внутри функций MATLAB. Компилятор MATLAB не поддерживает системные объекты для использования в сценариях MATLAB.

Примечание

Если вы используете codegen для создания функции MEX на платформе Windows ® необходимо выполнитьimaqreset перед запуском созданного файла MEX. Однако MEX работает неправильно, если установлен пакет поддержки Kinect ® для Windows Sensor.

После запуска сгенерированного файла MEX, если вы запускаете код MATLAB, который включает объект VideyDevice System с адаптером камеры, который также используется в сгенерированном файле MEX, необходимо выполнить clear mex во-первых.

Примечание

codegen может использоваться для создания исполняемых файлов на платформах, отличных от Windows. Однако генерация функции MEX не поддерживается на платформах Linux ® и macOS.

Для получения дополнительной информации см. документацию по MATLAB. codegen функция.

Зависимости общей библиотеки

Объект VideyDevice System генерирует код с ограниченной переносимостью. Объект System использует предварительно скомпилированные общие библиотеки, такие как DLL, для поддержки операций ввода-вывода для определенных типов устройств. Для созданного исполняемого файла требуются следующие расположения общих библиотек:

  • Общие библиотеки MathWorks в [MATLABROOT ]\bin\< ARCH >\

  • Библиотеки адаптеров MathWorks в разделе [MATLABROOT ]\SupportPackages\< RELEASE >\toolbox\imaq\supportpackages\genericvideo\adaptor\< ARCH >\для выбранного устройства.

Например, ваш путь может выглядеть следующим образом в системе Windows и с использованием R2018a выпуска:

C :\ProgramdData\MATLAB\SupportPackages\R2018a\toolbox\imaq\supportpackages\genericvideo\adaptor\win64

Перед запуском созданного исполняемого файла вне MATLAB необходимо добавить вышеуказанные папки в системный путь.

Правила использования системных объектов в сгенерированном коде MATLAB

  • Назначение системных объектов постоянным переменным.

  • Глобальные переменные не поддерживаются.

  • Однократная инициализация объектов System путем встраивания дескрипторов объектов в if оператор с вызовом isempty( ).

  • Вызовите конструктор ровно один раз для каждого объекта System.

  • Задайте аргументы конструкторам объектов System в качестве констант времени компиляции.

  • Используйте конструктор объекта, чтобы задать свойства объекта System, поскольку нельзя использовать точечную нотацию для создания кода. Вы можете использовать get для отображения свойств.

  • Перед созданием кода протестируйте код в моделировании.

Ниже приведен пример некоторых из этих правил.

% Note: System Objects created for Codegen have to be persistent variables.
persistent vid;

% Construct the IMAQ VideoDevice System Object.
if isempty(vid)
    % Note: All required parameters must be passed to the System Object at
    % the point of construction.
    vid = imaq.VideoDevice('winvideo', 1, 'MJPG_320x240', ...
                           'ROI', [1 1 320 240], ...
                           'ReturnedColorSpace', 'rgb', ...
                           'DeviceProperties.Brightness', 130, ...
                           'DeviceProperties.Sharpness', 220);
end

Ограничения на использование системных объектов в сгенерированном коде MATLAB

Убедитесь, что значение, назначенное неперестраиваемому или общедоступному свойству, является константой и что этому свойству назначено не более одного значения (включая назначение в конструкторе). Не устанавливайте какие-либо свойства во время создания кода.

При создании кода поддерживаются только следующие функции объекта System:

  • get

  • getNumInputs

  • getNumOutputs

  • reset

  • step

Не устанавливайте системные объекты как выходные данные из блока MATLAB Function.

Не передавать объект System в качестве примера входного аргумента функции, скомпилированной с помощью codegen.

Не передавайте объект System функциям, объявленным как внешние (т.е. функции, вызываемые в интерпретируемом режиме) с помощью coder.extrinsic функция. Не возвращайте системные объекты из каких-либо внешних функций.