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