AIDA is a study case for model based system engineering, made by MOISE project. This project contains the simulation model of AIDA (made with SimulationX in Modelica)
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

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;