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(); /// /// 获取wafer相机参数 /// /// public CameraInternalParams? GetWaferParams() { return Db.Query("select * from camera_internal_params where type = 'wafer'") .FirstOrDefault(); } /// /// 获取基材相机参数 /// /// public CameraInternalParams? GetSubstrateParams() { return Db.Query("select * from camera_internal_params where type = 'substrate'") .FirstOrDefault(); } /// /// 保存或者更新参数 /// /// /// public CameraInternalParams SaveOrUpdate(CameraInternalParams cameraInternalParams) { return Db.SaveOrUpdate(cameraInternalParams); } /// /// 将晶圆拍照参数写入相机 /// public void FlushWaferParamsToCamera() { var waferParams = GetWaferParams(); if (waferParams != null) { FlushParamsToCamera(waferParams); } } /// /// 将基材拍照参数写入相机 /// public void FlushSubstrateParamsToCamera() { var substrateParams = GetSubstrateParams(); if (substrateParams != null) { FlushParamsToCamera(substrateParams); } } /// /// 将参数写入相机 /// /// 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; } } } }