Dispenser/DispenserCore/Service/CameraInternalParamsService.cs

112 lines
3.2 KiB
C#
Raw Normal View History

2024-08-16 07:20:09 +00:00
using DispenserCommon.DB;
using DispenserCommon.Ioc;
using DispenserCommon.Utils;
using DispenserCore.Model.Entity;
using DispenserHal.Camera.Factory;
namespace DispenserCore.Service;
[Component]
public class CameraInternalParamsService
{
private static readonly SqliteHelper Db = ServiceLocator.GetService<SqliteHelper>();
/// <summary>
/// 获取wafer相机参数
/// </summary>
/// <returns></returns>
public CameraInternalParams? GetWaferParams()
{
return Db.Query<CameraInternalParams>("select * from camera_internal_params where type = 'wafer'")
.FirstOrDefault();
}
/// <summary>
/// 获取基材相机参数
/// </summary>
/// <returns></returns>
public CameraInternalParams? GetSubstrateParams()
{
return Db.Query<CameraInternalParams>("select * from camera_internal_params where type = 'substrate'")
.FirstOrDefault();
}
/// <summary>
/// 保存或者更新参数
/// </summary>
/// <param name="cameraInternalParams"></param>
/// <returns></returns>
public CameraInternalParams SaveOrUpdate(CameraInternalParams cameraInternalParams)
{
return Db.SaveOrUpdate(cameraInternalParams);
}
/// <summary>
/// 将晶圆拍照参数写入相机
/// </summary>
public void FlushWaferParamsToCamera()
{
var waferParams = GetWaferParams();
if (waferParams != null)
{
FlushParamsToCamera(waferParams);
}
}
/// <summary>
/// 将基材拍照参数写入相机
/// </summary>
public void FlushSubstrateParamsToCamera()
{
var substrateParams = GetSubstrateParams();
if (substrateParams != null)
{
FlushParamsToCamera(substrateParams);
}
}
/// <summary>
/// 将参数写入相机
/// </summary>
/// <param name="cameraInternalParams"></param>
private void FlushParamsToCamera(CameraInternalParams cameraInternalParams)
{
var camera = CameraManager.GetCamera()!;
var properties = cameraInternalParams.GetType().GetProperties();
foreach (var property in properties)
{
var propertyName = property.Name;
if (propertyName == nameof(CameraInternalParams.Type)) continue;
var type = property.PropertyType.Name;
if (type.ToLower().Contains("enum"))
{
type = "Enum";
}
var value = property.GetValue(cameraInternalParams);
if (value == null) continue;
switch (type)
{
case "Int32":
camera.SetIntValue(propertyName, (int)value);
break;
case "Boolean":
camera.SetBoolValue(propertyName, (bool)value);
break;
case "Single":
var @decimal = (float)Convert.ToDecimal(value);
camera.SetFloatValue(propertyName, @decimal);
break;
case "Enum":
var val = Convert.ToUInt32(value);
camera.SetEnumValue(propertyName, val);
break;
}
}
}
}