2015-04-08 3 views
1

Я очень новичок в Modelica и в основном имею одну большую проблему: Если я использую сравнения, например, больше как порог, я не получаю моделирования время от времени. Дело в том, что этого не происходит всегда. Но если это так, я получаю следующее сообщение об ошибке: «Итерация точки фиксации не сходится во времени: xxx»Modelica Iteration Problems

Я уже исправил эту проблему один раз с использованием гистерезиса вместо «жесткого» сравнения. Должен ли я действительно делать это в каждом случае, мне это нужно? Или у кого-то есть другая идея или решение?

Заранее благодарен!

+1

Вам не нужно добавлять гистерезис для каждого сравнения, которое вы делаете. Проблема заключается в том, когда вы сравниваете, что вызывает изменение поведения ** и **, что изменение поведения возвращает вас к другому поведению. Подробнее о теме событий, дискретном поведении и гистерезисе вы найдете в [Modelica by Example] (http://book.xogeny.com/behavior/discrete/hysteresis/). –

+0

Хорошо, спасибо. Я думаю, что получаю хотя бы основную идею. Поэтому я сейчас применил следующее для своего гистерезиса, но по какой-то причине оно не меняет выходное значение (y; boolean). Должна быть какая-то довольно простая ошибка, которую я не чувствую здесь. 'начальное уравнение y = if u1> = u2, тогда true else false; уравнение b = если y, то u1 else u2; s = если y, то u2 else u1; trig = s + hyst-b; алгоритм , когда trig <= 0, затем y: = если pre (y), то false else true; end when; ' – Simon

+0

Прошу прощения, но по какой-то причине мне даже не удается отформатировать комментарий. – Simon

ответ

2

Вы можете инкапсулировать сравнение гистерезиса внутри функции и использовать ее везде.

+1

Вы уверены? Гистерезис требует дополнительного состояния. Я не понимаю, как вы можете получить это с помощью функции. Тем не менее, в MSL для гистерезиса имеется ** блок **. –

+1

Плохо, я говорил о функции realCompare, которая делает сравнение с epsilon. –