Обработка ошибок в Simulink Используя MSLException

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

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

Класс MSLException

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

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

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

Получение информации об ошибке

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

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)

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

ans =
vdp/Mu

Похожие темы