You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
6.8 KiB
215 lines
6.8 KiB
within AIDAModelica; |
|
// CP: 65001 |
|
// SimulationX Version: 3.8.2.45319 x64 |
|
|
|
model RemoteControl "RemoteControl" |
|
Real VerticalSpeedCommand_i(start=0) "commande interne non filtree"; |
|
Modelica.Blocks.Interfaces.RealOutput VerticalSpeedCommand( |
|
quantity="Mechanics.Translation.Velocity", |
|
displayUnit="m/s") "'output Real' as connector" annotation(Placement( |
|
transformation(extent={{12,28},{32,48}}), |
|
iconTransformation( |
|
origin={-75,-100}, |
|
extent={{-10,-10},{10,10}}, |
|
rotation=-90))); |
|
Real RollCommand_i(start=0) "commande interne non filtree"; |
|
Modelica.Blocks.Interfaces.RealOutput RollCommand( |
|
quantity="Mechanics.Rotation.Angle", |
|
displayUnit="rad") "'output Real' as connector" annotation(Placement( |
|
transformation(extent={{56,8},{76,28}}), |
|
iconTransformation( |
|
origin={-25,-100}, |
|
extent={{-10,-10},{10,10}}, |
|
rotation=-90))); |
|
Real PitchCommand_i(start=0) "commande interne non filtree"; |
|
Modelica.Blocks.Interfaces.RealOutput PitchCommand( |
|
quantity="Mechanics.Rotation.Angle", |
|
displayUnit="rad") "'output Real' as connector" annotation(Placement( |
|
transformation(extent={{-38,-46},{-18,-26}}), |
|
iconTransformation( |
|
origin={25,-100}, |
|
extent={{-10,-10},{10,10}}, |
|
rotation=-90))); |
|
Real YawCommand_i(start=0) "commande interne non filtree"; |
|
Modelica.Blocks.Interfaces.RealOutput YawCommand( |
|
quantity="Mechanics.Rotation.Angle", |
|
displayUnit="rad") "'output Real' as connector" annotation(Placement( |
|
transformation(extent={{18,-52},{38,-32}}), |
|
iconTransformation( |
|
origin={75,-100}, |
|
extent={{-10,-10},{10,10}}, |
|
rotation=-90))); |
|
Modelica.Blocks.Interfaces.BooleanOutput ControlMode "'output Boolean' as connector" annotation(Placement( |
|
transformation(extent={{-10,-10},{10,10}}), |
|
iconTransformation( |
|
origin={-125,-50}, |
|
extent={{-10,-10},{10,10}}, |
|
rotation=180))); |
|
Modelica.Blocks.Interfaces.BooleanOutput IndicatorYawConsign "'output Boolean' as connector" annotation(Placement( |
|
transformation( |
|
origin={-45,45}, |
|
extent={{-17,-17},{17,17}}), |
|
iconTransformation( |
|
origin={-125,0}, |
|
extent={{-10,-10},{10,10}}, |
|
rotation=-180))); |
|
parameter Real VS_cmd=0.5; |
|
parameter Real[2] VS_cmd_t={3, 5} "Instants de démarrage et fin du step"; |
|
parameter Real Pitch_cmd=0.03; |
|
parameter Real[2] Pitch_cmd_t={1, 4} "Instants de démarrage et fin du step, après stabilisation verticale"; |
|
parameter Real Yaw_cmd=0.5; |
|
parameter Real[2] Yaw_cmd_t={6, 8} "Instants de démarrage et fin du step"; |
|
parameter Real Roll_cmd=0.2 "Amplitude step "; |
|
parameter Real Roll_cmd_t[2]={1, 100} "Instants de démarrage et fin du step"; |
|
parameter Real Tcst=0.1 "constante de temps pour filter les sorties du remote ctl"; |
|
Boolean Auto_Ctl_Enabled(start=true); |
|
parameter Real Auto_Ctl_t=0.1 "Instant de déclenchement du mode auto"; |
|
initial equation |
|
PitchCommand = 0; |
|
RollCommand = 0; |
|
YawCommand = 0; |
|
VerticalSpeedCommand = 0; |
|
PitchCommand_i = 0; |
|
RollCommand_i = 0; |
|
YawCommand_i = 0; |
|
VerticalSpeedCommand_i = 0; |
|
ControlMode = false; |
|
IndicatorYawConsign = false; |
|
Auto_Ctl_Enabled=true; |
|
algorithm |
|
|
|
when time > Auto_Ctl_t and Auto_Ctl_Enabled==true then |
|
ControlMode:=true; |
|
end when; |
|
|
|
when time > VS_cmd_t[1] then |
|
VerticalSpeedCommand_i := VS_cmd; |
|
ControlMode:=false; |
|
Auto_Ctl_Enabled:=false; |
|
end when; |
|
when time > VS_cmd_t[2] then |
|
VerticalSpeedCommand_i := 0; |
|
end when; |
|
when time > VS_cmd_t[2]+ Pitch_cmd_t[1] then |
|
PitchCommand_i := Pitch_cmd; |
|
ControlMode:=false; |
|
end when; |
|
when time > VS_cmd_t[2]+ Pitch_cmd_t[2] then |
|
PitchCommand_i := 0; |
|
end when; |
|
when time > VS_cmd_t[2]+ Roll_cmd_t[1] then |
|
RollCommand_i := Roll_cmd; |
|
ControlMode:=false; |
|
end when; |
|
when time > VS_cmd_t[2]+ Roll_cmd_t[2] then |
|
RollCommand_i := 0; |
|
end when; |
|
//Yaw command |
|
when time > VS_cmd_t[2]+ Yaw_cmd_t[1] then |
|
YawCommand_i := Yaw_cmd; |
|
ControlMode:=false; |
|
IndicatorYawConsign:=true; |
|
end when; |
|
//IndicatorYawConsign := true; |
|
when time > VS_cmd_t[2]+ Yaw_cmd_t[2] then |
|
YawCommand_i := 0; |
|
end when; |
|
//IndicatorYawConsign := false; |
|
/*if time>Yaw_cmd_t[2] then |
|
|
|
int_yaw := 0; |
|
IndicatorYawConsign := false; |
|
|
|
elseif time>Yaw_cmd_t[1] then |
|
|
|
int_yaw := DYaw_cmd; |
|
IndicatorYawConsign := true; |
|
|
|
else |
|
|
|
int_yaw := 0; |
|
IndicatorYawConsign := false; |
|
|
|
end if;*/ |
|
equation |
|
// remote control filter with Tcst time constant |
|
der(VerticalSpeedCommand) = (VerticalSpeedCommand_i - VerticalSpeedCommand) / Tcst; |
|
der(RollCommand) = (RollCommand_i - RollCommand) / Tcst; |
|
der(PitchCommand) = (PitchCommand_i - PitchCommand) / Tcst; |
|
der(YawCommand) = (YawCommand_i - YawCommand) / Tcst; |
|
/* initial code of Andrii VAKULKO, destined to be used with manual button included in the SimulationX interface |
|
if VSCommand1 > 0 then |
|
VerticalSpeedCommand = -1; |
|
elseif VSCommand2 > 0 then |
|
VerticalSpeedCommand = -0.8; |
|
elseif VSCommand3 > 0 then |
|
VerticalSpeedCommand = -0.6; |
|
elseif VSCommand4 > 0 then |
|
VerticalSpeedCommand = -0.4; |
|
elseif VSCommand5 > 0 then |
|
VerticalSpeedCommand = -0.2; |
|
elseif VSCommand6 > 0 then |
|
VerticalSpeedCommand = 0.2; |
|
elseif VSCommand7 > 0 then |
|
VerticalSpeedCommand = 0.4; |
|
elseif VSCommand8 > 0 then |
|
VerticalSpeedCommand = 0.6; |
|
elseif VSCommand9 > 0 then |
|
VerticalSpeedCommand = 0.8; |
|
elseif VSCommand10 > 0 then |
|
VerticalSpeedCommand = 1; |
|
else |
|
VerticalSpeedCommand = 0; |
|
end if; |
|
|
|
if YCommandP > 0 then |
|
der(YawCommand) = 0.01; |
|
//IndicatorYawConsign = true; |
|
elseif YCommandM > 0 then |
|
der(YawCommand) = -0.01; |
|
//IndicatorYawConsign = true; |
|
else |
|
YawCommand = 0; |
|
//IndicatorYawConsign = false; |
|
end if; |
|
|
|
if RCommandP > 0 then |
|
RollCommand = 0.0261799; //15 deg |
|
elseif RCommandM > 0 then |
|
RollCommand = -0.0261799; |
|
else |
|
RollCommand = 0; |
|
end if; |
|
|
|
if PCommandP > 0 then |
|
PitchCommand = 0.0261799; |
|
elseif PCommandM > 0 then |
|
PitchCommand = -0.0261799; |
|
else |
|
PitchCommand = 0; |
|
end if;*/ |
|
annotation( |
|
VerticalSpeedCommand(flags=2), |
|
RollCommand(flags=2), |
|
PitchCommand(flags=2), |
|
YawCommand(flags=2), |
|
ControlMode(flags=2), |
|
IndicatorYawConsign(flags=2), |
|
Icon( |
|
coordinateSystem(extent={{-125,-100},{125,100}}), |
|
graphics={ |
|
Rectangle( |
|
fillColor={255,255,255}, |
|
fillPattern=FillPattern.Solid, |
|
extent={{-123.3,100},{123.3,-100}}), |
|
Text( |
|
textString="%name", |
|
fillPattern=FillPattern.None, |
|
extent={{-86,20},{86,-20}}, |
|
origin={-2,6})}), |
|
experiment( |
|
StopTime=10, |
|
StartTime=0, |
|
Interval=0.02, |
|
MaxInterval="0.001")); |
|
end RemoteControl;
|
|
|