Simulink® позволяет вам сообщать об ошибке путем выдавания исключения с помощью MSLException
объект, который является подклассом MATLAB® MException
класс. Как с MException
MATLAB объект, можно использовать
try-catch
блокируйтесь с MSLException
возразите построению, чтобы получить информацию об ошибке. Первичное различие между MSLException
и MException
объекты состоят в том что MSLException
объект имеет дополнительное свойство указателей. Эти указатели позволяют вам идентифицировать объект, сопоставленный с ошибкой.
MSLException
класс имеет пять свойств: identifier
сообщение
стек
, cause
, и handles
. Первые четыре из этих свойств идентичны тем из MException
. Для получения дальнейшей информации о них, смотрите Свойства Класса MException (MATLAB). Пятое свойство, handles
, массив ячеек с элементами, которые удваивают массив. Эти элементы содержат указатели на объекты Simulink (блоки или блок-схемы) сопоставленный с ошибкой.
Методы для 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