Генерация кода с системным объектом VideoDevice

Используя функцию codegen

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

Примечание

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

Примечание

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

Примечание

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

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

Разделяемые библиотечные зависимости

Системный объект VideoDevice генерирует код с ограниченной мобильностью. Системный объект пользуется предварительно скомпилированными совместно использованными библиотеками, такими как DLLs, чтобы поддержать ввод-вывод для определенных типов устройств. Разделяемые местоположения библиотеки, которых требует сгенерированный исполняемый файл, следующие:

  • Определенный MathWorks совместно использовал библиотеки под [MATLABROOT] \bin \<ДУГА> \

  • Выбраны библиотеки адаптеров MathWorks под [MATLABROOT]\SupportPackages \<РЕЛИЗ> \toolbox\imaq\supportpackages\genericvideo\adaptor \<ДУГА> \характерный для устройства.

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

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

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

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

  • Присвойте Системные объекты персистентным переменным.

  • Глобальные переменные не поддержаны.

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

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

  • Установите аргументы на конструкторов Системного объекта как константы времени компиляции.

  • Используйте конструктора Object, чтобы установить свойства Системного объекта, потому что вы не можете использовать запись через точку для генерации кода. Можно использовать функцию 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

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

Единственные функции Системного объекта, поддерживаемые в генерации кода:

  • get

  • getNumInputs

  • getNumOutputs

  • reset

  • step

Не устанавливайте Системные объекты становиться выходными параметрами от блока MATLAB function.

Не передавайте Системный объект как входной параметр в качестве примера к функции, скомпилированной с codegen.

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

Для просмотра документации необходимо авторизоваться на сайте