增加射线源探测器Z轴锁定联动功能,增加对应plc信号和配置。
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
using System;
|
||||
using Emgu.CV.Dnn;
|
||||
using Prism.Events;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using Prism.Events;
|
||||
using XP.Common.Localization;
|
||||
using XP.Common.Logging.Interfaces;
|
||||
using XP.Hardware.MotionControl.Abstractions;
|
||||
@@ -27,9 +28,10 @@ namespace XP.Hardware.MotionControl.Services
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly ILoggerService _logger;
|
||||
private readonly IPlcService _plcService;
|
||||
private readonly ISignalDataService _signalService;
|
||||
|
||||
// 轮询定时器 | Polling timer
|
||||
private Timer _pollingTimer;
|
||||
// 轮询定时器 | Polling timer
|
||||
private Timer _pollingTimer;
|
||||
private int _pollErrorCount = 0;
|
||||
|
||||
/// <summary>
|
||||
@@ -58,7 +60,8 @@ namespace XP.Hardware.MotionControl.Services
|
||||
MotionControlConfig config,
|
||||
IEventAggregator eventAggregator,
|
||||
ILoggerService logger,
|
||||
IPlcService plcService)
|
||||
IPlcService plcService,
|
||||
ISignalDataService signalService)
|
||||
{
|
||||
_motionSystem = motionSystem ?? throw new ArgumentNullException(nameof(motionSystem));
|
||||
_geometryCalculator = geometryCalculator ?? throw new ArgumentNullException(nameof(geometryCalculator));
|
||||
@@ -68,7 +71,8 @@ namespace XP.Hardware.MotionControl.Services
|
||||
_logger = (logger ?? throw new ArgumentNullException(nameof(logger)))
|
||||
.ForModule<MotionControlService>();
|
||||
_plcService = plcService ?? throw new ArgumentNullException(nameof(plcService));
|
||||
}
|
||||
_signalService = signalService ?? throw new ArgumentNullException(nameof(signalService));
|
||||
}
|
||||
|
||||
#region 轮询控制 | Polling Control
|
||||
|
||||
@@ -544,6 +548,76 @@ namespace XP.Hardware.MotionControl.Services
|
||||
|
||||
#endregion
|
||||
|
||||
#region 射线源与探测器Z轴联动 | Source-Detector Z-axis Linkage
|
||||
|
||||
/// <summary>
|
||||
/// 启用/禁用射线源与探测器Z轴联动 | Enable/disable Source-Detector Z-axis linkage
|
||||
/// </summary>
|
||||
/// <param name="enabled">true=启用联动,false=禁用联动 | true=enable linkage, false=disable linkage</param>
|
||||
/// <returns>操作结果 | Operation result</returns>
|
||||
public MotionResult SetSourceDetectorZLinkage(bool enabled)
|
||||
{
|
||||
try
|
||||
{
|
||||
var config = _config.SourceDetectorZLinkage;
|
||||
if (!config.Enabled)
|
||||
{
|
||||
_logger.Warn("射线源与探测器Z轴联动未在配置中启用 | Source-Detector Z-axis linkage not enabled in config");
|
||||
return MotionResult.Fail("射线源与探测器Z轴联动未启用 | Source-Detector Z-axis linkage not enabled");
|
||||
}
|
||||
|
||||
// 写入联动使能信号 | Write linkage enable signal
|
||||
var result = _signalService.EnqueueWrite(MotionSignalNames.SourceDetZ_Linkage_Enable, (bool)enabled);
|
||||
|
||||
if (result)
|
||||
{
|
||||
_logger.Info("射线源与探测器Z轴联动已{Enabled} | Source-Detector Z-axis linkage {Enabled}",
|
||||
enabled ? "启用 | enabled" : "禁用 | disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("射线源与探测器Z轴联动使能写入失败 | Source-Detector Z-axis linkage enable write failed");
|
||||
}
|
||||
|
||||
return result ? MotionResult.Ok() : MotionResult.Fail("联动使能写入失败 | Linkage enable write failed");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex, "射线源与探测器Z轴联动设置异常: {Message} | Source-Detector Z-axis linkage setting error: {Message}", ex.Message);
|
||||
return MotionResult.Fail($"联动设置异常: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置虚拟摇杆使能 | Set virtual joystick enable
|
||||
/// </summary>
|
||||
/// <param name="enabled">true=启用虚拟摇杆,false=禁用虚拟摇杆 | true=enable virtual joystick, false=disable virtual joystick</param>
|
||||
/// <returns>操作结果 | Operation result</returns>
|
||||
public MotionResult SetVirtualJoystickEnable(bool enabled)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = _signalService.EnqueueWrite(MotionSignalNames.VirtualJoystick_Enable, (bool)enabled);
|
||||
if (result)
|
||||
{
|
||||
_logger.Info("虚拟摇杆已{Enabled} | Virtual joystick {Enabled}",
|
||||
enabled ? "启用 | enabled" : "禁用 | disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("虚拟摇杆使能写入失败 | Virtual joystick enable write failed");
|
||||
}
|
||||
|
||||
return result ? MotionResult.Ok() : MotionResult.Fail("虚拟摇杆使能写入失败 | Virtual joystick enable write failed");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex, "虚拟摇杆使能设置异常: {Message} | Virtual joystick enable setting error: {Message}", ex.Message);
|
||||
return MotionResult.Fail($"虚拟摇杆使能设置异常: {ex.Message}");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 安全门控制 | Safety Door Control
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user