省流區域:一次讀取主要寄存器


1. 通訊設定

  • 介面:RS-485 雙線差分
  • 協議:Modbus RTU
  • 波特率:4800–57600 bps
  • 站號:1–255
  • 格式:N,8,1(無校驗位、8 位資料、1 停止位,依設備設定)

2. Modbus RTU 封包格式

2.1 請求 (Request)

[Slave Addr][Function Code][Data Addr Hi][Data Addr Lo][Qty Hi][Qty Lo][CRC Lo][CRC Hi]
  • Slave Addr:電表 Modbus 位址 (1 byte)
  • Function Code:功能碼 (0x03 / 0x04)
  • Data Addr:欲讀寄存器位址 (2 bytes)
  • Qty:讀取寄存器數量 (2 bytes)
  • CRC:CRC16 校驗碼 (2 bytes)

2.2 回覆 (Response)

正常回覆:

[Slave Addr][Function Code][Byte Count][Data…][CRC Lo][CRC Hi]

異常回覆:

[[Slave Addr][Function Code + 0x80][Exception Code][CRC Lo][CRC Hi]

3. 常用讀取功能碼

功能碼動作
0x03讀 Holding Registers
0x04讀 Input Registers

SPM-3 多用 0x03 讀取量測值和狀態,少用寫入。


4. 常用寄存器範例

4.1 輸入寄存器 (Input Registers, 0x04)

Modbus RegisterHex Addr參數格式
341550x103ADemand_kW_Pre_PeriodDWord Float
341570x103CDemand_kWDWord Float
341590x103EDemand_Remain_TimeUInt
341600x103FV_Unbalance_RateDWord Float
341620x1041I_Unbalance_RateDWord Float
341840x1057Alarm FlagWord
341850x1058THD_VaDWord Float

DWord Float 表示 IEEE-754 32 位浮點數(2 個寄存器)
Alarm Flag 為單一 Word 位元 Flag


5. 讀取三相電壓範例

假設 Meter Address = 0x0F,讀寄存器 0x1090 (Va, 32-bit Float):

請求

0F 04 10 90 00 02 CRC CRC

回覆 (正常)

0F 04 04 <4 bytes Data> CRC CRC

  • 4 bytes Data 為浮點數 Va
  • CRC 校驗必須正確計算

6. CRC16 計算

Modbus RTU 使用 CRC16 (Polynomial 0xA001)

  • 發送前計算並附加於封包末端
  • 接收時驗證 CRC 正確性

7. 錯誤回覆 (Exception Response)

Exception Code意義
01Illegal Function
02Illegal Data Address
03Illegal Data Value
04Slave Device Failure
[Slave Addr][Function Code+0x80][Exception Code][CRC Lo][CRC Hi]

省流區域:一次讀取主要寄存器

假設 Meter Address = 0x01,要讀主要量測數據(0x103A → 0x1058):

請求封包:
01 04 10 00 00 5A CRC_LO CRC_HI

  • 01:Meter Address
  • 04:讀 Input Registers
  • 10 00:起始位址 0x1000
  • 00 5A:讀 90 個寄存器
  • CRC_LO / CRC_HI:CRC16 校驗

回覆封包格式:
01 04 B4 <180 bytes Data> CRC_LO CRC_HI

  • B4 = 180 bytes = 90 寄存器 × 2 bytes
  • Data 依序對應各寄存器

解析方式

將回覆的 180 bytes 依照寄存器順序解析:

寄存器範圍參數格式Data Bytes 範圍中文註解
0x1000-0x1001Vln_aDWord FloatByte 0-3A 相線電壓
0x1002-0x1003Vln_bDWord FloatByte 4-7B 相線電壓
0x1004-0x1005Vln_cDWord FloatByte 8-11C 相線電壓
0x1006-0x1007Vln_avgDWord FloatByte 12-15三相線電壓平均值
0x1008-0x1009Vll_abDWord FloatByte 16-19AB 相間電壓
0x100A-0x100BVll_bcDWord FloatByte 20-23BC 相間電壓
0x100C-0x100DVll_caDWord FloatByte 24-27CA 相間電壓
0x100E-0x100FVll_avgDWord FloatByte 28-31三相相間電壓平均值
0x1010-0x1011I_aDWord FloatByte 32-35A 相電流
0x1012-0x1013I_bDWord FloatByte 36-39B 相電流
0x1014-0x1015I_cDWord FloatByte 40-43C 相電流
0x1016-0x1017I_avgDWord FloatByte 44-47三相電流平均值
0x1018-0x1019FrequencyDWord FloatByte 48-51電源頻率
0x101A-0x101BkW_aDWord FloatByte 52-55A 相有功功率
0x101C-0x101DkW_bDWord FloatByte 56-59B 相有功功率
0x101E-0x101FkW_cDWord FloatByte 60-63C 相有功功率
0x1020-0x1021kW_totDWord FloatByte 64-67三相總有功功率
0x1022-0x1023kvar_aDWord FloatByte 68-71A 相無功功率
0x1024-0x1025kvar_bDWord FloatByte 72-75B 相無功功率
0x1026-0x1027kvar_cDWord FloatByte 76-79C 相無功功率
0x1028-0x1029kvar_totDWord FloatByte 80-83三相總無功功率
0x102A-0x102BkVA_aDWord FloatByte 84-87A 相視在功率
0x102C-0x102DkVA_bDWord FloatByte 88-91B 相視在功率
0x102E-0x102FkVA_cDWord FloatByte 92-95C 相視在功率
0x1030-0x1031kVA_totDWord FloatByte 96-99三相總視在功率
0x1032-0x1033PFDWord FloatByte 100-103功率因數
0x1034-0x1035kWhDWord FloatByte 104-107有功累計電能
0x1036-0x1037kvarhDWord FloatByte 108-111無功累計電能
0x1038-0x1039kVAhDWord FloatByte 112-115視在累計電能
0x103A-0x103BDemand_kW_Pre_PeriodDWord FloatByte 116-119前週期需量有功功率
0x103C-0x103DDemand_kWDWord FloatByte 120-123當前需量有功功率
0x103EDemand_Remain_TimeUIntByte 124-125需量剩餘時間(秒)
0x103F-0x1040V_Unbalance_RateDWord FloatByte 126-129電壓不平衡率 (%)
0x1041-0x1042I_Unbalance_RateDWord FloatByte 130-133電流不平衡率 (%)
0x1043-0x1044Va_Eligibility_RateDWord FloatByte 134-137A 相電壓合格率 (%)
0x1045-0x1046Vb_Eligibility_RateDWord FloatByte 138-141B 相電壓合格率 (%)
0x1047-0x1048Vc_Eligibility_RateDWord FloatByte 142-145C 相電壓合格率 (%)
0x1049-0x104AVavg_Eligibility_RateDWord FloatByte 146-149三相平均電壓合格率 (%)
0x104B-0x104CVa Eligible Running HourUint32Byte 150-153A 相電壓合格運行時數
0x104D-0x104EVb Eligible Running HourUint32Byte 154-157B 相電壓合格運行時數
0x104F-0x1050Vc Eligible Running HourUint32Byte 158-161C 相電壓合格運行時數
0x1051-0x1052V Eligible total check Running HoursUint32Byte 162-165電壓合格總判斷積時
0x1053-0x1054Load Running HourUint32Byte 166-169系統負載運行積時
0x1055-0x1056Meter Running HourUint32Byte 170-173儀表運轉積時
0x1057Alarm FlagWordByte 174-175警報狀態 Flag,每個 bit 對應不同警告1
0x1058-0x1059THD_VaDWord FloatByte 176-179A 相電壓諧波總失真率 (%)

DWord Float = 4 bytes (2 個寄存器)
UInt / Word = 2 bytes

解析步驟:

  1. 先去掉 Slave Addr、Function Code、Byte Count
  2. 拆每個寄存器對應的 byte 長度
  3. DWord Float → IEEE-754 32-bit float
  4. UInt / Word → 16-bit 整數
  5. Alarm Flag → 每個 bit 對應警告狀態

參考

Footnotes

  1. bit 0:過壓 Over Voltage
    bit 1:過流 Over Current
    bit 2:過頻 Over Frequency
    bit 3:需量過載 Over Demand
    bit 4:欠壓 Under Voltage
    bit 5:欠流 Under Current
    bit 6:欠頻 Under Frequency
    bit 7:保留 / 未使用
    bit 8-15:保留 / 未使用 ↩