MET08DDUPSP1TBI - v2.43.0 - Infineon.Monitoring
.MonA 3.0.0 - RDS Memory
This commit is contained in:
parent
c3e5076525
commit
44a2e5e67d
@ -17,6 +17,7 @@ public class CellInstanceConnectionName
|
|||||||
nameof(Archive) => new Archive.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
nameof(Archive) => new Archive.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
nameof(Dummy) => new Dummy.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
nameof(IQSSi) => new IQSSi.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
nameof(IQSSi) => new IQSSi.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
|
nameof(MoveAllFiles) => new MoveAllFiles.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
nameof(MoveMatchingFiles) => new MoveMatchingFiles.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
nameof(MoveMatchingFiles) => new MoveMatchingFiles.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
nameof(OpenInsight) => new OpenInsight.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
nameof(OpenInsight) => new OpenInsight.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
nameof(OpenInsightMetrologyViewer) => new OpenInsightMetrologyViewer.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
nameof(OpenInsightMetrologyViewer) => new OpenInsightMetrologyViewer.FileRead(smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted),
|
||||||
|
@ -3,8 +3,10 @@ using System.Collections.Generic;
|
|||||||
using System.Data.SqlClient;
|
using System.Data.SqlClient;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace Adaptation.FileHandlers.TIBCO.Transport;
|
namespace Adaptation.FileHandlers.TIBCO.Transport;
|
||||||
|
|
||||||
@ -28,41 +30,82 @@ public class Job
|
|||||||
public DateTime DateTime { get; }
|
public DateTime DateTime { get; }
|
||||||
public List<Item> Items { get; }
|
public List<Item> Items { get; }
|
||||||
|
|
||||||
public Job(string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath, string lsl2SQLConnectionString, string mid)
|
public Job(string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath, string lsl2SQLConnectionString, Dictionary<int, List<(string MID, int Count)>> _RDS, string mid)
|
||||||
{
|
{
|
||||||
Items = new List<Item>();
|
Items = new List<Item>();
|
||||||
if (mid[0] != '{' || mid[mid.Length - 1] != '}' || !mid.Contains("\"Si\""))
|
if (mid[0] != '{' || mid[mid.Length - 1] != '}' || !mid.Contains("\"Si\""))
|
||||||
IsAreaSi = false;
|
IsAreaSi = false;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string[] segments;
|
string psn;
|
||||||
const string hyphen = "-";
|
int rds = 0;
|
||||||
|
string reactor;
|
||||||
Input input = JsonSerializer.Deserialize<Input>(mid);
|
Input input = JsonSerializer.Deserialize<Input>(mid);
|
||||||
IsAreaSi = input.Area == "Si";
|
IsAreaSi = input.Area == "Si";
|
||||||
|
if (input.MID is null)
|
||||||
|
input.MID = string.Empty;
|
||||||
if (!long.TryParse(input.Sequence, out long sequence))
|
if (!long.TryParse(input.Sequence, out long sequence))
|
||||||
DateTime = DateTime.Now;
|
DateTime = DateTime.Now;
|
||||||
else
|
else
|
||||||
DateTime = new DateTime(sequence);
|
DateTime = new DateTime(sequence);
|
||||||
if (!string.IsNullOrEmpty(input.MID) && input.MID.Length > 9 && input.MID[2] == hyphen[0] && input.MID[9] == hyphen[0])
|
string[] segments = Regex.Split(input.MID, @"[^0-9']");
|
||||||
segments = input.MID.Split(hyphen[0]);
|
List<IGrouping<string, (string MID, int Count)>> orderedMatches = new();
|
||||||
|
if (segments.Length < 3 || (segments.Length > 1 && !int.TryParse(segments[1], out rds)))
|
||||||
|
{
|
||||||
|
psn = string.Empty;
|
||||||
|
reactor = string.Empty;
|
||||||
|
}
|
||||||
|
else if (rds > 0)
|
||||||
|
{
|
||||||
|
lock (_RDS)
|
||||||
|
{
|
||||||
|
if (!_RDS.ContainsKey(rds))
|
||||||
|
_RDS.Add(rds, new());
|
||||||
|
List<(string MID, int Count)> collection = _RDS[rds];
|
||||||
|
if (collection.Count == 0)
|
||||||
|
_RDS[rds].Add(new(input.MID, 1));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IEnumerable<IGrouping<string, (string MID, int Count)>> grouped = collection.GroupBy(l => l.MID);
|
||||||
|
orderedMatches.AddRange(from l in grouped orderby l.Count() descending select l);
|
||||||
|
int length = (from l in orderedMatches where l.Key == input.MID select true).Count();
|
||||||
|
_RDS[rds].Add(new(input.MID, length + 1));
|
||||||
|
}
|
||||||
|
if (_RDS.Count > 1000)
|
||||||
|
_ = _RDS.Remove(_RDS.ElementAt(0).Key);
|
||||||
|
}
|
||||||
|
psn = segments[2];
|
||||||
|
reactor = segments[0];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
segments = new string[] { hyphen, hyphen, hyphen };
|
{
|
||||||
//
|
psn = string.Empty;
|
||||||
|
reactor = string.Empty;
|
||||||
|
}
|
||||||
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity);
|
AutomationMode = string.Concat(DateTime.Ticks, ".", input.MesEntity);
|
||||||
if (segments[1] == hyphen)
|
|
||||||
BasicType = hyphen;
|
|
||||||
else
|
|
||||||
BasicType = GetBasicType(lsl2SQLConnectionString, hyphen, segments[1]);
|
|
||||||
Equipment = input.MesEntity;
|
Equipment = input.MesEntity;
|
||||||
JobName = DateTime.Ticks.ToString();
|
JobName = DateTime.Ticks.ToString();
|
||||||
if (segments[0] == hyphen)
|
if (orderedMatches.Any() && (string.IsNullOrEmpty(reactor) || string.IsNullOrEmpty(psn)))
|
||||||
|
{
|
||||||
|
segments = Regex.Split(orderedMatches[0].Key, @"[^0-9']");
|
||||||
|
psn = segments[2];
|
||||||
|
reactor = segments[0];
|
||||||
|
}
|
||||||
|
const string hyphen = "-";
|
||||||
|
if (rds < 1)
|
||||||
|
{
|
||||||
|
BasicType = hyphen;
|
||||||
LotName = input.MID;
|
LotName = input.MID;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
LotName = segments[1];
|
{
|
||||||
|
LotName = rds.ToString();
|
||||||
|
BasicType = GetBasicType(lsl2SQLConnectionString, hyphen, rds);
|
||||||
|
}
|
||||||
PackageName = hyphen; //WAFER_ID WaferLot
|
PackageName = hyphen; //WAFER_ID WaferLot
|
||||||
ProcessSpecName = hyphen; //WAFER_POS PocketNumber
|
ProcessSpecName = hyphen; //WAFER_POS PocketNumber
|
||||||
ProcessType = segments[0];
|
ProcessType = reactor;
|
||||||
ProductName = segments[2].Split('.')[0];
|
ProductName = psn;
|
||||||
Qty = "1";
|
Qty = "1";
|
||||||
RecipeName = input.Recipe;
|
RecipeName = input.Recipe;
|
||||||
StateModel = input.EquipmentType;
|
StateModel = input.EquipmentType;
|
||||||
@ -71,7 +114,7 @@ public class Job
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetBasicType(string lsl2SQLConnectionString, string hyphen, string rds)
|
public static string GetBasicType(string lsl2SQLConnectionString, string hyphen, int rds)
|
||||||
{
|
{
|
||||||
string result;
|
string result;
|
||||||
// string json;
|
// string json;
|
||||||
|
@ -19,10 +19,12 @@ internal partial class Main
|
|||||||
private static string _OIContextDataSearchPath;
|
private static string _OIContextDataSearchPath;
|
||||||
private static string _OIContextDataPendingPath;
|
private static string _OIContextDataPendingPath;
|
||||||
private static string _OIContextDataResultsPath;
|
private static string _OIContextDataResultsPath;
|
||||||
|
private static Dictionary<int, List<(string MID, int Count)>> _RDS;
|
||||||
private static FileConnectorConfiguration _FileConnectorConfiguration;
|
private static FileConnectorConfiguration _FileConnectorConfiguration;
|
||||||
|
|
||||||
internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath, string lsl2SQLConnectionString)
|
internal static void Initialize(ISMTP smtp, string cellInstanceName, FileConnectorConfiguration fileConnectorConfiguration, string oiContextDataPendingPath, string oiContextDataResultsPath, string oiContextDataSearchPath, string lsl2SQLConnectionString)
|
||||||
{
|
{
|
||||||
|
_RDS = new();
|
||||||
_SMTP = smtp;
|
_SMTP = smtp;
|
||||||
_IfxTransport = null;
|
_IfxTransport = null;
|
||||||
_CellInstanceName = cellInstanceName;
|
_CellInstanceName = cellInstanceName;
|
||||||
@ -185,7 +187,7 @@ internal partial class Main
|
|||||||
if (!subject.EndsWith("GETJOBS"))
|
if (!subject.EndsWith("GETJOBS"))
|
||||||
throw new Exception();
|
throw new Exception();
|
||||||
mid = GetJobsMID(envelopeDocument);
|
mid = GetJobsMID(envelopeDocument);
|
||||||
Job job = new(_OIContextDataPendingPath, _OIContextDataResultsPath, _OIContextDataSearchPath, _LSL2SQLConnectionString, mid);
|
Job job = new(_OIContextDataPendingPath, _OIContextDataResultsPath, _OIContextDataSearchPath, _LSL2SQLConnectionString, _RDS, mid);
|
||||||
if (job.IsAreaSi)
|
if (job.IsAreaSi)
|
||||||
{
|
{
|
||||||
IfxDoc sendReply = GetJobsReply(job);
|
IfxDoc sendReply = GetJobsReply(job);
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="FFMpegCore" Version="4.8.0" />
|
<PackageReference Include="FFMpegCore" Version="4.8.0" />
|
||||||
<PackageReference Include="Infineon.Monitoring.MonA" Version="2.0.0" />
|
<PackageReference Include="Infineon.Monitoring.MonA" Version="3.0.0" />
|
||||||
<PackageReference Include="Infineon.Yoda" Version="5.4.1" />
|
<PackageReference Include="Infineon.Yoda" Version="5.4.1" />
|
||||||
<PackageReference Include="Instances" Version="2.0.0" />
|
<PackageReference Include="Instances" Version="2.0.0" />
|
||||||
<PackageReference Include="RoboSharp" Version="1.2.7" />
|
<PackageReference Include="RoboSharp" Version="1.2.7" />
|
||||||
|
@ -12,8 +12,6 @@ namespace Adaptation.Shared;
|
|||||||
public class ProcessDataStandardFormat
|
public class ProcessDataStandardFormat
|
||||||
{
|
{
|
||||||
|
|
||||||
public const string RecordStart = "RECORD_START";
|
|
||||||
|
|
||||||
public enum SearchFor
|
public enum SearchFor
|
||||||
{
|
{
|
||||||
EquipmentIntegration = 1,
|
EquipmentIntegration = 1,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user