Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
Overview of the project:
In this project, controlling the retraction and extension of Airplane’s landing gear can be implemented using Finite State Machine (FSM). FSM is the most efficient algorithm which is mathematical model of computation.
The landing gear is the principan support of the airplane when parked, taking off or landing. The most common type of landing gear consist of wheels.
Goals:
- Controlling the direction of Valve.
System directly controll the valve and contol the direction of the wheel by verifiying the other system
- Controlling the retraction and extension of Airplane’s landing gear.
Retraction and extension of Airplane is control by the lever and its check proper hight for landing or takeoff.
A direction valve is controlled by the software to allow the hydraulic pressure to either raise or lower the landing gear.
#include
void Init_State_machine(); //function delcarartion// // void is used to function return type//
void Gear_Down();
void Checking_Before_Takeoff();
void Raising_Gear();
void Gear_Up();
void Checking_Before_Landing();
void Lowering_Gear();
static void (*state_table[])(void) = {Gear_Down,Checking_Before_Takeoff,Raising_Gear,
Gear_Up,Checking_Before_Landing,Lowering_Gear};
typedef enum State // A type def means declaring the alternative names//
{
GR_DWN, //here calling the different states //
CHK_BFR_TKFF,
RSING_GR,
GR_UP,
CHK_BFR_LND,
LWRNG_GR
}State_Type;
typedef enum Switch
{
Open, //here calling the different switch//
Close
}Switch_Status;
typedef enum Pilot_Lever
{
Rising,
Falling, //here calling the different pilot_lever//
UP,
DOWN
}Pilot_Lever_Status;
typedef enum Hydraulic_Mechanism
{
Working,
Malfunctioning //here calling the different hydraulic_ machanism//
}Hydraulic_Mechanism_Status;
static volatile Switch_Status squat_switch; //A function that has a scope that is limited to its object file//
static volatile Switch_Status limit_switch;
static volatile Pilot_Lever_Status pilot_lever;
static volatile Hydraulic_Mechanism_Status hydraulic_mechanism;
State_Type current_state;
/*we are creating the structure where we are giving the different condition to control landing gears*/
typedef struct
{
char* current_state_indication; //calling the status of the struct//
char* light_Status;
char* direction_value_status;
char* hydraulic_pump_control_status;
char* gas_pressurized_spring_status[2];
}State_Table;
/*we are creating the object named as statemachine which is an array in which it contain six different type of condtional output*/
static State_Table State_Machine[6] = { //calling the state_ Table//
{"GearDown","Green","Down","Enabled",0,0},
{"Checking Before Take Off ","Green","Down","Enabled",0,0},
{"Raising Gear","Red","Up","Enabled",{"Disabled","Enabled"}},
{"Gear Up","Off","Null","Disabled",0,0},
{"Checking Before Landing","Red","Down","Enabled",0,0},
{"Lowering Gear","Green","Down","Enabled",{"Disabled","Enabled"}}
};//header//
//header//
int main() /*In main function we are calling the function name is Intiate State machine function:with no argument*/
{
Init_State_Machine(); //while loop start hear//
while(1)
{
state_table[current_state]();
}
}
void Init_State_Machine() //function declaration//
{
current_state = GR_DWN; //In GEAR_DOWN light =GREEN//
printf("\nState Machine is initialized & Program is in Gear_Down State & Light_Status : %s\n",State_Machine[current_state].light_Status);
}
void Gear_Down(void) //function delcaration//
{
current_state = GR_DWN; //gear down starts//
printf("\n Enter the Pilot's Lever Position and Squat Switch Status:");
fflush(stdout);
scanf("%d %d",&pilot_lever,&squat_switch);
if (pilot_lever == Rising && squat_switch == Open) //GEAR_down =rising -(0) and open-(0)//
{
current_state = CHK_BFR_TKFF;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
}
else
{
Gear_Down();
}
}
void Checking_Before_Takeoff()//function declarartion//
{
current_state = CHK_BFR_TKFF;
printf("\n Enter the Pilot's Lever Position,Squat Switch Status and Hydraulic Mechanism Status:");//console//
fflush(stdout);
scanf("%d %d %d",&pilot_lever,&squat_switch,&hydraulic_mechanism);//reads the address//
printf("\n Wait for 2 secs\n");
if(pilot_lever == Falling || squat_switch == Close)
{
Gear_Down();
}
else if (pilot_lever == UP && squat_switch == Open && hydraulic_mechanism == Working)
{ //chk_bfr_tkf= up(2),squat_switch=(0) and working=(0)//
current_state = RSING_GR;
printf("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Value Status:%s\n\n",State_Machine[current_state].direction_value_status);
}
else if (pilot_lever == UP && squat_switch == Open && hydraulic_mechanism == Malfunctioning)
{ //chk_bfr_tkf= up(2),squat_switch=(0) and working=(1)//
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Value Status:%s\n",State_Machine[current_state].direction_value_status);
printf("Gas Pressurized Spring System Status:%s\n",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
}
void Raising_Gear() //function declarartion//
{
current_state = RSING_GR;
printf("\n Enter the Limit Switch Status, Pilot's Lever Position :");// enter the console of t limt switch and pilot lever posistions//
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever); // read the address//
printf("\nWait for 1 sec\n");
if(pilot_lever == Falling && limit_switch == Open) //if statment will starts//
{
current_state = CHK_BFR_LND;
printf ("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf ("Light Status:%s\n",State_Machine[current_state].light_Status);
printf ("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else if (limit_switch == Close && pilot_lever == UP) //chk_bfr_lnd= close(1) and pilot_lever =(2)//
{
current_state = GR_UP;
printf ("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf ("Light Status:%s\n",State_Machine[current_state].light_Status);
printf ("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Raising_Gear();
}
}
void Gear_Up() //function declaration//
{
current_state = GR_UP;
printf("\n Enter the Pilot's Lever Position:"); //enter the cosole pilot lever position//
fflush(stdout);
scanf("%d",&pilot_lever); //reads the address//
if(pilot_lever ==Falling) // if statement will starts// //pilot_lever == falling means "1"//
{
current_state = CHK_BFR_LND;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Gear_Up();
}
}
void Checking_Before_Landing() //function declaration//
{
current_state = CHK_BFR_LND;
printf("\nCurrent State : %s\n",State_Machine[current_state].current_state_indication);
printf("\nEnter the Pilot's Lever Position and Status of Hydraulic Mechanism:"); // print the console//
fflush(stdout);
scanf("%d %d",&pilot_lever,&hydraulic_mechanism); //reads the address//
if(pilot_lever == DOWN && hydraulic_mechanism == Working)
{
current_state = LWRNG_GR;
printf("\nCurrent State : %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Valve Status:%s\n",State_Machine[current_state].direction_value_status);
}
else if(pilot_lever == DOWN && hydraulic_mechanism == Malfunctioning) // pilot_ lever= down(3)and hydr_mech=malfun(1)//
{
current_state = LWRNG_GR;
printf("\nCurrent State : %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Valve Status:%s\n",State_Machine[current_state].direction_value_status);
printf("Gas Pressurized Spring System Status:%s\n",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
if(pilot_lever == (UP || Rising || Falling))
{
Checking_Before_Landing();
}
}
void Lowering_Gear() //function declarartion//
{
current_state = LWRNG_GR;
printf("\n Enter the Limit_Switch Status,Pilot_Lever Status ::"); //enter the console//
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever); //reads the address//
if( limit_switch == Close && pilot_lever == Rising) // limit_switch =close(1) and pilot__ lever=rising(0)//
{
current_state = CHK_BFR_TKFF;
printf("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
}
if(limit_switch == Open && pilot_lever == DOWN)
{
current_state = GR_DWN;
printf ("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf ("Light Status:%s\n",State_Machine[current_state].light_Status);
printf ("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Lowering_Gear();
}
}
OUTPUT:
