Вызов функции вводит noEvent
в вашем уравнении для isInReg
.
Это то, что Dymola 2019 FD01 сообщает, если используется логическое значение:
Non-real equation in continuous time are not legal:
isInReg = noEvent(a > b);
Следовательно, вашуравнение сводится к
isInReg = noEvent(a > b)
, что недопустимо, так как логические значения могут изменяться только при событиях.Вы должны избавиться от вызова функции и, следовательно, noEvent.
Возможно, есть лучшее решение, но вы можете попытаться определить проверку в блоке вместо функции.По крайней мере, для вашего минимального примера он отлично работает.
Тогда ваш код может выглядеть так:
model boolCheck_OK1
Real a = sin(time);
Real b = cos(time);
Real c;
protected
InRegionCheck check(a=a, b=b);
Boolean isInReg=check.c;
equation
c = if isInReg then 1.3*a^b else 0.7*b^a;
end boolCheck_OK1;
block InRegionCheck
input Real a;
input Real b;
output Boolean c;
equation
c = a>b;
end InRegionCheck;