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