啊鑫
2025-07-26 da107f3b89271191052d9ece45e0010bb2d7d795
UniversalModbusManager.cs
@@ -501,7 +501,23 @@
        /// <param name="groupName">组名称(用于日志)</param>
        private async Task ReadFieldGroup(DynamicModbusData dynamicData, Dictionary<string, DataField> fieldGroup, string groupName)
        {
            if (_modbusClient == null) return;
            if (_modbusClient == null)
            {
                LogWarning($"Modbus客户端为null,无法读取 {groupName}");
                return;
            }
            if (!_isConnected)
            {
                LogWarning($"Modbus未连接,无法读取 {groupName}");
                return;
            }
            if (fieldGroup == null || fieldGroup.Count == 0)
            {
                LogDebug($"{groupName} 没有配置字段,跳过读取");
                return;
            }
            foreach (var kvp in fieldGroup)
            {
@@ -510,14 +526,28 @@
                try
                {
                    // 检查Modbus客户端状态
                    if (_modbusClient == null || !_modbusClient.Connected)
                    {
                        LogWarning($"Modbus客户端未连接,跳过字段 '{fieldName}'");
                        continue;
                    }
                    // 读取原始寄存器数据
                    var registers = await Task.Run(() => 
                        _modbusClient.ReadHoldingRegisters(fieldConfig.Address, fieldConfig.Length));
                    // 检查读取结果是否为null
                    if (registers == null)
                    {
                        LogWarning($"字段 '{fieldName}' 读取结果为null,地址: {fieldConfig.Address}, 长度: {fieldConfig.Length}");
                        continue;
                    }
                    // 验证数据长度
                    if (!ModbusDataParser.ValidateRegisterLength(registers, fieldConfig))
                    {
                        LogWarning($"字段 '{fieldName}' 的数据长度不足:期望{fieldConfig.Length},实际{registers.Length}");
                        LogWarning($"字段 '{fieldName}' 的数据长度不足:期望{fieldConfig.Length},实际{registers?.Length ?? 0}");
                        continue;
                    }
@@ -532,6 +562,14 @@
                catch (Exception ex)
                {
                    LogError($"读取字段 '{fieldName}' 失败: {ex.Message}");
                    // 记录详细错误信息
                    await _databaseManager?.LogErrorAsync(
                        "FieldReadError",
                        $"读取字段 '{fieldName}' 失败: {ex.Message}",
                        ex,
                        ErrorSeverity.Medium)!;
                    // 继续读取其他字段
                }
            }