В этом примере показано, как указать размер вывода, тип данных и сложность системного блока MATLAB.
Системные объекты позволяют реализовать алгоритмы с помощью MATLAB. Системные объекты - специализированный вид объектов MATLAB, разработанный специально для реализации и моделирования динамических систем с вводами, изменяющимися с течением времени.
После определения объекта System его можно включить в модель Simulink с помощью блока MATLAB System.
В этом примере имеется системный блок MATLAB, который добавляет входное количество секунд к текущему времени и выдает полученные часы, минуты и секунды в качестве выходных данных. Выходные значения каждого выходного порта отображаются в блоках отображения.

В этом примере показано, как указать размер вывода, тип данных и сложность объекта System. Свойства вывода задаются, когда блок MATLAB System не может выводить их автоматически. Системный блок MATLAB использует системный объект PropagateOutputSpecs реализует методы распространения входных данных типа, размера и сложности.
Доступ к исходному коду MATLAB, используемому системным блоком MATLAB, можно получить, щелкнув гиперссылку «Исходный код» в диалоговом окне блока. Системный объект PropagateOutputSpecs реализует stepImpl метод, который добавляет входное значение в секундах к текущему времени и выводит полученные часы, минуты и секунды. stepImpl метод использует datetime для вычисления его выходных данных. С тех пор datetime функция не поддерживается для генерации кода, системный блок MATLAB не может автоматически выводить выходные спецификации. Объект System реализует следующие методы для задания выходных свойств:
getOutputSizeImpl - Укажите размер вывода
getOutputDataTypeImpl - Укажите тип выходных данных
isOutputComplexImpl - Укажите сложность вывода
isOutputFixedSizeImpl - Укажите, может ли выход иметь переменный размер
classdef PropagateOutputSpecs < matlab.System
% PropagateOutputSpecs Propagation in Simulink
methods(Access = protected)
function [h, m, s] = stepImpl(~, secs)
% Add input hours, minutes and seconds to current time
d = datetime;
d = d + seconds(secs);
h = hour(d);
m = minute(d);
s = second(d);
end
function [o1, o2, o3] = getOutputSizeImpl(obj)
% Return size for output port to be same as input port
inSize = propagatedInputSize(obj, 1);
o1 = inSize;
o2 = inSize;
o3 = inSize;
end
function [o1, o2, o3] = getOutputDataTypeImpl(obj)
% Return data type for output port to be same as input port
inType = propagatedInputDataType(obj, 1);
o1 = inType;
o2 = inType;
o3 = inType;
end
function [o1, o2, o3] = isOutputComplexImpl(~)
% Return output port complexity to be real
o1 = false;
o2 = false;
o3 = false;
end
function [o1, o2, o3] = isOutputFixedSizeImpl(~)
% Return true for each output port with fixed size
o1 = true;
o2 = true;
o3 = true;
end
end
end
getOutputDataTypeImpl | getOutputSizeImpl | getOutputSizeImpl | isOutputComplexImpl | isOutputFixedSizeImpl