Example #1
0
        public void Station06OOperator02ScannerConnect(MainNetworkClass networkmain)
        {
            if (OP2CognexScanner != null)//change this to comport
            {
                try {
                    OP2CognexScanner.Close();
                } catch (Exception ex) { log.Error("Operator2 scanner unable to close exception " + ex.ToString()); }
                //  OP2CognexScanner = null;
            }
            XmlDocument doc = new XmlDocument();

            doc.Load(@"Config.xml");
            XmlNode Scannernode = doc.SelectSingleNode(@"/CONFIG/SCANNER2/PORT");
            String  comport     = Scannernode.InnerText;
            XmlNode tryingtime  = doc.SelectSingleNode(@"/CONFIG/SCANNER2/TRYINGTIME");

            X = int.Parse(tryingtime.InnerText);
            try {
                if (OP2CognexScanner == null)
                {
                    OP2CognexScanner          = new SerialPort(comport);
                    OP2CognexScanner.BaudRate = 9600;
                    OP2CognexScanner.Parity   = Parity.None;
                    OP2CognexScanner.StopBits = StopBits.One;
                    OP2CognexScanner.DataBits = 8;
                }
                OP2CognexScanner.Open();
            } catch (Exception ex) {
                log.Error("Operator2 scanner exception " + ex.ToString());
                networkmain.linePack.Error("Operator2 scanner exception " + ex.ToString());
                //OP2CognexScanner = null;
            }
        }
Example #2
0
        public const int XOFFSETForst4handscanbarcode6 = 371; //375
        //public Logger Log = LogManager.GetLogger("UploadhandScannerData");
        public void UploadhandScannerData(object msgobj)
        {
            //Log.Info("Thread Start");
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            while (!bTerminate)
            {
                // Log.Info("Thread Loop");
                Thread.Sleep(100);
                try {
                    string      barcode1;
                    XmlDocument doc = new XmlDocument();
                    doc.Load(@"Config.xml");
                    XmlNode node = doc.SelectSingleNode(@"/CONFIG/MSTBAGMATRIX/L-01");
                    barcode1 = node.InnerText;
                    string tmpstr;
                    byte[] tmpbyte;
                    tmpstr  = barcode1;
                    tmpbyte = new byte[tmpstr.Length];
                    tmpbyte = Encoding.ASCII.GetBytes(tmpstr);
                    Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode1, tmpstr.Length);//D345=311
                    node     = doc.SelectSingleNode(@"/CONFIG/MSTBAGMATRIX/L-02");
                    barcode1 = node.InnerText;
                    tmpstr   = barcode1;
                    tmpbyte  = new byte[tmpstr.Length];
                    tmpbyte  = Encoding.ASCII.GetBytes(tmpstr);
                    Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode2, tmpstr.Length);//D383=387
                    node     = doc.SelectSingleNode(@"/CONFIG/MSTBAGMATRIX/L-03");
                    barcode1 = node.InnerText;
                    tmpstr   = barcode1;
                    tmpbyte  = new byte[tmpstr.Length];
                    tmpbyte  = Encoding.ASCII.GetBytes(tmpstr);
                    Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode3, tmpstr.Length);//D388=397
                    node     = doc.SelectSingleNode(@"/CONFIG/MSTBAGMATRIX/R-01");
                    barcode1 = node.InnerText;
                    tmpstr   = barcode1;
                    tmpbyte  = new byte[tmpstr.Length];
                    tmpbyte  = Encoding.ASCII.GetBytes(tmpstr);
                    Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode4, tmpstr.Length);//D393=407
                    node     = doc.SelectSingleNode(@"/CONFIG/MSTBAGMATRIX/R-02");
                    barcode1 = node.InnerText;
                    tmpstr   = barcode1;
                    tmpbyte  = new byte[tmpstr.Length];
                    tmpbyte  = Encoding.ASCII.GetBytes(tmpstr);
                    Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode5, tmpstr.Length);//D370=361
                    node     = doc.SelectSingleNode(@"/CONFIG/MSTBAGMATRIX/R-03");
                    barcode1 = node.InnerText;
                    tmpstr   = barcode1;
                    tmpbyte  = new byte[tmpstr.Length];
                    tmpbyte  = Encoding.ASCII.GetBytes(tmpstr);
                    Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode6, tmpstr.Length);//D375=371
                } catch { }
                break;
            }
            //Log.Info("Thread Exit");
        }
Example #3
0
        public void RunStation05Sealer1(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            while (!bTerminate)
            {
                Thread.Sleep(100);
                try
                {
                    bool Sealerflag1 = false;

                    string abc;
                    if (PLCTelnet2 != null)
                    {
                        if (PLCTelnet2.connected)
                        {
                            #region  sealer program For Station5


                            #region    //Sealer1

                            byte[] tmparray2 = new byte[10];
                            //DM5080
                            Array.Copy(PLCQueryRx6, 171, tmparray2, 0, 10);
                            //convert array to string
                            Station5ForSealer1Scanboxid = System.Text.Encoding.Default.GetString(tmparray2);
                            if (Station5ForSealer1Scanboxid != "\0\0\0\0\0\0\0\0\0\0")
                            {
                                ScanboxidSt5S1 = Station5ForSealer1Scanboxid;
                                Sealer1Log.Info("Finishing Label for Station 5 Sealer1 " + Station5ForSealer1Scanboxid);
                                networkmain.stn5log = Station5ForSealer1Scanboxid + " slr.1 recieved";
                                #region Desiccant Timmer
                                Thread.Sleep(10);
                                if ((PLCQueryRx6[PLCQueryRx_DM5111 + 12] == 0X07) && (PLCWriteCommand6[PLCWriteCommand_DM5405]) == 0x00)//D5117
                                {
                                    try {
                                        #region HIC YES Or No Check

                                        //if(Station5ForSealer1HICYESNO=="NO")
                                        //{
                                        //(PLCWriteCommand6[PLCWriteCommand_DM5405]) = 0x07;
                                        //}


                                        //else
                                        //{

                                        Sealer1Log.Info("Finishing Label for Station 5 Sealer1 PLC Send HIC/Desiccant stop Signal " + Station5ForSealer1Scanboxid);
                                        networkmain.stn5log = Station5ForSealer1Scanboxid + " slr.1 HIC/Desct stop";
                                        if (Sealerflag1 == false)
                                        {
                                            try
                                            {
                                                Sealerflag1 = true;
                                                TimeSpan span = DateTime.Now.Subtract(DesiccantTimingMap[Station5ForSealer1Scanboxid]);
                                                double   secs = span.TotalSeconds;
                                                Sealer1Log.Info("PC delete HIC/Desiccant Finishing Label for Station 5 Sealer1 " + Station5ForSealer1Scanboxid);
                                                networkmain.stn5log = Station5ForSealer1Scanboxid + " slr.1 PC delete HIC/Desiccant";
                                                // if (secs > 175) //NEED TO OPEN WHEN REAL TIME PRODUCTION
                                                if (secs > 300)
                                                {
                                                    //Desiccant Expired. Reject the Part.
                                                    //D5412=445
                                                    Statusst5 = "Fail";
                                                    MyEventQ.AddQ("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer1Scanboxid);
                                                    EvtLog.Info("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer1Scanboxid);
                                                    byte[] tmp = new byte[2];
                                                    tmp = Encoding.ASCII.GetBytes("RJ");
                                                    Array.Copy(tmp, 0, PLCWriteCommand6, 445, 2);

                                                    try
                                                    {
                                                        while ((!networkmain.UpdateRJLabelst5S1(Station5ForSealer1Scanboxid, "RJ", "500") && !bTerminate))
                                                        {
                                                            Thread.Sleep(100);
                                                        }
                                                        Sealer1Log.Info(" HIC/Desiccant Timeout Finishing Label (RJ) for Station 5 Sealer1  " + Station5ForSealer1Scanboxid);
                                                        networkmain.stn5log     = Station5ForSealer1Scanboxid + " slr.1 HIC/Desiccant Timeout";
                                                        networkmain.OperatorLog = "Stn.5 Slr.1 HIC/Desiccant Timeout " + Station5ForSealer1Scanboxid;
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        Sealer1Log.Error("station 5 Sealer1 HIC/Desiccant (RJ) Fail" + ex);
                                                        networkmain.stn5log     = "slr.1 HIC/Desiccant fail";
                                                        networkmain.OperatorLog = "Stn.5 Slr.1HIC/Desiccant fail " + Station5ForSealer1Scanboxid;
                                                        byte[] tmp1 = new byte[2];
                                                        tmp1 = Encoding.ASCII.GetBytes("RJ");
                                                        Array.Copy(tmp1, 0, PLCWriteCommand6, 445, 2);

                                                        MyEventQ.AddQ("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer1Scanboxid);
                                                        EvtLog.Info("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer1Scanboxid);
                                                    }
                                                }
                                                else
                                                {
                                                    if (CheckeRJStatusForSealer1(Station5ForSealer1Scanboxid) == true)
                                                    {
                                                        Sealer1Log.Info(" HIC/Desiccant Pass Finishing Label for Station 5 Sealer1  " + Station5ForSealer1Scanboxid);
                                                        networkmain.stn5log = Station5ForSealer1Scanboxid + " slr.1 HIC/Desiccant Pass";
                                                        Statusst5           = "Pass";
                                                    }
                                                    else
                                                    {
                                                        while ((!networkmain.UpdateRJLabelst5S1(Station5ForSealer1Scanboxid, "RJ", RJResultst5S1) && !bTerminate))
                                                        {
                                                            Thread.Sleep(100);
                                                        }


                                                        byte[] tmp1 = new byte[2];
                                                        tmp1 = Encoding.ASCII.GetBytes("RJ");
                                                        Array.Copy(tmp1, 0, PLCWriteCommand6, 445, 2);
                                                        Statusst5 = "Fail";
                                                        Sealer1Log.Info(" Finishing Label for Station 5 Sealer1 (RJ) because of other station " + Station5ForSealer1Scanboxid + " RJ Code," + RJResultst5S1);
                                                    }
                                                }

                                                DesiccantTimingMap.Remove(Station5ForSealer1Scanboxid);
                                                (PLCWriteCommand6[PLCWriteCommand_DM5405]) = 0x07;
                                            }
                                            catch (Exception ex)
                                            {
                                                Sealer1Log.Error(ex.ToString());

                                                while ((!networkmain.UpdateRJLabelst5S1(Station5ForSealer1Scanboxid, "RJ", "505") && !bTerminate))
                                                {
                                                    Thread.Sleep(100);
                                                }
                                                //D5412=445
                                                byte[] tmp = new byte[2];
                                                tmp = Encoding.ASCII.GetBytes("RJ");
                                                Array.Copy(tmp, 0, PLCWriteCommand6, 445, 2);
                                                Statusst5 = "Fail";
                                                Sealer1Log.Info(" HIC/Desiccant Fail Finishing Label (RJ) for Sealer1 because of station 3 but send signal to PLC " + Station5ForSealer1Scanboxid + " RJ Code," + "505");
                                                networkmain.stn5log     = Station5ForSealer1Scanboxid + " slr.1 HIC/Desiccant Fail Label because of station 3";
                                                networkmain.OperatorLog = "Stn.5 Slr.1 HIC/Desiccant Failed because of station 3" + Station5ForSealer1Scanboxid;
                                                (PLCWriteCommand6[PLCWriteCommand_DM5405]) = 0x07;
                                            }
                                        }
                                        //  } //change

                                        #endregion
                                    }

                                    catch (Exception ex)
                                    {
                                        Sealer1Log.Error(ex.ToString());
                                        Statusst5 = "Fail";
                                    }
                                }



                                //  //TEST NEED TO DELET START
                                //if(PLCQueryRx6[PLCQueryRx_DM5111 + 12]==0X07)

                                //{ (PLCWriteCommand6[PLCWriteCommand_DM5405]) = 0x07;
                                //}
                                ////TEST NEED TO DELET END

                                #endregion
                                if (PLCWriteCommand6[PLCWriteCommand_DM5310] == 0x00)
                                {
                                    PLCWriteCommand6[PLCWriteCommand_DM5310] = 0x04; //busy Sealer1
                                    evnt_FindFinishingLabelForSealer1.Set();
                                    Sealer1Log.Info("Finishing Label for Station 5 Sealer1 receipt send already " + Station5ForSealer1Scanboxid);
                                    networkmain.stn5log     = Station5ForSealer1Scanboxid + " slr.1 receipt send already";
                                    networkmain.OperatorLog = "Stn.5 slr.1 " + Station5ForSealer1Scanboxid + " receipt send already";
                                }
                            }
                            else
                            {
                                PLCWriteCommand6[PLCWriteCommand_DM5310]  = 0x00;
                                PLCWriteCommand6[PLCWriteCommand_DM5412]  = 0x00;
                                PLCWriteCommand6[PLCWriteCommand_DM5412b] = 0x00;
                                Station5ForSealer1Scanboxid = "\0\0\0\0\0\0\0\0\0\0";
                                Sealerflag1    = false;
                                pNumber1       = 0;
                                ScanboxidSt5S1 = "";
                                Statusst5      = "";
                            }

                            if (PLCQueryRx6[PLCQueryRx_DM5111 + 12] == 0X00)
                            {
                                (PLCWriteCommand6[PLCWriteCommand_DM5405]) = 0x00;
                            }

                            #endregion


                            #endregion
                            #region Sealercomms
                            if (evnt_FindFinishingLabelForSealer1.WaitOne(0))
                            {
                                try
                                {
                                    if (VS1VacuumSealer != null)
                                    {
                                        //if (!VS1VacuumSealer.IsOpen)
                                        //{
                                        try
                                        {
                                            VS1VacuumSealer.Close();
                                        }
                                        catch (Exception) { }
                                        VS1VacuumSealer = null;
                                        //}
                                    }
                                    if (VS1VacuumSealer == null)
                                    {
                                        XmlDocument doc = new XmlDocument();
                                        doc.Load(@"Config.xml");
                                        XmlNode Sealernode = doc.SelectSingleNode(@"/CONFIG/SEALER1/PORT");
                                        String  comport    = Sealernode.InnerText;
                                        //TODO: ConfigFIle
                                        VS1VacuumSealer = new InnovacVacuumSealer(comport);
                                        VS1VacuumSealer.Open();
                                    }
                                    // VS1VacuumSealer.SelectAndConfirmProgram(int.Parse(SEALER_RECIPE), InnovacVacuumSealer.SealerBar.Right);
                                    if (networkmain.FindSealerReceipeForSealer1(Station5ForSealer1Scanboxid) == true)
                                    {
                                        short sealerReceipe = networkmain.SealerReceipt1;
                                        Sealer1Log.Info("Sealer1 send receipt " + sealerReceipe + "'" + Station5ForSealer1Scanboxid);
                                        networkmain.stn5log = Station5ForSealer1Scanboxid + " slr.1 send receipt " + sealerReceipe;
                                        VS1VacuumSealer.SelectAndConfirmProgram(sealerReceipe, InnovacVacuumSealer.SealerBar.Right);
                                        //bool type want
                                        PLCWriteCommand6[PLCWriteCommand_DM5310] = 0x08;
                                        //  evnt_FindFinishingLabelForSealer1.Reset();


                                        //// Wait until the sealing is completed/ Error returned/ Timeout happened.
                                        InnovacVacuumSealer.SealingCompleteMessage sealingCompleteMessage;
                                        try {
                                            VS1VacuumSealer.WaitSealingCompleted(out sealingCompleteMessage, 120000);
                                            // Sealing Completed successfully
                                            Sealer1Log.Info(sealingCompleteMessage.ToString());
                                            PLCWriteCommand6[PLCWriteCommand_DM5310] = 0x09;


                                            #region

                                            try
                                            {
                                                //FL 1

                                                pNumber1 = sealingCompleteMessage.ProgramNumber; //3


                                                if (pNumber1 > 0)

                                                {
                                                    // InnovacVacuumSealer.SealerBar SBar=sealingCompleteMessage.SelectedSealerBar;
                                                    // InnovacVacuumSealer.MessageCode Com   =sealingCompleteMessage.Command;

                                                    short  vacuumPV    = sealingCompleteMessage.VacuumPV;                //ActualVacuumReading 4
                                                    short  VacuumSP    = sealingCompleteMessage.VacuumSP;                //RecipeVacuumReading 5
                                                    short  SCurrentPV  = sealingCompleteMessage.SealerCurrentPV;         //ActualCurrentReading 6
                                                    short  SCurrentSP  = sealingCompleteMessage.SealerCurrentSP;         //RecipeCurrentReading 7
                                                    float  sealingTime = sealingCompleteMessage.SealingTime;             //8
                                                    string Sfunction   = sealingCompleteMessage.UsedFunction.ToString(); //9


                                                    abc           = Sealer1IDshow.Trim();
                                                    Sealer1IDshow = abc;
                                                    if (Sfunction == "VT")
                                                    {
                                                        Sfunction = "VT";
                                                    }
                                                    if (Sfunction == "VS")
                                                    {
                                                        Sfunction = "VS";
                                                    }
                                                    if (Sfunction == "VT,VS")
                                                    {
                                                        Sfunction = "VTVS";
                                                    }



                                                    networkmain.Client_SendEventMessageForSealer1("503", Station5ForSealer1Scanboxid, Sealer1IDshow, sealingCompleteMessage.ProgramNumber, sealingCompleteMessage.VacuumPV, sealingCompleteMessage.VacuumSP, sealingCompleteMessage.SealerCurrentPV, sealingCompleteMessage.SealerCurrentSP, sealingCompleteMessage.SealingTime, Sfunction);



                                                    Sealer1Log.Info("Sealer1 send SealerInfo to Middleware " + Station5ForSealer1Scanboxid + "," + Sealer1IDshow + "," + sealingCompleteMessage.ProgramNumber + "," + sealingCompleteMessage.VacuumPV + "," + sealingCompleteMessage.VacuumSP + "," + sealingCompleteMessage.SealerCurrentPV + "," + sealingCompleteMessage.SealerCurrentSP + "," + sealingCompleteMessage.SealingTime + "," + Sfunction);
                                                }
                                            }

                                            catch
                                            {}

                                            #endregion
                                        } catch (TimeoutException ex) {
                                            // Timeout Happened
                                            Sealer1Log.Error(ex.ToString());
                                            abc = Sealer1IDshow.Trim();
                                            MyEventQ.AddQ("8;SealerCommunicationBreak;SealerID;" + abc);
                                            EvtLog.Info("8;SealerCommunicationBreak;SealerID;" + abc);
                                        } catch (InnovacVacuumSealer.SealingErrorException ex) {
                                            // Sealer return Error
                                            if (ex.ErrorCode == 2 || ex.ErrorCode == 3 || ex.ErrorCode == 7)
                                            {
                                                PLCWriteCommand6[PLCWriteCommand_DM5310] = 0xFF;
                                            }
                                            else
                                            {
                                                PLCWriteCommand6[PLCWriteCommand_DM5310] = 0x09;
                                            }
                                            if (!Sealer1ErrAtv)
                                            {
                                                Sealer1ErrorCode = "E" + (5600 + ex.ErrorCode).ToString();
                                                Sealer1EventMesg = ex.ErrorMessage;
                                                Sealer1ErrAtv    = true;
                                                ExceptionMesgSend1((5600 + ex.ErrorCode).ToString(), Sealer1IDshow.Trim(), ex.ErrorMessage, ex.ToString());
                                                Sealer1ErrResetTimer.Interval = TimeSpan.FromSeconds(10);
                                                Sealer1ErrResetTimer.Tick    += Sealer1ErrResetTimer_Tick;
                                                Sealer1ErrResetTimer.Start(); //Start the bloody timer
                                            }
                                            else
                                            {
                                                //Reset the timer
                                                Sealer1ErrResetTimer.Stop();
                                                Sealer1ErrResetTimer.Start();
                                            }
                                        }
                                    }
                                    //finishing label not match
                                    // Set Status for PLC to Complete 0x08
                                    else
                                    {
                                        Sealer1Log.Info("Sealer1 Finishing Label don't have in System" + ", " + Station5ForSealer1Scanboxid);
                                        networkmain.stn5log     = Station5ForSealer1Scanboxid + " slr.1 Finishing Label not in system";
                                        networkmain.OperatorLog = "Stn.5 dont have " + Station5ForSealer1Scanboxid + " in system";
                                        PLCWriteCommand6[PLCWriteCommand_DM5310] = 0x0F;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Sealer1Log.Error(ex.ToString());
                                    // Set status for PLC to Error 0x0F
                                    PLCWriteCommand6[PLCWriteCommand_DM5310] = 0x0F;
                                    Sealer1Log.Info("Sealer1 Finishing Label don't have in System" + "," + Station5ForSealer1Scanboxid);
                                    networkmain.stn5log = Station5ForSealer1Scanboxid + " slr.1 Finishing Label not in system";
                                    evnt_FindFinishingLabelForSealer1.Reset();
                                }
                                evnt_FindFinishingLabelForSealer1.Reset();
                            }

                            #endregion
                        }
                    }
                    //  break;
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }
        }
Example #4
0
        public void RunPLC01Scan(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            byte[] tmpRx     = new byte[411];
            byte[] tmpRx1    = new byte[611];
            byte[] tmpRx2    = new byte[811];
            bool   plc1Break = false;

            PLCTelnet = new TelnetClient();
            //check for TCP network connection for PLC
            while (!bTerminate)
            {
                Thread.Sleep(100);
                try
                {
                    if (PLCTelnet.connected == false)
                    {
                        XmlDocument doc = new XmlDocument();
                        doc.Load(@"Config.xml");
                        XmlNode node = doc.SelectSingleNode(@"/CONFIG/PLCCONTROLLER1/ADD");
                        System.Net.IPAddress address = System.Net.IPAddress.Parse(node.InnerText);
                        node = doc.SelectSingleNode(@"/CONFIG/PLCCONTROLLER1/PORT");
                        PLCNetworkAddress = "Trying to connect to " + address.ToString() + " Port : " + node.InnerText;
                        if (PLCTelnet.ConnectToHost(address, int.Parse(node.InnerText)) == false)
                        {
                            PLCNetworkAddress = "Connected to PLCServer1 "
                                                + address.ToString()
                                                + " Port : "
                                                + node.InnerText
                                                + " Fail"; //not connected
                            Thread.Sleep(100);             // try to connect to server
                            if (!plc1Break)
                            {
                                MyEventQ.AddQ("5;PLCCommunicationBreak;PLC Number;1");//Push message to stack
                                EvtLog.Info("5;PLCCommunicationBreak;PLC Number;1");
                                plc1Break = true;
                            }
                            continue;
                        }
                        else
                        {
                            PLCNetworkAddress = "Connected to PLCServer1 " + address.ToString() + " Port : " + node.InnerText;//connected
                        }
                        plc1Break = false;
                    }
                    //PLC Read Write Cycle
                    if (PLCTelnet.connected)
                    {
                        //get read data from PLC
                        PLCTelnet.SendDataToHost(PLCQueryCmd);//query data from plc D000 to D199
                        string tmpstr100;
                        tmpstr100 = PLCTelnet.GetDataFromHost(ref tmpRx, tmpRx.Length);
                        if (tmpstr100.StartsWith("d00000ffff") && tmpstr100.Length == 822)
                        {
                            Array.Copy(tmpRx, PLCQueryRx, PLCQueryRx.Length);
                        }
                        else
                        {
                            tmpstr100 = "No Data";
                        }

                        int timeoutcounter = 0;
                        while ((tmpstr100 == "No Data") && PLCTelnet.connected)
                        {
                            Thread.Sleep(waitdelay);
                            //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                            tmpstr100 = PLCTelnet.GetDataFromHost(ref tmpRx, tmpRx.Length);
                            //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                            if (tmpstr100.StartsWith("d00000ffff") && (tmpstr100.Length == 822))
                            {
                                Array.Copy(tmpRx, PLCQueryRx, PLCQueryRx.Length);
                            }
                            else
                            {
                                tmpstr100 = "No Data";
                            }
                            //log.Info(tmpstr100);
                            timeoutcounter++;
                            if (timeoutcounter == 10)
                            {
                                //assume connection broken
                                PLCTelnet.Close();
                                break;
                            }
                        }

                        //Update 14/12/2015 May Pon
                        #region READ  PLC1 Memory 6100 to 6499



                        timeoutcounter = 0;
                        if (PLCTelnet.connected == false)
                        {
                            continue;
                        }
                        PLCTelnet.SendDataToHost(PLCQueryCmdPara);//query data from plc dm700 to dm999
                        //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx7, PLCQueryRx7.Length);
                        tmpstr100 = PLCTelnet.GetDataFromHost(ref tmpRx2, tmpRx2.Length);
                        //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                        if (tmpstr100.StartsWith("d00000ffff") && (tmpstr100.Length == 1622))
                        {
                            Array.Copy(tmpRx2, PLCQueryRxPara, PLCQueryRxPara.Length);
                        }
                        else
                        {
                            tmpstr100 = "No Data";
                        }

                        while ((tmpstr100 == "No Data") && PLCTelnet.connected)
                        {
                            Thread.Sleep(waitdelay);
                            tmpstr100 = PLCTelnet.GetDataFromHost(ref tmpRx2, tmpRx2.Length);
                            //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                            if ((tmpstr100.StartsWith("d00000ffff") && (tmpstr100.Length == 1622)))
                            {
                                Array.Copy(tmpRx2, PLCQueryRxPara, PLCQueryRxPara.Length);
                            }
                            else
                            {
                                tmpstr100 = "No Data";
                            }

                            timeoutcounter++;
                            if (timeoutcounter == 10)
                            {
                                //assume connection broken
                                PLCTelnet.Close();
                                break;
                            }
                        }



                        #endregion


                        //Update 25/7/2015
                        #region   READ  PLC1 Memory 700 to 999

                        //timeoutcounter = 0;
                        //if (PLCTelnet.connected == false) continue;
                        //PLCTelnet.SendDataToHost(PLCQueryCmd7);//query data from plc dm700 to dm999
                        ////tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx7, PLCQueryRx7.Length);
                        //tmpstr100 = PLCTelnet.GetDataFromHost(ref tmpRx1, tmpRx1.Length);
                        ////tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                        //if (tmpstr100.StartsWith("d00000ffff") && (tmpstr100.Length == 1222))
                        //{
                        //    Array.Copy(tmpRx1, PLCQueryRx7, PLCQueryRx7.Length);
                        //}
                        //else
                        //    tmpstr100 = "No Data";
                        //log.Info(tmpstr100);
                        //while ((tmpstr100 == "No Data") && PLCTelnet.connected)
                        //{
                        //    Thread.Sleep(waitdelay);
                        //    tmpstr100 = PLCTelnet.GetDataFromHost(ref tmpRx1, tmpRx1.Length);
                        //    //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                        //    if ((tmpstr100.StartsWith("d00000ffff") && (tmpstr100.Length == 1222)))
                        //    {
                        //        Array.Copy(tmpRx1, PLCQueryRx7, PLCQueryRx7.Length);
                        //    }
                        //    else
                        //        tmpstr100 = "No Data";
                        //    log.Info(tmpstr100);
                        //    timeoutcounter++;
                        //    if (timeoutcounter == 10)
                        //    {
                        //        //assume connection broken
                        //        PLCTelnet.Close();
                        //        break;
                        //    }
                        //}
                        #endregion


                        timeoutcounter = 0;
                        if (PLCTelnet.connected == false)
                        {
                            continue;
                        }
                        PLCTelnet.SendDataToHost(PLCWriteCommand);
                        tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCWriteCommandRX, PLCWriteCommandRX.Length);//write to dm 200 to dm 599
                        //  log.Info("PLC 1 Write " + tmpstr100);
                        while ((tmpstr100 == "No Data") && PLCTelnet.connected)
                        {
                            Thread.Sleep(waitdelay);
                            tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCWriteCommandRX, PLCWriteCommandRX.Length);
                            //  log.Info("PLC 1 Write " + tmpstr100);
                            timeoutcounter++;
                            if (timeoutcounter == 10)
                            {
                                //assume connection broken
                                PLCTelnet.Close();
                                break;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.Info("PLC01Polling Thread Error " + ex.ToString());
                }
            }//while ! terminated loop
        }
Example #5
0
        public void RunStation05Sealer3(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            while (!bTerminate)
            {
                Thread.Sleep(100);
                try
                {
                    bool Sealerflag3 = false;

                    if (PLCTelnet2 != null)
                    {
                        if (PLCTelnet2.connected)
                        {
                            #region  sealer program For Station5



                            #region //Sealer3
                            byte[] tmparray4 = new byte[10];
                            //DM5090
                            Array.Copy(PLCQueryRx6, 191, tmparray4, 0, 10);
                            //convert array to string
                            Station5ForSealer3Scanboxid = System.Text.Encoding.Default.GetString(tmparray4);
                            if (Station5ForSealer3Scanboxid != "\0\0\0\0\0\0\0\0\0\0")
                            {
                                ScanboxidSt5S3 = Station5ForSealer3Scanboxid;
                                Sealer3Log.Info("Finishing Label for Station 5 Sealer3 " + Station5ForSealer3Scanboxid);
                                networkmain.stn5log = Station5ForSealer3Scanboxid + " slr.3 Label recieved";
                                #region Desiccant Timmer
                                Thread.Sleep(10);
                                if ((PLCQueryRx6[PLCQueryRx_DM5111 + 16] == 0X07) && (PLCWriteCommand6[PLCWriteCommand_DM5405 + 4]) == 0x00) //D5119
                                {
                                    Sealer3Log.Info("Finishing Label for Station 5 Sealer3 PLC Send HIC/Desiccant stop Signal " + Station5ForSealer3Scanboxid);
                                    networkmain.stn5log = Station5ForSealer3Scanboxid + " Slr.3 stop Signal";
                                    if (Sealerflag3 == false)
                                    {
                                        try
                                        {
                                            Sealerflag3 = true;
                                            TimeSpan span = DateTime.Now.Subtract(DesiccantTimingMap[Station5ForSealer3Scanboxid]);
                                            double   secs = span.TotalSeconds;
                                            Sealer3Log.Info("PC delete HIC/Desiccant Finishing Label for Station 5 Sealer3 " + Station5ForSealer3Scanboxid);
                                            networkmain.stn5log = Station5ForSealer3Scanboxid + " Slr.3 PC delete HIC/Desiccant label";
                                            // if (secs > 175) //NEED TO OPEN WHEN REAL TIME PRODUCTION
                                            if (secs > 300)
                                            {
                                                //Desiccant Expired. Reject the Part.
                                                //D5414=449
                                                MyEventQ.AddQ("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer3Scanboxid);
                                                EvtLog.Info("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer3Scanboxid);
                                                Statusst52 = "Fail";
                                                byte[] tmp7 = new byte[2];
                                                tmp7 = Encoding.ASCII.GetBytes("RJ");
                                                Array.Copy(tmp7, 0, PLCWriteCommand6, 449, 2);
                                                try
                                                {
                                                    while ((!networkmain.UpdateRJLabelst5S3(Station5ForSealer3Scanboxid, "RJ", "502") && !bTerminate))
                                                    {
                                                        Thread.Sleep(100);
                                                    }
                                                    Sealer3Log.Info(" HIC/Desiccant Timeout Finishing Label (RJ) for Station 5 Sealer3  " + Station5ForSealer3Scanboxid);
                                                    networkmain.stn5log     = Station5ForSealer3Scanboxid + " slr.3 HIC/Desiccant Timeout";
                                                    networkmain.OperatorLog = "Stn.5 Slr.3 HIC/Desiccant Timeout " + Station5ForSealer3Scanboxid;
                                                }
                                                catch (Exception ex)
                                                {
                                                    Sealer3Log.Error("station 5 Sealer3 HIC/Desiccant Fail" + ex);
                                                    networkmain.stn5log     = "HIC/Desiccant Fail Slr.3";
                                                    networkmain.OperatorLog = "Stn.5 Slr.3 HIC/Desiccant Fail";
                                                    byte[] tmp71 = new byte[2];
                                                    tmp71 = Encoding.ASCII.GetBytes("RJ");
                                                    Array.Copy(tmp71, 0, PLCWriteCommand6, 449, 2);
                                                    Statusst52 = "Fail";

                                                    MyEventQ.AddQ("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer3Scanboxid);
                                                    EvtLog.Info("9;Desiccant/HICTimeout;LotNumber;" + Station5ForSealer3Scanboxid);
                                                }
                                            }
                                            else
                                            {
                                                if (CheckeRJStatusForSealer3(Station5ForSealer3Scanboxid) == true)
                                                {
                                                    Sealer3Log.Info("HIC/Desiccant Pass Finishing Label for Station 5 Sealer3 " + Station5ForSealer3Scanboxid);
                                                    networkmain.stn5log = Station5ForSealer3Scanboxid + " slr.3 HIC/Desiccant Pass";
                                                    Statusst52          = "Pass";
                                                }
                                                else
                                                {
                                                    while ((!networkmain.UpdateRJLabelst5S3(Station5ForSealer3Scanboxid, "RJ", RJResultst5S3) && !bTerminate))
                                                    {
                                                        Thread.Sleep(100);
                                                    }



                                                    byte[] tmp7 = new byte[2];
                                                    tmp7 = Encoding.ASCII.GetBytes("RJ");
                                                    Array.Copy(tmp7, 0, PLCWriteCommand6, 449, 2);
                                                    Sealer3Log.Info(" Finishing Label for Station 5 Sealer3 (RJ) because of other station " + Station5ForSealer3Scanboxid + " RJ Code," + RJResultst5S3);
                                                    Statusst52 = "Fail";
                                                }
                                            }
                                            DesiccantTimingMap.Remove(Station5ForSealer3Scanboxid);
                                            (PLCWriteCommand6[PLCWriteCommand_DM5405 + 4]) = 0x07;
                                        }
                                        catch (Exception ex)
                                        {
                                            Sealer3Log.Error(ex.ToString());
                                            while ((!networkmain.UpdateRJLabel(Station5ForSealer3Scanboxid, "RJ", "507") && !bTerminate))
                                            {
                                                Thread.Sleep(100);
                                            }
                                            //D5414=449
                                            byte[] tmpS = new byte[2];
                                            tmpS = Encoding.ASCII.GetBytes("RJ");
                                            Array.Copy(tmpS, 0, PLCWriteCommand6, 449, 2);
                                            Sealer3Log.Info(" HIC/Desiccant Fail (RJ)Finishing Label for Sealer3 but send signal to PLC " + Station5ForSealer3Scanboxid + " RJ Code,507");
                                            networkmain.stn5log     = Station5ForSealer3Scanboxid + " slr.3 HIC/Desiccant fail but sent signal to PLC because of st3";
                                            networkmain.OperatorLog = "Stn.5 slr.3 " + Station5ForSealer3Scanboxid + "HIC/Desiccant fail because of st3";
                                            (PLCWriteCommand6[PLCWriteCommand_DM5405 + 4]) = 0x07;
                                            Statusst52 = "Fail";
                                        }
                                    }
                                }
                                #endregion
                                if (PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] == 0x00)
                                {
                                    PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x04; //busy Sealer3
                                    evnt_FindFinishingLabelForSealer3.Set();
                                    Sealer3Log.Info("Finishing Label for Station 5 Sealer3 receipt send already " + Station5ForSealer3Scanboxid);
                                    networkmain.stn5log = Station5ForSealer3Scanboxid + " slr.3 receipt sent already";
                                }
                            }
                            else
                            {
                                PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x00;
                                PLCWriteCommand6[PLCWriteCommand_DM5414]     = 0x00;
                                PLCWriteCommand6[PLCWriteCommand_DM5414b]    = 0x00;
                                Station5ForSealer3Scanboxid = "\0\0\0\0\0\0\0\0\0\0";
                                Sealerflag3    = false;
                                pNumber3       = 0;
                                ScanboxidSt5S3 = "";
                                Statusst52     = "";
                            }
                            if (PLCQueryRx6[PLCQueryRx_DM5111 + 16] == 0X00) //D5119
                            {
                                (PLCWriteCommand6[PLCWriteCommand_DM5405 + 4]) = 0x00;
                            }
                            #endregion

                            #endregion
                            #region Sealercomms

                            if (evnt_FindFinishingLabelForSealer3.WaitOne(0))
                            {
                                try
                                {
                                    if (VS3VacuumSealer != null)
                                    {
                                        //if (!VS3VacuumSealer.IsOpen)
                                        //{
                                        try
                                        {
                                            VS3VacuumSealer.Close();
                                        }
                                        catch (Exception) { }
                                        VS3VacuumSealer = null;
                                        //}
                                    }
                                    if (VS3VacuumSealer == null)
                                    {
                                        XmlDocument doc = new XmlDocument();
                                        doc.Load(@"Config.xml");
                                        XmlNode Sealernode = doc.SelectSingleNode(@"/CONFIG/SEALER3/PORT");
                                        String  comport    = Sealernode.InnerText;
                                        //TODO: ConfigFIle
                                        VS3VacuumSealer = new InnovacVacuumSealer(comport);
                                        VS3VacuumSealer.Open();
                                    }
                                    //For test Only
                                    // VS3VacuumSealer.SelectAndConfirmProgram(240, InnovacVacuumSealer.SealerBar.Right);
                                    //PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x08;
                                    if (networkmain.FindSealerReceipeForSealer3(Station5ForSealer3Scanboxid) == true)
                                    {
                                        short sealerReceipe = networkmain.SealerReceipt3;
                                        Sealer3Log.Info("Sealer3 send receipt" + sealerReceipe);
                                        VS3VacuumSealer.SelectAndConfirmProgram(sealerReceipe, InnovacVacuumSealer.SealerBar.Right);
                                        //bool type want
                                        PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x08;
                                        // Set Status for PLC to Complete 0x08

                                        //// Wait until the sealing is completed/ Error returned/ Timeout happened.
                                        InnovacVacuumSealer.SealingCompleteMessage sealingCompleteMessage3;
                                        try {
                                            VS3VacuumSealer.WaitSealingCompleted(out sealingCompleteMessage3, 120000);
                                            // Sealing Completed successfully
                                            Sealer3Log.Info(sealingCompleteMessage3.ToString());
                                            PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x09;
                                            #region

                                            try
                                            {
                                                //FL 1

                                                pNumber3 = sealingCompleteMessage3.ProgramNumber; //3


                                                if (pNumber3 > 0)

                                                {
                                                    // InnovacVacuumSealer.SealerBar SBar=sealingCompleteMessage.SelectedSealerBar;
                                                    // InnovacVacuumSealer.MessageCode Com   =sealingCompleteMessage.Command;

                                                    short  vacuumPV    = sealingCompleteMessage3.VacuumPV;                //ActualVacuumReading 4
                                                    short  VacuumSP    = sealingCompleteMessage3.VacuumSP;                //RecipeVacuumReading 5
                                                    short  SCurrentPV  = sealingCompleteMessage3.SealerCurrentPV;         //ActualCurrentReading 6
                                                    short  SCurrentSP  = sealingCompleteMessage3.SealerCurrentSP;         //RecipeCurrentReading 7
                                                    float  sealingTime = sealingCompleteMessage3.SealingTime;             //8
                                                    string Sfunction   = sealingCompleteMessage3.UsedFunction.ToString(); //9

                                                    string abc = Sealer3IDshow.Trim();
                                                    Sealer3IDshow = abc;

                                                    if (Sfunction == "VT")
                                                    {
                                                        Sfunction = "VT";
                                                    }
                                                    if (Sfunction == "VS")
                                                    {
                                                        Sfunction = "VS";
                                                    }
                                                    if (Sfunction == "VT,VS")
                                                    {
                                                        Sfunction = "VTVS";
                                                    }


                                                    networkmain.Client_SendEventMessageForSealer3("503", Station5ForSealer3Scanboxid, Sealer3IDshow, sealingCompleteMessage3.ProgramNumber, sealingCompleteMessage3.VacuumPV, sealingCompleteMessage3.VacuumSP, sealingCompleteMessage3.SealerCurrentPV, sealingCompleteMessage3.SealerCurrentSP, sealingCompleteMessage3.SealingTime, Sfunction);

                                                    Sealer3Log.Info("Sealer3 send SealerInfo to Middleware " + Station5ForSealer3Scanboxid + "," + Sealer3IDshow + "," + sealingCompleteMessage3.ProgramNumber + "," + sealingCompleteMessage3.VacuumPV + "," + sealingCompleteMessage3.VacuumSP + "," + sealingCompleteMessage3.SealerCurrentPV + "," + sealingCompleteMessage3.SealerCurrentSP + "," + sealingCompleteMessage3.SealingTime + "," + Sfunction);
                                                }
                                            }

                                            catch
                                            {}

                                            #endregion
                                        } catch (TimeoutException ex) {
                                            // Timeout Happened
                                            Sealer3Log.Error(ex.ToString());
                                            string abc = Sealer3IDshow.Trim();
                                            MyEventQ.AddQ("8;SealerCommunicationBreak;SealerID;" + abc);
                                            EvtLog.Info("8;SealerCommunicationBreak;SealerID;" + abc);
                                        } catch (InnovacVacuumSealer.SealingErrorException ex) {
                                            // Sealer return Error
                                            if (ex.ErrorCode == 2 || ex.ErrorCode == 3 || ex.ErrorCode == 7)
                                            {
                                                PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0xFF;
                                            }
                                            else
                                            {
                                                PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x09;
                                            }
                                            if (!Sealer3ErrAtv)
                                            {
                                                Sealer3ErrorCode = "E" + (5660 + ex.ErrorCode).ToString();
                                                Sealer3EventMesg = ex.ErrorMessage;
                                                Sealer3ErrAtv    = true;
                                                ExceptionMesgSend3((5660 + ex.ErrorCode).ToString(), Sealer3IDshow.Trim(), ex.ErrorMessage, ex.ToString());
                                                Sealer3ErrResetTimer.Interval = TimeSpan.FromSeconds(10);
                                                Sealer3ErrResetTimer.Tick    += Sealer3ErrResetTimer_Tick;
                                                Sealer3ErrResetTimer.Start(); //Start the bloody timer
                                            }
                                            else
                                            {
                                                //Reset the timer
                                                Sealer3ErrResetTimer.Stop();
                                                Sealer3ErrResetTimer.Start();
                                            }
                                        }
                                    }
                                    //finishing label not match
                                    else
                                    {
                                        Sealer3Log.Info("Sealer3 Finishing Label don't have in System" + "," + Station5ForSealer3Scanboxid);
                                        PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x0F;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Sealer3Log.Error(ex.ToString());
                                    // Set status for PLC to Error 0x0F
                                    PLCWriteCommand6[PLCWriteCommand_DM5310 + 4] = 0x0F;
                                    Sealer3Log.Info("Sealer3 Finishing Label don't have in System" + "," + Station5ForSealer3Scanboxid);
                                }
                                evnt_FindFinishingLabelForSealer3.Reset();
                            }
                            #endregion
                        }
                    }
                    //  break;
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }
        }
        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
        }
Example #7
0
        //public Logger Log3 = LogManager.GetLogger("Station04Scanner");
        public void Station04Scanner(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            #region  Station 4 Hand Scan and Data send to PLC
            //Log3.Info("Thread Start");
            ScanboxidSt4barcode = "\0\0\0\0\0\0\0\0\0\0";
            while (!bTerminate)
            {
                Thread.Sleep(100);

                //  Log3.Info("Thread Loop Start");
                //  Log3.Info("Waiting PLC to send 'Read' Signal");
                if ((ScanboxidSt4barcode == "\0\0\0\0\0\0\0\0\0\0") && PLCQueryRx[PLCQueryRx_DM177] == 0x00)
                {
                    int    cnt     = 0;
                    string barcode = null;
                    try
                    {
                        Station04ScannerConnect(networkmain);
                        while ((cnt < 100) || (barcode == null) || barcode == "\r" || barcode == "")
                        {
                            try
                            {
                                OP3CognexScanner.ReadTimeout = 100;
                                barcode = OP3CognexScanner.ReadLine();
                                // if barcode avaliable break
                                Thread.Sleep(10);
                                //if(barcode == "\r")
                                //{
                                //    continue;

                                //}
                                if (barcode != null && barcode != "\r" && barcode != "")
                                {
                                    //PLCWriteCommand[PLCWriteCommand_DM399] = 0x02;
                                    // Log3.Info("Station04Scanner Read: " + barcode);
                                    ScanboxidSt4barcode = barcode.Trim();
                                    break;
                                }
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                            cnt++;
                        }
                        if (cnt > 100)
                        {
                            throw new TimeoutException();
                        }
                    }
                    catch (TimeoutException ex)
                    {
                        //Log3.Error("Timeout EX");
                        barcode = null;
                        continue;
                    }
                    catch (Exception ex)
                    {
                        // Log3.Error("EX");
                        barcode = null;
                        continue;
                    }
                }
                else
                {
                    continue;
                }
                while (!bTerminate)
                {
                    Thread.Sleep(100);
                    //Log3.Info("Trying to write barcode into PLC.");
                    // Write barcode into PLC
                    if ((ScanboxidSt4barcode != "\0\0\0\0\0\0\0\0\0\0") && PLCQueryRx[PLCQueryRx_DM177] == 0x00 && ScanboxidSt4barcode != null && ScanboxidSt4barcode != "")
                    {
                        string tmpstr;
                        byte[] tmpbyte;
                        tmpstr  = ScanboxidSt4barcode;
                        tmpbyte = new byte[tmpstr.Length];
                        tmpbyte = Encoding.ASCII.GetBytes(tmpstr);
                        Array.Copy(tmpbyte, 0, PLCWriteCommand, XOFFSETForst4handscanbarcode, tmpstr.Length); //335
                                                                                                              // PLCWriteCommand[PLCWriteCommand_DM399] = 0x08;
                        // Log3.Info("Write barcode into PLC successful");
                        break;
                    }
                    else
                    {
                        continue;
                        // break;
                    }
                }// second loop

                while (!bTerminate)
                {
                    Thread.Sleep(100);
                    //Log3.Info("Waiting PLC to send 'Clear barcode' signal.");
                    if (PLCQueryRx[PLCQueryRx_DM177] == 0x8)
                    { //177
                        ScanboxidSt4barcode = "\0\0\0\0\0\0\0\0\0\0";
                        CheckstringClearForstation4barcodeData(XOFFSETForst4handscanbarcode, ScanboxidSt4barcode);
                        break;
                    }
                    else
                    {
                        continue;
                        // break;
                    }
                } //third
            }     //while Big loop end
            #endregion
            //Log3.Info("Thread Exit");
        }
 public SendMsgDialog(MainWindow mainWindow)
 {
     InitializeComponent();
     this.DataContext = mainWindow.DataContext;
     this.network     = (MainNetworkClass)this.DataContext;
 }
        public void RunMiddlewareScan(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;
            int counter = 0;

            while (!bTerminate)
            {
                Thread.Sleep(10);
                try
                {
                    counter++;
                    connected = networkmain.connected;
                    //if not connected to middleware do a reconnection
                    if (networkmain.connected == false)
                    {
                        System.Net.IPHostEntry oEntry  = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
                        System.Net.IPAddress   address = oEntry.AddressList[0];
                        XmlDocument            doc     = new XmlDocument();
                        doc.Load(@"Config.xml");
                        XmlNode node = doc.SelectSingleNode(@"/CONFIG/MIDDLEWARE/ADD");
                        address        = System.Net.IPAddress.Parse(node.InnerText);
                        node           = doc.SelectSingleNode(@"/CONFIG/MIDDLEWARE/PORT");
                        NetworkAddress = "Trying to connect to " + address.ToString() + " Port : " + node.InnerText;
                        IPAddress ipAddress = address;//Dns.Resolve("localhost").AddressList[2];

                        if (networkmain.ConnectToHost(ipAddress) == false)
                        {
                            NetworkAddress = "Connected to MICServer " + address.ToString() + " Port : " + node.InnerText + " Fail" + "  V9.5.13.38Z_DB";
                            Thread.Sleep(100);// try to connect to server
                            UserName1 = "";
                            UserName2 = "";
                            StationStarStopLog.Info("Middleware Connection break " + ipAddress);
                            networkmain.linePack.Info("Middleware Connection break " + ipAddress);
                            MyEventQ.AddQ("1;MiddlewareCommunicationBreak"); //Push message to stack

                            // EvtLog.Info("1;MiddlewareCommunicationBreak");

                            continue;
                        }
                        NetworkAddress = "Connected to MICServer " + address.ToString() + " Port : " + node.InnerText + "  V9.5.13.38Z_DB";
                        MyEventQ.AddQ("4;InnogrityServerApplicationStarted");

                        BackgroundWorker bw = new BackgroundWorker();
                        bw.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs args)
                        {
                            ClearAllJam();
                        });
                        bw.RunWorkerAsync();

                        // EvtLog.Info("4;InnogrityServerApplicationStarted");
                    }
                    if (networkmain.connected)// if connected, do check
                    {
                        if (counter > 100)
                        {
                            networkmain.CheckHost();//have to use proper xml to test check or else server may crash
                            counter = 0;
                        }
                        try
                        {
                            networkmain.GetDataFromHost();
                        }
                        catch (Exception ex) { }
                    }
                    #region Station2
                    //Station 2 check if there is any outgoing messages
                    //Finishing label
                    if (evt_FinishLabelRequest.WaitOne(0))
                    {
                        string Boxnumber = "myboxnumberbarcode";               //sample box number/ finishing label request
                                                                               //save finishing label...to label tracking, label tracking to be updated..later when server reply
                                                                               //send finishing label request
                        if (networkmain.Client_SendScanBox(Scanboxid) == true) //previously wait for reply .. now reply is waited seperately
                                                                               //update label tracking data
                        {
                            #region OEEStep2
                            //OEE MODULE - GET ID and Bind ID number With FL
                            int OEEid = 0;
                            try
                            {
                                OEEid = rq.ReqLastID();
                                rq.UpdFLbyID(Scanboxid, OEEid);
                            }
                            catch (Exception ex)
                            {
                                IGTOEELog.Info("OEEStep2" + ex.ToString());
                            }

                            #endregion
                            SendFL = Scanboxid;
                            Boolean bHotlot = false;
                            string  sHotlot = "";
                            if (PLCQueryRx[11 + 109 * 2] == 0x08) //DM1019  --Hotlot
                            {
                                bHotlot             = true;
                                sHotlot             = "1";
                                networkmain.stn2log = "HotLot :" + Scanboxid;
                                networkmain.linePack.Info("HotLot :" + Scanboxid);
                            }
                            else
                            {
                                sHotlot = "0";
                            }
                            //while ((!networkmain.updatefltrackinginfomation(Scanboxid, OEEid.ToString(), sHotlot) && !bTerminate))
                            //{
                            //    Thread.Sleep(100);
                            //}
                            while ((!networkmain.updatefltrackinginfomationb(Scanboxid, OEEid.ToString(), bHotlot) && !bTerminate))
                            {
                                Thread.Sleep(100);
                            }
                            evt_FinishLabelRequest.Reset();//reset PLC request event
                            StationStarStopLog.Info("Running Start " + Scanboxid);
                            networkmain.linePack.Info("Already Sending Boxid to Middleware  " + Scanboxid);

                            PLCWriteCommand[21] = 0x08;// send request complete DM200
                        }
                        else
                        {
                            //will not write into tracking list.
                            //There is a send fail!
                            evt_FinishLabelRequest.Reset();//reset PLC request event
                            //networkmain.linePack.Info("Reject FL at buffer because of same FL coming two times  " + Scanboxid);
                            networkmain.OperatorLog = "Same FL comging two times " + Scanboxid;
                            networkmain.Client_SendEventMessage("84", "ST2 BUFFER FL DUPLICATE REJECT", "BOX_ID", Scanboxid);
                            AllRJEvent.Info("84" + ";" + "ST2 BUFFER FL DUPPLICATE REJECT" + ";" + "BOX_ID" + ";" + Scanboxid);
                            rq.INS_Func(DateTime.Now);
                            int BufferDup = rq.ReqLastID();
                            rq.UpdST4RJ(BufferDup.ToString(), 4, "294");
                            PLCWriteCommand[21] = 0x0F;// send request complete DM200
                        }
                    }
                    #endregion


                    #region MiddlewareToIGT   LoginCheckQC

                    if (networkmain.MiddlewareToIGTEvt_LoginCheckQC1.WaitOne(0))
                    {
                        try
                        {
                            if (networkmain.CheckServerConnectionWithMiddlwareForQC1(UserName1) == false)
                            {
                                StationStarStopLog.Info("Connection String not Match With Middleware,OP1 Logout " + UserName1);

                                networkmain.linePack.Info("Connection String not Match With Middleware,OP1 Logout " + UserName1);

                                networkmain.Client_SendQCStationLogout("1", networkmain.QC1LoginConnectionCheck1);
                                UserName1 = "";
                                networkmain.QC1LogOutSendReady = true;
                                PLCWriteCommand6[PLCWriteCmdOP01LoginLogout] = 0x00;
                            }

                            networkmain.MiddlewareToIGTEvt_LoginCheckQC1.Reset();
                        }
                        catch
                        {
                        }
                    }



                    if (networkmain.MiddlewareToIGTEvt_LoginCheckQC2.WaitOne(0))
                    {
                        try{
                            if (networkmain.CheckServerConnectionWithMiddlwareForQC2(UserName2) == false)
                            {
                                StationStarStopLog.Info("Connection String not Match With Middleware,OP2 Logout " + UserName2);
                                networkmain.linePack.Info("Connection String not Match With Middleware,OP2 Logout " + UserName2);
                                networkmain.Client_SendQCStationLogout("2", networkmain.QC2LoginConnectionCheck);
                                networkmain.QC2LogOutSendReady = true;
                                UserName2 = "";
                                PLCWriteCommand6[PLCWriteCmdOP02LoginLogout] = 0x00;
                            }

                            networkmain.MiddlewareToIGTEvt_LoginCheckQC2.Reset();
                        }
                        catch
                        {
                        }
                    }

                    #endregion
                    //Station 06 Login/Logout server exchange
                    #region Station06OPLoginLogout
                    //check if there is any incoming messages for login

                    if (networkmain.MiddlewareToIGTEvt_Login.WaitOne(0))
                    {
                        //process incoming messages
                        //Display on Station #
                        //Get username and StationID
                        //XmlNodeList list = networkmain.QCLogin.SelectNodes("MESSAGE/BODY/STATION_ID");
                        XmlNode list      = networkmain.QCLogin.SelectSingleNode("MESSAGE/BODY/STATION_ID");
                        string  StationID = list.InnerText;
                        //string StationID = list.Item(0).ToString();
                        XmlNode list1    = networkmain.QCLogin.SelectSingleNode("MESSAGE/BODY/USER_NAME");
                        String  UserName = list1.InnerText;
                        if (StationID == "1")
                        {
                            UserName1  = UserName;
                            StationID1 = StationID;

                            //reset PLC request event
                            PLCWriteCommand6[PLCWriteCmdOP01LoginLogout] = 0x08;// send request complete DM5200
                            networkmain.MiddlewareToIGTEvt_Login.Reset();
                        }
                        else if (StationID == "2")
                        {
                            UserName2           = UserName;
                            StationID2          = StationID;
                            networkmain.QC2Data = UserName;
                            //reset PLC request event
                            PLCWriteCommand6[PLCWriteCmdOP02LoginLogout] = 0x08;// send request complete DM5201
                            networkmain.MiddlewareToIGTEvt_Login.Reset();
                        }
                    }
                    switch (Operator01LoginState)
                    {
                    case WaitForOperatorLogin:
                        if ((PLCQueryRx6[PLCQueryRx_DM5100] == 0x08) &&
                            (PLCWriteCommand6[PLCWriteCommand_DM5200] == 0x08))    //request finishing label
                        {
                            //log6.Info("Operator 1 Login request "+StationID1+","+UserName1);
                            networkmain.linePack.Info("Operator 1 Login request " + StationID1 + "," + UserName1);
                            networkmain.Client_SendQCStationLogin(StationID1, UserName1);
                            networkmain.QC1LogOutSendReady = false;
                            networkmain.QC1Data            = UserName1;
                            Operator01LoginState           = WaitForOperatorLogout;
                        }


                        if ((PLCQueryRx6[PLCQueryRx_DM5100] == 0x0F) &&
                            (PLCWriteCommand6[PLCWriteCommand_DM5200] == 0x08))    //timeout
                        {
                            networkmain.QC1Data = UserName1;
                            // log6.Info("Operator 1 login 3 mins timeout "+StationID1+","+UserName1);
                            networkmain.linePack.Info("Operator 1 login 3 mins timeout " + StationID1 + "," + UserName1);
                            networkmain.Client_SendQCStationLogout(StationID1, UserName1);
                            networkmain.QC1LogOutSendReady = false;
                            networkmain.QC1Data            = "";
                            UserName1 = "";
                            POcount1  = 0;
                            PLCWriteCommand6[PLCWriteCommand_DM5200] = 0x00;
                            Operator01LoginState = WaitForOperatorLogin;
                        }
                        break;

                    case WaitForOperatorLogout:
                        if ((PLCQueryRx6[PLCQueryRx_DM5100] == 0xF) && (PLCWriteCommand6[PLCWriteCommand_DM5200] == 0x08))
                        {
                            // send middleware operator1 logout
                            PLCWriteCommand6[PLCWriteCommand_DM5200] = 0x00;
                            networkmain.Client_SendQCStationLogout(StationID1, UserName1);

                            networkmain.QC1LogOutSendReady = true;
                            POcount1 = 0;

                            // log6.Info("Operator 1 Logout request "+StationID1+","+UserName1);
                            networkmain.linePack.Info("Operator 1 Logout request " + StationID1 + "," + UserName1);

                            networkmain.QC1Data  = "";
                            UserName1            = "";
                            Operator01LoginState = WaitForOperatorLogin;
                        }
                        break;
                    }
                    switch (Operator02LoginState)
                    {
                    case WaitForOperatorLogin:
                        if ((PLCQueryRx6[PLCQueryRx_DM5100 + 2] == 0x08) &&
                            (PLCWriteCommand6[PLCWriteCommand_DM5200 + 2] == 0x08))    //request finishing label
                        {
                            // log6_1.Info("Operator 2 Login request "+StationID2+","+UserName2);
                            networkmain.linePack.Info("Operator 2 Login request " + StationID2 + "," + UserName2);
                            networkmain.Client_SendQCStationLogin(StationID2, UserName2);
                            networkmain.QC2LogOutSendReady = false;
                            networkmain.QC2Data            = UserName2;
                            Operator02LoginState           = WaitForOperatorLogout;
                        }

                        if ((PLCQueryRx6[PLCQueryRx_DM5100 + 2] == 0x0F) &&
                            (PLCWriteCommand6[PLCWriteCommand_DM5200 + 2] == 0x08))  //timeout
                        {
                            networkmain.QC2Data = UserName2;
                            // log6_1.Info("Operator 2 login 3 mins timeout "+StationID2+","+UserName2);
                            networkmain.linePack.Info("Operator 2 login 3 mins timeout " + StationID2 + "," + UserName2);

                            networkmain.Client_SendQCStationLogout(StationID2, UserName2);
                            networkmain.QC2LogOutSendReady = false;
                            networkmain.QC2Data            = "";
                            UserName2 = "";
                            POcount2  = 0;
                            PLCWriteCommand6[PLCWriteCommand_DM5200 + 2] = 0x00;
                            Operator02LoginState = WaitForOperatorLogin;
                        }

                        break;

                    case WaitForOperatorLogout:
                        if ((PLCQueryRx6[PLCQueryRx_DM5100 + 2] == 0xF) && (PLCWriteCommand6[PLCWriteCommand_DM5200 + 2] == 0x08))
                        {
                            // send middleware operator1 logout
                            PLCWriteCommand6[PLCWriteCommand_DM5200 + 2] = 0x00;
                            networkmain.Client_SendQCStationLogout(StationID2, UserName2);
                            networkmain.QC2LogOutSendReady = true;
                            POcount2 = 0;
                            // log6_1.Info("Operator 2 Logout request "+StationID2+","+UserName2);

                            networkmain.linePack.Info("Operator 2 Logout request " + StationID2 + "," + UserName2);
                            UserName2           = "";
                            networkmain.QC2Data = "";

                            // UserName2="";
                            Operator02LoginState = WaitForOperatorLogin;
                        }
                        break;
                    }
                    #endregion
                    if (evt_FG01_FG02Move.WaitOne(0))
                    {
                        networkmain.Client_sendFG01_FG02_MOVE1(st8FINISH, "FG01_FG02_MOVE");
                        networkmain.Client_sendFG01_FG02_MOVE(st8FINISH, "FG01_FG02_MOVE");

                        evt_FG01_FG02Move.Reset();
                        evt_FG01_FG02Move_Rx.Set();
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }//
        }
Example #10
0
        public void RunStation06Operator01Scan(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            Operator01State = 0;
            int    retrycounter = 0;
            string barcode;
            bool   ETI1Down = false;

            byte[] tmparray = new byte[10];
            while (!bTerminate)
            {
                Thread.Sleep(100);
                int   tmp0          = ((6220 - 6000) * 2) + 11;                                //EVENT ID Calculation
                Int16 QC1ETIMonitor = (Int16)(BitConverter.ToInt16(PLCQueryRxParaPlc2, tmp0)); //DM6220

                if (QC1ETIMonitor == 6056 && ETI1Down == false)
                {
                    MyEventQ.AddQ("656;QC1 ETI BUTTON TRIGGER;QcstationNumber;1;OperatorName;" + UserName1);
                    ETI1Down = true;
                }
                else if (QC1ETIMonitor == 0)
                {
                    ETI1Down = false;
                }
                try
                {
                    // JustLogIn(0); //0 is for operator 1, 2 is for operator 2.
                    if ((PLCQueryRx6[PLCQueryRx_DM5100 + 62] == 0x01))
                    {
                        SafetyStatus = AreaStatus.Block;
                    }
                    else if ((PLCQueryRx6[PLCQueryRx_DM5100 + 98] == 99))
                    {
                        SafetyStatus = AreaStatus.EarlyTake;
                        if (!EarlierPickupFlag)
                        {
                            networkmain.Client_SendEventMessage("654", "Station6QC1EarlyPickupDetected", "LotNumber", Station6ForOP1Scanboxid);
                            AllRJEvent.Info("654, Station6QC1EarlyPickupDetected,LotNumber," + Station6ForOP1Scanboxid);
                            EarlierPickupFlag = true;
                        }
                    }
                    else if ((PLCQueryRx6[PLCQueryRx_DM5100 + 98] == 0x01))
                    {
                        SafetyStatus = AreaStatus.MemNoClear;
                    }
                    else
                    {
                        SafetyStatus = AreaStatus.Null;
                    }
                    switch (Operator01State)
                    {
                    case WAITFORFINISHINGLABEL:    //wait for finishing label to be in ie. transition from "/0/0/0/0 .." to a
                        CheckStringClearFor6_OP1(OperatorA_PCtoPLCFinishingLabelOFFSET, Station6ForOP1Scanboxid);

                        //break;
                        if ((PLCQueryRx6[PLCQueryRx_DM5100] != 0x08) || (PLCWriteCommand6[PLCWriteCommand_DM5200] != 0x08))
                        {
                            break;
                        }
                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();
                        RJButton = "";
                        //relfect finishing label data status to station 6 OP 1
                        if (Station6ForOP1Scanboxid != "\0\0\0\0\0\0\0\0\0\0")
                        {
                            // log6.Info("Operator 1 getting label from station 5 : " + Station6ForOP1Scanboxid);
                            networkmain.linePack.Info("Operator 1 getting label from station 5 : " + Station6ForOP1Scanboxid);
                            //switch state
                            if (CheckStringUpdateFor6_OP1(OperatorA_PCtoPLCFinishingLabelOFFSET, Station6ForOP1Scanboxid))
                            {
                                Operator01State = DISPLAYVALIDLABELINFO;
                            }
                            else
                            {
                                byte[] tmpbyte = new byte[2];
                                tmpbyte = Encoding.ASCII.GetBytes("ER");
                                Array.Copy(tmpbyte, 0, PLCWriteCommand6, 95, 2);    //copy ER to PLC DM5237
                                Operator01State = INVALIDLABELHANDLE;
                            }
                        }
                        break;

                    case DISPLAYVALIDLABELINFO:                   //display valid label informations.,... this state may not be necessary...
                        ScannerStatus = BarcodeStatus.NotScanned; //reset scan information
                        //may not be necessary
                        //evnt_FindFinishingLabelForOperator.Set();//display finishing label information on user screen
                        st6finish1 = Station6ForOP1Scanboxid;    //display purposes only
                        networkmain.FindFinishingLabelForOperator(Station6ForOP1Scanboxid);
                        st1POcount++;
                        POcount1++;
                        //display finishing label on user screen
                        PLCWriteCommand6[PLCWriteCommand_DM5204] = 0x02; //state 0x02 ready to scan
                        retrycounter    = 0;                             //reset retry counter
                        Operator01State = VALIDLABELRUNSCANNER;
                        break;

                    case VALIDLABELRUNSCANNER:    //finishing label is valid, turn on scanner
                        try
                        {
                            Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                            //convert array to string
                            Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                            Station6ForOP1Scanboxid.Trim();

                            if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") && (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x0))
                            {
                                Operator01State = ERHANDLER_STEP02;
                            }

                            Station06OOperator01ScannerConnect(networkmain);
                            Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                            //convert array to string
                            Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                            Station6ForOP1Scanboxid.Trim();
                            PLCWriteCommand6[PLCWriteCommand_DM5204] = 0x02;
                            if (retrycounter > X)    //exceed retry
                            {
                                Operator01State = SCANNUMBEREXCEEDHANDLE;
                            }
                            //log6.Info("Operator 1 Scanner FL read " + Station6ForOP1Scanboxid);
                            networkmain.linePack.Info("Operator 1 Scanner FL read " + Station6ForOP1Scanboxid);
                            networkmain.stn6log = Station6ForOP1Scanboxid + " OP1 Scanner read";
                            int cnt = 0;
                            barcode = null;
                            while ((cnt < 100) && (barcode == null))
                            {
                                try
                                {
                                    OP1CognexScanner.ReadTimeout = 100;
                                    barcode = OP1CognexScanner.ReadLine();
                                }
                                catch (Exception) { }
                                cnt++;
                            }
                            if (cnt > 100)
                            {
                                throw new TimeoutException();
                            }
                            //check if barcode equal to incoming finihsing label
                            //ADD NEW
                            if (evnt_RejForOperator1.WaitOne(0))
                            {
                                // set ER to PLC
                                // PLC return 0xF PC return 0xF ==> PLC go to 0x0, PC goto 0x0
                                // wait for Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0"
                                // or reset by change state
                                //reject event recieved
                                Operator01State = ERHANDLER_STEP01;
                                byte[] tmpbyte = new byte[2];
                                tmpbyte = Encoding.ASCII.GetBytes("ER");
                                Array.Copy(tmpbyte, 0, PLCWriteCommand6, 95, 2);    //copy ER to PLC DM5237
                                // log6.Info("Station 6 Operator 1 Technician Reject " + Station6ForOP1Scanboxid);

                                networkmain.linePack.Info("Station 6 Operator 1 Technician Reject " + Station6ForOP1Scanboxid);
                                //need to send ack to middleware
                                networkmain.stn6log = Station6ForOP1Scanboxid + " OP1 Technician Reject";

                                // networkmain.Client_sendFG01_FG02_MOVE(Station6ForOP1Scanboxid, "FG01_FG02_MOVE");


                                evnt_RejForOperator1.Reset();
                            }



                            if (barcode != null)
                            {
                                if (barcode.Contains(Station6ForOP1Scanboxid))    //eliminate additional character issues
                                {
                                    //if equal,operator reject or shutting down program, exit and update PLC
                                    PLCWriteCommand6[PLCWriteCommand_DM5204] = 0x08;
                                    ScannerStatus = BarcodeStatus.Equal;
                                    // log6.Info("Operator 1 Scanner FL contain " + Station6ForOP1Scanboxid);
                                    Operator01State = 99;
                                }
                                else
                                {
                                    //if not equal, number of retry is X number? if X number prompt display <--= dont exit..
                                    //go to read barcode again if not equal.
                                    if (PLCWriteCommand6[PLCWriteCommand_DM5204] != 0x08)
                                    {
                                        networkmain.linePack.Info("Operator 1 Scan Retry");
                                        PLCWriteCommand6[PLCWriteCommand_DM5204] = 0x0F;    //why is this removed??!
                                    }
                                    retrycounter++;
                                    ScannerStatus = BarcodeStatus.NotEqual;
                                    barcode       = null;
                                    Status        = "not equal try again";
                                    //  break;
                                    continue;
                                }
                            }
                        }
                        catch (TimeoutException)
                        {
                            if (PLCWriteCommand6[PLCWriteCommand_DM5204] != 0x08)
                            {
                                networkmain.linePack.Info("Operator 1 Scan Timeout");
                                PLCWriteCommand6[PLCWriteCommand_DM5204] = 0x0F;
                            }

                            //not scan
                            // log6.Info("Operator 1 Scanner Timeout set 0 PLCWriteCommand_DM5204 ==0 ---9");
                            networkmain.stn6log     = "OP 1 Timeout";
                            networkmain.OperatorLog = "Stn.6 OP 1 Timeout";
                            Status        = "Timeout";
                            ScannerStatus = BarcodeStatus.Timeout;
                            barcode       = null;
                            evnt_RejForOperator1.Reset();          //
                            evnt_ScannerRetryForOperator1.Reset(); //
                            Operator01State = SCANNERTIMEOUTHANDLE;
                        }
                        catch (Exception ex)
                        {
                            if (PLCWriteCommand6[PLCWriteCommand_DM5204] != 0x08)
                            {
                                networkmain.linePack.Info("Operator 1 Scanner exception " + ex.ToString());
                                PLCWriteCommand6[PLCWriteCommand_DM5204] = 0x0F;
                            }

                            //log6.Info("Operator 1 Scanner exception " + ex.ToString());

                            networkmain.stn6log     = "OP1 exception";
                            networkmain.OperatorLog = "Stn.6 OP1 Scanning Exception Error";
                            //not scan
                            barcode       = null;
                            ScannerStatus = BarcodeStatus.ExceptionError;
                            Status        = "Exception";
                            evnt_RejForOperator1.Reset();          //
                            evnt_ScannerRetryForOperator1.Reset(); //
                            Operator01State = SCANNERTIMEOUTHANDLE;
                        }
                        break;

                    case SCANNERTIMEOUTHANDLE:    //scan time out
                        // await technician reset or plurge from PLC by setting Er or reject on product
                        ScannerStatus = BarcodeStatus.Timeout;

                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();

                        if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") && (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x0))
                        {
                            Operator01State = ERHANDLER_STEP02;
                        }
                        if (evnt_ScannerRetryForOperator1.WaitOne(0))
                        {
                            //change state to VALIDLABELRUNSCANNER, reset counter
                            Operator01State = VALIDLABELRUNSCANNER;
                            retrycounter    = 0;
                            evnt_ScannerRetryForOperator1.Reset();
                        }
                        if (evnt_RejForOperator1.WaitOne(0))
                        {
                            // set ER to PLC
                            // PLC return 0xF PC return 0xF ==> PLC go to 0x0, PC goto 0x0
                            // wait for Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0"
                            // or reset by change state
                            //reject event recieved
                            Operator01State = ERHANDLER_STEP01;
                            byte[] tmpbyte = new byte[2];
                            tmpbyte = Encoding.ASCII.GetBytes("ER");
                            Array.Copy(tmpbyte, 0, PLCWriteCommand6, 95, 2);    //copy ER to PLC DM5237
                            // log6.Info("Station 6 Operator 1 Technician Reject " + Station6ForOP1Scanboxid);

                            networkmain.linePack.Info("Station 6 Operator 1 Technician Reject " + Station6ForOP1Scanboxid);
                            networkmain.stn6log = Station6ForOP1Scanboxid + " OP1 Technician Reject";
                            //need to send ack to middleware
                            ScannerStatus = BarcodeStatus.Rejected;
                            evnt_RejForOperator1.Reset();
                        }
                        break;

                    case ERHANDLER_STEP01:

                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();

                        if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") && (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x0))
                        {
                            Operator01State = ERHANDLER_STEP02;
                        }
                        if (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0xF)
                        {
                            //
                            //scxan not matching 0xf...plc wait for instruction...
                            //5237... na.. er etc etc... if rx er.... clear fl
                            //chk 5202 for 0
                            //send messsage to micron server (TBD)
                            try{
                                string RJCODE = "603";

                                XmlDocument doc = new XmlDocument();
                                doc.Load(@"ConfigEvent.xml");
                                XmlNode node   = doc.SelectSingleNode(@"/EVENT/R" + RJCODE);
                                string  RJName = node.InnerText;

                                try                                                                     //OEE OPERATOR 1 MANUA REJECT
                                {
                                    XmlNode fltrackingroot = networkmain.FLTrackingdoc.DocumentElement; //this house the list of summarized xml details
                                    XmlNode selectednode   = fltrackingroot.SelectSingleNode("descendant::LABEL[ID='" + Station6ForOP1Scanboxid + "']");
                                    if (selectednode != null)
                                    {
                                        string OEEidOP1 = selectednode.SelectSingleNode("OEEid").InnerText;
                                        rq.UpdST6RJ(OEEidOP1, 6, RJCODE);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    IGTOEELog.Info(ex.ToString());
                                }
                                networkmain.Client_SendEventMessage("57", RJName, "BOX_ID", Station6ForOP1Scanboxid);
                                //  log6.Info("QC1 Operator RJ Event Send to Middleware " +"603,"+RJName+","+Station6ForOP1Scanboxid);

                                networkmain.linePack.Info("QC1 Operator RJ Event Send to Middleware " + "603," + RJName + "," + Station6ForOP1Scanboxid);
                                MyEventQ.AddQ("21;Station6SealedMBBRejectedAtStation6;LotNumber;" + Station6ForOP1Scanboxid + ";QcstationNumber;1;OpearatorName;"
                                              + UserName1);

                                AllRJEvent.Info("QC1 Operator RJ Event Send to Middleware " + "603," + RJName + "," + Station6ForOP1Scanboxid);
                            }
                            catch (Exception ex) {
                                networkmain.linePack.Info(ex);
                            }

                            evnt_RejectFinishingLabelForStation6_OP1.Set();

                            st1Rejectcount++;
                            PLCWriteCommand6[PLCWriteCommand_DM5200 + 4] = 0xF;
                            Operator01State = ERHANDLER_STEP02;
                        }
                        break;

                    case ERHANDLER_STEP02:
                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();
                        // log6.Info("Operator 1 getting label from station 5 : " + Station6ForOP1Scanboxid);
                        networkmain.linePack.Info("Operator 1 getting label from station 5 : " + Station6ForOP1Scanboxid);

                        //relfect finishing label data status to station 6 OP 1
                        if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") && (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x0))
                        {
                            //
                            //networkmain.stn6log = Station6ForOP1Scanboxid + " OP1 recieving";
                            //ScannerStatus = BarcodeStatus.Arriving;
                            PLCWriteCommand6[PLCWriteCommand_DM5204]     = 0X0;
                            PLCWriteCommand6[PLCWriteCommand_DM5200 + 4] = 0x0;    //DM202 reject status
                            PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x0;    //DM206 tracking label status
                            Station6ForOP1Scanboxid        = "\0\0\0\0\0\0\0\0\0\0";
                            Station6ForOP1TrackingLabel    = "\0\0\0\0\0\0\0\0";
                            networkmain.operator1BoxNumber = "";
                            SealerNumberQC1 = "";
                            st6finish1      = "";
                            station6track1  = "";
                            Status          = "";
                            CheckStringClearFor6_OP1(OperatorA_PCtoPLCFinishingLabelOFFSET, _Station6ForOP1Scanboxid);
                            Operator01State = WAITFORFINISHINGLABEL;
                        }
                        break;

                    case ERHANDLER_STEP03:
                        break;

                    case SCANNUMBEREXCEEDHANDLE:    //scan exceed 3 x
                        // await technician reset or plurge from PLC by setting Er or reject on product
                        ScannerStatus = BarcodeStatus.AttemptOut;
                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();

                        if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") && (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x0))
                        {
                            Operator01State = ERHANDLER_STEP02;
                        }

                        if (evnt_ScannerRetryForOperator1.WaitOne(0))
                        {
                            //change state to VALIDLABELRUNSCANNER, reset counter
                            Operator01State = VALIDLABELRUNSCANNER;
                            retrycounter    = 0;
                            evnt_ScannerRetryForOperator1.Reset();
                        }
                        if (evnt_RejForOperator1.WaitOne(0))
                        {
                            // set ER to PLC
                            // PLC return 0xF PC return 0xF ==> PLC go to 0x0, PC goto 0x0
                            // wait for Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0"
                            // or reset by change state
                            //reject event recieved
                            Operator01State = ERHANDLER_STEP01;
                            byte[] tmpbyte = new byte[2];
                            tmpbyte = Encoding.ASCII.GetBytes("ER");
                            Array.Copy(tmpbyte, 0, PLCWriteCommand6, 95, 2);    //copy ER to PLC DM5237
                            //need to send ack to middleware
                            evnt_RejForOperator1.Reset();
                        }
                        break;

                    case SCANMATCHWAITTRACKINGLABEL:    //scan matched, waiting for tracking label or wait for reject
                        if (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0xF)
                        {
                            Operator01State = ERHANDLER_STEP01;
                            break;
                        }
                        if (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x9)
                        {
                            Operator01State = SPECLABELPROCESS;
                            break;
                        }
                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();

                        if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") && (PLCQueryRx6[PLCQueryRx_DM5100 + 4] == 0x0))
                        {
                            Operator01State = ERHANDLER_STEP02;
                        }
                        byte[] tmparray1 = new byte[8];
                        //DM5020 TrackingLabel Update
                        Array.Copy(PLCQueryRx6, 51, tmparray1, 0, 8);
                        //convert array to string
                        Station6ForOP1TrackingLabel = System.Text.Encoding.Default.GetString(tmparray1);
                        #region NewCode28042016
                        if ((PLCQueryRx6[PLCQueryRx_DM5100 + 12] == 0x08 && Station6ForOP1TrackingLabel != "\0\0\0\0\0\0\0\0" && PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] != 99))     //added by GY 28/4/2016
                        {
                            byte[] str1 = barcodechangeposition(tmparray1);
                            string st   = System.Text.Encoding.Default.GetString(str1);
                            station6track1 = st.Trim();
                            if (networkmain.CheckTrackingLabel(Station6ForOP1TrackingLabel))
                            {
                                MyEventQ.AddQ("645;Station6QC1TLValidationOK;LotNumber;" + Station6ForOP1Scanboxid + ";LicensePlateBarcode;" + station6track1 +
                                              ";QcstationNumber;1;OperatorName;" + UserName1);
                                networkmain.stn6log = station6track1 + " OP1 TL Validate OK";
                                PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 99;
                                ScannerStatus = BarcodeStatus.Null;
                            }
                            else
                            {
                                MyEventQ.AddQ("646;Station6QC1TLValidationNG;LotNumber;" + Station6ForOP1Scanboxid + ";LicensePlateBarcode;" + station6track1 +
                                              ";QcstationNumber;1;OperatorName;" + UserName1);
                                networkmain.stn6log = station6track1 + " OP1 TL Validate NG";
                                PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x0F;
                                ScannerStatus = BarcodeStatus.Duplicated;
                                continue;
                            }
                        }
                        else if (PLCQueryRx6[PLCQueryRx_DM5100 + 12] == 0x00)
                        {
                            PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0;
                        }

                        if ((PLCQueryRx6[PLCQueryRx_DM5100 + 12] == 99 && Station6ForOP1TrackingLabel != "\0\0\0\0\0\0\0\0"))     //added by GY 28/4/2016
                        {
                            int cnt = 0;
                            if (networkmain.CheckTrackingLabel(Station6ForOP1TrackingLabel))
                            {
                                while (!networkmain.UpdateTrackingLabel(Station6ForOP1Scanboxid,
                                                                        Station6ForOP1TrackingLabel) &&
                                       !bTerminate)                             //assume PLC data moved before server reply
                                {
                                    if (cnt > 10)
                                    {
                                        break;
                                    }
                                    Thread.Sleep(10);
                                    cnt++;
                                    //need to handle invalid tracking label
                                }
                                if (cnt > 10)
                                {
                                    break;
                                }
                                MyEventQ.AddQ("647;Station6QC1TLBindOK;LotNumber;" + Station6ForOP1Scanboxid + ";LicensePlateBarcode;" + station6track1 +
                                              ";QcstationNumber;1;OperatorName;" + UserName1);
                                PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x08;    // association completed
                                                                                        //--> how to go back 0x0?? if finishing label is /0/0 i can assume all data cleared
                                networkmain.stn6log = station6track1 + "+" + Station6ForOP1Scanboxid + " OP1 Bind OK";
                                ScannerStatus       = BarcodeStatus.Null;
                                Operator01State     = WAITTRACKINGLABELCLEAR;//create a state to wait for tracking label to clear
                            }
                            else
                            {
                                MyEventQ.AddQ("648;Station6QC1TLBindNG;LotNumber;" + Station6ForOP1Scanboxid + ";LicensePlateBarcode;" + station6track1 +
                                              ";QcstationNumber;1;OperatorName;" + UserName1);
                                networkmain.stn6log = station6track1 + "+" + Station6ForOP1Scanboxid + " OP1 Bind NG";
                                PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x0F;
                            }
                        }
                        #endregion
                        #region ObseleteCode
                        //if ((Station6ForOP1TrackingLabel != "\0\0\0\0\0\0\0\0"))//check for valid tracking label
                        //{

                        //    byte[] str1 = barcodechangeposition(tmparray1);
                        //    string st = System.Text.Encoding.Default.GetString(str1);
                        //    station6track1 = st.Trim();
                        //    //  log6.Info("Operator 1 set tracking label " + station6track1);
                        //    networkmain.linePack.Info("Operator 1 set tracking label " + station6track1);

                        //    networkmain.stn6log = station6track1 + " OP1 Set Tracking Lbl";

                        //    if (networkmain.CheckTrackingLabel(Station6ForOP1TrackingLabel) == true)

                        //    {
                        //        int cnt = 0;
                        //        while (!networkmain.UpdateTrackingLabel(Station6ForOP1Scanboxid,
                        //                                            Station6ForOP1TrackingLabel) &&
                        //                                            !bTerminate)//assume PLC data moved before server reply
                        //        {
                        //            if (cnt > 10) break;
                        //            Thread.Sleep(10);
                        //            cnt++;
                        //            //need to handle invalid tracking label
                        //        }
                        //        if (cnt > 10) break;


                        //        //log6.Info("Operator 1 match " + "," + Station6ForOP1Scanboxid + "," + station6track1);
                        //        networkmain.linePack.Info("Operator 1 match " + "," + Station6ForOP1Scanboxid + "," + station6track1);
                        //        MyEventQ.AddQ("24;Station6SealedMBBAcceptedAtStation6;LotNumber;" + Station6ForOP1Scanboxid + ";LicensePlateBarcode;" + station6track1 +
                        //            ";QcstationNumber;1;OperatorName;" + UserName1);
                        //        PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x08;// association completed
                        //                                                            //--> how to go back 0x0?? if finishing label is /0/0 i can assume all data cleared
                        //        ScannerStatus = BarcodeStatus.Null;
                        //        Operator01State = WAITTRACKINGLABELCLEAR;//create a state to wait for tracking label to clear


                        //    }
                        //    else

                        //    {
                        //        // log6.Info("Operator 1 Same tracking label  inside the System " + station6track1);
                        //        networkmain.linePack.Info("Operator 1 Same tracking label  inside the System " + station6track1);
                        //        PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x0F;
                        //        ScannerStatus = BarcodeStatus.Duplicated;
                        //        continue;


                        //    }

                        //}
                        //else
                        //{
                        //    PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x00;
                        //    // Station6ForOP1TrackingLabel = "\0\0\0\0\0\0\0\0\0\0";
                        //    //  log6.Info("Operator 1 waiting tracking label " + Station6ForOP1Scanboxid);
                        //    networkmain.linePack.Info("Operator 1 waiting tracking label From PLC2 " + Station6ForOP1Scanboxid);

                        //    // need to check for operator reject signal from PLC
                        //}
                        #endregion
                        break;     //update here

                    case WAITTRACKINGLABELCLEAR:
                        //wait for tracking label and finishing label to clear zero??
                        byte[] tmparray2 = new byte[8];
                        //DM5020 TrackingLabel Update
                        Array.Copy(PLCQueryRx6, 51, tmparray2, 0, 8);
                        //convert array to string
                        Station6ForOP1TrackingLabel = System.Text.Encoding.Default.GetString(tmparray2);
                        Array.Copy(PLCQueryRx6, 111, tmparray, 0, 10);
                        //convert array to string
                        Station6ForOP1Scanboxid = System.Text.Encoding.Default.GetString(tmparray);
                        Station6ForOP1Scanboxid.Trim();

                        //relfect finishing label data status to station 6 OP 1
                        if ((Station6ForOP1Scanboxid == "\0\0\0\0\0\0\0\0\0\0") &&
                            (Station6ForOP1TrackingLabel == "\0\0\0\0\0\0\0\0"))
                        {
                            //log6.Info("Operator 1 getting label from station 5 : " + Station6ForOP1Scanboxid);
                            networkmain.linePack.Info("Operator 1 getting label from station 5 : " + Station6ForOP1Scanboxid);
                            networkmain.stn6log = Station6ForOP1Scanboxid + " OP1 recieving frm stn.5";
                            //both id goes zero
                            PLCWriteCommand6[PLCWriteCommand_DM5204]     = 0X0;
                            PLCWriteCommand6[PLCWriteCommand_DM5200 + 4] = 0x0;    //DM202 reject status
                            PLCWriteCommand6[PLCWriteCommand_DM5204 + 4] = 0x0;    //DM206 tracking label status
                            networkmain.operator1BoxNumber = "";
                            Station6ForOP1Scanboxid        = "\0\0\0\0\0\0\0\0\0\0";
                            Station6ForOP1TrackingLabel    = "\0\0\0\0\0\0\0\0";
                            SealerNumberQC1 = "";
                            st6finish1      = "";
                            station6track1  = "";
                            Status          = "";
                            CheckStringClearFor6_OP1(OperatorA_PCtoPLCFinishingLabelOFFSET, _Station6ForOP1Scanboxid);
                            EarlierPickupFlag = false;
                            Operator01State   = WAITFORFINISHINGLABEL;
                        }
                        break;

                    case TRACKINGLABELAVAILABLE:    //tracking label available
                        break;

                    case REJECTRXAFTERSCANMATCHED:    //reject recieved from PLC @ state AFTERSCANMATCHED
                        break;

                    case INVALIDLABELHANDLE:    //recieved an invalid finishing label @ state checkforvalidfinishinglabel
                        //wait for label to be 00
                        Operator01State = ERHANDLER_STEP01;
                        break;

                    case 99:    //recieved an invalid finishing label @ state checkforvalidfinishinglabel
                        //wait for label to be 00
                        if (PLCQueryRx6[PLCQueryRx_DM5100 + 12] == 0x01)
                        {
                            networkmain.linePack.Info("Operator 1 Scanner FL contain " + Station6ForOP1Scanboxid);
                            // networkmain.stn6log = Station6ForOP1Scanboxid + " Scanner FL contain by OP1";
                            Status = "equal";

                            Operator01State = SCANMATCHWAITTRACKINGLABEL;
                        }
                        break;

                    case SPECLABELPROCESS:

                        //byte[] tmpbytesp = new byte[2];
                        //tmpbytesp = Encoding.ASCII.GetBytes("SP");
                        //Array.Copy(tmpbytesp, 0, PLCWriteCommand6, 95, 2);//copy SP to PLC DM5237
                        // log6.Info("Station 6 Operator 1 SPECKTEK " + Station6ForOP1Scanboxid);
                        try                                                                     //OEE OPERATOR 1 MANUA REJECT
                        {
                            XmlNode fltrackingroot = networkmain.FLTrackingdoc.DocumentElement; //this house the list of summarized xml details
                            XmlNode selectednode   = fltrackingroot.SelectSingleNode("descendant::LABEL[ID='" + Station6ForOP1Scanboxid + "']");
                            if (selectednode != null)
                            {
                                string OEEidOP1 = selectednode.SelectSingleNode("OEEid").InnerText;
                                rq.UpdST6RJ(OEEidOP1, 1, "0");
                            }
                        }
                        catch (Exception ex)
                        {
                            IGTOEELog.Info(ex.ToString());
                        }
                        networkmain.linePack.Info("Station 6 Operator 2 SPECKTEK " + Station6ForOP1Scanboxid);
                        MyEventQ.AddQ("22;Station6SealedSpectekAcceptedAtStation6;LotNumber;" + Station6ForOP1Scanboxid + ";QcstationNumber;1;OpearatorName"
                                      + UserName1);
                        PLCWriteCommand6[PLCWriteCommand_DM5200 + 4] = 0x09;
                        networkmain.stn6log = Station6ForOP1Scanboxid + " OP1 SPECK";
                        //networkmain.Client_sendFG01_FG02_MOVE1(Station6ForOP1Scanboxid, "FG01_FG02_MOVE");
                        networkmain.Client_sendFG01_FG02_MOVE(Station6ForOP1Scanboxid, "FG01_FG02_MOVE QC1 Spectex");

                        networkmain.Client_sendFG01_FG02_MOVE6(Station6ForOP1Scanboxid);     //need to open in real time
                        //NEED TO SEND ACK TO MIDDLEWARE
                        Operator01State = ERHANDLER_STEP02;

                        break;
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }//
        }
        public void RunStation05Sealers(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            while (!bTerminate)
            {
                Thread.Sleep(100);
                try
                {
                    bool Sealerflag1 = false;
                    bool Sealerflag2 = false;
                    bool Sealerflag3 = false;

                    if (PLCTelnet2 != null)
                    {
                        if (PLCTelnet2.connected)
                        {
                            #region Sealer ID
                            //Sealer1

                            byte[] temps1 = new byte[12];
                            Array.Copy(PLCQueryRx6, 91, temps1, 0, 12); // DM 5040 PLC2
                            Sealer1ID = System.Text.Encoding.Default.GetString(temps1);

                            if (Sealer1ID != "\0\0\0\0\0\0\0\0\0\0\0\0" && Sealer1ID != "            ")
                            {
                                Sealer1IDshow = Sealer1ID;
                            }
                            else
                            {
                                Sealer1IDshow = "Sealer1IDisNULL";
                            }


                            byte[] temps2 = new byte[12];
                            Array.Copy(PLCQueryRx6, 141, temps2, 0, 12); // DM 5065 PLC2
                            Sealer2ID = System.Text.Encoding.Default.GetString(temps2);

                            if (Sealer2ID != "\0\0\0\0\0\0\0\0\0\0\0\0" && Sealer2ID != "            ")
                            {
                                Sealer2IDshow = Sealer2ID;
                            }
                            else
                            {
                                Sealer2IDshow = "Sealer2IDisNULL";
                            }


                            byte[] temps3 = new byte[12];
                            Array.Copy(PLCQueryRx6, 153, temps3, 0, 12); // DM 5071 PLC2
                            Sealer3ID = System.Text.Encoding.Default.GetString(temps3);

                            if (Sealer3ID != "\0\0\0\0\0\0\0\0\0\0\0\0" && Sealer3ID != "            ")
                            {
                                Sealer3IDshow = Sealer3ID;
                            }
                            else
                            {
                                Sealer3IDshow = "Sealer3IDisNULL";
                            }


                            #endregion



                            #region  sealer program For Station5
                            //edit .............................

                            byte[] temp2 = new byte[10];
                            Array.Copy(PLCQueryRx6, 201, temp2, 0, 10); // DM 5095 PLC2 =201 offset
                            Station5ForTransferScanboxidFromPLC2 = System.Text.Encoding.Default.GetString(temp2);

                            if (Station5ForTransferScanboxidFromPLC2 != "\0\0\0\0\0\0\0\0\0\0")
                            {
                                ST5NewFLRev = true;
                                CheckStringUpdateFor5(PLCFinishingLabelOFFSET, Station5ForTransferScanboxidFromPLC2);
                            }
                            else
                            {
                                ST5NewFLRev = false;
                                Station5ForTransferScanboxidFromPLC2 = "\0\0\0\0\0\0\0\0\0\0";
                                CheckStringClearFor5(PLCFinishingLabelOFFSET, Station5ForTransferScanboxidFromPLC2); // DM5271
                            }
                            // Compare PLC fl and thread fl
                            // Set Status to Busy


                            #endregion



                            #region  Sealer checking in Station 5 Initialization time

                            /*
                             * if (evnt_CheckingConnectionForSealer1.WaitOne(50))
                             * {
                             *  try
                             *  {
                             *      if (VS1VacuumSealer != null)
                             *      {
                             *
                             *          try
                             *          {
                             *              VS1VacuumSealer.Close();
                             *          }
                             *          catch (Exception) { }
                             *          VS1VacuumSealer = null;
                             *
                             *      }
                             *      if (VS1VacuumSealer == null)
                             *      {
                             *          XmlDocument doc = new XmlDocument();
                             *          doc.Load(@"Config.xml");
                             *          XmlNode Sealernode = doc.SelectSingleNode(@"/CONFIG/SEALER1/PORT");
                             *          String comport = Sealernode.InnerText;
                             *          //TODO: ConfigFIle
                             *          VS1VacuumSealer = new InnovacVacuumSealer(comport);
                             *          VS1VacuumSealer.Open();
                             *         // short testreceipe = 240;
                             *          //VS1VacuumSealer.SelectAndConfirmProgram(testreceipe, InnovacVacuumSealer.SealerBar.Right);
                             *         Sealer1Log.Info("Sealer1 connected at initialization time");
                             *         networkmain.stn5log ="slr.1 connected at initialization";
                             *         networkmain.OperatorLog = "Sealer1 connected at initialization time";
                             *         InnovacVacuumSealer.SystemStatus sysMessage;
                             *         VS1VacuumSealer.GetSystemStatus(out sysMessage);
                             *         if (sysMessage != InnovacVacuumSealer.SystemStatus.Undefined && sysMessage != InnovacVacuumSealer.SystemStatus.Error && Sealer1IDshow != "Sealer1IDisNULL")
                             *         {
                             *             PLCWriteCommand6[PLCWriteCommand_DM5362] = 0x06;
                             *         }
                             *         else
                             *         {
                             *             PLCWriteCommand6[PLCWriteCommand_DM5362] = 0xFF;
                             *         }
                             *      }
                             *
                             *
                             *  }
                             *  catch (Exception ex)
                             *  {
                             *      Sealer1Log.Error(ex.ToString());
                             *
                             *      PLCWriteCommand6[PLCWriteCommand_DM5362] = 0xFF;
                             *      Sealer1Log.Info("Sealer1 Can't connected at initialization time");
                             *      networkmain.stn5log = "slr.1 Can't connected at initialization";
                             *      networkmain.OperatorLog = "Sealer1 Can't connected at initialization time";
                             *      string  abc = Sealer1IDshow.Trim();
                             *      MyEventQ.AddQ("8;SealerCommunicationBreak;SealerID;" + abc);
                             *      EvtLog.Info("8;SealerCommunicationBreak;SealerID;" + abc);
                             *
                             *      evnt_CheckingConnectionForSealer1.Reset();
                             *  }
                             *  evnt_CheckingConnectionForSealer1.Reset();
                             * }
                             *
                             */


                            if (evnt_CheckingConnectionForSealer2.WaitOne(50))
                            {
                                try
                                {
                                    if (VS2VacuumSealer != null)
                                    {
                                        try
                                        {
                                            VS2VacuumSealer.Close();
                                        }
                                        catch (Exception) { }
                                        VS2VacuumSealer = null;
                                    }
                                    if (VS2VacuumSealer == null)
                                    {
                                        XmlDocument doc = new XmlDocument();
                                        doc.Load(@"Config.xml");
                                        XmlNode Sealernode = doc.SelectSingleNode(@"/CONFIG/SEALER2/PORT");
                                        String  comport    = Sealernode.InnerText;
                                        //TODO: ConfigFIle
                                        VS2VacuumSealer = new InnovacVacuumSealer(comport);
                                        VS2VacuumSealer.Open();
                                        //short testreceipe = 240;
                                        // VS2VacuumSealer.SelectAndConfirmProgram(testreceipe, InnovacVacuumSealer.SealerBar.Right);
                                        Sealer2Log.Info("Sealer2 connected at initialization time");
                                        networkmain.stn5log     = "slr.2 connected at initialization";
                                        networkmain.OperatorLog = "Sealer2 connected at initialization time";
                                        InnovacVacuumSealer.SystemStatus sysMessage;
                                        VS2VacuumSealer.GetSystemStatus(out sysMessage);
                                        if (sysMessage != InnovacVacuumSealer.SystemStatus.Undefined && sysMessage != InnovacVacuumSealer.SystemStatus.Error && Sealer2IDshow != "Sealer2IDisNULL")
                                        {
                                            PLCWriteCommand6[PLCWriteCommand_DM5363] = 0x06;
                                        }
                                        else
                                        {
                                            PLCWriteCommand6[PLCWriteCommand_DM5363] = 0xFF;
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Sealer2Log.Error(ex.ToString());

                                    PLCWriteCommand6[PLCWriteCommand_DM5363] = 0xFF;
                                    Sealer2Log.Info("Sealer2 Can't connected at initialization time");
                                    networkmain.stn5log     = "slr.2 Can't connected at initialization";
                                    networkmain.OperatorLog = "Sealer2 Can't connected at initialization time";

                                    string abc = Sealer2IDshow.Trim();
                                    MyEventQ.AddQ("8;SealerCommunicationBreak;SealerID;" + abc);
                                    EvtLog.Info("8;SealerCommunicationBreak;SealerID;" + abc);
                                    evnt_CheckingConnectionForSealer2.Reset();
                                }
                                evnt_CheckingConnectionForSealer2.Reset();
                            }



                            if (evnt_CheckingConnectionForSealer3.WaitOne(50))
                            {
                                try
                                {
                                    if (VS3VacuumSealer != null)
                                    {
                                        try
                                        {
                                            VS3VacuumSealer.Close();
                                        }
                                        catch (Exception) { }
                                        VS3VacuumSealer = null;
                                    }
                                    if (VS3VacuumSealer == null)
                                    {
                                        XmlDocument doc = new XmlDocument();
                                        doc.Load(@"Config.xml");
                                        XmlNode Sealernode = doc.SelectSingleNode(@"/CONFIG/SEALER3/PORT");
                                        String  comport    = Sealernode.InnerText;
                                        //TODO: ConfigFIle
                                        VS3VacuumSealer = new InnovacVacuumSealer(comport);
                                        VS3VacuumSealer.Open();
                                        //short testreceipe = 240;
                                        //VS3VacuumSealer.SelectAndConfirmProgram(testreceipe, InnovacVacuumSealer.SealerBar.Right);
                                        Sealer3Log.Info("Sealer3 connected at initialization time");
                                        networkmain.stn5log     = "slr.3 connected at initialization";
                                        networkmain.OperatorLog = "Sealer3 connected at initialization time";
                                        InnovacVacuumSealer.SystemStatus sysMessage;
                                        VS3VacuumSealer.GetSystemStatus(out sysMessage);
                                        if (sysMessage != InnovacVacuumSealer.SystemStatus.Undefined && sysMessage != InnovacVacuumSealer.SystemStatus.Error && Sealer3IDshow != "Sealer3IDisNULL")
                                        {
                                            PLCWriteCommand6[PLCWriteCommand_DM5426] = 0x06;
                                        }
                                        else
                                        {
                                            PLCWriteCommand6[PLCWriteCommand_DM5426] = 0xFF;
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Sealer3Log.Error(ex.ToString());

                                    PLCWriteCommand6[PLCWriteCommand_DM5426] = 0xFF;
                                    Sealer3Log.Info("Sealer3 Can't connected at initialization time");
                                    networkmain.stn5log     = "slr.3 Can't connected at initialization";
                                    networkmain.OperatorLog = "Sealer3 Can't connected at initialization time";

                                    string abc = Sealer3IDshow.Trim();
                                    MyEventQ.AddQ("8;SealerCommunicationBreak;SealerID;" + abc);
                                    EvtLog.Info("8;SealerCommunicationBreak;SealerID;" + abc);

                                    evnt_CheckingConnectionForSealer3.Reset();
                                }
                                evnt_CheckingConnectionForSealer3.Reset();
                            }

                            #endregion


                            #region Station 5 Error Code


                            byte[] tmparrayERst5 = new byte[2];
                            Array.Copy(PLCQueryRx6, 401, tmparrayERst5, 0, 2); //5195
                            //convert Byte array to int
                            Int32 erst5 = (Int32)(BitConverter.ToInt16(tmparrayERst5, 0));

                            byte[] tmparrayERst5_1 = new byte[2];
                            Array.Copy(PLCQueryRx6, 403, tmparrayERst5_1, 0, 2); //5196
                            //convert Byte array to int
                            Int32 erst5_1 = (Int32)(BitConverter.ToInt16(tmparrayERst5_1, 0));

                            byte[] tmparrayERst5_2 = new byte[2];
                            Array.Copy(PLCQueryRx6, 359, tmparrayERst5_2, 0, 2); //5174
                            //convert Byte array to int
                            Int32 erst5_2 = (Int32)(BitConverter.ToInt16(tmparrayERst5_2, 0));

                            ErrCode5_2 = erst5_2.ToString();
                            ErrCode5_1 = erst5_1.ToString();
                            ErrCode5   = erst5.ToString();



                            #region NewErrorCode
                            if (erst5 > 0 || erst5_1 > 0 || erst5_2 > 0)
                            {
                                // LogEr.Info("Station 5 Error Code"+ErrCode5+ErrCode5_1+ErrCode5_2);
                                Errmessage5 = "Stn.5 Err " +
                                              (erst5 > 0 ? ErrCode5 + ": " + Stn5ErrToMsg(erst5) : "") +
                                              (erst5_1 > 0 && erst5 != erst5_1 ? ", " + ErrCode5_1 + ": " + Stn5ErrToMsg(erst5_1) : "") +
                                              (erst5_2 > 0 && erst5 != erst5_2 ? ", " + ErrCode5_2 + ": " + Stn5ErrToMsg(erst5_2) : "");

                                if (!ST5JamFlag)
                                {
                                    bool St5JamTrig = ST2PauseFunction(5, erst5 + ";" + erst5_1 + ";" + erst5_2); //Check if is a JAM
                                    if (St5JamTrig)
                                    {
                                        ST5JamFlag = true;
                                        //string[] FLbatch = rq.UpdJamstatus(5, 555); //Update Jam FL
                                        //if (FLbatch != null)
                                        //{
                                        //    networkmain.Client_SendEventMsg("536", "Station5FLJAMRecovery", FLbatch);//Update Jam recovery FL to middleware
                                        //}
                                    }
                                }
                            }
                            else
                            {
                                ST5JamFlag  = false;
                                Errmessage5 = String.Empty;
                            }
                            #endregion
                            #region OldCode
                            //if (erst5 > 0 || erst5_1 > 0 || erst5_2 > 0)
                            //{

                            //    // LogEr.Info("Station 5 Error Code"+ErrCode5+ErrCode5_1+ErrCode5_2);
                            //    Errmessage5 = "Stn.5 Err " +
                            //        (erst5 > 0 ? ErrCode5 + ": " + Stn5ErrToMsg(erst5) : "") +
                            //        (erst5_1 > 0 && erst5 != erst5_1 ? ", " + ErrCode5_1 + ": " + Stn5ErrToMsg(erst5_1) : "") +
                            //        (erst5_2 > 0 && erst5 != erst5_2 ? ", " + ErrCode5_2 + ": " + Stn5ErrToMsg(erst5_2) : "");


                            //    //     LogEr.Info(Errmessage5);



                            //}
                            //else
                            //{
                            //    Errmessage5 = String.Empty;
                            //}
                            #endregion
                            UpdateErrorMsg((int)Station.StationNumber.Station05, Errmessage5, ST5JamFlag);

                            if ((erst5 > 0) && networkmain.controlst5 == 0)
                            {
                                Errst5 = erst5.ToString();
                                networkmain.controlst5 = 1;
                                messagest5             = Stn5ErrToMsg(erst5);
                                networkmain.Client_SendAlarmMessage5(erst5.ToString(), messagest5, "SET");
                            }
                            if (erst5 == 0 && networkmain.controlst5 == 1)
                            {
                                networkmain.Client_SendAlarmMessage5(Errst5, messagest5, "CLEAR");
                                networkmain.controlst5 = 0;
                                Errst5     = "";
                                messagest5 = "";
                            }



                            if ((erst5_1 > 0) && (erst5_1 != erst5) && networkmain.controlst5_1 == 0)
                            {
                                Errst5_1 = erst5_1.ToString();
                                networkmain.controlst5_1 = 1;
                                messagest5_1             = Stn5ErrToMsg(erst5_1);
                                networkmain.Client_SendAlarmMessage5(erst5_1.ToString(), messagest5_1, "SET");
                            }
                            if (erst5_1 == 0 && networkmain.controlst5_1 == 1)
                            {
                                networkmain.Client_SendAlarmMessage5(Errst5_1, messagest5_1, "CLEAR");
                                networkmain.controlst5_1 = 0;
                                Errst5_1     = "";
                                messagest5_1 = "";
                            }

                            if (erst5_2 > 0 && erst5 != erst5_2 && (erst5_1 != erst5_2) && networkmain.controlst5_2 == 0)
                            {
                                Errst5_2 = erst5_2.ToString();
                                networkmain.controlst5_2 = 1;
                                messagest5_2             = Stn5ErrToMsg(erst5_2);
                                networkmain.Client_SendAlarmMessage5(erst5_2.ToString(), messagest5_2, "SET");
                            }
                            if (erst5_2 == 0 && networkmain.controlst5_2 == 1)
                            {
                                networkmain.Client_SendAlarmMessage5(Errst5_2, messagest5_2, "CLEAR");
                                networkmain.controlst5_2 = 0;
                                Errst5_2     = "";
                                messagest5_2 = "";
                            }

                            #endregion
                        }
                    }
                    //  break;
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }
        }
        public void RunPLC02Scan(object msgobj)
        {
            MainNetworkClass networkmain = (MainNetworkClass)msgobj;

            PLCTelnet2 = new TelnetClient();
            byte[] tmpRx6    = new byte[411];
            byte[] tmpRxPlc2 = new byte[1011];
            bool   plc2Break = false;

            while (!bTerminate)
            {
                Thread.Sleep(100);
                try
                {
                    if (PLCTelnet2.connected == false)
                    {
                        XmlDocument doc = new XmlDocument();
                        doc.Load(@"Config.xml");
                        XmlNode node = doc.SelectSingleNode(@"/CONFIG/PLCCONTROLLER2/ADD");
                        System.Net.IPAddress address = System.Net.IPAddress.Parse(node.InnerText);
                        node = doc.SelectSingleNode(@"/CONFIG/PLCCONTROLLER2/PORT");
                        PLC2NetworkAddress = "Trying to connect to " + address.ToString() + " Port : " + node.InnerText;
                        if (PLCTelnet2.ConnectToHost(address, int.Parse(node.InnerText)) == false)
                        {
                            PLC2NetworkAddress = "Connected to PLCServer2 "
                                                 + address.ToString()
                                                 + " Port : "
                                                 + node.InnerText + " Fail"; //not connected
                            Thread.Sleep(100);                               // try to connect to server
                            if (!plc2Break)
                            {
                                MyEventQ.AddQ("5;PLCCommunicationBreak;PLC Number;2");//Push message to stack
                                EvtLog.Info("5;PLCCommunicationBreak;PLC Number;2");
                                plc2Break = true;
                            }
                            continue;
                        }
                        else
                        {
                            PLC2NetworkAddress = "Connected to PLCServer2 " + address.ToString() + " Port : " + node.InnerText;//connected
                        }
                        plc2Break = false;
                    }
                    if (PLCTelnet2.connected)
                    {
                        string tmpstr;
                        int    timeoutcounter = 0;
                        PLCTelnet2.SendDataToHost(PLCQueryCmd6);//PLC02 Read Cycle
                        Thread.Sleep(waitdelay);
                        tmpstr = PLCTelnet2.GetDataFromHost(ref tmpRx6, PLCQueryRx6.Length);
                        //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                        if (tmpstr != "No Data")
                        {
                            if ((tmpstr.StartsWith("d00000ffff")) && (tmpstr.Length == 822))
                            {
                                Array.Copy(tmpRx6, PLCQueryRx6, PLCQueryRx6.Length);
                            }
                            else
                            {
                                PLCTelnet2.Close();
                            }
                        }
                        //  log.Info(tmpstr);
                        while ((tmpstr == "No Data") && PLCTelnet.connected)
                        {
                            Thread.Sleep(waitdelay);
                            tmpstr = PLCTelnet2.GetDataFromHost(ref tmpRx6, PLCQueryRx6.Length);
                            if (tmpstr != "No Data")
                            {
                                if ((tmpstr.StartsWith("d00000ffff")) && (tmpstr.Length == 822))
                                {
                                    Array.Copy(tmpRx6, PLCQueryRx6, PLCQueryRx6.Length);
                                }
                                else
                                {
                                    PLCTelnet2.Close();
                                    break;
                                }
                            }
                            //No Data loop again
                            //  log.Info(tmpstr);
                            timeoutcounter++;
                            if (timeoutcounter == 10)
                            {
                                //assume connection broken
                                PLCTelnet2.Close();
                                break;
                            }
                        }


                        #region READ  PLC2 Memory 6100 to 6499



                        timeoutcounter = 0;
                        if (PLCTelnet2.connected == false)
                        {
                            continue;
                        }
                        PLCTelnet2.SendDataToHost(PLCQueryCmdParaPlc2);//query data from plc dm700 to dm999
                        //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx7, PLCQueryRx7.Length);
                        tmpstr = PLCTelnet2.GetDataFromHost(ref tmpRxPlc2, tmpRxPlc2.Length);
                        //tmpstr100 = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                        if (tmpstr.StartsWith("d00000ffff") && (tmpstr.Length == 2022))
                        {
                            Array.Copy(tmpRxPlc2, PLCQueryRxParaPlc2, PLCQueryRxParaPlc2.Length);
                        }
                        else
                        {
                            tmpstr = "No Data";
                        }

                        while ((tmpstr == "No Data") && PLCTelnet2.connected)
                        {
                            Thread.Sleep(waitdelay);
                            tmpstr = PLCTelnet2.GetDataFromHost(ref tmpRxPlc2, tmpRxPlc2.Length);
                            //tmpstr = PLCTelnet.GetDataFromHost(ref PLCQueryRx, PLCQueryRx.Length);
                            if ((tmpstr.StartsWith("d00000ffff") && (tmpstr.Length == 2022)))
                            {
                                Array.Copy(tmpRxPlc2, PLCQueryRxParaPlc2, PLCQueryRxParaPlc2.Length);
                            }
                            else
                            {
                                tmpstr = "No Data";
                            }

                            timeoutcounter++;
                            if (timeoutcounter == 10)
                            {
                                //assume connection broken
                                PLCTelnet2.Close();
                                break;
                            }
                        }



                        #endregion



                        timeoutcounter = 0;
                        PLCTelnet2.SendDataToHost(PLCWriteCommand6);//PLC02 Write cycle
                        Thread.Sleep(waitdelay);
                        tmpstr = PLCTelnet2.GetDataFromHost(ref PLCWriteCommandRX6, PLCWriteCommandRX6.Length);
                        //   log.Info("PLC 2 Write " + tmpstr);
                        while ((tmpstr == "No Data") && PLCTelnet.connected)
                        {
                            Thread.Sleep(waitdelay);
                            tmpstr = PLCTelnet2.GetDataFromHost(ref PLCWriteCommandRX6, PLCWriteCommandRX6.Length);
                            //    log.Info("PLC 2 Write " + tmpstr);
                            timeoutcounter++;
                            if (timeoutcounter == 10)
                            {
                                //assume connection broken
                                PLCTelnet2.Close();
                                break;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex.ToString());
                }
            }
        }
Example #13
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());
                }
            }
        }