水冷机驱动注释优化

This commit is contained in:
“hsc”
2026-08-27 11:17:38 +08:00
parent eabe73edd5
commit f46df16275
+93 -29
View File
@@ -8,16 +8,22 @@ using System.Threading.Tasks;
namespace DeviceCommand.Devices namespace DeviceCommand.Devices
{ {
/// <summary> /// <summary>
/// 水冷机 Modbus TCP 驱动 (支持3回路独立控制) /// MCc30W 水冷机(一拖三控制),基于 Modbus TCP 协议(MCx ModbusTCP)通信。
/// 通讯协议: MCx ModbusTCP /// 支持 3 回路独立控制:出液温度/流量/压力的目标设定与实时读取、回路启停、
/// 预控温、控流/控压模式切换、自动回液、报警复位/消音及状态回读。
/// 多寄存器数值采用 IEEE754 浮点大端序编码(2 个 16 位寄存器)。
/// </summary> /// </summary>
[ACPCommand] [ACPCommand]
public class : ModbusTcp public class MCc30W : ModbusTcp
{ {
// 默认配置 (可从 config 或 TcpConfig 注入) // 默认配置 (可从 config 或 TcpConfig 注入)
private readonly byte _slaveId = 0x01; // 单元标识符 private readonly byte _slaveId = 0x01; // 单元标识符
public (TcpConfig config) : base(config) /// <summary>
/// 构造函数,初始化 Modbus TCP 连接配置。
/// </summary>
/// <param name="config">TCP 连接配置(IP、端口等)</param>
public MCc30W(TcpConfig config) : base(config)
{ {
} }
@@ -81,8 +87,11 @@ namespace DeviceCommand.Devices
#region 2. API ( 3 ) #region 2. API ( 3 )
/// <summary> /// <summary>
/// 设置指定回路的出液目标温度 (℃) /// 设置指定回路的出液目标温度,写入对应回路的保持寄存器。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="temperature">出液目标温度,单位 ℃</param>
/// <param name="ct">异步取消令牌</param>
public virtual async Task Async(int loop, float temperature, CancellationToken ct = default) public virtual async Task Async(int loop, float temperature, CancellationToken ct = default)
{ {
ushort address = (ushort)(0x0000 + (loop - 1) * 2); ushort address = (ushort)(0x0000 + (loop - 1) * 2);
@@ -91,8 +100,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 设置指定回路的出液目标流量 (L/min) /// 设置指定回路的出液目标流量,写入对应回路的保持寄存器。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="flow">出液目标流量,单位 L/min</param>
/// <param name="ct">异步取消令牌</param>
public virtual async Task Async(int loop, float flow, CancellationToken ct = default) public virtual async Task Async(int loop, float flow, CancellationToken ct = default)
{ {
ushort address = (ushort)(0x0008 + (loop - 1) * 2); ushort address = (ushort)(0x0008 + (loop - 1) * 2);
@@ -101,8 +113,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 设置指定回路的出液目标压力 (kPa) /// 设置指定回路的出液目标压力,写入对应回路的保持寄存器。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="pressure">出液目标压力,单位 kPa</param>
/// <param name="ct">异步取消令牌</param>
public virtual async Task Async(int loop, float pressure, CancellationToken ct = default) public virtual async Task Async(int loop, float pressure, CancellationToken ct = default)
{ {
ushort address = (ushort)(0x000E + (loop - 1) * 2); ushort address = (ushort)(0x000E + (loop - 1) * 2);
@@ -111,8 +126,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的当前出液温度 (℃) /// 读取指定回路的当前出液温度
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>当前出液温度,单位 ℃</returns>
[Monitorable("水冷机出液当前温度")] [Monitorable("水冷机出液当前温度")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -122,9 +140,12 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的当前出液流量 (L/min) /// 读取指定回路的当前出液流量
/// 注意:协议中三通道流量地址间隔为 0x08 /// 注意:协议中三通道流量地址间隔为 0x08
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>当前出液流量,单位 L/min</returns>
[Monitorable("水冷机出液当前流量")] [Monitorable("水冷机出液当前流量")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -134,9 +155,12 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的当前出液压力 (kPa) /// 读取指定回路的当前出液压力
/// 注意:协议中三通道压力地址间隔为 0x08 /// 注意:协议中三通道压力地址间隔为 0x08
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>当前出液压力,单位 kPa</returns>
[Monitorable("水冷机出液当前压力")] [Monitorable("水冷机出液当前压力")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -146,8 +170,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的当前回液压力 (kPa) (0x0022 + (loop-1)*8) /// 读取指定回路的当前回液压力(寄存器地址 0x0022 + (loop-1)*8)。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>当前回液压力,单位 kPa</returns>
[Monitorable("水冷机回液当前压力")] [Monitorable("水冷机回液当前压力")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -157,8 +184,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的当前回液温度 (℃) (0x0024 + (loop-1)*8) /// 读取指定回路的当前回液温度(寄存器地址 0x0024 + (loop-1)*8)。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>当前回液温度,单位 ℃</returns>
[Monitorable("水冷机回液当前温度")] [Monitorable("水冷机回液当前温度")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -168,8 +198,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的外部温度反馈 (℃) (0x0036 + (loop-1)*2) /// 读取指定回路的外部温度反馈(寄存器地址 0x0036 + (loop-1)*2)。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>外部温度反馈值,单位 ℃</returns>
[Monitorable("水冷机外部温度反馈")] [Monitorable("水冷机外部温度反馈")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -179,8 +212,11 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取指定回路的温变速率设定 (℃/min) (0x0006 + (loop-1)*2) /// 读取指定回路的温变速率设定值(寄存器地址 0x0006 + (loop-1)*2)。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3)</param>
/// <param name="ct">异步取消令牌</param>
/// <returns>温变速率设定值,单位 ℃/min</returns>
[Monitorable("水冷机温变速率")] [Monitorable("水冷机温变速率")]
public virtual async Task<float> Async(int loop, CancellationToken ct = default) public virtual async Task<float> Async(int loop, CancellationToken ct = default)
{ {
@@ -190,8 +226,10 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取回抽2流量目标值 (L/min) (0x0016) /// 读取回抽2流量目标值(固定寄存器地址 0x0016,不区分回路)。
/// </summary> /// </summary>
/// <param name="ct">异步取消令牌</param>
/// <returns>回抽2流量目标值,单位 L/min</returns>
[Monitorable("水冷机回抽2流量目标值")] [Monitorable("水冷机回抽2流量目标值")]
public virtual async Task<float> 2Async(CancellationToken ct = default) public virtual async Task<float> 2Async(CancellationToken ct = default)
{ {
@@ -223,8 +261,12 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 启动/停止 指定回路 (Bit 01, 02, 03) /// 启动/停止指定回路(操作系统状态控制寄存器 0x0014 的 Bit 01/02/03)。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3),分别对应 Bit 1/2/3</param>
/// <param name="enable">true: 启动回路, false: 停止回路</param>
/// <param name="ct">异步取消令牌</param>
/// <exception cref="ArgumentOutOfRangeException">回路号不在 1-3 范围内时抛出</exception>
public virtual async Task Async(int loop, bool enable, CancellationToken ct = default) public virtual async Task Async(int loop, bool enable, CancellationToken ct = default)
{ {
if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3"); if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3");
@@ -232,8 +274,12 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 启动/停止 指定回路 预控温 (Bit 10, 11, 12) /// 启动/停止指定回路预控温(操作系统状态控制寄存器 0x0014 的 Bit 10/11/12)。
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3),分别对应 Bit 10/11/12</param>
/// <param name="enable">true: 开启预控温, false: 关闭预控温</param>
/// <param name="ct">异步取消令牌</param>
/// <exception cref="ArgumentOutOfRangeException">回路号不在 1-3 范围内时抛出</exception>
public virtual async Task Async(int loop, bool enable, CancellationToken ct = default) public virtual async Task Async(int loop, bool enable, CancellationToken ct = default)
{ {
if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3"); if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3");
@@ -241,9 +287,12 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 设置指定回路 流量/压力 控制模式 (Bit 04, 05, 06) /// 设置指定回路流量/压力控制模式(操作系统状态控制寄存器 0x0014 的 Bit 04/05/06)。
/// true=控压, false=控流
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3),分别对应 Bit 4/5/6</param>
/// <param name="isPressureControl">true: 控压模式, false: 控流模式</param>
/// <param name="ct">异步取消令牌</param>
/// <exception cref="ArgumentOutOfRangeException">回路号不在 1-3 范围内时抛出</exception>
public virtual async Task Async(int loop, bool isPressureControl, CancellationToken ct = default) public virtual async Task Async(int loop, bool isPressureControl, CancellationToken ct = default)
{ {
if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3"); if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3");
@@ -251,25 +300,32 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 报警复位 (Bit 08) /// 报警复位(操作系统状态控制寄存器 0x0014 的 Bit 08),用于清除水冷机报警状态。
/// </summary> /// </summary>
/// <param name="enable">true: 置位报警复位位, false: 清除该位</param>
/// <param name="ct">异步取消令牌</param>
public virtual async Task Async(bool enable, CancellationToken ct = default) public virtual async Task Async(bool enable, CancellationToken ct = default)
{ {
await SetControlBit(8, enable, ct); await SetControlBit(8, enable, ct);
} }
/// <summary> /// <summary>
/// 报警消音 (Bit 09) /// 报警消音(操作系统状态控制寄存器 0x0014 的 Bit 09),用于关闭报警蜂鸣。
/// </summary> /// </summary>
/// <param name="enable">true: 置位消音位, false: 清除该位</param>
/// <param name="ct">异步取消令牌</param>
public virtual async Task Async(bool enable, CancellationToken ct = default) public virtual async Task Async(bool enable, CancellationToken ct = default)
{ {
await SetControlBit(9, enable, ct); await SetControlBit(9, enable, ct);
} }
/// <summary> /// <summary>
/// 设置指定回路 自动回液开关 (寄存器 0x0015, 低位部分) /// 设置指定回路自动回液开关(操作寄存器 0x0015 的 Bit 13/14/15)。
/// 此方法操作的是 0x0015 寄存器的低 16 位
/// </summary> /// </summary>
/// <param name="loop">回路编号 (1-3),分别对应 Bit 13/14/15</param>
/// <param name="enable">true: 开启自动回液, false: 关闭自动回液</param>
/// <param name="ct">异步取消令牌</param>
/// <exception cref="ArgumentOutOfRangeException">回路号不在 1-3 范围内时抛出</exception>
public virtual async Task Async(int loop, bool enable, CancellationToken ct = default) public virtual async Task Async(int loop, bool enable, CancellationToken ct = default)
{ {
if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3"); if (loop < 1 || loop > 3) throw new ArgumentOutOfRangeException(nameof(loop), "回路号必须为1, 2, 3");
@@ -293,8 +349,10 @@ namespace DeviceCommand.Devices
#region 4. () #region 4. ()
/// <summary> /// <summary>
/// 读取心跳帧 (0x0044),用于判断通讯是否正常 /// 读取心跳帧(寄存器 0x0044),心跳值持续变化,用于判断通讯是否正常
/// </summary> /// </summary>
/// <param name="ct">异步取消令牌</param>
/// <returns>32 位心跳计数值</returns>
[Monitorable("水冷机心跳帧")] [Monitorable("水冷机心跳帧")]
public virtual async Task<uint> Async(CancellationToken ct = default) public virtual async Task<uint> Async(CancellationToken ct = default)
{ {
@@ -303,8 +361,10 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取运行状态反馈 (0x0046),含各回路完成状态 (Sheet5) /// 读取运行状态反馈(寄存器 0x0046,含各回路完成状态位(协议 Sheet5)。
/// </summary> /// </summary>
/// <param name="ct">异步取消令牌</param>
/// <returns>32 位运行状态位图</returns>
[Monitorable("水冷机运行状态反馈")] [Monitorable("水冷机运行状态反馈")]
public virtual async Task<uint> Async(CancellationToken ct = default) public virtual async Task<uint> Async(CancellationToken ct = default)
{ {
@@ -313,8 +373,10 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取报警信息1 (0x003C) /// 读取报警信息1(寄存器 0x003C),每一位对应一种报警类型。
/// </summary> /// </summary>
/// <param name="ct">异步取消令牌</param>
/// <returns>32 位报警信息位图,0 表示无报警</returns>
[Monitorable("水冷机报警信息1")] [Monitorable("水冷机报警信息1")]
public virtual async Task<uint> 1Async(CancellationToken ct = default) public virtual async Task<uint> 1Async(CancellationToken ct = default)
{ {
@@ -323,8 +385,10 @@ namespace DeviceCommand.Devices
} }
/// <summary> /// <summary>
/// 读取报警信息2 (0x003E) /// 读取报警信息2(寄存器 0x003E),每一位对应一种报警类型。
/// </summary> /// </summary>
/// <param name="ct">异步取消令牌</param>
/// <returns>32 位报警信息位图,0 表示无报警</returns>
[Monitorable("水冷机报警信息2")] [Monitorable("水冷机报警信息2")]
public virtual async Task<uint> 2Async(CancellationToken ct = default) public virtual async Task<uint> 2Async(CancellationToken ct = default)
{ {