public void ParameterChange(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            PLCTelnet2 = new TelnetClient();
            #region Connection PLC1,PLC2,Micron Server
            Log1.Info("ParameterChange Thread Start");
            while (!bTerminate)
            {
                try
                {
                    Thread.Sleep(100);
                    #region PLC 1
                    //PLC Read Write Cycle
                    if (PLCTelnet != null)
                    {
                        if (PLCTelnet.connected)
                        {
                            #region Parameter Change
                            //bool bypass = true;



                            if ((PLCWriteCommand[459] == 0x08 && PLCQueryRx[263] == 0x08))  //D419 and D126
                            {
                                byte[] PName = new byte[2];
                                Array.Copy(PLCQueryRx, 265, PName, 0, 2); //D127
                                Int32 PNint = (Int32)(BitConverter.ToInt16(PName, 0));
                                ParaName = PNint.ToString();


                                byte[] POld = new byte[4];
                                Array.Copy(PLCQueryRx, 267, POld, 0, 4); //D128~D129
                                Int32 POldint = (Int32)(BitConverter.ToInt32(POld, 0));
                                ParaOldValue = POldint.ToString();



                                byte[] PNew = new byte[4];
                                Array.Copy(PLCQueryRx, 271, PNew, 0, 4); //D130~D131
                                Int32 PNewint = (Int32)(BitConverter.ToInt32(PNew, 0));
                                ParaNewValue = PNewint.ToString();

                                if (PNint != -9999 && POldint != -9999 && PNewint != -9999 && parameterflag == 0)
                                {
                                    try
                                    {
                                        ParaName = ParameterDesPLC1(int.Parse(ParaName));


                                        networkmain.Client_SendParameterchange1(ParaName, ParaOldValue, ParaNewValue);
                                        parameter.Info("parameter change at PLC1 " + ParaName + "," + ParaOldValue + "," + ParaNewValue);
                                    }
                                    catch {
                                    }

                                    Thread.Sleep(10);
                                    PLCWriteCommand[469] = 0x07;//D424
                                    parameterflag        = 1;
                                }

                                if (PNint == -9999 && parameterflag == 1)
                                {
                                    PLCWriteCommand[469] = 0x00;//D424
                                    parameterflag        = 0;
                                }
                            }
                            if (PLCQueryRx[263] == 0x0F && PLCWriteCommand[459] == 0x08)
                            {
                                PLCWriteCommand[459] = 0x00;
                                string token = networkmain.Token1.ToString();
                                networkmain.Client_SendParameterchangeLogout("DENY", "1", "1", token);
                                parameter.Info("parameter change at PLC1 logout " + token);
                            }



                            #endregion


                            #region


                            #endregion

                            #region 1DM Each Stop

                            try{
                                if ((PLCQueryRx[PLCQueryRx_DM198] == 0x01) &&
                                    (PLCQueryRx6[PLCQueryRx_DM5199] == 0x01))

                                {
                                    RoyalFlush();


                                    PLCWriteCommand[PLCWriteCommand_DM303] = 0x07;

                                    PLCWriteCommand6[PLCWriteCommand_DM5353] = 0x07;
                                }
                                else
                                {
                                    PLCWriteCommand[PLCWriteCommand_DM303] = 0x00;

                                    PLCWriteCommand6[PLCWriteCommand_DM5353] = 0x00;
                                }
                            }

                            catch (Exception ex)
                            {
                                Log1.Info(ex.ToString());
                            }

                            #endregion



                            #region test DM6110 to DM6499 Reading

                            byte[] TestPara = new byte[2];
                            Array.Copy(PLCQueryRxPara, 11, TestPara, 0, 2); //D6100
                            Int32 TestPara1      = (Int32)(BitConverter.ToInt16(TestPara, 0));
                            int   TestParastring = TestPara1;
                            if (TestParastring > 0)
                            {
                                //Blocktest.Info("PLC1 Testing DM6100 ," + TestParastring);
                            }

                            byte[] TestPara2 = new byte[2];
                            Array.Copy(PLCQueryRxPara, 809, TestPara2, 0, 2); //D6499
                            Int32 TestPara3       = (Int32)(BitConverter.ToInt16(TestPara2, 0));
                            int   TestParastring1 = TestPara3;
                            if (TestParastring1 > 0)
                            {
                                // Blocktest.Info("PLC1 Testing DM6499 ," + TestParastring1);
                            }


                            #endregion
                        }
                    }
                    #endregion
                    #region PLC 2
                    if (PLCTelnet2.connected)
                    {
                        #region Parameter Change
                        //bool bypass = true;

                        if ((PLCWriteCommand6[315] == 0x08 && PLCQueryRx6[353] == 0x08)) //  ,D5347,D5171
                        {
                            byte[] PName = new byte[2];
                            Array.Copy(PLCQueryRx6, 303, PName, 0, 2);  //D5146
                            Int32 PNint = (Int32)(BitConverter.ToInt16(PName, 0));
                            ParaName1 = PNint.ToString();


                            byte[] POld = new byte[4];
                            Array.Copy(PLCQueryRx6, 383, POld, 0, 4);  //D5186~D5187
                            Int32 POldint = (Int32)(BitConverter.ToInt32(POld, 0));
                            ParaOldValue1 = POldint.ToString();



                            byte[] PNew = new byte[4];
                            Array.Copy(PLCQueryRx6, 387, PNew, 0, 4);  //D5188~D5189
                            Int32 PNewint = (Int32)(BitConverter.ToInt32(PNew, 0));
                            ParaNewValue1 = PNewint.ToString();

                            if (PNint != -9999 && POldint != -9999 && PNewint != -9999 && parameterflag2 == 0)
                            {
                                try
                                {
                                    ParaName1 = ParameterDesPLC2(int.Parse(ParaName1));



                                    networkmain.Client_SendParameterchange1(ParaName1, ParaOldValue1, ParaNewValue1);
                                    parameter.Info("parameter change at PLC2 " + ParaName1 + "," + ParaOldValue1 + "," + ParaNewValue1);
                                }
                                catch
                                {
                                }
                                Thread.Sleep(10);
                                PLCWriteCommand6[465] = 0x07;//D5422
                                parameterflag2        = 1;
                            }

                            if (PNint == -9999 && parameterflag2 == 1)
                            {
                                PLCWriteCommand6[465] = 0x00;//D5422
                                parameterflag2        = 0;
                            }



                            #region Sealer parameter

                            byte[] SealerPName = new byte[2];
                            Array.Copy(PLCQueryRx6, 279, SealerPName, 0, 2);  //D5134
                            Int32 SealerPNint = (Int32)(BitConverter.ToInt16(SealerPName, 0));
                            SealerParaName = SealerPNint.ToString();


                            byte[] SealerPOld = new byte[12];
                            Array.Copy(PLCQueryRx6, 281, SealerPOld, 0, 12);  //D5135~D5140
                            Int32 SealerPOldint = (Int32)(BitConverter.ToInt16(SealerPOld, 0));
                            SealerParaOldValue = SealerPOldint.ToString();
                            string SealerOld = System.Text.Encoding.Default.GetString(SealerPOld);



                            byte[] SealerPNew = new byte[12];
                            Array.Copy(PLCQueryRx6, 371, SealerPNew, 0, 12);  //D5180~D5185
                            Int32 SealerPNewint = (Int32)(BitConverter.ToInt16(SealerPNew, 0));
                            SealerParaNewValue = SealerPNewint.ToString();
                            string SealerNew = System.Text.Encoding.Default.GetString(SealerPNew);

                            if (SealerPNint > 0 && SealerPOldint > 0 && SealerPNewint > 0 && Sealerparameterflag == 0)
                            {
                                networkmain.Client_SendParameterchange1(SealerParaName, SealerOld, SealerNew);
                                parameter.Info("Sealer parameter change at PLC2 " + SealerParaName + "," + SealerOld + "," + SealerNew);
                                Thread.Sleep(10);
                                PLCWriteCommand6[479] = 0x07;//D5429
                                Sealerparameterflag   = 1;
                            }

                            if (SealerPNint == 0 && Sealerparameterflag == 1)
                            {
                                PLCWriteCommand6[479] = 0x00;//D5429
                                Sealerparameterflag   = 0;
                            }



                            #endregion
                        }


                        if (PLCQueryRx6[353] == 0x0F && PLCWriteCommand6[315] == 0x08)
                        {
                            PLCWriteCommand6[315] = 0x00;
                            string token = networkmain.Token2.ToString();
                            networkmain.Client_SendParameterchangeLogout("DENY", "1", "2", token);
                            parameter.Info("parameter change at PLC2 logout " + token);
                        }



                        #endregion



                        #region check st5 RJ result


                        //byte[] bcarrayst5check = new byte[10];
                        //Array.Copy(PLCQueryRx6, 121, bcarrayst5check, 0, 10);  //D5055
                        //St5CheckFL = System.Text.Encoding.Default.GetString(bcarrayst5check);
                        //if (St5CheckFL !="\0\0\0\0\0\0\0\0\0\0")
                        //{
                        //    checkresultST5.Info("FL For ST5 give to ST6" + St5CheckFL);
                        //}

                        //else
                        //{
                        //    St5CheckFL = "\0\0\0\0\0\0\0\0\0\0";
                        //}
                        //byte[] bcarrayst5checkRJ = new byte[2];
                        //Array.Copy(PLCQueryRx6, 219, bcarrayst5checkRJ, 0, 2);  //D5104
                        //string   St5CheckFLRJ = System.Text.Encoding.Default.GetString(bcarrayst5checkRJ);

                        //checkresultST5.Info("FL RJ For ST5 give to ST6" + St5CheckFLRJ);



                        // byte[] bcarrayst5checkS1 = new byte[2];
                        // Array.Copy(PLCQueryRx6, 165, bcarrayst5checkS1, 0, 2);  //D5077
                        // string   St5CheckFLS1 = System.Text.Encoding.Default.GetString(bcarrayst5checkS1);

                        //checkresultST5.Info("FL RJ For ST5 Sealer 1 give from Server===>" + St5CheckFLS1);

                        //byte[] bcarrayst5checkS2 = new byte[2];
                        // Array.Copy(PLCQueryRx6, 167, bcarrayst5checkS2, 0, 2);  //D5078
                        // string   St5CheckFLS2 = System.Text.Encoding.Default.GetString(bcarrayst5checkS2);

                        //checkresultST5.Info("FL RJ For ST5 Sealer 2 give from Server===>" + St5CheckFLS2);



                        // byte[] bcarrayst5checkS3 = new byte[2];
                        // Array.Copy(PLCQueryRx6, 169, bcarrayst5checkS3, 0, 2);  //D5077
                        // string   St5CheckFLS3 = System.Text.Encoding.Default.GetString(bcarrayst5checkS3);

                        // checkresultST5.Info("FL RJ For ST5 Sealer 3 give from Server===>" + St5CheckFLS3);



                        #endregion



                        #region test DM6110 to DM6499 Reading

                        byte[] TestPara = new byte[2];
                        Array.Copy(PLCQueryRxParaPlc2, 11, TestPara, 0, 2);    //D6100
                        Int32 TestPara1      = (Int32)(BitConverter.ToInt16(TestPara, 0));
                        int   TestParastring = TestPara1;
                        if (TestParastring > 0)
                        {
                            // Blocktest.Info("PLC2 Testing DM6100 ," + TestParastring);
                        }

                        byte[] TestPara2 = new byte[2];
                        Array.Copy(PLCQueryRxParaPlc2, 809, TestPara2, 0, 2);    //D6499
                        Int32 TestPara3       = (Int32)(BitConverter.ToInt16(TestPara2, 0));
                        int   TestParastring1 = TestPara3;
                        if (TestParastring1 > 0)
                        {
                            //Blocktest.Info("PLC2 Testing DM6499 ," + TestParastring1);
                        }


                        #endregion
                    }


                    #endregion
                }
                catch (Exception ex)
                {
                    Log1.Info(ex.ToString());
                }
                // Log1.Info(" ParameterChange Thread Exit");
            }//try first

            #endregion
        }
예제 #2
0
        public void RunStation02Scan(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            while (!bTerminate)
            {
                Thread.Sleep(100);
                try
                {
                    if ((PLCQueryRx == null) || (PLCWriteCommand == null))
                    {
                        Thread.Sleep(100);
                        continue;
                    }
                    #region PLC_RequestFinishingLabelFromMiddleWare
                    //Process PLC Data
                    //Check Station 2 Finishing Label Status
                    //      plc TRIGGER @ DM0100     server send is in ready state @ DM200
                    if ((PLCQueryRx[PLCQueryRx_DM100] == 0x08) && (PLCWriteCommand[PLCWriteCommand_DM200] == 0))//request finishing label
                    {
                        //PLC request FL from IGT
                        //set busy flag
                        PLCWriteCommand[PLCWriteCommand_DM200] = 0x04; //busy
                        //get barcode scan string from DM010
                        //test code tmp//
                        byte[] bcarray = new byte[10];
                        Array.Copy(PLCQueryRx, 31, bcarray, 0, 10);
                        Scanboxid = System.Text.Encoding.Default.GetString(bcarray);
                        if (Scanboxid != "\0\0\0\0\0\0\0\0\0\0")
                        {
                            evt_FinishLabelRequest.Set();
                        }
                        else
                        {
                            PLCWriteCommand[PLCWriteCommand_DM200] = 0x00;
                        }
                    }
                    //trigger is cleared    Send Complete       Send Error
                    if ((PLCQueryRx[PLCQueryRx_DM100] == 0x0) && ((PLCWriteCommand[PLCWriteCommand_DM200] == 0x08) ||
                                                                  (PLCWriteCommand[PLCWriteCommand_DM200] == 0xF)))
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200] = 0;//Server Send Ready
                    }
                    #endregion
                    #region Update_RA_RB_RC_Label
                    //      PLC Move FL to A, B, C Zone.
                    byte[] tmparray = new byte[10];
                    //DM0050
                    Array.Copy(PLCQueryRx, 111, tmparray, 0, 10);
                    //convert array to string
                    ST02Rotatary_A_Str = System.Text.Encoding.Default.GetString(tmparray);

                    if (ST02Rotatary_A_Str != "\0\0\0\0\0\0\0\0\0\0")
                    {
                        ReceiveFL = ST02Rotatary_A_Str;
                    }


                    if (ST02Rotatary_A_Str == "\0\0\0\0\0\0\0\0\0\0")
                    {
                        ReceiveFL    = "";
                        PrintStatus  = "";
                        VisionStatus = "";
                    }

                    if (ST02Rotatary_B_Str == "\0\0\0\0\0\0\0\0\0\0")
                    {
                        ReceiveFL1    = "";
                        PrintStatus1  = "";
                        VisionStatus1 = "";
                    }

                    if (ST02Rotatary_B_Str != "\0\0\0\0\0\0\0\0\0\0")
                    {
                        ReceiveFL1 = ST02Rotatary_B_Str;
                    }



                    if (ST02Rotatary_C_Str == "\0\0\0\0\0\0\0\0\0\0")
                    {
                        ReceiveFL2    = "";
                        PrintStatus2  = "";
                        VisionStatus2 = "";
                    }



                    if (ST02Rotatary_C_Str != "\0\0\0\0\0\0\0\0\0\0")
                    {
                        ReceiveFL2 = ST02Rotatary_C_Str;
                    }


                    //DM0060
                    Array.Copy(PLCQueryRx, 131, tmparray, 0, 10);
                    //convert array to string
                    ST02Rotatary_B_Str = System.Text.Encoding.Default.GetString(tmparray);
                    //DM0070
                    Array.Copy(PLCQueryRx, 151, tmparray, 0, 10);
                    //convert array to string
                    ST02Rotatary_C_Str = System.Text.Encoding.Default.GetString(tmparray);
                    //table
                    #endregion
                    #region PLCStatusUpdateOnRARBRC
                    //update RA RB RC status (later.. on station 4, 5, 6, 7??)
                    CheckStringClear(RA_PCtoPLCFinishingLabelOFFSET, ST02Rotatary_A_Str);
                    CheckStringClear(RB_PCtoPLCFinishingLabelOFFSET, ST02Rotatary_B_Str);
                    CheckStringClear(RC_PCtoPLCFinishingLabelOFFSET, ST02Rotatary_C_Str);
                    CheckStringUpdate(RA_PCtoPLCFinishingLabelOFFSET, ST02Rotatary_A_Str);
                    CheckStringUpdate(RB_PCtoPLCFinishingLabelOFFSET, ST02Rotatary_B_Str);
                    CheckStringUpdate(RC_PCtoPLCFinishingLabelOFFSET, ST02Rotatary_C_Str);
                    //Int64 rst;
                    #endregion
                    #region UpdateRJ
                    //Rotary A
                    byte[] tmparrayERA = new byte[2];
                    Array.Copy(PLCQueryRx, 121, tmparrayERA, 0, 2); //DM55=121
                    //convert Byte array to int
                    Int32 erA = (Int32)(BitConverter.ToInt16(tmparrayERA, 0));
                    if (erA > 0)
                    {
                        byte[] tmpbyte = new byte[2];
                        tmpbyte = Encoding.ASCII.GetBytes("RJ");
                        Array.Copy(tmpbyte, 0, PLCWriteCommand, 95, 2); //D237
                        string rj = "RJ";
                        try
                        {
                            while ((!networkmain.UpdateRJLabel(ST02Rotatary_A_Str, rj, erA.ToString()) && !bTerminate))
                            {
                                Thread.Sleep(100);
                            }
                            // St2Log.Info("Update RJ for Rotary A " + ST02Rotatary_A_Str +","+erA);
                            networkmain.linePack.Info("Update RJ for Rotary A " + ST02Rotatary_A_Str + "," + erA);
                        }
                        catch (Exception ex)
                        {
                            // St2Log.Error("station 2 RA error" + ex);
                            networkmain.linePack.Error("station 2 RA error" + ex);
                            byte[] tmpbyte1 = new byte[2];
                            tmpbyte1 = Encoding.ASCII.GetBytes("RJ");
                            Array.Copy(tmpbyte1, 0, PLCWriteCommand, 95, 2); //D237
                            //update fail..
                            // reply to PLC update fail
                            // may need this other time
                        }
                    }


                    //Rotary B

                    byte[] tmparrayERB = new byte[2];
                    Array.Copy(PLCQueryRx, 141, tmparrayERB, 0, 2); //DM65=141
                    //convert Byte array to int
                    Int32 erB = (Int32)(BitConverter.ToInt16(tmparrayERB, 0));
                    if (erB > 0)
                    {
                        byte[] tmpbyte = new byte[2];
                        tmpbyte = Encoding.ASCII.GetBytes("RJ");
                        Array.Copy(tmpbyte, 0, PLCWriteCommand, 157, 2); //D268
                        string rj = "RJ";
                        try
                        {
                            while ((!networkmain.UpdateRJLabel(ST02Rotatary_B_Str, rj, erB.ToString()) && !bTerminate))
                            {
                                Thread.Sleep(100);
                            }
                            //   St2Log.Info("Update RJ for Rotary B " + ST02Rotatary_B_Str+","+erB);
                            networkmain.linePack.Info("Update RJ for Rotary B " + ST02Rotatary_B_Str + "," + erB);
                        }
                        catch (Exception ex)
                        {
                            // St2Log.Error("station 2 RB error" + ex);

                            networkmain.linePack.Error("station 2 RB error" + ex);
                            byte[] tmpbyte1 = new byte[2];
                            tmpbyte1 = Encoding.ASCII.GetBytes("RJ");
                            Array.Copy(tmpbyte1, 0, PLCWriteCommand, 157, 2); //D268
                            //update fail..
                            // reply to PLC update fail
                            // may need this other time
                        }
                    }


                    //RC
                    byte[] tmparrayERC = new byte[2];
                    Array.Copy(PLCQueryRx, 161, tmparrayERC, 0, 2); //DM75=161
                    //convert Byte array to int
                    Int32 erC = (Int32)(BitConverter.ToInt16(tmparrayERC, 0));
                    if (erC > 0)
                    {
                        byte[] tmpbyte = new byte[2];
                        tmpbyte = Encoding.ASCII.GetBytes("RJ");
                        Array.Copy(tmpbyte, 0, PLCWriteCommand, 217, 2); //D298
                        string rj = "RJ";
                        try
                        {
                            while ((!networkmain.UpdateRJLabel(ST02Rotatary_C_Str, rj, erC.ToString()) && !bTerminate))
                            {
                                Thread.Sleep(100);
                            }
                            // St2Log.Info("Update RJ for Rotary C " + ST02Rotatary_C_Str+","+erC);

                            networkmain.linePack.Info("Update RJ for Rotary C " + ST02Rotatary_C_Str + "," + erC);
                        }
                        catch (Exception ex)
                        {
                            // St2Log.Error("station 2 RC error" + ex);

                            networkmain.linePack.Error("station 2 RC error" + ex);
                            byte[] tmpbyte1 = new byte[2];
                            tmpbyte1 = Encoding.ASCII.GetBytes("RJ");
                            Array.Copy(tmpbyte1, 0, PLCWriteCommand, 217, 2); //D298
                            //update fail..
                            // reply to PLC update fail
                            // may need this other time
                        }
                    }
                    #endregion
                    #region Station2_PLC_RequestPrint
                    //check finishing label data ready at respective station or rotary
                    //check DM101,102,103
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 2] == 0x0) && //send reset signal to the IGT server DM101,102,103 have to be set to 0;
                        (PLCQueryRx[PLCQueryRx_DM100 + 4] == 0x0) && //assume at any one time, only one rotary is doing the request
                        (PLCQueryRx[PLCQueryRx_DM100 + 6] == 0x0))   //optimization code needed for PLC to print and inspect at the same time
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x00;
                    }
                    ////////////////////////////////////////
                    // Station 2 Testpront Function ////////
                    ////////////////////////////////////////
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 2] == 0x99) //request print for rotary A        /*DM101*///state 1
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x00)/*DM201*/
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x4; //set busy signal

                        ZebraTestPrint zbt     = new ZebraTestPrint();
                        bool           Printok = zbt.ChecknLoadZPLForTestPrint(2);
                        if (Printok)
                        {
                            MyEventQ.AddQ("82;PrinterTestPrint;PrinterNumber;2"); //Push message to stack
                            EvtLog.Info("82;PrinterTestPrint;PrinterNumber;2");
                        }
                        else
                        {
                            MyEventQ.AddQ("11;PrinterCommunicationBreak;Stationnumber;2"); //Push message to stack
                        }
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x99;                 //set ok signal
                        zbt = null;
                    }
                    ////////////////////////////////////////
                    //request Orientation Chk on RA/B/C ////
                    ////////////////////////////////////////
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 2] == 0x3) /*DM101*/  //state 1
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x00) /*DM201*/
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x4; //set busy signal
                        evt_Station02InspectionReq.Set();
                    }
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 2] == 0x1) //request print for rotary A        /*DM101*///state 1
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x00)/*DM201*/
                        )
                    {
                        if (ST02Rotatary_A_Str.Trim().Length == 0)
                        {
                            log.Error("ST2 RotaryA FL label is empty when requesting print");
                        }
                        else if (ST02Rotatary_A_Str == "\0\0\0\0\0\0\0\0\0\0")
                        {
                            log.Error("ST2 RotaryA FL label is \0\0\0\0\0\0\0\0\0\0 when requesting print");
                        }
                        else
                        {
                            PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x4; //set busy signal
                            ST02Rotatary_Str = ST02Rotatary_A_Str;

                            //show in table FL
                            //fire printer thread
                            //Printer01Thread = new Thread(new ParameterizedThreadStart(Printer01Th));
                            //Printer01Thread.Start(networkmain);
                            evt_Station02PrintReq.Set();
                            log.Info("ST2 RotaryA Start request printing:" + ST02Rotatary_Str);
                        }
                    }
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 4] == 0x1) //request print for rotary B        /*DM102*///state 1
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x00)) /*DM201*/
                    {
                        if (ST02Rotatary_B_Str.Trim().Length == 0)
                        {
                            log.Error("ST2 RotaryB FL label is empty when requesting print");
                        }
                        else if (ST02Rotatary_B_Str == "\0\0\0\0\0\0\0\0\0\0")
                        {
                            log.Error("ST2 RotaryB FL label is \0\0\0\0\0\0\0\0\0\0 when requesting print");
                        }
                        else
                        {
                            PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x4; //set busy signal
                            ST02Rotatary_Str = ST02Rotatary_B_Str;

                            //fire printer thread
                            //Printer01Thread = new Thread(new ParameterizedThreadStart(Printer01Th));
                            //Printer01Thread.Start(networkmain);
                            evt_Station02PrintReq.Set();
                            log.Info("ST2 RotaryB Start request printing:" + ST02Rotatary_Str);
                        }
                    }
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 6] == 0x1) //request print for rotary C        /*DM103*///state 1
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x00)) /*DM201*/
                    {
                        if (ST02Rotatary_C_Str.Trim().Length == 0)
                        {
                            log.Error("ST2 RotaryC FL label is empty when requesting print");
                        }
                        else if (ST02Rotatary_C_Str == "\0\0\0\0\0\0\0\0\0\0")
                        {
                            log.Error("ST2 RotaryC FL label is \0\0\0\0\0\0\0\0\0\0 when requesting print");
                        }
                        else
                        {
                            PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x4; //set busy signal
                            ST02Rotatary_Str = ST02Rotatary_C_Str;
                            PrintStatus2     = "Received";
                            //fire printer thread
                            //Printer01Thread = new Thread(new ParameterizedThreadStart(Printer01Th));
                            //Printer01Thread.Start(networkmain);
                            evt_Station02PrintReq.Set();
                            log.Info("ST2 RotaryC Start request printing:" + ST02Rotatary_Str);
                        }
                    }
                    #endregion
                    #region Station2_PLC_RequestLabelInspection
                    if ((PLCQueryRx[PLCQueryRx_DM157 + 26] == 0x0) && //send reset signal to the IGT server DM101,102,103 have to be set to 0;
                        (PLCQueryRx[PLCQueryRx_DM157 + 30] == 0x0) && //assume at any one time, only one rotary is doing the request
                        (PLCQueryRx[PLCQueryRx_DM157 + 34] == 0x0))   //optimization code needed for PLC to print and inspect at the same time
                    {
                        PLCWriteCommand[PLCWriteCommand_DM380 + 2] = 0x00;
                    }
                    #region RotaryARequest
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 2] == 0x1)//vision inspection ready/*DM101*///state 2
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x05)
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))//assumming data had been send to vision also
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x06;//print send complete
                        PrintStatus = "Received";
                    }
                    if ((PLCQueryRx[PLCQueryRx_DM157 + 26] == 0x2)           //vision inspection trigger /*DM170*///state 2
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM380 + 2] == 0x00) //vision ready signal
                        )
                    {
                        //  PLCWriteCommand[PLCWriteCommand_DM380 + 2] = 0x08;
                        //St02Vision01Thread = new Thread(new ParameterizedThreadStart(ST02Vision01Th));
                        //St02Vision01Thread.Start(networkmain);
                        VisionRotaryCheck = "1";
                        evt_Station02InspectionReq.Set();
                    }
                    #endregion
                    #region RotaryBRequest
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 4] == 0x1)//vision inspection ready/*DM101*///state 2
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x05)
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))//assumming data had been send to vision also
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x06;//print send complete
                        PrintStatus1 = "Received";
                    }
                    if ((PLCQueryRx[PLCQueryRx_DM157 + 30] == 0x2)           //vision inspection trigger /*DM172*///state 2
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM380 + 2] == 0x00) //vision ready signal
                        )
                    {
                        // PLCWriteCommand[PLCWriteCommand_DM380 + 2] = 0x08;
                        //St02Vision01Thread = new Thread(new ParameterizedThreadStart(ST02Vision01Th));
                        //St02Vision01Thread.Start(networkmain);
                        VisionRotaryCheck = "2";
                        evt_Station02InspectionReq.Set();
                    }
                    #endregion
                    #region RotaryCRequest
                    if ((PLCQueryRx[PLCQueryRx_DM100 + 6] == 0x1)//vision inspection ready/*DM101*///state 2
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM200 + 2] == 0x05)
                        &&
                        (!evt_Station02PrintReq.WaitOne(0))//assumming data had been send to vision also
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 2] = 0x06;//print send complete
                        PrintStatus2 = "Received";
                    }
                    if ((PLCQueryRx[PLCQueryRx_DM157 + 34] == 0x2)           //Rotary A vision inspection trigger /*DM174*///state 2
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM380 + 2] == 0x00) //vision ready signal
                        )
                    {
                        //  PLCWriteCommand[PLCWriteCommand_DM380 + 2] = 0x08;
                        //St02Vision01Thread = new Thread(new ParameterizedThreadStart(ST02Vision01Th));
                        //St02Vision01Thread.Start(networkmain);
                        VisionRotaryCheck = "3";
                        evt_Station02InspectionReq.Set();
                    }
                    #endregion
                    #endregion

                    #region Output Transpoter

                    try
                    {
                        //Tracking Label
                        byte[] temp83 = new byte[10];
                        Array.Copy(PLCQueryRx, 241, temp83, 0, 10);       // DM 115~119 PLC1
                        OutputTranspoterFL = System.Text.Encoding.Default.GetString(temp83);
                        if (OutputTranspoterFL != "\0\0\0\0\0\0\0\0\0\0")
                        {
                            #region RJ status update
                            //need lock
                            //DM154
                            byte[] tmparrayER7 = new byte[2];
                            Array.Copy(PLCQueryRx, 319, tmparrayER7, 0, 2);
                            //convert Byte array to int
                            Int32 er7 = (Int32)(BitConverter.ToInt16(tmparrayER7, 0));
                            if (er7 > 0)
                            {
                                string rj = "RJ";
                                try
                                {
                                    while ((!networkmain.UpdateRJLabel(OutputTranspoterFL, rj, er7.ToString()) && !bTerminate))
                                    {
                                        Thread.Sleep(100);
                                    }
                                }
                                catch
                                {
                                }
                            }
                            #endregion

                            PLCWriteCommand[309] = 0x0F;      //D344
                        }
                        else
                        {
                            OutputTranspoterFL   = "\0\0\0\0\0\0\0\0\0\0";
                            PLCWriteCommand[309] = 0x00;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log1.Info(ex.ToString());
                    }



                    #endregion


                    #region Printer Clear Data

                    #region RA

                    if ((PLCQueryRx[PLCQueryRx_DM150] == 0x01)
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM340] == 0x00)
                        &&
                        (!evt_Station02PrintClearReqRA.WaitOne(0))
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM340] = 0x4; //set busy signal

                        // St2Log.Info("Station 2 Printing clear  Start");
                        networkmain.linePack.Info("Station 2 Printing clear  Start");
                        ST02Rotatary_Str = ST02Rotatary_A_Str;
                        evt_Station02PrintClearReqRA.Set();
                    }

                    if ((PLCQueryRx[PLCQueryRx_DM150] == 0x1)//vision inspection ready
                        &&
                        (PLCWriteCommand[PLCWriteCommand_DM340] == 0x05)
                        &&
                        (!evt_Station02PrintClearReqRA.WaitOne(0)) //assumming data had been send to vision also
                        )
                    {
                        PLCWriteCommand[PLCWriteCommand_DM340] = 0x06;//print send complete
                        //PrintStatus = "print send complete";
                    }


                    if (PLCQueryRx[PLCQueryRx_DM150] == 0x00)
                    {
                        PLCWriteCommand[PLCWriteCommand_DM340] = 0x00;
                    }


                    #endregion



                    #endregion


                    #region Station 2 Error code

                    byte[] tmparrayER2_ = new byte[2];
                    Array.Copy(PLCQueryRx, 371, tmparrayER2_, 0, 2);  //180=371,181=373,182=375,183=377,184=379,185=381,186=383,187=385
                    //convert Byte array to int
                    Int32 erst2 = (Int32)(BitConverter.ToInt16(tmparrayER2_, 0));
                    ErrCode2 = erst2.ToString();

                    byte[] tmparrayER2_1 = new byte[2];
                    Array.Copy(PLCQueryRx, 373, tmparrayER2_1, 0, 2);  //181=373,182=375,183=377,184=379,185=381,186=383,187=385
                    //convert Byte array to int
                    Int32 erst2_1 = (Int32)(BitConverter.ToInt16(tmparrayER2_1, 0));
                    ErrCode2_1 = erst2_1.ToString();

                    byte[] tmparrayER2_2 = new byte[2];
                    Array.Copy(PLCQueryRx, 375, tmparrayER2_2, 0, 2);  //182=375,183=377,184=379,185=381,186=383,187=385
                    //convert Byte array to int
                    Int32 erst2_2 = (Int32)(BitConverter.ToInt16(tmparrayER2_2, 0));
                    ErrCode2_2 = erst2_2.ToString();

                    byte[] tmparrayER2_3 = new byte[2];
                    Array.Copy(PLCQueryRx, 377, tmparrayER2_3, 0, 2);  //183=377,184=379,185=381,186=383,187=385
                    //convert Byte array to int
                    Int32 erst2_3 = (Int32)(BitConverter.ToInt16(tmparrayER2_3, 0));
                    ErrCode2_3 = erst2_3.ToString();

                    byte[] tmparrayER2_4 = new byte[2];
                    Array.Copy(PLCQueryRx, 379, tmparrayER2_4, 0, 2);  //184=379,185=381,186=383,187=385
                    //convert Byte array to int
                    Int32 erst2_4 = (Int32)(BitConverter.ToInt16(tmparrayER2_4, 0));
                    ErrCode2_4 = erst2_4.ToString();

                    byte[] tmparrayER2_5 = new byte[2];
                    Array.Copy(PLCQueryRx, 381, tmparrayER2_5, 0, 2);  //185=381,186=383,187=385
                    //convert Byte array to int
                    Int32 erst2_5 = (Int32)(BitConverter.ToInt16(tmparrayER2_5, 0));
                    ErrCode2_5 = erst2_5.ToString();

                    byte[] tmparrayER2_6 = new byte[2];
                    Array.Copy(PLCQueryRx, 383, tmparrayER2_6, 0, 2);  //186=383,187=385
                    //convert Byte array to int
                    Int32 erst2_6 = (Int32)(BitConverter.ToInt16(tmparrayER2_6, 0));
                    ErrCode2_6 = erst2_6.ToString();

                    byte[] tmparrayER2_7 = new byte[2];
                    Array.Copy(PLCQueryRx, 385, tmparrayER2_7, 0, 2);  //187=385
                    //convert Byte array to int
                    Int32 erst2_7 = (Int32)(BitConverter.ToInt16(tmparrayER2_7, 0));
                    ErrCode2_7 = erst2_7.ToString();



                    #region NewErrorCode
                    if (erst2 > 0 || erst2_1 > 0 || erst2_2 > 0 || erst2_3 > 0 || erst2_4 > 0 || erst2_5 > 0 || erst2_6 > 0 || erst2_7 > 0)
                    {
                        //GYL: erst2~erst2_7 is represent DM180=DM2031,DM181=2033,182=DM2038,183=DM2043,184=2036,185=2037,186=DM2039,187=2046
                        //   LogEr.Info("Station 2 Error Code"+ErrCode2+ErrCode2_1+ErrCode2_2+ErrCode2_3+ErrCode2_4+ErrCode2_5+ErrCode2_6+ErrCode2_7);

                        Errmessage2 = "Stn.2 Err " +
                                      (erst2 > 0 ? ErrCode2 + ": " + Stn2ErrToMsg(erst2) : "") +
                                      (erst2_1 > 0 && erst2_1 != erst2 ? ", " + ErrCode2_1 + ": " + Stn2ErrToMsg(erst2_1) : "") +
                                      (erst2_2 > 0 && erst2_2 != erst2 ? ", " + ErrCode2_2 + ": " + Stn2ErrToMsg(erst2_2) : "") +
                                      (erst2_3 > 0 && erst2_3 != erst2 ? ", " + ErrCode2_3 + ": " + Stn2ErrToMsg(erst2_3) : "") +
                                      (erst2_4 > 0 && erst2_4 != erst2 ? ", " + ErrCode2_4 + ": " + Stn2ErrToMsg(erst2_4) : "") +
                                      (erst2_5 > 0 && erst2_5 != erst2 ? ", " + ErrCode2_5 + ": " + Stn2ErrToMsg(erst2_5) : "") +
                                      (erst2_6 > 0 && erst2_6 != erst2 ? ", " + ErrCode2_6 + ": " + Stn2ErrToMsg(erst2_6) : "") +
                                      (erst2_7 > 0 && erst2_7 != erst2 ? ", " + ErrCode2_7 + ": " + Stn2ErrToMsg(erst2_7) : "");

                        //  LogEr.Info(Errmessage2);
                        //GYL:Add Pause STN2 Function,and ST2 JAM trigger
                        if (!ST2JamFlag)
                        {
                            bool St2JamTrig = ST2PauseFunction(2, erst2 + ";" + erst2_1 + ";" + erst2_2 + ";" + erst2_3 + ";" + erst2_4 + ";" + erst2_5 + ";" + erst2_6 + ";" + erst2_7);
                            if (St2JamTrig)
                            {
                                ST2JamFlag = true;

                                //string[] FLbatch = rq.UpdJamstatus(2, 222); //Update Jam FL

                                //if (FLbatch != null)
                                //{
                                //    networkmain.Client_SendEventMsg("265", "Station2FLJAMRecovery", FLbatch);//Update Jam recovery FL to middleware

                                //}
                            }
                        }
                    }
                    else
                    {
                        Errmessage2 = String.Empty;
                        ST2JamFlag  = false;
                    }
                    #endregion
                    #region OldAlarm
                    //if (erst2 > 0 || erst2_1 > 0 || erst2_2 > 0 || erst2_3 > 0 || erst2_4 > 0 || erst2_5 > 0 || erst2_6 > 0 || erst2_7 > 0)
                    //{

                    //    //   LogEr.Info("Station 2 Error Code"+ErrCode2+ErrCode2_1+ErrCode2_2+ErrCode2_3+ErrCode2_4+ErrCode2_5+ErrCode2_6+ErrCode2_7);

                    //    Errmessage2 = "Stn.2 Err " +
                    //               (erst2 > 0 ? ErrCode2 + ": " + Stn2ErrToMsg(erst2) : "") +
                    //               (erst2_1 > 0 && erst2_1 != erst2 ? ", " + ErrCode2_1 + ": " + Stn2ErrToMsg(erst2_1) : "") +
                    //               (erst2_2 > 0 && erst2_2 != erst2 ? ", " + ErrCode2_2 + ": " + Stn2ErrToMsg(erst2_2) : "") +
                    //               (erst2_3 > 0 && erst2_3 != erst2 ? ", " + ErrCode2_3 + ": " + Stn2ErrToMsg(erst2_3) : "") +
                    //               (erst2_4 > 0 && erst2_4 != erst2 ? ", " + ErrCode2_4 + ": " + Stn2ErrToMsg(erst2_4) : "") +
                    //               (erst2_5 > 0 && erst2_5 != erst2 ? ", " + ErrCode2_5 + ": " + Stn2ErrToMsg(erst2_5) : "") +
                    //               (erst2_6 > 0 && erst2_6 != erst2 ? ", " + ErrCode2_6 + ": " + Stn2ErrToMsg(erst2_6) : "") +
                    //               (erst2_7 > 0 && erst2_7 != erst2 ? ", " + ErrCode2_7 + ": " + Stn2ErrToMsg(erst2_7) : "");

                    //    //  LogEr.Info(Errmessage2);



                    //}
                    //else
                    //{
                    //    Errmessage2 = String.Empty;
                    //}
                    #endregion
                    UpdateErrorMsg((int)Station.StationNumber.Station02, Errmessage2, ST2JamFlag);



                    if (erst2 > 0 && networkmain.controlst2 == 0)
                    {
                        Errst2 = erst2.ToString();
                        networkmain.controlst2 = 1;
                        messagest2             = Stn2ErrToMsg(erst2);
                        networkmain.Client_SendAlarmMessage2(erst2.ToString(), messagest2, "SET");
                    }

                    if (erst2 == 0 && networkmain.controlst2 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2, messagest2, "CLEAR");
                        messagest2             = "";
                        Errst2                 = "";
                        networkmain.controlst2 = 0;
                    }


                    if (erst2_1 > 0 && erst2_1 != erst2 && networkmain.controlst2_1 == 0)
                    {
                        Errst2_1 = erst2_1.ToString();
                        networkmain.controlst2_1 = 1;
                        messagest2_1             = Stn2ErrToMsg(erst2_1);
                        networkmain.Client_SendAlarmMessage2(erst2_1.ToString(), messagest2_1, "SET");
                    }

                    if (erst2_1 == 0 && networkmain.controlst2_1 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_1, messagest2_1, "CLEAR");
                        messagest2_1             = "";
                        Errst2_1                 = "";
                        networkmain.controlst2_1 = 0;
                    }



                    if (erst2_2 > 0 && erst2_2 != erst2 && erst2_2 != erst2_1 && networkmain.controlst2_2 == 0)
                    {
                        Errst2_2 = erst2_2.ToString();
                        networkmain.controlst2_2 = 1;
                        messagest2_2             = Stn2ErrToMsg(erst2_2);
                        networkmain.Client_SendAlarmMessage2(erst2_2.ToString(), messagest2_2, "SET");
                    }

                    if (erst2_2 == 0 && networkmain.controlst2_2 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_2, messagest2_2, "CLEAR");
                        messagest2_2             = "";
                        Errst2_2                 = "";
                        networkmain.controlst2_2 = 0;
                    }



                    if (erst2_3 > 0 && erst2_3 != erst2 && erst2_3 != erst2_2 && erst2_3 != erst2_1 && networkmain.controlst2_3 == 0)
                    {
                        Errst2_3 = erst2_3.ToString();
                        networkmain.controlst2_3 = 1;
                        messagest2_3             = Stn2ErrToMsg(erst2_3);
                        networkmain.Client_SendAlarmMessage2(erst2_3.ToString(), messagest2_3, "SET");
                    }

                    if (erst2_3 == 0 && networkmain.controlst2_3 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_3, messagest2_3, "CLEAR");
                        messagest2_3             = "";
                        Errst2_3                 = "";
                        networkmain.controlst2_3 = 0;
                    }



                    if (erst2_4 > 0 && erst2_4 != erst2 && erst2_4 != erst2_3 && erst2_4 != erst2_2 && erst2_4 != erst2_1 && networkmain.controlst2_4 == 0)
                    {
                        Errst2_4 = erst2_4.ToString();
                        networkmain.controlst2_4 = 1;
                        messagest2_4             = Stn2ErrToMsg(erst2_4);
                        networkmain.Client_SendAlarmMessage2(erst2_4.ToString(), messagest2_4, "SET");
                    }

                    if (erst2_4 == 0 && networkmain.controlst2_4 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_4, messagest2_4, "CLEAR");
                        messagest2_4             = "";
                        Errst2_4                 = "";
                        networkmain.controlst2_4 = 0;
                    }

                    if (erst2_5 > 0 && erst2_5 != erst2 && erst2_5 != erst2_4 && erst2_5 != erst2_3 && erst2_5 != erst2_2 && erst2_5 != erst2_1 && networkmain.controlst2_5 == 0)
                    {
                        Errst2_5 = erst2_5.ToString();
                        networkmain.controlst2_5 = 1;
                        messagest2_5             = Stn2ErrToMsg(erst2_5);
                        networkmain.Client_SendAlarmMessage2(erst2_5.ToString(), messagest2_5, "SET");
                    }

                    if (erst2_5 == 0 && networkmain.controlst2_5 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_5, messagest2_5, "CLEAR");
                        messagest2_5             = "";
                        Errst2_5                 = "";
                        networkmain.controlst2_5 = 0;
                    }


                    if (erst2_6 > 0 && erst2_6 != erst2 && erst2_6 != erst2_5 && erst2_6 != erst2_4 && erst2_6 != erst2_3 && erst2_6 != erst2_2 && erst2_6 != erst2_1 && networkmain.controlst2_6 == 0)
                    {
                        Errst2_6 = erst2_6.ToString();
                        networkmain.controlst2_6 = 1;
                        messagest2_6             = Stn2ErrToMsg(erst2_6);
                        networkmain.Client_SendAlarmMessage2(erst2_6.ToString(), messagest2_6, "SET");
                    }

                    if (erst2_6 == 0 && networkmain.controlst2_6 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_6, messagest2_6, "CLEAR");
                        messagest2_6             = "";
                        Errst2_6                 = "";
                        networkmain.controlst2_6 = 0;
                    }


                    if (erst2_7 > 0 && erst2_7 != erst2 && erst2_7 != erst2_6 && erst2_7 != erst2_5 && erst2_7 != erst2_4 && erst2_7 != erst2_3 && erst2_7 != erst2_2 && erst2_7 != erst2_1 && networkmain.controlst2_7 == 0)
                    {
                        Errst2_7 = erst2_7.ToString();
                        networkmain.controlst2_7 = 1;
                        messagest2_7             = Stn2ErrToMsg(erst2_7);
                        networkmain.Client_SendAlarmMessage2(erst2_7.ToString(), messagest2_7, "SET");
                    }

                    if (erst2_7 == 0 && networkmain.controlst2_7 == 1)
                    {
                        networkmain.Client_SendAlarmMessage2(Errst2_7, messagest2_7, "CLEAR");
                        messagest2_7             = "";
                        Errst2_7                 = "";
                        networkmain.controlst2_7 = 0;
                    }
                    if (PLCQueryRx[PLCQueryRx_DM100 + 16] == 0x4)          //d108
                    {
                        PLCWriteCommand[PLCWriteCommand_DM200 + 60] = 0x0; //D230, Station2 Pause trigger
                    }


                    #endregion


                    #region Checke printer Connection at ST2


                    Ping PingPrinter2 = new Ping();

                    try
                    {
                        if ((PLCQueryRx[PLCQueryRx_DM134] == 0x01)
                            &&
                            (PLCWriteCommand[PLCWriteCommand_DM427] == 0x00)
                            )
                        {
                            PingReply PR2 = PingPrinter2.Send("192.168.3.224");
                            if (PR2.Status == IPStatus.Success)
                            {
                                PLCWriteCommand[PLCWriteCommand_DM427] = 0x09;
                            }
                            else if (PR2.Status == IPStatus.DestinationHostUnreachable)
                            {
                                PLCWriteCommand[PLCWriteCommand_DM427] = 0xFF;
                            }
                        }


                        if (PLCQueryRx[PLCQueryRx_DM134] == 0x00)
                        {
                            PLCWriteCommand[PLCWriteCommand_DM427] = 0x00;
                        }
                    }
                    catch
                    {
                    }



                    #endregion
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }
        }