exponenta event banner

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

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

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

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

Исходные данные для создания расписания

Ограничения

Любые входные данные

  • Имя первого измерения расписания: 'Time' если вы не указали его с помощью 'DimensionNames' аргумент «имя-значение».

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

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

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

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

  • Имена переменных расписания не обязательно должны быть допустимыми идентификаторами 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'

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

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

График работы или имущество

Ограничения

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

  • После создания расписания нельзя изменить VariableNames, DimensionNames, или 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' аргумент name-value должен быть постоянным.

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

stack

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

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

timerange

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

unstack

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

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

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

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

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

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

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

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

varfun

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

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

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

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

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

  • При указании 'GroupingVariables', то выход всегда нерегулярное расписание.

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

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

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

См. также

| |

Связанные темы