diff --git a/XplorePlane.Tests/Generators/RecipeGenerators.cs b/XplorePlane.Tests/Generators/RecipeGenerators.cs index 976ef23..dd3d1b3 100644 --- a/XplorePlane.Tests/Generators/RecipeGenerators.cs +++ b/XplorePlane.Tests/Generators/RecipeGenerators.cs @@ -2,23 +2,21 @@ using System; using System.Collections.Generic; using System.Linq; using FsCheck; +using FsCheck.Fluent; using XplorePlane.Models; namespace XplorePlane.Tests.Generators { /// - /// FsCheck 自定义生成器:为配方相关模型定义 Arbitrary 生成器。 - /// 使用 Arb.Register<RecipeGenerators>() 注册。 + /// FsCheck 3.x 自定义生成器:为配方相关模型定义 Arbitrary 生成器。 /// public class RecipeGenerators { - // ── PipelineModel: class with settable properties ── - public static Arbitrary PipelineModelArb() { - var gen = from id in Arb.Default.Guid().Generator - from name in Arb.Default.NonEmptyString().Generator - from deviceId in Arb.Default.NonEmptyString().Generator + var gen = from id in ArbMap.Default.GeneratorFor() + from name in ArbMap.Default.GeneratorFor() + from deviceId in ArbMap.Default.GeneratorFor() from ticks in Gen.Choose(0, int.MaxValue) let createdAt = DateTime.MinValue.AddTicks((long)ticks * 10000) let updatedAt = createdAt @@ -31,11 +29,9 @@ namespace XplorePlane.Tests.Generators UpdatedAt = updatedAt, Nodes = new List() }; - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── RecipeStep: reuses StateGenerators for hardware states ── - public static Arbitrary RecipeStepArb() { var gen = from stepIndex in Gen.Choose(0, 100) @@ -44,15 +40,13 @@ namespace XplorePlane.Tests.Generators from detector in StateGenerators.DetectorStateArb().Generator from pipeline in PipelineModelArb().Generator select new RecipeStep(stepIndex, motion, ray, detector, pipeline); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── InspectionRecipe: 0-10 steps with sequential StepIndex ── - public static Arbitrary InspectionRecipeArb() { - var gen = from id in Arb.Default.Guid().Generator - from name in Arb.Default.NonEmptyString().Generator + var gen = from id in ArbMap.Default.GeneratorFor() + from name in ArbMap.Default.GeneratorFor() from ticks in Gen.Choose(0, int.MaxValue) let createdAt = DateTime.MinValue.AddTicks((long)ticks * 10000) let updatedAt = createdAt @@ -64,11 +58,9 @@ namespace XplorePlane.Tests.Generators createdAt, updatedAt, steps.AsReadOnly()); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── RecipeExecutionState ── - public static Arbitrary RecipeExecutionStateArb() { var gen = from totalSteps in Gen.Choose(0, 50) @@ -79,27 +71,32 @@ namespace XplorePlane.Tests.Generators RecipeExecutionStatus.Paused, RecipeExecutionStatus.Completed, RecipeExecutionStatus.Error) - from recipeName in Arb.Default.NonEmptyString().Generator + from recipeName in ArbMap.Default.GeneratorFor() select new RecipeExecutionState(currentStep, totalSteps, status, recipeName.Get); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── Helper: generate a list of steps with sequential StepIndex 0..n-1 ── - private static Gen> GenSequentialSteps(int count) { if (count == 0) return Gen.Constant(new List()); - return Gen.Sequence( - Enumerable.Range(0, count).Select(i => - from motion in StateGenerators.MotionStateArb().Generator - from ray in StateGenerators.RaySourceStateArb().Generator - from detector in StateGenerators.DetectorStateArb().Generator - from pipeline in PipelineModelArb().Generator - select new RecipeStep(i, motion, ray, detector, pipeline) - ) - ).Select(steps => steps.ToList()); + // Build list step by step using SelectMany chain + Gen> result = Gen.Constant(new List()); + for (int i = 0; i < count; i++) + { + var idx = i; + result = from list in result + from motion in StateGenerators.MotionStateArb().Generator + from ray in StateGenerators.RaySourceStateArb().Generator + from detector in StateGenerators.DetectorStateArb().Generator + from pipeline in PipelineModelArb().Generator + select new List(list) + { + new RecipeStep(idx, motion, ray, detector, pipeline) + }; + } + return result; } } -} +} \ No newline at end of file diff --git a/XplorePlane.Tests/Generators/StateGenerators.cs b/XplorePlane.Tests/Generators/StateGenerators.cs index 863c9fe..ed97a0d 100644 --- a/XplorePlane.Tests/Generators/StateGenerators.cs +++ b/XplorePlane.Tests/Generators/StateGenerators.cs @@ -1,17 +1,15 @@ using System; using FsCheck; +using FsCheck.Fluent; using XplorePlane.Models; namespace XplorePlane.Tests.Generators { /// - /// FsCheck 自定义生成器:为所有状态模型定义 Arbitrary 生成器。 - /// 使用 Arb.Register<StateGenerators>() 注册。 + /// FsCheck 3.x 自定义生成器:为所有状态模型定义 Arbitrary 生成器。 /// public class StateGenerators { - // ── 位置范围: -10000 ~ 10000, 速度范围: 0 ~ 1000 ── - private static Gen PositionGen => Gen.Choose(-10000000, 10000000).Select(i => i / 1000.0); @@ -30,8 +28,6 @@ namespace XplorePlane.Tests.Generators private static Gen MatrixGen => Gen.Choose(-10000000, 10000000).Select(i => i / 1000.0); - // ── MotionState: 6 positions + 6 speeds ── - public static Arbitrary MotionStateArb() { var gen = from xm in PositionGen @@ -48,34 +44,28 @@ namespace XplorePlane.Tests.Generators from distSpd in SpeedGen select new MotionState(xm, ym, zt, zd, tiltD, dist, xmSpd, ymSpd, ztSpd, zdSpd, tiltDSpd, distSpd); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── RaySourceState: bool + 2 doubles ── - public static Arbitrary RaySourceStateArb() { - var gen = from isOn in Arb.Default.Bool().Generator + var gen = from isOn in ArbMap.Default.GeneratorFor() from voltage in VoltageGen from power in PowerGen select new RaySourceState(isOn, voltage, power); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── DetectorState: 2 bools + double + string ── - public static Arbitrary DetectorStateArb() { - var gen = from isConnected in Arb.Default.Bool().Generator - from isAcquiring in Arb.Default.Bool().Generator + var gen = from isConnected in ArbMap.Default.GeneratorFor() + from isAcquiring in ArbMap.Default.GeneratorFor() from frameRate in FrameRateGen from res in Gen.Elements("1024x1024", "2048x2048", "2880x2880", "3072x3072", "4260x4260") select new DetectorState(isConnected, isAcquiring, frameRate, res); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── SystemState: OperationMode enum + bool + string ── - public static Arbitrary SystemStateArb() { var gen = from mode in Gen.Elements( @@ -83,28 +73,24 @@ namespace XplorePlane.Tests.Generators OperationMode.Scanning, OperationMode.CTAcquire, OperationMode.RecipeRun) - from hasError in Arb.Default.Bool().Generator - from msg in Arb.Default.NonEmptyString().Generator + from hasError in ArbMap.Default.GeneratorFor() + from msg in ArbMap.Default.GeneratorFor() let errorMessage = hasError ? msg.Get : string.Empty select new SystemState(mode, hasError, errorMessage); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── CameraState: 2 bools + null CurrentFrame + 2 ints + double ── - public static Arbitrary CameraStateArb() { - var gen = from isConnected in Arb.Default.Bool().Generator - from isStreaming in Arb.Default.Bool().Generator + var gen = from isConnected in ArbMap.Default.GeneratorFor() + from isStreaming in ArbMap.Default.GeneratorFor() from width in Gen.Choose(0, 8192) from height in Gen.Choose(0, 8192) from frameRate in FrameRateGen select new CameraState(isConnected, isStreaming, null, width, height, frameRate); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── CalibrationMatrix: 9 doubles ── - public static Arbitrary CalibrationMatrixArb() { var gen = from m11 in MatrixGen @@ -117,30 +103,26 @@ namespace XplorePlane.Tests.Generators from m32 in MatrixGen from m33 in MatrixGen select new CalibrationMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── PhysicalPosition: 3 doubles ── - public static Arbitrary PhysicalPositionArb() { var gen = from x in PositionGen from y in PositionGen from z in PositionGen select new PhysicalPosition(x, y, z); - return Arb.From(gen); + return gen.ToArbitrary(); } - // ── LinkedViewState: PhysicalPosition + bool + DateTime ── - public static Arbitrary LinkedViewStateArb() { var gen = from pos in PhysicalPositionArb().Generator - from isExecuting in Arb.Default.Bool().Generator + from isExecuting in ArbMap.Default.GeneratorFor() from ticks in Gen.Choose(0, int.MaxValue) let dt = DateTime.MinValue.AddTicks((long)ticks * 10000) select new LinkedViewState(pos, isExecuting, dt); - return Arb.From(gen); + return gen.ToArbitrary(); } } -} +} \ No newline at end of file diff --git a/XplorePlane.Tests/Helpers/Define.cs b/XplorePlane.Tests/Helpers/Define.cs deleted file mode 100644 index a0d687b..0000000 --- a/XplorePlane.Tests/Helpers/Define.cs +++ /dev/null @@ -1,1538 +0,0 @@ -using BaseFunction; -using BR.AN.PviServices; -using CT_Motion_WinForm; -using HPC.Hamamatsu.MFX; -using iDetector; -using IndustrialCT.BaseUnit; -using IndustrialCT.ScanMode; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using System.Windows.Threading; -using XLibWrapper; -using HxGNSecurity; -using System.Data; -using System.Windows.Input; - -namespace IndustrialCT.Define -{ - public class InitParams - { - public static string configFilePath = Application.StartupPath + "\\File\\IndustrialCTConfig.ini"; - /// - ///全局变量初始化函数 - /// - public static void initParams() - { - // 读取配置文件 - CTDefine.PCLanguage = FileIni.ReadInt(configFilePath, "IndustrialCT", "Language"); - CTDefine.iAxisDirection = FileIni.ReadInt(configFilePath, "IndustrialCT", "AxisDirection"); - CTDefine.isUpload = FileIni.ReadBool(configFilePath, "IndustrialCT", "isUpload"); - CTDefine.bLicenseFlag = FileIni.ReadBool(configFilePath, "IndustrialCT", "License"); - CTDefine.ExhibitionFlag = FileIni.ReadInt(configFilePath, "IndustrialCT", "ExhibitionFlag"); - CTDefine.Xray1 = FileIni.ReadString(configFilePath, "XRay", "Xray1"); - CTDefine.Xray2 = FileIni.ReadString(configFilePath, "XRay", "Xray2"); - CTDefine.AreaDet = FileIni.ReadString(configFilePath, "Detector", "AreaDet"); - CTDefine.LineDet = FileIni.ReadString(configFilePath, "Detector", "LineDet"); - - detectorInit(); - CTDefine.monitorLight = FileIni.ReadInt(configFilePath, "IndustrialCT", "monitorLight"); - CTDefine.isMultiAxis = FileIni.ReadInt(configFilePath, "IndustrialCT", "isMultiAxis"); - CTDefine.functionMode = FileIni.ReadInt(configFilePath, "IndustrialCT", "FunctionMode"); - CTDefine.password = HxGNSec.DecryptString(FileIni.ReadString(configFilePath, "IndustrialCT", "Pwd")); - CTDefine.DC800 = FileIni.ReadBool(configFilePath, "Hardware", "DCMotion"); - CTDefine.isSaveParams = FileIni.ReadBool(configFilePath, "IndustrialCT", "isSaveParams"); - CTDefine.useXrayTime = FileIni.ReadDouble(configFilePath, "XRay", "useTimes") * 60; - CTDefine.dFilamentTargetTime = FileIni.ReadDouble(configFilePath, "XRay", "FilamentTargetTime") * 60; - CTDefine.dFilamentUseTime = FileIni.ReadDouble(configFilePath, "XRay", "FilamentUseTime"); - CTDefine.softwareMode = FileIni.ReadInt(configFilePath, "IndustrialCT", "mode");//0是单源单探,1是双源双探 - CTDefine.detType = FileIni.ReadInt(configFilePath, "Detector", "DetType");//0是IRay,1是Varex - CTDefine.HProtate = FileIni.ReadInt(configFilePath, "Hardware", "HProtate"); - CTDefine.valuebinPath = Path.Combine(Application.StartupPath, "XploreInsight.bin"); - // 解密并从文件中读取 - //double[] decryptedValues = Encryption.DecryptFromFile(CTDefine.valuebinPath); - - XRayDfnComet225.xrayAdvancedSetPath = FileIni.ReadString(configFilePath, "XRay", "xrayAdvancedSetPath"); - XRayDfnComet225.isStartVacon = FileIni.ReadBool(configFilePath, "XRay", "isStartVacon"); - - - DetectorDfnArea.IrayDetectorPath = Path.Combine(Application.StartupPath, FileIni.ReadString(configFilePath, "Detector", "IrayDetectorPath")); - DetectorDfnArea.iDetectorPath = FileIni.ReadString(configFilePath, "Detector", "iDetectorPath"); - DetectorDfnArea.varexBadPath1 = FileIni.ReadString(configFilePath, "Detector", "BadPixel1"); - DetectorDfnArea.varexBadPath2 = FileIni.ReadString(configFilePath, "Detector", "BadPixel2"); - DetectorDfnArea.varexBadPath3 = FileIni.ReadString(configFilePath, "Detector", "BadPixel3"); - DetectorDfnArea.varexBadPath4 = FileIni.ReadString(configFilePath, "Detector", "BadPixel4"); - CTDefine.iDetExternalTrigger = FileIni.ReadInt(configFilePath, "Detector", "ExternalTrigger"); - //MotionDfn.strConfigFile = Path.Combine(Application.StartupPath, FileIni.ReadString(configFilePath, "MotionControl", "strConfigFile")); - PlcDfn450.plcIP = FileIni.ReadString(configFilePath, "TCP", "PLC_IP"); - PlcDfn.plcIP = FileIni.ReadString(configFilePath, "TCP", "PLC_IP"); - PlcDfn130.plcIP = FileIni.ReadString(configFilePath, "TCP", "PLC_IP"); - ReconDfn.reconPath = FileIni.ReadString(configFilePath, "Reconstruction", "reconPath"); - ReconDfn.transPath = Path.Combine(ReconDfn.reconPath, "HexagonCTData"); - - CorrectParams.laser = FileIni.ReadInt(configFilePath, "Hardware", "Laser"); - - CorrectParams.compensate = FileIni.ReadInt(configFilePath, "CorrectParams", "compensate"); - CorrectParams.compensateFDD = FileIni.ReadInt(configFilePath, "CorrectParams", "compensateFDD"); - CorrectParams.mappingYcenter = FileIni.ReadInt(configFilePath, "CorrectParams", "mappingYcenter"); - CorrectParams.mappingDetYcenter = FileIni.ReadInt(configFilePath, "CorrectParams", "mappingDetYcenter"); - //CorrectParams.Ycenter = decryptedValues[0]; - //CorrectParams.SDD = decryptedValues[1]; - //CorrectParams.k = decryptedValues[2]; - //CorrectParams.b = decryptedValues[3]; - //CorrectParams.kFDD = decryptedValues[4]; - //CorrectParams.bFDD = decryptedValues[5]; - - - CorrectParams.SDD = FileIni.ReadDouble(configFilePath, "CorrectParams", "FDD"); - CorrectParams.k = FileIni.ReadDouble(configFilePath, "CorrectParams", "kx "); - CorrectParams.b = FileIni.ReadDouble(configFilePath, "CorrectParams", "kb"); - CorrectParams.kFDD = FileIni.ReadDouble(configFilePath, "CorrectParams", "kFDDx"); - CorrectParams.bFDD = FileIni.ReadDouble(configFilePath, "CorrectParams", "kFDDb"); - CorrectParams.Ycenter = FileIni.ReadDouble(configFilePath, "CorrectParams", "Ycenter"); - CorrectParams.DetYcenter = FileIni.ReadDouble(configFilePath, "CorrectParams", "DetYcenter"); - - - Encryption.WriteCorrectParamsInit(); - CorrectParams.detector_horizontal_offset = FileIni.ReadDouble(configFilePath, "CorrectParams", "Detector_Horizontal_Offset"); - CorrectParams.detector_rotation_offset = FileIni.ReadDouble(configFilePath, "CorrectParams", "Detector_Rotation_Offset"); - - string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - XRayDfnComet225.XrayCsvPath = Path.Combine(Application.StartupPath, "XrayStaticTime.csv"); - - HardWareDfn.camera1IP = FileIni.ReadString(configFilePath, "Camera", "camera1IP"); - HardWareDfn.camera2IP = FileIni.ReadString(configFilePath, "Camera", "camera2IP"); - HardWareDfn.cameraUser = FileIni.ReadString(configFilePath, "Camera", "cameraUser"); - HardWareDfn.cameraPwd = FileIni.ReadString(configFilePath, "Camera", "cameraPwd"); - HardWareDfn.reconIP = FileIni.ReadString(configFilePath, "Reconstruction", "reconIP"); - HardWareDfn.reconSocket = FileIni.ReadString(configFilePath, "Reconstruction", "reconComputerIP"); - HardWareDfn.comet225IP = FileIni.ReadString(configFilePath, "XRay", "Comet225IP"); - } - public static void initParamsFromDBTable() - { - // 读取配置文件 - CTDefine.PCLanguage = int.Parse(DBTables.dtCTConfig.Rows[0]["Language"].ToString()); - CTDefine.bLicenseFlag = DBTables.dtCTConfig.Rows[0]["LicenseFlag"].ToString() == "0" ? false : true; - CTDefine.isMultiAxis = int.Parse(DBTables.dtCTConfig.Rows[0]["MultiAxisFlag"].ToString()); - CTDefine.monitorLight = int.Parse(DBTables.dtCTConfig.Rows[0]["MonitorLightFlag"].ToString()); - CTDefine.softwareMode = int.Parse(DBTables.dtCTConfig.Rows[0]["SoftwareMode"].ToString()); - CTDefine.functionMode = int.Parse(DBTables.dtCTConfig.Rows[0]["FunctionMode"].ToString()); - CTDefine.iAxisDirection = int.Parse(DBTables.dtCTConfig.Rows[0]["AxisDirection"].ToString()); - CTDefine.ExhibitionFlag = int.Parse(DBTables.dtCTConfig.Rows[0]["ExhibitionFlag"].ToString()); - CTDefine.password = DBTables.dtCTConfig.Rows[0]["LoginPwd"].ToString(); - HardWareDfn.reconIP = DBTables.dtCTConfig.Rows[0]["ReconPCIP"].ToString(); - HardWareDfn.reconSocket = DBTables.dtCTConfig.Rows[0]["ReconPCIP"].ToString(); - PlcDfn450.plcIP = DBTables.dtCTConfig.Rows[0]["PLCIP"].ToString(); - PlcDfn.plcIP = DBTables.dtCTConfig.Rows[0]["PLCIP"].ToString(); - PlcDfn130.plcIP = DBTables.dtCTConfig.Rows[0]["PLCIP"].ToString(); - ReconDfn.reconPath = DBTables.dtCTConfig.Rows[0]["ReconPCPath"].ToString(); - ReconDfn.transPath = Path.Combine(ReconDfn.reconPath, "HexagonCTData"); - - - CTDefine.Xray1 = DBTables.dtXrayConfig.Rows[0]["Xray1Name"].ToString(); - CTDefine.Xray2 = DBTables.dtXrayConfig.Rows[0]["Xray2Name"].ToString(); - HardWareDfn.comet225IP = DBTables.dtXrayConfig.Rows[0]["Xray1IP"].ToString(); - CTDefine.useXrayTime = double.Parse(DBTables.dtXrayConfig.Rows[0]["Xray1RunTime"].ToString()) * 60; - CTDefine.dFilamentTargetTime = double.Parse(DBTables.dtXrayConfig.Rows[0]["Filament1TargetTime"].ToString()) * 60; - CTDefine.dFilamentUseTime = double.Parse(DBTables.dtXrayConfig.Rows[0]["Filament1UseTime"].ToString()); - XRayDfnComet225.xrayAdvancedSetPath = DBTables.dtXrayConfig.Rows[0]["Xray1EXEPath"].ToString(); - - - CTDefine.AreaDet = DBTables.dtDetConfig.Rows[0]["AreaDetName"].ToString(); - CTDefine.LineDet = DBTables.dtDetConfig.Rows[0]["LineDetName"].ToString(); - - DetectorDfnArea.IrayDetectorPath = Path.Combine(Application.StartupPath, DBTables.dtDetConfig.Rows[0]["IRayDetWorkPath"].ToString()); - DetectorDfnArea.iDetectorPath = DBTables.dtDetConfig.Rows[0]["IRayDetEXEPath"].ToString(); - DetectorDfnArea.varexBadPath1 = DBTables.dtDetConfig.Rows[0]["VarexBadPixel1"].ToString(); - DetectorDfnArea.varexBadPath2 = DBTables.dtDetConfig.Rows[0]["VarexBadPixel2"].ToString(); - DetectorDfnArea.varexBadPath3 = DBTables.dtDetConfig.Rows[0]["VarexBadPixel3"].ToString(); - DetectorDfnArea.varexBadPath4 = DBTables.dtDetConfig.Rows[0]["VarexBadPixel4"].ToString(); - CTDefine.iDetExternalTrigger = int.Parse(DBTables.dtDetConfig.Rows[0]["ExternalTrigger"].ToString()); - CTDefine.detType = int.Parse(DBTables.dtDetConfig.Rows[0]["DetType"].ToString()); //0是IRay,1是Varex - detectorInit(); - - CorrectParams.laser = int.Parse(DBTables.dtCompenConfig.Rows[0]["LaserCompenFlag"].ToString()); - CorrectParams.compensate = int.Parse(DBTables.dtCompenConfig.Rows[0]["FODCompenFlag"].ToString()); - CorrectParams.compensateFDD = int.Parse(DBTables.dtCompenConfig.Rows[0]["FDDCompenFlag"].ToString()); - CorrectParams.mappingYcenter = int.Parse(DBTables.dtCompenConfig.Rows[0]["ObjYCenterCompenFlag"].ToString()); - CorrectParams.mappingDetYcenter = int.Parse(DBTables.dtCompenConfig.Rows[0]["DetYCenterCompenFlag"].ToString()); - CorrectParams.SDD = double.Parse(DBTables.dtCompenConfig.Rows[0]["FDD"].ToString()); - CorrectParams.detector_horizontal_offset = double.Parse(DBTables.dtCompenConfig.Rows[0]["DetHorizontalOffset"].ToString()); - CorrectParams.detector_rotation_offset = double.Parse(DBTables.dtCompenConfig.Rows[0]["DetRotationOffset"].ToString()); - - CorrectParams.k = double.Parse(DBTables.dtCompenData.Rows[0]["FODkFactor"].ToString()); - CorrectParams.b = double.Parse(DBTables.dtCompenData.Rows[0]["FODbFactor"].ToString()); - CorrectParams.kFDD = double.Parse(DBTables.dtCompenData.Rows[0]["FDDkFactor"].ToString()); - CorrectParams.bFDD = double.Parse(DBTables.dtCompenData.Rows[0]["FDDAreaDetbFactor"].ToString()); - CorrectParams.Ycenter = double.Parse(DBTables.dtCompenData.Rows[0]["ObjYCenter"].ToString()); - CorrectParams.DetYcenter = double.Parse(DBTables.dtCompenData.Rows[0]["DetYCenter"].ToString()); - - HardWareDfn.camera1IP = DBTables.dtCameraConfig.Rows[0]["Camera1IP"].ToString(); - HardWareDfn.camera2IP = DBTables.dtCameraConfig.Rows[0]["Camera2IP"].ToString(); - HardWareDfn.cameraUser = DBTables.dtCameraConfig.Rows[0]["CameraUser"].ToString(); - HardWareDfn.cameraPwd = DBTables.dtCameraConfig.Rows[0]["CameraPwd"].ToString(); - - //SuperVolume 1V Offset 补偿读取 - MotionDfn.dSV1VZOffset = float.Parse(DBTables.dtAxisOffsetConfig.Rows[0]["ZCompOffset"].ToString()); - MotionDfn.iXCompensationPos = double.Parse(DBTables.dtAxisOffsetConfig.Rows[0]["XCompOffset"].ToString()); - MotionDfn.iYCompensationPos = double.Parse(DBTables.dtAxisOffsetConfig.Rows[0]["YCompOffset"].ToString()); - MotionDfn.iDCompensationPos = double.Parse(DBTables.dtAxisOffsetConfig.Rows[0]["DCompOffset"].ToString()); - MotionDfn.strZ1Axes = DBTables.dtAxisOffsetConfig.Rows[0]["Z1AxisName"].ToString(); - MotionDfn.strZ2Axes = DBTables.dtAxisOffsetConfig.Rows[0]["Z2AxisName"].ToString(); - if (DBTables.dtAxisOffsetConfig.Rows[0]["HaveDetYFlag"].ToString()=="1") - { - MotionDfn.bHaveDetYFlag = true; - } - else - { - MotionDfn.bHaveDetYFlag = false; - } - - } - public static void detectorInit() - { - if (CTDefine.AreaDet == "Varex4343CT") - { - varex4343det(); - } - else if (CTDefine.AreaDet == "IRay1717M") - { - DetectorDfnArea.detectorWidth = 0.139 * 3072; - DetectorDfnArea.detectorHeight = 0.139 * 3072; - DetectorDfnArea.pixel_distance = 0.139; - DetectorDfnArea.Image_Width = 3072; - DetectorDfnArea.Image_Height = 3072; - ReconDfn.ROIx = 3072; - ReconDfn.ROIy = 3072; - ReconDfn.roixMax = 3072; - ReconDfn.roiyMax = 3072; - ReconDfn.roizMax = 3072; - ReconDfn.roizMax1 = 3072; - DetectorDfnArea.freq1_1 = 6; - DetectorDfnArea.freq2_2 = 12; - DetectorDfnArea.freq3_3 = 18; - DetectorDfnArea.detConfigPath = Path.Combine(Application.StartupPath, "work_dir\\NDT1717M\\DynamicApplicationMode.ini"); - DetectorDfnArea.detConfigPathTime = Path.Combine(Application.StartupPath, "work_dir\\NDT1717M\\config.ini"); - } - else if (CTDefine.AreaDet == "IRay1717M2") - { - DetectorDfnArea.detectorWidth = 0.139 * 3072; - DetectorDfnArea.detectorHeight = 0.139 * 3060; - DetectorDfnArea.pixel_distance = 0.139; - DetectorDfnArea.Image_Width = 3072; - DetectorDfnArea.Image_Height = 3060; - ReconDfn.ROIx = 3072; - ReconDfn.ROIy = 3060; - ReconDfn.roixMax = 3072; - ReconDfn.roiyMax = 3072; - ReconDfn.roizMax = 3060; - ReconDfn.roizMax1 = 3060; - DetectorDfnArea.freq1_1 = 15; - DetectorDfnArea.freq2_2 = 30; - DetectorDfnArea.freq3_3 = 45; - DetectorDfnArea.freq4_4 = 60; - DetectorDfnArea.detConfigPath = Path.Combine(Application.StartupPath, "work_dir\\NDT1717M2\\DynamicApplicationMode.ini"); - DetectorDfnArea.detConfigPathTime = Path.Combine(Application.StartupPath, "work_dir\\NDT1717M2\\config.ini"); - } - else if (CTDefine.AreaDet == "IRay1717X2") - { - DetectorDfnArea.detectorWidth = 0.1 * 4260; - DetectorDfnArea.detectorHeight = 0.1 * 4260; - DetectorDfnArea.pixel_distance = 0.1; - DetectorDfnArea.Image_Width = 4260; - DetectorDfnArea.Image_Height = 4260; - ReconDfn.ROIx = 4260; - ReconDfn.ROIy = 4260; - ReconDfn.roixMax = 4260; - ReconDfn.roiyMax = 4260; - ReconDfn.roizMax = 4260; - ReconDfn.roizMax1 = 4260; - DetectorDfnArea.freq1_1 = 10; - DetectorDfnArea.freq2_2 = 20; - DetectorDfnArea.freq3_3 = 30; - DetectorDfnArea.freq4_4 = 40; - DetectorDfnArea.detConfigPath = Path.Combine(Application.StartupPath, "work_dir\\NDT1717X2\\DynamicApplicationMode.ini"); - DetectorDfnArea.detConfigPathTime = Path.Combine(Application.StartupPath, "work_dir\\NDT1717X2\\config.ini"); - } - else if (CTDefine.AreaDet == "IRay1012HS") - { - DetectorDfnArea.detectorWidth = 0.1 * 3008; - DetectorDfnArea.detectorHeight = 0.1 * 2496; - DetectorDfnArea.pixel_distance = 0.1; - DetectorDfnArea.Image_Width = 3008; - DetectorDfnArea.Image_Height = 2496; - ReconDfn.ROIx = 3008; - ReconDfn.ROIy = 2496; - ReconDfn.roixMax = 3008; - ReconDfn.roiyMax = 2496; - ReconDfn.roizMax = 3008; - ReconDfn.roizMax1 = 3008; - DetectorDfnArea.freq1_1 = 30; - DetectorDfnArea.freq2_2 = 60; - DetectorDfnArea.detConfigPath = Path.Combine(Application.StartupPath, "work_dir\\NDT1012HS\\DynamicApplicationMode.ini"); - DetectorDfnArea.detConfigPathTime = Path.Combine(Application.StartupPath, "work_dir\\NDT1012HS\\config.ini"); - } - else if (CTDefine.AreaDet == "Varex4343N") - { - varex4343det(); - DetectorDfnArea.freq4_4 = 60; - } - } - - private static void varex4343det() - { - DetectorDfnArea.detectorWidth = 0.15 * 2880; - DetectorDfnArea.detectorHeight = 0.15 * 2880; - DetectorDfnArea.pixel_distance = 0.15; - DetectorDfnArea.Image_Width = 2880; - DetectorDfnArea.Image_Height = 2880; - ReconDfn.ROIx = 2880; - ReconDfn.ROIy = 2880; - ReconDfn.roixMax = 2880; - ReconDfn.roiyMax = 2880; - ReconDfn.roizMax = 2880; - ReconDfn.roizMax1 = 2880; - DetectorDfnArea.freq1_1 = 15; - DetectorDfnArea.freq2_2 = 30; - DetectorDfnArea.freq3_3 = 45; - } - } - - public class DBTables - { - public static DataTable dtCompenConfig = new DataTable(); - public static DataTable dtCompenData = new DataTable(); - public static DataTable dtCTConfig = new DataTable(); - public static DataTable dtXrayConfig = new DataTable(); - public static DataTable dtDetConfig = new DataTable(); - public static DataTable dtCameraConfig = new DataTable(); - public static DataTable dtAlighCenterConfig = new DataTable(); - - public static DataTable dtAxisDistanceConfig = new DataTable(); - public static DataTable dtAxisOffsetConfig = new DataTable(); - } - - // 定义扫描模式枚举,覆盖你所有的业务场景 - public enum ScanModeEnum - { - // 无模式(默认值,可根据业务调整) - None, - // DR模式 - DRMode, - // 探测器模式 - DetectorMode, - // 高质量扫描 - HighScan, - // 快速扫描 - QuickScan, - // 螺旋扫描 - HelixScan, - // 螺旋快速扫描 - HelixScanQuick, - // 扩展快速 - ExtendQuick, - // 扩展优质 - ExtendQuality, - // 垂直快速 - VerticalQuick, - // 垂直优质 - VerticalQuality, - // 垂直扩展快速 - VerticalExtendQuick, - // 垂直扩展优质 - VerticalExtendQuality, - // 水平快速 - HorizontalQuick, - // 水平优质 - HorizontalQuality, - // 螺旋扩展扫描 - HelixExtendScan, - // 螺旋扩展快速扫描 - HelixExtendScanQuick, - // 线阵DR扫描 - LineDRScan, - // 线阵螺旋优质扫描 - LineHelixQualityScan, - // 线阵螺旋快速扫描 - LineHelixQuickScan, - // 线阵圆周优质扫描 - LineCircleQualityScan, - // 线阵圆周快速扫描 - LineCircleQuickScan - } - //CT定义参数 - public class CTDefine - { - - // CT机型 - public static string ctModel = "225CT"; - // 连接状态 - public static bool isConnected_xRay225 = false; - public static bool isConnected_xRay450 = false; - public static bool isConnected_xRayWorx300 = false; - public static bool isConnected_xRayViscom225 = false; - public static bool isConnected_xRayViscom320 = false; - public static bool isConnected_xRayHama130 = false; - public static bool isConnected_xRayFineTec300 = false; - public static bool isConnected_AreaDet = false; - public static bool isConnected_DTDet = false; - public static bool isConnected_mc = false; - public static bool dataSaveThread = true; - public static float cpuUsage; - public static bool isUpload = false; - public static string password = "HMQ"; - public static bool isSaveParams = false;//是否在软件关闭的时候保存当前界面的参数配置 - /// - /// 0是单源单探225,1是双源双探BYD,2是双源单探Demo,3=EVE亿纬锂能项目(单源单探);4=SV1V小机器;5=300C(Viscom320);只要不是0 1 3 4,其他的值都是commonBanner - /// - public static int functionMode = 0;//func的模式选择 - public static int AvgFrameNum = 1; - public static bool isPlcConnect = false; - - // 单个变量控制所有扫描模式,替代原来的所有bool - public static ScanModeEnum CurrentScanMode = ScanModeEnum.None; - /// 精细 Det水平拼接 - - public static bool LineDRScanParamsOK = false; - public static bool LineDRStartScanFlag = false; - public static bool saveDataThread = true; - public static int scanModeState = 0; - public static int saveNum = 0;//存储图像,用于存储线程使用 - public static int acqNum = 0;//精细扫描、快速扫描存储张数 - public static int showNum = 0; - public static int detectorShowNum = -1; - public static string saveImgPath; - public static string saveDRImgPath; - public static int SkipNum = 0; - public static int rotateDegree; - public static int imgWidth; - public static int imgHeight; - /// - /// 在图像显示中显示的全局图像变量 - /// - public static short[] imgData; - public static float[] imgDataGain; - /// - /// 0=DC800运动平台; 1=PLC多轴运动平台 - /// - public static int isMultiAxis = 0; - /// - /// //0是单源单探,1是双源双探,2是双源单探,3是单源双探 - /// - public static int monitorLight = 0; - public static string Xray1 = ""; - public static string Xray2 = ""; - public static string AreaDet = ""; - public static string LineDet = ""; - public static double useXrayTime = 0; - public static bool xrayTimeClick = false; - public static DateTime startXrayTime; - public static DateTime endXrayTime; - public static bool imageAdjust = false; - public static bool histAdjust = false; - public static int histMin = 0; - public static int histMax = 65535; - public static int progressBarNum = 0; - public static bool isDrawCrosshairs = false; - public static bool qualityScanMode = false; - /// - ///探测器类型 iRay=0;Varex=1 - /// - public static int detType = 0; - public static bool DC800 = false; - public static int HProtate = 0; - /// - /// 0=中文;1=英文 - /// - public static int PCLanguage = 0; - /// - /// 机型结构模式:0=225CT架构;1=450CT双源双碳架构;2=SuperVolume1V CT架构 - /// - public static int softwareMode = 0; - public static string valuebinPath = ""; - public static bool autoScanCorrect = false; - public static bool autoScanRecon = false; - public static int autoScanCorrectTimes = 0; - /// - /// 射线源是否开启;True=开启 - /// - public static bool isOpenXRay = false; - public static bool limitedAngle = false; - public static float limitedStartAngle = 0; - public static int callbackImgNum = 0; - public static float turntableStartAngle = 0; - public static float turntableEndAngle = 0; - public static int indexDoProcessBar = 0; - public static string scanModeText; - public static bool updateImg = false; - public static bool qualityScanPause = false; - public static bool twicebarshow = false; - public static string ExpiredTime = ""; - /// - /// DT线阵DR是否扫描完成 - /// - public static bool bFinishLineDRScan = false; - - /// - /// 控制130kV机型移动轴的两个按钮 enable or disable - /// - public static int Control130kVMoveEnable = 0; - public static int ExhibitionFlag = 0; - public static int iCallBackCount = 0; - /// - /// IRay探测器触摸发模式:1=硬触发(外部触发) 2=软触发(内部触发) 默认=2 - /// - public static int iDetectorTriggerModeFlag = 2; - - public static bool bLicenseFlag = false; - public static List listPLCError = new List(); - public static List listShowPLCError = new List(); - - /// - /// 被测产品的半径 单位mm - /// - public static double dMeasureProductRadius = 0.0d; - public static double dMeasureProductHeight = 0.0d; - - //轴方向 - public static int iAxisDirection = 1; - public static string strProjectName = ""; - public static string strScanMode = ""; - public static float fStartLimitScanAngle = 0.0f; - /// - /// 探测器外触发标志位:1启用外触发;0=内触发 - /// - public static int iDetExternalTrigger = 0; - - public static double dFilamentUseTime = 0; - public static double dFilamentTargetTime = 0; - - /// - /// 配置文件类型:0=ini文件配置;1=SQLCipher数据库配置 - /// - public static int iConfigFileType = 0; - //对中校准全局变量 - public static int iAutoAlignDRCount = 0; - public static int iAutoAlignProcess = 0; - } - - public class JitterParams - { - public static bool jitterScanMode = false; - public static double jitterDetY = 0; - public static double jitterDetYMove = 0; - public static double jitterMove = 0.139 / 2; - public static double jitterDetX;//扫描过程中位置不变 - public static double jitterDetZ;//扫描过程中位置不变 - public static double jitterRotateX;//扫描过程中位置不变 - public static double jitterRotateY;//扫描过程中位置不变 - public static double jitterXrayZ;//扫描过程中位置不变 - public static double jitterRotateDegree; - } - - public class VirtualScanParams - { - public static bool virtualScanMode = false; - public static double virtualRadius; - public static double centerX;//记录虚拟轴中心x值 - public static double centerY;//记录虚拟轴中心y值 - public static double virtualDetY;//扫描过程中位置不变 - public static double virtualDetX;//扫描过程中位置不变 - public static double virtualDetZ;//扫描过程中位置不变 - public static double virtualRotateX; - public static double virtualRotateY; - public static double virtualRotateZ;//225kv - public static double virtualXrayZ;//扫描过程中位置不变 - public static double virtualRotateDegree; - public static List coordinates = new List(); - } - - public class ZoomScanParams - { - public static double Width; - public static double Height; - public static bool zoomScanMode = false; - public static double zoomDetY;//扫描过程中位置不变 - public static double zoomDetX;//扫描过程中位置不变 - public static double zoomDetZ;//扫描过程中位置不变 - public static double zoomRotateX; - public static double zoomRotateY;//扫描过程中位置不变 - public static double zoomRotateZ;//扫描过程中位置不变 - public static double zoomXrayZ;//扫描过程中位置不变 - public static double zoomRotateDegree; - public static List zoomFODs = new List(); - } - - public class SpeedScanParams - { - public static bool speedScanMode = false; - public static bool speedStateOK = false; - public static float pos1Start; - public static float pos2Start; - public static float pos3Start; - public static float pos4Start; - public static float pos4End = 360; - public static double speedDetY;//扫描过程中位置不变 - public static double speedDetX;//扫描过程中位置不变 - public static double speedDetZ;//扫描过程中位置不变 - public static double speedRotateX;//扫描过程中位置不变 - public static double speedRotateY;//扫描过程中位置不变 - public static double speedRotateZ;//扫描过程中位置不变 - public static double speedXrayZ;//扫描过程中位置不变 - public static double speedRotateDegree; - public static double speedRotateSpeedSlow; - public static double speedRotateSpeedFast; - public static double speedRotateSpeedSlowNums; - public static double speedRotateSpeedFastNums; - public static int speedModeSelect = 0; - } - - - //射线源参数Comet 225 - public class XRayDfnComet225 - { - public static bool isStartVacon = false; - public static bool shutAdjust = false; - public static bool isLockDoorActive = false; - public static Service serviceX225; - public static Cpu cpuX225; - public static Variable varKVS, varKVR, varMAS, varMAR, varWarmUpS, varWarmUpR, varVaconS, varVaconR, varVaconRV, varInterLockR, varXonS, varXoffS, varXonR, varStartUpS, varStartUpR; - public static Variable sysErrR, sysErrS, HSGErrR, HSGErrS, tubeErrR, tubeErrS, tubeACErrR, tubeACErrS, varWatchingDog; - public static Variable CurrentKVAutoCenter, ALLKVCenter, FilamentAdjust, FilamentAdjustR, AutoCenterR;//当前电压自动定心,所有电压自动定心,灯丝校准 - public static string xrayAdvancedSetPath = @"C:\Program Files (x86)\Feinfocus\FXEControl_3.1.1.65\FXEControl.exe"; - public static string xrayWarmUp, xrayVacon, xraySatartUp, xrayFilamentAdjust, xrayKVcenter, xrayTXI, xrayMode, xrayLockDoor; - public static Variable powerModeR, powerModeS, txiR, txiOpenS, txiCloseS; - public static string watchDogText; - public static string XrayCsvPath; - public static float current; - public static float voltage; - public static int voltageAdjust; - public static int currentAdjust; - public static float Readcurrent; - public static float Readvoltage; - public static double ReadActualDvValue, ReadActualAnValue, SetDvValue, SetAnValue; - public static int updateValue; - } - - //射线源参数Comet 450 - public class XRayDfnComet450 - { - public static float ReadActualDvValue, ReadActualAnValue, SetDvValue, SetAnValue; - public static bool isOpenXRay = false; - public static string focusMode = "450um"; - public static bool isXrayReady = false; - public static int configCurrent; - } - - //射线源参数Worx 300 - public class XRayDfnWorx300 - { - public static float ReadActualDvValue, ReadActualAnValue, SetDvValue, SetAnValue; - public static bool isOpenXRay = false; - } - public class XRayDfnFineTec300 - { - public static int iPrevReadActualVoltage, ReadActualVoltage, ReadActualCurrent, SetVoltageValue, SetCurrentValue; - public static ulong ulFineTecState1 = 0; - public static ulong ulFineTecState2 = 0; - public static string focusMode = ""; - public static string strVacuum = ""; - } - public class XRayDfnHama130 - { - public static int ReadActualVoltage, ReadActualCurrent, SetVoltageValue, SetCurrentValue; - public static bool isOpenXRay = false; - /// - /// 焦斑模式:0=Samll;1=Middle;2=Large - /// - public static string focusMode = "Large"; - public static int iXrayReady = 0; - public static bool bXrayRunFlag = false; - public static string strXrayType = ""; - public static string strXrayBattery = ""; - public static string strXrayStatus = ""; - - public static string strXrayPort = ""; - public static HamaMFX hamaMFX = new HamaMFX(); - // 不同焦斑模式下的最大功率值 - public static int[] powerMax; - public static ComboBox cmb_MFXList = new ComboBox(); - public static bool bFocalSizeChangeEnable = false; - public static int iMaxVoltage = 130; - public static int iMaxCurrent = 300; - //设备状态 - public static string strSTS = ""; - //硬件错误 - public static string strSER = ""; - //联锁状态 - public static string strSIN = ""; - } - - //射线源参数Viscom 225 - public class XRayDfnViscom225 - { - public static int ReadActualDvValue, ReadActualAnValue, SetDvValue, SetAnValue; - public static bool isLockDoorActive = false; - public static bool isOpenXRay = false; - public static string tubeVersion; - public static string drvVersion; - public static string dllVersion; - public static int min_kv; - public static int max_kv; - public static int min_ua; - public static int max_ua; - } - public class XRayDfnViscom320 - { - public static int ReadActualDvValue, ReadActualAnValue, SetDvValue, SetAnValue; - public static bool isLockDoorActive = false; - public static bool isOpenXRay = false; - public static string tubeVersion; - public static string drvVersion; - public static string dllVersion; - public static int min_kv; - public static int max_kv; - public static int min_ua; - public static int max_ua; - } - //线阵探测器DT H0104 - public class DetDfnDT - { - public static bool isDTConnected = false; - public static int binMode = 0; - public static int avgMode = 0; - public static int frame_count = 0; - public static int lost_line = 0; - public static int inteTime = 0; - public static uint cur_dm_index = 0; - public static int lineNums = 32; - public static int runPlc = 1; - public static bool StartScan = false; - public static int width = 2048; - public static int height = 32; - public static bool correctCheck; - public static float pixel = 0.4f; - } - - - //探测器参数 - public class DetectorDfnArea - { - public static string detConfigPath = Application.StartupPath + "\\work_dir\\NDT1717M2\\DynamicApplicationMode.ini"; - public static string detConfigPathTime = Application.StartupPath + "\\work_dir\\NDT1717M2\\config.ini"; - public static string varexBadPath1 = Application.StartupPath + "\\Varex\\4343#07290_b1_PxlMask.his"; - public static string varexBadPath2 = Application.StartupPath + "\\Varex\\4343#07290_b2_PxlMask.his"; - public static string varexBadPath3 = Application.StartupPath + "\\Varex\\4343#07290_b3_PxlMask.his"; - public static string varexBadPath4 = ""; - public static int m_nId = -1; - public static IRayImage CurImage; - public static DispatcherTimer ConnectStateTimer; - public static int CorrectionOpt = 0; - public static bool seqSave = false; - public static Image image; - public static bool isDetCreat = false; - public static bool isDetConnect = false; - public static bool isDetApplication = false; - public static bool isDetOffset = false; - public static bool isDetGainDefect = false; - public static bool isStartAcq = false; - public static string CorrectState; - public static string IrayDetectorPath; - public static string iDetectorPath; - public static int binning; - public static int PGA; - public static float frame; - public static int formerBinning; - public static int formerPGA; - public static float formerFrame; - public static float SOD; - public static float formerSOD; - public static float current; - public static float formerCurrent; - public static float voltage; - public static float formerVoltage; - public static double detectorWidth = 0.139 * 3072; - public static double detectorHeight = 0.139 * 3060; - public static double pixel_distance = 0.139; - public static int Image_Width = 3072; - public static int Image_Height = 3060; - public static int skipNums = 0; - public static int scanIng = 0; - public static int updateDet = 0; - public static int mergeFrame = 0; - public static int frameNo = 0; - public static int runPlc = 1; - public static int freq1_1 = 15; - public static int freq2_2 = 30; - public static int freq3_3 = 45; - public static int freq4_4 = 60; - } - - //运动控制参数 225 - public class MotionDfn - { - public static string strConfigFile = Application.StartupPath + "\\File\\config.ini"; - public static Def.HSI_STATUS rStatus = Def.HSI_STATUS.HSI_STATUS_INIT; - public static bool stopRun = true; - public static bool doneHome = false; - - //定义全局变量 - public static double iSpeed = 0; //速度 - public static double iSpeedMax = 100;//速度最大值 - public static int iRotaryIndex = 0; //轴号 - public static int iRotaryPos = 0; //轴位置 - public static double iXPos = 0; //定义X轴位置 - public static double iYPos = 0; - public static double iDetYPos = 0; - public static double iZPos = 0; - public static double useXPos = 0; //定义X轴位置 - public static double useYPos = 0; - public static double useZPos = 0; - public static double useFDD = 0; - public static double velocity = 0; - public static float fdd = 0; - public static double fdd2 = 0; - //运动范围限制 - public static double iXMax = 1141; - public static double iXMin = -19; - public static double iYMax = 50; - public static double iYMin = -250; - public static double iDetYMax = 220; - public static double iDetYMin = 0; - public static double iZMax = 59; - public static double iZMin = -541; - public static double iFDDMax = 901; - public static double iFDDMin = 524; - public static double iZ2Max = 400; - public static double iZ2Min = 0; - public static double x_collide = 0; - public static double y_collide = 0; - public static double z_collide = 0; - public static float AccRotate = (float)16.66; - public static float AccDc800 = 100; - public static float centerY = 151.86f; - public static float centerY_offset = 0; - public static float centerY_sddsod = 0; - public static double deltaFod = 0; - public static double deltaFdd = 0; - public static bool ishome = false; - public static bool isDetYHome = false; - public static bool xyzStop = false; - public static string strZ1Axes = "VIS"; - public static string strZ2Axes = "X1S"; - /// - /// SuperVolume1V Z轴补偿值 该值根据每个机型 可以更改 - /// - public static float dSV1VZOffset = -5; - /// - /// 定义X Y D轴的补偿值 小机器切轴时,有误差 - /// - public static double iXCompensationPos = 0.514; - public static double iYCompensationPos = 0.541; - public static double iDCompensationPos = 0.477; - public static bool bHaveDetYFlag = false; - } - - //450kv 双源双探运动参数 - public class MotionDfn450 - { - public static bool stopRun = true; - public static bool XrayDetZ = false; - public static float XrayStartZ = 0; - public static float DetStartZ = 0; - //定义全局变量 - public static double axisSpeedMin = 0; //速度最小值 - public static double axisSpeedMax = 100;//速度最大值 - - public static double iRotateXPos = 0; //定义X轴位置 - public static double iRotateYPos = 0; - public static double iXrayZPos = 0; - public static double iDetZPos = 0; - public static double iDetYPos = 0; - public static double fod = 0; - public static double fdd = 0; - - public static float AccRotate = (float)16.66;//单位:°/s^2 - public static float AccAxis = 100;//单位:mm/s^2 - public static float centerY = 151.542f; - public static float FDD_Add = 0; - - //运动范围限制 - public static double iRotateXMax = 1456; //1000 - public static double iRotateXMin = 0; - public static double iRotateYMax = 526;//360 - public static double iRotateYMin = 0; - public static double iDetXMax = 1320; //1000 - public static double iDetXMin = 0; - public static double iDetYMax = 542; //320 - public static double iDetYMin = 0; - public static double iDetZMax = 1157.7; //450 - public static double iDetZMin = 0; - public static double iXrayMax = 1155; //450 - public static double iXrayMin = 0; - public static float scanRotate = 0; - - //射线源切换改变值 - public static float xray1det1 = -6; - public static float xray1det2 = -342; - public static float xray2det1 = 327; - public static float xray2det2 = -11.3f; - public static float xray1det1fod = 0; - public static float xray1det1fdd = 0; - public static float xray2det1fod = 0; - public static float xray2det1fdd = 0; - /// - /// 射线源Z轴 激光补偿的index 数组为[index k b PLCStart PLCEnd ]0-4五组数据数据 - /// - public static Dictionary dicXrayZ = new Dictionary(); - /// - /// 探测器X轴 激光补偿的index 数组为[index k b PLCStart PLCEnd ]0-4五组数据数据 - /// - public static Dictionary dicDetX = new Dictionary(); - /// - /// 探测器Y轴 激光补偿的index 数组为[index k b PLCStart PLCEnd ]0-4五组数据数据 - /// - public static Dictionary dicDetY = new Dictionary(); - /// - /// 探测器Z轴 激光补偿的index 数组为[index k b PLCStart PLCEnd ]0-4五组数据数据 - /// - public static Dictionary dicDetZ = new Dictionary(); - /// - /// 转台X轴 激光补偿的index 数组为[index k b PLCStart PLCEnd ]0-4五组数据数据 - /// - public static Dictionary dicRotateX = new Dictionary(); - /// - /// 转台Y轴 激光补偿的index 数组为[index k b PLCStart PLCEnd ]0-4五组数据数据 - /// - public static Dictionary dicRotateY = new Dictionary(); - /// - /// 450架构二次补偿参数 索引Worx300 or Comet450 ,数组为[Fod k,b,Fdd k,b,Object Y Center,Detector Y Center,探测器和射线源Z轴面阵差值,探测器和射线源Z轴线阵差值,线阵FDD b] 0-8的9组数据; EVE 架构 索引为FineTec300 - /// - public static Dictionary dicStructureComp = new Dictionary(); - public static double laserDetx = 217.307865;//Eve第二台Fdd轴阈值增加设定,不适配第一台Eve设备,需要根据设备实际测量值进行调整 - /// - /// PLC报错错误列表,索引为PLC错误码,值为错误描述 0=中文;1=英文 - /// - public static Dictionary dicPLCErrorList = new Dictionary(); - } - - public class HardWareDfn - { - public static bool isXray225 = false; - public static bool isXray450 = false; - public static bool isXrayWorx300 = false; - public static bool isXrayViscom225 = false; - public static bool isXrayViscom320 = false; - public static bool isXrayHama130 = false; - public static bool isXrayFineTec300 = false; - public static bool isDetIray = false; - public static bool isDetDT = false; - public static bool isDoorOk = false;//用于通讯测试监控plc的门状态 - public static bool isCameraOk = false;//监控状态 - public static bool isRotateOk = false;//用于通讯测试监控plc的状态状态 - public static bool isReconOk = false;//远程重构电脑正常连接 - public static bool isReconSoftOK = false; - public static string camera1IP = "192.168.254.7"; - public static string camera2IP = "192.168.254.5"; - public static string cameraUser = "admin"; - public static string cameraPwd = "hexagon2023"; - public static string reconIP = "192.168.12.82"; - public static string reconSocket = "192.168.12.82"; - public static string comet225IP = "192.168.12.10"; - public static string DTIP = "192.168.1.11"; - - } - /// - /// CT 225 PLC地址定义类 - /// - public class PlcDfn - { - public static string plcIP; - public static string plcDB; - public static bool isPlcConnect = false; - //plc地址与通讯协议:plc-->>pc - public static string plcHeart = "DB31.200.0";//plc心跳 - public static string plcWarn = "DB31.200.1";//plc报警 - public static string plcXray = "DB31.200.2";//plc射线源上电 - public static string plcTrunTable = "DB31.200.3";//plc转台上电 - public static string plcDoor = "DB31.200.4";//plc门控上电 - public static string plcDC800 = "DB31.200.5";//DC800上电 - public static string plcDoorOpen = "DB31.201.0";//开门中 - public static string plcDoorClose = "DB31.201.1";//关门中 - public static string plcTurnTableClock = "DB31.201.4";//转台顺时针转 - public static string plcTurnTableUnclock = "DB31.201.5";//转台逆时针转 - public static string plcDoorState = "DB31.201.6";//门控状态 - public static string plcQualityScanbool = "DB31.203.0";//精细扫描开始采集 - public static string plcQuickScanbool = "DB31.203.1";//快速扫描开始采集 - public static string plcDRScanbool = "DB31.203.2";//DR扫描开始采集 - public static string plcQualityScanNums = "DB31.208.0";//扫描张数,精细扫描 - public static string plcArivePlace = "DB31.212.0";//到达位置 - public static string plcQuickScanNums = "DB31.236.0";//快速扫描张数 - public static string plcTurnTableAngle = "DB31.280.0";//转台角度 - public static string plcDetectorPosition = "DB31.288.0"; - - //pc-->>plc - public static string pcHeart = "DB31.0.0"; - public static string pcWarn = "DB31.0.1"; - public static string pcState = "DB31.0.2"; - public static string pcXRay = "DB31.0.3"; - public static string pcDetector = "DB31.0.4"; - public static string pcDC800 = "DB31.0.5"; - public static string pcOpenXRay = "DB31.0.6"; - public static string pcOpenDoor = "DB31.1.0"; - public static string pcCloseDoor = "DB31.1.1"; - public static string pcStopDoor = "DB31.1.2"; - public static string pcTurnTableClock = "DB31.1.3"; - public static string pcTurnTableUnclock = "DB31.1.4"; - public static string pcTurnTableZero = "DB31.1.5"; - public static string pcTurnTablePosition = "DB31.1.6"; - public static string pcTurnTableStop = "DB31.1.7"; - - public static string pcDetectorScan = "DB31.2.0"; - public static string pcDetectorMove = "DB31.2.1"; - public static string pcDetectorStop = "DB31.2.2"; - - public static string pcOpenQuality = "DB31.3.0"; - public static string pcStopQuality = "DB31.3.1"; - public static string pcOpenQuick = "DB31.3.2"; - public static string pcStopQuick = "DB31.3.3"; - public static string pcOpenDR = "DB31.3.4"; - public static string pcStopDR = "DB31.3.5"; - - public static string pcQualityMode = "DB31.4.0"; - public static string pcQualityNums = "DB31.8.0"; - public static string pcQualityAvgs = "DB31.12.0"; - public static string pcQualityV = "DB31.16.0"; - public static string pcQualityRotate = "DB31.20.0"; - public static string pcQualityAchive = "DB31.24.0"; - - public static string pcQuickMode = "DB31.32.0"; - public static string pcQuickNums = "DB31.36.0"; - public static string pcQuickImgNums = "DB31.40.0"; - public static string pcQuickTime = "DB31.44.0"; - public static string pcQuickV = "DB31.48.0"; - public static string pcQuickRotate = "DB31.52.0"; - public static string pcQuickIntegrate = "DB31.56.0";//直接写帧率,不写积分时间 - - public static string pcDRMode = "DB31.60.0"; - public static string pcDRNums = "DB31.64.0"; - public static string pcDRDone = "DB31.68.0"; - - public static string pcRotateAngle = "DB31.80.0"; - public static string pcRotateV = "DB31.84.0"; - public static string pcDetectorP = "DB31.88.0"; - public static string pcDetectorV = "DB31.92.0"; - - //225测试硬触发 PLC角度 - public static string strDBNum = "DB22."; - /// 锁存的位置数量总数 启动信号 - public static string plcAngleArrayCount = strDBNum + "346.0"; - - public static string plcAngleTriggerCount = strDBNum + "238.0"; - // - public static string plcAngleExploerCount = strDBNum + "240.0"; - /// 角度起始地址 348.0 - public static string plcAngleArrayStartAddress = strDBNum + "348"; - /// 角度数组前缀 - public static string plcAngleArrayPreAddress = strDBNum; - - /// 清空角度数组标志位 bool类型 true为清空 - public static string pcClearAngleArrayFlag = strDBNum + "3.5"; - - } - //450 PLC 地址 - public class PlcDfn450 - { - public static string plcIP; - public static string plcDB; - public static bool doorLock = false; - public static bool isPlcConnect = false; - //plc地址与通讯协议:plc-->>pc pc read plc address - public static string plcFineTecXrayOn = "I13.0"; //仅EVE使用 true为XrayOn false为XrayOff - public static string plcHeart = "DB31.200.0";//plc心跳 - public static string plcWarn = "DB31.200.1";//plc报警 - public static string plcStop = "DB31.200.2";//plc急停 - public static string plcDoorSafe = "DB31.200.3";//plc安全门信号 - public static string plcDoorRepair = "DB31.200.4";//plc维修们信号 - public static string plcDoorRador = "DB31.200.5";//plc门雷达 - public static string plcDetectorRador = "DB31.200.6";//探测器雷达 - public static string plcXrayRador = "DB31.200.7";//射线源雷达 - - public static string plcMotionElectric = "DB31.201.0";//运动控制上电 - public static string plcXray225Electric = "DB31.201.1";//225射线源上电 - public static string plcXray450Electric = "DB31.201.2";//450射线源上电 - /// - /// plc 回原点运动中 - /// - public static string plcSystemInitialRunning = "DB31.201.3"; - /// - /// PLC回原点完成 - /// - public static string plcSystemInitialFinish = "DB31.201.4"; - public static string plcXrayOnFlag = "DB31.201.5";//true方可开启射线,false不可开启 门锁 Enable方可开启射线源 - /// 门开到位信号 - public static string plcDoorStateOpen = "DB31.201.6"; - /// 门关到位信号true为关门 - public static string plcDoorStateClose = "DB31.201.7"; - - public static string plcaxis1Achieve = "DB31.202.0";//运动状态 - public static string plcaxis2Achieve = "DB31.202.1";//运动状态 - public static string plcaxis3Achieve = "DB31.202.2";//运动状态 - public static string plcaxis4Achieve = "DB31.202.3";//运动状态 - public static string plcaxis5Achieve = "DB31.202.4";//运动状态 - public static string plcaxis6Achieve = "DB31.202.5";//运动状态 - public static string plcaxis7Achieve = "DB31.202.6";//运动状态 - - public static string plcaxisAllAchieve = "DB31.202.7";//运动状态 - - public static string plcaxis1Location = "DB31.203.0";//运动状态 - public static string plcaxis2Location = "DB31.203.1";//运动状态 - public static string plcaxis3Location = "DB31.203.2";//运动状态 - public static string plcaxis4Location = "DB31.203.3";//运动状态 - public static string plcaxis5Location = "DB31.203.4";//运动状态 - public static string plcaxis6Location = "DB31.203.5";//运动状态 - - public static string plcaxisAllLocation = "DB31.203.7";//运动到位信号 - - public static string plcRotateXSpd = "DB31.220.0"; - public static string plcRotateYSpd = "DB31.228.0"; - public static string plcRotateSpd = "DB31.236.0"; - public static string plcDetXSpd = "DB31.244.0"; - public static string plcDetYSpd = "DB31.252.0"; - public static string plcDetZSpd = "DB31.260.0"; - public static string plcXrayZSpd = "DB31.268.0"; - public static string plcDoorSpd = "DB31.276.0"; - - public static string plcRotateXPos = "DB31.300.0"; - public static string plcRotateYPos = "DB31.308.0"; - public static string plcRotateDegree = "DB31.316.0"; - public static string plcDetXPos = "DB31.324.0"; - public static string plcDetYPos = "DB31.332.0"; - public static string plcDetZPos = "DB31.340.0"; - public static string plcXrayZPos = "DB31.348.0"; - - public static string plcDoorPos = "DB31.356.0"; - - public static string plcWarns = "DB31.396.0"; - - //圆周扫描 - public static string plcCircleScanOK = "DB32.200.0"; - /// - /// 运行中标志位:true=运行中 false=未运行 - /// - public static string plcCircleScanRunning = "DB32.200.1"; - public static string plcCircleQuickRun = "DB32.201.0"; - public static string plcCircleQuickSpdOK = "DB32.201.1"; - public static string plcCircleQualityRun = "DB32.202.0"; - public static string plcCircleQualityPosOK = "DB32.202.1"; - - //螺旋扫描 - public static string plcHelixScanOK = "DB33.200.0"; - public static string plcHelixScanRunning = "DB33.200.1"; - public static string plcHelixQuickRun = "DB33.201.0"; - public static string plcHelixQuickSpdOK = "DB33.201.1"; - public static string plcHelixQualityRun = "DB33.202.0"; - public static string plcHelixQualityPosOK = "DB33.202.1"; - - //线阵探测器DR采集plc-pc - public static string plcLineDRScanReady = ""; - - //线阵探测器螺旋采集plc-pc - public static string plcLineHelixScanCondition = "DB34.200.0"; - public static string plcLineHelixScanRuning = "DB34.200.1"; - public static string plcLineHelixScanRun = "DB34.202.0"; - public static string plcLineHelixScanReady = "DB34.202.1"; - - //---------------------------------------------------------------------------------------------------------------------------- - //pc-->>plc // pc write plc address - public static string pcHeart = "DB31.0.0"; - public static string pcWarn = "DB31.0.1"; - public static string pcXray225Open = "DB31.0.2"; - public static string pcXray450Open = "DB31.0.3"; - public static string pcDetectorLineRun = "DB31.0.4"; - public static string pcDetectorAreaRun = "DB31.0.5"; - //射线源和探测器的雷达屏蔽信号,默认为false不屏蔽, true为屏蔽 - public static string pcXaryRadar = "DB31.0.6"; - public static string pcDetectorRadar = "DB31.0.7"; - public static string pcMotionElectric = "DB31.1.0"; - public static string pcXray225Electric = "DB31.1.1"; - public static string pcXray450Electric = "DB31.1.2"; - - //初始化回原点 写给PLC true回原点 - public static string pcSystemInitial = "DB31.1.3"; - /// - /// z轴绑定,true为绑定 - /// - public static string pcSourceZBind = "DB31.1.4"; - public static string pcStopDoor = "DB31.1.5"; - public static string pcOpenDoor = "DB31.1.6"; - public static string pcCloseDoor = "DB31.1.7"; - - public static string pcaxis1Zero = "DB31.2.0"; - public static string pcaxis2Zero = "DB31.2.1"; - public static string pcaxis3Zero = "DB31.2.2"; - public static string pcaxis4Zero = "DB31.2.3"; - public static string pcaxis5Zero = "DB31.2.4"; - public static string pcaxis6Zero = "DB31.2.5"; - public static string pcaxis7Zero = "DB31.2.6"; - public static string pcClearWarns = "DB31.2.7"; - - public static string pcaxis1Location = "DB31.3.0"; - public static string pcaxis2Location = "DB31.3.1"; - public static string pcaxis3Location = "DB31.3.2"; - public static string pcaxis4Location = "DB31.3.3"; - public static string pcaxis5Location = "DB31.3.4"; - public static string pcaxis6Location = "DB31.3.5"; - - public static string pcStopMove = "DB31.3.6"; - public static string pcStartMove = "DB31.3.7"; - - public static string pcManualSpd = "DB31.4.0"; - public static string pcAutoSpd = "DB31.12.0"; - - public static string pcRotateXSpd = "DB31.20.0"; - public static string pcRotateYSpd = "DB31.28.0"; - public static string pcRotateSpd = "DB31.36.0"; - public static string pcDetXSpd = "DB31.44.0"; - public static string pcDetYSpd = "DB31.52.0"; - public static string pcDetZSpd = "DB31.60.0"; - public static string pcXrayZSpd = "DB31.68.0"; - - public static string pcRotateXPos = "DB31.100.0"; - public static string pcRotateYPos = "DB31.108.0"; - public static string pcRotateDegree = "DB31.116.0"; - public static string pcDetXPos = "DB31.124.0"; - public static string pcDetYPos = "DB31.132.0"; - public static string pcDetZPos = "DB31.140.0"; - public static string pcXrayZPos = "DB31.148.0"; - - //雷达防撞 被测产品的半径和高度 - public static string pcMeasProRadius = "DB31.188.0"; - public static string pcMeasProHeight = "DB31.180.0"; - - //圆周扫描 - public static string pcCircleScanStart = "DB32.0.0"; - public static string pcCircleScanStop = "DB32.0.1"; - public static string pcCircleQuick = "DB32.1.0"; - public static string pcCircleQuality = "DB32.2.0"; - public static string pcCircleQDOnceTime = "DB32.2.1"; - - public static string pcCircleRotateXPos = "DB32.4.0"; - public static string pcCircleRotateYPos = "DB32.12.0"; - public static string pcCircleRotateDegree = "DB32.20.0"; - public static string pcCircleDetXPos = "DB32.28.0"; - public static string pcCircleDetYPos = "DB32.36.0"; - public static string pcCircleDetZPos = "DB32.44.0"; - public static string pcCircleXrayZPos = "DB32.52.0"; - - public static string pcCircleRotateSpd = "DB32.60.0"; - public static string pcCircleRDOnceTime = "DB32.68.0"; - //写给PLC的采集角度地址 - public static string pcRotateAngle = "DB32.76.0"; - - //精细螺旋扫描 - public static string pcHelixScanStart = "DB33.0.0"; - public static string pcHelixScanStop = "DB33.0.1"; - public static string pcHelixQuick = "DB33.1.0"; - public static string pcHelixQuality = "DB33.2.0"; - public static string pcHelixQualityOnceTime = "DB33.2.1"; - - public static string pcHelixRotateXPos = "DB33.4.0"; - public static string pcHelixRotateYPos = "DB33.12.0"; - public static string pcHelixRotateDegree = "DB33.20.0"; - public static string pcHelixDetXPos = "DB33.28.0"; - public static string pcHelixDetYPos = "DB33.36.0"; - public static string pcHelixDetZPos = "DB33.44.0"; - public static string pcHelixXrayZPos = "DB33.52.0"; - - public static string pcHelixDetEndZPos = "DB33.100.0"; - public static string pcHelixXrayEndZPos = "DB33.108.0"; - - public static string pcHelixRotateSpd = "DB33.60.0"; - public static string pcHelixZSpd = "DB33.68.0"; - public static string pcHelixZPos = "DB33.76.0"; - public static string pcHelixRDOnceTime = "DB33.84.0"; - public static string pcHelixZPosChange = "DB33.92.0"; - - //线阵探测器DR扫描 - public static string pcLineDRScan = ""; - - //线阵探测器螺旋扫描 - public static string pcLineHelixScanStart = "DB34.0.0"; - public static string pcLineHelixScanStop = "DB34.0.1"; - public static string pcLineHelixScanQuality = "DB34.2.0"; - public static string pcLineHelixScanOnceDone = "DB34.2.1"; - public static string pcLineHelixScanCircleDone = "DB34.2.2"; - public static string pcLineHelixScanWholeDone = "DB34.2.3"; - - public static string pcLineHelixRotateXPos = "DB34.4.0"; - public static string pcLineHelixRotateYPos = "DB34.12.0"; - public static string pcLineHelixRotateDegree = "DB34.20.0"; - public static string pcLineHelixDetXPos = "DB34.28.0"; - public static string pcLineHelixDetYPos = "DB34.36.0"; - public static string pcLineHelixDetZPos = "DB34.44.0"; - public static string pcLineHelixXrayZPos = "DB34.52.0"; - - public static string pcLineHelixRotateSpd = "DB34.60.0"; - public static string pcLineHelixZSpd = "DB34.68.0"; - public static string pcLineHelixZPos = "DB34.76.0"; - public static string pcLineHelixRDOnceTime = "DB34.84.0"; - public static string pcLineHelixZPosChange = "DB34.92.0"; - - //Error List - public static string strErrorDBNum = "DB60."; - /// PLC报错错误起始的字节地址 - public static int plcErrorStartAddr = 40; - /// PLC报错错误的字节个数 - public static int plcErrorCount = 27; - } - //SV1V PLC地址 - public class PlcDfn130 - { - public static string plcIP; - public static string plcDB; - public static bool doorLock = false; - public static bool isPlcConnect = false; - public static string strDBNum = "DB22."; - - #region 写入PLC PC Write PLC Address [PC->PLC] - public static string pcHeart = strDBNum + "0.0"; - public static string pcWarn = strDBNum + "0.1"; - public static string pcDC800 = strDBNum + "0.5"; - - public static string pcTurnTableClock = strDBNum + "1.3"; - public static string pcTurnTableUnclock = strDBNum + "1.4"; - public static string pcTurnTableZero = strDBNum + "1.5"; - /// 转台停止 启动信号 - public static string pcTurnTablePosition = strDBNum + "1.6"; - /// 转台停止 上升沿 - public static string pcTurnTableStop = strDBNum + "1.7"; - /// 10:关门;20=开门;30=停止 - public static string pcControlDoor = strDBNum + "2.0"; - public static string pcControlDC800Electric = strDBNum + "3.0"; - /// 清空角度数组标志位 bool类型 true为清空 - public static string pcClearAngleArrayFlag = strDBNum + "3.5"; - /// 控制探测器触发标记位 - public static string pcControlDetectorInFlag = strDBNum + "3.6"; - /// byte: 10=精细有限角扫描;11=精细完整扫描;20=快速有限角扫描;21=快速完整扫描 - public static string pcScanMode = strDBNum + "4.0"; - - public static string pcQualityScanNum = strDBNum + "8.0"; - public static string pcQualityScanSpeed = strDBNum + "16.0"; - public static string pcQualityScanAngle = strDBNum + "20.0"; - /// 精细采集完成标记:10完成 - public static string pcQualityScanFinish = strDBNum + "24.0"; - public static string pcQuickScanSpeed = strDBNum + "48.0"; - /// - /// 转台角度值 - /// - public static string pcTurnTableAngle = strDBNum + "80.0"; - public static string pcTurnTableSpeed = strDBNum + "84.0"; - /// 写入PLC的探测器帧率Hz - public static string pcDetectorFreq = strDBNum + "88.0"; - /// 写入PLC的探测器Y轴值 lreal - public static string pcWriteDetYValue = strDBNum + "108"; - /// 写入PLC的探测器Y轴速度 lreal - public static string pcDetYSpeed = strDBNum + "112"; - public static string pcDetYStop = strDBNum + "118.0"; - public static string pcDetYGoHome = strDBNum + "92.0"; - public static string pcDetYStart = strDBNum + "96.0"; - #endregion - - #region 读取PLC PC Read PLC Address [PLC->PC] - public static string plcHeart = strDBNum + "200.0";//plc心跳 bool - public static string plcWarn = strDBNum + "292.0";//plc报警 int - public static string plcXRay = strDBNum + "200.2";//XRay工作中 - public static string plcDC800ON = strDBNum + "200.3";//XRay工作中 - public static string plcDoorOpening = strDBNum + "201.0"; - public static string plcDoorClosing = strDBNum + "201.1"; - /// - /// 转台状态:true=空闲 - /// - public static string plcTurnIdle = strDBNum + "201.3"; - public static string plcTurnTablecw = strDBNum + "201.4"; - public static string plcTurnTableccw = strDBNum + "201.5"; - /// - /// true:铅门开 - /// - public static string plcDoorOpened = strDBNum + "201.6"; - /// - /// true:铅门关 - /// - public static string plcDoorClosed = strDBNum + "201.7"; - public static string plcQualityScanning = strDBNum + "203.0"; - public static string plcQuickScanning = strDBNum + "203.1"; - /// - /// 0->10:转台到达精细扫描指定位置 - /// - public static string plcQualityScanArivePlace = strDBNum + "212.0"; - /// - /// 0->10:转台达到快速扫描预设速度 - /// - public static string plcReachQuickScanSpeed = strDBNum + "236.0"; - /// 实时反馈转台角度 - public static string plcTurnTableAngle = strDBNum + "280.0"; - /// 实时反馈转台速度 - public static string plcTurnTableSpeed = strDBNum + "284.0"; - /// 锁存的位置数量总数 启动信号 - public static string plcAngleArrayCount = strDBNum + "346.0"; - public static string plcAngleTriggerCount = strDBNum + "238.0"; - public static string plcAngleExploerCount = strDBNum + "240.0"; - /// 角度起始地址 348.0 - public static string plcAngleArrayStartAddress = strDBNum + "348"; - /// 角度数组前缀 - public static string plcAngleArrayPreAddress = strDBNum; - /// 读取探测器Y轴数据 lReal - public static string plcReadDetYValue = strDBNum+"330"; - /// 读取探测器Y轴已回家 bool - public static string plcDetYStatusHome = strDBNum + "202.0"; - /// 读取探测器Y状态空闲 bool - public static string plcDetYStatusFree = strDBNum + "202.1"; - #endregion - } - - public class ReconDfn - { - public static string reconPath; - public static string transPath; - public static string saveReconPath; - public static int saveReconNum; - public static int ROIx = 3072; - public static int ROIy = 3060; - public static bool roiDraw = false; - public static bool useROI = false; - public static int roixMin = 0; - public static int roiyMin = 0; - public static int roizMin = 0; - public static int roizMin1 = 0; - public static int roixMax = 3072; - public static int roiyMax = 3072; - public static int roizMax = 3060; - public static int roizMax1 = 3060; - public static double totalSpace = 0; - public static double freeSpace = 0; - public static bool exitSpace = false; - } - - public class CorrectParams - { - public static int laser = 0; - public static int compensate = 0; - public static int compensateFDD = 0; - public static int mappingYcenter = 0; - public static int mappingDetYcenter = 0; - public static double Ycenter = 0; - public static double DetYcenter = 0; - public static double SDD = 1499.885f; - public static double k = 1.00047389; - public static double b = 6.6443787; - public static double kFDD = 0; - public static double bFDD = 0; - public static double detector_horizontal_offset; - public static double detector_rotation_offset; - } - - public class AreaScanParams - { - public static float A1areaDetZ = 0; - public static float A1areaDetOffsetY = 0; - public static float A2areaDetZ = 0; - public static float A2areaDetOffsetY = 0; - public static float A3areaDetZ = 0; - public static float A3areaDetOffsetY = 0; - public static float A4areaDetZ = 0; - public static float A4areaDetOffsetY = 0; - public static int areaScanNums = 0; - public static bool isOK = false; - public static bool isAreaScan = false; - } - - public class HelixParams - { - public static int pitch; - public static float helixDetStartZ = 0; - public static float helixDetStartZNew = 0; - public static float helixDetEndZ = 0; - public static float helixXrayStartZ = 0; - public static float helixXrayStartZNew = 0; - public static float helixXrayEndZ = 0; - public static float helixStartZ = 2; - public static float helixStartZNew = 0; - public static float helixEndZ = 2; - public static float offsetY = 0; - public static double stepZ = 0; - public static int lineHelixScanNums = 0; - public static int lineHelixCircleNums = 0; - public static float moveZ; - public static bool isOK = false; - } - - public class VerticalParams - { - public static float verticalDetStartZ = 0; - public static float verticalDetEndZ = 0; - public static float verticalXrayStartZ = 0; - public static float verticalXrayEndZ = 0; - public static bool isOK = false; - public static bool VerticalisMode = false; - public static double startRotate = 0; - public static float startRotate1 = 0; - public static double endRotate1 = 0; - public static float startRotate2 = 0; - public static double endRotate2 = 0; - public static double dFeedRate = 0; - public static bool multiScan = false; - } - - public class ExtendScanParams - { - public static double offsetY = 0; - public static float extendStartY = 0; - public static float extendEndY = 0; - public static float extendStartZ = 0; - public static float extendEndZ = 0; - public static float moveY; - public static float moveZ; - public static bool isOK = false; - public static bool VerticalisOK = false; - public static int position = 0; - public static int rotateDegree = 360; - public static float rotateDegreeStart = 0; - public static float frameRate; - public static float velocity; - public static int extendNUM = 0; - public static float startRotate1 = 0; - public static double endRotate1 = 0; - public static float startRotate2 = 0; - public static double endRotate2 = 0; - } - public class GeoParams - { - public static int detWidth = 3072; - public static int detHeight = 3060; - public static double detPixelSize = 0.139; - public static double FOD = 200; - public static double FDD = 800; - public static double deltaFOD = 0; - public static List xLocation = new List { 30, 50 }; //采集位置 - public static double dCalibraDetZPos = 0; - public static double dAcquireDetZPos = 0; - public static double dAxisSpeed = 0; - } - public class OneBallCorrectParams - { - public static string centerPath; - public static string rollPath; - public static string distancePath; - public static bool isRunCorrect = false; - public static int saveImg = 0; - public static int index = 0; - public static int nameIndex = 0; - } -} diff --git a/XplorePlane.Tests/Models/StateModelsTests.cs b/XplorePlane.Tests/Models/StateModelsTests.cs index 6861525..22ec465 100644 --- a/XplorePlane.Tests/Models/StateModelsTests.cs +++ b/XplorePlane.Tests/Models/StateModelsTests.cs @@ -1,17 +1,27 @@ using System; using Xunit; +using Xunit.Abstractions; using XplorePlane.Models; namespace XplorePlane.Tests.Models { public class StateModelsTests { + private readonly ITestOutputHelper _output; + + public StateModelsTests(ITestOutputHelper output) + { + _output = output; + } + // ── Default Value Tests ─────────────────────────────────────── [Fact] public void MotionState_Default_AllZeros() { var state = MotionState.Default; + _output.WriteLine($"MotionState.Default: XM={state.XM}, YM={state.YM}, ZT={state.ZT}, ZD={state.ZD}, TiltD={state.TiltD}, Dist={state.Dist}"); + _output.WriteLine($" Speeds: XM={state.XMSpeed}, YM={state.YMSpeed}, ZT={state.ZTSpeed}, ZD={state.ZDSpeed}, TiltD={state.TiltDSpeed}, Dist={state.DistSpeed}"); Assert.Equal(0, state.XM); Assert.Equal(0, state.YM); @@ -31,6 +41,7 @@ namespace XplorePlane.Tests.Models public void RaySourceState_Default_IsOffAndZeros() { var state = RaySourceState.Default; + _output.WriteLine($"RaySourceState.Default: IsOn={state.IsOn}, Voltage={state.Voltage}, Power={state.Power}"); Assert.False(state.IsOn); Assert.Equal(0, state.Voltage); @@ -41,6 +52,7 @@ namespace XplorePlane.Tests.Models public void DetectorState_Default_DisconnectedAndZeros() { var state = DetectorState.Default; + _output.WriteLine($"DetectorState.Default: IsConnected={state.IsConnected}, IsAcquiring={state.IsAcquiring}, FrameRate={state.FrameRate}, Resolution='{state.Resolution}'"); Assert.False(state.IsConnected); Assert.False(state.IsAcquiring); @@ -52,6 +64,7 @@ namespace XplorePlane.Tests.Models public void SystemState_Default_IdleNoError() { var state = SystemState.Default; + _output.WriteLine($"SystemState.Default: OperationMode={state.OperationMode}, HasError={state.HasError}, ErrorMessage='{state.ErrorMessage}'"); Assert.Equal(OperationMode.Idle, state.OperationMode); Assert.False(state.HasError); @@ -62,6 +75,7 @@ namespace XplorePlane.Tests.Models public void CameraState_Default_DisconnectedAndZeros() { var state = CameraState.Default; + _output.WriteLine($"CameraState.Default: IsConnected={state.IsConnected}, IsStreaming={state.IsStreaming}, CurrentFrame={state.CurrentFrame}, Width={state.Width}, Height={state.Height}, FrameRate={state.FrameRate}"); Assert.False(state.IsConnected); Assert.False(state.IsStreaming); @@ -75,6 +89,7 @@ namespace XplorePlane.Tests.Models public void LinkedViewState_Default_ZeroPositionNotExecuting() { var state = LinkedViewState.Default; + _output.WriteLine($"LinkedViewState.Default: TargetPosition=({state.TargetPosition.X}, {state.TargetPosition.Y}, {state.TargetPosition.Z}), IsExecuting={state.IsExecuting}, LastRequestTime={state.LastRequestTime}"); Assert.Equal(0, state.TargetPosition.X); Assert.Equal(0, state.TargetPosition.Y); @@ -87,6 +102,7 @@ namespace XplorePlane.Tests.Models public void RecipeExecutionState_Default_IdleAndZeros() { var state = RecipeExecutionState.Default; + _output.WriteLine($"RecipeExecutionState.Default: CurrentStepIndex={state.CurrentStepIndex}, TotalSteps={state.TotalSteps}, Status={state.Status}, CurrentRecipeName='{state.CurrentRecipeName}'"); Assert.Equal(0, state.CurrentStepIndex); Assert.Equal(0, state.TotalSteps); @@ -100,8 +116,8 @@ namespace XplorePlane.Tests.Models public void MotionState_WithExpression_ProducesNewInstance() { var original = MotionState.Default; - var modified = original with { XM = 100 }; + _output.WriteLine($"Original.XM={original.XM}, Modified.XM={modified.XM}, SameRef={ReferenceEquals(original, modified)}"); // New instance is different from original Assert.NotSame(original, modified); @@ -124,6 +140,7 @@ namespace XplorePlane.Tests.Models ); var (x, y, z) = matrix.Transform(pixelX: 5, pixelY: 8); + _output.WriteLine($"Matrix Transform(5, 8): x={x}, y={y}, z={z} (expected: 20, 44, 0)"); // x = 2*5 + 0*8 + 10 = 20 Assert.Equal(20, x); @@ -144,6 +161,7 @@ namespace XplorePlane.Tests.Models ); var (x, y, z) = identity.Transform(pixelX: 42.5, pixelY: 99.1); + _output.WriteLine($"Identity Transform(42.5, 99.1): x={x}, y={y}, z={z}"); Assert.Equal(42.5, x, precision: 10); Assert.Equal(99.1, y, precision: 10); diff --git a/XplorePlane.Tests/Services/AppStateServiceTests.cs b/XplorePlane.Tests/Services/AppStateServiceTests.cs index 5289d97..143f0ab 100644 --- a/XplorePlane.Tests/Services/AppStateServiceTests.cs +++ b/XplorePlane.Tests/Services/AppStateServiceTests.cs @@ -3,6 +3,7 @@ using System.Windows; using Moq; using Serilog; using Xunit; +using Xunit.Abstractions; using XP.Hardware.RaySource.Services; using XplorePlane.Models; using XplorePlane.Services.AppState; @@ -18,9 +19,12 @@ namespace XplorePlane.Tests.Services private readonly AppStateService _service; private readonly Mock _mockRaySource; private readonly Mock _mockLogger; + private readonly ITestOutputHelper _output; - public AppStateServiceTests() + public AppStateServiceTests(ITestOutputHelper output) { + _output = output; + // Ensure WPF Application exists for Dispatcher if (Application.Current == null) { @@ -42,24 +46,28 @@ namespace XplorePlane.Tests.Services [Fact] public void DefaultState_MotionState_IsDefault() { + _output.WriteLine($"MotionState == MotionState.Default: {ReferenceEquals(MotionState.Default, _service.MotionState)}"); Assert.Same(MotionState.Default, _service.MotionState); } [Fact] public void DefaultState_RaySourceState_IsDefault() { + _output.WriteLine($"RaySourceState == RaySourceState.Default: {ReferenceEquals(RaySourceState.Default, _service.RaySourceState)}"); Assert.Same(RaySourceState.Default, _service.RaySourceState); } [Fact] public void DefaultState_SystemState_IsDefault() { + _output.WriteLine($"SystemState == SystemState.Default: {ReferenceEquals(SystemState.Default, _service.SystemState)}"); Assert.Same(SystemState.Default, _service.SystemState); } [Fact] public void DefaultState_CalibrationMatrix_IsNull() { + _output.WriteLine($"CalibrationMatrix: {_service.CalibrationMatrix?.ToString() ?? "null"}"); Assert.Null(_service.CalibrationMatrix); } @@ -68,25 +76,29 @@ namespace XplorePlane.Tests.Services [Fact] public void UpdateMotionState_NullArgument_ThrowsArgumentNullException() { - Assert.Throws(() => _service.UpdateMotionState(null!)); + var ex = Assert.Throws(() => _service.UpdateMotionState(null!)); + _output.WriteLine($"UpdateMotionState(null) threw: {ex.GetType().Name}, Param={ex.ParamName}"); } [Fact] public void UpdateRaySourceState_NullArgument_ThrowsArgumentNullException() { - Assert.Throws(() => _service.UpdateRaySourceState(null!)); + var ex = Assert.Throws(() => _service.UpdateRaySourceState(null!)); + _output.WriteLine($"UpdateRaySourceState(null) threw: {ex.GetType().Name}, Param={ex.ParamName}"); } [Fact] public void UpdateDetectorState_NullArgument_ThrowsArgumentNullException() { - Assert.Throws(() => _service.UpdateDetectorState(null!)); + var ex = Assert.Throws(() => _service.UpdateDetectorState(null!)); + _output.WriteLine($"UpdateDetectorState(null) threw: {ex.GetType().Name}, Param={ex.ParamName}"); } [Fact] public void UpdateSystemState_NullArgument_ThrowsArgumentNullException() { - Assert.Throws(() => _service.UpdateSystemState(null!)); + var ex = Assert.Throws(() => _service.UpdateSystemState(null!)); + _output.WriteLine($"UpdateSystemState(null) threw: {ex.GetType().Name}, Param={ex.ParamName}"); } // ── Dispose 后 Update 被忽略 ── @@ -96,11 +108,13 @@ namespace XplorePlane.Tests.Services { var originalState = _service.MotionState; _service.Dispose(); + _output.WriteLine("Service disposed, attempting UpdateMotionState..."); // Should not throw, and state should remain unchanged var newState = new MotionState(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); _service.UpdateMotionState(newState); + _output.WriteLine($"State unchanged after dispose: {ReferenceEquals(originalState, _service.MotionState)}"); Assert.Same(originalState, _service.MotionState); } @@ -114,6 +128,7 @@ namespace XplorePlane.Tests.Services _service.RequestLinkedView(100.0, 200.0); + _output.WriteLine($"RequestLinkedView(100, 200) without CalibrationMatrix: HasError={_service.SystemState.HasError}, ErrorMessage='{_service.SystemState.ErrorMessage}'"); Assert.True(_service.SystemState.HasError); Assert.NotEmpty(_service.SystemState.ErrorMessage); } diff --git a/XplorePlane.Tests/Services/RecipeServiceTests.cs b/XplorePlane.Tests/Services/RecipeServiceTests.cs index 132af1e..7bde834 100644 --- a/XplorePlane.Tests/Services/RecipeServiceTests.cs +++ b/XplorePlane.Tests/Services/RecipeServiceTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Moq; using Serilog; using Xunit; +using Xunit.Abstractions; using XplorePlane.Models; using XplorePlane.Services; using XplorePlane.Services.AppState; @@ -21,9 +22,11 @@ namespace XplorePlane.Tests.Services private readonly Mock _mockPipeline; private readonly Mock _mockLogger; private readonly RecipeService _service; + private readonly ITestOutputHelper _output; - public RecipeServiceTests() + public RecipeServiceTests(ITestOutputHelper output) { + _output = output; _mockAppState = new Mock(); _mockPipeline = new Mock(); _mockLogger = new Mock(); @@ -45,6 +48,7 @@ namespace XplorePlane.Tests.Services public void CreateRecipe_ValidName_ReturnsEmptyRecipe() { var recipe = _service.CreateRecipe("TestRecipe"); + _output.WriteLine($"CreateRecipe('TestRecipe'): Name={recipe.Name}, Id={recipe.Id}, Steps.Count={recipe.Steps.Count}, CreatedAt={recipe.CreatedAt}"); Assert.Equal("TestRecipe", recipe.Name); Assert.Empty(recipe.Steps); @@ -56,19 +60,22 @@ namespace XplorePlane.Tests.Services [Fact] public void CreateRecipe_EmptyName_ThrowsArgumentException() { - Assert.Throws(() => _service.CreateRecipe(string.Empty)); + var ex = Assert.Throws(() => _service.CreateRecipe(string.Empty)); + _output.WriteLine($"CreateRecipe('') threw: {ex.GetType().Name}, Message={ex.Message}"); } [Fact] public void CreateRecipe_NullName_ThrowsArgumentException() { - Assert.Throws(() => _service.CreateRecipe(null!)); + var ex = Assert.Throws(() => _service.CreateRecipe(null!)); + _output.WriteLine($"CreateRecipe(null) threw: {ex.GetType().Name}, Message={ex.Message}"); } [Fact] public void CreateRecipe_WhitespaceName_ThrowsArgumentException() { - Assert.Throws(() => _service.CreateRecipe(" ")); + var ex = Assert.Throws(() => _service.CreateRecipe(" ")); + _output.WriteLine($"CreateRecipe(' ') threw: {ex.GetType().Name}, Message={ex.Message}"); } // ── RecordCurrentStep 验证 ── @@ -88,6 +95,7 @@ namespace XplorePlane.Tests.Services var pipeline = new PipelineModel { Name = "TestPipeline" }; var step = _service.RecordCurrentStep(recipe, pipeline); + _output.WriteLine($"RecordCurrentStep: StepIndex={step.StepIndex}, MotionState.XM={step.MotionState.XM}, RaySource.Voltage={step.RaySourceState.Voltage}, Detector.Resolution={step.DetectorState.Resolution}, Pipeline={step.Pipeline.Name}"); Assert.Equal(0, step.StepIndex); Assert.Same(motionState, step.MotionState); @@ -102,9 +110,11 @@ namespace XplorePlane.Tests.Services public async Task LoadAsync_FileNotExists_ThrowsFileNotFoundException() { var nonExistentPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".json"); + _output.WriteLine($"LoadAsync 不存在的文件: {nonExistentPath}"); - await Assert.ThrowsAsync( + var ex = await Assert.ThrowsAsync( () => _service.LoadAsync(nonExistentPath)); + _output.WriteLine($"抛出异常: {ex.GetType().Name}, Message={ex.Message}"); } [Fact] @@ -114,9 +124,11 @@ namespace XplorePlane.Tests.Services try { await File.WriteAllTextAsync(tempFile, "{ this is not valid json !!! }"); + _output.WriteLine($"LoadAsync 无效JSON文件: {tempFile}"); - await Assert.ThrowsAsync( + var ex = await Assert.ThrowsAsync( () => _service.LoadAsync(tempFile)); + _output.WriteLine($"抛出异常: {ex.GetType().Name}, Message={ex.Message}"); } finally { diff --git a/XplorePlane.Tests/XplorePlane.Tests.csproj b/XplorePlane.Tests/XplorePlane.Tests.csproj index 229c12e..e600e9e 100644 --- a/XplorePlane.Tests/XplorePlane.Tests.csproj +++ b/XplorePlane.Tests/XplorePlane.Tests.csproj @@ -3,16 +3,24 @@ net8.0-windows true + Library false XplorePlane.Tests + + + + + + + - - + + @@ -29,6 +37,10 @@ ..\XplorePlane\Libs\Hardware\XP.Hardware.RaySource.dll True + + ..\XplorePlane\Libs\ImageProcessing\ImageProcessing.Core.dll + True + diff --git a/XplorePlane/XplorePlane.csproj b/XplorePlane/XplorePlane.csproj index b63cd2f..feb6875 100644 --- a/XplorePlane/XplorePlane.csproj +++ b/XplorePlane/XplorePlane.csproj @@ -5,6 +5,7 @@ true XplorePlane XplorePlane + GapInspect.ico @@ -186,6 +187,7 @@ PreserveNewest Libs\ImageProcessing\zh-CN\%(Filename)%(Extension) +