Can I set a relationship between the state of a component and the states of its parts in Capella?
For example, I have a component called “Heat Exchanger System” and a component called “Valve” which is part of it. I would like to determine that when the “Heat Exchanger System” is in the state “Off” then this means that the “Valve” is in the state “Closed”.
Does that make sense and can it be done?
I may be incorrect as I’m still learning Capella/Arcadia and MBSE, but here is my opinion:
The propagation of states the way you described it may not be a good way to model the system. There should be a concrete trigger that will lead your Valve component into the “Closed” state. So while you cannot link states directly (from State Machine to State Machine), you could do the following: create/link a Trigger (like a function/function exchange) that will lead your “Heat Exchanger System” into the “Off” state. You probably already have this, unless you have triggerless transitions.
Now, in your Valve state machine, use the same trigger in the transition to the “Closed” state. This means that, whenever the first state machine gets the trigger, the second one will also react to it and move to the Closed state.
You should notice a caveat: if the second state machine is in a state which doesn’t contain the outbound transition to the “Closed” state, it won’t react to the trigger. And modelling like this is desireable, as your Valve may be unable to be closed if it is in a state that can’t jump to the closed state (if the states are simply open/closed then it won’t matter - the trigger would always work).
IIRC you also can’t directly select a transition trigger to be executed inside a state’s entry/do/exit activities - you must use functions or functional exchanges which are then added as triggers inside transitions.
Hope this helps, I’d like to read other people’s opinions on this.
Yes, meanwhile I also came to the same conclusion, but it is very useful to read your answer, as it includes even more info.
You touched a very important point: " if the second state machine is in a state which doesn’t contain the outbound transition to the “Closed” state, it won’t react to the trigger".
Can I ask how you show this in Capella?
The statecharts won’t explicitly tell you anything, but it is easy to grasp with the “In-Flight Entertainment System” as an example.
Think of your Valve being in the “Idle” state, and the “Takeoff” state is your “Closed” state. The only way you can reach that state is by being in the “Boarding” state - which has the outbound transition “Takeoff Authorization”. In your case, think of 3 states: Open, Closed, and “Open with lock mechanism”. Before closing the valve, you must move from “Open w/ lock mechanism” to “Open”.
Thanks for answering again. I might have formulated the question in an bit of an ambiguous way, I think.
I meant more like: by making the SM, you have established what transitions cannot happen (like in the example you posted).
How do you make sure that this is respected in the other diagrams?
Is there an “application” of these rules we set in the SM?
Many thanks again, in case you still have time to take this one
Oh, sorry if I answered the wrong question .
Anyway, that is a good question! I don’t remember if there’s a way to make other diagrams respect that. Guards only work with ValueSpecifications, so they can’t check if a given state is activated or if a transition exists. Maybe someone more experienced can give you a detailed answer regarding that, and if you find anything please update the post.