Hardware models in SystemWeaver represent the software-relevant hardware abstraction. The model is used to document the interfaces between software and hardware. This article describes the current meta model and views that make up the hardware model solution which supports users in their work to: 

  • Design electrical components (type, pinning information, load information, etc.)
  • Define information for the components (specs of component electrical interface, electrical properties of component pins, allocation of pins to component, pin surface treatment, supplier information, etc.)
  • Connect the pins between components (ECU to I/O devices)
  • Connect to Circuit IDs


The SystemWeaver views often used to support hardware design are: 

  • Overview (Example: With default attributes, such as Pin Type, Voltage, etc.)
  • Connect Pins
  • Configurable Graphs
  • Configurable Grids (Example: Component List sorted alphabetically that includes all components in the H/W Architecture, along with default attributes.)
  • Configurable Reports (Example: An ECU System report that covers all components, interfaces and requirements of a HW System)


This article will describe Connect pins and provide an example of a Configurable Graph used to visualize a hardware design. Further material covering configuration of grids and reports can be found in Configuring Item Views.


Note: There is ongoing development aimed at offering a hardware model better compatible with wire harness tools.


Hardware Meta Model

Below is the standard hardware meta model and the item types that make up the model. 



Item Types


The model allows for the creation of hardware architectures containing ECU systems in which one ECU and its connected components are described.


Example Structure Tree in swExplorer

The meta model can easily be extended to allow for more elaborate architectures as well. 


H/W Requirements

Design Requirements used for general specification of H/W component properties can also be included in the structure tree.

  • Electrical properties
  • Mechanical properties
  • Compliance with standards


H/W Design Requirements can be traceable, automatically included in component specifications and made visible in test solutions. 


Connection Model

For the hardware model, an explicit connection model is used. This means that there is an explicit connection produced for all items that should be connected. To uniquely identify the items to be connected, a structural model is used where all instances of items get a unique node. The connection model adds one of the pins as a connection point. The connection is made between the connection point and the pin nodes on the components.



Connect Pins View

These explicit connections cannot be created in the structure tree. To work with connecting hardware, the Connect pins view is used. The view is hard-coded for the Hardware meta model and must be set to Active by an Architect via Configure the explorer.  



Support for Circuit ID and Boundary Connections

The Connect pins view supports the following connectors and concept:


Assembly Connectors


Delegation Connectors

The view also supports the creation of delegation connectors. Use the keyword <<Boundary>> to select the current context, i.e., a HW System, to connect with a selected pin as shown in the picture below: 


Global Identifier for the Connection (Circuit Identity)

The concept of global identifier for the connection is also supported via the use of the Select Circuit ID from list tool where users can select a Circuit ID from the list of available items of the item type "Circuit Identity": 

Tip:  The concept of Circuit IDs is ancient in, for example, the automotive world (e.g., https://en.wikipedia.org/wiki/DIN_72552 or https://de.wikipedia.org/wiki/Klemmenbezeichnung) and is used by many automotive companies.


The Connect pins view itself is available to end users when they select an “ECU System” item. Using the Connect pins view, pins on the different hardware components can be connected. Users first select a Main component to connect (A). In the below example, "ECU1" is selected, but any of the components to be connected can be the "main component" . Next, they select a pin of the component to connect (B) and the other component to connect (C). Then, they select the pin of the component to connect (D). The connections are created immediately when the selection is made. 


The Connect H/W Interfaces Using the Connect Pins View article describes in more detail how end users interact with the view. 


Configurable Graphs

While making hardware connections using the Connect pins view, a configured graph can be used in parallel with Connect pins to visualize the connection nodes and edges. It's recommended that you are familiar with configuring graphs prior to configuring your hardware system graphs.


Example ECU System Graph

The below example uses the hardware meta model. The configuration is defined and saved using the Graphs Sandbox as described in the article linked above.

Example Configuration

<Graph>
  <Options>
    <ObjIcons/>
  </Options>   
  <Layout name="incrementalHierarchical">

  </Layout>  
  <EdgeStyles>
    <EdgeStyle name="ReqTrace" thickness="4" lineType="none" fillColor="#000000" fromArrowType="triangle" toArrowType="none" />
    <EdgeStyle name="Allocation" thickness="4" lineType="dash" fillColor="#bfbfbf" fromArrowType="none" toArrowType="none" />
  </EdgeStyles>
  <NodeStyles>
    <NodeStyle name="Sensor" fillColor="#fbdbd7" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" />
    <NodeStyle name="Dummy" fillColor="#ffffff" fillColor2="#ffffff" borderThickness="1" borderColor="#ffffff" />
    <NodeStyle name="ECU" fillColor="#ffffff" fillColor2="#ffffff" borderThickness="3" borderColor="#006600" />
    <NodeStyle name="Actuator" fillColor="#ffff00" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" />
    <NodeStyle name="Switch" fillColor="#00cc00" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" />
    <NodeStyle name="Component" fillColor="#00cc99" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" />
  </NodeStyles>


  <Context name="ecuSystem">
    <!--for signal interface-->
    <AddParts owner="main" sid="ITHP" part="Components" defobj="AbstractComponent" nodes="true"/>
    <AddParts owner="AbstractComponent" sid="ITWB" part="ports" defobj="signals" nodes="true"/>
    <AddParts owner="main" sid="ITHC" part="local_conns" defobj="local_conns"/>
    <AddParts owner="main" sid="IBC3" part="conns" defobj="local_conns" refobj="signals"/>
    <!-- AddParts owner="main" sid="ITHQ" part="Reqs" defobj="Req"/ -->
    <!-- AddParts owner="AbstractComponent" sid="ITHQ" part="Reqs" defobj="+Req"/ -->
  </Context>
  <ForEachInContext name="ecuSystem" group="main">
    <ContextGoNodes>
      <ContextGoForward part="Components">
        <Choose>
          <When test="Item.SID='BIHN'"> 

            <Node style="ECU">
              <ContextGoItem>
                <Node style="Dummy"/>
              </ContextGoItem>
              <ForEach select="Context:/ports">
                <InPort/>                        
              </ForEach>
            </Node>        

          </When>
          <When test="Item.SID='BISR'">
            <Node style="Sensor">
              <ForEach select="Context:/ports">
                <InPort/>                        
              </ForEach>      
            </Node>
          </When>
          <When test="Item.SID='BIAR'">
            <Node style="Actuator">
              <ForEach select="Context:/ports">
                <InPort/>                        
              </ForEach>                    
            </Node>

          </When>
          <When test="Item.SID='BIED'">
            <Node style="Component">
              <ForEach select="Context:/ports">
                <InPort/>                        
              </ForEach>                    
            </Node>
          </When>
          <When test="Item.SID='SBSH'">
            <Node style="Switch">
              <ForEach select="Context:/ports">
                <InPort/>                        
              </ForEach>                    
            </Node>
          </When>                
        </Choose>            
      </ContextGoForward>
    </ContextGoNodes>
  </ForEachInContext>                                                             

  <ForEachInContext name="ecuSystem" group="AbstractComponent">
    <If test="SID='BIHN'">

      <ContextGoNodes>
        <ForEach select="Context:/ports"> 
          <Variable name="ECUpin" select="." as="Items"/>
          <ForEach select="Context:/refobj-back-to-part::conns/defobj::/back-to-part::conns/refobj::">
            <Log>#{Item.SID} #{Name}</Log>
            <If test="Parent.Item.SID='BISR'">
              <Edge style="Allocation" from="." to="$ECUpin"/>
            </If>
            <If test="Parent.Item.SID='BIAR' or Parent.Item.SID='BIED' or Parent.Item.SID='SBSH'">
              <Edge style="Allocation" to="." from="$ECUpin"/>
            </If>                      
          </ForEach>            
        </ForEach>
      </ContextGoNodes>
    </If>


  </ForEachInContext>   
</Graph>


Example Result