exponenta event banner

Обработка ошибок в Simulink с помощью MSLException

Сообщение об ошибке в приложении Simulink

Simulink ® позволяет сообщить об ошибке, создав исключение с помощью MSLException объект, являющийся подклассом MATLAB ® MException класс. Как и в случае MATLAB MException объект, можно использовать try-catch блок с MSLException объектная конструкция для сбора информации об ошибке. Основное различие между MSLException и MException объекты, что MSLException объект имеет дополнительное свойство дескрипторов. Эти дескрипторы позволяют идентифицировать объект, связанный с ошибкой.

Класс MSLException

MSLException класс имеет пять свойств: identifier, message, stack, cause, и handles. Первые четыре из этих свойств идентичны свойствам MException. Подробную информацию о них см. в разделе MException. Пятое свойство, handles, является массивом ячеек с элементами, которые являются двойным массивом. Эти элементы содержат дескрипторы объектов Simulink (блоков или блок-схем), связанных с ошибкой.

Методы класса MSLException

Методы для 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

Связанные темы