将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。

This commit is contained in:
QI Mingxuan
2026-04-16 17:31:13 +08:00
parent 6ec4c3ddaa
commit 2bd6e566c3
581 changed files with 74600 additions and 222 deletions
@@ -0,0 +1,23 @@
namespace XP.Hardware.RaySource.Abstractions.Enums
{
/// <summary>
/// 射线源状态枚举 | X-Ray Source Status Enum
/// </summary>
public enum RaySourceStatus
{
/// <summary>
/// 射线源不可用(未初始化)| Unavailable (Not Initialized)
/// </summary>
Unavailable = -1,
/// <summary>
/// 射线源已关闭 | Closed
/// </summary>
Closed = 0,
/// <summary>
/// 射线源已开启 | Opened
/// </summary>
Opened = 1
}
}
@@ -0,0 +1,12 @@
using Prism.Events;
namespace XP.Hardware.RaySource.Abstractions.Events
{
/// <summary>
/// 错误触发事件 | Error Occurred Event
/// 携带错误信息字符串 | Carries error message string
/// </summary>
public class ErrorOccurredEvent : PubSubEvent<string>
{
}
}
@@ -0,0 +1,41 @@
using Prism.Events;
namespace XP.Hardware.RaySource.Abstractions.Events
{
/// <summary>
/// 操作结果数据模型 | Operation Result Data Model
/// 携带操作名称和成功状态 | Carries operation name and success status
/// </summary>
public class OperationResultData
{
/// <summary>
/// 操作名称 | Operation name
/// </summary>
public string OperationName { get; set; }
/// <summary>
/// 操作是否成功 | Operation success status
/// </summary>
public bool IsSuccess { get; set; }
/// <summary>
/// 附加消息 | Additional message
/// </summary>
public string Message { get; set; }
public OperationResultData(string operationName, bool isSuccess, string message = null)
{
OperationName = operationName;
IsSuccess = isSuccess;
Message = message;
}
}
/// <summary>
/// 操作结果事件 | Operation Result Event
/// 用于通知操作执行结果 | Used to notify operation execution result
/// </summary>
public class OperationResultEvent : PubSubEvent<OperationResultData>
{
}
}
@@ -0,0 +1,13 @@
using Prism.Events;
using XP.Hardware.RaySource.Abstractions.Enums;
namespace XP.Hardware.RaySource.Abstractions.Events
{
/// <summary>
/// 射线源状态变更事件 | X-Ray Source Status Changed Event
/// 携带 RaySourceStatus 枚举值,表示三态状态变更 | Carries RaySourceStatus enum for tri-state status changes
/// </summary>
public class RaySourceStatusChangedEvent : PubSubEvent<RaySourceStatus>
{
}
}
@@ -0,0 +1,95 @@
using Prism.Events;
using System;
namespace XP.Hardware.RaySource.Abstractions.Events
{
/// <summary>
/// 系统状态数据模型 | System Status Data Model
/// 携带全量系统状态信息 | Carries complete system status information
/// </summary>
public class SystemStatusData
{
/// <summary>
/// 设定电压值(kV| Set voltage value (kV)
/// </summary>
public float SetVoltage { get; set; }
/// <summary>
/// 实际电压值(kV| Actual voltage value (kV)
/// </summary>
public float ActualVoltage { get; set; }
/// <summary>
/// 设定电流值(μA| Set current value (μA)
/// </summary>
public float SetCurrent { get; set; }
/// <summary>
/// 实际电流值(μA| Actual current value (μA)
/// </summary>
public float ActualCurrent { get; set; }
/// <summary>
/// 射线开启状态 | X-ray on status
/// </summary>
public bool IsXRayOn { get; set; }
/// <summary>
/// 暖机状态描述 | Warm-up status description
/// </summary>
public string WarmUpStatus { get; set; }
/// <summary>
/// 真空状态描述 | Vacuum status description
/// </summary>
public string VacuumStatus { get; set; }
/// <summary>
/// 启动状态描述 | Startup status description
/// </summary>
public string StartUpStatus { get; set; }
/// <summary>
/// 自动定心状态描述 | Auto-center status description
/// </summary>
public string AutoCenterStatus { get; set; }
/// <summary>
/// 灯丝调整状态描述 | Filament adjust status description
/// </summary>
public string FilamentAdjustStatus { get; set; }
/// <summary>
/// 连锁状态 | Interlock status
/// </summary>
public bool IsInterlockActive { get; set; }
/// <summary>
/// 看门狗状态 | Watchdog status
/// </summary>
public string WatchdogStatus { get; set; }
/// <summary>
/// 功率模式 | Power mode
/// </summary>
public string PowerMode { get; set; }
/// <summary>
/// TXI状态 | TXI status
/// </summary>
public string TxiStatus { get; set; }
/// <summary>
/// 时间戳 | Timestamp
/// </summary>
public DateTime Timestamp { get; set; } = DateTime.Now;
}
/// <summary>
/// 状态更新事件 | Status Updated Event
/// 用于通知UI层系统状态变化 | Used to notify UI layer of system status changes
/// </summary>
public class StatusUpdatedEvent : PubSubEvent<SystemStatusData>
{
}
}
@@ -0,0 +1,12 @@
using Prism.Events;
namespace XP.Hardware.RaySource.Abstractions.Events
{
/// <summary>
/// PVI 变量连接状态变更事件 | PVI variables connection state changed event
/// Payload: true = 已连接, false = 已断开 | true = connected, false = disconnected
/// </summary>
public class VariablesConnectedEvent : PubSubEvent<bool>
{
}
}
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace XP.Hardware.RaySource.Abstractions
{
/// <summary>
/// 射线源工厂接口 | X-Ray Source Factory Interface
/// 定义创建射线源实例的工厂方法 | Defines factory methods for creating X-ray source instances
/// </summary>
public interface IRaySourceFactory
{
/// <summary>
/// 创建指定类型的射线源实例 | Create X-ray source instance of specified type
/// </summary>
/// <param name="sourceType">射线源类型名称 | X-ray source type name</param>
/// <returns>射线源实例 | X-ray source instance</returns>
IXRaySource CreateRaySource(string sourceType);
/// <summary>
/// 获取支持的射线源类型列表 | Get list of supported X-ray source types
/// </summary>
/// <returns>类型名称列表 | List of type names</returns>
IEnumerable<string> GetSupportedSourceTypes();
}
}
@@ -0,0 +1,116 @@
using System;
namespace XP.Hardware.RaySource.Abstractions
{
/// <summary>
/// 射线源接口 | X-Ray Source Strategy
/// 定义所有射线源必须实现的核心操作 | Defines core operations required for all X-ray sources
/// </summary>
public interface IXRaySource : IDisposable
{
/// <summary>
/// 是否已连接 | Is connected
/// </summary>
bool IsConnected { get; }
/// <summary>
/// 初始化射线源 | Initialize X-ray source
/// </summary>
XRayResult Initialize();
/// <summary>
/// 连接 PVI 变量并启动实时状态通讯 | Connect PVI variables and start real-time status communication
/// 对应硬件操作流程中的"开启实时状态通讯"步骤 | Corresponds to "start real-time status communication" step in hardware operation flow
/// </summary>
XRayResult ConnectVariables();
/// <summary>
/// 开启射线 | Turn on X-ray
/// </summary>
XRayResult TurnOn();
/// <summary>
/// 关闭射线 | Turn off X-ray
/// </summary>
XRayResult TurnOff();
/// <summary>
/// 完全关闭设备(释放资源)| Fully shut down device (release resources)
/// </summary>
XRayResult CloseOff();
/// <summary>
/// 设置电压(单位:kV| Set voltage (unit: kV)
/// </summary>
/// <param name="voltage">目标电压值 | Target voltage value</param>
XRayResult SetVoltage(float voltage);
/// <summary>
/// 设置电流(单位:μA| Set current (unit: μA)
/// </summary>
/// <param name="current">目标电流值 | Target current value</param>
XRayResult SetCurrent(float current);
/// <summary>
/// 设置焦点(部分设备支持)| Set focus (supported by some devices)
/// </summary>
/// <param name="focus">焦点参数 | Focus parameter</param>
XRayResult SetFocus(float focus);
/// <summary>
/// 读取实际电压值 | Read actual voltage value
/// </summary>
XRayResult ReadVoltage();
/// <summary>
/// 读取实际电流值 | Read actual current value
/// </summary>
XRayResult ReadCurrent();
/// <summary>
/// 读取系统状态 | Read system status
/// </summary>
XRayResult ReadSystemStatus();
/// <summary>
/// 检查错误状态 | Check error status
/// </summary>
XRayResult CheckErrors();
/// <summary>
/// TXI 开启 | TXI On
/// </summary>
XRayResult TxiOn();
/// <summary>
/// TXI 关闭 | TXI Off
/// </summary>
XRayResult TxiOff();
/// <summary>
/// 暖机设置 | Warm-up setting
/// </summary>
XRayResult WarmUp();
/// <summary>
/// 训机设置 | Training setting
/// </summary>
XRayResult Training();
/// <summary>
/// 灯丝校准 | Filament calibration
/// </summary>
XRayResult FilamentCalibration();
/// <summary>
/// 全部电压自动定心 | Auto-center all voltages
/// </summary>
XRayResult AutoCenter();
/// <summary>
/// 设置功率模式 | Set power mode
/// </summary>
/// <param name="mode">功率模式值:1=Micro Focus2=High Power</param>
XRayResult SetPowerMode(int mode);
}
}
@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace XP.Hardware.RaySource.Abstractions
{
/// <summary>
/// 射线源操作结果封装类 | X-Ray Source Operation Result Wrapper
/// 用于统一返回操作状态、错误信息和数据 | Unified return of operation status, error messages, and data
/// </summary>
public class XRayResult
{
/// <summary>
/// 操作是否成功 | Operation success status
/// </summary>
public bool Success { get; set; }
/// <summary>
/// 错误消息(成功时为null| Error message (null when successful)
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// 操作返回的数据 | Operation return data
/// </summary>
public object Data { get; set; }
/// <summary>
/// 创建成功结果 | Create success result
/// </summary>
/// <param name="data">返回数据 | Return data</param>
/// <returns>成功结果对象 | Success result object</returns>
public static XRayResult Ok(object data = null) =>
new XRayResult { Success = true, Data = data };
/// <summary>
/// 创建错误结果 | Create error result
/// </summary>
/// <param name="message">错误消息 | Error message</param>
/// <returns>错误结果对象 | Error result object</returns>
public static XRayResult Error(string message) =>
new XRayResult { Success = false, ErrorMessage = message };
/// <summary>
/// 获取浮点数据(带类型安全)| Get float data (type-safe)
/// </summary>
public float GetFloat() => Data != null ? Convert.ToSingle(Data) : 0f;
/// <summary>
/// 获取整数数据(带类型安全)| Get integer data (type-safe)
/// </summary>
public int GetInt() => Data != null ? Convert.ToInt32(Data) : 0;
}
}
@@ -0,0 +1,95 @@
using System;
namespace XP.Hardware.RaySource.Abstractions
{
/// <summary>
/// 射线源抽象基类 | Abstract Base Class for X-Ray Sources
/// 提供策略接口的基础实现框架 | Provides foundational implementation framework for strategy interface
/// </summary>
public abstract class XRaySourceBase : IXRaySource
{
protected bool _isDisposed = false;
protected bool _isInitialized = false;
protected bool _isConnected = false;
/// <summary>
/// 射线源名称(用于日志)| X-ray source name (for logging)
/// </summary>
public virtual string SourceName => "Generic X-Ray Source";
/// <summary>
/// 是否已连接 | Is connected
/// </summary>
public virtual bool IsConnected => _isConnected && _isInitialized;
#region IXRaySource Implementation
public abstract XRayResult Initialize();
public abstract XRayResult ConnectVariables();
public abstract XRayResult TurnOn();
public abstract XRayResult TurnOff();
public abstract XRayResult CloseOff();
public abstract XRayResult SetVoltage(float voltage);
public abstract XRayResult SetCurrent(float current);
public abstract XRayResult SetFocus(float focus);
public abstract XRayResult ReadVoltage();
public abstract XRayResult ReadCurrent();
public abstract XRayResult ReadSystemStatus();
public abstract XRayResult CheckErrors();
public abstract XRayResult TxiOn();
public abstract XRayResult TxiOff();
public abstract XRayResult WarmUp();
public abstract XRayResult Training();
public abstract XRayResult FilamentCalibration();
public abstract XRayResult AutoCenter();
public abstract XRayResult SetPowerMode(int mode);
#endregion
#region IDisposable Implementation
/// <summary>
/// 释放资源 | Release resources
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// 受保护的释放方法 | Protected dispose method
/// </summary>
/// <param name="disposing">是否由用户代码调用 | Whether called from user code</param>
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
if (disposing)
{
// 释放托管资源 | Release managed resources
try
{
// 尝试安全关闭 | Attempt safe shutdown
if (_isInitialized)
{
CloseOff();
}
}
catch (Exception ex)
{
Console.WriteLine(
$"[射线源关闭异常 | X-Ray Source Close Exception] {SourceName}: {ex.Message}");
}
}
_isDisposed = true;
}
}
/// <summary>
/// 析构函数(作为安全网)| Finalizer (as safety net)
/// </summary>
~XRaySourceBase()
{
Dispose(false);
}
#endregion
}
}