将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。
This commit is contained in:
@@ -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 Focus,2=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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user