命令树优化,测试编辑区域优化
This commit is contained in:
@@ -48,6 +48,11 @@ namespace DeviceCommand.Devices
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IO 板卡组(三工位统一调度),封装 3 块 IO 继电器板卡的访问。
|
||||
/// 根据 ACP 硬件接线图的点位映射字典,按台架序号路由到对应板卡的线圈地址,
|
||||
/// 并内置充电/放电互锁保护,防止同时吸合造成短路。
|
||||
/// </summary>
|
||||
[ACPCommand]
|
||||
public class IOBoardGroup
|
||||
{
|
||||
@@ -121,6 +126,13 @@ namespace DeviceCommand.Devices
|
||||
}}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数,注入三个工位的 IO 板卡实例。
|
||||
/// </summary>
|
||||
/// <param name="board1">1# 工位 IO 板卡实例</param>
|
||||
/// <param name="board2">2# 工位 IO 板卡实例</param>
|
||||
/// <param name="board3">3# 工位 IO 板卡实例</param>
|
||||
/// <exception cref="ArgumentNullException">任一块板卡实例为空时抛出</exception>
|
||||
// 修改构造函数以支持 3 个板块
|
||||
public IOBoardGroup(IOBoard board1, IOBoard board2, IOBoard board3)
|
||||
{
|
||||
@@ -168,49 +180,25 @@ namespace DeviceCommand.Devices
|
||||
await 目标板卡.写输出开关(_slaveAddress, io信息.Address, 开关状态);
|
||||
}
|
||||
|
||||
// =================================================================================
|
||||
// 以下为新增的原生命令透传接口,使用台架序号自动路由至对应 IOBoard
|
||||
// =================================================================================
|
||||
|
||||
/// <summary>
|
||||
/// 针对指定台架直接写入单个输出开关
|
||||
/// 向指定板卡批量写入输出开关状态,直接透传到对应板卡的批量写线圈操作。
|
||||
/// </summary>
|
||||
public async Task 写输出开关(int 台架序号, byte 站号, ushort 开始地址, bool data)
|
||||
/// <param name="板卡序号">板卡序号 (1 - 3)</param>
|
||||
/// <param name="站号">Modbus 从站站号</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)
|
||||
{
|
||||
IOBoard targetBoard = GetBoardInstance(台架序号);
|
||||
await targetBoard.写输出开关(站号, 开始地址, data);
|
||||
await GetBoardInstance(板卡序号).批量写输出开关(站号, 开始地址, 数据);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 针对指定台架直接批量写入输出开关
|
||||
/// </summary>
|
||||
public async Task 批量写输出开关(int 台架序号, byte 站号, ushort 开始地址, bool[] datas)
|
||||
{
|
||||
IOBoard targetBoard = GetBoardInstance(台架序号);
|
||||
await targetBoard.批量写输出开关(站号, 开始地址, datas);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 针对指定台架直接读取单个输出开关状态
|
||||
/// </summary>
|
||||
public async Task 读输出开关(int 台架序号, byte 站号, ushort 开始地址)
|
||||
{
|
||||
IOBoard targetBoard = GetBoardInstance(台架序号);
|
||||
await targetBoard.读输出开关(站号, 开始地址);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 针对指定台架直接批量读取输出开关状态
|
||||
/// </summary>
|
||||
public async Task<bool[]> 批量读输出开关(int 台架序号, byte 站号, ushort 开始地址, ushort 数量)
|
||||
{
|
||||
IOBoard targetBoard = GetBoardInstance(台架序号);
|
||||
return await targetBoard.批量读输出开关(站号, 开始地址, 数量);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 内部路由辅助方法:根据板卡/台架索引安全获取当前连接的实例对象
|
||||
/// 内部路由辅助方法:根据板卡序号安全获取对应的 IO 板卡实例。
|
||||
/// </summary>
|
||||
/// <param name="moduleIndex">板卡序号 (1 - 3)</param>
|
||||
/// <returns>对应的 IO 板卡实例</returns>
|
||||
/// <exception cref="ArgumentOutOfRangeException">板卡序号不在 1-3 范围内时抛出</exception>
|
||||
/// <exception cref="InvalidOperationException">板卡实例未初始化时抛出</exception>
|
||||
private IOBoard GetBoardInstance(int moduleIndex)
|
||||
{
|
||||
IOBoard board = moduleIndex switch
|
||||
|
||||
Reference in New Issue
Block a user