767 Electric Power System Modeling in Sysml: Authors
767 Electric Power System Modeling in Sysml: Authors
767 Electric Power System Modeling in Sysml: Authors
SysML
Authors:
John Finn
Mohammad Mostafizur Rahman Mozumdar
Alberto Sangiovanni Vincentelli
University of California, Berkeley
Reviews:
Ver.01 02/09/2011: Preliminary version
Ver.02 04/19/2011: First Draft of Complete Power System
Abstract
This document provides a preliminary description for SysML modeling of the 767
electrical power system, a part of the design methodology to the MuSyC/DSCS
avionics challenge problem. It starts with a short overview of the aircrafts electric
power system and then highlights the components that have been modeled. Rational
Rhapsody is used as a SysML modeling interface.
Description of Power System
The Electrical Power System (EPS) is an important subsystem of a typical avionics
vehicle management system. The scope of the EPS is to provide electrical power to
the different aircraft subsystems. Typically it consists of power generators, switches,
contactors and electrical loads. Figure 1 shows a simplified schema of the Boeing
767 Electrical Power System.
There are two generators in the aircraft that serve as a primary power sources
(shown as L-Gen and R-Gen in Figure 1). Each of them provides power to their
respective AC Bus through a Generator Control Breaker (GCB), which is controlled
by a local Generator Control Unit (GCU). Next, each AC Bus powers the local DC Bus
through a Transformer Rectifying Unit (TRU). The Bus Power Control Unit (BPCU)
controls the Bus Tie Breakers (BTB), which in the event of main generator failure,
the BTB allows for the other generator, Auxiliary Power Unit (APU) or the External
Power (EXT) to compensate for the lost generator. Similarly, the DC Tie allows one
DC Bus to compensate the other in the event of a TRU failure. Lastly, the Left DC Bus
or the onboard batteries can power the Battery Bus. This primitive functionality was
incorporated into SysML as described in the next section.
System Architecture
Figure 3 illustrates the top-level view of the EPS using a block diagram, which
consists of the pilot, control system, left/right side of the power system, Bus Tie
Breaker, DC Tie Breaker, External and APU Power Units, AC/DC Standby Buses,
Battery Bus, and the Battery. All these components contain ports by which they are
connected with each other. Using ports, components can communicate with each
other by means of events, which can carry specific data values.
As shown in the figure 3, the pilot sends the start/stop commands to the control
system. The engine control system consists of two GCUs (one for each engine) and
one BPCU (shown in figure 4). The GCU sends the start/stop command to each of the
engines and receives (measures) the current generator voltage level. Additionally,
the BPCU controls the BTB. In the current implementation, each side of the power
system contains blocks for engine, AC Bus and DC Bus (shown in figure 5).
itsLeftSide_PowerSystem:LeftSide_PowerSystem
ACstandby
ACstandby
itsDC_BUS_BAT_COMPONENTS:DC_BUS_BAT_Components
Attributes
Attributes
LeftEngC omm
Operations
Operations
DCstandby
DCstandby
D C Tie
1 itsControlPanelForPilot:ControlPanelForPilot
Attributes
EngineC omm_L
Operations
EngineC omm_R
D C Tie Left
1
TieLeft
1
itsControlSytem:ControlSytem
LeftEngC omm
itsDCTieBreaker:DCTieBreaker
Attributes
itsBTBs:BTBs
Attributes
1 itsExtPower_APUgen:ExtPower_APUgen
BPC U _R _BTB_BU S
BPC U _R _BTB_BU S
Operations
Operations
EngineC omm_L
Operations
Operations
EngineC omm_R
TieR ig ht
R eqPow er From...
D C Tie Right
R ightEngC omm
BPC U _APU _EXPW R _BU S
Attributes
R ightEngC omm
Operations
D C Tie
Control System
As mentioned earlier, the control system in Figure 4 has three components, a GCU
for each engine and a BPCU for the BTB. Each GCU is connected to its corresponding
engine through a flow port by which it sends and receives data and events. The GCU
can start/stop its corresponding engine based on commands from the pilot. In
addition, the GCU monitors the generators output voltage, and if this voltage is
outside a specified range, the GCU will shut down the engine. If an engine is shut
down by the GCU, the GCU signals the BPCU to configure the BTBs to compensate for
the lost engine. The configuration of the BTBs depends on the status of the available
power sources, which are EXT, APU or the other generator (in that priority order).
LeftGCU
Attributes
Lef t EngComm
Lef t EngineComm
Lef t EngComm
Operations
GCUsync
GCUSyncLeft
1
BPC U
Attributes
BPC U_L_BTB_BUS
EngineComm_L
BPC U_L_BTB_BUS
BPC U_R_BTB_BUS
BPC U_R_BTB_BUS
ext ernalPowerON()
EngineComm_R
APU_ON()
ext ernalPowerOFF()
APU_OFF()
clos eLef tBTB()
GCUSy ncRight
GCUsync
1
RightGCU
Attributes
RightEngComm
Operations
RightEngComm
StartRight Engine()
StopR ightEngine()
ACst andby
DCst andby
DCst andby
1
LeftDCBus
At tributes
DCPowerSupply
LeftTRU:int
ACst andby
1
LeftACBus
At tributes
O per ations
DCTie
PowerFromRight(Status:int )
LeftTRU_Status(TRUst atus:int=1)
LeftEngComm
ACPowerSupply
St ableVoltage()
DCPowerSupply
VoltageDown()
LeftACbusStat us(BusSt atus:int)
1
LeftEngine
DCTie
OtherPowerSourcesSrvLef t()
noPowerSourcesForLeft ()
A ttributes
currentVolt Level:int
ACPowerSupply
LeftEngComm
ACTieLeft
O per ations
LeftStartSt op(command...
StableVoltage()
ACTieLeft
Idle
StartLef tEngine
StartEngineLef t
Reactions
StartLef tEngine
currentVoltLev elLef t[params->current VoltLev el==115]
StopLef tEngine
currentVoltLev elLef t[params->current VoltLev el<=110 ||
params->current VoltLev el>=120]
StopEngine
Reactions
Engine
Initially, each engine waits for the start command in the idle state. Once the GCU
sends the start command (for example, LeftStartStop(1) from the left GCU), the
engine will make transition to the EngineStarted state. Once started, the engine will
send its output voltage to the GCU every 1000ms via the LeftEngComm port. On
entry to the EngineStarted state, the engine sends an event to the AC Bus indicating
its operating voltage level, which based on its status; this event is either
StableVoltage or VoltageDown via the ACPowerSupply port. Lastly, if the GCU sends a
stop command (for example, LeftStartStop(0) from the left GCU), the engine will
transition to the idle state and send VoltageDown to the AC Bus.
StatechartOfLeftEngine
Idle
LeftStartStop[params->command==0]/
OUT_PORT(ACPowerSupply)->GEN(VoltageDown);
currentVoltLev...
LeftStartStop
[params->command==1]
EngineStarted
currentVoltLevel=115...
tm(1000)/
OUT_PORT(LeftEngComm)->
GEN(currentVoltLevelLeft(currentVoltLevel))
AC Bus
The state flow in Figure 8 illustrates the Left AC Bus. In this state flow, the Left AC
Bus is initially in the NotInService state, which implies the AC Bus is not powered. On
entry to this state, the AC Bus sends an event to both the DC Bus and AC Standby
Bus, which indicates the AC Bus is not in service, and therefore, the DC Bus cannot
be in service either, but the AC Standby Bus can be in service from the Battery Bus.
Once the left generator produces a stable voltage, the AC Bus will transition to the
InService_PowerFromLeftGenerator state. If the engine fails, then the VoltageDown
event generated by the GCU will transition the AC Bus back to the NotInService state.
When the BPCU closes the BTBs, the OtherPowerSourcesSrvLeft event will transition
the AC Bus to the InService_PowerFromOtherSources state, which implies either the
EXT Power, APU or the Right AC Bus is supplying power to the Left AC Bus. When
the NotInService state is exited, the AC Bus sends an event to both the DC Bus and AC
Standby Bus, which indicates the AC Bus is in service, and therefore, the DC Bus and
AC Standby Bus can be in service as well.
The same state flow was implemented for the Right AC Bus, except there is no
Standby Buses on the Right Side, and therefore, there is no need to report its status
to the Standby Bus.
StatechartOfLef tACBus
NotInService
StableVoltage
OtherPow erSourcesSrvLef t
VoltageDow n
noPow erSourcesForLeft
InService_Pow erFromLeftGenerator
InService_Pow erFromOtherSources
StableVoltage
DC Bus
The state flow in Figure 9 illustrates the Left DC Bus. The functionalities of the DC
Bus are implemented using two parallel state machines. The first state machine (left
side) represents the actual DC Bus, and the second one updates the TRU status.
Initially, the Left DC Bus is in the LeftDC_NotInService state. On entry to this state,
the Left DC Bus informs the DC Standby Bus and DC Tie Breaker that its status is
unpowered via the LeftDCbusStatus(0) event. The LeftACbusStatus(1) event
transitions the state flow to the CheckTRU state, which checks the status of the Left
TRU. If the Left TRU is functioning properly (i.e. LeftTRU = 1), then the Left DC Bus is
powered from the Left TRU, which is signified by the InServiceFromTRU state. In the
event of TRU failure (i.e. LeftTRU = 0), the Left DC Bus transitions back to the
LeftDC_NotInService state, and sends the ReqPowerFromRight event to the DC Tie
Breaker. The same event occurs if the TRU fails while in the InServiceFromTRU state.
When the DC Tie Breaker receives the request, it can close the DC Tie Breaker,
which will allow the Right DC Bus to power the Left DC Bus. In this case, the DC Tie
Breaker will send the PowerFromRight(1) event, which signifies the DC Tie Breaker
is closed and the Left DC Bus will transition to the InServiceFromRight state. If the
Right DC Bus goes down, the PowerFromRight(0) event will transition back to the
LeftDC_NotInService state. On entry to either the InServiceFromTRU or
InServiceFromRight, the DC Bus informs the DC Standby Bus and DC Tie Breaker that
its status is powered via the LeftDCbusStatus(1) event.
On the right side of state flow, the Left TRUs status is determined. Initially, the Left
TRU is functioning properly, which is designated by the LeftTRU_ON state. This state
sets the LeftTRU variable mentioned above to one. The LeftTRU_Status(0) events
transitions the Left TRU to the failed state, LeftTRU_OFF state, which sets LeftTRU to
zero.
The same state flow was implemented for the Right DC Bus, except there is no
Standby Buses on the Right Side, and therefore, there is no need to report its status
to the Standby Bus.
LeftDC_NotInSevice
CheckTRU
Reactions
LeftTRU_ON
OUT_POR T(...
InServiceFromRight
DC Tie Breaker
The DC Tie Breaker state flow is shown in Figure 10. The two state flows on the
right side, update the status of the Left and Right DC Buses. If the Right Bus is
powered, then the value of RightDC is one, otherwise zero. LeftDC is updated
Open
ReqPowerFromR ight
ReqPowerFromLef t
Lef tD Cupdat e
[R ightD C==0]
CheckRightDC
[Lef t DC ==0]
CheckLeftDC
[R ightD C==0]
[R ightD C==1]
[Lef t DC ==0]
SendPowerFromR ight
Right DC update
[Lef t DC ==1]
SendPowerFromLef t
Right DC busSt atus[ params->Bus Status == 0]/
Right DC = 0;
BPCU
The BPCU state flow implementation of Figure 11 consists of three parallel state
machines. The two statecharts on the right get the status of the APU and EXT Power.
These statuses are updated by events from the corresponding APU/EXT block
within the Architecture of Figure 3 via the BPCU_APU_EXPWR_BUS port. Figure 12
shows the APU status update state flow, which sets the variable APUstate according
to the status of the APU, which is either ON (APUstate = 1) or OFF (APUstate = 0).
Figure 13 shows the EXT Power status update state flow, which sets the variable
EXT_PWRstate according to the status of the EXT Power, which is either ON
(EXT_PWRstate = 2), OFF (EXT_PWRstate = 0) or AVAIL (EXT_PWRstate = 1). The
AVAIL state indicates EXT Power is available, but not being used while the ON state
indicates the EXT Power is being used to power the AC Bus(s).
S tatec hartOfB P C
U
ex ternalP ow erON
NoAv ailablePowerSourc eForACBUS
A P U _ON
///N o gurad
CL OSE_BOTH_BTB_RIGHT_ PROVIDING_POWER
A P U _OFF
l eftEng in e[pa ra ms->s tatus ==1 ]/
l eftEng in eSta tu s=1;
APU_ ON/
//OPEN RIGHT BTB
ex ternalP ow erOFF
CL OSE_BOTH_BTB_LEFT_PROVIDING_ POWER
CheckEngineFailur e
APU_ ON/
//OPEN LEFT BTB
ex ternal Powe rON/
//OPEN LEFT BTB
Po we rFro mAPU
EXT_ PWRstatus [p arams ->state==0 ]/
EXT_ PWRstate=0;
CheckEngineFailur e
CL OSE_L EFT_BTB
CL OSE_BOTH_BTB
The large state flow on the left side of the entire BPCU state flow can be divided into
five states including three super states each indicating the flow of power and the
BTB configuration. Recall the priority to power a given AC Bus is EXT Power, local
engine, APU and opposite engine. The initial state, Both_BTB_Open, signifies both of
the BTBs are open and the local engine powers each AC Bus. In the event either
engine fails, the state flow will transition to the AlternativePowerSource, which is a
kind of junction state that enforces the priority mentioned above and based on the
statuses of the alternative power sources, determines which source will power the
lost channel. First, if no alternative power source is available, it will transition to the
NoAvailablePowerSourceForACBus state, which indicates the lost channel will
remain unpowered. Next, each of the super states represents alternative power
sources which will be explained in the following paragraphs.
As far as the BTBs are concerned, the APU and EXT Power have the same BTB
configuration for each of the given scenarios. Figure 14 shows the APU super
states of the BPCU state flow. The state flow of the EXT Power has modeled in
similar fashion. The initial state, CheckEngineFailure, checks the status of each
engine to determine which BTBs to close. An engine status of one indicates proper
operation while zero indicates failure. If only the Right Engine is lost, the Right BTB
will close as indicated by the Close_Right_BTB state. Similarly, if only the Left Engine
is lost, the Left BTB will close as indicated by the Close_Left_BTB state. However, if
both engines failed, both BTBs will close as indicated by the Close_Both_BTB state.
Figure 14 - StateChart Implementation of the APU Alternative Source within the BPCU
Figure 15 shows the super state in which one engine compensates for the other. In
this case, both BTBs must close regardless of which engine fails. The only thing that
changes in this scenario is the direction of power flow. If the Left Engine fails, the
Right Engine provides power to the Left AC Bus and vice versa if the Right Engine
fails.
When either the Left or Right BTB is command to be opened or closed, the
appropriate event (i.e. openLeftBTB, closeLeftBTB, etc.) is sent from the BPCU to the
Bus Tie Breaker in the Architecture (Figure 3) via the corresponding port(
BPCU_L_BTB_BUS, BPCU_R_BTB_BUS).
The last thing to note about the BPCU state flow is that there are transitions
between the five main states mentioned above. The transitions correspond to the
event when a source of higher priority is suddenly available in which there is a
transition from the lower priority source to the higher priority source.
Bus Tie Breakers Internal Block Diagram
The Bus Tie Breaker (BTB) internal block diagram is shown in Figure 16. As
previously mentioned, the BTB consists of two contactors, the Right BTB and the
Left BTB, shown in Figure 16. The ports BPCU_L_BTB_BUS and BPCU_R_BTB_BUS
receive open/close commands from the BPCU as mentioned in the BPCU section.
The TLeft(TieLeft) and TRight(TieRight) either send power to or receive from the
corresponding AC Bus. Lastly, the APU_ExtPower port receives power from the APU,
EXT Power or both, which can be distributed to one or both of the AC Buses.
TieLeft
ibd [block] BT Bs [BTBsInternal]
TLeft
1
BPCU_L_BTB_BUS
BTB_left
BPCU_L_BTB_BUS
Attributes
APU_ExtPower
Operations
APU_ExtPower
closeLeftBT B()
OtherPowerSour...
openLeftBT B()
GEN_Power
GEN_Power
1
BPCU_R_BTB_BUS
BTB_right
BPCU_R_BTB_BUS
Attributes
Operations
APU_ExtPower
closeRightBTB()
OtherPowerSou...
openRightBTB()
TRight
TieRight
OpenLeftBTB
openLeftBTB/OUT_PORT(TLeft)->
GEN(noPowerSourcesForLeft);
Clos eLeftBTB
External PowerController
Attributes
Ext Power
Operations
BPCU_APU_EXPWR_BUS
externalPowerCordConn()
Push_EXT_PWR_switch()
externalPowerCordDisCo...
APU_Ext Power
BPCU_APU_EXPWR_BUS
APU_Generator
Attributes
APUpower
Operations
APUstart ()
BPCU_APU_EXPWR_BUS
closeAPU_GenBreak er()
openAPU_GenBreaker()
APUstop()
APUstatus(state:int)
External Power
The transitions of states for External Power can be seen in Figure 19, in which it
updates the BPCU with the EXT Power status via the BPCU_APU_EXPWR_BUS port.
Initially, the state flow is in the NoExternalPower state, which indicates External
Power is not available and EXT_PWRstatus is set to zero and sent to the BPCU. The
event, externalPowerCordConn signifies the external power is available, but is not
supplying power to any of the aircrafts buses because it requires a pilot command
to supply power to the aircraft loads. This event reports EXT_PWRstatus=1 to the
BPCU. The state flow will transition back to the NoExternalPower state if EXT Power
is removed by the externalPowerCordDisConn event. When in the AVAIL state, If the
pilot pushes switch to supply external power (Push_EXT_PWR_switch) to the
required part of the power system buses, the EXT Power will be ready to supply
power to the aircraft loads and EXT_PWRstatus=2 is sent to the BPCU. The EXT
Power state flow transitions to the ProvidePowerToEntireSystem state. If the pilot
sends the Push_EXT_PWR_switch event in this state, EXT Power will transition back
to the AVAIL state and send the BPCU EXT_PWRstatus=1.
NoE xternalPower
ProvideP owerToEntireSyst em
Off
APUstart/
OUT_PORT(BPCU_APU_EXPWR_BUS)
->GEN(APUstatus(1));
APUstop/
OUT_PORT(BPCU_APU_EXPWR_BUS)
->GEN(APUstatus(0));
On
NotInService state. Or, if the mode becomes AUTO and both the Left AC and DC buses
become powered, it will transition to the InServiceFromLeft state.
Standby
LeftAC busStatus[params-> BusStatus = = 1]/LeftAC = 1;
NotInService
LeftAC update
[LeftAC= =1 &&
LeftDC == 1 &&
Mode = = 1]
LeftAC busStatus[params-> BusStatus = = 0]/LeftAC = 0;
[LeftAC= =0 | |
LeftDC == 0 | |
M ode ! = 1]
InServiceFromLeft
[M ode == 1 &&
LeftAC = = 1 &&
LeftDC == 1]
[M ode == 0 | |
BatBus == 0]
InServiceFromBatBus
BatteryBusUpdate
BatteryBusStatus[params-> Status== 0]/BatBus= 0;
Battery Bus
The Battery Bus can either be powered from the Left DC Bus or the Battery, but this
depends on the Standby Mode previously discussed. The state flow is shown in
Figure 22, which has three update state flows on the right side. The first one gets the
Standby Mode from the pilot via the StandbyMode event. The second update gets the
value ACDC from the AC/DC Standby Bus, which is one if the Left AC and DC Buses
power the Standby Bus. This update is triggered by the ACDCbusPower event from
the Standby Bus. The last update state flow gets the Battery Status from the Battery
via the BatteryStatus event. Batt = 1 if the Battery can supply power, and Batt = 0
otherwise.
Initially, the Battery Bus is not in service. If the Battery can supply power (i.e. Batt =
1) and Standby Mode is either OFF or BATT, then the Battery will power the Battery
Bus, and the state flow will transition to the InServiceFromBatt state. The state flow
will also transition to this state if in the AUTO mode and the Left AC/DC Buses are
not powering the Standby Buses (i.e. ACDC = 0). While in the InServiceFromBatt
state and the Battery becomes depleted (i.e. Batt = 0), it will transition back to the
BattBus
[Batt == 0]
StandByMode[params->mode == 1]/Mode = 1;
NotInService
ModeUpdate
InServiceFromLeft
[(Batt == 1)&&
(Mode = = 2 | | Mode = = 0 | |
(Mode = = 1)&&ACDC==0)]
StandByMode[params->mode == 2]/Mode = 2;
StandByMode[params->mode == 0]/Mode = 0;
ACDCbusPower[params->Status == 1]/ACDC = 1;
ACDCupdate
InServiceFromBatt
ACDCbusPower[params->Status == 0]/ACDC = 0;
BatteryStatus[params->Status == 1]/Batt = 1;
BattUpdate
BatteryStatus[params->Status == 0]/Batt = 0;
Battery
The Battery model (shown in Figure 23) has two update state flows. The first one
gets the status of the Battery Bus via the BatteryBusStatus event. This event sets
BattBus to one if the Battery powers the Battery Bus otherwise it is zero. If this is
the case, the Battery cannot be charged because the chargers would be supplying
power to a load, which could cause them to fail prematurely. The Left AC Bus
powers the Battery Chargers, and therefore, the second status update gets the status
of the Left AC Bus from the Battery Bus via the BattBusServiceFromLeft event. So if
the Left AC bus is powered, the variable LeftAC=1, otherwise it is zero.
Initially, the battery is Full as indicated by the Full state (charge = 100). If the
Battery Bus is providing power (i.e. BattBus = 1) then the Battery will transition to
the Discharging state, which decrements charge every 1000ms. If charge becomes
zero, the Battery will transition to the Depleted state. If the Battery Bus changes to
not supplying power and the Left AC Bus is powered (i.e. BattBus = 0 and LeftAC =
1) while in either the Discharging or Depleted states, then the Battery can transition
to the Charging state where charge is incremented every 1000ms until it is 100. At
this point, it transitions back to Full. However, if the Battery suddenly starts to
supply power while in the Charging State (i.e. BattBus = 1), then it will transition
back to the Discharging state.
Battery Stat e
Battery BusStatus[params->St atus == 1]/ Bat tBus = 1;
Full
BattBusUpdate
[charge == 100]
charge ...
tm(1000)
[Batt Bus==1 &&
Lef tAC==0]
Discharging
charge ...
BattBusServ iceFromLef t [params->Stat us==1] /Lef tAC=1;
Lef tACupdat e
[charge == 0]