Socomec DIRIS A-40 Modbus register map
Panel mounted multifunction power meter for single and three phase networks with RS485 Modbus RTU. The map covers network voltages, load currents, power and power factor, import and export energy, tariffs and logical inputs and outputs.
- Protocol
- Modbus RTU
- Addresses in the manual
- 0-based protocol addresses, as sent on the wire
- 32 and 64-bit values
- High word first (AB CD)
- Registers listed
- 71
- Checked against
- MODBUS TABLES - A-40 v1.7.4 (file CMT-1.7.4B, dated 2025-01)
Address base. The communication table lists a decimal address with the same value in hex (for example 36867 is 0x9003) and no function prefix. Socomec's technical note on reading DIRIS meters (written for the A-200, said to apply to other DIRIS models such as the A-40) shows reading a register by entering the printed number unchanged in a client that uses protocol addresses, and says to add 1 only when a client numbers registers from 1. Registers are read with function 3 (pp. 4, 7-8 of that note). Treat the printed number as the wire address. Address 36867 in the manual is address 36867 on the wire.
Word order. 32-bit values put the high word first. This comes from Socomec's DIRIS technical note (p. 5), which states big-endian 32-bit registers for DIRIS meters; the A-40 communication table itself does not repeat it.
Modbus Poll and the Modbus protocol itself count from 0. The "Wire address" column is the number to type into Modbus Poll.
Downloads
The register table has every column on this page. The blocks file imports into Modbus Poll. The template JSON holds the same blocks plus unit, scale and access for scripts.
Registers
| Manual | Wire | Register | Type | Regs | Unit | Scale | Access | Area |
|---|---|---|---|---|---|---|---|---|
| 36867 | 36867 | System phase to neutral voltageVoltageLN_Sys |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36869 | 36869 | System phase to phase voltageVoltageLL_Sys |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36871 | 36871 | FrequencyFrequency · Raw value is in millihertz. |
uint32 | 2 | Hz | 0.001 | R | Holding (FC03) |
| 36873 | 36873 | Phase 1 to neutral voltageVoltage_V1 |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36875 | 36875 | Phase 2 to neutral voltageVoltage_V2 |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36877 | 36877 | Phase 3 to neutral voltageVoltage_V3 |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36879 | 36879 | Neutral voltage VnVoltage_Vn |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36881 | 36881 | Line 1 to line 2 voltageVoltage_U12 |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36883 | 36883 | Line 2 to line 3 voltageVoltage_U23 |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36885 | 36885 | Line 3 to line 1 voltageVoltage_U31 |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 36893 | 36893 | Phase voltage unbalance (Vnb)VoltageUnbalance_Vnb |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 36898 | 36898 | Line voltage unbalance (Unb)VoltageUnbalance_Unb |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 37150 | 37150 | System voltage THD (phase to neutral)THD_V_Sys |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 37151 | 37151 | System voltage THD (phase to phase)THD_U_Sys |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 37144 | 37144 | Phase 1 to neutral voltage THDTHD_V1 |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 37145 | 37145 | Phase 2 to neutral voltage THDTHD_V2 |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 37146 | 37146 | Phase 3 to neutral voltage THDTHD_V3 |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 18440 | 18440 | System currentCurrent_Sys |
uint32 | 2 | A | 0.001 | R | Holding (FC03) |
| 18458 | 18458 | Phase 1 currentCurrent_I1 |
uint32 | 2 | A | 0.001 | R | Holding (FC03) |
| 18460 | 18460 | Phase 2 currentCurrent_I2 |
uint32 | 2 | A | 0.001 | R | Holding (FC03) |
| 18462 | 18462 | Phase 3 currentCurrent_I3 |
uint32 | 2 | A | 0.001 | R | Holding (FC03) |
| 18464 | 18464 | Neutral currentCurrent_In |
uint32 | 2 | A | 0.001 | R | Holding (FC03) |
| 18466 | 18466 | Current unbalance (Inba)CurrentUnbalance_Inba |
uint16 | 1 | % | 0.01 | R | Holding (FC03) |
| 18476 | 18476 | Total active powerActivePower_Total |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 18478 | 18478 | Total reactive powerReactivePower_Total |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 18480 | 18480 | Total lagging reactive powerReactivePowerLagging_Total |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 18482 | 18482 | Total leading reactive powerReactivePowerLeading_Total |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 18484 | 18484 | Total apparent powerApparentPower_Total |
uint32 | 2 | VA | 1 | R | Holding (FC03) |
| 18486 | 18486 | Total power factorPowerFactor_Total |
int16 | 1 | 0.001 | R | Holding (FC03) | |
| 18487 | 18487 | Total power factor typePowerFactorType_Total · 0 = undefined, 1 = leading, 2 = lagging. The table lists it as an 8-bit value in one register. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 18488 | 18488 | Phase 1 active powerActivePower_P1 |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 18490 | 18490 | Phase 2 active powerActivePower_P2 |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 18492 | 18492 | Phase 3 active powerActivePower_P3 |
int32 | 2 | W | 1 | R | Holding (FC03) |
| 18494 | 18494 | Phase 1 reactive powerReactivePower_Q1 |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 18496 | 18496 | Phase 2 reactive powerReactivePower_Q2 |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 18498 | 18498 | Phase 3 reactive powerReactivePower_Q3 |
int32 | 2 | var | 1 | R | Holding (FC03) |
| 18512 | 18512 | Phase 1 apparent powerApparentPower_S1 |
uint32 | 2 | VA | 1 | R | Holding (FC03) |
| 18514 | 18514 | Phase 2 apparent powerApparentPower_S2 |
uint32 | 2 | VA | 1 | R | Holding (FC03) |
| 18516 | 18516 | Phase 3 apparent powerApparentPower_S3 |
uint32 | 2 | VA | 1 | R | Holding (FC03) |
| 18518 | 18518 | Phase 1 power factorPowerFactor_PF1 |
int16 | 1 | 0.001 | R | Holding (FC03) | |
| 18519 | 18519 | Phase 2 power factorPowerFactor_PF2 |
int16 | 1 | 0.001 | R | Holding (FC03) | |
| 18520 | 18520 | Phase 3 power factorPowerFactor_PF3 |
int16 | 1 | 0.001 | R | Holding (FC03) | |
| 19843 | 19843 | Total positive active energy (Ea+)EnergyActiveImport_kWh · Whole kWh. The tenths of a Wh are in the residual register at 19845. |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 19845 | 19845 | Total positive active energy, residual partEnergyActiveImport_Residual |
uint16 | 1 | Wh | 0.1 | R | Holding (FC03) |
| 19846 | 19846 | Total negative active energy (Ea-)EnergyActiveExport_kWh · Whole kWh. Residual at 19848. |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 19848 | 19848 | Total negative active energy, residual partEnergyActiveExport_Residual |
uint16 | 1 | Wh | 0.1 | R | Holding (FC03) |
| 19849 | 19849 | Total positive reactive energy (Er+)EnergyReactiveImport_kvarh · The table gives the unit as varh x 10^3, so the raw value is in kvarh. Residual at 19851. |
uint32 | 2 | kvarh | 1 | R | Holding (FC03) |
| 19851 | 19851 | Total positive reactive energy, residual partEnergyReactiveImport_Residual |
uint16 | 1 | varh | 0.1 | R | Holding (FC03) |
| 19852 | 19852 | Total negative reactive energy (Er-)EnergyReactiveExport_kvarh · Residual at 19854. |
uint32 | 2 | kvarh | 1 | R | Holding (FC03) |
| 19854 | 19854 | Total negative reactive energy, residual partEnergyReactiveExport_Residual |
uint16 | 1 | varh | 0.1 | R | Holding (FC03) |
| 19855 | 19855 | Total apparent energy (Eap)EnergyApparent_kVAh · Residual at 19857. |
uint32 | 2 | kVAh | 1 | R | Holding (FC03) |
| 19857 | 19857 | Total apparent energy, residual partEnergyApparent_Residual |
uint16 | 1 | VAh | 0.1 | R | Holding (FC03) |
| 19841 | 19841 | Total hour meterHourMeterTotal |
uint32 | 2 | s | 1 | R | Holding (FC03) |
| 19872 | 19872 | Partial positive active energyEnergyActiveImportPartial_kWh |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 19875 | 19875 | Partial negative active energyEnergyActiveExportPartial_kWh |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 19870 | 19870 | Partial hour meterHourMeterPartial |
uint32 | 2 | s | 1 | R | Holding (FC03) |
| 512 | 512 | Total operating hours counterOperatingHoursTotal |
uint32 | 2 | s | 1 | R | Holding (FC03) |
| 514 | 514 | Partial operating hours counterOperatingHoursPartial |
uint32 | 2 | s | 1 | R | Holding (FC03) |
| 35214 | 35214 | Tariff number in progressTariffInProgress · 0 to 7 for tariffs 1 to 8. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 20225 | 20225 | Positive active energy, tariff 1EnergyActiveImport_T1 |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 20227 | 20227 | Positive active energy, tariff 2EnergyActiveImport_T2 |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 20229 | 20229 | Positive active energy, tariff 3EnergyActiveImport_T3 |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 20231 | 20231 | Positive active energy, tariff 4EnergyActiveImport_T4 |
uint32 | 2 | kWh | 1 | R | Holding (FC03) |
| 13504 | 13504 | Number of loadsLoadsNumber |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 11280 | 11280 | Number of logical outputsOutputsNumber |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 11282 | 11282 | Output activation bitsOutputsActivated · Bit x set means output x is activated. The table lists this block as read and write. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 11521 | 11521 | Logical input 1 stateInput1State · 0 = deactivated, 1 = activated. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 50007 | 50007 | Product software versionSoftwareVersion · Encoded as in the manual example, 100 meaning version 1.00. |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 50006 | 50006 | Modbus table versionModbusTableVersion |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 50042 | 50042 | Vendor nameVendorName |
string | 8 | 1 | R | Holding (FC03) | |
| 50050 | 50050 | Product nameProductName |
string | 8 | 1 | R | Holding (FC03) |
Scale is the number to multiply the raw value by to get the unit. Types with more than one register (32 and 64-bit) follow the word order above.
Open in Modbus Poll
- Download the Modbus Poll blocks file.
- Open Modbus Poll, connect to the device and set its unit ID. In Modbus Poll set Word order to AB CD.
- In the blocks panel on the right, click Import CSV and pick the file. CSV import is a Pro feature. Without Pro, Modbus Poll polls the first 20 values of your blocks.
- The wire addresses are already in the file, so there is no 0-based or 1-based conversion to do.
Once the values look right, export the tag list to Ignition, Kepware, Node-RED, Home Assistant or Voltrus SCADA.
Source and accuracy
Manufacturer document: MODBUS tables of DIRIS A-40 (communication table) (www.socomec.fr)
MODBUS TABLES - A-40 v1.7.4 (file CMT-1.7.4B, dated 2025-01), Network Inst., Load Inst., Energy meters, Tariff and I/O tables. Read on 2026-10-24.
Also used: How to read measurement data via Modbus on Socomec DIRIS power meters (technical note) (www.socomec.us)
Addresses, types, units and scale are taken from the document above. Names and descriptions are written by Voltrus. Firmware versions can differ, so confirm a value on your own device before you rely on it.
Found a mistake? Report it by email with the register address and the manual page.