Featured Post

Applying Email Validation to a JavaFX TextField Using Binding

This example uses the same controller as in a previous post but adds a use case to support email validation.  A Commons Validator object is ...

Saturday, March 16, 2013

A SysML IBD of Bass Guitar Effects

Based on some feedback from a previous post, I created a SysML Internal Block Diagram to show the power connections between the various parts of my bass guitar effects setup.


I received even more feedback about the IBD using object instances rather than properties.  Both are legal on an IBD, but object instances are a poorer choice because they don't express the context inherent in a property.  The context is the block (ex, "Carl's Bass Effects") and it can be applied to part properties, shared properties, and reference properties.

The corrected IBD is here.  I retained the original IBD, but marked it as obsolete in this post.


In the previous post, I created a Block Definition Diagram of my bass guitar effects. A reader suggested I push the details of that particular BDD onto an IBD.  The revised BDD appears at the bottom of the post; this is the continuation of the effort which introduces another SysML diagram type.


A SysML Internal Block Diagram is used to show the internal structure of a block.  In Sparx Systems EA, an IBD is associated with the block that it is describing.  Starting with a block "Carl's Bass Effects" on a BDD, right click and select New Diagram > Internal Block Diagram.

Adding a New Diagram to a Block
A blank diagram will be shown (an IBD).  Navigating back to the BDD, you'll find the block that owns the IBD marked with a pair of connected circles.  This indicates the hidden details of the IBD.  Double-clicking on the block will display the IBD rather than the usual behavior of displaying the Properties dialog.

To add blocks to the IBD, drag from the Project Explorer.  When prompted about how you'd like the block represented, select "Instance (Object)" so that any ports are displayed with the block.  Use "All" for the Structural Elements which includes the Ports.

Select Instance(Object) to Display Ports with the IBD Blocks
Now, draw port-to-port connectors showing the flow of power.  Each connector is named.  Each connector is a physical cable with a certain polarity.  Because of the standardization among effects pedal jack sizes, I've left off additional information about the cable.

 Internal Details Relating Blocks of Bass Effects: Shouldn't Use Object Instances 

It appears there's a bug in Save As Image related to the IBD frame; it's drawn twice.  I can right-click on the diagram background and select select Hide Diagram Frame, but unfortunately, that would pull off the Wall port that's hanging on it.  This isn't a problem with saving as a PDF, which is how I usually transfer diagrams to clients without EA.

Many thanks to Stephan for the suggestion to divide these up.


Instance usage from the spec.

IBD Example from SysML !.3


  1. Hi Carl,

    very important: don't use instances in an ibd! I don't know why EA allows it, but it is definitely wrong.

    In your previous blog post, there is a picture of your project explorer, showing the properties underneath your block "Carl's Bass Effects". Those elements should be dropped into the inner diagram frame of the ibd: they must appear as "parts" in this kind of diagram.

    The second, inner diagram frame is required to represent the block in which we are looking, and to have a chance to show the external connections as ports on the frame border, connected with inner parts of the system.

    1. Hi Stephan,

      Can you comment on the screenshot I just posted? I have several examples from the SysML spec, PDFs, and books that show what look like instances. The boxes don't use dashed lines as in properties and use the "object : Class" notation.

    2. Hi Carl,

      instances (objects) are underlined. Parts in an ibd are named like "role : Type", but are NOT underlined.

      Those model elements, which appear in an ibd, are virtually the "contact points" of one end of the composition or aggregation relationships in your bdd. For example: if you have a composition between block "Carl's Bass Effects" and block "MarkBass Compressors", you will get a part in your ibd named ": MarkBass Compressors" - an anonymous role of type MarkBass Compressors.

      If you name the end of the composition relationship in your bdd, e.g.: "compr", you will get a part named "compr : MarkBass Compressors" in your ibd. That is not an instance, it is a part!

      In an ibd of "Carl's Bass Effects", you should use those model elements you will find in your project explorer tree underneath the block "Carl's Bass Effects". Just grab and drop them in your ibd.

      Hope that helps.


    3. Thanks again. I'm writing a third post that's using reference properties instead of out-of-context instances. I'll post a link in a few minutes.

    4. Posted new entry with a new IDB and a revised BDD that names the properties.