2015-04-22 2 views
1

Следующий пакет Modelica - хотя и не является особенно полезным и интересным - не дает никаких предупреждений.Modelica: Смешивающие разъемы и прямые входы

package P 
    connector C 
    Real c; 
    end C; 
    model A 
    input C x; 
    output Real y; 
    equation 
    y = x.c; 
    end A; 
    model B 
    input C inp; 
    output C out; 
    A a; 
    equation 
    a.x = inp; 
    out.c = a.y; 
    end B; 
end P; 

Однако, когда A не использует разъемы, как в следующем случае, есть предупреждение: Следующий вход отсутствует связывания уравнение: a.x. Ясно, что существует уравнение привязки для a.x. Почему такое предупреждение?

package P 
    connector C 
    Real c; 
    end C; 
    model A 
    input Real x; 
    output Real y; 
    equation 
    y = x; 
    end A; 
    model B 
    input C inp; 
    output C out; 
    A a; 
    equation 
    a.x = inp.c; 
    out.c = a.y; 
    end B; 
end P; 

ответ

3

Проблема здесь в том, что есть не связывающим уравнение. Существует только обычное уравнение. Уравнение привязки представляет собой уравнение, которое применяется как модификация элемента, например.

model B 
    input C inp; 
    output C out; 
    A a(x=inp.c) "Binding equation"; 
equation 
    out.c = a.y; 
end B; 

Обратите внимание, что в общем случае, если две вещи являются разъемами, их нельзя приравнивать, они должны быть подключены. Это поможет вам избежать этой проблемы. Так в первой версии B:

model B 
    input C inp; 
    output C out; 
    A a; 
equation 
    connect(a.x, inp); 
    out.c = a.y; 
end B; 

Причина обязательного ограничения уравнения имеет дело с убедившись, что компоненты сбалансированы. Вы можете узнать больше об этом в спецификации или в Modelica by Example. Используя его в качестве уравнения привязки, он дает понять, что это уравнение может быть использовано для решения этой переменной (, т. Е. член, содержащий эту переменную, не будет исчезать или быть плохо обусловлен).

Смежные вопросы