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