添加 MX-PD-盘古 项目文件

将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
Shi.Ji
2026-05-18 11:43:09 +08:00
parent 03632a379d
commit e31d3560bb
739 changed files with 99783 additions and 0 deletions

View File

@@ -0,0 +1,182 @@
using MainShell.Common;
using MainShell.Hardware;
using MainShell.Manual.Model;
using MainShell.Models;
using MainShell.Process;
using MainShell.ProcessResult;
using MainShell.Recipe.Models;
using MainShell.Resources.CustomControl;
using MaxwellFramework.Core.Interfaces;
using Stylet;
using System;
using System.Threading.Tasks;
namespace MainShell.Manual.ViewModel
{
public class DieStatisticsModel : PropertyChangedBase
{
private int _totalDieCount;
public int TotalDieCount
{
get => _totalDieCount;
set
{
if (SetAndNotify(ref _totalDieCount, value))
{
UpdatePassRate();
}
}
}
private int _okDieCount;
public int OkDieCount
{
get => _okDieCount;
set
{
if (SetAndNotify(ref _okDieCount, value))
{
UpdatePassRate();
}
}
}
private int _ngDieCount;
public int NgDieCount
{
get => _ngDieCount;
set => SetAndNotify(ref _ngDieCount, value);
}
private double _averageSpacingX;
public double AverageSpacingX
{
get => _averageSpacingX;
set => SetAndNotify(ref _averageSpacingX, value);
}
private double _averageSpacingY;
public double AverageSpacingY
{
get => _averageSpacingY;
set => SetAndNotify(ref _averageSpacingY, value);
}
private double _passRate;
public double PassRate
{
get => _passRate;
private set => SetAndNotify(ref _passRate, value);
}
private void UpdatePassRate()
{
PassRate = TotalDieCount > 0 ? (double)OkDieCount / TotalDieCount * 100 : 0;
}
}
public class DiePositionViewModel : OperateViewModelBase
{
private readonly RecipeManager _recipeManager;
private readonly IEventAggregator _eventAggregator;
private readonly ProcessResultManager _processResultManager;
private readonly HardwareManager _hardwareManager;
private readonly DiePositionService _diePositionService;
private DieStatisticsModel _statistics = new DieStatisticsModel();
public DieStatisticsModel Statistics
{
get => _statistics;
set => SetAndNotify(ref _statistics, value);
}
private DieMapModel _dieMapModel = new DieMapModel();
public DieMapModel DieMapModel
{
get => _dieMapModel;
set => SetAndNotify(ref _dieMapModel, value);
}
public DiePositionViewModel(
IEventAggregator eventAggregator,
RecipeManager recipeManager,
ProcessResultManager processResultManager,
HardwareManager hardwareManager,
IParameterManager parameterManager,
DiePositionService diePositionService)
{
_eventAggregator = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator));
_recipeManager = recipeManager ?? throw new ArgumentNullException(nameof(recipeManager));
_processResultManager = processResultManager ?? throw new ArgumentNullException(nameof(processResultManager));
_hardwareManager = hardwareManager ?? throw new ArgumentNullException(nameof(hardwareManager));
_diePositionService = diePositionService ?? throw new ArgumentNullException(nameof(diePositionService));
_cameraAxisViewModel = IoC.Get<Common.Display.ViewModel.CameraAxisViewModel>();
_cameraAxisViewModel.CameraAxisDevices.HardwareDeviceList = hardwareManager.CameraAxisManager.TopCameraAxisDevices;
InitTestMap();
}
private void InitTestMap()
{
DieMapModel.Initialize(3, 3);
for (int r = 0; r < 3; r++)
{
for (int c = 0; c < 3; c++)
{
DieMapModel.SetDieState(r, c, DieState.Available);
}
}
DieMapModel.SetDieState(1, 1, DieState.Current);
}
public async Task StartProcess()
{
MW.WorkFlow.WorkflowContext context = new MW.WorkFlow.WorkflowContext();
context[WorkflowContextKeys.EventAggregator] = _eventAggregator;
context[WorkflowContextKeys.RecipeManager] = _recipeManager;
context[WorkflowContextKeys.ProcessResultManager] = _processResultManager;
context[WorkflowContextKeys.WorkflowName] = ProcessFlowName.DiePositionFlow;
var result = await RunManualActivityAsync(
new DiePositionActivity(ProcessFlowName.DiePositionFlow, _diePositionService),
context);
if (!IsWorkflowCompleted(result))
{
return;
}
DiePositionProcessResult processResult = context.GetData<DiePositionProcessResult>(WorkflowContextKeys.DiePositionResult);
if (processResult == null)
{
return;
}
UpdateStatistics(processResult);
UpdateMap(processResult);
}
private void UpdateStatistics(DiePositionProcessResult processResult)
{
Statistics.TotalDieCount = processResult.TheoryDieCount;
Statistics.OkDieCount = processResult.RecognizedDieCount;
Statistics.NgDieCount = processResult.NgDieCount;
Statistics.AverageSpacingX = processResult.AverageSpacingX;
Statistics.AverageSpacingY = processResult.AverageSpacingY;
}
private void UpdateMap(DiePositionProcessResult processResult)
{
if (processResult.RowCount <= 0 || processResult.ColumnCount <= 0)
{
return;
}
DieMapModel.Initialize(processResult.RowCount, processResult.ColumnCount);
DieMapModel.SetDieState(0, 0, DieState.Current);
}
}
}