void HandleTCS(PPBodyQueryRequest tx)
        {
            if (tx.Type != "Sequence")
            {
                return;
            }

            var s7f26 = EAP.Send(new SecsMessage(7, 25, "PPBodyQuery", Item.A(tx.PPID)));

            if (s7f26.SecsItem.Items[0].ToString() != tx.PPID)
            {
                throw new ScenarioException("PPID unmatch!!!");
            }

            if (s7f26.SecsItem.Items[3].Count < 5)
            {
                throw new ScenarioException("PPBody is empty");
            }

            var bodyList = s7f26.SecsItem.Items[3].Items;

            for (int i = 0; i < bodyList.Count; i++)
            {
                Item   item        = bodyList[i];
                string chamberItem = item.Items[1].Items[0].ToString();

                switch (chamberItem)
                {
                case "LL-H":     //Step1 LL-H RecipeName
                    tx.Add(new PPBodyItem {
                        ID1   = "1",
                        ID2   = chamberItem,
                        Value = item.Items[1].Items[1].ToString()
                    });
                    break;

                case "B":     //Step2 B RecipeName
                case "C":     //Step2 C RecipeName
                case "D":     //Step2 D RecipeName
                    string chamberRecipe = item.Items[1].Items[1].ToString();
                    if (chamberRecipe.Contains("Shutter"))
                    {
                        continue;
                    }

                    tx.Add(new PPBodyItem {
                        ID1   = "2",
                        ID2   = chamberItem,
                        Value = chamberRecipe
                    });

                    int stepCount = int.Parse(item.Items[1].Items[2].ToString());
                    int paramNum  = int.Parse(item.Items[1].Items[3].ToString());
                    for (int j = i + 1; j < i + paramNum + 1; j++)
                    {
                        item = bodyList[j];
                        string itemName;
                        if (_nameMap.TryGetValue(item.Items[0].FirstValue <ushort>(), out itemName))
                        {
                            for (int step = 0; step < stepCount; step++)
                            {
                                tx.Add(new PPBodyItem {
                                    ID1   = "2",
                                    ID2   = chamberItem,
                                    ID3   = "Step" + (step + 1),
                                    ID4   = itemName,
                                    Value = item.Items[1].Items[1 + 4 * step].ToString()
                                });
                            }
                        }
                    }
                    i += paramNum;
                    break;
                }
            }
        }
        void HandleTCS(PPBodyQueryRequest tx)
        {
            if (tx.Type != "Body")
            {
                return;
            }

            var s7f6 = EAP.Send(new SecsMessage(7, 5, "PPBodyQuery", Item.A(tx.PPID)));

            if (s7f6.SecsItem.Items[0].ToString() != tx.PPID)
            {
                throw new ScenarioException("PPID unmatch!!");
            }

            if (s7f6.SecsItem.Items.Count == 0)
            {
                throw new ScenarioException("PPBody is null");
            }

            string body = s7f6.SecsItem.Items[1].ToString();

            if (EAP.ToolId.StartsWith("PEU"))
            {
                tx.Add(new PPBodyItem {
                    ID1   = "IrrMethod_Ref",
                    Value = body.Substring(0x48, 3).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "Exposure_Time",
                    Value = body.Substring(0x4d, 3).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "Exposure_Intensity",
                    Value = body.Substring(0x51, 1).Trim()
                });
            }
            else if (EAP.ToolId.StartsWith("PGU"))
            {
                tx.Add(new PPBodyItem {
                    ID1   = "RecipeName",
                    Value = body.Substring(0, 48).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "RecipeEditDate",
                    Value = body.Substring(49, 10).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "RecipeEditTime",
                    Value = body.Substring(59, 9).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "RecipeValidity",
                    Value = body.Substring(68, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationTimeIntensity_u1",
                    Value = body.Substring(70, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationTimeIntensity_u2",
                    Value = body.Substring(75, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationTimeIntensity_u3",
                    Value = body.Substring(80, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationTimeIntensity_u4",
                    Value = body.Substring(85, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationTimeIntensity_u5",
                    Value = body.Substring(90, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationIntensity_i1",
                    Value = body.Substring(95, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationIntensity_i2",
                    Value = body.Substring(97, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationIntensity_i3",
                    Value = body.Substring(99, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationIntensity_i4",
                    Value = body.Substring(101, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "IrradiationIntensity_i5",
                    Value = body.Substring(103, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTimeInterval_t1",
                    Value = body.Substring(105, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTimeInterval_t2",
                    Value = body.Substring(110, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTimeInterval_t3",
                    Value = body.Substring(115, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTimeInterval_t4",
                    Value = body.Substring(120, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTimeInterval_t5",
                    Value = body.Substring(125, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTemperature_T1",
                    Value = body.Substring(130, 4).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTemperature_T2",
                    Value = body.Substring(134, 4).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTemperature_T3",
                    Value = body.Substring(138, 4).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTemperature_T4",
                    Value = body.Substring(142, 4).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "HotPlateTemperature_T5",
                    Value = body.Substring(146, 4).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "CoolingStageUsage",
                    Value = body.Substring(150, 2).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "CoolingTimeAtTheCoolingStage",
                    Value = body.Substring(152, 5).Trim()
                });

                tx.Add(new PPBodyItem {
                    ID1   = "PurgeDuringProcess",
                    Value = body.Substring(157, 2).Trim()
                });
            }
        }