Obsidean_VM/04-InLavoro/HENKEL/93040 - HENKEL - BowlingGreen/Description/HENKEL - ALPLA - AUTEFA - B.../Table - Batch Life cycle - ...

21 KiB

HENKEL Alpla Vetromeccanica AUTEFA
Before Changeover Sends IDH_BTL_NEXT number to be validated
Data_To_EbConvey[38]
Validates IDH_BTL_NEXT is valid number and send acknowledge
Data_From_EbConvey[0].2
Step 1 Operator manually selects "Line Clearance" (?) and send signal "0" on "CalculatedBottlesRemainingToFill".
Data_To_EbConvey[23]
Step 2 Stops taking bottles out of trays and sends what is already on the tables and conveyors. Emptying Merger and Line Stops taking bottles out of trays and sends what is already on the tables and conveyors.
N/A TG10 Send 0 in Bottles for Actual Batch
Step 3 Operator verifies line is empty and sends "changeover request" signal after last bottle goes thorugh filler.
Data_To_EbConvey[0].0
Step 4 Operator verifies line is empty and sends "line is busy with changeover", confirming on Popup screen
Data_From_EbConvey[0].0
Step 5 Starts changeover Starts changeover
Data_From_EbConvey[0].0 Data_From_EbConvey[0].0
Step 6 Ends changeover. Sends signal "Changeover is finished and ready. Ends changeover. Sends signal "Changeover is finished and ready.
Data_From_EbConvey[0].1 Data_From_EbConvey[0].1
Step 7 Send Reset counters signal Reset Counters
Data_To_EbConvey[0].1
Step 8 Send new value on "CalculatedBottlesRemainingToFill".
Data_To_EbConvey[23]
Step 9 Send Changeover Complete. To be considered "Production Ready" Starts conveying bottles. Finish Chanover Cycle
Data_To_EbConvey[0].2

Batch Lifecycle Process Documentation

Overview

This document details the step-by-step process of a batch changeover in the production line, including all interactions between HENKEL, ALPLA, Vetromeccanica, and AUTEFA systems.

System Roles

  • HENKEL: Controls filling process and initiates batch changes
  • ALPLA: Manages bottle production and validates batch data
  • Vetromeccanica: Coordinates conveyor systems and inter-system communications
  • AUTEFA: Handles empty bottle logistics and tray loading

Pre-Changeover Phase

Batch Validation

  1. HENKEL → ALPLA

    • Sends next batch bottle ID (IDH_BTL_NEXT)
    • Location: Data_To_EbConvey[38]
  2. ALPLA Response

    • Validates IDH_BTL_NEXT number
    • Sends acknowledgment
    • Signal: Data_From_EbConvey[0].2

Changeover Process

Step 1: Line Clearance Initiation

  • HENKEL Action:
    • Operator selects "Line Clearance"
    • Sets "CalculatedBottlesRemainingToFill" to 0
    • Location: Data_To_EbConvey[23]

Step 2: Production Stop

  • Vetromeccanica Actions:
    • Stops bottle unloading from trays
    • Continues processing bottles already on conveyors
  • AUTEFA Actions:
    • Initiates merger and line emptying
    • Updates TG10 telegram with 0 in Bottles for Actual Batch

Step 3: Line Verification

  • HENKEL Action:
    • Operator verifies empty line
    • Sends changeover request after last bottle passes filler
    • Signal: Data_To_EbConvey[0].0

Step 4: Changeover Confirmation

  • Vetromeccanica Action:
    • Operator verifies empty line
    • Confirms "line busy with changeover" via popup
    • Signal: Data_From_EbConvey[0].0

Step 5: Changeover Execution

  • AUTEFA & Vetromeccanica:
    • Start changeover process
    • Signal: Data_From_EbConvey[0].0

Step 6: Completion Confirmation

  • AUTEFA & Vetromeccanica:
    • Send "Changeover finished and ready" signal
    • Signal: Data_From_EbConvey[0].1

Post-Changeover Phase

Step 7: Counter Reset

  • HENKEL Action:
    • Sends reset counters signal
    • Signal: Data_To_EbConvey[0].1
  • AUTEFA Action:
    • Resets internal counters

Step 8: Production Parameters

  • HENKEL Action:
    • Updates "CalculatedBottlesRemainingToFill" with new value
    • Location: Data_To_EbConvey[23]

Step 9: Production Resume

  • HENKEL Action:
    • Sends "Changeover Complete" signal
    • Signal: Data_To_EbConvey[0].2
  • Vetromeccanica Action:
    • Starts conveying bottles
  • AUTEFA Action:
    • Completes changeover cycle

Communication Flow Diagram

sequenceDiagram
    participant H as HENKEL
    participant A as ALPLA
    participant V as Vetromeccanica
    participant AU as AUTEFA

    H->>A: Send IDH_BTL_NEXT
    A->>H: Validate & Acknowledge
    H->>V: Set CalculatedBottlesRemainingToFill = 0
    V->>AU: Stop Unloading
    H->>V: Send Changeover Request
    V->>V: Confirm Empty Line
    V->>AU: Start Changeover
    AU->>V: Confirm Changeover Complete
    H->>V: Reset Counters
    H->>V: New Bottle Count
    H->>V: Production Ready

Signal Reference Table

Step Signal Location Description
Pre-Change IDH_BTL_NEXT Data_To_EbConvey[38] Next batch bottle ID
Validation Acknowledge Data_From_EbConvey[0].2 Batch validation
Initiation Zero Count Data_To_EbConvey[23] Remaining bottles count
Request Changeover Data_To_EbConvey[0].0 Start changeover
Confirmation Line Busy Data_From_EbConvey[0].0 Line status
Completion Ready Data_From_EbConvey[0].1 Line ready
Reset Counters Data_To_EbConvey[0].1 Reset counters
Resume Complete Data_To_EbConvey[0].2 Production ready

Error Handling

Validation Errors

  • Invalid batch number detection
  • Communication timeout handling
  • Line status verification failures

Process Safeguards

  • Multiple operator confirmations required
  • Line emptiness verification
  • Status signal validation

Recovery Procedures

  1. Counter synchronization check
  2. Line status verification
  3. Communication reset if needed
  4. Manual intervention protocols

Vetromeccanica Software Implementation Guide

Software Architecture

PLC Distribution

  1. Q1 PLCs (Client Side)

    • Main communication interface with Henkel
    • Manages line controllers Q2-Q4
    • Handles real-time batch data processing
  2. Supervisor PLC (Server Side)

    • Central communication hub
    • Manages AUTEFA telegrams
    • Provides ALPLA OPC-UA interface
    • Handles SKU database and searches

Data Structures

Client Side Structures

// FromHenkel Communication Structure
TYPE "FromHenkelv2_U"
    STRUCT
        di : Array[0..49] of DINT;    // Raw data from Henkel
        STW : "Bool32_U";             // Status word bits
        LineStatus : Struct
            di0 : "Bool32_U";         // Line status bits
        END_STRUCT;
        SignalExchange : Struct       // Line signals
            Filler : Struct
                CalculatedBottlesRemainingToFill : DINT;
            END_STRUCT;
        END_STRUCT;
        AB_IDH_BTL : Array[0..11] of CHAR;    // Current batch ID
        NB_IDH_BTL : Array[0..11] of CHAR;    // Next batch ID
        PO_NUMBER : Array[0..11] of CHAR;     // Current order
        PO_NUMBER_NEXT : Array[0..11] of CHAR; // Next order
        ABBottlesNumber : DINT;               // Current batch count
        NBBottlesNumber : DINT;               // Next batch count
    END_STRUCT;
END_TYPE

Server Side Structures

// SKU Information Structure
TYPE "StSku_U"
    STRUCT
        Av : DInt;                    // Article Variant ID
        AvDesc : String[36];          // Description
        ProdFamily : DInt;            // Product Family
        CustomArticleNum : String[12]; // Customer Article Number
    END_STRUCT;
END_TYPE

// AUTEFA Message Header
TYPE "AUTEFA_message_header"
    STRUCT
        message_length : Int;
        endian_format : Word := 16#4321;
        telegram_number : Int;
        task : Int := 1;
        error_number : DInt;
        send_client_ID : "Client_ID";
        timestamp : "TX_Time";
    END_STRUCT;
END_TYPE

Key Functions Implementation

1. Byte Processing (Q1)

// Process incoming Henkel data
FOR #i := 0 TO 49 DO
    #atFromHenkel[#i] := "FromHenkel".di[#i];
    CASE #i OF
        0, 10, 20, 35..40, 44..49:  // Control words and IDs
            #diAppo.%B3 := #atFromHenkel[#i].%B2;
            #diAppo.%B2 := #atFromHenkel[#i].%B3;
            #diAppo.%B1 := #atFromHenkel[#i].%B0;
            #diAppo.%B0 := #atFromHenkel[#i].%B1;
        ELSE  // Process data
            #diAppo.%W0 := #atFromHenkel[#i].%W1;
            #diAppo.%W1 := #atFromHenkel[#i].%W0;
    END_CASE;
    #atFromHenkel[#i] := #diAppo;
END_FOR;

2. SKU Search (Supervisor)

// Search SKU in ALPLA database
IF NOT "LineN[#i].SearchEnd" THEN
    IF "LineN[#i].i" >= 249 THEN
        "LineN[#i].SkuActualNotFound" := TRUE;
        "LineN[#i].SkuActualReq.Av" := 0;
        "LineN[#i].SkuActualReq.ProdFamily" := 0;
        "LineN[#i].SearchActualSku" := FALSE;
    ELSIF "LineN[#i].ReqActualCustomProdNum" = 
          "AlplaSkuList[LineN[#i].i].CustomArticleNum" THEN
        "LineN[#i].SkuActualReq" := "AlplaSkuList[LineN[#i].i]";
        "LineN[#i].SearchActualSku" := FALSE;
    ELSE
        "LineN[#i].i" += 1;
    END_IF;
END_IF;

3. AUTEFA Telegram Preparation (Supervisor)

// Prepare TG10 Production Info
"TG10_send.DATA.Filling_Line" := #LineNumber;

// Actual batch data
Strg_TO_Chars(
    Strg := "BatchActual.BatchNumber",
    pChars := 0,
    Cnt => #uiCnt,
    Chars := "TG10_send.DATA.Batch_ID"
);

"TG10_send.DATA.Active_Batch_Target_1000" :=
    DINT_TO_INT("ToAutefa.TG10_ProductionInfo" / 1000);

"TG10_send.DATA.Active_Batch_Target_Units" :=
    DINT_TO_INT("ToAutefa.TG10_ProductionInfo" MOD 1000);

"TG10_send.DATA.Active_Batch_Article_Variant_ID" :=
    "WriteData_D.ToQ1.FromAlpla.ActualSku.Av";

Data Flow Processing

1. Q1 Processing Sequence

graph TD
    A[Receive Henkel Data] --> B[Byte Swap Processing]
    B --> C[Update Local Variables]
    C --> D[Send to Line PLCs]
    C --> E[Send to Supervisor]

2. Supervisor Processing Sequence

graph TD
    A[Receive Q1 Data] --> B[SKU Search]
    B --> C[Format Data]
    C --> D[Prepare AUTEFA Telegram]
    C --> E[Update OPC-UA Data]

Error Handling Implementation

1. Communication Monitoring

// Monitor Q1-Henkel communication
"T_LostComHenkel".TON(
    IN := NOT "TR_LostComHenkel".Q AND 
          NOT "ToSV.STW.QE1.LostComQ1",
    PT := T#60s
);
"ToSV.STW.QE1.LostComHenkel" := "T_LostComHenkel".Q;

2. SKU Validation

// Validate SKU data
IF "LineN[#i].SearchActualSku" AND "LineN[#i].i" >= 249 THEN
    // SKU not found handling
    "LineN[#i].SkuActualNotFound" := TRUE;
    "LineN[#i].SkuActualReq.Av" := 0;
    "LineN[#i].SkuActualReq.ProdFamily" := 0;
    "LineN[#i].SkuActualReq.CustomArticleNum" := '';
    "LineN[#i].SkuActualReq.AvDesc" := '';
END_IF;

Line Index Configuration

Each line's data is managed through a consistent index system:

CASE LineIndex OF
    0:  // Fill_TL21_L23
        #locChar := "TL21_ReadData_D".FromQ1.FromHenkel.AB_IDH_BTL;
    1:  // Fill_TL22_L25
        #locChar := "TL22_ReadData_D".FromQ1.FromHenkel.AB_IDH_BTL;
    2:  // Fill_TL23_L43
        #locChar := "TL23_ReadData_D".FromQ1.FromHenkel.AB_IDH_BTL;
    3:  // Fill_TL25_L41
        #locChar := "TL25_ReadData_D".FromQ1.FromHenkel.AB_IDH_BTL;
    4:  // Fill_TL26_L42
        #locChar := "TL26_ReadData_D".FromQ1.FromHenkel.AB_IDH_BTL;
    5:  // Fill_TL27_L40
        #locChar := "TL27_ReadData_D".FromQ1.FromHenkel.AB_IDH_BTL;
END_CASE;

Important Memory Mappings

Henkel Data Array Map

di[0-49] Layout:
- Current Batch Data:
  - PO_NUMBER: di[44-46]
  - IDH_BTL: di[35-37]
- Next Batch Data:
  - PO_NUMBER: di[47-49]
  - IDH_BTL: di[38-40]
- Next+1 Batch Data:
  - PO_NUMBER: di[1-3]
  - IDH_BTL: di[7-9]
  - IDH_CON: di[4-6]

Critical Status Bits

STW Bits:
- [0]: Changeover Request
- [1]: Counter Reset
- [2]: Production Ready
- [31]: Life Bit

Line Status:
- [0]: Line Empty
- [1]: Changeover Active
- [2]: Line Ready

Debug Tips

  1. Communication Issues

    • Check life bit timing (bit 31)
    • Verify byte swap patterns
    • Monitor communication counters
  2. SKU Search Problems

    • Enable search debugging flags
    • Log CustomArticleNum comparisons
    • Verify AlplaSkuList content
  3. Telegram Failures

    • Validate header structure
    • Check message length calculations
    • Monitor acknowledgment timing

Common Implementation Pitfalls

  1. Byte Ordering

    • Always use correct swap pattern based on data type
    • Verify endianness in telegram headers
    • Test with known data patterns
  2. String Handling

    • Zero-pad incomplete strings
    • Handle empty/null characters
    • Verify string length limits
  3. Counter Management

    • Synchronize counters after resets
    • Handle rollover conditions
    • Validate counter arithmetic