[RT.Core]
修正启动PM Process数据统计时,没有传入Recipe名称的问题。 [UI.Client] 修正PMProcessView中的数据统计列表的RecipeName列宽度太短显示不全的问题;Run#列重命名为#。
This commit is contained in:
parent
4f31bfbc60
commit
a7de861162
|
@ -29,9 +29,11 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
private const int DISPLAYED_ROWS_MAX = 10;
|
||||
|
||||
private readonly object _syncObject = new();
|
||||
private bool _isCounting;
|
||||
|
||||
private readonly PeriodicJob _thread;
|
||||
/// <summary>
|
||||
/// 后台统计工艺数据的线程
|
||||
/// </summary>
|
||||
private readonly PeriodicJob _tStatistic;
|
||||
|
||||
#if FAKE_DATA
|
||||
|
||||
|
@ -56,7 +58,7 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
|
||||
DATA.Subscribe($"{Module}.ProcessDataStat.RealtimeList", ()=> ProcessRunDataList);
|
||||
|
||||
_thread = new PeriodicJob(1000, OnTimer, "MonitorProcDataStatPerRun", false);
|
||||
_tStatistic = new PeriodicJob(1000, OnTimer, "MonitorProcDataStatPerRun", false);
|
||||
|
||||
#if FAKE_DATA
|
||||
|
||||
|
@ -77,7 +79,7 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
|
||||
// GasFlowCountCollection.Enqueue(counter);
|
||||
|
||||
// CurrentFlowCounter = counter;
|
||||
// CurrentDataStat = counter;
|
||||
//}
|
||||
|
||||
// Add new Flow Counter every 5s
|
||||
|
@ -86,16 +88,16 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
while (true)
|
||||
{
|
||||
Thread.Sleep(5000);
|
||||
if (CurrentFlowCounter != null)
|
||||
if (CurrentDataStat != null)
|
||||
{
|
||||
// 结束当前的统计,随后开启新统计
|
||||
CurrentFlowCounter.StatisticsEnd = DateTime.Now;
|
||||
SaveFlowCount(CurrentFlowCounter);
|
||||
CurrentDataStat.StatisticsEnd = DateTime.Now;
|
||||
SaveFlowCount(CurrentDataStat);
|
||||
}
|
||||
|
||||
var counter = new GasFlowPerRun();
|
||||
GasFlowCountCollection.Enqueue(counter);
|
||||
CurrentFlowCounter = counter;
|
||||
CurrentDataStat = counter;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -111,7 +113,7 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
|
||||
public ObservableQueue<ProcessDataStatPerRun> GasFlowCountCollection { get; }
|
||||
|
||||
public ProcessDataStatPerRun CurrentFlowCounter { get; private set; }
|
||||
public ProcessDataStatPerRun CurrentDataStat { get; private set; }
|
||||
|
||||
public List<AITProcessRunData> ProcessRunDataList
|
||||
{
|
||||
|
@ -120,28 +122,27 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
var list = new List<AITProcessRunData>();
|
||||
lock (_syncObject)
|
||||
{
|
||||
foreach (var item in GasFlowCountCollection)
|
||||
list.AddRange(GasFlowCountCollection.OrderBy(x => x.Index)
|
||||
.ToList()
|
||||
.Select(item => new AITProcessRunData
|
||||
{
|
||||
list.Add(new AITProcessRunData
|
||||
{
|
||||
Uid = item.StatisticsUid,
|
||||
Index = item.Index,
|
||||
Module = item.Module,
|
||||
RecipeName = item.RecipeName,
|
||||
WaferId = item.WaferId,
|
||||
ProcessBegin = item.StatisticsStart,
|
||||
ProcessEnd = item.StatisticsEnd,
|
||||
H2 = item.H2.Total,
|
||||
Ar = item.Ar.Total,
|
||||
PN2 = item.PN2.Total,
|
||||
HCL = item.HCL.Total,
|
||||
SiH4 = item.SiH4.Total,
|
||||
C2H4 = item.C2H4.Total,
|
||||
TCS = item.TCS.Total,
|
||||
TMA = item.TMA.Total,
|
||||
HeaterPowerConsumption = item.HeaterPowerConsumption.Total
|
||||
});
|
||||
}
|
||||
Uid = item.StatisticsUid,
|
||||
Index = item.Index,
|
||||
Module = item.Module,
|
||||
RecipeName = item.RecipeName,
|
||||
WaferId = item.WaferId,
|
||||
ProcessBegin = item.StatisticsStart,
|
||||
ProcessEnd = item.StatisticsEnd,
|
||||
H2 = item.H2.Total,
|
||||
Ar = item.Ar.Total,
|
||||
PN2 = item.PN2.Total,
|
||||
HCL = item.HCL.Total,
|
||||
SiH4 = item.SiH4.Total,
|
||||
C2H4 = item.C2H4.Total,
|
||||
TCS = item.TCS.Total,
|
||||
TMA = item.TMA.Total,
|
||||
HeaterPowerConsumption = item.HeaterPowerConsumption.Total
|
||||
}));
|
||||
}
|
||||
|
||||
return list;
|
||||
|
@ -164,7 +165,7 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
if (e.Action == NotifyCollectionChangedAction.Add)
|
||||
{
|
||||
var i = 1;
|
||||
GasFlowCountCollection.ToList().OrderByDescending(x => x.StatisticsStart).ToList().ForEach(x =>
|
||||
GasFlowCountCollection.ToList().OrderBy(x => x.StatisticsStart).ToList().ForEach(x =>
|
||||
{
|
||||
x.Index = i;
|
||||
i++;
|
||||
|
@ -252,20 +253,20 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
{
|
||||
lock (_syncObject)
|
||||
{
|
||||
if (CurrentFlowCounter != null && CurrentFlowCounter.StatisticsEnd.HasValue == false)
|
||||
if (CurrentDataStat != null && CurrentDataStat.StatisticsEnd.HasValue == false)
|
||||
{
|
||||
#if FAKE_DATA
|
||||
CurrentFlowCounter.H2.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.Ar.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.PN2.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.HCL.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.SiH4.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.CxHx.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.TCS.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.TMA.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.H2.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.Ar.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.PN2.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.HCL.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.SiH4.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.CxHx.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.TCS.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentDataStat.TMA.AddFlow(_randomFlow.NextDouble());
|
||||
#else
|
||||
|
||||
CurrentFlowCounter.Accumulate();
|
||||
CurrentDataStat.Accumulate();
|
||||
|
||||
#endif
|
||||
}
|
||||
|
@ -275,19 +276,16 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
/// <summary>
|
||||
/// 启动统计。
|
||||
/// </summary>
|
||||
public void Begin()
|
||||
public void Begin(string recipeName)
|
||||
{
|
||||
lock (_syncObject)
|
||||
{
|
||||
_isCounting = true;
|
||||
CurrentFlowCounter = new ProcessDataStatPerRun(Module)
|
||||
{
|
||||
Index = GasFlowCountCollection.Count + 1
|
||||
};
|
||||
CurrentDataStat = new ProcessDataStatPerRun(Module);
|
||||
CurrentDataStat.RecipeName = recipeName;
|
||||
GasFlowCountCollection.Enqueue(CurrentDataStat);
|
||||
|
||||
GasFlowCountCollection.Enqueue(CurrentFlowCounter);
|
||||
|
||||
_thread.Start();
|
||||
// 启动数据采集线程
|
||||
_tStatistic.Start();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -298,21 +296,19 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
{
|
||||
lock (_syncObject)
|
||||
{
|
||||
_thread.Pause();
|
||||
_tStatistic.Pause();
|
||||
|
||||
// Process结束
|
||||
if (CurrentFlowCounter != null)
|
||||
if (CurrentDataStat != null)
|
||||
{
|
||||
CurrentFlowCounter.StatisticsEnd = DateTime.Now;
|
||||
CurrentDataStat.StatisticsEnd = DateTime.Now;
|
||||
|
||||
// 写数据库
|
||||
SaveFlowCount(CurrentFlowCounter);
|
||||
SaveFlowCount(CurrentDataStat);
|
||||
|
||||
CurrentFlowCounter = null;
|
||||
CurrentDataStat = null;
|
||||
|
||||
}
|
||||
|
||||
_isCounting = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ namespace MECF.Framework.RT.Core.Managers.PDS
|
|||
|
||||
public string WaferId { get; }
|
||||
|
||||
public string RecipeName { get; }
|
||||
public string RecipeName { get; internal set; }
|
||||
|
||||
public Guid StatisticsUid { get; }
|
||||
|
||||
|
|
|
@ -1926,7 +1926,7 @@
|
|||
</TabItem>
|
||||
|
||||
<TabItem Header="Gas Flow Statistic">
|
||||
<Grid VerticalAlignment="Top" Margin="5">
|
||||
<Grid Margin="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="25"/>
|
||||
<RowDefinition/>
|
||||
|
@ -1952,15 +1952,15 @@
|
|||
</Style>
|
||||
</GridView.ColumnHeaderContainerStyle>
|
||||
|
||||
<GridViewColumn Header="Run#" DisplayMemberBinding="{Binding Index}" Width="50"/>
|
||||
<GridViewColumn Header="Recipe Name" DisplayMemberBinding="{Binding RecipeName}" Width="180"/>
|
||||
<GridViewColumn Header="#" DisplayMemberBinding="{Binding Index}" Width="30"/>
|
||||
<GridViewColumn Header="Recipe Name" DisplayMemberBinding="{Binding RecipeName}" />
|
||||
<!--<GridViewColumn Header="Duration" DisplayMemberBinding="{Binding StatisticsStart, StringFormat='{}{0:MM/dd hh:mm:ss.fff}'}" Width="80"/>-->
|
||||
<GridViewColumn Header="Duration" Width="140">
|
||||
<GridViewColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock>
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0:HH:mm:ss}-{1:HH:mm:ss}">
|
||||
<MultiBinding StringFormat="{}{0:HH:mm:ss} - {1:HH:mm:ss}">
|
||||
<Binding Path="ProcessBegin"/>
|
||||
<Binding Path="ProcessEnd"/>
|
||||
</MultiBinding>
|
||||
|
|
Loading…
Reference in New Issue