sysml

SysML IBD diagram - Is it legal to connect a port to multiple ports?


Using sysml 1.6

In an IBD diagram, can I connect one port to multiple ports (*1) (i.e., with two connectors coming out the same port)

?

E.g., I have an IBD diagram with 3 parts: A, B, and C; and each part has a port p. So we have: A.p, B.p and C.p.

Can I legally connect A.p to both B.p and C.p? I.e., two connectors coming out of the port A.p.

(Just because my SysML platform (EA) allows it, does not mean it is legal...)

(To compare with an activity diagram: you cannot legally have two objects flows coming out of a single pin. You have to add a fork element to create the multiple parallel object flow.)

This seems to be a basic ABC thing that must have been asked a 1000 times, but I can't find it.

Thanks

Edit Note *1: "Can I connect one port to multiple ports" i.e., one O/P port outputs the same data item to multiple I/P ports.


Solution

  • Yes, it is allowed to connect one port to multiple other ports. This is what UML says about it:

    UML 2.5.1: If several Connectors are attached on one side of a Port, then any request arriving at this Port on a link derived from a Connector on the other side of the Port will be forwarded on links corresponding to these Connectors. It is not defined whether these requests will be forwarded on all links, or on only one of those links.

    SysML doesn't change this.

    The Precise Semantics for Composite structures defines a good default strategy:

    PSCS 1.2: If the request concerns the emission of a Signal and there are multiple possible targets, the signal is broadcasted to all the targets. If the request concerns an Operation call and there are multiple possible targets, the call is propagated to the first target.

    Now, in SysML we also have flow properties and the specification says about its semantics:

    SysML 1.7: Flow due to flow properties can only occur when flow properties match.[…] The flow property semantics above applies to each connector of a block usage, including when the block usage has multiple connectors [italics by me].

    Of course, what really happens depends on the kind of thing flowing. If it is information it can be broadcast. If it is matter or energy, it needs to be somehow divided up, so that it is conserved. How this is done is not defined in SysML.

    Please note, if A is connected to B and C, B and C will also be connected. The term "connector" is often misunderstood to be some kind of part, such as a pipe. Maybe a better name would have been "connection". To cite again UML:

    When there are multiple connectors attached to a single ConnectableElement, the semantics are the same as a single n-ary Connector connecting the ConnectableElement to all of the ConnectableElements connected via the multiple connectors.

    PS: It is allowed to have multiple object flows outgoing from one pin. It means that it is not determined, which flow will get the object token.