添加 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,202 @@
using MainShell.Common;
using MainShell.Hardware;
using MaxwellFramework.Core.Attributes;
using MwFramework.Device;
using System;
namespace MainShell.Models
{
[Singleton]
public class VisionParController
{
private readonly HardwareManager _hardwareManager;
public VisionParController(HardwareManager hardwareManager)
{
_hardwareManager = hardwareManager ?? throw new ArgumentNullException(nameof(hardwareManager));
}
public void SetTopPositionVisionPars(CameraConfig cameraConfig, UpCamLightConfig upCamLightConfig)
{
SetTopPositionCameraPars(cameraConfig);
SetUpCamLightPars(upCamLightConfig);
}
public void SetBottomPositionVisionPars(CameraConfig cameraConfig, DownCamLightConfig downCamLightConfig)
{
SetBottomPositionCameraPars(cameraConfig);
SetDownCamLightPars(downCamLightConfig);
}
public void SetMapVisionPars(CameraConfig cameraConfig, MapCamLightConfig mapCamLightConfig)
{
SetMapCameraPars(cameraConfig);
SetMapCamLightPars(mapCamLightConfig);
}
public void SetTopPositionCameraPars(CameraConfig config)
{
MwCamera camera = GetCamera(CameraType.TopPositionCamera);
SetCameraPars(camera, config);
}
public void SetBottomPositionCameraPars(CameraConfig config)
{
MwCamera camera = GetCamera(CameraType.MapCamera);
SetCameraPars(camera, config);
}
public void SetMapCameraPars(CameraConfig config)
{
MwCamera camera = GetCamera(CameraType.MapCamera);
SetCameraPars(camera, config);
}
public void ConfigureCameraForStream(CameraType cameraType)
{
MwCamera camera = GetCamera(cameraType);
EnsureCameraAvailable(camera, cameraType);
RetryMechanism.RetryIfNeeded(
() => camera.SetTriggerMode(CameraTriggerMode.Off) == DriverLibResult.DriverLibNoError,
string.Format("{0} 设置连续流触发模式失败", camera.ConnectId.CategoryName));
}
public void ConfigureCameraForSoftTrigger(CameraType cameraType, double? triggerDelay = null)
{
MwCamera camera = GetCamera(cameraType);
EnsureCameraAvailable(camera, cameraType);
RetryMechanism.RetryIfNeeded(
() => camera.SetTriggerMode(CameraTriggerMode.On) == DriverLibResult.DriverLibNoError,
string.Format("{0} 设置软触发模式失败", camera.ConnectId.CategoryName));
RetryMechanism.RetryIfNeeded(
() => camera.SetTriggerSource(CameraTriggerSource.Software) == DriverLibResult.DriverLibNoError,
string.Format("{0} 设置软触发源失败", camera.ConnectId.CategoryName));
if (triggerDelay.HasValue)
{
RetryMechanism.RetryIfNeeded(
() => camera.SetTriggerDelay(triggerDelay.Value) == DriverLibResult.DriverLibNoError,
string.Format("{0} 设置触发延时失败", camera.ConnectId.CategoryName));
}
}
public void StartCameraGrabbing(CameraType cameraType)
{
MwCamera camera = GetCamera(cameraType);
EnsureCameraAvailable(camera, cameraType);
RetryMechanism.RetryIfNeeded(
() =>
{
DriverLibResult result = camera.StartGrabbing();
return result == DriverLibResult.DriverLibNoError || result == DriverLibResult.DriverLibDeviceAlreadyGrabbing;
},
string.Format("{0} 启动抓流失败", camera.ConnectId.CategoryName));
}
public void StopCameraGrabbing(CameraType cameraType)
{
MwCamera camera = GetCamera(cameraType);
EnsureCameraAvailable(camera, cameraType);
RetryMechanism.RetryIfNeeded(
() =>
{
DriverLibResult result = camera.StopGrabbing();
return result == DriverLibResult.DriverLibNoError || result == DriverLibResult.DriverLibDeviceNotGrabbing;
},
string.Format("{0} 停止抓流失败", camera.ConnectId.CategoryName));
}
public void EnsureCameraGrabbing(CameraType cameraType)
{
MwCamera camera = GetCamera(cameraType);
EnsureCameraAvailable(camera, cameraType);
if (!camera.IsGrabbing)
{
throw new InvalidOperationException(string.Format("相机 '{0}' 当前未处于抓流状态。", cameraType));
}
}
public void SetCameraPars(MwCamera camera, CameraConfig config)
{
if (camera == null)
{
throw new ArgumentNullException(nameof(camera));
}
if (config == null)
{
throw new ArgumentNullException(nameof(config));
}
RetryMechanism.RetryIfNeeded(
() => camera.SetExposureTime(config.ExposureTime) == DriverLibResult.DriverLibNoError,
string.Format("{0} 设置曝光失败", camera.ConnectId.CategoryName));
RetryMechanism.RetryIfNeeded(
() => camera.SetGain(config.Gain) == DriverLibResult.DriverLibNoError,
string.Format("{0} 设置增益失败", camera.ConnectId.CategoryName));
}
public void SetDownCamLightPars(DownCamLightConfig config)
{
if (config == null)
{
throw new ArgumentNullException(nameof(config));
}
_hardwareManager.SetDownPointBlueLightIntensity(config.PointBlueLight);
_hardwareManager.SetDownRingBlueLightIntensity(config.RingBlueLight);
_hardwareManager.SetDownPointRedLightIntensity(config.PointRedLight);
_hardwareManager.SetDownRingRedLightIntensity(config.RingRedLight);
}
public void SetUpCamLightPars(UpCamLightConfig config)
{
if (config == null)
{
throw new ArgumentNullException(nameof(config));
}
_hardwareManager.SetUpPointBlueLightIntensity(config.PointBlueLight);
_hardwareManager.SetUpRingBlueLightIntensity(config.RingBlueLight);
_hardwareManager.SetUpPointRedLightIntensity(config.PointRedLight);
_hardwareManager.SetUpRingRedLightIntensity(config.RingRedLight);
_hardwareManager.SetUpRedBackLightIntensity(config.RedBackLight);
}
public void SetMapCamLightPars(MapCamLightConfig config)
{
if (config == null)
{
throw new ArgumentNullException(nameof(config));
}
_hardwareManager.SetMapBlueLightIntensity(config.BlueLight);
_hardwareManager.SetMapRedLightIntensity(config.RedLight);
}
private MwCamera GetCamera(CameraType cameraType)
{
return _hardwareManager.GetCamera(cameraType).Camera;
}
private static void EnsureCameraAvailable(MwCamera camera, CameraType cameraType)
{
if (camera == null)
{
throw new InvalidOperationException(string.Format("相机 '{0}' 不存在。", cameraType));
}
if (!camera.IsOpen)
{
throw new InvalidOperationException(string.Format("相机 '{0}' 未打开。", cameraType));
}
}
}
}