Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: d228ddd78f20e62997d24b8ecd36ef3a2bba8b72 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                                                                                    


                                                                                


                                           











                                                                          

         







































































































































































































































































































































                                                                                                                                
 
RoomModel TrafficlightModel {
	
	import room.basic.types.* from "../../../org.eclipse.etrice.modellib.java/model/Types.room"
	import room.basic.service.timing.* from "../../../org.eclipse.etrice.modellib.java/model/TimingService.room"
	import room.basic.service.tcp.* from "../../../org.eclipse.etrice.modellib.java/model/TcpService.room"
	
	LogicalSystem TrafficlightLogSys {
		SubSystemRef subsystem:SubSys 
	}
	SubSystemClass SubSys {
		ActorRef application:Application
		ActorRef timingService: ATimingService
		LayerConnection ref application satisfied_by timingService.timer
		LogicalThread defaultThread
	}
	ActorClass Application {
		Structure {
			ActorRef controller: TrafficLightController
			ActorRef coordinator: TrafficLightCoordinator
			ActorRef tsCommands: TrafficLightCommands
			ActorRef tlCommands2: TrafficLightCommands
			ActorRef controller2: TrafficLightController
			Binding coordinator.controller and controller.fct
			Binding controller.tlCommands and tsCommands.fct
			Binding controller2.tlCommands and tlCommands2.fct
			Binding coordinator.controller and controller2.fct
		}
		Behavior { }
	}
	
	ActorClass TrafficLightCoordinator {
		Interface {
			conjugated Port controller [*]: PTrafficLightController
		}
		Structure {
			external Port controller
			SAP timeout: PTimer
			
		}
		Behavior {
			StateMachine {
				Transition init: initial -> Idle { }
				Transition tr0: Idle -> Running {
					triggers {
						<timeout: timeout>
					}
				}
				Transition tr1: Running -> Off {
					triggers {
						<timeout: timeout>
					}
				}
				Transition tr2: Off -> Running {
					triggers {
						<timeout: timeout>
					}
				}
				State Idle {
					entry {
						"timeout.startTimeout(3000);"
					}
				}
				State Running {
					entry {
						"timeout.startTimeout(20000);"
						"controller.setOn();"
					}
				}
				State Off {
					entry {
						"timeout.startTimeout(20000);"
						"controller.setOff();"
					}
				}
			}
		}
	}

	ActorClass TrafficLightController {
		Interface {
			Port fct: PTrafficLightController
			conjugated Port tlCommands: PTrafficLightCommands
		}
		Structure {
			external Port fct
			external Port tlCommands
			SAP timeout: PTimer
		}
		Behavior {
			StateMachine {
				Transition init: initial -> InitCommands { }
				Transition tr0: InitCommands -> tp0 of Blinking {
					triggers {
						<doneInit: tlCommands>
					}
				}
				Transition tr1: Blinking -> tp0 of Working {
					triggers {
						<setOn: fct>
					}
				}
				Transition tr2: Working -> tp0 of Blinking {
					triggers {
						<setOff: fct>
					}
				}
				State InitCommands {
					entry {
						"tlCommands.startInit();"
					}
				}
				State Blinking {
					exit {
						"timeout.kill();"
					}
					subgraph {
						Transition tr0: my tp0 -> On
						Transition tr1: On -> Off {
							triggers {
								<timeout: timeout>
							}
						}
						Transition tr2: Off -> On {
							triggers {
								<timeout: timeout>
							}
						}
						EntryPoint tp0
						State On {
							entry {
								"tlCommands.carYellow();"
								"tlCommands.pedRed();"
								"timeout.startTimeout(500);"
							}
							exit {
								"tlCommands.carOff();"
								"tlCommands.pedOff();"
							}
						}
						State Off {
							entry {
								"timeout.startTimeout(500);"
							}
						}
					}
				}
				State Working {
					subgraph {
						Transition tr0: my tp0 -> AllRed
						Transition tr1: AllRed -> CarGreen {
							triggers {
								<timeout: timeout>
							}
						}
						Transition tr2: PedGreen -> AllRed {
							triggers {
								<timeout: timeout>
							}
						}
						Transition tr3: CarGreen -> CarYellow {
							triggers {
								<pressedButton: tlCommands>
							}
						}
						Transition tr4: CarYellow -> CarRed {
							triggers {
								<timeout: timeout>
							}
						}
						Transition tr5: CarRed -> PedGreen {
							triggers {
								<timeout: timeout>
							}
						}
						EntryPoint tp0
						State AllRed {
							entry {
								"tlCommands.carRed();"
								"tlCommands.pedRed();"
								"timeout.startTimeout(1000);"
							}
						}
						State CarGreen {
							entry {
								"tlCommands.carGreen();"
							}
						}
						State CarYellow {
							entry {
								"tlCommands.carYellow();"
								"timeout.startTimeout(1000);"
							}
						}
						State CarRed {
							entry {
								"tlCommands.carRed();"
								"timeout.startTimeout(1000);"
							}
						}
						State PedGreen {
							entry {
								"tlCommands.pedGreen();"
								"timeout.startTimeout(3000);"
							}
						}
					}
				}
			}
		}
	}
	
	ActorClass TrafficLightCommands {
		Interface {
			Port fct: PTrafficLightCommands
		}
		Structure {
			external Port fct
			conjugated Port socketControl: PTcpControl
			conjugated Port socketPayload: PTcpPayload
			ActorRef socket: ATcpClient
			Binding socketPayload and socket.PayloadPort
			Binding socketControl and socket.ControlPort
			Attribute socketConfig: DTcpControl
			
		}
		Behavior {
			StateMachine {
				Transition init: initial -> NotInitialized {
					action {
						"//socketConfig = new DTcpControl(\"localhost\", 4441);"
					}
				}
				Transition tr0: ConfigSocket -> SocketOpen {
					triggers {
						<established: socketControl>
					}
					action {
						"fct.doneInit();"
					}
				}
				Transition tr1: SocketOpen -> SocketOpen {
					triggers {
						<carRed: fct>
					}
					action {
						"String payload = new String(\"carLights=red\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr2: SocketOpen -> SocketOpen {
					triggers {
						<carYellow: fct>
					}
					action {
						"String payload = new String(\"carLights=yellow\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr3: SocketOpen -> SocketOpen {
					triggers {
						<carGreen: fct>
					}
					action {
						"String payload = new String(\"carLights=green\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr4: SocketOpen -> SocketOpen {
					triggers {
						<carOff: fct>
					}
					action {
						"String payload = new String(\"carLights=off\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr5: SocketOpen -> SocketOpen {
					triggers {
						<pedRed: fct>
					}
					action {
						"String payload = new String(\"pedLights=red\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr6: SocketOpen -> SocketOpen {
					triggers {
						<pedGreen: fct>
					}
					action {
						"String payload = new String(\"pedLights=green\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr7: SocketOpen -> SocketOpen {
					triggers {
						<pedOff: fct>
					}
					action {
						"String payload = new String(\"pedLights=off\\n\");"
						"socketPayload.send(new DTcpPayload(0, payload.length(), payload.getBytes() ));"
					}
				}
				Transition tr8: SocketOpen -> SocketOpen {
					triggers {
						<receive: socketPayload>
					}
					action {
						"fct.pressedButton();"
					}
				}
				Transition tr9: NotInitialized -> ConfigSocket {
					triggers {
						<startInit: fct>
					}
				}
				State ConfigSocket {
					entry {
						"socketControl.open(socketConfig);"
						""
						"System.out.println(\"ConfigSocket: open\");"
					}
				}
				State SocketOpen
				State NotInitialized
			}
		}
	}

	ProtocolClass PTrafficLightController {
		incoming {
			Message setOn()
			Message setOff()
		}
	}
	
	ProtocolClass PTrafficLightCommands {
		incoming {
			Message startInit()
			
			Message carRed()
			Message carYellow()
			Message carYellowRed()
			Message carGreen()
			Message carOff()
			
			Message pedRed()
			Message pedGreen()
			Message pedOff()
			Message myMessage()
			
		}
		outgoing {
			Message doneInit()

			Message pressedButton()
		}
	}
}

Back to the top