// ************************************************************************** // // eses eses // eses eses // eses eseses esesese eses Embedded Systems Group // ese ese ese ese ese // ese eseseses eseseses ese Department of Computer Science // eses eses ese eses // eses eseses eseseses eses University of Kaiserslautern // eses eses // // **************************************************************************** // The scenario consists of a moto boat on a lake modeled by a two-dimensional // space. The goal of the motor boat controller is to steer the boat towards // a predefined point, e.g. a landing place. // The movement of the boat is determined by two factors: // 1. the velocity induced by the motor. // 2. the drift of the water. // The model of the boat scenario consists of the following three components: // 1. the water, // 2. the boat itself, and // 3. the boat controller / motor of the boat. // To illustrate the interchangeability of the different components, we offer // two different versions of the motor and three different versions of the // water environment, which can be considered in arbitrary combinations. // // The example has been taken from the following reference: // @phdthesis{Baue12, // key ={Baue12}, // author ={K. Bauer}, // title ={A New Modelling Language for Cyber-physical Systems}, // address ={Kaiserslautern, Germany}, // editor ={K. Schneider and R. Majumdar}, // month ={January}, // school ={Department of Computer Science, University of Kaiserslautern, Germany}, // year ={2012}, // note ={PhD}, // remark ={rsg} // } // // The following code combines the boat with the modules Water1 and Controller1. // ****************************************************************************** macro landingX = 40.0; macro landingY = 20.0; macro accuracy = 0.1; module BoatScenario( hybrid real motorX, motorY, waterX, waterY, boatX, boatY, bool landingReached ) { Boat(motorX, motorY, waterX, waterY, boatX, boatY, accuracy, landingX, landingY, landingReached); || Water1(boatX, boatY, waterX, waterY); || Controller1(boatX, boatY, motorX, motorY, accuracy, landingX, landingY, landingReached); }