SysML v2

The MBSE working group has a subgroup "Application example" that deals with the pilot implementation of SysML V2, which is provided by the OMG. The main goal is to develop a first feeling for the possibilities but also the pitfalls of the new version SysML v2. Therefore the focus is on getting to know the syntax and semantics of the new version, the differences to v1, and just playing around with the language.

On the basis of an application example, the following aspects will be put through their paces:

  • Modeling of requirements, behavior, and structure
  • Collaboration and modularization of SysML v2 models
  • Collecting feedback for the SST SysML v2 working group
  • Evaluation of the existing implementation in Eclipse and Jupyter Notebook

Since there is currently not much literature available on the topic of SysML v2, we try to get a picture ourselves and make our findings and our example model available on this page.

 

An extensive SysML Example

Under construction ...

ToDo: add description.

 package 'Robotic Vacuum Cleaner'{
	
	import Controller::*;
	import Navigation::*;
	import EnergySupplySystem::*;
	import Vacuum::*;
	import Ports::*;
	
	part def RoboticVacuumCleaner{
		part ControllerSystem : controller;
		part NavigationSystem : navigation;
		part EnergySystem : energySupplySystem;
		part Vaccum : vacuum;

		port driverUnitControlSignal : DriverUnitControlSignal;
		port powerSignal : PowerSignal;

		connect ControllerSystem to NavigationSystem;

		interface def ports{
			end supliertPort : DriverUnitControlSignal;
			end consumertPort: DriverUnitControlSignal;
		}
		interface: ports connect
			supliertPort ::> driverUnitControlSignal to
			consumerPort ::> NavigationSystem.driverUnitControlSignal;
	}
} 

ToDo: add description.

 package Controller{
	import Ports::*;
	
	part def controller{
		port driverSignal : ~DriverUnitControlSignal;
		port powerSignal : ~PowerSignal;
	}
} 

ToDo: add description.

 package EnergySupplySystem{
	import Ports::*;
	
	part def energySupplySystem{
		port powerSignal : PowerSignal;
	}
} 

ToDo: add description.

 package Navigation{
	import Ports::*;
	import Parts::*;
	
	part def navigation{
		part DriveController : driveController;
		part Motor[2] : dcMotor;
		part laserTower : Lasertower;
		part bumber : Bumber;
		part infrarotController : InfrarotController;

		port driverUnitControlSignal : DriverUnitControlSignal;
		port powerSignal : PowerSignal;

	}
} 

ToDo: add description.

 package Parts{
	
	part def driveController {
        part stearingController;
        part orientationController;
    }
    
    part def dcMotor {
        attribute maxTorque :> ISQ::torque;
        attribute rpm0 : Real;
        attribute voltage :> ISQ::voltage;
        }
    
    part def Lasertower {
        attribute distance : LengthValue;
        attribute distanceAngle : Real;
        attribute motor;
        port position : LaserTowerPosition;
        port psu : powerSupplyPort;
    }

    part def Bumber {
        attribute isContact : Boolean;
        port Contact : contact;
    }

	part def TimeOfFlightSensor{
        port i2cSlave : i2c;
    }
    
    part def InfrarotController{
        part timeOfFlightSensor;
        port psu : powerSupplyPort;
        port i2cMaster : i2c;
        
    }  
} 

ToDo: add description.

 package Ports {
	
	import ScalarValues::*;
	import ISQ::*;

	port def DriverUnitControlSignal {
            in forward :> Boolean;
            in left :> Boolean;
            in right :> Boolean;
    }
        
    
    port def PowerSignal{
    	out constantCurrent :> totalCurrent;
    	out constantVoltage :> voltage;
    }
    
} 

ToDo: add description.

 package Vacuum{
	import Ports::*;

	part def vacuum{
		port driverSignal : ~DriverUnitControlSignal;
	}
}