Димола Результаты checkModel()

checkmodel([Some Model]) открывает графический интерфейс "Сообщения Dymola", вкладку "Перевод" и отображает Errors, Warnings, а также Messages,

Кто-нибудь знает, как записать эту информацию в лог-файл или получить их в качестве возвращаемого значения checkModel(), Все, что я нашел в документации, было то, что checkModel() возвращает только логическое значение успеха. Эти данные временно где-то сохранены?

Обратите внимание, что я хочу только подать заявку checkModel() но на самом деле не переводить код.

2 ответа

Я наконец-то нашел решение по крайней мере для Dymola 2016 и новее, так что если кому-то интересно - вот оно (не очень удобное, но работает):

Ключ-команда getLastError() который возвращает не только последнюю ошибку (как можно подумать...), но и все ошибки, обнаруженные checkModel() а также общая статистика.

Вся информация собрана в одну строку, в которой последние строки выглядят так:

"[...]
Local classes checked, checking <[Some Path]>
ERROR: 2 errors were found
WARNING: 13 warnings were issued
= false
"

Следующие операции вернут количество фактических ошибок (для предупреждений оно более или менее одинаково):

b = checkmodel([Some Model])
s = getLastError()
ind1 = Modelica.Utilities.Strings.findLast(s,"ERROR:")
ind2 = Modelica.Utilities.Strings.findLast(s," errors were found")
nErrors = Modelica.Utilities.Strings.substring(s,ind1+6,ind2) //6 = len(ERROR:)
nErrors = Modelica.Utilities.Strings.replace(nErrors," ","")
nErrors
  = "2"

Замечания:

  1. я использовал findLast насколько я знаю, интересующие линии находятся в самом конце строки. Так что это значительно быстрее, чем при использовании find
  2. Это работает, только если строка "ОШИБКА:...." действительно существует. В противном случае substring вызов выдаст ошибку.
  3. Конечно, это можно сделать в несколько строк, но, возможно, эту версию легче читать.

ПРИМЕЧАНИЕ. Это работает только с Dymola 2016 и новее. Возвращаемая строка getLastError имеет другую структуру в Dymola 2015 и старше.

Следующее должно обработать это: clearlog(); // Начать заново
Advanced.TranslationInCommandLog= TRUE; checkModel(...); Сохранить системный журнал(...);

Это упоминается в Руководстве пользователя Dymola, том 1, раздел "Исследования параметров при запуске Dymola несколько раз в" пакетном режиме "" на стр. 630 или около того.

Другие вопросы по тегам