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