2017-02-19 20 views
1

Я использую 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, поэтому извините, возможно, используя неправильную терминологию.

ответ

0

ОК, для всех, кто наткнулся на это: Для маски, содержащей вызывающую функцию интерпретатора Matlab, в редакторе маски я определяю параметр 'this_block' (отключить видимость), который я инициализирую в панели Initialization используя

parent = get_param(gcb,'Parent'); 
set_param(gcb, 'this_block','Parent') 

Поскольку этот замаскированный блок (отвечают за моделирование недостаточности и ее восходящую связи) сам используются в другой маскированной блоке также присутствует в библиотеке (ответственной для моделирования поведения модуля), я также должен был проверить " Разрешить библиотечным блокам изменять его содержимое »в панели« Редактор маски »панели« Инициализация »маски родителя. Затем параметр «this_block» передается как один из входных аргументов вызываемой функции (в моем случае status_communication (u, this_block)).

+0

Отлично, спасибо, помощник! Работает отлично. – Ade