现场优化7
This commit is contained in:
@@ -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, 取消令牌);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user