Как я могу перехватить все предупреждения во время симуляции Simulink? - PullRequest
3 голосов
/ 17 октября 2011

Я хочу перехватить все предупреждения, выданные во время симуляции модели Matlab / Simulink. Результатом моделирования должен быть массив предупреждений, так как может быть более одного предупреждения.

Идеальный код будет выглядеть примерно так (за исключением того, что catch не работает с предупреждениями):

try
   sim('myModel');
catch warnings
   for i=1:length(warnings)
      <process each warning>
   end
end

То, что я уже пробовал безуспешно:

  • Превращение предупреждений в исключения не поможет, поскольку я получу только первое предупреждение, а не все.
  • Переопределение встроенной функции предупреждения моим собственным "@char \ warnings.m" приведет к перехвату предупреждений только в моем собственном сценарии, но не в sim-функции.
  • lastwarn выдаст мне только последнее предупреждение, но не все.

P.S .: Я использую Matlab 2010b в Windows.

Ответы [ 4 ]

5 голосов
/ 17 октября 2011

В качестве обходного пути можно записать выходные данные sim с помощью diary и проанализировать файл после моделирования (формат предупреждений довольно обычный).

1 голос
/ 17 октября 2011

Я не думаю, что это возможно, к сожалению.Это также поднимает вопрос "что вы хотите сделать с предупреждениями?"и "почему?".

Я бы поднял его с технической поддержкой Mathworks.try ... catch ... строго для ошибок, поэтому я бы предложил синтаксис, который выглядит примерно так:

recordWarnings on
sim('myModel');
warnings = recordWarnings('history');
0 голосов
/ 21 августа 2013

Это решение не даст вам всех предупреждений (для этого я бы рекомендовал использовать diary), но вот как вы можете увидеть, какие части вашего кода генерируют предупреждение.

myWarnLog = {}
part1
myWarnLog(end+1) = lastwarning
part2
myWarnLog(end+1) = lastwarning
...

IЯ не уверен, как выглядят предупреждения, но при необходимости вы также можете сохранить информацию о том, когда и где произошло предупреждение.Это должно позволить вам более эффективно отлаживать, не анализируя diary.

0 голосов
/ 21 августа 2013

Как уже говорилось, напрямую перехватывать предупреждения невозможно, только вывод команды симуляции.Но при использовании diary для этого вывод записывается в файл, который затем должен быть открыт, проанализирован и снова удален.

В качестве альтернативы вы можете использовать команду evalc, которая непосредственно возвращает выводкак массив символов.Это должно быть проще для использования в скриптах.

...