错误:编译C代码失败-Modelica

错误:编译C代码失败-Modelica,modelica,openmodelica,Modelica,Openmodelica,在Modelica中编译代码时,出现以下错误: 命令编译失败,出现以下错误:用户错误:错误:com.modelon.oct.modelica.api.InternalAPIException中的java异常,消息为:编译生成的C代码失败 我在下面添加代码 model SimModelcode Real heatcapacity[n_Kapazitaten]; Real thermalconductance[n_Kapazitaten+1]; Real l_link; //Real

在Modelica中编译代码时,出现以下错误:

命令编译失败,出现以下错误:用户错误:错误:com.modelon.oct.modelica.api.InternalAPIException中的java异常,消息为:编译生成的C代码失败

我在下面添加代码

model SimModelcode
  Real heatcapacity[n_Kapazitaten];
  Real thermalconductance[n_Kapazitaten+1];
  Real l_link;
  //Real l_oben;
  //Real l_Volume[n_Kapazitaten] ;
  Real V_alu ;
  Real cpm_alu ;
  Real m_alu;
  Real cpm_links[n_Kapazitaten];
  Real y[101,101] ;
  Real z; 
  Real mittellange;
  //Real cpm_rechts[n_Kapazitaten] ;
  //Real cpm_oben[n_Kapazitaten] ;
  //Real cpm_unten[n_Kapazitaten] ;
  Real h_aussen[n_Unterteilung];
  //Real l_aussen[n_Unterteilung] ;
  //Real Flache_oben[n_Unterteilung] ;
  Real Flache_link[n_Unterteilung] ;
  Real G_links[n_Kapazitaten+1] ;
  //Real G_oben[n_Kapazitaten+1] ;
  //Real G_rechts[n_Kapazitaten+1] ;
  //Real G_unten[n_Kapazitaten+1] ;
  Real h_Volume[n_Kapazitaten] ;
  Real V_link[n_Kapazitaten] ;
  //Real V_oben[n_Kapazitaten] ;
  Real m_link[n_Kapazitaten] ;
  //Real m_oben[n_Kapazitaten] ;
  Real G[n_Kapazitaten+1];
  parameter Integer  n_Kapazitaten=100 ; //Anzahl der Kapazitäten
  parameter Integer n_Unterteilung=2*(n_Kapazitaten+1) ;//Anzahl der Unterteilung
  parameter Real l_box=0.3;//die Länge der obigen Kante vom dem Außenrechteck
  parameter Real  l_Alu=0.05;//die Länge der obigen Kante vom Alublock
  parameter Real h_box=0.2;//die Höhe der linken Kante von dem Außenrechteck
  parameter Real h_Alu=0.02;//die Höhe der linken Kante von Alublock
  parameter Real dicke=0.01;
  parameter Integer lambda_Kunststoff=10;
  parameter Integer cp_Alu=200;
  parameter Integer cp_Kunststoff=10;
  parameter Integer rho_Kunststoff=1185;
  parameter Integer rho_Alu=2719;
  Real cpm[n_Kapazitaten];
  Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow PrescribedHeatFlow(Q_flow = 10) annotation(
      Placement(visible = true, transformation(origin = {-14, -24}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature1(T = 300) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature2(T = 300) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature3(T = 300) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Sources.FixedTemperature PrescribedTemperature4(T = 300) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Components.HeatCapacitor Alu(C = 0.5438) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Components.HeatCapacitor Capacitors[n_Kapazitaten](C =heatcapacity) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
  Modelica.Thermal.HeatTransfer.Components.ThermalConductor Conductors[n_Kapazitaten+1](G=thermalconductance) annotation(
      Placement(visible = true, transformation(origin = {64, 42}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
equation
  l_link=((l_box-l_Alu)/2) /(n_Kapazitaten+1);// Abstand zwischen zwei Kapazitäten in linkem Block und rechtem Block
  //l_oben=((h_box-h_Alu)/2)/(n_Kapazitaten+1);//Abstand zwischen zwei Kapazitäten in obigem Block und unterem Block
  V_alu=l_Alu*h_Alu*dicke;
  m_alu=V_alu*rho_Alu;
  cpm_alu=m_alu*cp_Alu;
  for i in 1:n_Unterteilung loop
    h_aussen[i]=h_Alu+(i/n_Unterteilung)*(h_box-h_Alu);//Berechnung der Höhe in den linken Trapezflächen
    Flache_link[i]=h_aussen[i]*dicke;//Berechnung der Flache in den linken Trapezflächen
    //l_aussen[i]=l_Alu+(i/n_Unterteilung)*(l_box-l_Alu);//Berechnung der Länge in den obigen Trapezflächen
    //Flache_oben[i]=l_aussen[i]*dicke;//Berechnung der Höhe in den obigen Trapezflächen
    
  end for; 
  G_links[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_link[1:2:n_Unterteilung-1]/l_link);
  //G_oben[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_oben[1:2:n_Unterteilung-1]/l_oben);
  //G_rechts[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_link[1:2:n_Unterteilung-1]/l_link);
  //G_unten[1:n_Kapazitaten+1]= lambda_Kunststoff*(Flache_oben[1:2:n_Unterteilung-1]/l_oben);
  //G =cat(1,G_links,G_oben,G_rechts,G_unten);
  G=G_links;
  for i in 1:n_Kapazitaten loop
    h_Volume[i]=h_Alu+(i/n_Kapazitaten)*(h_box-h_Alu);
    //l_Volume[i]=l_Alu+(i/n_Kapazitaten)*(l_box-l_Alu);
    V_link[i]=(dicke*(h_Volume[i])*((i/n_Kapazitaten)*(l_box-l_Alu)/2)); //Volumen in linkem und rechtem Block pro Kapazitat 
    //V_oben[i]=(dicke*(l_Volume[i])*((i/n_Kapazitaten)*(h_box-h_Alu)/2));//Volumen in obigem und unterem Block pro Kapazitat 
    m_link[i]=rho_Kunststoff*V_link[i]; 
    //m_oben[i]=rho_Kunststoff*V_oben[i];
  end for;
  cpm_links[1:n_Kapazitaten]=cp_Kunststoff*m_link[1:n_Kapazitaten];
  //cpm_oben[1:n_Kapazitaten]=cp_Kunststoff*m_oben[1:n_Kapazitaten];
  //cpm_rechts[1:n_Kapazitaten]=cp_Kunststoff*m_link[1:n_Kapazitaten];
  //cpm_unten[1:n_Kapazitaten]=cp_Kunststoff*m_oben[1:n_Kapazitaten];
  cpm = cpm_links;
  for j in 1:101 loop
    for i in 1:46 loop 
      y[i,j]=sqrt(0.09-(i-1)*(((0.09+(j-1)*0.02/100)/45)+((j-1)*0.02/100)))^2+(0.125^2);
    end for;
    for i in 47:101 loop
      y[i,j]=sqrt((i-46)*((0.110-((j-1)*0.02/100))/55)-((j-1)*0.02/100))^2+(0.125^2);
    end for;
  end for;
  z=sum(y);
  mittellange=z/10000;
  
  ///for i=1:4*n_Kapazitaten
    //Capacitors_links=Capacitors[n_Kapazitaten];
    //Capacitors_oben=Capacitors[n_Kapazitaten:2*n_Kapazitaten];
    //Capacitors_rechts=Capacitors[2*n_Kapazitaten:3*n_Kapazitaten];
    //Capacitors_unten=Capacitors[3*n_Kapazitaten:4*n_Kapazitaten]
  //end for;
  
  for i in 1:n_Kapazitaten+1 loop 
    thermalconductance[i]=G[i];
  end for;
  for i in 1:n_Kapazitaten loop 
    heatcapacity[i]=cpm[i];
  end for;  


  connect(PrescribedHeatFlow.port, Alu.port);
  connect(Conductors[1].port_a,Alu.port );
  //connect(Conductors[n_Kapazitaten+2].port_a,Alu.port );
  //connect(Conductors[2*(n_Kapazitaten+1)+1].port_a,Alu.port );
  //connect(Conductors[3*(n_Kapazitaten+1)+1].port_a,Alu.port );
   
  for i in 1:n_Kapazitaten loop
    connect(Conductors[i].port_b,Capacitors[i].port);
    connect(Capacitors[i].port,Conductors[i+1].port_a);
  end for;
  connect(Conductors[n_Kapazitaten+1].port_b,PrescribedTemperature1.port);
  //for i in n_Kapazitaten+1:2*n_Kapazitaten loop
    //connect(Conductors[i+1].port_b,Capacitors[i].port);
    //connect(Capacitors[i].port,Conductors[i+2].port_a);
  //end for;
  //connect(Conductors[2*n_Kapazitaten+2].port_b,PrescribedTemperature2.port);
  //for i in 2*n_Kapazitaten+1:3*n_Kapazitaten loop
    //connect(Conductors[i+2].port_b,Capacitors[i].port);
    //connect(Capacitors[i].port,Conductors[i+3].port_a);
  //end for;
  //connect(Conductors[3*n_Kapazitaten+3].port_b,PrescribedTemperature3.port);
  //for i in 3*n_Kapazitaten+1:4*n_Kapazitaten loop
    //connect(Conductors[i+3].port_b,Capacitors[i].port);
    //connect(Capacitors[i].port,Conductors[i+4].port_a);
  //end for;
  //connect(Conductors[4*n_Kapazitaten+4].port_b,PrescribedTemperature4.port);
end  SimModelcode;

你知道这个错误的原因吗?我感谢你的帮助。提前谢谢

有几个用作数组维度的变量需要声明为参数: 参数实际热容量[n_Kapazitaten]; 参数真实导热系数[n_Kapazitaten+1]

还有一些调用看起来像
sqrt(…)^2
,其中
是负数。如果目的是使它们成为积极的,只需调用
abs(…)


我不知道JModelica的问题是什么。

您的代码在哪里?考虑到它可能有数以百万计的错误,如果我们看不到它,就有点难以帮助:-)请提供一个最小的可重复的例子。抱歉,我添加了code.JModelica已被Modelon关闭。有没有开发人员仍然维护这个程序?可能是Ansys TwinBuilder,而不是JModelica。基于老问题的猜测。是的,是的。