Я пытаюсь моделировать кулоновское трение в Modelica. основная концепция состоит в том, чтобы проверить, не является ли относительная скорость скорости между поверхностями меньше, чем постоянная, а внешняя сила, которая пыталась скользить по поверхностям снова друг с другом, меньше максимальной силы статического трения (normalForce * staticFrictionCoefficient), тогда сила трения равна отрицательной внешней силы сдвига. в противном случае сила трения равна силе кинетического трения (normalForce * kineticFrictionCoefficient) в противоположном направлении скольжения. я реализовал эту концепцию в Modelica, как показано ниже:Моделирование OpenModelica Кулоновское трение: Ошибка перевода, модуль пост-оптимизации findZeroCrossings (имитация) не удалось
function coulombFriction
input Real relVel;
input Real shearForce;
input Real normalForce;
input Real statfricco;
input Real kinfricco;
output Real fricForce;
algorithm
if relVel==0 and abs(shearForce)<statfricco*normalForce then
fricForce:=shearForce;
else
fricForce:=kinfricco*normalForce*sign(relVel);
end if;
end coulombFriction;
, но когда я вызываю эту функцию из модели, как показано ниже:
model fricexample_1
extends coulombFriction;
//parameters
parameter Real kco=0.3;
parameter Real sco=0.4;
parameter Real nfo=1.0;
Real sfo;
Real ffo;
Real x;
Real v;
initial equation
x=0;
v=0;
equation
v=der(x);
der(v)=sfo-ffo;
sfo=time;
ffo=coulombFriction(relVel=v, shearForce=sfo, normalForce=nfo, statfricco=sco, kinfricco=kco);
end fricexample_1;
Я вижу ошибку:
Translation Error
post-optimization module findZeroCrossings (simulation) failed.
Если я удалите функцию abs из определенной функции, она решает проблему компиляции, но модель неверна! Я был бы признателен, если бы вы могли мне помочь:
- как я могу решить эту проблему?
- как смоделировать трение иначе?
Вы можете попробовать использовать noEvent (условие): если noEvent (relVel == 0) и noEvent (абс (shearForce)
Вау, спасибо большое, это фактически решило мою проблему! вам нравится писать это как ответ? В противном случае я это сделаю. – Foad
Какую версию OpenModelica вы используете? Я думаю, это могло быть исправлено в последней версии. –