Ограничения расписания для генерации кода

Если вы создаете расписания, изменяете их или используете функции расписания в коде MATLAB®, который вы предназначаете для генерации кода, то генерации кода описали ограничения в следующих разделах. Ограничения, которые применяются к классам также, применяются к расписаниям. Для получения дополнительной информации об ограничениях класса см. Определение Классов MATLAB для Генерации кода (MATLAB Coder).

Создание ограничений расписаний

Если ваш код MATLAB создает расписания, то у генерации кода есть эти ограничения.

Входные параметры для создания расписания

Ограничения

Любые входные параметры

  • Именем первой размерности расписания является 'Time' если вы не задаете его при помощи 'DimensionNames' аргумент значения имени.

    Имя первой размерности является также именем вектора времен строки, к которым можно обратиться при помощи записи через точку.

  • Создать обычное расписание когда 'SampleRate'Время начала, или 'TimeStep' аргументы значения имени передаются в функцией точки входа, сначала используют coder.Constant функция, чтобы сделать значения постоянными. Если вы не делаете их постоянными, то времена строки считаются неправильными.

  • Если вы создаете обычное расписание, и вы пытаетесь установить неправильные времена строки, то ошибка производится.

  • Если вы создаете неправильное расписание, то это остается неправильным, даже если вы устанавливаете его частоту дискретизации или временной шаг.

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

Расписание создается из входных массивов

  • Необходимо задать имена переменных при помощи 'VariableNames' аргумент значения имени при создании расписаний из входных массивов при помощи timetable или array2timetable функции.

Расписание создается с предварительно выделенными переменными

  • Вы не должны задавать 'VariableNames' аргумент, когда вы предварительно выделяете расписание при помощи timetable функционируйте и 'Size' аргумент значения имени.

  • Можно задать только следующие типы данных при помощи 'VariableTypes' аргумент значения имени:

    • 'double'

    • 'single'

    • 'doublenan' или 'doubleNaN'

    • 'singlenan' или 'singleNaN'

    • 'int8' int16 int32, или 'int64'

    • 'uint8' uint16 uint32, или 'uint64'

    • 'logical'

    • 'datetime'

    • 'duration'

    • 'cellstr'

    • 'char'

Изменение ограничений расписаний

Если ваш код MATLAB изменяет данные в расписании, его времена строки или его свойства, то у генерации кода есть эти ограничения.

Операция расписания или свойство

Ограничения

VariableNamesDimensionNames , или UserData свойства

  • После того, как вы создадите расписание, вы не можете изменить VariableNamesDimensionNames , или UserData свойства.

    Когда вы создаете расписание, можно задать 'VariableNames'DimensionNames , и 'RowTimes' входные параметры, чтобы установить свойства, имеющие те имена.

Индексы расписания как входные параметры к сгенерированному коду

  • Чтобы передать индексы расписания, которые задают переменные в сгенерированный код как входные параметры, сначала используйте coder.Constant функция, чтобы превратить индексы во второе измерение постоянного расписания. Если индексы во второе измерение не являются постоянными, то индексация в переменные производит ошибку.

  • Если расписание имеет времена строки, которые являются duration значения, и вы индексируете в него при помощи любого duration значения или объект, произведенный timerange или withtol функции, затем выход является непостоянным с переменным количеством строк.

  • Если обычное расписание имеет времена строки, которые являются duration значения, и вы индексируете в него при помощи любого duration значения или объект, произведенный timerange или withtol функции, затем выход считается неправильным.

Пользовательские метаданные

  • Вы не можете добавить пользовательские метаданные в расписание. addprop и rmprop функции не поддерживаются.

Присвоения, которые изменяют размер расписания

  • Вы не можете изменить размер расписания присвоениями. Например, этот вызов, чтобы добавить новую строку производит ошибку.

    function TT = foo() %#codegen
        TT = timetable((1:3)',(1:3)','RowTimes',seconds([0,5,10]),...
                       'VariableNames',{'Var1','Var2'});
        TT{4,:} = [5,5];
    end
    

    Удаление строки или переменной присвоением также производит ошибку.

  • Вы не можете добавить новую строку при помощи нового времени строки в присвоении. Например, этот вызов, чтобы добавить новую строку при помощи нового времени строки вместо числового индекса не производит ошибку, но также и не добавляет новую строку.

    function TT = foo() %#codegen
        TT = timetable((1:3)',(1:3)','RowTimes',seconds([0,5,10]),...
                       'VariableNames',{'Var1','Var2'});
        TT{seconds(15),:} = [5,5];
    end
    

Вертикальная конкатенация

  • Когда вы вертикально конкатенируете расписания, у них должны быть те же имена переменных в том же порядке. В MATLAB имена переменных должны быть тем же самым, но могут быть в различных порядках в расписаниях.

Горизонтальная конкатенация

  • Когда вы горизонтально конкатенируете расписания, у них должны быть те же времена строки в том же порядке. В MATLAB времена строки должны быть тем же самым, но могут быть в различных порядках в расписаниях.

Переменные расписания, которые являются массивами ячеек N-D

  • Если два расписания имеют переменные, которые являются массивами ячеек N-D, то вы не можете вертикально конкатенировать расписания.

  • Вы не можете использовать фигурные скобки, чтобы извлечь данные из нескольких переменных расписания, которые являются массивами ячеек N-D, потому что эта операция является горизонтальной конкатенацией.

Используя ограничения функций расписания

Если ваш код MATLAB использует перечисленные в таблице функции, то у генерации кода есть эти ограничения.

Функция

Ограничения

convertvars

  • Указатели на функцию не поддерживаются.

  • Вторые и третьи входные параметры (vars и dataType) должно быть постоянным.

  • Вы не можете задать dataType как 'char'.

intersect

setdiff

setxor

union

  • Эти функции поддерживают неотсортированные расписания во всех случаях. Вы не должны задавать 'stable' опция.

isregular

  • Использование coder.Constant сделать входной параметр timeComponent постоянный.

  • Входной параметр timeComponent не может быть календарный модуль. Если вы задаете его, то его значением должен быть 'time'.

issortedrows

  • Входной параметр vars должно быть постоянным.

  • Если какие-либо переменные расписания имеют несколько столбцов, то те переменные, должно быть, зафиксировали ширины.

join

  • В общем случае входные таблицы не могут иметь неключевых переменных с теми же именами. Однако можно задать дублированные имена переменных во входных таблицах при помощи:

    • 'KeepOneCopy'

    • 'LeftVariables' и 'RightVariables'

  • Значения этих аргументов значения имени должны быть постоянными:

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'KeepOneCopy'

  • Вложенные расписания не поддерживаются.

movevars

  • Входной параметр vars не может содержать дублирующиеся имена переменных.

retime

synchronize

  • Времена строки выходного расписания считаются неправильными, даже когда синхронизируется с временами строки, которые имеют шаг постоянного времени.

  • 'makima' метод интерполяции не поддерживается.

  • Если VariableContinuity свойства входных расписаний не являются постоянными, затем эта функция игнорирует их.

  • 'weekly', 'monthly', и 'quarterly' временные шаги не поддерживаются.

    • Если входные расписания имеют времена строки, которые являются datetime значения, затем 'daily' и 'yearly' временные шаги также не поддерживаются.

sortrows

  • Входной параметр vars должно быть постоянным.

  • Если tblA имеет переменную, которая является массивом ячеек из символьных векторов с несколькими столбцами, затем вы не можете отсортировать расписание с помощью значений в той переменной.

splitvars

  • Значение 'NewVariableNames' аргумент значения имени должен быть постоянным.

  • Переменные, которые разделены, не могут иметь переменного количества столбцов.

stack

  • Второй входной параметр, vars, должно быть постоянным.

  • Значения 'ConstantVariables''NewDataVariableName' , и 'IndexVariableName' аргументы значения имени должны быть постоянными.

timerange

  • Входной параметр unitOfTime не поддерживается.

unstack

  • 'NewDataVariableNames' аргумент значения имени должен быть задан. Его значение должно быть постоянным.

  • vars и ivars входные параметры (переменные данных и переменные индикатора) должны быть постоянными.

  • Если вы задаете сгруппированные переменные и постоянные переменные, то они должны быть постоянными.

  • Если вы задаете функцию агрегации, то это должно быть постоянно.

  • Если вход является расписанием с регулярными временами строки, и вы задаете сгруппированные переменные, которые не включают времена строки, то выходное расписание может иметь неправильные времена строки. Даже при том, что интервалы между выходными временами строки могут выглядеть одинаково, выходное расписание полагает, что вектор времен строки неправилен.

  • Если переменная входного расписания является массивом ячеек из символьных векторов, то unstack пустые ячейки заливок в соответствующей выходной переменной с символьными массивами 1 на 0 в сгенерированном коде. В MATLAB, unstack заполняет такие разрывы символьными массивами 0 на 0.

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

    • Если вход имеет переменную, которая является гомогенным массивом ячеек, или это может быть преобразовано в одно, то 'AggregationFunction' аргумент значения имени должен быть задан. Значение по умолчанию 'AggregationFunction' 'unique'. Но unique функция не поддерживает массивы ячеек.

varfun

  • Вход указателя на функцию, func, должно быть постоянным.

  • В то время как указатели на функцию могут быть входными параметрами к varfun самостоятельно, они не могут быть входными параметрами к вашим функциям точки входа. Задайте func в рамках кода, предназначенного для генерации кода. Для получения дополнительной информации смотрите Ограничения Указателя на функцию для Генерации кода (MATLAB Coder).

  • Значения для всех аргументов значения имени должны быть постоянными.

  • 'ErrorHandler' аргумент значения имени не поддерживается для генерации кода.

  • Входные параметры переменного размера не поддерживаются.

  • Если вы задаете 'GroupingVariables', затем выход всегда является неправильным расписанием.

  • Сгруппированные переменные не могут иметь дублирующихся значений в сгенерированном коде.

  • Вы не можете задать значение 'OutputFormat' как 'cell' если вы задаете 'GroupingVariables' аргументы значения имени и функция возвращают другой тип данных для каждой переменной, заданной 'InputVariables'.

  • Если вы задаете группы, и количество групп не известно во время компиляции, и тот номер оказывается нулем, то пустые двойные переменные в выходе могут иметь размеры 1 на 0 в сгенерированном коде. В MATLAB такие переменные имеют размеры 0 на 0.

Смотрите также

| |

Похожие темы