我想强制用户无法将输入连接到输入。我期望下面的代码给出编译时错误,但它没有给出任何错误。 我该如何解决这个问题?
另一个问题是包全局编译时常量C
。它是一种参数,应该由包的用户提供。 如何在Modelica中实施?
package Pkg
constant Integer C=3;
connector Connector
Real x[C];
end Connector;
connector InConn = input Connector;
connector OutConn = output Connector;
class Base
InConn[:] inlet;
OutConn[:] outlet;
end Base;
class A
extends Base;
redeclare InConn[1] inlet;
redeclare OutConn[1] outlet;
end A;
end Pkg;
model Test
import Pkg.*;
A p;
A q;
equation
connect(p.inlet[1], q.inlet[1]);
end Test;
答案 0 :(得分:2)
这里有几个问题。主要原因是A
中的重新声明不正确。它们应该是对extends
子句的修改。但是请注意,它们甚至没有必要,因为它们实际上并没有改变任何东西。指定尺寸应通过参数完成。
同样,常量确实需要是Connector
定义的参数。如果连接两个不同大小的连接器,Modelica编译器应该抛出一个错误(具体来说,它应该对连接集中任何参数的值生成一个断言)。
我没有在这台机器上安装Modelica编译器,但我建议你试一试,看看这对你有效:
package Pkg
connector Connector
parameter Integer C=3;
Real x[C];
end Connector;
connector InConn = input Connector;
connector OutConn = output Connector;
class Base
parameter Integer ni;
parameter Integer no;
InConn[ni] inlet;
OutConn[no] outlet;
end Base;
class A
extends Base(ni=1, no=1);
end A;
end Pkg;
model Test
import Pkg.*;
A p;
A q;
equation
connect(p.inlet[1], q.inlet[1]);
end Test;
希望这会使事情进入编译器将生成正确错误的状态。 Modelica的语义是这样的,两个输入的连接应该触发错误(实际上,这是输入和输出连接器的基本限制)。