diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/AnalysisProblemSpace.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/AnalysisProblemSpace.sysml index 72807b2..c234bf1 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/AnalysisProblemSpace.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/AnalysisProblemSpace.sysml @@ -11,7 +11,7 @@ package analysisProblemSpace { // **General Analysis Definition: Risk-Adjusted Profitability Calculation** analysis def RiskAdjustedProfitability { - subject miningcorporation : MiningCorporation; + subject miningcorporation : Domain::MiningCorporation; objective { doc /* Evaluates profitability across different security zones (High Sec, Low Sec, Null Sec) @@ -112,7 +112,7 @@ package analysisProblemSpace { in operationalCosts = 200000.0; // ISK/hour (high cost due to logistics, security) in survivalProbability = 50.0; // Very high risk, frequent losses } - part analysisMiningCorporation : MiningCorporation ; + part analysisMiningCorporation : Domain::MiningCorporation ; satisfy BUS01_1 by analysisMiningCorporation; } diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/BusinessCaseOpsCon.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/BusinessCaseOpsCon.sysml index f028e18..889f66a 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/BusinessCaseOpsCon.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/BusinessCaseOpsCon.sysml @@ -44,14 +44,14 @@ package BusinessRequirements { doc /* The mining organization shall guarantee a profitability of 25.000 ISK/hour in order to provide * suficcient incentive to pilots to work for the corporation. */ - subject miningFCorporation : MiningCorporation; + subject miningFCorporation : Domain::MiningCorporation; attribute profitability : Real; require constraint { profitability >= 25000 } frame concern ProfitabilityConcern; } requirement profitabilityRequirement : ProfitabilityRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> profitability = miningCorporation.minimumProfit ; } } \ No newline at end of file diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/Concerns.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/Concerns.sysml index 2e6166b..206c315 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/Concerns.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/Concerns.sysml @@ -37,7 +37,7 @@ package StakeholderConcerns { // Concerns Derived from the Business Case concern def ProfitabilityConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall ensure that mining operations generate sufficient ISK/hour @@ -48,7 +48,7 @@ package StakeholderConcerns { } concern def OperationalCostsConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall minimize operational costs (e.g., ship replacements, @@ -59,7 +59,7 @@ package StakeholderConcerns { } concern def ScalabilityConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; assume constraint { doc /* The Mining Corporation assumes that mining operations can scale effectively with @@ -70,7 +70,7 @@ package StakeholderConcerns { } concern def MarketResponsivenessConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall adapt mining operations to fluctuating market demands @@ -83,7 +83,7 @@ package StakeholderConcerns { // Concerns Derived from the ConOps concern def SecurityConcern { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; require constraint { doc /* The Mining Frigate shall ensure safety and survivability in hostile environments @@ -95,7 +95,7 @@ package StakeholderConcerns { } concern def ResourceAvailabilityConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall ensure sufficient access to high-value asteroids, @@ -106,7 +106,7 @@ package StakeholderConcerns { } concern def DeploymentEfficiencyConcern { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; require constraint { doc /* The Mining Frigate shall ensure rapid and efficient movement between resource @@ -117,7 +117,7 @@ package StakeholderConcerns { } concern def ThreatNeutralizationConcern { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; require constraint { doc /* The Mining Frigate shall mitigate risks from NPC pirates and hostile players @@ -131,7 +131,7 @@ package StakeholderConcerns { // Concerns Derived from the MoEs concern def TotalProfitabilityConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall maximize the total ISK/hour generated from mining @@ -142,7 +142,7 @@ package StakeholderConcerns { } concern def OreYieldConcern { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; require constraint { doc /* The Mining Frigate shall maximize ore yield per frigate or fleet while avoiding @@ -153,7 +153,7 @@ package StakeholderConcerns { } concern def SurvivabilityConcern { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; require constraint { doc /* The Mining Frigate shall ensure high survivability in hostile or dangerous environments. */ @@ -164,7 +164,7 @@ package StakeholderConcerns { } concern def FleetDeploymentEfficiencyConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall ensure optimal fleet deployment to maximize ore extraction @@ -176,7 +176,7 @@ package StakeholderConcerns { } concern def OreDeliveryEfficiencyConcern { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; require constraint { doc /* The Mining Frigate shall ensure fast and efficient transport of mined ore to stations @@ -187,7 +187,7 @@ package StakeholderConcerns { } concern def RiskAdjustedProfitabilityConcern { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; require constraint { doc /* The Mining Corporation shall balance profitability with the risks of operating in diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/Domain.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/Domain.sysml index ae9e243..b3c8610 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/Domain.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/Domain.sysml @@ -127,8 +127,8 @@ package Domain { } // % //exhibits a predefined state - part miningFrigate : MiningFrigate [1..*] { - exhibit miningFrigatesStates { + part miningFrigate : MiningFrigate::MiningFrigate [1..*] { + exhibit MiningFrigate::miningFrigatesStates { in miningFrigates = miningFrigate; } // Cause and Effect Occurrences @@ -299,7 +299,7 @@ package Domain { interface def PowerDockIF { end shipDockingPort : DockingPort; end stationDockingPort : ~DockingPort; - flow of Power from stationDockingPort.power to shipDockingPort.power; + flow of Power from stationDockingPort.charge to shipDockingPort.charge; flow of CargoContainer from shipDockingPort.cargo to stationDockingPort.cargo; } interface def AsteroidOreIF { diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDecl.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDecl.sysml index a12d20b..ac4dc73 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDecl.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDecl.sysml @@ -6,62 +6,62 @@ package MiningCorporationRequirementsDecl { // **Mining Corporation Requirement Declarations** requirement profitabilityRequirement : ProfitabilityRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> minimumProfit = miningCorporation.minimumProfit; } requirement fleetUtilizationRequirement : FleetUtilizationRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> fleetUtilization = miningCorporation.fleetUtilization; } requirement oreExtractionRequirement : OreExtractionRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> oreExtractionRate = miningCorporation.oreExtractionEfficiency; } requirement oreDeliveryEfficiencyRequirement : OreDeliveryEfficiencyRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> oreDeliveryTime = miningCorporation.oreDeliveryEfficiency; } requirement storageCapacityRequirement : StorageCapacityRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> oreStorageCapacity = miningCorporation.storageCapacityUtilization; } requirement fleetSizeRequirement : FleetSizeRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> fleetSize = miningCorporation.fleetSizeEffectiveness; } requirement defenseCapabilityRequirement : DefenseCapabilityRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> securityEscortCoverage = miningCorporation.securityCoverageEffectiveness; } requirement threatResponseTimeRequirement : ThreatResponseTimeRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> threatResponseTime = miningCorporation.threatResponseEffectiveness; } requirement operationalUptimeRequirement : OperationalUptimeRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> operationalUptime = miningCorporation.operationalUptime; } requirement deploymentEfficiencyRequirement : DeploymentEfficiencyRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> deploymentEfficiency = miningCorporation.deploymentEfficiency; } requirement operationalCostControlRequirement : OperationalCostControlRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> operationalCosts = miningCorporation.costEfficiency; } requirement marketAdaptabilityRequirement : MarketAdaptabilityRequirement { - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute :>> marketAdaptability = miningCorporation.marketAdaptability; } } diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDef.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDef.sysml index 82e6e40..a153493 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDef.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/MiningCorporationRequirementsDef.sysml @@ -8,7 +8,7 @@ package MiningCorporationRequirementsDef { requirement def ProfitabilityRequirement { doc /* The mining corporation shall maintain an average profitability of at least 500M ISK per operational cycle, considering ore market value, operational costs, and risk-adjusted returns. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute minimumProfit : Real; require constraint { minimumProfit >= 500000000.0 } // ISK @@ -18,7 +18,7 @@ package MiningCorporationRequirementsDef { requirement def FleetUtilizationRequirement { doc /* The mining corporation shall maintain a fleet utilization rate of at least 80% to ensure high operational efficiency. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute fleetUtilization : Real; require constraint { fleetUtilization >= 80.0 } // % @@ -28,7 +28,7 @@ package MiningCorporationRequirementsDef { // **Resource Extraction and Logistics Requirements** requirement def OreExtractionRequirement { doc /* The mining corporation shall extract at least 1,000,000 m³ of ore per operational cycle. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute oreExtractionRate : Real; require constraint { oreExtractionRate >= 1000000.0 } // m³/cycle @@ -37,7 +37,7 @@ package MiningCorporationRequirementsDef { requirement def OreDeliveryEfficiencyRequirement { doc /* The mining corporation shall ensure an average ore delivery time of no more than 30 minutes per batch. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute oreDeliveryTime : Real; require constraint { oreDeliveryTime <= 1800.0 } // seconds @@ -46,7 +46,7 @@ package MiningCorporationRequirementsDef { requirement def StorageCapacityRequirement { doc /* The mining corporation shall maintain a minimum ore storage capacity of 10,000,000 m³ to accommodate mining operations. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute oreStorageCapacity : Real; require constraint { oreStorageCapacity >= 10000000.0 } // m³ @@ -56,7 +56,7 @@ package MiningCorporationRequirementsDef { // **Fleet and Security Requirements** requirement def FleetSizeRequirement { doc /* The mining corporation shall operate a fleet of at least 10 mining frigates per operational cycle. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute fleetSize : Integer; require constraint { fleetSize >= 10 } @@ -65,7 +65,7 @@ package MiningCorporationRequirementsDef { requirement def DefenseCapabilityRequirement { doc /* The mining corporation shall ensure that at least 30% of mining operations have security escort coverage in Low Sec and Null Sec. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute securityEscortCoverage : Real; require constraint { securityEscortCoverage >= 30.0 } // % @@ -74,7 +74,7 @@ package MiningCorporationRequirementsDef { requirement def ThreatResponseTimeRequirement { doc /* The mining corporation shall ensure that threat response time does not exceed 60 seconds in Low Sec and Null Sec. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute threatResponseTime : Real; require constraint { threatResponseTime <= 60.0 } // seconds @@ -84,7 +84,7 @@ package MiningCorporationRequirementsDef { // **Operational Uptime and Efficiency** requirement def OperationalUptimeRequirement { doc /* The mining corporation shall maintain an operational uptime of at least 85% per cycle. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute operationalUptime : Real; require constraint { operationalUptime >= 85.0 } // % @@ -93,7 +93,7 @@ package MiningCorporationRequirementsDef { requirement def DeploymentEfficiencyRequirement { doc /* The mining corporation shall ensure that at least 90% of planned mining deployments are executed successfully. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute deploymentEfficiency : Real; require constraint { deploymentEfficiency >= 90.0 } // % @@ -102,7 +102,7 @@ package MiningCorporationRequirementsDef { requirement def OperationalCostControlRequirement { doc /* The mining corporation shall minimize operational costs to improve long-term profitability. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute operationalCosts : Real; require constraint { operationalCosts <= 2000000000.0 } // ISK per month @@ -111,7 +111,7 @@ package MiningCorporationRequirementsDef { requirement def MarketAdaptabilityRequirement { doc /* The mining corporation shall adapt its mining operations based on fluctuating ore prices. */ - subject miningCorporation : MiningCorporation; + subject miningCorporation : Domain::MiningCorporation; attribute marketAdaptability : Real; require constraint { marketAdaptability >= 75.0 } // % diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigate.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigate.sysml index 4b8c599..b45255c 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigate.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigate.sysml @@ -7,7 +7,7 @@ private import OperationalUseCaseActions::*; private import Domain::*; - part def MiningFrigate :> Spaceship { + part def MiningFrigate :> Domain::Spaceship { attribute miningRate : Real; // Volume of ore mined per second (m³/s) attribute droneCapacity : Integer; // Number, the maximum number of drones deployable (STRQ04) @@ -25,19 +25,19 @@ part oreHoldExpander: OreHoldExpander [0..2]; // Optional cargo expander module part capacitorBooster: CapacitorBooster [0..1]; // Configurable capacitor booster part defenseTurret: DefenseTurret [0..*]; // Optional defense modules - ref part cargo : CargoContainer [0..*]; - ref part charge : Power; - ref part drone : Drone [0..5]; + ref part cargo : Domain::CargoContainer [0..*]; + ref part charge : Domain::Power; + ref part drone : Domain::Drone [0..5]; - port controlPort : ~PodPort; - port dockingPort : ~DockingPort; - port DefensePort : ~ThreatPort; - port asteroidOrePort : ~AsteroidOrePort; - port droneControlPort: ~DroneControllerPort; + port controlPort : ~Domain::PodPort; + port dockingPort : ~Domain::DockingPort; + port DefensePort : ~Domain::ThreatPort; + port asteroidOrePort : ~Domain::AsteroidOrePort; + port droneControlPort: ~Domain::DroneControllerPort; //actions declaration action activateMiningLaser : ActivateMiningLaser { - } + } } // State Definition for the Mining Frigate @@ -65,19 +65,19 @@ transition docked_to_inGrid first Docked - accept pilotPodUndockCommand : ShipCommand via miningFrigates.controlPort + accept pilotPodUndockCommand : Domain::ShipCommand via miningFrigates.controlPort do action undockFromStation : UndockFromStation {in undockCommand = pilotPodUndockCommand;} then InGrid; transition inGrid_to_docked first InGrid - accept pilotPodDockCommand : ShipCommand via miningFrigates.controlPort + accept pilotPodDockCommand : Domain::ShipCommand via miningFrigates.controlPort do action dockToStation : DockToStation {in dockCommand = pilotPodDockCommand;} then Docked; transition inGrid_to_onWarp first InGrid - accept warpCommand : ShipCommand via miningFrigates.controlPort + accept warpCommand : Domain::ShipCommand via miningFrigates.controlPort do action executeWarpDrive : ExecuteWarpDrive then OnWarp; @@ -89,79 +89,79 @@ //Internal transitions transition unloadCargo first Docked - accept unloadCommand : ShipCommand via miningFrigates.controlPort + accept unloadCommand : Domain::ShipCommand via miningFrigates.controlPort do action transferOre : TransferOre then Docked; transition cycleMining first InGrid - accept miningCommand : ShipCommand via miningFrigates.controlPort + accept miningCommand : Domain::ShipCommand via miningFrigates.controlPort do action activateMiningLaser : ActivateMiningLaser then InGrid; transition scanThreats first InGrid - accept scanCommand : ShipCommand via miningFrigates.controlPort + accept scanCommand : Domain::ShipCommand via miningFrigates.controlPort do action scanForThreats : ScanForThreats then InGrid; transition prioritizeThreat first InGrid - accept threatSignature : ScanSignature via miningFrigates.controlPort + accept threatSignature : Domain::ScanSignature via miningFrigates.controlPort do action prioritizeThreats : PrioritizeThreats then InGrid; transition deployDrones first InGrid - accept droneCommand : ShipCommand via miningFrigates.controlPort + accept droneCommand : Domain::ShipCommand via miningFrigates.controlPort do action selectDronesForDeployment : SelectDronesForDeployment then InGrid; transition navigation first InGrid - accept destinationCommand : ShipCommand via miningFrigates.controlPort + accept destinationCommand : Domain::ShipCommand via miningFrigates.controlPort do action acceptDestination : AcceptDestination then InGrid; transition coursePlot first InGrid - accept courseCommand : ShipCommand via miningFrigates.controlPort + accept courseCommand : Domain::ShipCommand via miningFrigates.controlPort do action plotOptimalCourse : PlotOptimalCourse then InGrid; transition engagePropulsion first InGrid - accept propulsionCommand : ShipCommand via miningFrigates.controlPort + accept propulsionCommand : Domain::ShipCommand via miningFrigates.controlPort do action engagePropulsion : EngagePropulsion then InGrid; transition adjustCourse first InGrid - accept courseCorrection : ShipCommand via miningFrigates.controlPort + accept courseCorrection : Domain::ShipCommand via miningFrigates.controlPort do action monitorAndAdjustCourse : MonitorAndAdjustCourse then InGrid; transition cargoVerification first Docked - accept warehouseStatusCommand : StationCommand via miningFrigates.controlPort + accept warehouseStatusCommand : Domain::StationCommand via miningFrigates.controlPort do action verifyCargoTransfer : VerifyCargoTransfer then Docked; transition detectThreat first InGrid - accept threatScanCommand : ShipCommand via miningFrigates.controlPort + accept threatScanCommand : Domain::ShipCommand via miningFrigates.controlPort do action detectThreat : DetectThreat then InGrid; transition engageDefense first InGrid - accept defenseCommand : ShipCommand via miningFrigates.controlPort + accept defenseCommand : Domain::ShipCommand via miningFrigates.controlPort do action engageDefenses : EngageDefenses then InGrid; transition resupply first Docked - accept shipStatusCommand : ShipCommand via miningFrigates.controlPort + accept shipStatusCommand : Domain::ShipCommand via miningFrigates.controlPort do action verifyResupply : VerifyResupply then Docked; } diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirements.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirements.sysml index d08bfcd..cca4d3f 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirements.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirements.sysml @@ -7,54 +7,54 @@ package MiningFrigateRequirements { //Mining Frigate Requirement assertions for the Mining Frigates requirement oreExtractionEfficiencyRequirementLowSec : OreExtractionEfficiencyRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> miningRateLS = miningFrigate.miningRate ; } requirement cargoCapacityRequirementLowSec : CargoCapacityRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> cargoCapacity = miningFrigate.cargoCapacity ; } requirement survivabilityRequirementLowSec : SurvivabilityRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> shieldStrengthLS = miningFrigate.shieldModule.shieldStrength ; } requirement droneOperationsRequirementLowSec : DroneOperationsRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> droneCapacity = miningFrigate.droneCapacity ; } requirement threatDetectionRequirementLowSec : ThreatDetectionRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> threatDetectionRange = miningFrigate.threatDetectionRange ; } requirement travelEfficiencyRequirementLowSec : TravelEfficiencyRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> warpSpeed = miningFrigate.warpSpeed ; attribute :>> alignTime = miningFrigate.alignTime ; } requirement miningTargetRequirementLowSec : MiningTargetRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> lockedTargets = miningFrigate.lockedTargets ; } requirement dockingRequirementLowSec : DockingRequirement { - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute :>> dockingTime = miningFrigate.dockingTime ; } //Stakeholder Requirement assertions for the Mining Corporation requirement fleetCoordinationRequirementLowSec : FleetCoordinationRequirement { - subject fleetCommander : PilotPod; + subject fleetCommander : Domain::PilotPod; attribute :>> fleetSize = fleetCommander.fleetSize ; } requirement oreCompressionRequirement : OreCompressionRequirement { - subject rorqual : Rorqual; + subject rorqual : Domain::Rorqual; attribute :>> compressionFactor = rorqual.oreCompressionUnit.compressionFactor ; } } \ No newline at end of file diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirementsDef.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirementsDef.sysml index b081d41..e184bbf 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirementsDef.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateRequirementsDef.sysml @@ -9,7 +9,7 @@ package MiningFrigateRequirementsDef { requirement def OreExtractionEfficiencyRequirement { doc /* The Mining Frigate shall extract ore at a minimum rate of 20 m³/minute in High Sec and 50 m³/minute in Low Sec, Null Sec, and Wormhole operations. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute miningRateLS : Real; require constraint { miningRateLS >= 50.0 } // Low Sec, Null Sec, Wormhole (m³/min) @@ -18,7 +18,7 @@ package MiningFrigateRequirementsDef { requirement def CargoCapacityRequirement { doc /* The Mining Frigate shall have a cargo capacity of at least 5,000 m³ (expandable by modules). */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute cargoCapacity : Real; require constraint { cargoCapacity >= 5000.0 } // m³ @@ -28,7 +28,7 @@ package MiningFrigateRequirementsDef { requirement def SurvivabilityRequirement { doc /* The Mining Frigate shall withstand at least 200 DPS in High Sec and 400 DPS in Low Sec, Null Sec, and Wormhole operations. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute shieldStrengthHS : Real; attribute shieldStrengthLS : Real; require constraint { shieldStrengthHS >= 200.0 } // High Sec (DPS) @@ -41,7 +41,7 @@ package MiningFrigateRequirementsDef { requirement def DroneOperationsRequirement { doc /* The Mining Frigate shall support the deployment of at least 5 drones for mining and combat operations. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute droneCapacity : Real; require constraint { droneCapacity >= 5 } // Minimum number of drones @@ -51,7 +51,7 @@ package MiningFrigateRequirementsDef { requirement def ThreatDetectionRequirement { doc /* The Mining Frigate shall detect incoming threats within a range of 20 AU. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute threatDetectionRange : Real; require constraint { threatDetectionRange >= 20.0 } // AU @@ -62,7 +62,7 @@ package MiningFrigateRequirementsDef { requirement def TravelEfficiencyRequirement { doc /* The Mining Frigate shall have a warp speed of at least 5 AU/second and an align time of less than 3 seconds. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute warpSpeed: Real; attribute alignTime: Real; require constraint { warpSpeed >= 5.0 } // Warp speed (AU/second) @@ -73,7 +73,7 @@ package MiningFrigateRequirementsDef { requirement def MiningTargetRequirement { doc /* The Mining Frigate shall lock and mine up to 3 asteroid targets simultaneously. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute lockedTargets : Real; require constraint { lockedTargets <= 3 } // Maximum asteroid targets @@ -82,7 +82,7 @@ package MiningFrigateRequirementsDef { requirement def DockingRequirement { doc /* The Mining Frigate shall dock and offload ore at stations or POS within 1 minute. */ - subject miningFrigate : MiningFrigate; + subject miningFrigate : MiningFrigate::MiningFrigate; attribute dockingTime : Real; require constraint { dockingTime <= 60.0 } // Seconds @@ -91,7 +91,7 @@ package MiningFrigateRequirementsDef { requirement def FleetCoordinationRequirement { doc /* The Fleet Commander shall coordinate mining fleets of up to 10 frigates. */ - subject fleetCommander : PilotPod; + subject fleetCommander : Domain::PilotPod; attribute fleetSize : Real; require constraint { fleetSize <= 10 } // Maximum fleet size @@ -101,7 +101,7 @@ package MiningFrigateRequirementsDef { requirement def OreCompressionRequirement { doc /* The Rorqual shall support onboard ore compression to reduce ore volume by a factor of 10. */ - subject rorqual : Rorqual; + subject rorqual : Domain::Rorqual; attribute compressionFactor : Real; require constraint { compressionFactor == 10.0 } // Compression factor diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateVerificationCases.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateVerificationCases.sysml index ba15f6a..496e679 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateVerificationCases.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/MiningFrigateVerificationCases.sysml @@ -15,7 +15,7 @@ package MiningFrigateRequirementsVerification { // Definition of a test rig that includes all necessary verification parts //Verification actions are assigned to the parts of the verification domain part def MiningFrigateTestRig { - part testMiningFrigate : MiningFrigate; + part testMiningFrigate : MiningFrigate::MiningFrigate; part testEngineer : ShipEngineer; part testEnvironment : TestEnvironment; part dataLogger : DataLogger; @@ -38,7 +38,7 @@ package MiningFrigateRequirementsVerification { doc /* The ShipEngieer is both a stakeholder and an actor in the verification domain */ } - part miningFrigateDUT : MiningFrigate { + part miningFrigateDUT : MiningFrigate::MiningFrigate { doc /* The miningFrigateDUT is a test unit */ perform action collectData; perform action deployDrones; @@ -65,7 +65,7 @@ package MiningFrigateRequirementsVerification { // Verification definitions // Verification Definition for Ore Extraction Efficiency verification def OreExtractionEfficiencyTest { - subject testMiningFrigate : MiningFrigate; + subject testMiningFrigate : MiningFrigate::MiningFrigate; objective oreExtractionEfficiencyVerification { // The subject of the verify is automatically bound to "testMiningFrigate". @@ -76,7 +76,7 @@ package MiningFrigateRequirementsVerification { } action collectData { - in part testMiningFrigate : MiningFrigate = OreExtractionEfficiencyTest::testMiningFrigate; + in part testMiningFrigate : MiningFrigate::MiningFrigate = OreExtractionEfficiencyTest::testMiningFrigate; out miningRateMeasuredHS : Real ; // High Sec (m³/min) out miningRateMeasuredLS : Real; // Low Sec, Null Sec, Wormholes } @@ -95,7 +95,7 @@ package MiningFrigateRequirementsVerification { // Verification Definition for Cargo Capacity verification def CargoCapacityTest { - subject testMiningFrigate : MiningFrigate; + subject testMiningFrigate : MiningFrigate::MiningFrigate; objective cargoCapacityVerification { // The subject of the verify is automatically bound to "testMiningFrigate". @@ -107,7 +107,7 @@ package MiningFrigateRequirementsVerification { } action collectData { - in part testMiningFrigate : MiningFrigate = CargoCapacityTest::testMiningFrigate; + in part testMiningFrigate : MiningFrigate::MiningFrigate = CargoCapacityTest::testMiningFrigate; out cargoCapacityMeasured : Real; } @@ -125,7 +125,7 @@ package MiningFrigateRequirementsVerification { // Verification Definition for Survivability verification def SurvivabilityTest { - subject testMiningFrigate : MiningFrigate; + subject testMiningFrigate : MiningFrigate::MiningFrigate; objective survivabilityVerification { // The subject of the verify is automatically bound to "testMiningFrigate". @@ -137,12 +137,12 @@ package MiningFrigateRequirementsVerification { } action simulateHighSecAttack { - in part testMiningFrigate : MiningFrigate = SurvivabilityTest::testMiningFrigate; + in part testMiningFrigate : MiningFrigate::MiningFrigate = SurvivabilityTest::testMiningFrigate; out shieldStrengthMeasuredHS : Real; // High Sec survivability (DPS) } action simulateLowSecAttack { - in part testMiningFrigate : MiningFrigate = SurvivabilityTest::testMiningFrigate; + in part testMiningFrigate : MiningFrigate::MiningFrigate = SurvivabilityTest::testMiningFrigate; out shieldStrengthMeasuredLS : Real; // Low Sec survivability (DPS) } @@ -160,7 +160,7 @@ package MiningFrigateRequirementsVerification { // Verification Definition for Drone Operations verification def DroneOperationsTest { - subject testMiningFrigate : MiningFrigate; + subject testMiningFrigate : MiningFrigate::MiningFrigate; objective droneOperationsVerification { // The subject of the verify is automatically bound to "testMiningFrigate". @@ -172,7 +172,7 @@ package MiningFrigateRequirementsVerification { } action deployDrones { - in part testMiningFrigate : MiningFrigate = DroneOperationsTest::testMiningFrigate; + in part testMiningFrigate : MiningFrigate::MiningFrigate = DroneOperationsTest::testMiningFrigate; out droneCapacityMeasured : Integer; } @@ -191,7 +191,7 @@ package MiningFrigateRequirementsVerification { // Verification Definition for Threat Detection verification def ThreatDetectionTest { - subject testMiningFrigate : MiningFrigate; + subject testMiningFrigate : MiningFrigate::MiningFrigate; objective threatDetectionVerification { // The subject of the verify is automatically bound to "testMiningFrigate". @@ -203,7 +203,7 @@ package MiningFrigateRequirementsVerification { } action collectThreatDetectionData { - in part testMiningFrigate : MiningFrigate = ThreatDetectionTest::testMiningFrigate; + in part testMiningFrigate : MiningFrigate::MiningFrigate = ThreatDetectionTest::testMiningFrigate; out threatDetectionRangeMeasured : Real; } diff --git a/models/example_EveOnlineMiningFrigate/DomainModel/cause-effect.sysml b/models/example_EveOnlineMiningFrigate/DomainModel/cause-effect.sysml index 79e5894..4311104 100644 --- a/models/example_EveOnlineMiningFrigate/DomainModel/cause-effect.sysml +++ b/models/example_EveOnlineMiningFrigate/DomainModel/cause-effect.sysml @@ -4,30 +4,31 @@ package causeEffect { private import CauseAndEffect::*; private import CausationConnections::*; - //The cause-effect relationships - #causation connect miningFrigate.MiningRateIncreases to miningFrigate.OreYieldIncreases; - #causation connect miningFrigate.CargoCapacityIncreases to miningFrigate.DowntimeReduces; - #causation connect miningFrigate.ShieldStrengthIncreases to miningFrigate.SurvivabilityEnhances; - #causation connect miningFrigate.ThreatDetectionImproves to miningFrigate.ThreatResponseImproves; - #causation connect miningFrigate.DroneOperationsImprove to miningFrigate.OperationalEfficiencyIncreases; - #causation connect miningFrigate.WarpSpeedIncreases to miningFrigate.DowntimeReduces; - #causation connect miningFrigate.FleetCoordinationImproves to miningFrigate.OperationalEfficiencyIncreases; + //The cause-effect relationships + //This section is not correctly parsed and needs further corrections + //#causation connect miningFrigate.MiningRateIncreases to miningFrigate.OreYieldIncreases; + //#causation connect miningFrigate.CargoCapacityIncreases to miningFrigate.DowntimeReduces; + //#causation connect miningFrigate.ShieldStrengthIncreases to miningFrigate.SurvivabilityEnhances; + //#causation connect miningFrigate.ThreatDetectionImproves to miningFrigate.ThreatResponseImproves; + //#causation connect miningFrigate.DroneOperationsImprove to miningFrigate.OperationalEfficiencyIncreases; + //#causation connect miningFrigate.WarpSpeedIncreases to miningFrigate.DowntimeReduces; + //#causation connect miningFrigate.FleetCoordinationImproves to miningFrigate.OperationalEfficiencyIncreases; - #multicausation connection { - end #cause ::> miningFrigate.OreYieldIncreases; - end #cause ::> miningFrigate.DowntimeReduces; - end #effect ::> miningFrigate.OreExtractionEfficiencyIncreases; - } + //#multicausation connection { + // end #cause ::> miningFrigate.OreYieldIncreases; + // end #cause ::> miningFrigate.DowntimeReduces; + // end #effect ::> miningFrigate.OreExtractionEfficiencyIncreases; + //} - #multicausation connection { - end #cause ::> miningFrigate.SurvivabilityEnhances; - end #cause ::> miningFrigate.ThreatResponseImproves; - end #effect ::> miningFrigate.OperationalEfficiencyIncreases; - } + //#multicausation connection { + // end #cause ::> miningFrigate.SurvivabilityEnhances; + // end #cause ::> miningFrigate.ThreatResponseImproves; + // end #effect ::> miningFrigate.OperationalEfficiencyIncreases; + //} - #multicausation connection { - end #cause ::> miningFrigate.OperationalEfficiencyIncreases; - end #cause ::> miningFrigate.OreExtractionEfficiencyIncreases; - end #effect ::> miningFrigate.ProfitabilityMaximizes; - } + //#multicausation connection { + // end #cause ::> miningFrigate.OperationalEfficiencyIncreases; + // end #cause ::> miningFrigate.OreExtractionEfficiencyIncreases; + // end #effect ::> miningFrigate.ProfitabilityMaximizes; + //} } \ No newline at end of file diff --git a/models/example_EveOnlineMiningFrigate/LogicalArchitecture/ActionsHull.sysml b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/ActionsHull.sysml new file mode 100644 index 0000000..4a3d42b --- /dev/null +++ b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/ActionsHull.sysml @@ -0,0 +1,158 @@ +package MiningFrigateHullHighLevelActions { + + private import MiningFrigateHullIncludedActions::*; + private import Domain::*; + private import MiningFrigateSolutionSpace::*; + + // **Action: Withstand Incoming Damage** + action def WithstandIncomingDamage { + in scanCommand : Domain::ShipCommand; + out defenseStatus : Domain::ShipReport; + + bind detectThreat.scanCommand = scanCommand; + action detectThreat : DetectThreat { in scanCommand; out scanReport; } + flow from detectThreat.scanReport to engageDefenses.engageCommand; + first detectThreat then engageDefenses; + action engageDefenses : EngageDefenses { in engageCommand; out defenseStatus; } + bind engageDefenses.defenseStatus = defenseStatus; + } + + // **Action: Navigate and Warp to Destinations** + action def NavigateAndWarp { + in destinationCommand : Domain::ShipCommand; + out navigationStatus : Domain::ShipReport; + + bind navigate.destinationCommand = destinationCommand; + action navigate : NavigateToDestination { in destinationCommand; out navigationStatus; } + bind navigate.navigationStatus = navigationStatus; + } + + // **Action: Store and Transfer Mined Ore** + action def StoreAndTransferOre { + in transferCommand : Domain::ShipCommand; + out transferStatus : Domain::ShipReport; + + bind transferOre.transferCommand = transferCommand; + action transferOre : TransferOre { in transferCommand; out transferStatus; } + bind transferOre.transferStatus = transferStatus; + } + + // **Action: Dock and Undock from Stations** + action def DockAndUndock { + in dockingCommand : Domain::ShipCommand; + out dockingStatus : Domain::ShipReport; + + bind dock.dockingCommand = dockingCommand; + action dock : DockAtStation { in dockingCommand; out dockingStatus; } + bind dock.dockingStatus = dockingStatus; + } + + // **Action: Manage Energy Supply and Recharge** + action def ManageEnergy { + in rechargeCommand : Domain::ShipCommand; + out rechargeStatus : Domain::ShipReport; + + bind resupplyCapacitor.rechargeCommand = rechargeCommand; + action resupplyCapacitor : ResupplyCapacitor { in rechargeCommand; out rechargeStatus; } + bind resupplyCapacitor.rechargeStatus = rechargeStatus; + } + + // **Action: Support High, Medium, and Low Slot Modules** + action def SupportModuleFitting { + in miningCommand : Domain::ShipCommand; + out miningStatus : Domain::ShipReport; + + bind activateMiningLaser.miningCommand = miningCommand; + action activateMiningLaser : ActivateMiningLaser { in miningCommand; out miningStatus; } + bind activateMiningLaser.miningStatus = miningStatus; + } +} + + +package MiningFrigateHullIncludedActions { + + private import Domain::*; + private import MiningFrigateSolutionSpace::*; + + // **Action: Detect Threat** + action def DetectThreat { + in scanCommand : Domain::ShipCommand; + out scanReport : Domain::ShipReport; + } + + // **Action: Engage Defenses** + action def EngageDefenses { + in engageCommand : Domain::ShipCommand; + out defenseStatus : Domain::ShipReport; + } + + // **Action: Navigate to Destination** + action def NavigateToDestination { + in destinationCommand : Domain::ShipCommand; + out navigationStatus : Domain::ShipReport; + } + + // **Action: Transfer Ore** + action def TransferOre { + in transferCommand : Domain::ShipCommand; + out transferStatus : Domain::ShipReport; + } + + // **Action: Dock at Station** + action def DockAtStation { + in dockingCommand : Domain::ShipCommand; + out dockingStatus : Domain::ShipReport; + } + + // **Action: Resupply Capacitor** + action def ResupplyCapacitor { + in rechargeCommand : Domain::ShipCommand; + out rechargeStatus : Domain::ShipReport; + } + + // **Action: Activate Mining Laser** + action def ActivateMiningLaser { + in miningCommand : Domain::ShipCommand; + out miningStatus : Domain::ShipReport; + + bind checkAsteroidStatus.miningCommand = miningCommand; + + action checkAsteroidStatus : CheckAsteroidStatus { + in miningCommand; + out asteroidStatus; + } + + decide; + if checkAsteroidStatus.asteroidStatus == "depleted" then reportDepletion; + else continueMining; + + action continueMining : ExtractOre { + in miningCommand; + out miningStatus; + } + + action reportDepletion : ReportToPilot { + in asteroidStatus; + out report : Domain::ShipReport;} + + bind continueMining.miningStatus = miningStatus; + } + + // **Action: Check Asteroid Status** + action def CheckAsteroidStatus { + in miningCommand : Domain::ShipCommand; + out asteroidStatus : Domain::ShipReport; + } + + // **Action: Extract Ore (Standard Mining)** + action def ExtractOre { + in miningCommand : Domain::ShipCommand; + out miningStatus : Domain::ShipReport; + } + + // **Action: Report Asteroid Depletion to Pilot** + action def ReportToPilot { + in asteroidStatus : Domain::ShipReport; + out report : Domain::ShipReport; + } +} diff --git a/models/example_EveOnlineMiningFrigate/LogicalArchitecture/COTS.sysml b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/COTS.sysml new file mode 100644 index 0000000..833e743 --- /dev/null +++ b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/COTS.sysml @@ -0,0 +1,71 @@ + package COTS { + + private import ScalarValues::*; + private import StdPortsAndInterfaces::*; + private import FrigateRollupAnalysis::*; + + // **COTS Module Definitions with Conjugated Ports** + + part def MinerI :> SimpleFrigateComponent { + doc /* Standard mining laser used on mining frigates for ore extraction. */ + attribute miningYield : Real = 40.0; + attribute cycleTime : Real = 60.0; + attribute capacitorUsage : Real = 5.0; + redefines mass : Real = 500.0; // Mass in kg + redefines powerUsage = 5.0; + + port highSlot : ~HighSlotPort; + } + + part def Afterburner :> SimpleFrigateComponent { + doc /* Improves sublight speed by increasing thrust. */ + attribute velocityBonus : Real = 112.5; + attribute activationCost : Real = 20.0; + attribute cycleTime : Real = 10.0; + redefines mass : Real = 1000.0; // Mass in kg + redefines powerUsage = 20.0; + + port mediumSlot : ~MediumSlotPort; + } + + part def SmallShieldExtenderI :> SimpleFrigateComponent { + doc /* Increases shield capacity for additional survivability. */ + attribute shieldHPBonus : Real = 262.0; + attribute signatureRadiusIncrease : Real = 12.0; + redefines mass : Real = 1500.0; // Mass in kg + redefines powerUsage = 5.0; + + port mediumSlot : ~MediumSlotPort; + } + + part def SmallCapBatteryI :> SimpleFrigateComponent { + doc /* Improves capacitor recharge and overall energy stability. */ + attribute capacitorBonus : Real = 125.0; + attribute rechargeMultiplier : Real = 1.2; + redefines mass : Real = 800.0; // Mass in kg + redefines powerUsage = 0.0; + + port mediumSlot : ~MediumSlotPort; + } + + part def SurveyScannerI :> SimpleFrigateComponent { + doc /* Scans asteroids to determine ore content before mining. */ + attribute scanRange : Real = 15000.0; + attribute cycleTime : Real = 5.0; + redefines mass : Real = 500.0; // Mass in kg + redefines powerUsage = 2.0; + + port mediumSlot : ~MediumSlotPort; + } + + part def WarpCoreStabilizerI :> SimpleFrigateComponent { + doc /* Improves resistance against warp disruption (scramblers and disruptors). */ + attribute warpCoreStrengthBonus : Integer = 1; + attribute targetingPenalty : Real = -40.0; + attribute scanResolutionPenalty : Real = -10.0; + redefines mass : Real = 2000.0; // Mass in kg + redefines powerUsage = 0.0; + + port lowSlot : ~LowSlotPort; + } +} \ No newline at end of file diff --git a/models/example_EveOnlineMiningFrigate/LogicalArchitecture/MiningFrigate.sysml b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/MiningFrigate.sysml new file mode 100644 index 0000000..e6fceb3 --- /dev/null +++ b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/MiningFrigate.sysml @@ -0,0 +1,93 @@ +package MiningFrigateSolutionSpace { + + private import Domain::*; + private import ScalarValues::*; + private import COTS::*; + private import StdPortsAndInterfaces::*; + private import ParametersOfInterestMetadata::*; + private import FrigateRollupAnalysis::*; + private import MiningFrigateHullHighLevelActions::*; + + // **Mining Frigate as the Core System** + part def MiningFrigate :> CompositeFrigateComponent { + doc /* The Mining Frigate consists of a fixed hull structure with modular (COTS) components + * that can be replaced or upgraded depending on operational needs. */ + + part hull : MiningFrigateHull; + + // **COTS Modules (Ref Parts - Exchangeable)** + ref part miningLaser : MinerI[2]; + ref part propulsionModule : Afterburner[0..1]; + ref part shieldModule : SmallShieldExtenderI[0..1]; + ref part capacitorModule : SmallCapBatteryI[0..1]; + ref part sensorModule : SurveyScannerI[0..1]; + ref part defensiveModule : WarpCoreStabilizerI[0..2]; + + interface highSlotInterface1 : HighSlotInterface connect + hullPort ::> hull.highSlot1 to + modulePort ::> miningLaser.highSlot; + + interface highSlotInterface2 : HighSlotInterface connect + hullPort ::> hull.highSlot2 to + modulePort ::> miningLaser.highSlot; + + interface mediumSlotInterface1 : MediumSlotInterface connect + hullPort ::> hull.mediumSlot1 to + modulePort ::> propulsionModule.mediumSlot; + + interface mediumSlotInterface2 : MediumSlotInterface connect + hullPort ::> hull.mediumSlot2 to + modulePort ::> shieldModule.mediumSlot; + + interface lowSlotInterface1 : LowSlotInterface connect + hullPort ::> hull.lowSlot1 to + modulePort ::> defensiveModule.lowSlot; + + interface lowSlotInterface2 : LowSlotInterface connect + hullPort ::> hull.lowSlot2 to + modulePort ::> defensiveModule.lowSlot; + } + + // **Mining Frigate Hull (Black Box with Ports)** + part def MiningFrigateHull :> SimpleFrigateComponent { + doc /* The Venture-class Mining Frigate hull includes integrated features such as + * a built-in warp core stabilizer, ore hold, and base resistances. */ + + attribute hullHP : Real = 400.0; + attribute armorHP : Real = 400.0; + attribute shieldHP : Real = 700.0; + attribute oreHoldCapacity : Real = 5000.0; + attribute maxVelocity : Real = 335.0; + attribute warpSpeed : Real = 5.0; + attribute capacitorCapacity : Real = 250.0; + + // Performed actions of the hull (executed by the ship's integrated systems) + perform action scanForThreats; + perform action engageDefenses; + perform action acceptDestination; + perform action plotOptimalCourse; + perform action engagePropulsion; + perform action monitorAndAdjustCourse; + perform action transferOre; + perform action verifyCargoTransfer; + perform action dockToStation; + perform action undockFromStation; + perform action resupplyCapacitor; + perform action activateMiningLaser; + + // **Ports for COTS Modules** + port highSlot1 : HighSlotPort; + port highSlot2 : HighSlotPort; + port mediumSlot1 : MediumSlotPort; + port mediumSlot2 : MediumSlotPort; + port lowSlot1 : LowSlotPort; + port lowSlot2 : LowSlotPort; + } + + // **Power and Control Interfaces Items inherited from the standardPorts items** + item def VenturePowerSupply :> PowerSupply ; + item def VentureHighSlotCommand :> HighSlotCommand ; + item def VentureMediumSlotCommand :> MediumSlotCommand ; + item def VentureLowSlotCommand :> LowSlotCommand ; + +} diff --git a/models/example_EveOnlineMiningFrigate/LogicalArchitecture/UseCasesHull.sysml b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/UseCasesHull.sysml new file mode 100644 index 0000000..0e49b1e --- /dev/null +++ b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/UseCasesHull.sysml @@ -0,0 +1,258 @@ +package MiningFrigateHullUseCasesUsage { + + private import MiningFrigateHullUseCasesDef::*; + private import Domain::*; + + // **Use Case Usage: Withstand Incoming Damage** + use case withstandIncomingDamage : WithstandIncomingDamage { + first start; + + then include use case detectThreat : DetectThreat { + actor :>> pilotPod = withstandIncomingDamage::pilotPod; + } + + then include use case engageDefenses : EngageDefenses { + actor :>> pilotPod = withstandIncomingDamage::pilotPod; + actor :>> hostileShip = withstandIncomingDamage::hostileShip; + } + + then done; + } + + // **Use Case Usage: Navigate and Warp to Destinations** + use case navigateAndWarp : NavigateAndWarp { + first start; + + then include use case navigateToDestination : NavigateToDestination { + actor :>> pilotPod = navigateAndWarp::pilotPod; + } + + then done; + } + + // **Use Case Usage: Store and Transfer Mined Ore** + use case storeAndTransferOre : StoreAndTransferOre { + first start; + + then include use case transferOre : TransferOre { + actor :>> pilotPod = storeAndTransferOre::pilotPod; + actor :>> station = storeAndTransferOre::station; + } + + then done; + } + + // **Use Case Usage: Dock and Undock from Stations** + use case dockAndUndock : DockAndUndock { + first start; + + then include use case dockAtStation : DockAtStation { + actor :>> pilotPod = dockAndUndock::pilotPod; + actor :>> station = dockAndUndock::station; + } + + then done; + } + + // **Use Case Usage: Manage Energy Supply and Recharge** + use case manageEnergy : ManageEnergy { + first start; + + then include use case resupplyCapacitor : ResupplyCapacitor { + actor :>> pilotPod = manageEnergy::pilotPod; + actor :>> smallCapBatteryI = manageEnergy::smallCapBatteryI; + } + + then done; + } + + // **Use Case Usage: Support High, Medium, and Low Slot Modules** + use case supportModuleFitting : SupportModuleFitting { + first start; + + then include use case activateMiningLaser : ActivateMiningLaser { + actor :>> miningLaser = supportModuleFitting::miningLaser; + } + + then done; + } +} + + +package MiningFrigateHullUseCasesDef { + + private import MiningFrigateSolutionSpace::*; + private import Domain::*; + private import COTS::*; + + // **Use Case: Withstand Incoming Damage** + use case def WithstandIncomingDamage { + subject hull : MiningFrigateHull; + actor hostileShip : Domain::HostileShip; + actor pilotPod : Domain::PilotPod; + + objective { + doc /* + * The Mining Frigate Hull shall sustain damage from hostile ships while ensuring pilot safety. + */ + } + } + + // **Use Case: Navigate and Warp to Destinations** + use case def NavigateAndWarp { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + + objective { + doc /* + * The Mining Frigate Hull shall navigate between celestial bodies using its onboard navigation system. + */ + } + } + + // **Use Case: Store and Transfer Mined Ore** + use case def StoreAndTransferOre { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor station : Domain::Station; + + objective { + doc /* + * The Mining Frigate Hull shall store extracted ore in its ore hold + * and transfer it to a station or fleet hauler when required. + */ + } + } + + // **Use Case: Dock and Undock from Stations** + use case def DockAndUndock { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor station : Domain::Station; + + objective { + doc /* + * The Mining Frigate Hull shall support docking and undocking operations at stations or other docking structures. + */ + } + } + + // **Use Case: Manage Energy Supply and Recharge** + use case def ManageEnergy { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor smallCapBatteryI : SmallCapBatteryI; + + objective { + doc /* + * The Mining Frigate Hull shall ensure energy balance through capacitor recharge mechanisms. + */ + } + } + + // **Use Case: Support High, Medium, and Low Slot Modules** + use case def SupportModuleFitting { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor miningLaser : MinerI; + + objective { + doc /* + * The Mining Frigate Hull shall host configurable module slots for different mission profiles. + */ + } + } + + // **Use Case Definition: Detect Threat** + use case def DetectThreat { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + + objective { + doc /* + * The Mining Frigate Hull shall scan for incoming threats using onboard sensors + * and provide a warning to the pilot. + */ + } + } + + // **Use Case Definition: Engage Defenses** + use case def EngageDefenses { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor hostileShip : Domain::HostileShip; + + objective { + doc /* + * The Mining Frigate Hull shall activate defensive systems to mitigate threats, + * including shield hardeners, warp core stabilizers, or evasive maneuvers. + */ + } + } + + // **Use Case Definition: Navigate to Destination** + use case def NavigateToDestination { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + + objective { + doc /* + * The Mining Frigate Hull shall navigate between waypoints or target destinations + * using the ship’s navigation system. + */ + } + } + + // **Use Case Definition: Transfer Ore** + use case def TransferOre { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor station : Domain::Station; + + objective { + doc /* + * The Mining Frigate Hull shall transfer stored ore to a station or hauler for processing or sale. + */ + } + } + + // **Use Case Definition: Dock at Station** + use case def DockAtStation { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor station : Domain::Station; + + objective { + doc /* + * The Mining Frigate Hull shall dock at a station or structure to enable refueling, + * maintenance, and ore transfer. + */ + } + } + + // **Use Case Definition: Resupply Capacitor** + use case def ResupplyCapacitor { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor smallCapBatteryI : SmallCapBatteryI; + + objective { + doc /* + * The Mining Frigate Hull shall replenish its capacitor charge using passive recharge or capacitor boosters. + */ + } + } + + // **Use Case Definition: Activate Mining Laser** + use case def ActivateMiningLaser { + subject hull : MiningFrigateHull; + actor pilotPod : Domain::PilotPod; + actor miningLaser : MinerI; + + objective { + doc /* + * The Mining Frigate Hull shall activate its mining laser to extract ore from asteroids. + */ + } + } +} diff --git a/models/example_EveOnlineMiningFrigate/LogicalArchitecture/rollupAnalysis.sysml b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/rollupAnalysis.sysml new file mode 100644 index 0000000..7068629 --- /dev/null +++ b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/rollupAnalysis.sysml @@ -0,0 +1,35 @@ +package FrigateRollupAnalysis { + + private import ScalarValues::*; + private import NumericalFunctions::*; + private import MiningFrigateSolutionSpace::*; + + // **Base Definition for Mass and Power Rollup** + part def FrigateComponent { + attribute mass : Real; + attribute totalMass : Real; + attribute powerUsage : Real; + attribute totalPowerUsage : Real; + } + + // **Simple Component (Directly Contributes to Mass and Power)** + part def SimpleFrigateComponent :> FrigateComponent { + attribute redefines totalMass = mass; + attribute redefines totalPowerUsage = powerUsage; + } + + // **Composite Component (Rolls Up Mass and Power from Subcomponents)** + part def CompositeFrigateComponent :> FrigateComponent { + part subcomponents : FrigateComponent[*]; + + attribute redefines totalMass default + mass + sum(subcomponents.totalMass); + + attribute redefines totalPowerUsage default + powerUsage + sum(subcomponents.totalPowerUsage); + } + + // **Derived Calculations** + // venture.totalMass --> Sum of hull + fitted modules + // venture.totalPowerUsage --> Sum of all power-consuming modules +} diff --git a/models/example_EveOnlineMiningFrigate/LogicalArchitecture/standardPortsAndInterfaces.sysml b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/standardPortsAndInterfaces.sysml new file mode 100644 index 0000000..0ac5ed0 --- /dev/null +++ b/models/example_EveOnlineMiningFrigate/LogicalArchitecture/standardPortsAndInterfaces.sysml @@ -0,0 +1,61 @@ +package StdPortsAndInterfaces { + + private import ScalarValues::*; + + // **Port Definitions** + port def HighSlotPort { + in power : PowerSupply; + in control : HighSlotCommand; + } + + port def MediumSlotPort { + in power : PowerSupply; + in control : MediumSlotCommand; + } + + port def LowSlotPort { + in control : LowSlotCommand; + } + // **Power and Control Interfaces** + item def PowerSupply { + attribute energyTransfer : Real; + } + + item def HighSlotCommand { + attribute activation : Boolean; + } + + item def MediumSlotCommand { + attribute activation : Boolean; + } + + item def LowSlotCommand { + attribute activation : Boolean; + } + + // **High Slot Interface (Power + Activation Command)** + interface def HighSlotInterface { + end hullPort : HighSlotPort; + end modulePort : ~HighSlotPort; + + flow of PowerSupply from hullPort.power to modulePort.power; + flow of HighSlotCommand from hullPort.control to modulePort.control; + } + + // **Medium Slot Interface (Power + Activation Command)** + interface def MediumSlotInterface { + end hullPort : MediumSlotPort; + end modulePort : ~MediumSlotPort; + + flow of PowerSupply from hullPort.power to modulePort.power; + flow of MediumSlotCommand from hullPort.control to modulePort.control; + } + + // **Low Slot Interface (Activation Command Only)** + interface def LowSlotInterface { + end hullPort : LowSlotPort; + end modulePort : ~LowSlotPort; + + flow of LowSlotCommand from hullPort.control to modulePort.control; + } +} \ No newline at end of file diff --git a/models/example_EveOnlineMiningFrigate/README.md b/models/example_EveOnlineMiningFrigate/README.md index 0e2aebd..639eac2 100644 --- a/models/example_EveOnlineMiningFrigate/README.md +++ b/models/example_EveOnlineMiningFrigate/README.md @@ -4,4 +4,4 @@ The model has been generated with an LLM following a series of questions that ar The selection of this example to test the domain capabilites of an LLM is based on the availability of information in internet about the mechanics of the game and the in-game market data and trends. The SysMLv2 model was built using ChatGPT:SysMLv2 Co-Pilot. ## Author -Hugo Ormo is an engineer who studied at ETSEIB in Barcelona. He works as a consultant at a global IT consulting company, focusing on the transformation of enterprises toward systems engineering and MBSE. He is a certified GfSE Level A and has been training as a GfSE trainer since 2022. In this role, he has already trained several groups to GfSE Level B and C. Voluntarily, he leads the UAF working group of GfSE and is a member of the UAF working group of OMG. \ No newline at end of file +Hugo Ormo is an engineer who studied at ETSEIB in Barcelona. He works as a consultant at a global IT consulting company, focusing on the transformation of enterprises toward systems engineering and MBSE. He is a certified GfSE Level A, approved trainer by the GfSE and has been preparing candidates for the GfSE certification levels B and C since 2022. Voluntarily, he leads the UAF working group of GfSE and is a member of the UAF working group of OMG. \ No newline at end of file diff --git a/models/example_EveOnlineMiningFrigate/UseCases/OperationalUseCaseActions.sysml b/models/example_EveOnlineMiningFrigate/UseCases/OperationalUseCaseActions.sysml index 77802af..60fb37d 100644 --- a/models/example_EveOnlineMiningFrigate/UseCases/OperationalUseCaseActions.sysml +++ b/models/example_EveOnlineMiningFrigate/UseCases/OperationalUseCaseActions.sysml @@ -10,7 +10,7 @@ package OperationalUseCaseActions { action def IdentifyDestination { doc /* Identify an asteroid belt or a target asteroid. */ - out targetSignature : ScanSignature; + out targetSignature : Domain::ScanSignature; } action def ActivateMiningLaser { @@ -38,14 +38,14 @@ package OperationalUseCaseActions { action def ScanForThreats { doc /* Scan the surrounding space for potential threats. */ - in scanCommand : ShipCommand; - out detectedThreats : ScanSignature; - out scanReport : ShipReport; + in scanCommand : Domain::ShipCommand; + out detectedThreats : Domain::ScanSignature; + out scanReport : Domain::ShipReport; } action def PrioritizeThreats { doc /* Evaluate detected threats and prioritize response actions. */ - in detectedThreats : ScanSignature; + in detectedThreats : Domain::ScanSignature; out threatPriority : String; } @@ -53,22 +53,22 @@ package OperationalUseCaseActions { action def UndockFromStation { doc /*Undock from a station.*/ - in undockCommand : ShipCommand; + in undockCommand : Domain::ShipCommand; } action def ExecuteWarpDrive { doc /* Engage the warp drive to travel to the destination. */ - in warpCommand : ShipCommand; - out warpStatusReport : ShipReport; + in warpCommand : Domain::ShipCommand; + out warpStatusReport : Domain::ShipReport; } // Main Use Case definition : Offload Ore and Resupply action def DockToStation { doc /*Dock into a station to make repairs, resupply capacitor and support systems.*/ - in dockCommand : ShipCommand; - in charge : Power; - out dockingReport : ShipReport; + in dockCommand : Domain::ShipCommand; + in charge : Domain::Power; + out dockingReport : Domain::ShipReport; } @@ -76,72 +76,72 @@ package OperationalUseCaseActions { action def SelectDronesForDeployment { doc /* Select drones for deployment based on operational needs (mining or defense). */ - in droneCommand : ShipCommand; - out selectedDrones : Drone; + in droneCommand : Domain::ShipCommand; + out selectedDrones : Domain::Drone; } // Included Use Case definition : Navigate to Destination action def AcceptDestination { doc /*Accept a destination from the pilot. */ - in destinationCommand : ShipCommand; - out destinationReport : ShipReport; + in destinationCommand : Domain::ShipCommand; + out destinationReport : Domain::ShipReport; } action def PlotOptimalCourse { doc /*Plot the optimal course using the navigation system.*/ - out optimalCourseReport : ShipReport; + out optimalCourseReport : Domain::ShipReport; } action def EngagePropulsion { doc /*Engage the propulsion system to travel along the plotted course. * Propulsion does not use items (fuel, power) in Eve Online. */ - in engagePropulsion : ShipCommand; - out propulsionEngagedReport : ShipReport; + in engagePropulsion : Domain::ShipCommand; + out propulsionEngagedReport : Domain::ShipReport; } action def MonitorAndAdjustCourse { doc /*Continuously monitor progress and adjust the course as needed.*/ - out selectedCourseReport : ShipReport; + out selectedCourseReport : Domain::ShipReport; } // Included Use Case definition : Transfer Cargo action def TransferOre { doc /*Transfer ore or other cargo to the appropriate storage location.*/ - in unloadCommand : ShipCommand; - out oreCargo : CargoContainer; - out storageReport : ShipReport; + in unloadCommand : Domain::ShipCommand; + out oreCargo : Domain::CargoContainer; + out storageReport : Domain::ShipReport; } action def VerifyCargoTransfer { doc /*Verify the transfer has been completed successfully.*/ - in warehouseStatusCommand : StationCommand; - out warehouseReport : StationReport; + in warehouseStatusCommand : Domain::StationCommand; + out warehouseReport : Domain::StationReport; } // Included Use Case definition : Engage Defense Systems action def DetectThreat { doc /*Detect and classify threats using the sensor array.*/ - in scanCommand : ShipCommand; - in threatSignature : ScanSignature; - out scanReport : ShipReport; + in scanCommand : Domain::ShipCommand; + in threatSignature : Domain::ScanSignature; + out scanReport : Domain::ShipReport; } action def EngageDefenses { doc /*Activate defense turrets and deploy drones to neutralize threats.*/ - in engageCommand : ShipCommand; - out firePower: Power; - out damageReport : ShipReport; + in engageCommand : Domain::ShipCommand; + out firePower: Domain::Power; + out damageReport : Domain::ShipReport; } // Included Use Case definition : Resupply Systems action def VerifyResupply { doc /*Verify the resupply is completed successfully.*/ - in shipStatusCommand : ShipCommand; - out shipStatusReport : ShipReport; + in shipStatusCommand : Domain::ShipCommand; + out shipStatusReport : Domain::ShipReport; } } diff --git a/models/example_family/family.sysml b/models/example_family/family.sysml index 6200203..f52b657 100644 --- a/models/example_family/family.sysml +++ b/models/example_family/family.sysml @@ -215,11 +215,11 @@ package Family { //three possible variants of cerificates. Depending on the variant there will be up to five persons in the package. variation part adoption_certificate : Adoption_Certificate{ variant connection adoption_certificate_TypeB1 : Adoption_Certificate - connect (parent1 ::> woman[1], adoptiveParent_1 ::> adult[1], certifiedChild ::> child[1]); + connect (parent1 ::> woman, adoptiveParent_1 ::> adult, certifiedChild ::> child); variant connection adoption_certificate_TypeB2 : Adoption_Certificate - connect (parent1 ::> man[1], adoptiveParent_1 ::> adult[1], certifiedChild ::> child[1]); + connect (parent1 ::> man, adoptiveParent_1 ::> adult, certifiedChild ::> child); variant connection adoption_certificate_TypeC : Adoption_Certificate - connect (parent1 ::> adoptiveParent_1[1], parent2 ::> adoptiveParent_2[1], certifiedChild ::> child[1]); + connect (parent1 ::> adoptiveParent_1, parent2 ::> adoptiveParent_2, certifiedChild ::> child); } //requirements