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

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

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

Класс MSLException

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

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

Методы для the 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)

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

ans =
vdp/Mu

Похожие темы