Я использую Simulink для моделирования установки по переработке отходов из ряда скрытых блоков, которые я создал, представляя шаги сортировки, буферы и т. Д. Каждый модуль (т. Е. Маскированный блок) имеет вероятность отказа, смоделированную с использованием дискретных событий. Если происходит событие сбоя, инициированная подсистема вызывает функцию интерпретируемого Matlab («снаружи» simulink). Предполагается, что эта функция должна установить параметр маскированного блока, представляющий неработающий модуль, а также восходящие модули «status
» на 0 (потому что, очевидно, все восходящее движение также должно остановиться или материал просто накапливается).Получить дескриптор блока, вызывающего функцию интерпретируемого Matlab
`set_param(gcb, 'status', num2str(status));
PortConnectivity = get_param(gcb,'PortConnectivity');
sources = PortConnectivity.SrcBlock;`
В принципе, это будет зациклировано до тех пор, пока не достигнет блока без собственного исходного блока. Все это работает очень хорошо, за исключением одной проблемы: команда gcb
дает мне путь блока к последнему блоку, который я выделил вручную, а не к блоку, который называется интерпретируемой функцией Matlab. Есть ли способ получить дескриптор вызывающего блока (который я бы использовал с его параметром Parents
для доступа к Маску status
)? (Аналогичный вопрос был задан here, без каких-либо результатов ...)
Надеюсь, вы получите мою проблему - я буду рад разработать, если что-то неясно; Я не утверждаю, что являюсь экспертом Simulink, поэтому извините, возможно, используя неправильную терминологию.
Отлично, спасибо, помощник! Работает отлично. – Ade