Obsidean_VM/40 - 93040 - HENKEL - NEXT .../Changes to be made for NEXT...

12 KiB

NEXT2 - Multi-Line Search Implementation

1. New Support DB

DATA_BLOCK "10_NEXT2_Support_D"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
NON_RETAIN
   STRUCT 
      LineN : Array[0..5] of Struct   // Same array size as 10_SkuManage_D
         i : Int;                     // Search index (synchronized with 10_SkuManage_D)
         ReqNext2CustomProdNum : String[12];  // Requested NEXT2 product number (from IDH_BTL_NEXT2)
         OldNext2CustomProdNum : String[12];  // Previous number to detect changes
         SearchNext2Sku : Bool;               // Active search flag
         SkuNext2NotFound : Bool;             // SKU not found flag
         SkuNext2Req { S7_SetPoint := 'False'} : "StSku_U";
      END_STRUCT;
   END_STRUCT;
BEGIN
END_DATA_BLOCK

2. Changes to FC11 (10.01_SkuManage_G)

// Modify first FOR loop where search is triggered
FOR #i := 0 TO 5 DO
    REGION // index search
        // Existing conditions for Actual and Next remain unchanged
        
        // Add Next2 search trigger based on IDH_BTL_NEXT2 change
        IF "10_NEXT2_Support_D".LineN[#i].OldNext2CustomProdNum <>
            "10_NEXT2_Support_D".LineN[#i].ReqNext2CustomProdNum
        THEN
            "10_NEXT2_Support_D".LineN[#i].SearchNext2Sku := TRUE;
            "10_SkuManage_D".LineN[#i].SearchEnd := TRUE;
        END_IF;    
    END_REGION
	REGION // Next2 index management
        IF "10_NEXT2_Support_D".LineN[#i].OldNext2CustomProdNum <>
            "10_NEXT2_Support_D".LineN[#i].ReqNext2CustomProdNum
        THEN
            "10_NEXT2_Support_D".LineN[#i].SearchNext2Sku := TRUE;
        END_IF;
        
        IF "10_NEXT2_Support_D".LineN[#i].SearchNext2Sku THEN
            IF "10_NEXT2_Support_D".LineN[#i].i < 0 OR "10_NEXT2_Support_D".LineN[#i].i >= 249 THEN
                "10_NEXT2_Support_D".LineN[#i].i := 0;
            ELSE
                "10_NEXT2_Support_D".LineN[#i].i += 1;
            END_IF;
        END_IF;
    END_REGION

    REGION //search next2
        IF "10_NEXT2_Support_D".LineN[#i].SearchNext2Sku THEN
            IF "10_NEXT2_Support_D".LineN[#i].ReqNext2CustomProdNum =
                "10_FromAlplaSkuList_D".AlplaSkuList["10_NEXT2_Support_D".LineN[#i].i].CustomArticleNum AND
                ("10_FromAlplaSkuList_D".AlplaSkuList["10_NEXT2_Support_D".LineN[#i].i].CustomArticleNum <> '')
            THEN
                "10_NEXT2_Support_D".LineN[#i].SkuNext2Req := 
                "10_FromAlplaSkuList_D".AlplaSkuList["10_NEXT2_Support_D".LineN[#i].i];
                "10_NEXT2_Support_D".LineN[#i].OldNext2CustomProdNum :=
                "10_FromAlplaSkuList_D".AlplaSkuList["10_NEXT2_Support_D".LineN[#i].i].CustomArticleNum;
                "10_NEXT2_Support_D".LineN[#i].SearchNext2Sku := FALSE;
                "10_NEXT2_Support_D".LineN[#i].SkuNext2NotFound := FALSE;
            END_IF;
            IF "10_NEXT2_Support_D".LineN[#i].i >= 249 AND "10_NEXT2_Support_D".LineN[#i].SearchNext2Sku
            THEN
                "10_NEXT2_Support_D".LineN[#i].SkuNext2NotFound := TRUE;
                "10_NEXT2_Support_D".LineN[#i].SkuNext2Req.Av := 0;
                "10_NEXT2_Support_D".LineN[#i].SkuNext2Req.AvDesc := '';
                "10_NEXT2_Support_D".LineN[#i].SkuNext2Req.ProdFamily := 0;
                "10_NEXT2_Support_D".LineN[#i].SkuNext2Req.CustomArticleNum := '';
                "10_NEXT2_Support_D".LineN[#i].OldNext2CustomProdNum := '';
            END_IF;
        END_IF;
    END_REGION
END_FOR

3. Changes for TG10 Telegram

TL21 - FB2014 / FB2024 / FB2034 / FB2044 / FB2054 / FB2064

REGION //next batch +1
    "DB2029_COM_VETRO_global_data_L25".TG10_send.DATA."Next_Batch_+1_Article_Variant_ID" :=
    "10_NEXT2_Support_D".LineN[1].SkuNext2Req.Av;
    
    "DB2029_COM_VETRO_global_data_L25".TG10_send.DATA."Next_Batch_+1_Target_1000" := 0;
    "DB2029_COM_VETRO_global_data_L25".TG10_send.DATA."Next_Batch_+1_Target_Units" := 0;
END_REGION

// Add Next2 to trigger condition
#tg10_Line_send :=
(... existing conditions ... 

OR
"DB2029_COM_VETRO_global_data_L25".TG10_send.DATA."Next_Batch_+1_Article_Variant_ID" <>
"DB2029_COM_VETRO_global_data_L25".TG10_Bk_send.DATA."Next_Batch_+1_Article_Variant_ID"

...)
AND NOT "99_HMI_Manage_D".AlarmsGen[0].x[11];

Line index:

0 Fill_TL21_L23
1 Fill_TL22_L25
2 Fill_TL23_L43
3 Fill_TL25_L41
4 Fill_TL26_L42
5 Fill_TL27_L40

4. Changes on FC20 - 10.00_ComAlpla_G

REGION //Next+1 batch article number
    FOR #i := 0 TO 5 DO
        CASE #i OF
            0:
                "10.02_D7-D9 Next2 Copy"(Line:=#i,
                                         di7:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di8:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di9:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber);
            1:
                "10.02_D7-D9 Next2 Copy"(Line:=#i,
                                         di7:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di8:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di9:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber);
            2:
                "10.02_D7-D9 Next2 Copy"(Line:=#i,
                                         di7:="TL23_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di8:="TL23_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di9:="TL23_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber);
            3:
                "10.02_D7-D9 Next2 Copy"(Line:=#i,
                                         di7:="TL25_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di8:="TL25_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di9:="TL25_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber);
            4:
                "10.02_D7-D9 Next2 Copy"(Line:=#i,
                                         di7:="TL26_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di8:="TL26_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di9:="TL26_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber);
                
            5:
                "10.02_D7-D9 Next2 Copy"(Line:=#i,
                                         di7:="TL27_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di8:="TL27_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di9:="TL27_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber);
               
        END_CASE;
       
    END_FOR;
END_REGION ;

Create FC27 - 10.02_D7-D9 Next2 Copy:


#Next2BatchArticleNumber[#Line] := '';
FOR #ich := 0 TO 11 DO
    #locChar[#ich] := '$00';
END_FOR;

// Procesar di7
#locChar[0] := DINT_TO_CHAR(#di7.%B0);
#locChar[1] := DINT_TO_CHAR(#di7.%B1);
#locChar[2] := DINT_TO_CHAR(#di7.%B2);
#locChar[3] := DINT_TO_CHAR(#di7.%B3);
// Procesar di8
#locChar[4] := DINT_TO_CHAR(#di8.%B0);
#locChar[5] := DINT_TO_CHAR(#di8.%B1);
#locChar[6] := DINT_TO_CHAR(#di8.%B2);
#locChar[7] := DINT_TO_CHAR(#di8.%B3);
// Procesar di9
#locChar[8] := DINT_TO_CHAR(#di9.%B0);
#locChar[9] := DINT_TO_CHAR(#di9.%B1);
#locChar[10] := DINT_TO_CHAR(#di9.%B2);
#locChar[11] := DINT_TO_CHAR(#di9.%B3);

Chars_TO_Strg(Chars  := #locChar,
              pChars := 0,
              Cnt    := 12,
              Strg   => #Next2BatchArticleNumber[#Line]);



REGION //Next+1 batch article number
    FOR #i := 0 TO 5 DO
        CASE #i OF
            0:
                "10.02_DINT To String"(
                                         di_1:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di_2:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di_3:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Converted_String:="10_NEXT2_Support_D".LineN[#i].ReqNext2CustomProdNum);
                  "10.02_DINT To String"(
                                         di_1:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di1,
                                         di_2:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di2,
                                         di_3:="TL21_ReadData_D".FromQ1.FromHenkel.STW.di3,
                                         Converted_String:="10_NEXT2_Support_D".LineN[#i].Next2_Batch_Batch_ID);
            1:
                "10.02_DINT To String"(
                                       di_1:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                       di_2:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                       di_3:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                       Converted_String:="10_NEXT2_Support_D".LineN[#i].ReqNext2CustomProdNum);
                "10.02_DINT To String"(
                                       di_1:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di1,
                                       di_2:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di2,
                                       di_3:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di3,
                                       Converted_String:="10_NEXT2_Support_D".LineN[#i].Next2_Batch_Batch_ID);
            2:
                "10.02_DINT To String"(
                                       di_1:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                       di_2:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                       di_3:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                       Converted_String:="10_NEXT2_Support_D".LineN[#i].ReqNext2CustomProdNum);
                "10.02_DINT To String"(
                                       di_1:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di1,
                                       di_2:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di2,
                                       di_3:="TL22_ReadData_D".FromQ1.FromHenkel.STW.di3,
                                       Converted_String:="10_NEXT2_Support_D".LineN[#i].Next2_Batch_Batch_ID);
            3:
                "10.02_DINT To String"(Line:=#i,
                                         di_1:="TL25_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di_2:="TL25_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di_3:="TL25_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber,
                                       Converted_String:=_string_inout_);
            4:
                "10.02_DINT To String"(Line:=#i,
                                         di_1:="TL26_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di_2:="TL26_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di_3:="TL26_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber,
                                       Converted_String:=_string_inout_);
                
            5:
                "10.02_DINT To String"(Line:=#i,
                                         di_1:="TL27_ReadData_D".FromQ1.FromHenkel.STW.di7,
                                         di_2:="TL27_ReadData_D".FromQ1.FromHenkel.STW.di8,
                                         di_3:="TL27_ReadData_D".FromQ1.FromHenkel.STW.di9,
                                         Next2BatchArticleNumber:=#Next2BatchArticleNumber,
                                       Converted_String:=_string_inout_);
               
        END_CASE;
       
    END_FOR;
END_REGION ;