现场优化7

This commit is contained in:
2026-08-27 11:08:36 +08:00
parent 38f594e4aa
commit 6a59552bc7
10 changed files with 1198 additions and 70 deletions
+19 -46
View File
@@ -510,13 +510,6 @@ namespace DeviceCommand.Devices
if (hasModifiedEnable)
await Task.Delay(100, 取消令牌);
// 3. 获取三轴原点及当前设定的目标指定位置
var (xHome, yHome, zHome) = await 查询原点位置(取消令牌);
int xTarget = await 查询轴目标位置(1, 取消令牌);
int yTarget = await 查询轴目标位置(2, 取消令牌);
int zTarget = await 查询轴目标位置(3, 取消令牌);
await WriteSingleCoilAsync(_slaveAddress, ADDR_M_X_START, true, 取消令牌);
await WriteSingleCoilAsync(_slaveAddress, ADDR_M_Y_START, true, 取消令牌);
await WriteSingleCoilAsync(_slaveAddress, ADDR_M_Z_START, true, 取消令牌);
@@ -568,15 +561,23 @@ namespace DeviceCommand.Devices
// 3. 启动三轴联动
await 启动全部轴(取消令牌);
// 5. 到达后更新当前位置(累加偏移)
_originX += X偏移量;
_originY += Y偏移量;
_originZ += Z偏移量;
bool IsArrived= await 等待到达指定位置(超时秒数,取消令牌);
if (IsArrived)
{
// 5. 到达后更新当前位置(累加偏移)
_originX += X偏移量;
_originY += Y偏移量;
_originZ += Z偏移量;
await 清空绝对寄存器();
}
else
{
var pos = await 查询全部轴绝对位置();
_originX += pos.Axis1;
_originY += pos.Axis6;
_originZ += pos.Axis2;
await 清空绝对寄存器();
}
}
public async Task 清空绝对寄存器( CancellationToken 取消令牌 = default)
{
@@ -702,40 +703,12 @@ namespace DeviceCommand.Devices
throw new TimeoutException($"等待 {超时秒数} 秒后,三轴仍未到达机械零点");
}
/// <summary>
/// 轮询等待三轴绝对位置到达指定的待定位置(容差 ±10),超时则抛出异常
/// </summary>
/// <param name="xTarget">X轴目标位置</param>
/// <param name="yTarget">Y轴目标位置</param>
/// <param name="zTarget">Z轴目标位置</param>
/// <param name="超时秒数">最大等待时间(秒)</param>
/// <param name="取消令牌">取消令牌</param>
private async Task 等待到达待定位置(int xTarget, int yTarget, int zTarget, int 超时秒数, CancellationToken 取消令牌 = default)
{
var deadline = DateTime.Now.AddSeconds(超时秒数);
while (DateTime.Now < deadline)
{
取消令牌.ThrowIfCancellationRequested();
var pos = await 查询全部轴绝对位置(取消令牌);
if (Math.Abs(pos.Axis1 - xTarget) <= 10
&& Math.Abs(pos.Axis6 - yTarget) <= 10
&& Math.Abs(pos.Axis2 - zTarget) <= 10)
return;
await Task.Delay(100, 取消令牌);
}
throw new TimeoutException($"等待 {超时秒数} 秒后,三轴仍未到达待定位置 (X:{xTarget}, Y:{yTarget}, Z:{zTarget})");
}
/// <summary>
/// 轮询等待三轴绝对位置均到达各自设定的目标位置(容差 ±10),超时则抛出异常
/// </summary>
/// <param name="超时秒数">最大等待时间(秒)</param>
/// <param name="取消令牌">取消令牌</param>
public async Task 等待到达指定位置(int 超时秒数, CancellationToken 取消令牌 = default)
public async Task<bool> 等待到达指定位置(int 超时秒数, CancellationToken 取消令牌 = default)
{
var targetX = await 查询轴目标位置(1, 取消令牌);
var targetY = await 查询轴目标位置(2, 取消令牌);
@@ -751,7 +724,7 @@ namespace DeviceCommand.Devices
if (Math.Abs(pos.Axis1 - targetX) <= 10
&& Math.Abs(pos.Axis6 - targetY) <= 10
&& Math.Abs(pos.Axis2 - targetZ) <= 10)
return;
return true;
await Task.Delay(100, 取消令牌);
}
+11 -1
View File
@@ -141,7 +141,17 @@ namespace DeviceCommand.Devices
IOBoard 目标板卡 = GetBoardInstance(io信息.ModuleIndex);
await 目标板卡.写输出开关(_slaveAddress, io信息.Address, 开关状态);
}
/// <summary>
/// 执行指定台架的功能动作控制(带高低电平开关及底层安全互锁)
/// </summary>
/// <param name="板卡序号">板卡序号 (0 - 1)</param>
/// <param name="开始地址">寄存器初始地址(0-15)</param>
/// <param name="数据">开关状态数组 (true: 开启吸合, false: 关闭断开)[true,true,false]</param>
/// <param name="取消令牌">异步取消令牌</param>
public async Task 批量写输出开关(int 板卡序号,byte 站号, ushort 开始地址, bool[] 数据, CancellationToken 取消令牌 = default)
{
await GetBoardInstance(板卡序号).批量写输出开关(站号, 开始地址, 数据);
}
/// <summary>
/// 内部路由辅助方法:根据板卡索引安全获取当前连接的实例对象
/// </summary>