Exemple #1
0
        public override bool DoSelectRecipe(string Port, string[] LotIds, string Recipe, string Operator, out string errorMessage)
        {
            char[] trimChars = new char[] { ',' };

            if (LotIds == null || Recipe == null)
            {
                errorMessage = "HCMD for PP-SELECT cannot be run--no LotIds or Recipe were supplied";
                Messenger.Default.Send(new EventMessage(DateTime.Now, "E", errorMessage));
                MyLog.Information(errorMessage);

                return(false);
            }

            Messenger.Default.Send(new ProcessStateChangeMessage(ProcessStates.READY, "Selecting recipe"));


            StringBuilder logMessage         = new StringBuilder("Sending HCMD PP-SELECT with recipe " + Recipe + " lot IDs ");
            S2F41         hostCommandMessage = new S2F41(CurrentToolConfig.Toolid);

            hostCommandMessage.SetRCMD("PP-SELECT", DataType.ASC);
            hostCommandMessage.addCp("PPID", DataType.ASC, Recipe, DataType.ASC);
            hostCommandMessage.addCp("OPERATORID", DataType.ASC, Operator, DataType.ASC);

            // BatchID length must be <= 20, so remove leading "B_"
            string batch = "";

            for (int i = 0; i < LotIds.Length; i++)
            {
                if (i > 0)
                {
                    batch += "_";
                }
                batch += LotIds[i];
            }

            //foreach (string lotId in LotIds)
            //{
            //    if (lotId != null && lotId.Trim().Length > 0)
            //    {
            //        batch += "_" + lotId;
            //    }
            //}
            MyLog.Information($"BATCHID={batch}");

            hostCommandMessage.addCp("BATCHID", DataType.ASC, batch, DataType.ASC);

            int lotSuffix = 1;

            foreach (string lotId in LotIds)
            {
                if (lotId != null && lotId.Trim().Length > 0)
                {
                    hostCommandMessage.addCp("LOTID" + lotSuffix++, DataType.ASC, lotId, DataType.ASC);
                    logMessage.Append(lotId);
                    logMessage.Append(",");
                }
            }
            try
            {
                Messenger.Default.Send(new EventMessage(new LogEntry(logMessage.ToString().TrimEnd(trimChars))));
                MyLog.Information(logMessage.ToString().TrimEnd(trimChars));

                hostCommandMessage.send(EqSrv, CurrentToolConfig.CommunicationTimeout);
                if (ToolUtilities.checkAck(hostCommandMessage.HCACK, new String[] { "0", "00", "04" }))
                {
                    MyLog.Information("HCMD for PP-SELECT returned good HCACK");
                    errorMessage = "";
                    return(true);
                }
                else
                {
                    errorMessage = "HCMD for PP-SELECT returned bad HCACK " + hostCommandMessage.HCACK + " - " +
                                   (HostCommandAckDict.ContainsKey(hostCommandMessage.HCACK) ? HostCommandAckDict[hostCommandMessage.HCACK] :
                                    "Undefined HCACK");
                    Messenger.Default.Send(new EventMessage(DateTime.Now, "E", errorMessage));
                    MyLog.Information(errorMessage);
                    return(false);
                }
            }
            catch (Exception e)
            {
                ToolUtilities.ReportMessageSendExceptions("HCMD (S2F41) PP-SELECT", true, e);
                errorMessage = "Error sending HCMD (S2F41) PP-SELECT to tool";
                return(false);
            }
        }