Обработка ошибок в Simulink с использованием MSLException

Сообщения об ошибках в приложении Simulink

Simulink® позволяет вам сообщить об ошибке путем выдачи исключения с помощью MSLException объект, который является подклассом MATLAB® MException класс. Как и в случае с MException MATLAB объект, можно использовать try-catch блок со MSLException конструкцию объекта, чтобы получить информацию об ошибке. Основное различие между MSLException и MException объекты, что MSLException объект имеет дополнительное свойство указателей. Эти указатели позволяют вам идентифицировать объект, связанный с ошибкой.

Класс MSLException

The MSLException класс имеет пять свойств: identifier, message, stack, cause, и handles. Первые четыре из этих свойств идентичны свойствам MException. Подробную информацию о них см. в разделе MException. Пятое свойство, handles, - массив ячеек с элементами, которые являются двойными массивами. Эти элементы содержат указатели на объекты Simulink (блоки или блок-схемы), сопоставленные с ошибкой.

Методы класса MSLException

Методы для MSLException класс идентичен классам MException класс. Для получения дополнительной информации об этих методах смотрите MException.

Сбор информации об ошибке

Структура try-catch Simulink блок для захвата исключения:

try
		Perform one or more operations
catch E
		if isa(E, 'MSLException')
...
end

Если операция в try оператор вызывает ошибку, catch оператор перехватывает исключение (E). Следующий, if isa условные тесты оператора, чтобы определить, является ли исключение специфичным для Simulink, т.е. MSLException. Другими словами, MSLException является типом MException.

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

errHndls = [];
try
    sim('ModelName', ParamStruct);
catch e
    if isa(e,'MSLException')
			errHndls = e.handles{1}
    end
end

Результаты можно увидеть, исследуя e. Они будут аналогичны следующим выходам:

e = 

  MSLException

  Properties:
       handles: {[7.0010]}
    identifier: 'Simulink:Parameters:BlkParamUndefined'
       message: [1x87 char]
         cause: {0x1 cell}
         stack: [0x1 struct]

  Methods, Superclasses

Чтобы идентифицировать имя блока, который выдал ошибку, используйте getfullname команда. В данном примере введите следующую команду в командной строке MATLAB:

getfullname(errHndls)

Если бы блок с именем Mu выдал ошибку из модели с именем vdp, MATLAB ответил бы на getfullname команда с:

ans =
vdp/Mu

Похожие темы