Bahnverlauf mit Modelica

parti.zani

Neues Mitglied
Hallo,

ich habe ein Problem und zwar bin ich totaler Anfänger was Programmieren angeht und versuche gerade ein Bahnverlauf für ein Shuttel zu Programmieren mit Modelica. Mir wurde gesagt, dass die Sprache Java sehr große Ähnlichkeit mit Modelica hätte.
Ich habe es schonmal geschafft das mein Shuttel eine Kurve fahren kann und jetzt möchte ich das er entweder nach der Kurve noch eine Kurve fährt oder nichts tut. Aber irgendwie krieg ich das nicht hin.

Hier schon mal das was ich geschrieben habe für die Kurve:

model Kurve

Java:
parameter Real phi_start=0 "bei Linkskurven 360° statt 0°";
parameter Real phi_max=180;
parameter Real r=0.2 "Kurvenradius";
parameter Boolean Rechtskurve=true "true=Rechtskurve, false=Linkskurve";

//Eingaenge=[Startzeitpunkt, Positionsvektor(x,y) vor aktuellem Element, Drehung um z vor aktuellem Element]
//Ausgaenge=[Endzeitpunkt, Positionsvektor(x,y) mit aktuellem Element, Drehung um z mit aktuellem Element]

Real steigung;
Real phi;
Real posOut[2];
Real phiOut;
Real Richtung;

algorithm 
  if Rechtskurve==true then
    Richtung:=1;
  else
    Richtung:=-1;
  end if;
  Ausgaenge[1]:= Eingaenge[1]+abs(((phi_max-phi_start)*Modelica.Constants.pi*r)/(180*v));
  if time>=Eingaenge[1] then
    steigung:=180/(Modelica.Constants.pi*r)*v*Richtung;
    phi:=(steigung*(time-Eingaenge[1])+phi_start)/180*Modelica.Constants.pi;
    if Rechtskurve then
      if abs(phi_start-phi_max)>90 and phi_start>=270 then
        phiOut:=phi-360/180*Modelica.Constants.pi;
      else
        phiOut:=phi;
      end if;
    else
      if phi_start>=180 then
        phiOut:=phi-180/180*Modelica.Constants.pi;
      elseif phi_start<180 then
        phiOut:=phi+180/180*Modelica.Constants.pi;
      end if;
    end if;
    if phi_start==90 then
      posOut:= {r*(sin(phi)-1),r*(cos(phi))};
    elseif phi_start==180 then
      posOut:= {r*(sin(phi)),r*(cos(phi)+1)};
    elseif phi_start==270 then
      posOut:= {r*(sin(phi)+1),r*(cos(phi))};
    else
      posOut:= {r*sin(phi),r*(cos(phi)-1)};
    end if;
  end if;
  if time>=Ausgaenge[1] then
    phiOut:=0;
    if phi_start==90 then
      posOut:= {r*(sin(phi_max/180*Modelica.Constants.pi)-1),r*(cos(phi_max/180*Modelica.Constants.pi))};
    elseif phi_start==180 then
      posOut:= {r*(sin(phi_max/180*Modelica.Constants.pi)),r*(cos(phi_max/180*Modelica.Constants.pi)+1)};
    elseif phi_start==270 then
      posOut:= {r*(sin(phi_max/180*Modelica.Constants.pi)+1),r*(cos(phi_max/180*Modelica.Constants.pi))};
    else
      posOut:= {r*sin(phi_max/180*Modelica.Constants.pi),r*(cos(phi_max/180*Modelica.Constants.pi)-1)};
    end if;
  end if;
  Ausgaenge[2]:=Eingaenge[2] + posOut[1];
  Ausgaenge[3]:=Eingaenge[3] + posOut[2];
  Ausgaenge[4]:=Eingaenge[4] + phiOut;

  
end Kurve;

Jetzt habe ich mir gedacht, dass ich zusätzliche Parameter einbauen könnte, die ich an und ausschalten könnte, je nach bedarf, aber ich weiß leider nicht wie das geht. Oder ich nehme noch ein Ausgang dazu und würde dann sagen, entweder nimmt man den Ausgang und macht nichts mehr oder man fährt noch eine Kurve und nimmt den anderen Ausgang.

Ich wäre ich baldige Hilfe sehr dankbar.
 
Zuletzt bearbeitet von einem Moderator:

parti.zani

Neues Mitglied
Alles klar hab ich mir schon gedacht, dass es Java nicht ähnlich ist. Wie gesagt ich bin totaler Anfänger was überhaupt programmieren angeht. Leider gibt es nicht so viele Hilfe Möglichkeiten von Modelica und dachte vielleicht hier ein zu finden der mir helfen könnte. Trotzdem vielen Dank.
 

faetzminator

Gesperrter Benutzer
schau einfach in ein paar Tagen nochmals vorbei, vielleicht kennt sich tatsächlich jemand mit dem aus. Ansonsten, wenn ich nach "forum modelica" google, krieg ich Ergebnisse.
 

Oben