2013-10-04 4 views
3

У меня есть вопрос.Как получить размеры сигнала в модели Simulink

После имитации модели simulink мне нужно получить размеры сигнала каждой строки с помощью команды MATLAB.

я линия ручки следуя

line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line') 

то как я могу получить размеры сигнала от линии ручки

** Когда проверить 'размеры сигнала' в меню Формат -> Port/Signal Отображает После имитировать модельный номер размеров сигнала, будет отображаться на нескалярной линии. Мне нужно получить его с помощью команды MATLAB.

Извините за мой английский умение

Спасибо

ответ

2

Если у вас есть набор ручек линии из команды find_system, вы можете использовать следующую команду, чтобы получить блок, подключенный к сигналу.

hblkSrc = get_param(h(k),'SrcBlockHandle'); 

Вы можете использовать get_param(hblkSrc,'CompiledPortDimensions') как предложено am304 получить размеры.

2

Вы можете решить следующим образом.

  1. Включить регистрацию сигналов для желаемых сигналов (Свойства). Для примера укажите имя для пользовательского и signalone.
  2. Если вы действительно не хотите регистрировать сигнал, установите Limit data points to last в 1, чтобы избежать хранения неиспользуемых данных.
  3. Перейти к Simulink предпочтения и включить ведение журнала сигнала, имя выхода по умолчанию logsout
  4. после моделирования вы получите набор данных logsout в вашем рабочем пространстве

Теперь оценить этот набор данных следующим образом:

% returns data, if data limit is set to 1 it's a coloumn 
% vector with just the last value 
data = logsout.get('signalone').Values.Data 

Теперь вы можете просто использовать размер этого вектора, и вы знаете размер сигнала

[~,dim]=size(data) 

или в одной строке:

[~,dim]=size(logsout.get('signalone').Values.Data) 

Если у вас есть аа много сигналов, и вы хотите, чтобы оценить их сразу, дайте сигналам удобных выходные-имена и использовать цикл для перебора вектора строк со всеми ваши имена сигналов.

Как вы говорите, вы хотите, чтобы размеры сигналов «все» (вы уверены?), Я считаю, что удобнее просто проверять «Включить ведение журнала» в каждом свойстве сигнала и делать все дополнительные определения в настройках Simulink, где у вас есть список для управления всеми сигналами.

3

В качестве альтернативы, вы можете найти размеры и сигнала ширину каждого блока они происходят из, используя:

get_param(<block_path>,'CompiledPortDimensions') 
get_param(<block_path>,'CompiledPortWidths') 

Замену <block_path> с соответствующим блочным путем для каждого блока, представляющего интереса. Модель должна быть скомпилирована, прежде чем вы сможете запускать эти команды, но поскольку вы указываете на это после запуска модели, это не должно быть проблемой.

Смежные вопросы