codegen
ФункцияVideoDevice System 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.
После запуска сгенерированного файла MEX, если вы запускаете какой-нибудь код MATLAB, который включает объект VideoDevice System с адаптером камеры, который также используется в сгенерированном файле MEX, необходимо выполнить clear mex
во-первых.
Примечание
The codegen
Команда может использоваться для генерации исполняемых файлов на платформах, отличных от Windows. Однако генерация MEX-функции не поддерживается в Linux® и платформы macOS.
Для получения дополнительной информации см. документацию по MATLAB codegen
функция.
Объект VideoDevice System генерирует код с ограниченной переносимостью. Системный объект использует предварительно скомпилированные общие библиотеки, такие как DLL, для поддержки ввода-вывода для определенных типов устройств. Общие местоположения библиотеки, которые требуются сгенерированному исполняемому файлу, следующие:
Специальные общие библиотеки MathWorks в разделе [MATLABROOT ]\bin\< ARCH >\
Библиотеки адаптеров MathWorks в разделе [MATLABROOT ]\SupportPackages\< RELEASE >\toolbox\imaq\supportpackages\genericvideo\adaptor\< ARCH >\специально для выбранного устройства.
Для примера ваш путь может выглядеть так в системе Windows и с помощью релиза R2018a:
C :\ProgramData\MATLAB\SupportPackages\R2018a\toolbox\imaq\supportpackages\genericvideo\adaptor\win64
Перед запуском сгенерированного исполняемого файла за пределами MATLAB необходимо будет добавить перечисленные папки в системный путь.
Присвойте системные объекты постоянным переменным.
Глобальные переменные не поддерживаются.
Инициализируйте системные объекты один раз путем встраивания указателей на объекты в if
оператор с вызовом isempty( )
.
Вызовите конструктор только один раз для каждого системного объекта.
Установите аргументы в конструкторы системных объектов в виде констант во время компиляции.
Используйте конструктор объектов, чтобы задать свойства системного объекта, потому что вы не можете использовать запись через точку для генерации кода. Можно использовать 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
Убедитесь, что значение, присвоенное нетронутой или общественной собственности, является константой и что этому свойству существует самое большее одно назначение (включая назначение в конструкторе). Не устанавливайте никаких свойств во время генерации кода.
В генерации кода поддерживаются только следующие функции системного объекта:
get
getNumInputs
getNumOutputs
reset
step
Не устанавливайте Системные объекты, чтобы стать выходами от блока MATLAB Function.
Не передайте Системный объект в качестве примера входного параметра функции, компилируемой с codegen
.
Не передайте Системный объект функциям, объявленным как внешние (то есть функции, вызываемые в интерпретированном режиме), используя coder.extrinsic
функция. Не возвращайте Системные объекты из каких-либо внешних функций.