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