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

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

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

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

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

Ограничения

Любые входы

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

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

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

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

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

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

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

  • Вы должны задать имена переменных при помощи 'VariableNames' аргумент name-value при создании расписаний из входных массивов при помощи 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'

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

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

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

Ограничения

VariableNames, DimensionNames, или UserData свойства

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

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

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

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

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

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

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

  • Вы не можете добавить пользовательские метаданные к расписанию. 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 значения времени строк должны быть одинаковыми, но могут быть в разных порядках в расписаниях.

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

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

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

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

Если ваш код 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

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

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

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

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

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

sortrows

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

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

splitvars

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

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

stack

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

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

timerange

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

unstack

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

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

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

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

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

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

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

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

varfun

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

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

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

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

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

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

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

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

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

См. также

| |

Похожие темы