I wonder if in Capella it is possible to specify values that are passed when a functional exchange happens?
I have two physical function, F1 and F2, and a functional exchange (FE) flowing from F1 to F2. The FE has an exchange item (EI) assigned to it, which in turn, contains/is implemented by an enumeration E with several values.
In essence, I want to specify the following:
Maybe there is such an option already, I just haven’t discovered it.
No Capella does not support this. And I don’t understand why this would be needed in the dataflow itelf. Could you elaborate on this need?
I would better understand the need on a sequence message refering a functional exchange (and in that case there is a light mechanism for that)
Thank you for your answer.
Probably I am in a different mindset. I was thinking of property assignment in UML sequence diagrams. But of course, here it is a completely different thing.
Here is my context and reasoning:
I am designing a system that communicates with several other systems via messages, meaning I receive and issue commands via messages to the other systems.
All these systems have their own node PC and behavior PC (or execution component), and I have assigned my physical functions to them.
As part of my design, I have a state machine (SM) for my main component. The SM switches states based on the message received or sent from/to other components.
For this to work, I need my component to somehow know what is the message received. Based on this, I can design what is my next state. I am using guards with opaque expression to control state transitions (see image).
The end goal for me is code generation. I am exporting my model using Pivot XML and using Acceleo to generate code. I want to generate code from SM and sequence diagrams (in Capella, Exchange Scenario diagram).
During the processing of the metamodel, I can determine the type of message that is sent (from the trigger between states, Trigger -> Functional exchange -> Exchange item -> Owned element), but I was missing some form of a property to my component that I can use.
Maybe this is not the way to use Capella, or simply its capabilities end there (not meant to be used to describe a system at low level, classes and functions)?
Or maybe, I have to design the system such that I have a physical function that accepts certain type of message and outputs another type of message (based on the func. exchanges going in and out of it)? (just a thought).
Please tell me if you need more context.
You are exploring an area where Capella might be a bit week today (consistency between sequence diagrams and state machines). Capella primarily focuses on architectural design (definition of interfaces) and behavior modeling with Capella may not bit formal enough.
However, what you describe should be possile. On the functional exchange itself, you would specify the types that are exchanged between functions. Then, ion state machines and sequence diagram, you would have conditions on values.
In a state machine transition, you would use the guard (based on opaque expressions). The trigger would be a functional exchange, and you could write a boolean expression refering to the value of the items carried by the functional exchange. The way guard are expressed in Capella is not formal, but what we call “linked text” allows to ensure a certain level of consistence. There might be a few examples of this in the Capella IFE sample model.
In a sequence message, you would use the “Context” elements (based on opaque expressions, which allows you to specify in a sort of constraint the values that are actually exchanged.
Thank you Stephane, it is becoming more clear now.
I will definitely use your suggestions.