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

В этом примере показано, как задать размер выхода, тип данных и сложность системного объекта. Вы задаете выходные свойства, когда блок MATLAB System не может вывести их автоматически. Блок MATLAB System использует системный объект PropagateOutputSpecs который реализует методы для распространения типа, размера и сложности входных данных.
Вы можете получить доступ к исходному коду MATLAB, используемому блоком MATLAB System, нажав гиперссылку «Source code» из диалогового окна блока. Системный объект PropagateOutputSpecs реализует stepImpl метод, который добавляет значение входа в секундах к текущему времени и выводит полученные часы, минуты и секунды. The 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