Obsidean_VM/03-VM/45 - HENKEL - VM Auto Chang.../Changeover Analysis - Vetro...

22 KiB
Raw Permalink Blame History


Vetromeccanica Remote Format Changeover Process

This document describes the remote format changeover functionality as implemented in the FormatManagementQE1_G function block (FC800) on the Vetromeccanica Q1 PLC for the TL2x line. The Q1s PLC coordinates the changeover process, interacting with an operator via HMI, the master line PLC (Henkel), other Vetromeccanica machines on the line, and external systems like AUTEFA and Alpla.

General Concept

The process is managed by a state machine controlled by the FormatChangeCycle variable. The Q1 PLC acts as a local coordinator for its section of the line (including Merger and Guides) and synchronizes with the overall line state via signals from a supervisory PLC.

Prerequisites

For the remote changeover to be initiated, the following conditions must be met:

  1. Remote Mode Enabled: The operator must select remote format change on the HMI, which sets the "FormatManagementQE1_D".RemoteSelector flag to TRUE.
  2. Line Ready for Emptying: The supervisory PLC (Henkel) must signal that the current production batch is finished by sending 0 in the "ComSV".TL25_WriteToSv.FromHenkel.SignalExchange.Filler.CalculatedBottlesRemainingToFill variable.
  3. Next SKU Information: Information about the next product ("FormatManagementQE1_D".NextSku) must be available from the Alpla system via the supervisor.

To enable the Remote change-over we need to enable on the following page:

!Pasted image 20250731131434.png

State Machine Workflow

Vetromeccanica PLC internal sequence (FC800)

  1. Remote mode activation (FormatChange_Enabled)

    • The operator enables "Remote Format Change" on the HMI (RemoteSelector = TRUE).
    • Vetromeccanica waits for Henkel to send CalculatedBottlesRemainingToFill = 0.
  2. Line clearance request (FormatChange_Emptying)

    • Entry condition: remaining bottles counter = 0.
    • Vetromeccanica displays PopUp_EmptyStart 2001 asking the operator to confirm the emptying.
    • If the answer is YES:
      • EmptyingStart := TRUE.
      • MachineEmpty is sent to local machines and ToAutefa.dw0.x[1] = TRUE.
        • If the answer is NO, it returns to the previous state.
  3. Line empty verification

    • Waits for confirmation of MachineEmpty and FromAutefa.dw0.x[24] = TRUE (Changeover In Progress).
    • Vetromeccanica displays PopUp_EmptyEnd 2002 so the operator can confirm the line is empty.
  4. Format change execution (FormatChange_InProgress)

    • With STW.di0.x[0] = TRUE (Changeover Request) Vetromeccanica triggers Rt_LoadRemoteRecipe (Job 70).
    • Monitors the HMI result (DBW_36 = 4 OK / DBW_36 = 12 Error).
    • Keeps the change-in-progress flag towards Henkel and AUTEFA.
  5. Line ready (FormatChange_Done / NotNecessary)

    • When EndFormatManagement.Q and Ap_LifterGuideInPosition are TRUE.
    • Vetromeccanica displays PopUp_LineReady 2000; after operator confirmation it sends Changeover Complete and updates BatchLast.
  6. Counter reset

    • Henkel sets STW.di0.x[1] = TRUE.
    • FC_TT_Devices resets the counters using the correct index [1].
  7. Production restart

    • Henkel sends new CalculatedBottlesRemainingToFill > 0.
    • Vetromeccanica clears its internal flags and sends the Production Ready signal (STW.di0.x[2]).
  8. Error handling (FormatChange_Error)

    • Recipe error (DBW_36 = 12) or machine timeout.
    • Raises alarms A371_23_0 / A371_23_1; requires TT_Run.IN_PB_Reset.

Key signals

Signal Description Direction
SignalExchange.Filler.CalculatedBottlesRemainingToFill Bottles remaining counter Henkel → Vetromeccanica
ToAutefa.dw0.x[1] Start changeover request Vetromeccanica → AUTEFA
FromAutefa.dw0.x[24] Changeover in progress AUTEFA → Vetromeccanica
PopUp_EmptyStart 2001 Confirm emptying Vetromeccanica HMI
PopUp_EmptyEnd 2002 Confirm line empty Vetromeccanica HMI
PopUp_LineReady 2000 Line ready Vetromeccanica HMI

The core logic resides in a state machine. The main states and their functions are:

State 1: FormatChange_Enabled

  • The system enters this state once Remote Mode is active.
  • It continuously monitors CalculatedBottlesRemainigToFill.
  • When this value becomes 0, the PLC reads the current and next batch information (SKU, IDH, PO numbers) from the supervisory PLC.
  • It then transitions to State 2 (FormatChange_Emptying).

State 2: FormatChange_Emptying

  • The PLC compares the current bottle type ("DB HMI Recipe Bottle".number_set_data) with the next scheduled one ("FormatManagementQE1_D".NextSku.ProdFamily).
  • If the format is the same: It determines a change is not required, shows a PopUp_LineReady (2000) message, and moves to State 5 (FormatChange_NotNecessary).
  • If the format is different:
    • A pop-up (PopUp_EmptyStart - 2001) is displayed on the HMI, asking the operator to confirm the start of the line emptying process.
    • Upon operator confirmation (HMI_PopUp.Yes):
      • The PLC sets the "FormatManagementQE1_D".EmptyingStart flag.
      • It sends MachineEmpty commands to the relevant machinery (e.g., Merger).
      • A new pop-up (PopUp_EmptyEnd - 2002) is shown to signal that the emptying process has begun.
    • Once the line machines confirm they are empty, and the operator confirms via the PopUp_EmptyEnd dialog, the system transitions to State 3 (FormatChange_InProgress).
    • The Transport to carry on also need #"Line Empty" memory that is all photocells clear set on the FC380 -> "ComSV".TL25_WriteToSv.ToSV.STW.QE1.MachineEmpty.

!Pasted image 20250731190122.png

State 3: FormatChange_InProgress

  • This is the main state where the physical changeover occurs.
  • The PLC triggers the loading of the new remote recipe by activating "Rt_LoadRemoteRecipe". This sends a command (Job 70) to the HMI system.
  • It signals to AUTEFA that a changeover is active ("ComSV".TL25_WriteToSv.ToAutefa.dw0.x[] := TRUE).
  • It monitors the status of the recipe download ("DB HMI".DBW_36). A value of 4 indicates success, while 12 indicates an error.
  • It waits for confirmations from all local machines that the changeover is complete (e.g., "FormatManagementQE1_D".EndFormatManagement.Q, "Ap_LifterGuideInPositon").
  • On Success: When all machines are ready and in position for the new format, it shows a PopUp_LineReady (2000) message and awaits final operator confirmation.
  • On Failure: If there's a recipe load error or a machine fails to complete its changeover, it moves to State 6 (FormatChange_Error).

State 4: FormatChange_Done

  • After the final operator confirmation in State 3, the system enters this Done state.
  • It sends the BatchLast information to the Alpla system.
  • It signals to the Henkel PLC that the line is ready for production (LineStatus.di0.x[]).
  • It resets internal flags and awaits a new CalculatedBottlesRemainigToFill value to transition back to State 1 for the next changeover.

State 5: FormatChange_NotNecessary

  • Entered when the current and next SKU are identical.
  • It displays a PopUp_LineReady message.
  • Upon operator confirmation, it moves to the FormatChange_Done state to finalize the (skipped) cycle.

State 6: FormatChange_Error

  • This state is entered if any error occurs during the process (e.g., recipe load failure, machine timeout).
  • Specific alarms are raised (e.g., A371_23_0 for recipe error, A371_23_1 for machine error).
  • The operator must acknowledge the error via a Reset button ("DB TT Run".TT_Run.IN_PB_Reset).
  • Depending on the error, the system may attempt to retry the operation by transitioning back to State 3 (FormatChange_InProgress) or require further manual intervention.

Important Signals From HENKEL - Vetro - AUTEFA

!Pasted image 20250731115919.png

FromHenkel : Data_From_EbConvey[0].0 : Request Signal To Start ChangeOver FromHenkel : Data_From_EbConvey[0].1 : Reset Signal To Restart all Counter FromHenkel : Data_From_EbConvey[0].2 : ChangeOver Complete FromHenkel : Data_From_EbConvey[0].3 : Production Ready

!Pasted image 20250731115940.png

ToHenkel : Data_From_EbConvey[0].0 : Line is busy with ChangeOver ToHenkel : Data_From_EbConvey[0].1 : ChangeOver is finished and ready ToHenkel : Data_From_EbConvey[0].2 : IDH_BTL_NEXT Proper: 1 = Found / 0 = Not Found

!Pasted image 20250731115959.png

ToAutefa: x[0] : Reset ToAutefa: x[1] : Request Signal To Start Changeover

Flow on Q1 PLC:


@startuml
title Remote Format Change  Main Steps (Vetromeccanica PLC)
hide footbox
skinparam ArrowHeadColor none
skinparam NoteBackgroundColor #F0F0F0
skinparam NoteBorderColor #999999
skinparam ParticipantPadding 100
skinparam BoxPadding 6
skinparam WrapWidth 250
!pragma teoz true

' ==== Re-usable styles ====
!define VAR(x) <back:#F0F0F0><color:#7F6000><b>x</b></color></back>
!define SIG(x) <back:#F0F0F0><color:#005A9E><b>x</b></color></back>
!define FROM(x) <back:#FFAAAA><color:#000000><b>x</b></color></back>
!define TO(x) <back:#AAFFFF><color:#000000><b> x</b></color></back>

!definelong Nota($where, $text)
  note over $where
  $text
  end note
!enddefinelong

!definelong NotaParalela($where, $text)
  / note over $where
  $text
  end note
!enddefinelong

!definelong Variable($where, $text)
  hnote right $where #AAFFFF
  $text
  end note
!enddefinelong

!definelong VariableRojo($where, $text)
  hnote right $where #FFBBBB
  $text
  end note
!enddefinelong

!definelong VariableIzquierda($where, $text)
  hnote left $where #AAFFFF
  $text
  end note
!enddefinelong

!definelong VariableCentro($where, $text)
  hnote over $where #AAFFFF
  $text
  end note
!enddefinelong

!definelong VariableParalelo($where, $text)
  / hnote right $where #AAFFFF
  $text
  end note
!enddefinelong


participant Henkel        as H
participant Vetromeccanica as V
participant AUTEFA        as U
participant Alpla         as A

== Preconditions ==
Nota(V,"Initial state: Remote Format Change <b>disabled</b> \nState = FORMAT_CHANGE_DISABLED")
H -> V : Send VAR(CalculatedBottlesRemainingToFill) (>0)

== Step 1  Enable Remote Format Change ==
Nota(H,"Operator activates <b>Remote Format Change</b> selector")
H -> V : Set SIG(RemoteSelector)
Nota(V,"State ➜ FORMAT_CHANGE_ENABLED")

== Step 2  Need Evaluation ==
V -> V : Compare current vs next SKU
Nota(V,"Is change really required?")
Nota(V,PopUp_LineReady)

== Step 3  Request to Empty Line ==
H -> V : VAR(CalculatedBottlesRemainingToFill)=0
Nota(V,"Show Pop-up <b>Empty Start</b> asking for confirmation")
VariableCentro(V,#PopUp_EmptyStart)
Operator -> V : Confirm (Yes)
Nota(V,"State ➜ FORMAT_CHANGE_EMPTYING")

== Step 4  Emptying Sequence ==
V -> U : Set TO(ChangeoverInProgress)
Nota(V,"Wait until <b>MachineEmpty</b> from all equipment")
U --> V : FROM(MachineEmpty)
NotaParalela(V,"When empty  show Pop-up <b>Empty End</b>")
Variable(V,#PopUp_EmptyEnd)
Operator -> V : Confirm (Yes)

== Step 5  Changeover In Progress ==
V -> V : Trigger SIG(Load Remote Recipe)
Nota(V,"Load recipe in Henkel Filler and update conveyors/merger\nState ➜ FORMAT_CHANGE_IN_PROGRESS")
V -> A : Request new recipe parameters
A --> V : Recipe data / AV / Family

== Step 6  Line Ready ==
V -> V : Detect EndFormatManagement & FormatChangeQE
Nota(V,"All machines report ready & recipe loaded")
Nota(V,"Show Pop-up <b>Line Ready</b>")
Variable(V,#PopUp_LineReady)
Operator -> V : Confirm (Yes)

== Step 7  Changeover Done ==
V -> H : TO(ChangeoverDone)
V -> U : TO(ChangeoverDone)
NotaParalela(V,"Transfer BatchLast data to Alpla")
V -> A : Send BatchLast information
Nota(V,"State ➜ FORMAT_CHANGE_DONE")

== Step 8  Resume Production ==
H -> V : VAR(CalculatedBottlesRemainingToFill) > 0
NotaParalela(V,"Reset internal flags, clear pop-ups\nProduction resumes")

== Error / Reset ==
Nota(V,"Any Load Recipe or machine mismatch sets FORMAT_CHANGE_ERROR. Requires operator RESET before restart")

@enduml

Change Over STEPs

@startuml
title Changeover STEPs
hide footbox
skinparam ArrowHeadColor none
skinparam NoteBackgroundColor #F0F0F0
skinparam NoteBorderColor #999999
skinparam ParticipantPadding 100
skinparam BoxPadding 6
skinparam WrapWidth 250
!pragma teoz true

' ==== Estilos reutilizables ====
!define VAR(x) <back:#F0F0F0><color:#7F6000><b>x</b></color></back>
!define SIG(x) <back:#F0F0F0><color:#005A9E><b>x</b></color></back>
!define FROM(x) <back:#FFAAAA><color:#000000><b>x</b></color></back>
!define TO(x) <back:#AAFFFF><color:#000000><b> x</b></color></back>

!definelong Nota($donde, $text)
  note over $donde
  $text
  end note
!enddefinelong

!definelong NotaParalela($donde, $text)
  / note over $donde 
  $text
  end note
!enddefinelong

!definelong Variable($donde, $text)
  hnote right $donde #AAFFFF
  $text
  end note
!enddefinelong

!definelong VariableRojo($donde, $text)
  hnote right $donde #FFBBBB
  $text
  end note
!enddefinelong

!definelong VariableIzquierda($donde, $text)
  hnote left $donde #AAFFFF
  $text
  end note
!enddefinelong

!definelong VariableCentro($donde, $text)
  hnote over $donde #AAFFFF
  $text
  end note
!enddefinelong

!definelong VariableParalelo($donde, $text)
  / hnote right $donde #AAFFFF
  $text
  end note
!enddefinelong


participant HENKEL as H
participant Alpla as A
participant Vetromeccanica as V
participant AUTEFA as U

== Before Changeover ==
H -> A : Send VAR(IDH_BTL_NEXT) number to be validated

Nota(A,Validate VAR(IDH_BTL_NEXT) and send acknowledge)
Variable(A,Data_From_EbConvey[0].2)
& A -> H : VAR(IDH_BTL_NEXT) validated

== Step 1 ==
Nota(H,Operator manually selects "Line Clearance" (?) and send signal "0" on VAR(CalculatedBottlesRemainingToFill).)
VariableCentro(H,Data_To_EbConvey[23])
H -> V : Send VAR(CalculatedBottlesRemainingToFill) = 0

== Step 2 ==
NotaParalela(V,Show Popup to Start Empting Line and Mergers)
Variable(U,TG10 Send 0 in Bottles for Actual Batch)
& V -> U : Send 0 in Bottles for Actual Batch
Nota(A,Stops taking bottles out of trays and sends what is already on the tables and conveyors.)
NotaParalela(U,Stops taking bottles out of trays and sends what is already on the tables and conveyors.)
== Step 3 ==
Nota(H,Operator verifies line is empty and sends "changeover request" signal after last bottle goes through filler.)
Variable(V,Data_To_EbConvey[0].0)
& H -> V : Send Changeover Request

== Step 4 ==
Nota(V,'Operator verifies line is empty and sends "line is busy with changeover",confirming on Popup screen')
Variable(V,Data_From_EbConvey[0].0)
& V -> H : Line is busy with changeover

== Step 5 ==
Nota(V,Starts changeover)
NotaParalela(U,Starts changeover)

VariableIzquierda(V,..FromAutefa.dw0.x[24])
& U -> V : Line is busy with changeover

Variable(V,Data_From_EbConvey[0].0)
& V -> H: Send Changeover Request
Variable(U,Data_From_EbConvey[0].0)
& U -> H: Send Changeover Request

== Step 6 ==
Nota(V,Ends changeover)
NotaParalela(U,Ends changeover)

Variable(V,Data_From_EbConvey[0].1)
& V o-> H: Send Changeover Complete
Variable(U,Data_From_EbConvey[0].1)
& U o-> H: Send Changeover Complete

== Step 7 ==
Variable(V,Data_To_EbConvey[0].1)
& H -> V : Reset Counters
Nota(V,Reset Counters)

== Step 8 ==
Nota(H,Send new value on VAR(CalculatedBottlesRemainingToFill))
Variable(V,Data_To_EbConvey[23])
& H -> V : VAR(CalculatedBottlesRemainingToFill > 0)

== Step 9 ==
Nota(H,Send Changeover Complete. To be considered "Production Ready")
Variable(V,Data_To_EbConvey[0].2)
& H -> V : Changeover Complete
NotaParalela(V,Finish Changeover Cycle - Start Line)
NotaParalela(A,Starts conveying bottles.)
NotaParalela(U,Starts conveying bottles.)

@enduml

Current changeover process

@startuml
  
skinparam rectangle {
 FontSize 14
 Padding 4
 Margin 5
 roundCorner 25
}
skinparam defaultTextAlignment center
  
' We use the Business Process sprite (simple ArchiMate style)
sprite $bProcess jar:archimate/application-service
sprite $aOperator jar:archimate/actor
sprite $aMaintOp jar:archimate/technology-device
sprite $aEvent jar:archimate/event
sprite $aColaboration jar:archimate/communication-path
  
' === BLOCKS ===
rectangle "Henkel tank reaches\n5 feet of liquid" as A <<$aEvent>> #ff0000
rectangle "Henkel operator notifies\nby radio to Alpla to collect\nchange form" as B <<$aColaboration>> #8CD96B
rectangle "Henkel tank empties" as C <<$aEvent>> #ff0000
rectangle "Henkel operator calls\nto put TLO in manual" as D <<$aOperator>> #ff0000
  
rectangle "Henkel runs out of product\non the line" as E <<$aEvent>> #ff0000
rectangle "Alpla operator moves\nremaining pallets manually" as F <<$aOperator>> #8CD96B
rectangle "Operator changes AVID\nand requests new pallets" as G <<$aOperator>> #8CD96B
  
rectangle "Operator calls maintenance\nto adjust Vetro to new format" as H <<$aColaboration>> #8CD96B
rectangle "Operator accepts new AVID\nin rotators 1 and 2" as I <<technology-device>> #8CD96B
rectangle "Operator changes format parts\nin rotators 1 and 2" as J <<$aOperator>> #8CD96B
  
rectangle "Operator notifies by radio that\nHenkel Alpla is ready" as K <<$aOperator>> #8CD96B
rectangle "Operator puts line in automatic\nat Henkel's request" as L <<$aMaintOp>> #8CD96B
  
rectangle "Maintenance starts change\nVetro conveyors" as M <<$aMaintOp>> #FFC933
rectangle "Maintenance changes\nKeyence camera" as N <<$aMaintOp>> #FFC933
rectangle "Maintenance verifies complete\nchange of conveyors" as O <<$aMaintOp>> #FFC933
  
' === FLOW UP TO E (left->right by default) ===
A -right-> B
B -right-> C
C -down-> D
D -left-> E
  
' === FROM E: FORCE TOP-DOWN ===
E -down-> F
F -left-> G
G -left-> H
H -down-> I
I -down-> J
J -down-> K
K -down-> L
  
' === MAINTENANCE: lateral and vertical branch ===
H -down-> M
M -down-> N
N -down-> O
  
@enduml

Current auto batch handling change over process

@startuml
skinparam rectangle {
  FontSize 14
  Padding 4
  Margin 5
  roundCorner 25
}
skinparam defaultTextAlignment center

' Sprites (mismos que en tu ejemplo)
sprite $bProcess jar:archimate/application-service
sprite $aOperator jar:archimate/actor
sprite $aMaintOp jar:archimate/technology-device
sprite $aEvent jar:archimate/event
sprite $aColaboration jar:archimate/communication-path

' === BLOCKS (diagram translation) ===
' Initial event
rectangle "Henkel tank reaches\n0 ft" as A <<$aEvent>> #ff0000

' System reaction (top)
rectangle "TLO automatically stops\nsending bottles" as B1 <<$bProcess>> #0B5FA5
rectangle "Henkel line runs out\nof product (run-out)" as C1 <<$aEvent>> #ff0000

' Change request (below initial)
rectangle "Change request sent\nto Alpla HMI" as B2 <<$bProcess>> #0B5FA5
rectangle "Alpla operator accepts\nnew AVID from Henkel in SCO" as C2 <<$aOperator>> #8CD96B
rectangle "Alpla operator selects\nwhich TLO will run the new AVID" as D2 <<$aOperator>> #8CD96B
rectangle "Alpla operator walks\nto the TLO" as E2 <<$aOperator>> #8CD96B
rectangle "Alpla operator moves\nremaining trays to\nthe empty conveyor" as F2 <<$aOperator>> #8CD96B
rectangle "Alpla operator accepts\nthe new AVID in the TLO\nand requests stacks" as G2 <<$aOperator>> #8CD96B

' Maintenance branch
rectangle "Operator calls maintenance\nto adjust Vetro conveyor\nto new format" as H2 <<$aColaboration>> #8CD96B
rectangle "Maintenance accepts\nnew AVID in Vetro HMI\nand begins conveyor change" as M1 <<$aMaintOp>> #FFC933
rectangle "Maintenance performs\nKeyence camera change" as M2 <<$aMaintOp>> #FFC933
rectangle "Maintenance verifies\nVetro conveyor change\ncompleted" as M3 <<$aMaintOp>> #FFC933

' Rotator adjustments
rectangle "Operator accepts new AVID\nin rotators 1 and 2" as I2 <<$aOperator>> #8CD96B
rectangle "Operator changes format parts\nin rotators 1 and 2" as J2 <<$aOperator>> #8CD96B
rectangle "Operator notifies by radio that\nHenkel/Alpla is ready to\nsend bottles" as K2 <<$aOperator>> #8CD96B
rectangle "At Henkel's request, operator\nputs line in automatic" as L2 <<$aMaintOp>> #8CD96B

' === FLOWS ===
' Upper branch (event -> system)
A -up-> B1
B1 -right-> C1

' Main branch (event -> request -> TLO actions)
A -right-> B2
B2 -right-> C2
C2 -right-> D2
D2 -right-> E2
E2 -down-> F2
F2 -left-> G2
G2 -left-> H2

' Lateral maintenance branch
H2 -left-> M1
M1 -down-> M2
M2 -down-> M3

' Rotator adjustments and closure
H2 -down-> I2
I2 -down-> J2
J2 -right-> K2
K2 -right-> L2

@enduml

Desired auto batch process:

@startuml
skinparam rectangle {
  FontSize 14
  Padding 4
  Margin 5
    roundCorner 25
}
skinparam defaultTextAlignment center

' Sprites (mismos que antes)
sprite $bProcess jar:archimate/application-service
sprite $aOperator jar:archimate/actor
sprite $aMaintOp jar:archimate/technology-device
sprite $aEvent jar:archimate/event
sprite $aColaboration jar:archimate/communication-path

' === BLOCKS ===
' Henkel events/states
rectangle "Henkel tank reaches\n0 remaining bottles" as A <<$aEvent>> #ff0000
rectangle "Henkel runs out of\nproduct on the line" as E <<$aEvent>> #ff0000

' Systems (blue)
rectangle "TLO automatically stops\nsending bottles" as B <<$bProcess>> #0B5FA5
rectangle "Change request sent\nto Alpla HMI" as C <<$bProcess>> #0B5FA5
rectangle "Vetro conveyor and Keyence\ncamera initiate format change" as V1 <<$bProcess>> #0B5FA5
rectangle "Autefa system removes trays/\nexcess stacks from TLO" as S1 <<$bProcess>> #0B5FA5
rectangle "Autefa system requests new\nbottles from warehouse" as S2 <<$bProcess>> #0B5FA5
rectangle "Henkel sends signal to Autefa\nto release bottles" as Z <<$bProcess>> #0B5FA5

' Alpla operation (green)
rectangle "Alpla operator accepts the\nnew AVID from Henkel in SCO\nand defines which TLO will run it" as D <<$aOperator>> #8CD96B
rectangle "Alpla operator changes format\nparts in rotators 1 and 2" as F1 <<$aOperator>> #8CD96B
rectangle "Alpla operator verifies\ncomplete format change\nin all systems" as F2 <<$aOperator>> #8CD96B

' === FLOWS ===
A -down-> B
B -right-> E

A -right-> C
C -right-> D

E -right-> V1

' Autefa branch and format adjustment
D -right-> S1
S1 -down-> S2
S2 -down-> F1
F1 -down-> F2
F2 -right-> Z

' Vetro/Keyence branch towards final verification
D -down-> V1
V1 -down-> F2

@enduml