From 1bb61d318b01283ca770f92561ab932abb01330a Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Thu, 9 Jul 2020 23:10:52 -0400 Subject: [PATCH] Updated training material. --- .../Vehicle Analysis Demo.sysml | 294 ++++++++++++++++++ .../VehicleVariabilityModel.sysml | 0 .../Part Definition Example.sysml | 2 +- .../Generalization Example.sysml | 2 +- .../training/07. Items/Items Example.sysml | 17 + .../Individuals and Roles-1.sysml | 0 .../Individuals and Snapshots Example.sysml | 0 .../Individuals and Time Slices.sysml | 0 .../Connections Example.sysml} | 2 +- .../Port Conjugation Example.sysml | 4 +- .../Port Example.sysml | 8 +- .../Interface Decomposition Example.sysml | 0 .../Interface Example.sysml | 0 .../Binding Connectors Example-1.sysml | 12 +- .../Binding Connectors Example-2.sysml | 12 +- .../Streaming Example.sysml | 8 +- .../Streaming Interface Example.sysml | 6 +- .../Action Definition Example-1.sysml} | 0 .../Action Definition Example-2.sysml} | 0 .../Action Decomposition.sysml | 0 .../Conditional Succession Example-1.sysml} | 2 +- .../Conditional Succession Example-2.sysml | 26 ++ .../Succession Example-1.sysml | 0 .../Succession Example-2.sysml | 0 .../Signaling Example.sysml | 0 .../{17. Control => 18. Control}/Camera.sysml | 0 .../Decision Example.sysml | 0 .../Fork Join Example.sysml | 0 .../Merge Example.sysml | 0 .../Action Allocation Example.sysml | 0 .../State Definition Example-1.sysml | 0 .../State Definition Example-2.sysml | 0 .../State Actions.sysml | 0 .../State Decomposition-1.sysml | 0 .../State Decomposition-2.sysml | 0 .../Transition Actions.sysml | 0 .../State Allocation Example.sysml | 0 .../MassRollup.sysml | 0 .../VehicleMasses.sysml | 0 .../Calculation Definitions.sysml | 15 +- .../Calculation Usages-1.sysml | 6 +- .../Calculation Usages-2.sysml | 2 +- .../Analytical Constraints.sysml | 26 -- .../Analytical Constraints.sysml | 42 +++ .../Constraint Assertions-1.sysml | 0 .../Constraint Assertions-2.sysml | 0 .../Constraints Example-1.sysml | 0 .../Constraints Example-2.sysml | 0 .../Derivation Constraints.sysml | 0 .../Requirement Definitions.sysml | 0 .../Requirement Groups.sysml | 0 .../Requirement Satisfaction.sysml | 0 .../Requirement Usages.sysml | 0 .../Analysis Case Definition Example.sysml | 80 +++++ .../Analysis Case Usage Example.sysml | 32 ++ .../Variation Configuration.sysml | 14 + .../Variation Definitions.sysml | 35 +++ .../29. Variability/Variation Usages.sysml | 25 ++ 58 files changed, 604 insertions(+), 68 deletions(-) create mode 100644 sysml/src/examples/Analysis Examples/Vehicle Analysis Demo.sysml rename sysml/src/examples/{Vehicle Example => Variability Examples}/VehicleVariabilityModel.sysml (100%) create mode 100644 sysml/src/training/07. Items/Items Example.sysml rename sysml/src/training/{07. Individuals => 08. Individuals}/Individuals and Roles-1.sysml (100%) rename sysml/src/training/{07. Individuals => 08. Individuals}/Individuals and Snapshots Example.sysml (100%) rename sysml/src/training/{07. Individuals => 08. Individuals}/Individuals and Time Slices.sysml (100%) rename sysml/src/training/{08. Connectors/Connectors Example.sysml => 09. Connections/Connections Example.sysml} (96%) rename sysml/src/training/{09. Ports => 10. Ports}/Port Conjugation Example.sysml (79%) rename sysml/src/training/{09. Ports => 10. Ports}/Port Example.sysml (70%) rename sysml/src/training/{10. Interfaces => 11. Interfaces}/Interface Decomposition Example.sysml (100%) rename sysml/src/training/{10. Interfaces => 11. Interfaces}/Interface Example.sysml (100%) rename sysml/src/training/{11. Binding Connectors => 12. Binding Connectors}/Binding Connectors Example-1.sysml (66%) rename sysml/src/training/{11. Binding Connectors => 12. Binding Connectors}/Binding Connectors Example-2.sysml (54%) rename sysml/src/training/{12. Item Flows => 13. Item Flows}/Streaming Example.sysml (82%) rename sysml/src/training/{12. Item Flows => 13. Item Flows}/Streaming Interface Example.sysml (88%) rename sysml/src/training/{13. Action Definitions/Activity Example-1.sysml => 14. Action Definitions/Action Definition Example-1.sysml} (100%) rename sysml/src/training/{13. Action Definitions/Activity Example-2.sysml => 14. Action Definitions/Action Definition Example-2.sysml} (100%) rename sysml/src/training/{14. Actions => 15. Actions}/Action Decomposition.sysml (100%) rename sysml/src/training/{15. Succession/Conditional Succession Example.sysml => 16. Succession/Conditional Succession Example-1.sysml} (93%) create mode 100644 sysml/src/training/16. Succession/Conditional Succession Example-2.sysml rename sysml/src/training/{15. Succession => 16. Succession}/Succession Example-1.sysml (100%) rename sysml/src/training/{15. Succession => 16. Succession}/Succession Example-2.sysml (100%) rename sysml/src/training/{16. Signaling => 17. Signaling}/Signaling Example.sysml (100%) rename sysml/src/training/{17. Control => 18. Control}/Camera.sysml (100%) rename sysml/src/training/{17. Control => 18. Control}/Decision Example.sysml (100%) rename sysml/src/training/{17. Control => 18. Control}/Fork Join Example.sysml (100%) rename sysml/src/training/{17. Control => 18. Control}/Merge Example.sysml (100%) rename sysml/src/training/{18. Action Allocation => 19. Action Allocation}/Action Allocation Example.sysml (100%) rename sysml/src/training/{19. State Definitions => 20. State Definitions}/State Definition Example-1.sysml (100%) rename sysml/src/training/{19. State Definitions => 20. State Definitions}/State Definition Example-2.sysml (100%) rename sysml/src/training/{20. States => 21. States}/State Actions.sysml (100%) rename sysml/src/training/{20. States => 21. States}/State Decomposition-1.sysml (100%) rename sysml/src/training/{20. States => 21. States}/State Decomposition-2.sysml (100%) rename sysml/src/training/{21. Transitions => 22. Transitions}/Transition Actions.sysml (100%) rename sysml/src/training/{21. State Allocation => 23. State Allocation}/State Allocation Example.sysml (100%) rename sysml/src/training/{23. Expressions => 24. Expressions}/MassRollup.sysml (100%) rename sysml/src/training/{23. Expressions => 24. Expressions}/VehicleMasses.sysml (100%) rename sysml/src/training/{24. Calculations => 25. Calculations}/Calculation Definitions.sysml (56%) rename sysml/src/training/{24. Calculations => 25. Calculations}/Calculation Usages-1.sysml (88%) rename sysml/src/training/{24. Calculations => 25. Calculations}/Calculation Usages-2.sysml (87%) delete mode 100644 sysml/src/training/25. Constraints/Analytical Constraints.sysml create mode 100644 sysml/src/training/26. Constraints/Analytical Constraints.sysml rename sysml/src/training/{25. Constraints => 26. Constraints}/Constraint Assertions-1.sysml (100%) rename sysml/src/training/{25. Constraints => 26. Constraints}/Constraint Assertions-2.sysml (100%) rename sysml/src/training/{25. Constraints => 26. Constraints}/Constraints Example-1.sysml (100%) rename sysml/src/training/{25. Constraints => 26. Constraints}/Constraints Example-2.sysml (100%) rename sysml/src/training/{25. Constraints => 26. Constraints}/Derivation Constraints.sysml (100%) rename sysml/src/training/{26. Requirements => 27. Requirements}/Requirement Definitions.sysml (100%) rename sysml/src/training/{26. Requirements => 27. Requirements}/Requirement Groups.sysml (100%) rename sysml/src/training/{26. Requirements => 27. Requirements}/Requirement Satisfaction.sysml (100%) rename sysml/src/training/{26. Requirements => 27. Requirements}/Requirement Usages.sysml (100%) create mode 100644 sysml/src/training/28. Analysis/Analysis Case Definition Example.sysml create mode 100644 sysml/src/training/28. Analysis/Analysis Case Usage Example.sysml create mode 100644 sysml/src/training/29. Variability/Variation Configuration.sysml create mode 100644 sysml/src/training/29. Variability/Variation Definitions.sysml create mode 100644 sysml/src/training/29. Variability/Variation Usages.sysml diff --git a/sysml/src/examples/Analysis Examples/Vehicle Analysis Demo.sysml b/sysml/src/examples/Analysis Examples/Vehicle Analysis Demo.sysml new file mode 100644 index 000000000..b1c63b18f --- /dev/null +++ b/sysml/src/examples/Analysis Examples/Vehicle Analysis Demo.sysml @@ -0,0 +1,294 @@ +package 'Vehicle Analysis Demo' { + package VehicleQuantities { + import ScalarValues::*; + import Quantities::*; + import UnitsAndScales::*; + import ISQ::*; + import USCustomaryUnits::*; + + attribute def VolumeUnit :> SIDerivedUnit { + :>> lengthPowerFactor { :>> exponent = 3; } + } + attribute def VolumeValue :> QuantityValue { + :>> num : Real; + :>> mRef : VolumeUnit; + } + + attribute def PowerUnit :> SIDerivedUnit { + :>> massPowerFactor { :>> exponent = 1; } + :>> lengthPowerFactor { :>> exponent = 2; } + :>> timePowerFactor { :>> exponent = -3; } + } + attribute def PowerValue :> QuantityValue { + :>> num : Real; + :>> mRef : PowerUnit; + } + + attribute def DistancePerVolumeUnit :> SIDerivedUnit { + :>> lengthPowerFactor { :>> exponent = -2; } + } + attribute def DistancePerVolumeValue :> QuantityValue { + :>> num : Real; + :>> mRef : DistancePerVolumeUnit; + } + + attribute gallon : VolumeUnit = 231.0 * 'in' ** 3; + attribute mpg : DistancePerVolumeUnit = 'mi' / gallon; + } + + package VehicleModel { + import VehicleQuantities::*; + + item def Fuel; + + port def FuelPort { + out item fuel: Fuel; + } + + part def FuelTank { + attribute volumeMax : VolumeValue; + attribute fuelVolume : VolumeValue; + attribute fuelLevel : Real = fuelVolume / volumeMax; + + port fuelInPort : ~FuelPort; + port fuelOutPort : FuelPort; + } + + part def Wheel { + attribute diameter : LengthValue; + } + + part def Vehicle { + attribute mass : MassValue; + attribute cargoMass : MassValue; + + attribute wheelDiameter : LengthValue; + attribute driveTrainEfficiency : Real; + + attribute fuelEconomy_city : DistancePerVolumeValue; + attribute fuelEconomy_highway : DistancePerVolumeValue; + + port fuelInPort : ~FuelPort; + } + + part vehicle_c1 : Vehicle { + port :>> fuelInPort { + in item :>> fuel; + } + + part fuelTank : FuelTank { + port :>> fuelInPort { + in item :>> fuel; + } + } + + bind fuelInPort::fuel = fuelTank::fuelInPort::fuel; + + part wheel : Wheel[4] { + :>> diameter = wheelDiameter; + } + } + } + + package FuelEconomyRequirementsModel { + import VehicleQuantities::*; + + requirement def FuelEconomyRequirement { + attribute actualFuelEconomy : DistancePerVolumeValue; + attribute requiredFuelEconomy : DistancePerVolumeValue; + + require constraint { actualFuelEconomy >= requiredFuelEconomy } + } + + requirement cityFuelEconomyRequirement : FuelEconomyRequirement { + :>> requiredFuelEconomy = 25@[mpg]; + } + + requirement highwayFuelEconomyRequirement : FuelEconomyRequirement { + :>> requiredFuelEconomy = 30@[mpg]; + } + } + + package DynamicsModel { + import VehicleQuantities::*; + + calc def Acceleration(p : PowerValue, m : MassValue, v : SpeedValue) : AccelerationValue = + p / (m * v); + + calc def Velocity(v0 : SpeedValue, a : AccelerationValue, dt : TimeValue) : SpeedValue = + v0 + a * dt; + + calc def Position(x0 : LengthValue, v : SpeedValue, dt : TimeValue) : LengthValue = + x0 + v * dt; + + constraint def StraightLineDynamicsEquations( + p : PowerValue, + m : MassValue, + dt : TimeValue, + x_i : LengthValue, + v_i : SpeedValue, + x_f : LengthValue, + v_f : SpeedValue, + a : AccelerationValue + ) { + attribute v_avg : SpeedValue = (v_i + v_f)/2; + + a == Acceleration(p, m, v_avg) & + v_f == Velocity(v_i, a, dt) & + x_f == Position(x_i, v_avg, dt) + } + + action def StraightLineDynamics ( + in power : PowerValue, + in mass : MassValue, + in delta_t : TimeValue, + in x_in : LengthValue, + in v_in : SpeedValue, + out x_out : LengthValue, + out v_out : SpeedValue, + out a_out : AccelerationValue + ) { + assert constraint dynamics : StraightLineDynamicsEquations ( + p = power, + m = mass, + dt = delta_t, + x_i = x_in, + v_i = v_in, + x_f = x_out, + v_f = v_out, + a = a_out + ); + } + } + + package FuelEconomyAnalysisModel { + import VehicleModel::*; + import FuelEconomyRequirementsModel::*; + import DynamicsModel::*; + import BaseFunctions::size; + import NonScalarValues::SampledFunctionValue; + + attribute def ScenarioState { + position : LengthValue; + velocity : SpeedValue; + } + + attribute def NominalScenario :> SampledFunctionValue { + t : TimeValue[*] :>> domain; + s : ScenarioState[*] :>> range; + n : Natural = size(t); + } + + analysis def FuelEconomyAnalysis (vehicle : Vehicle) calculatedFuelEconomy : DistancePerVolumeValue { + in attribute scenario : NominalScenario; + in ref requirement fuelEconomyRequirement : FuelEconomyRequirement; + + objective fuelEconomyAnalysisObjective { + /* + * The objective of this analysis is to determine whether the + * current vehicle design configuration can satisfy the fuel + * economy requirement. + */ + + assume constraint { + vehicle::wheelDiameter == 33@['in'] & + vehicle::driveTrainEfficiency == 0.4 + } + + require fuelEconomyRequirement { + :>> actualFuelEconomy = calculatedFuelEconomy; + } + } + + import scenario::*; + + action dynamicsAnalysis( + out power : PowerValue[*], + out acceleration : AccelerationValue[*] + ) { + /* + * Solve for the required engine power as a function of time + * to support the scenarios. + */ + assert constraint { + {1..n-1}->forAll i ( + StraightLineDynamicsEquations ( + p => power[i], + m => vehicle::mass, + dt => t[i+1] - t[i], + x_i => s.position[i], + v_i => s.velocity[i], + x_f => s.position[i+1], + v_f => s.velocity[i+1], + a => acceleration[i] + ) + ) + } + } + + action fuelConsumptionAnalysis( + in power : PowerValue[*] = dynamicsAnalysis::power, + in acceleration : AccelerationValue[*] = dynamicsAnalysis::acceleration, + out fuelEconomy : DistancePerVolumeValue = calculatedFuelEconomy + ) { + /* + * Solve the engine equations to determine how much fuel is + * consumed. The engine RPM is a function of the speed of the + * vehicle and the gear state. + */ + } + } +} + + + part vehicleFuelEconomyAnalysisContext { + import FuelEconomyAnalysisModel::*; + + requirement vehicleFuelEconomyRequirementsGroup (vehicle : Vehicle) { + import FuelEconomyRequirementsModel::*; + + requirement vehicleFuelEconomyRequirement_city :> cityFuelEconomyRequirement { + /* The vehicle shall provide a fuel economy that is greater than or equal to + * 25 miles per gallon for the nominal city driving scenarios. + */ + + :>> actualFuelEconomy = vehicle::fuelEconomy_city; + + assume constraint { vehicle::cargoMass == 1000@[lb] } + } + + requirement vehicleFuelEconomyRequirement_highway :> highwayFuelEconomyRequirement { + /* The vehicle shall provide a fuel economy that is greater than or equal to + * 30 miles per gallon for the nominal highway driving scenarios. + */ + + :>> actualFuelEconomy = vehicle::fuelEconomy_highway; + + assume constraint { vehicle::cargoMass == 1000@[lb] } + } + + } + + attribute cityScenario : NominalScenario; + attribute highwayScenario : NominalScenario; + + analysis cityFuelEconomyAnalysis : FuelEconomyAnalysis { + part :>> vehicle = vehicle_c1; + attribute :>> scenario = cityScenario; + requirement :>> fuelEconomyRequirement = cityFuelEconomyRequirement; + } cityFuelEconomy; + + analysis highwayFuelEconomyAnalysis : FuelEconomyAnalysis { + part :>> vehicle = vehicle_c1; + attribute :>> scenario = highwayScenario; + requirement :>> fuelEconomyRequirement = highwayFuelEconomyRequirement; + } highwayFuelEconomy; + + part vehicle_c1_analysized :> vehicle_c1 { + attribute :>> fuelEconomy_city = cityFuelEconomy; + attribute :>> fuelEconomy_highway = highwayFuelEconomy; + } + + satisfy vehicleFuelEconomyRequirementsGroup by vehicle_c1_analysized; + } +} \ No newline at end of file diff --git a/sysml/src/examples/Vehicle Example/VehicleVariabilityModel.sysml b/sysml/src/examples/Variability Examples/VehicleVariabilityModel.sysml similarity index 100% rename from sysml/src/examples/Vehicle Example/VehicleVariabilityModel.sysml rename to sysml/src/examples/Variability Examples/VehicleVariabilityModel.sysml diff --git a/sysml/src/training/02. Part Definitions/Part Definition Example.sysml b/sysml/src/training/02. Part Definitions/Part Definition Example.sysml index 51131e5e2..50e55c714 100644 --- a/sysml/src/training/02. Part Definitions/Part Definition Example.sysml +++ b/sysml/src/training/02. Part Definitions/Part Definition Example.sysml @@ -7,7 +7,7 @@ package 'Part Definition Example' { part eng : Engine; - ref driver : Person; + ref part driver : Person; } attribute def VehicleStatus { diff --git a/sysml/src/training/03. Generalization/Generalization Example.sysml b/sysml/src/training/03. Generalization/Generalization Example.sysml index ae7505d03..249083e0e 100644 --- a/sysml/src/training/03. Generalization/Generalization Example.sysml +++ b/sysml/src/training/03. Generalization/Generalization Example.sysml @@ -3,7 +3,7 @@ package 'Generalization Example' { abstract part def Vehicle; part def HumanDrivenVehicle specializes Vehicle { - ref driver : Person; + ref part driver : Person; } part def PoweredVehicle :> Vehicle { diff --git a/sysml/src/training/07. Items/Items Example.sysml b/sysml/src/training/07. Items/Items Example.sysml new file mode 100644 index 000000000..c43f0a5f1 --- /dev/null +++ b/sysml/src/training/07. Items/Items Example.sysml @@ -0,0 +1,17 @@ +package 'Items Example' { + import ScalarValues::*; + + item def Fuel; + item def Person; + + part def Vehicle { + attribute mass : Real; + + ref item driver : Person; + + part fuelTank { + item fuel: Fuel; + } + } + +} \ No newline at end of file diff --git a/sysml/src/training/07. Individuals/Individuals and Roles-1.sysml b/sysml/src/training/08. Individuals/Individuals and Roles-1.sysml similarity index 100% rename from sysml/src/training/07. Individuals/Individuals and Roles-1.sysml rename to sysml/src/training/08. Individuals/Individuals and Roles-1.sysml diff --git a/sysml/src/training/07. Individuals/Individuals and Snapshots Example.sysml b/sysml/src/training/08. Individuals/Individuals and Snapshots Example.sysml similarity index 100% rename from sysml/src/training/07. Individuals/Individuals and Snapshots Example.sysml rename to sysml/src/training/08. Individuals/Individuals and Snapshots Example.sysml diff --git a/sysml/src/training/07. Individuals/Individuals and Time Slices.sysml b/sysml/src/training/08. Individuals/Individuals and Time Slices.sysml similarity index 100% rename from sysml/src/training/07. Individuals/Individuals and Time Slices.sysml rename to sysml/src/training/08. Individuals/Individuals and Time Slices.sysml diff --git a/sysml/src/training/08. Connectors/Connectors Example.sysml b/sysml/src/training/09. Connections/Connections Example.sysml similarity index 96% rename from sysml/src/training/08. Connectors/Connectors Example.sysml rename to sysml/src/training/09. Connections/Connections Example.sysml index b86c6d267..635dac606 100644 --- a/sysml/src/training/08. Connectors/Connectors Example.sysml +++ b/sysml/src/training/09. Connections/Connections Example.sysml @@ -1,4 +1,4 @@ -package 'Connectors Example' { +package 'Connections Example' { part def WheelHubAssembly; part def WheelAssembly; diff --git a/sysml/src/training/09. Ports/Port Conjugation Example.sysml b/sysml/src/training/10. Ports/Port Conjugation Example.sysml similarity index 79% rename from sysml/src/training/09. Ports/Port Conjugation Example.sysml rename to sysml/src/training/10. Ports/Port Conjugation Example.sysml index 221e16ad9..d325f9fa4 100644 --- a/sysml/src/training/09. Ports/Port Conjugation Example.sysml +++ b/sysml/src/training/10. Ports/Port Conjugation Example.sysml @@ -6,8 +6,8 @@ package 'Port Conjugation Example' { port def FuelPort { attribute temperature : Temp; - out ref fuelSupply : Fuel; - in ref fuelReturn : Fuel; + out ref item fuelSupply : Fuel; + in ref item fuelReturn : Fuel; } part def FuelTank { diff --git a/sysml/src/training/09. Ports/Port Example.sysml b/sysml/src/training/10. Ports/Port Example.sysml similarity index 70% rename from sysml/src/training/09. Ports/Port Example.sysml rename to sysml/src/training/10. Ports/Port Example.sysml index f63bc1547..7c65eba0a 100644 --- a/sysml/src/training/09. Ports/Port Example.sysml +++ b/sysml/src/training/10. Ports/Port Example.sysml @@ -6,14 +6,14 @@ package 'Port Example' { port def FuelOutPort { attribute temperature : Temp; - out ref fuelSupply : Fuel; - in ref fuelReturn : Fuel; + out ref item fuelSupply : Fuel; + in ref item fuelReturn : Fuel; } port def FuelInPort { attribute temperature : Temp; - out ref fuelSupply : Fuel; - in ref fuelReturn : Fuel; + out ref item fuelSupply : Fuel; + in ref item fuelReturn : Fuel; } part def FuelTankAssembly { diff --git a/sysml/src/training/10. Interfaces/Interface Decomposition Example.sysml b/sysml/src/training/11. Interfaces/Interface Decomposition Example.sysml similarity index 100% rename from sysml/src/training/10. Interfaces/Interface Decomposition Example.sysml rename to sysml/src/training/11. Interfaces/Interface Decomposition Example.sysml diff --git a/sysml/src/training/10. Interfaces/Interface Example.sysml b/sysml/src/training/11. Interfaces/Interface Example.sysml similarity index 100% rename from sysml/src/training/10. Interfaces/Interface Example.sysml rename to sysml/src/training/11. Interfaces/Interface Example.sysml diff --git a/sysml/src/training/11. Binding Connectors/Binding Connectors Example-1.sysml b/sysml/src/training/12. Binding Connectors/Binding Connectors Example-1.sysml similarity index 66% rename from sysml/src/training/11. Binding Connectors/Binding Connectors Example-1.sysml rename to sysml/src/training/12. Binding Connectors/Binding Connectors Example-1.sysml index b98ed2716..0a4576bb4 100644 --- a/sysml/src/training/11. Binding Connectors/Binding Connectors Example-1.sysml +++ b/sysml/src/training/12. Binding Connectors/Binding Connectors Example-1.sysml @@ -8,21 +8,21 @@ package 'Binding Connectors Example-1' { part vehicle : Vehicle { part tank : FuelTankAssembly { port redefines fuelTankPort { - out ref redefines fuelSupply; - in ref redefines fuelReturn; + out ref item redefines fuelSupply; + in ref item redefines fuelReturn; } bind fuelTankPort::fuelSupply = pump::pumpOut; bind fuelTankPort::fuelReturn = tank::fuelIn; part pump : FuelPump { - out ref pumpOut : Fuel; - in ref pumpIn : Fuel; + out ref item pumpOut : Fuel; + in ref item pumpIn : Fuel; } part tank : FuelTank { - out ref fuelOut : Fuel; - in ref fuelIn : Fuel; + out ref item fuelOut : Fuel; + in ref item fuelIn : Fuel; } } } diff --git a/sysml/src/training/11. Binding Connectors/Binding Connectors Example-2.sysml b/sysml/src/training/12. Binding Connectors/Binding Connectors Example-2.sysml similarity index 54% rename from sysml/src/training/11. Binding Connectors/Binding Connectors Example-2.sysml rename to sysml/src/training/12. Binding Connectors/Binding Connectors Example-2.sysml index 4c2e3c99f..351cfb9bd 100644 --- a/sysml/src/training/11. Binding Connectors/Binding Connectors Example-2.sysml +++ b/sysml/src/training/12. Binding Connectors/Binding Connectors Example-2.sysml @@ -8,18 +8,18 @@ package 'Binding Connectors Example-2' { part vehicle : Vehicle { part tank : FuelTankAssembly { port redefines fuelTankPort { - out ref redefines fuelSupply; - in ref redefines fuelReturn; + out ref item redefines fuelSupply; + in ref item redefines fuelReturn; } part pump : FuelPump { - out ref pumpOut : Fuel = fuelTankPort::fuelSupply; - in ref pumpIn : Fuel; + out ref item pumpOut : Fuel = fuelTankPort::fuelSupply; + in ref item pumpIn : Fuel; } part tank : FuelTank { - out ref fuelOut : Fuel; - in ref fuelIn : Fuel = fuelTankPort::fuelReturn; + out ref item fuelOut : Fuel; + in ref item fuelIn : Fuel = fuelTankPort::fuelReturn; } } } diff --git a/sysml/src/training/12. Item Flows/Streaming Example.sysml b/sysml/src/training/13. Item Flows/Streaming Example.sysml similarity index 82% rename from sysml/src/training/12. Item Flows/Streaming Example.sysml rename to sysml/src/training/13. Item Flows/Streaming Example.sysml index 6db623be3..4b43a5b88 100644 --- a/sysml/src/training/12. Item Flows/Streaming Example.sysml +++ b/sysml/src/training/13. Item Flows/Streaming Example.sysml @@ -11,15 +11,15 @@ package 'Streaming Example' { part vehicle : Vehicle { part tankAssy : FuelTankAssembly { port fuelTankPort { - out ref fuelSupply; - in ref fuelReturn; + out ref item fuelSupply; + in ref item fuelReturn; } } part eng : Engine { port engineFuelPort { - in ref fuelSupply; - out ref fuelReturn; + in ref item fuelSupply; + out ref item fuelReturn; } } diff --git a/sysml/src/training/12. Item Flows/Streaming Interface Example.sysml b/sysml/src/training/13. Item Flows/Streaming Interface Example.sysml similarity index 88% rename from sysml/src/training/12. Item Flows/Streaming Interface Example.sysml rename to sysml/src/training/13. Item Flows/Streaming Interface Example.sysml index bee73e0e9..cfcc27a7e 100644 --- a/sysml/src/training/12. Item Flows/Streaming Interface Example.sysml +++ b/sysml/src/training/13. Item Flows/Streaming Interface Example.sysml @@ -5,12 +5,12 @@ package 'Streaming Interface Example' { interface def FuelInterface { end supplierPort : FuelOutPort { - out ref fuelSupply; + out ref item fuelSupply; in ref fuelReturn; } end consumerPort : FuelInPort { - in ref fuelSupply; - out ref fuelReturn; + in ref item fuelSupply; + out ref item fuelReturn; } stream supplierPort::fuelSupply to consumerPort::fuelSupply; diff --git a/sysml/src/training/13. Action Definitions/Activity Example-1.sysml b/sysml/src/training/14. Action Definitions/Action Definition Example-1.sysml similarity index 100% rename from sysml/src/training/13. Action Definitions/Activity Example-1.sysml rename to sysml/src/training/14. Action Definitions/Action Definition Example-1.sysml diff --git a/sysml/src/training/13. Action Definitions/Activity Example-2.sysml b/sysml/src/training/14. Action Definitions/Action Definition Example-2.sysml similarity index 100% rename from sysml/src/training/13. Action Definitions/Activity Example-2.sysml rename to sysml/src/training/14. Action Definitions/Action Definition Example-2.sysml diff --git a/sysml/src/training/14. Actions/Action Decomposition.sysml b/sysml/src/training/15. Actions/Action Decomposition.sysml similarity index 100% rename from sysml/src/training/14. Actions/Action Decomposition.sysml rename to sysml/src/training/15. Actions/Action Decomposition.sysml diff --git a/sysml/src/training/15. Succession/Conditional Succession Example.sysml b/sysml/src/training/16. Succession/Conditional Succession Example-1.sysml similarity index 93% rename from sysml/src/training/15. Succession/Conditional Succession Example.sysml rename to sysml/src/training/16. Succession/Conditional Succession Example-1.sysml index 68d5b40bd..c475c7e28 100644 --- a/sysml/src/training/15. Succession/Conditional Succession Example.sysml +++ b/sysml/src/training/16. Succession/Conditional Succession Example-1.sysml @@ -1,4 +1,4 @@ -package 'Conditional Succession Example' { +package 'Conditional Succession Example-1' { part def Scene; part def Image { isWellFocused: ScalarValues::Boolean; diff --git a/sysml/src/training/16. Succession/Conditional Succession Example-2.sysml b/sysml/src/training/16. Succession/Conditional Succession Example-2.sysml new file mode 100644 index 000000000..69636f926 --- /dev/null +++ b/sysml/src/training/16. Succession/Conditional Succession Example-2.sysml @@ -0,0 +1,26 @@ +package 'Conditional Succession Example-2' { + part def Scene; + part def Image { + isWellFocused: ScalarValues::Boolean; + } + part def Picture; + + action def Focus(in scene : Scene, out image : Image); + action def Shoot(in image: Image, out picture : Picture); + action def TakePicture(in scene : Scene, out picture : Picture); + + action takePicture : TakePicture (in scene, out picture) { + action focus: Focus ( + in scene = takePicture::scene, + out image + ); + + if focus::image::isWellFocused then shoot; + + action shoot: Shoot ( + in image stream from focus::image, + out picture = takePicture::picture + ); + } + +} \ No newline at end of file diff --git a/sysml/src/training/15. Succession/Succession Example-1.sysml b/sysml/src/training/16. Succession/Succession Example-1.sysml similarity index 100% rename from sysml/src/training/15. Succession/Succession Example-1.sysml rename to sysml/src/training/16. Succession/Succession Example-1.sysml diff --git a/sysml/src/training/15. Succession/Succession Example-2.sysml b/sysml/src/training/16. Succession/Succession Example-2.sysml similarity index 100% rename from sysml/src/training/15. Succession/Succession Example-2.sysml rename to sysml/src/training/16. Succession/Succession Example-2.sysml diff --git a/sysml/src/training/16. Signaling/Signaling Example.sysml b/sysml/src/training/17. Signaling/Signaling Example.sysml similarity index 100% rename from sysml/src/training/16. Signaling/Signaling Example.sysml rename to sysml/src/training/17. Signaling/Signaling Example.sysml diff --git a/sysml/src/training/17. Control/Camera.sysml b/sysml/src/training/18. Control/Camera.sysml similarity index 100% rename from sysml/src/training/17. Control/Camera.sysml rename to sysml/src/training/18. Control/Camera.sysml diff --git a/sysml/src/training/17. Control/Decision Example.sysml b/sysml/src/training/18. Control/Decision Example.sysml similarity index 100% rename from sysml/src/training/17. Control/Decision Example.sysml rename to sysml/src/training/18. Control/Decision Example.sysml diff --git a/sysml/src/training/17. Control/Fork Join Example.sysml b/sysml/src/training/18. Control/Fork Join Example.sysml similarity index 100% rename from sysml/src/training/17. Control/Fork Join Example.sysml rename to sysml/src/training/18. Control/Fork Join Example.sysml diff --git a/sysml/src/training/17. Control/Merge Example.sysml b/sysml/src/training/18. Control/Merge Example.sysml similarity index 100% rename from sysml/src/training/17. Control/Merge Example.sysml rename to sysml/src/training/18. Control/Merge Example.sysml diff --git a/sysml/src/training/18. Action Allocation/Action Allocation Example.sysml b/sysml/src/training/19. Action Allocation/Action Allocation Example.sysml similarity index 100% rename from sysml/src/training/18. Action Allocation/Action Allocation Example.sysml rename to sysml/src/training/19. Action Allocation/Action Allocation Example.sysml diff --git a/sysml/src/training/19. State Definitions/State Definition Example-1.sysml b/sysml/src/training/20. State Definitions/State Definition Example-1.sysml similarity index 100% rename from sysml/src/training/19. State Definitions/State Definition Example-1.sysml rename to sysml/src/training/20. State Definitions/State Definition Example-1.sysml diff --git a/sysml/src/training/19. State Definitions/State Definition Example-2.sysml b/sysml/src/training/20. State Definitions/State Definition Example-2.sysml similarity index 100% rename from sysml/src/training/19. State Definitions/State Definition Example-2.sysml rename to sysml/src/training/20. State Definitions/State Definition Example-2.sysml diff --git a/sysml/src/training/20. States/State Actions.sysml b/sysml/src/training/21. States/State Actions.sysml similarity index 100% rename from sysml/src/training/20. States/State Actions.sysml rename to sysml/src/training/21. States/State Actions.sysml diff --git a/sysml/src/training/20. States/State Decomposition-1.sysml b/sysml/src/training/21. States/State Decomposition-1.sysml similarity index 100% rename from sysml/src/training/20. States/State Decomposition-1.sysml rename to sysml/src/training/21. States/State Decomposition-1.sysml diff --git a/sysml/src/training/20. States/State Decomposition-2.sysml b/sysml/src/training/21. States/State Decomposition-2.sysml similarity index 100% rename from sysml/src/training/20. States/State Decomposition-2.sysml rename to sysml/src/training/21. States/State Decomposition-2.sysml diff --git a/sysml/src/training/21. Transitions/Transition Actions.sysml b/sysml/src/training/22. Transitions/Transition Actions.sysml similarity index 100% rename from sysml/src/training/21. Transitions/Transition Actions.sysml rename to sysml/src/training/22. Transitions/Transition Actions.sysml diff --git a/sysml/src/training/21. State Allocation/State Allocation Example.sysml b/sysml/src/training/23. State Allocation/State Allocation Example.sysml similarity index 100% rename from sysml/src/training/21. State Allocation/State Allocation Example.sysml rename to sysml/src/training/23. State Allocation/State Allocation Example.sysml diff --git a/sysml/src/training/23. Expressions/MassRollup.sysml b/sysml/src/training/24. Expressions/MassRollup.sysml similarity index 100% rename from sysml/src/training/23. Expressions/MassRollup.sysml rename to sysml/src/training/24. Expressions/MassRollup.sysml diff --git a/sysml/src/training/23. Expressions/VehicleMasses.sysml b/sysml/src/training/24. Expressions/VehicleMasses.sysml similarity index 100% rename from sysml/src/training/23. Expressions/VehicleMasses.sysml rename to sysml/src/training/24. Expressions/VehicleMasses.sysml diff --git a/sysml/src/training/24. Calculations/Calculation Definitions.sysml b/sysml/src/training/25. Calculations/Calculation Definitions.sysml similarity index 56% rename from sysml/src/training/24. Calculations/Calculation Definitions.sysml rename to sysml/src/training/25. Calculations/Calculation Definitions.sysml index c17c588cb..1d149005c 100644 --- a/sysml/src/training/24. Calculations/Calculation Definitions.sysml +++ b/sysml/src/training/25. Calculations/Calculation Definitions.sysml @@ -1,13 +1,10 @@ package 'Calculation Definitions' { import ScalarValues::Real; import RealFunctions::Sqrt; + import Quantities::QuantityValue; + import ISQ::*; - attribute def PowerValue :> Real; - attribute def MassValue :> Real; - attribute def AccelValue :> Real; - attribute def VelocityValue :> Real; - attribute def LengthValue :> Real; - attribute def TimeValue :> Real; + attribute def PowerValue :> QuantityValue; calc def Power (whlpwr : PowerValue, Cd : Real, Cf : Real, tm : MassValue, v : VelocityValue ) : PowerValue { attribute drag = Cd * v; @@ -16,11 +13,11 @@ package 'Calculation Definitions' { whlpwr - drag - friction } - calc def Acceleration (dt : TimeValue, tm : MassValue, tp: PowerValue) : AccelValue { - Sqrt(tp / (2 * tm * dt)) + calc def Acceleration (tp: PowerValue, tm : MassValue, v : VelocityValue) : AccelerationValue { + tp / (tm * v) } - calc def Velocity (dt : TimeValue, v0 : VelocityValue, a : AccelValue) : VelocityValue = v0 + a * dt; + calc def Velocity (dt : TimeValue, v0 : VelocityValue, a : AccelerationValue) : VelocityValue = v0 + a * dt; calc def Position (dt : TimeValue, x0 : LengthValue, v : VelocityValue) : LengthValue = x0 + v * dt; } \ No newline at end of file diff --git a/sysml/src/training/24. Calculations/Calculation Usages-1.sysml b/sysml/src/training/25. Calculations/Calculation Usages-1.sysml similarity index 88% rename from sysml/src/training/24. Calculations/Calculation Usages-1.sysml rename to sysml/src/training/25. Calculations/Calculation Usages-1.sysml index 45441cd60..75ccdd588 100644 --- a/sysml/src/training/24. Calculations/Calculation Usages-1.sysml +++ b/sysml/src/training/25. Calculations/Calculation Usages-1.sysml @@ -15,9 +15,9 @@ package 'Calculation Usages-1' { out x_out : LengthValue ) { calc acc : Acceleration ( - dt = delta_t, - tm = mass, - tp = Power(wheelPower, C_d, C_f, mass, v_in) + tp = Power(wheelPower, C_d, C_f, mass, v_in), + tm = mass, + v = v_in ) return a; calc vel : Velocity ( diff --git a/sysml/src/training/24. Calculations/Calculation Usages-2.sysml b/sysml/src/training/25. Calculations/Calculation Usages-2.sysml similarity index 87% rename from sysml/src/training/24. Calculations/Calculation Usages-2.sysml rename to sysml/src/training/25. Calculations/Calculation Usages-2.sysml index a3877e355..7656e9407 100644 --- a/sysml/src/training/24. Calculations/Calculation Usages-2.sysml +++ b/sysml/src/training/25. Calculations/Calculation Usages-2.sysml @@ -15,7 +15,7 @@ package 'Calculation Usages-2' { calc updateState(delta_t : TimeValue, currState : DynamicState) : DynamicState { attribute totalPower : PowerValue = Power(wheelPower, C_d, C_f, mass, currState::v); attribute newState : DynamicState { - :>> v = Velocity(delta_t, currState::v, Acceleration(delta_t, mass, totalPower)); + :>> v = Velocity(delta_t, currState::v, Acceleration(totalPower, mass, currState::v)); :>> x = Position(delta_t, currState::x, currState::v); } diff --git a/sysml/src/training/25. Constraints/Analytical Constraints.sysml b/sysml/src/training/25. Constraints/Analytical Constraints.sysml deleted file mode 100644 index 488678ba7..000000000 --- a/sysml/src/training/25. Constraints/Analytical Constraints.sysml +++ /dev/null @@ -1,26 +0,0 @@ -package 'Analytical Constraints' { - import 'Calculation Definitions'::*; - - action def StraightLineVehicleDynamics ( - in dt : TimeValue, - in whlpwr : PowerValue, - in Cd : Real, - in Cf: Real, - in tm : MassValue, - in v_i : VelocityValue, - in x_i : LengthValue, - out a_f : AccelValue, - out v_f : VelocityValue, - out x_f : LengthValue ) { - - assert constraint { - attribute tp : PowerValue; - - tp == Power(whlpwr, Cd, Cf, tm, (v_i + v_f)/2) & - a_f == Acceleration(dt, tm, tp) & - v_f == Velocity(dt, v_i, a_f) & - x_f == Position(dt, x_i, v_i) - } - } - -} \ No newline at end of file diff --git a/sysml/src/training/26. Constraints/Analytical Constraints.sysml b/sysml/src/training/26. Constraints/Analytical Constraints.sysml new file mode 100644 index 000000000..80f322628 --- /dev/null +++ b/sysml/src/training/26. Constraints/Analytical Constraints.sysml @@ -0,0 +1,42 @@ +package 'Analytical Constraints' { + import 'Calculation Definitions'::*; + + constraint def StraightLineDynamicsEquations( + p : PowerValue, + m : MassValue, + dt : TimeValue, + x_i : LengthValue, + v_i : VelocityValue, + x_f : LengthValue, + v_f : VelocityValue, + a : AccelerationValue + ) { + attribute v_avg : VelocityValue = (v_i + v_f)/2; + + a == Acceleration(p, m, v_avg) & + v_f == Velocity(dt, v_i, a) & + x_f == Position(dt, x_i, v_avg) + } + + action def StraightLineDynamics ( + in power : PowerValue, + in mass : MassValue, + in delta_t : TimeValue, + in x_in : LengthValue, + in v_in : VelocityValue, + out x_out : LengthValue, + out v_out : VelocityValue, + out a_out : AccelerationValue + ) { + assert constraint dynamics : StraightLineDynamicsEquations ( + p = power, + m = mass, + dt = delta_t, + x_i = x_in, + v_i = v_in, + x_f = x_out, + v_f = v_out, + a = a_out + ); + } +} \ No newline at end of file diff --git a/sysml/src/training/25. Constraints/Constraint Assertions-1.sysml b/sysml/src/training/26. Constraints/Constraint Assertions-1.sysml similarity index 100% rename from sysml/src/training/25. Constraints/Constraint Assertions-1.sysml rename to sysml/src/training/26. Constraints/Constraint Assertions-1.sysml diff --git a/sysml/src/training/25. Constraints/Constraint Assertions-2.sysml b/sysml/src/training/26. Constraints/Constraint Assertions-2.sysml similarity index 100% rename from sysml/src/training/25. Constraints/Constraint Assertions-2.sysml rename to sysml/src/training/26. Constraints/Constraint Assertions-2.sysml diff --git a/sysml/src/training/25. Constraints/Constraints Example-1.sysml b/sysml/src/training/26. Constraints/Constraints Example-1.sysml similarity index 100% rename from sysml/src/training/25. Constraints/Constraints Example-1.sysml rename to sysml/src/training/26. Constraints/Constraints Example-1.sysml diff --git a/sysml/src/training/25. Constraints/Constraints Example-2.sysml b/sysml/src/training/26. Constraints/Constraints Example-2.sysml similarity index 100% rename from sysml/src/training/25. Constraints/Constraints Example-2.sysml rename to sysml/src/training/26. Constraints/Constraints Example-2.sysml diff --git a/sysml/src/training/25. Constraints/Derivation Constraints.sysml b/sysml/src/training/26. Constraints/Derivation Constraints.sysml similarity index 100% rename from sysml/src/training/25. Constraints/Derivation Constraints.sysml rename to sysml/src/training/26. Constraints/Derivation Constraints.sysml diff --git a/sysml/src/training/26. Requirements/Requirement Definitions.sysml b/sysml/src/training/27. Requirements/Requirement Definitions.sysml similarity index 100% rename from sysml/src/training/26. Requirements/Requirement Definitions.sysml rename to sysml/src/training/27. Requirements/Requirement Definitions.sysml diff --git a/sysml/src/training/26. Requirements/Requirement Groups.sysml b/sysml/src/training/27. Requirements/Requirement Groups.sysml similarity index 100% rename from sysml/src/training/26. Requirements/Requirement Groups.sysml rename to sysml/src/training/27. Requirements/Requirement Groups.sysml diff --git a/sysml/src/training/26. Requirements/Requirement Satisfaction.sysml b/sysml/src/training/27. Requirements/Requirement Satisfaction.sysml similarity index 100% rename from sysml/src/training/26. Requirements/Requirement Satisfaction.sysml rename to sysml/src/training/27. Requirements/Requirement Satisfaction.sysml diff --git a/sysml/src/training/26. Requirements/Requirement Usages.sysml b/sysml/src/training/27. Requirements/Requirement Usages.sysml similarity index 100% rename from sysml/src/training/26. Requirements/Requirement Usages.sysml rename to sysml/src/training/27. Requirements/Requirement Usages.sysml diff --git a/sysml/src/training/28. Analysis/Analysis Case Definition Example.sysml b/sysml/src/training/28. Analysis/Analysis Case Definition Example.sysml new file mode 100644 index 000000000..763baeca4 --- /dev/null +++ b/sysml/src/training/28. Analysis/Analysis Case Definition Example.sysml @@ -0,0 +1,80 @@ +package 'Analysis Case Definition Example' { + import 'Calculation Definitions'::*; + import 'Analytical Constraints'::*; + import USCustomaryUnits::*; + import BaseFunctions::size; + + attribute def DistancePerVolumeValue :> QuantityValue; + attribute gallon = 231.0 * 'in' ** 3; + attribute mpg = 'mi' / gallon; + + part def Vehicle { + attribute mass : MassValue; + attribute cargoMass : MassValue; + + attribute wheelDiameter : LengthValue; + attribute driveTrainEfficiency : Real; + + attribute fuelEconomy_city : DistancePerVolumeValue; + attribute fuelEconomy_highway : DistancePerVolumeValue; + } + + analysis def FuelEconomyAnalysis (vehicle : Vehicle) fuelEconomyResult : DistancePerVolumeValue { + + objective fuelEconomyAnalysisObjective { + /* + * The objective of this analysis is to determine whether the + * subject vehicle can satisfy the fuel economy requirement. + */ + + assume constraint { + vehicle::wheelDiameter == 33@['in'] & + vehicle::driveTrainEfficiency == 0.4 + } + + require constraint { + fuelEconomyResult > 30@['mi' / gallon] + } + } + + attribute scenario[*] { + time : TimeValue; + position : LengthValue; + velocity : VelocityValue; + } + + action solveForPower ( + out power : PowerValue[*], + out acceleration : AccelerationValue[*] + ) { + /* + * Solve for the required engine power as a function of time + * to support the scenario. + */ + assert constraint { + {1..size(scenario)-1}->forAll i ( + StraightLineDynamicsEquations ( + power[i], + vehicle::mass, + scenario::time[i+1] - scenario::time[i], + scenario::position[i], + scenario::velocity[i], + scenario::position[i+1], + scenario::velocity[i+1], + acceleration[i+1] + ) + ) + } + } + + then action solveForFuelConsumption ( + in power : PowerValue[*] = solveForPower::power, + out fuelEconomy : DistancePerVolumeValue = fuelEconomyResult + ) { + /* + * Solve the engine equations to determine how much fuel is + * consumed. + */ + } + } +} \ No newline at end of file diff --git a/sysml/src/training/28. Analysis/Analysis Case Usage Example.sysml b/sysml/src/training/28. Analysis/Analysis Case Usage Example.sysml new file mode 100644 index 000000000..2a09782c0 --- /dev/null +++ b/sysml/src/training/28. Analysis/Analysis Case Usage Example.sysml @@ -0,0 +1,32 @@ +package 'Analysis Case Usage Example' { + import 'Analysis Case Definition Example'::*; + + part vehicleFuelEconomyAnalysisContext { + requirement vehicleFuelEconomyRequirements (vehicle : Vehicle) { + // ... + } + + attribute cityScenario :> FuelEconomyAnalysis::scenario = { //* ... */ }; + attribute highwayScenario :> FuelEconomyAnalysis::scenario = { //* ... */ }; + + analysis cityFuelEconomyAnalysis : FuelEconomyAnalysis { + part :>> vehicle = vehicle; + attribute :>> scenario = cityScenario; + } cityFuelEconomy; + + analysis highwayFuelEconomyAnalysis : FuelEconomyAnalysis { + part :>> vehicle = vehicle; + attribute :>> scenario = highwayScenario; + } highwayFuelEconomy; + + part vehicle : Vehicle { + // ... + + attribute :>> fuelEconomy_city = cityFuelEconomy; + attribute :>> fuelEconomy_highway = highwayFuelEconomy; + } + + satisfy vehicleFuelEconomyRequirements by vehicle; + } + +} \ No newline at end of file diff --git a/sysml/src/training/29. Variability/Variation Configuration.sysml b/sysml/src/training/29. Variability/Variation Configuration.sysml new file mode 100644 index 000000000..fe289ddf5 --- /dev/null +++ b/sysml/src/training/29. Variability/Variation Configuration.sysml @@ -0,0 +1,14 @@ +package 'Variation Configuration' { + import 'Variation Usages'::*; + + part vehicle4Cyl :> vehicleFamily { + part redefines engine = engine::'4cylEngine'; + part redefines transmission = transmission::manualTransmission; + } + + part vehicle6Cyl :> vehicleFamily { + part redefines engine = engine::'6cylEngine'; + part redefines transmission = transmission::manualTransmission; + } + +} \ No newline at end of file diff --git a/sysml/src/training/29. Variability/Variation Definitions.sysml b/sysml/src/training/29. Variability/Variation Definitions.sysml new file mode 100644 index 000000000..87c9b0eb4 --- /dev/null +++ b/sysml/src/training/29. Variability/Variation Definitions.sysml @@ -0,0 +1,35 @@ +package 'Variation Definitions' { + import ScalarValues::Real; + import SI::mm; + + attribute def Diameter :> Real; + + part def Cylinder { + attribute diameter : Diameter[1]; + } + + part def Engine { + part cylinder : Cylinder[2..*]; + } + + part '4cylEngine' : Engine { + part redefines cylinder[4]; + } + + part '6cylEngine' : Engine { + part redefines cylinder[6]; + } + + // Variability model + + variation attribute def DiameterChoices :> Diameter { + variant attribute diameterSmall = 70@[mm]; + variant attribute diameterLarge = 100@[mm]; + } + + variation part def EngineChoices :> Engine { + variant '4cylEngine'; + variant '6cylEngine'; + } + +} \ No newline at end of file diff --git a/sysml/src/training/29. Variability/Variation Usages.sysml b/sysml/src/training/29. Variability/Variation Usages.sysml new file mode 100644 index 000000000..f338898b4 --- /dev/null +++ b/sysml/src/training/29. Variability/Variation Usages.sysml @@ -0,0 +1,25 @@ +package 'Variation Usages' { + import 'Variation Definitions'::*; + + part def Vehicle; + part def Transmission; + part manualTransmission; + part automaticTransmission; + + abstract part vehicleFamily : Vehicle { + part engine : EngineChoices[1]; + + variation part transmission : Transmission[1] { + variant manualTransmission; + variant automaticTransmission; + } + + assert constraint { + (engine == engine::'4cylEngine' & + transmission == transmission::manualTransmission) ^ + (engine == engine::'6cylEngine' & + transmission == transmission::automaticTransmission) + } + } + +} \ No newline at end of file