Skip to main content

VFB and Virtual Function Clusters

What You Will Do​

In this chapter you build a composition and an atomic SWC by hand in the VFB editor, then layer a VFC (Virtual Function Cluster) on top of them. In AUTOSAR a VFC is not a separate element — it is expressed as a PortGroup. You collect the SWC ports that participate in a function into a single PortGroup and keep that PortGroup name identical from the atomic SWC up to the root composition.

First you create the composition ParkSensor_RR and the atomic SWC ParkDistanceSensing inside it from scratch. Next you review the structure of the VFB root, and then you create the PortGroup VFC_ParkAssist on the ParkDistanceSensing you just built. Finally you use the VFC (PNC Overlay) icon to see which compositions participate in each VFC.

When you finish this chapter, your project is in the following state.

  • The root PncVehicle contains the composition ParkSensor_RR, which contains the atomic SWC ParkDistanceSensing. The two ParkDistance ports are joined by a delegation connector, and the composition's ParkDistance port is joined to the ParkDistance port of SouthZone by an assembly connector at the root.
  • The ParkSensor_RR composition is mapped to the node ParkSensor_RR [ECU] in the System editor.
  • ParkDistanceSensing has the PortGroup VFC_ParkAssist (CATEGORY PARTIAL_NETWORKING, OUTER PORTS ParkDistance).
  • The parent composition ParkSensor_RR and the root PncVehicle automatically receive a PortGroup of the same name, VFC_ParkAssist.
  • You understand the VFC family rule (the same-name rule) and can check which compositions participate in a VFC with the PNC Overlay.

Before You Begin​

  • Finish Interfaces and SOME/IP Services first. The ports in this chapter use the PortInterface SRI_ParkDistance created in Chapter 5.
  • Up to the previous chapter the VFB root PncVehicle is empty. In this chapter you create one composition per node in the System editor, 14 in total. You follow the full procedure for the representative composition ParkSensor_RR, and you build the remaining 13 the same way using the table in The Remaining 13 Compositions.
  • At the end of the representative procedure you connect the port of ParkSensor_RR to a port of SouthZone. So if you create the 13 compositions in the table first and then follow the representative procedure, your screen matches the figures. The procedure figures in this chapter were also captured with the 13 compositions already in place.
  • The SouthZone composition has an R-Port ParkDistance (PortInterface SRI_ParkDistance). It is the counterpart of the assembly connector you create in this chapter.
  • The node ParkSensor_RR [ECU] in the System editor, created in Topology Design, exists. It is the target of ECU/HPC Mapping in this chapter.
  • There is not a single PortGroup yet, and there is no link between PNCs and VFCs yet either (the VFC reference of a PNC mapping).

Creating the SWC and the Composition​

As the representative case, you create the composition ParkSensor_RR for an end ECU and the atomic SWC ParkDistanceSensing inside it.

Creating the Composition​

  1. In the EDITOR view on the left, click VFB under DESIGN.

    The PNC:VFB tab opens, and the root composition name PncVehicle appears at the top left of the canvas.

  2. Click Auto Layout on the toolbar at the bottom of the canvas. It is the fourth button, after Zoom In, Zoom Out, and Fit to View.

    A progress dialog appears briefly and disappears, and the compositions are arranged. If the whole layout does not fit on screen, click Fit to View. The arrangement produced by Auto Layout counts as an unsaved change and is saved together with the VFB editor later.

  3. Right-click the empty canvas near SouthZone and click Add Composition.

    Context menu on the empty canvas

    Figure 6-1. Right-clicking the empty canvas in a VFB root that holds 13 compositions. ① Add Composition, the item to click. The remaining menu items are Attach Composition and Add Interface Mapping.

    Note. Later you have to connect a port of this composition to a port of SouthZone. It is easier if you right-click a spot where both nodes are visible at the same time.

    A node appears where you right-clicked. Its default name is Composition_0.

  4. Click the new node. The COMPOSITION properties panel appears on the right.

    The new composition and the properties panel

    Figure 6-2. The new composition. ① The node Composition_0 on the canvas. ② NAME = Composition_0. ③ AS PROTOTYPE = Composition_0. Below them you see PORTS = No ports available and PORT GROUPS = No port groups.

  5. Type ParkSensor_RR in NAME and press Tab. Then type ParkSensor_RR in AS PROTOTYPE as well and press Tab.

    The renamed composition

    Figure 6-3. The screen after renaming. ① The node. Both NAME and AS PROTOTYPE are ParkSensor_RR.

    Caution. Changing NAME does not change AS PROTOTYPE along with it. You must edit both fields. The prototype name at the root and the SWC-ECU mapping both use the AS PROTOTYPE value as their key.

Creating the Atomic SWC​

  1. Double-click the ParkSensor_RR node to drill into it.

    The path System › ParkSensor_RR appears at the top left of the canvas, together with the empty frame ParkSensor_RR.

    Note. The first item of the path is always shown as System, regardless of the root name (PncVehicle). Click System to return to the root view.

  2. Right-click inside the frame, hover over Add SWC, and click Application.

    Add SWC on the frame context menu

    Figure 6-4. Right-clicking inside the frame. ① Add SWC. ② Application, the submenu item to choose. The rest of the submenu is Composition, Adaptive Application, Complex Device Driver, Ecu Abstraction, Sensor Actuator, and Service. This menu does not appear if you right-click the empty canvas outside the frame.

    A node appears inside the frame. Its default name is Application_0.

  3. Click the new node. The APPLICATION properties panel appears on the right.

    The new atomic SWC

    Figure 6-5. The new atomic SWC. ① The node Application_0 inside the frame. ② NAME = Application_0. ③ AS PROTOTYPE = Application_0_0. The two defaults differ.

  4. Type ParkDistanceSensing in NAME and press Tab. Type ParkDistanceSensing in AS PROTOTYPE as well and press Tab. Edit both fields, for the same reason as with the composition.

Creating the Ports​

You create one port on the SWC and one port on the composition boundary. Both are named ParkDistance and both use the PortInterface SRI_ParkDistance.

  1. Right-click near the right edge of the ParkDistanceSensing node and choose Add Port › PPort.

    Add Port on the SWC context menu

    Figure 6-6. Right-clicking the SWC. ① Add Port. ② PPort, the submenu item to choose. The rest of the submenu is RPort and PRPort. The remaining menu items are Detach SWC and Delete.

    Note. The port is placed on the edge nearest the point you right-clicked. If you right-click near the node header, the port lands on the top edge and overlaps the name. To place it on the right as in the example, right-click the right edge.

  2. Click the new port. The properties panel title changes to PPORT. Type ParkDistance in NAME, then click Type to search... in PORT INTERFACE and choose SenderReceiver: SRI_ParkDistance from the list.

    Choosing the PORT INTERFACE

    Figure 6-7. Choosing the PortInterface of the port. ① NAME = ParkDistance. ② The search field of PORT INTERFACE. ③ SenderReceiver: SRI_ParkDistance, the item to choose from the list. The list also shows the other SenderReceiver interfaces created in Chapter 5. A port requires a PortInterface, so until you choose one, the PORT INTERFACE label is red and the V icon in the status bar carries the error badge 1; once you choose it, the label returns to normal and the badge disappears.

    Note. While the node is selected, its resize handles overlap the port, so clicking the port selects the node again. Click the empty canvas once to clear the selection, then click the port. If the port is too small to hit, hold Ctrl and scroll the mouse wheel to zoom in. In the drilled-down view, Fit to View fits the frame and its boundary ports to the canvas. An open properties panel covers the right part of the canvas, so if it hides the right edge of the frame, collapse the panel.

  3. This time, right-click the right edge of the frame and choose Add Port › PPort. Set the new boundary port to NAME = ParkDistance and PORT INTERFACE = SenderReceiver: SRI_ParkDistance as well.

    The SWC port and the composition boundary port

    Figure 6-8. Both ports created, not yet connected. ① The composition port created on the frame boundary. ② The SWC port created on ParkDistanceSensing. On the right, DATA ELEMENT lists the data elements of SRI_ParkDistance — uint8 Distance1 through Distance4 and boolean SensorFault — each with a NON-QUEUED / QUEUED toggle.

Connecting with a Delegation Connector​

A connector that joins a composition boundary port to an internal SWC port is called a delegation connector.

  1. Right-clicking a port shows Connect to, but on this screen it offers no candidates.

    Connect to with no candidates

    Figure 6-9. Right-clicking the SWC port. ① Connect to. ② The submenu has no candidates and shows only (No compatible ports). The remaining menu items are Connect to Mapping and Delete.

    Caution. Connect to is empty even though a boundary port with the same PortInterface exists. In this chapter you connect the ports with Shift+drag instead.

  2. Hold Shift and drag the SWC port onto the boundary port.

    Creating a delegation connector with Shift+drag

    Figure 6-10. Just before the Shift+drag. ① The SWC port where the drag starts. ② The composition boundary port where it ends.

    A line is drawn between the two ports.

    The frame with the delegation connector

    Figure 6-11. The inside of ParkSensor_RR with the delegation connector in place, with the properties panel collapsed. ① The frame ParkSensor_RR. A line runs from the SWC port to the boundary port.

    Note. PAIO names the connector automatically, for example Delegation_ParkDistance_ParkDistanceSensing. You can change the name in NAME on the properties panel after selecting the connector; the meaning of the model does not change.

Connecting with an Assembly Connector​

A connector that joins ports of two different compositions is called an assembly connector. You connect ParkDistance (P) of ParkSensor_RR to ParkDistance (R) of SouthZone.

  1. Click System in the path to return to the root view.

  2. At the root, Connect to offers no candidates either.

    Connect to is empty at the root as well

    Figure 6-12. Right-clicking the port of ParkSensor_RR at the root. ① Connect to. ② (No compatible ports) in the submenu.

  3. Hold Shift and drag the port of ParkSensor_RR onto the ParkDistance (R) port of SouthZone.

    Creating an assembly connector with Shift+drag at the root

    Figure 6-13. Just before the Shift+drag at the root. ① The ParkDistance port of ParkSensor_RR, where the drag starts. ② The ParkDistance port of SouthZone, where it ends.

    A line is drawn between the two compositions.

    Note. The left edge of SouthZone carries several ports side by side, and the canvas does not show their names. If you are not sure which port is which, click a port and check that NAME on the properties panel reads ParkDistance.

Mapping to an ECU and Saving​

  1. At the root, right-click the ParkSensor_RR node and choose ECU/HPC Mapping › ParkSensor_RR [ECU].

    The ECU/HPC Mapping submenu

    Figure 6-14. Right-clicking a composition node. ① ECU/HPC Mapping. ② ParkSensor_RR [ECU], the item to choose. A node already mapped to another composition carries that composition name, as in WestZone [ECU] (<- WestZone). At the end of the list are New ECU and New HPC.

    Note. Right after you map the node, the node header on the canvas shows neither the ECU icon nor the mapped node in brackets; it still reads ParkSensor_RR. The mapping itself is saved, and once you close and reopen the editor the header shows the ECU icon and reads ParkSensor_RR [ParkSensor_RR].

  2. Press Ctrl+S to save. The unsaved-change marker on the PNC:VFB tab disappears.

    The VFB root after saving

    Figure 6-15. The VFB root after saving. ① The composition ParkSensor_RR created in this section. An assembly connector runs from the port on its right edge to SouthZone, and the root now holds 14 compositions in total.

The Remaining 13 Compositions​

You create the remaining 13 the same way. Give each composition the same name as the node in the System editor that it maps to, put an atomic SWC inside it, and delegate that SWC port to a boundary port of the same name. After building each composition, map it to the node of the same name with ECU/HPC Mapping.

The representative procedure above assumes that SouthZone already exists. If you are starting from an empty root, create the 13 compositions in the table below first, then return to Creating the SWC and the Composition and build ParkSensor_RR. The next chapter starts from a state in which all 14 are present.

The Internal SWC column of the table uses the form prototype = type. The (P) or (R) on a boundary port is its direction, and the name after it is the PortInterface. Each boundary port is delegated 1:1 to the internal SWC port of the same name.

Composition (= mapped node)Node kindInternal SWCComposition boundary ports
HPCHPCParkAssist = ParkAssistApp, VehicleState = VehicleStateApp, Comfort = ComfortAppParkDistanceSvc(R) SVC_ParkDistance, VehicleStateSvc(P) SVC_VehicleState, ComfortControlSvc(R) SVC_ComfortControl
WestZoneECUGateway = ZoneGatewayComfortCmd(P) SRI_ComfortCmd, MirrorCmd(P) SRI_MirrorCmd, DoorStatus(R) SRI_DoorStatus, SeatStatus(R) SRI_SeatStatus, MirrorStatus(R) SRI_MirrorStatus, WindowSwitch(R) SRI_WindowSwitch, ComfortControlSvc(P) SVC_ComfortControl
EastZoneECUGateway = ZoneGatewaySame as WestZone
SouthZoneECUGateway = RearGatewayParkDistance(R) SRI_ParkDistance, TrailerStatus(R) SRI_TrailerStatus, TrailerCmd(P) SRI_TrailerCmd, TailLamp(R) SRI_TailLamp, ParkDistanceSvc(P) SVC_ParkDistance, VehicleStateSvc(R) SVC_VehicleState
DoorCtrl_FL, DoorCtrl_FRECUDoorControl = DoorControlDoorStatus(P) SRI_DoorStatus, ComfortCmd(R) SRI_ComfortCmd
SeatCtrl_FL, SeatCtrl_FRECUSeatControl = SeatControlSeatStatus(P) SRI_SeatStatus, ComfortCmd(R) SRI_ComfortCmd
MirrorAct_FL, MirrorAct_FRECUMirrorControl = MirrorControlMirrorStatus(P) SRI_MirrorStatus, MirrorCmd(R) SRI_MirrorCmd
WindowSw_FLECUWindowSwitch = WindowSwitchWindowSwitch(P) SRI_WindowSwitch
ParkSensor_RRECUParkDistanceSensing = ParkDistanceSensingParkDistance(P) SRI_ParkDistance (created in this chapter)
TrailerModuleECUTrailerControl = TrailerControlTrailerStatus(P) SRI_TrailerStatus, TrailerCmd(R) SRI_TrailerCmd
TailLamp_RRECUTailLampControl = TailLampControlTailLamp(P) SRI_TailLamp

The three internal SWCs of HPC are Adaptive Applications, not atomic SWCs, so you create them with Adaptive Application under Add SWC. HPC later receives one more composition prototype, PARA. You do not create it yourself — the PARA Platform Import in PARA Platform Import and PNC Request Ports adds it for you.

The root PncVehicle has 21 assembly connectors in total. They connect the status ports (P) of the end ECUs to a Zone (R), the command ports (P) of a Zone to the end ECUs (R), and the service ports of a Zone to the HPC. Inside HPC there is one more assembly connector, between VehicleStateSvc of VehicleState and VehicleStateSvc of ParkAssist.

Note. To generate code, an atomic SWC needs a runnable and RTE events. In the finished example, ParkDistanceSensing has the runnable ParkDistanceSensing_Main and the timing event TE_ParkDistanceSensing_Main with a cycle time of 0.05. This tutorial targets PNC design, so it does not cover internal behavior. See VFB Editor for how to create it.

Reviewing the VFB Root Structure​

  1. Arrange the root again once all 14 compositions are in place. Click Auto Layout, and click Fit to View if the whole layout does not fit on screen.

    The VFB root with Auto Layout applied

    Figure 6-16. The VFB root PncVehicle with Auto Layout applied. ① The Auto Layout button. The canvas shows the 14 compositions and the assembly connectors between them. Auto Layout repositions all 14, so the layout differs from the hand-placed one in Figure 6-15 (ParkSensor_RR moves to the top left). Node names are small when the window shows the whole root, so zoom in with Ctrl and the mouse wheel to read them, as in Figure 6-25 later in this chapter.

The root PncVehicle is structured by the following rules.

  • One composition per node. Each node in the System editor (HPC, ECU) gets one composition. The atomic SWCs live inside that composition.
  • Composition name = node name. Give each composition the same name as its node in the System editor. The VFB uses the composition's prototype name (AS PROTOTYPE) to find the SWC-ECU mapping and link the composition to a node (machine).
  • SWC-ECU mapping. The SWC-ECU mapping in the SYSTEM places each composition on the node of the same name. The ECU/HPC Mapping command from the previous section creates this mapping.
  • Assembly connectors. The status ports of an end ECU connect to a Zone, and the command ports of a Zone connect to the end ECUs. The service ports of a Zone connect to the HPC.

A composition node on the canvas shows its name followed by the node it is mapped to in brackets, for example EastZone [EastZone]; a composition that is not mapped shows its name alone. The compositions of the example and their mapping targets are as follows.

Composition (= mapped node)Role
HPCHPC (AP). Hosts the application AAs
WestZone, EastZone, SouthZoneZone ECUs. Host the gateway SWCs
DoorCtrl_FL, SeatCtrl_FL, MirrorAct_FL, WindowSw_FL, DoorCtrl_FR, SeatCtrl_FR, MirrorAct_FRComfort end ECUs
ParkSensor_RRPark distance sensor end ECU
TrailerModule, TailLamp_RRTrailer end ECUs

Note. To review or change a mapping, right-click the composition node at the root and use ECU/HPC Mapping. See the composition node menu in VFB Editor for details.

VFC and PortGroup​

In AUTOSAR a VFC (Virtual Function Cluster) is realized as a PortGroup. This tutorial follows these conventions.

  • Collect the ports that participate in one function — park assist, for example — into a single PortGroup.
  • Name the PortGroup VFC_<function>: VFC_Comfort, VFC_ParkAssist, VFC_Trailer.
  • Set the CATEGORY of every PortGroup to PARTIAL_NETWORKING.

The VFC Family Rule​

The PortGroups that belong to the same VFC use the same name at every level of the hierarchy. This set is called a VFC family. For VFC_ParkAssist it looks like this.

LevelExamplePortGroup nameContents
Atomic SWCParkDistanceSensingVFC_ParkAssistOUTER PORTS = ParkDistance
ECU compositionParkSensor_RRVFC_ParkAssistOUTER PORTS = the delegated port ParkDistance, INNER GROUPS = ParkDistanceSensing / VFC_ParkAssist
Root compositionPncVehicleVFC_ParkAssistINNER GROUPS = VFC_ParkAssist of the participating direct prototypes HPC, SouthZone, and ParkSensor_RR
  • OUTER PORTS: the ports of that SWC (or composition) that participate in this VFC.
  • INNER GROUPS: references to the PortGroup of the same name on a prototype inside the composition.

Caution. If you give a lower-level PortGroup a different name, such as PG_ParkAssist, it is not recognized as a VFC member. The VFC table in the PNC Dialog counts only those direct prototypes of the root that "have a PortGroup with the same name as the VFC" as members. Always use the same name.

Creating a PortGroup​

As the representative case, you create VFC_ParkAssist on the atomic SWC ParkDistanceSensing you built earlier.

  1. On the root canvas, double-click the ParkSensor_RR composition.

    The ParkSensor_RR composition to double-click

    Figure 6-17. The VFB root. ① The ParkSensor_RR composition to double-click (top left after Auto Layout).

    You drill into the composition. The path System › ParkSensor_RR appears at the top left of the canvas, and the atomic SWC ParkDistanceSensing is visible inside the frame ParkSensor_RR.

  2. Click Fit to View on the toolbar at the bottom of the canvas. Whether the frame first appears larger than the view or small, Fit to View fits the frame and its boundary ports on screen.

    Inside ParkSensor_RR

    Figure 6-18. Drilled down into ParkSensor_RR, after Fit to View. ① The path System › ParkSensor_RR. ② The atomic SWC ParkDistanceSensing. ③ Fit to View on the canvas toolbar. The SWC port ParkDistance is delegated to the port on the frame boundary.

  3. Double-click ParkDistanceSensing.

    The SWC Internal Behavior [ParkDistanceSensing] dialog opens.

    The dialog of the SWC you built

    Figure 6-19. The SWC Internal Behavior [ParkDistanceSensing] dialog. ① PORTS holds the P ParkDistance (SRI_ParkDistance) you created earlier. ② PORT GROUPS still reads No port groups. The IMPLEMENTATION section below it (SW VERSION, VENDOR ID, MEMORY SECTIONS) is not used in this chapter.

  4. Click the + (tooltip Add Port Group) to the right of the PORT GROUPS header.

    Empty PORT GROUPS

    Figure 6-20. The right panel of the same dialog. ① The + button of PORT GROUPS, the button to click. The state is still No port groups.

    Note. Figures 6-20 through 6-22 are from the finished example, so the canvas on the left also shows a runnable box (ParkDistanceSensing_Main) and a clock icon that stands for a timing event. The SWC you built by following this chapter has no internal behavior, so the SWC box on your canvas is empty, as in Figure 6-19. This section uses only the right panel, so the result is the same.

    A new PortGroup block, PortGroup_0, appears.

  5. In NAME on the block, delete the default name PortGroup_0, type VFC_ParkAssist, and press Tab. The block title changes to VFC_ParkAssist.

  6. In CATEGORY, click PARTIAL_NETWORKING. The other choice is MODE_MANAGEMENT.

  7. Click the + (tooltip Add member port (pick a port to commit)) to the right of the OUTER PORTS header.

    A new row 1 appears. Its PORT field stays empty and underlined in red (tooltip Required) until you pick a port.

  8. Click the ▾ button at the right of the row to open the candidate list and choose ParkDistance. The only candidates are the ports of this SWC itself.

    Picking a port in OUTER PORTS

    Figure 6-21. Filling in the PortGroup. ① NAME = VFC_ParkAssist. ② PARTIAL_NETWORKING in CATEGORY. ③ The + of OUTER PORTS. ④ The dropdown candidate ParkDistance. The ● marker in front of the dialog title means there are unsaved changes.

    The row changes to 1 | ParkDistance.

    The finished VFC_ParkAssist

    Figure 6-22. The finished PortGroup block, before saving. ① The whole block — NAME VFC_ParkAssist, CATEGORY PARTIAL_NETWORKING (with the unselected MODE_MANAGEMENT on the right), and one OUTER PORTS row, ParkDistance. The Close button sits at the bottom right of the dialog.

  9. Press Ctrl+S to save the dialog. The ● marker in front of the title disappears.

  10. Click Close at the bottom right to close the dialog.

  11. Press Ctrl+S again in the VFB editor to save. The unsaved-change marker on the PNC:VFB tab disappears.

When you save, PAIO automatically creates a PortGroup of the same name on the parent compositions.

CompositionPortGroup created automatically
ParkSensor_RRVFC_ParkAssist, INNER GROUPS = ParkDistanceSensing / VFC_ParkAssist
PncVehicle (root)VFC_ParkAssist, INNER GROUPS = ParkSensor_RR / VFC_ParkAssist

Checking the Automatically Created PortGroup​

  1. In the drilled-down view, click the title row of the ParkSensor_RR frame (the row that carries the name ParkSensor_RR).

    The COMPOSITION properties panel appears on the right.

  2. Look at PORT GROUPS on the properties panel.

    The PortGroup created automatically on the composition

    Figure 6-23. ParkSensor_RR selected after saving. ① The automatically created VFC_ParkAssist in PORT GROUPS. CATEGORY is PARTIAL_NETWORKING, and under INNER GROUPS the PROTOTYPE is ParkDistanceSensing and the PORT GROUP is VFC_ParkAssist. Use + Add inner group reference below to add more inner group references.

Note. An automatically created composition PortGroup does not get its OUTER PORTS (the delegated ports) filled in. So the ParkSensor_RR you built by following this chapter has only INNER GROUPS, whereas the ParkSensor_RR of the finished example also has the OUTER PORTS ParkDistance (see the VFC family table above). The PORT GROUPS section of the composition properties panel lets you edit only INNER GROUPS, and the application AAs (ComfortApp, ParkAssistApp, VehicleStateApp) have no screen for editing PortGroups at all. The member ports of compositions and application AAs are covered in PNC Dialog — Per-PNC Binding.

The Remaining PortGroups​

There are 33 PortGroups in total, and the CATEGORY of every one is PARTIAL_NETWORKING. Create the rest the same way, following the tables below.

  • PortGroups on atomic SWCs follow the procedure above. Double-click the SWC to open the SWC Internal Behavior dialog, create the group with the + of PORT GROUPS, and fill in OUTER PORTS.
  • PortGroups on ECU compositions and on the root are created automatically with the same name when you save the PortGroup of an atomic SWC, and their INNER GROUPS are filled in at the same time.
  • The OUTER PORTS of ECU compositions and application AAs cannot be edited in the VFB editor. An automatically created composition PortGroup has empty OUTER PORTS. You fill these in with the SWC HIERARCHY checkboxes in the next chapter, PNC Dialog — Per-PNC Binding. The OUTER PORTS columns of the two tables below are also the list of ports to check there.
  • The application AAs (ComfortApp, ParkAssistApp, VehicleStateApp) have no screen for creating a PortGroup at all. You create the PortGroups of these three in SWC HIERARCHY as well.

Atomic SWCs and application AAs (OUTER PORTS)

SWCPortGroupOUTER PORTS
DoorControlVFC_ComfortDoorStatus, ComfortCmd
SeatControlVFC_ComfortSeatStatus, ComfortCmd
MirrorControlVFC_ComfortMirrorStatus, MirrorCmd
WindowSwitchVFC_ComfortWindowSwitch
ZoneGatewayVFC_ComfortComfortCmd, MirrorCmd, DoorStatus, SeatStatus, MirrorStatus, WindowSwitch, ComfortControlSvc
ParkDistanceSensingVFC_ParkAssistParkDistance (created in this chapter)
RearGatewayVFC_ParkAssistParkDistance, ParkDistanceSvc
RearGatewayVFC_TrailerTrailerStatus, TrailerCmd, TailLamp, VehicleStateSvc
TrailerControlVFC_TrailerTrailerStatus, TrailerCmd
TailLampControlVFC_TrailerTailLamp
ComfortApp (AA)VFC_ComfortComfortControlSvc
ParkAssistApp (AA)VFC_ParkAssistParkDistanceSvc, VehicleStateSvc
VehicleStateApp (AA)VFC_TrailerVehicleStateSvc

ECU compositions (OUTER PORTS + INNER GROUPS)

CompositionPortGroupOUTER PORTSINNER GROUPS (PROTOTYPE / PORT GROUP)
DoorCtrl_FL, DoorCtrl_FRVFC_ComfortDoorStatus, ComfortCmdDoorControl / VFC_Comfort
SeatCtrl_FL, SeatCtrl_FRVFC_ComfortSeatStatus, ComfortCmdSeatControl / VFC_Comfort
MirrorAct_FL, MirrorAct_FRVFC_ComfortMirrorStatus, MirrorCmdMirrorControl / VFC_Comfort
WindowSw_FLVFC_ComfortWindowSwitchWindowSwitch / VFC_Comfort
WestZone, EastZoneVFC_ComfortComfortCmd, MirrorCmd, DoorStatus, SeatStatus, MirrorStatus, WindowSwitch, ComfortControlSvcGateway / VFC_Comfort
ParkSensor_RRVFC_ParkAssistParkDistanceParkDistanceSensing / VFC_ParkAssist
SouthZoneVFC_ParkAssistParkDistance, ParkDistanceSvcGateway / VFC_ParkAssist
SouthZoneVFC_TrailerTrailerStatus, TrailerCmd, TailLamp, VehicleStateSvcGateway / VFC_Trailer
TrailerModuleVFC_TrailerTrailerStatus, TrailerCmdTrailerControl / VFC_Trailer
TailLamp_RRVFC_TrailerTailLampTailLampControl / VFC_Trailer
HPCVFC_ParkAssistParkDistanceSvcParkAssist / VFC_ParkAssist
HPCVFC_ComfortComfortControlSvcComfort / VFC_Comfort
HPCVFC_TrailerVehicleStateSvcVehicleState / VFC_Trailer

The root PncVehicle (INNER GROUPS only, created automatically when the VFB is saved)

PortGroupParticipating direct prototypes
VFC_ComfortHPC, WestZone, EastZone, DoorCtrl_FL, SeatCtrl_FL, MirrorAct_FL, WindowSw_FL, DoorCtrl_FR, SeatCtrl_FR, MirrorAct_FR (10)
VFC_ParkAssistHPC, SouthZone, ParkSensor_RR (3)
VFC_TrailerHPC, SouthZone, TrailerModule, TailLamp_RR (4)

Checking VFCs with the PNC Overlay​

PortGroups are not drawn on the canvas. To see which compositions participate in each VFC, use the VFC (PNC Overlay) icon.

  1. If you are in the drilled-down view, click System in the path to return to the root view.

  2. Collapse the properties panel if it is open, and click Fit to View to bring the whole root into view.

  3. In the vertical icon strip along the left edge of the canvas, click the first icon, VFC (PNC Overlay). The two icons below it, Intrusion Detection System and Software Cluster, open dialogs that this chapter does not use.

    The PNC OVERLAY panel opens at the top left of the canvas. The VFC list on the panel is sorted by name, and the first item is selected by default. The compositions that do not participate in the selected VFC are dimmed.

    Figure 6-24 was captured at the point where only VFC_ParkAssist on ParkDistanceSensing had been created. At that point there is a single VFC, so the list shows one button and that button is selected immediately. On the canvas, only ParkSensor_RR appears normally, and the other 13 compositions are dimmed. No PNC references this VFC yet, so BOUND PNCS shows --.

    Once you have created everything in the tables under The Remaining PortGroups, the list shows three entries — VFC_Comfort, VFC_ParkAssist, and VFC_Trailer — and the screen matches The Overlay in the Finished Example.

    The PNC Overlay for the VFC_ParkAssist created in this chapter

    Figure 6-24. The overlay turned on in a project built by following this chapter. ① The first icon in the vertical icon strip, VFC (PNC Overlay) (turned on). ② VFC_ParkAssist, the only button in the VFC list (selected). ③ BOUND PNCS = --. ④ ParkSensor_RR, which participates in this VFC. The other 13 compositions are dimmed.

  4. If the node names are too small to read, hold Ctrl and scroll the mouse wheel to zoom in.

    The VFC_ParkAssist overlay, zoomed in

    Figure 6-25. The screen of Figure 6-24, zoomed in around ParkSensor_RR. ① ParkSensor_RR, shown normally. Its neighbors TailLamp_RR, SouthZone, TrailerModule, SeatCtrl_FR, HPC, EastZone, and DoorCtrl_FR are dimmed.

  5. To turn the overlay off, click the VFC (PNC Overlay) icon again.

The Overlay in the Finished Example​

In the finished example, where all 33 PortGroups are present and the PNC binding is complete, the overlay looks as follows. Because PortGroups are not drawn on the canvas, the root view of the finished example has the same shape as Figure 6-16.

The VFB root of the finished example

Figure 6-26. The VFB root of the finished example, which holds all 33 PortGroups (Auto Layout and Fit to View applied). The canvas looks the same as in Figure 6-16.

Turn the overlay on and click VFC_Comfort in the list, and the screen looks like Figure 6-27.

VFC_Comfort selected in the PNC Overlay

Figure 6-27. The finished example with the PNC Overlay on and VFC_Comfort selected. ① The VFC (PNC Overlay) icon. ② The PNC OVERLAY panel. ③ VFC_Comfort. ④ BOUND PNCS = PNC_Comfort. The four compositions at the top of the canvas are dimmed.

The PNC OVERLAY panel

Figure 6-28. The PNC OVERLAY panel, zoomed in. The VFC list holds VFC_Comfort (selected), VFC_ParkAssist, and VFC_Trailer, and BOUND PNCS shows PNC_Comfort.

  • Each VFC is listed as one button. Click a button to select that VFC.
  • BOUND PNCS lists the PNCs that reference the selected VFC. The panel reads it from the PNC mappings in the SYSTEM and shows it here; you cannot edit it. If no PNC references the VFC, it shows --.

Hold Ctrl and scroll the mouse wheel to zoom in on the canvas and read the names of the dimmed compositions.

The VFC_Comfort overlay, zoomed in

Figure 6-29. The VFC_Comfort overlay of the finished example, zoomed in. ParkSensor_RR, TailLamp_RR, SouthZone, and TrailerModule do not participate in VFC_Comfort and are dimmed, while the participating SeatCtrl_FR, EastZone, DoorCtrl_FR, HPC, and MirrorAct_FR appear normally.

Note. The PNC Overlay is for visualization only. You cannot change VFC membership or PNC bindings from the overlay. Edit the link between a VFC and a PNC in PNC Dialog — Per-PNC Binding.

Why Is It Designed This Way?​

A PNC (Partial Network Cluster) references a VFC to state in the model which functions require that PNC to be awake. A VFC does not stay inside one ECU — it spans several ECUs and the HPC. That is why you have to chain PortGroups of the same name from the ports of an atomic SWC up through the ECU composition to the root composition: only then can you follow every participating port of a function from a single VFC at the root. Keeping the composition name identical to the node name serves the same purpose. You have to be able to find the node (machine) directly from a composition in order to know which ECUs and channels a VFC spans.

Check Your Work​

  • The VFB root PncVehicle holds 14 compositions, each named after a node in the System editor.
  • ParkSensor_RR contains the atomic SWC ParkDistanceSensing, and the two ParkDistance ports are joined by a delegation connector.
  • At the root, ParkDistance (P) of ParkSensor_RR is joined to ParkDistance (R) of SouthZone by an assembly connector.
  • After you close and reopen the editor, the header of the ParkSensor_RR node shows the ECU icon and reads ParkSensor_RR [ParkSensor_RR].
  • In the SWC Internal Behavior dialog of ParkDistanceSensing, PORT GROUPS shows VFC_ParkAssist (PARTIAL_NETWORKING, OUTER PORTS ParkDistance).
  • When you select the ParkSensor_RR frame, PORT GROUPS on the COMPOSITION panel shows VFC_ParkAssist with INNER GROUPS ParkDistanceSensing / VFC_ParkAssist.
  • You have created every atomic SWC PortGroup listed in the tables under The Remaining PortGroups.
  • When you click the VFC (PNC Overlay) icon at the root to turn the overlay on, the list holds three entries: VFC_Comfort, VFC_ParkAssist, and VFC_Trailer. Choose VFC_ParkAssist, and only HPC, SouthZone, and ParkSensor_RR appear normally while the remaining compositions are dimmed.
  • BOUND PNCS still shows --. You create the link between a VFC and a PNC in the next chapter.
  • The PNC:VFB tab has no unsaved-change marker.

Next Steps​

In PNC Dialog — Per-PNC Binding you bind a VFC, an I-PDU Group, physical channels, service instances, and wakeup frames to each PNC.