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
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.
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: