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); } }