ADF400L系列多用户电能表支持Modbus TCP协议通信,通过以太网接口可以实现远程数据读取。该系列电表最多支持:
通过寄存器配置:
C#// 读取三相电压(0.1V)
const ushort UA_ADDR = 0x033F; // A相电压
const ushort UB_ADDR = 0x0340; // B相电压
const ushort UC_ADDR = 0x0341; // C相电压
// 读取结果需除以10转换为V
double Ua = ReadHoldingRegister(UA_ADDR) / 10.0;
double Ub = ReadHoldingRegister(UB_ADDR) / 10.0;
double Uc = ReadHoldingRegister(UC_ADDR) / 10.0;
C#// 读取三相电流(0.01A)
const ushort IA_ADDR = 0x0342; // A相电流
const ushort IB_ADDR = 0x0343; // B相电流
const ushort IC_ADDR = 0x0344; // C相电流
// 读取结果需除以100转换为A
double Ia = ReadHoldingRegister(IA_ADDR) / 100.0;
double Ib = ReadHoldingRegister(IB_ADDR) / 100.0;
double Ic = ReadHoldingRegister(IC_ADDR) / 100.0;
C#// 读取总有功电能(0.01kWh)
const ushort TOTAL_ENERGY_ADDR_L = 0x035E; // 低位地址
const ushort TOTAL_ENERGY_ADDR_H = 0x035F; // 高位地址
// 读取两个寄存器
ushort lowWord = ReadHoldingRegister(TOTAL_ENERGY_ADDR_L);
ushort highWord = ReadHoldingRegister(TOTAL_ENERGY_ADDR_H);
// 组合为32位值
uint rawValue = ((uint)lowWord << 16) | highWord ;
// 应用互感器变比
ushort pt = ReadHoldingRegister(0x0951); // PT变比
ushort ct = ReadHoldingRegister(0x0952); // CT变比
// 计算实际电能值(kWh)
double actualEnergy = (rawValue / 100.0) * pt * ct;
这里的高低位一定注意,与我习惯的高位在前不现,它是低位在前。
C#// 读取总功率因数(0.001)
const ushort PF_ADDR = 0x034D;
// 读取结果需除以1000
double powerFactor = ReadHoldingRegister(PF_ADDR) / 1000.0;
C#try
{
ushort numInputs = 2;
ushort[] inputs = master.ReadHoldingRegisters(tableId, startAddress, numInputs);
// 获取两个寄存器的值
ushort word1 = inputs[0]; // 第一个字
ushort word2 = inputs[1]; // 第二个字
uint value1 = ((uint)word1 << 16) | word2;
sb.AppendLine($" 原始值: Word1=0x{word1:X4}, Word2=0x{word2:X4}");
}
catch (Exception ex)
{
sb.AppendLine($"{description}[0x{startAddress:X4}] 读取错误: {ex.Message}");
}
以下截图,我是测试出来的数据。
常见故障排查:
通过以上配置和示例代码,可以实现对ADF400L系列多用户电能表的数据读取和监控。
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!