Hi,

Я использую MATLAB/SimulinkR2019b и его новую функцию: Справочник по подсистемам.

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

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

Поскольку MathWorks не предоставляет возможности для такого поведения, я написал некоторый код, чтобы сделать это. В этом коде я использую функцию «расширить подсистему», чтобы разорвать ссылки на упомянутые подсистемы.

Теперь я должен изменить свою версию MATLAB/Simulink на R2020a, и внезапно функция расширения подсистемы больше не работает для подсистем, на которые ссылаются. Это изменение не задокументировано ни в примечаниях к выпуску, ни где-либо еще.

Есть ли у кого-нибудь идеи, как я могу изменить мои ссылочные подсистемы обратно на «нормальные» подсистемы, не копируя весь контент из одной подсистемы в другую?

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Я могу подтвердить, что функция расширения упомянутых подсистем была удалена в R2020a. Итак, похоже, что лучший способ — скопировать указанную подсистему во все места. Это можно сделать с помощью команды simulink.blockdiagram.copycontentstosubsystem. Я полагаю, что replace_block будет полезен вместе с ним, но я не пробовал.

Я написал сценарий, чтобы продемонстрировать, как вы можете это сделать. Вместо этого я использовал add_line и delete_line для повторного подключения подсистем.

И вот скрипт, который это делает:

refSubsystem = 'subsys20b';
modelName = 'modelRefSubsys20b';
open_system(modelName);
oldBlock = [ modelName '/Subsystem Reference'];
newBlock = [ modelName '/subsystem'];
% create a copy of the referenced subsystem
add_block('built-in/Subsystem', newBlock)
Simulink.BlockDiagram.copyContentsToSubsystem(refSubsystem, newBlock)
% Retrieve useful info from the old block
t1 = get_param(oldBlock, 'Portconnectivity');
t2 = get_param(oldBlock, 'PortHandles');
t3 = get_param(newBlock, 'PortHandles');

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ