272 lines
12 KiB
Markdown
272 lines
12 KiB
Markdown
|
# NEXT2 - Multi-Line Search Implementation
|
||
|
|
||
|
## 1. New Support DB
|
||
|
|
||
|
```pascal
|
||
|
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)
|
||
|
|
||
|
```pascal
|
||
|
// 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
|
||
|
```pascal
|
||
|
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
|
||
|
|
||
|
```pascal
|
||
|
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:
|
||
|
|
||
|
```pascal
|
||
|
|
||
|
#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]);
|
||
|
|
||
|
|
||
|
```
|
||
|
|
||
|
|
||
|
```pascal
|
||
|
|
||
|
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 ;
|
||
|
|
||
|
|
||
|
|
||
|
```
|