RS485 Register scanner

Hello Here,

Please I want to read data from a separate module via RS485 Modbus RTU, but I do not know the registers of the module, neither do i have the datasheet in order to know the registers. How do I get the registers?

Why do you want to read registers of unknown format and content?

I want to read values stores in them, mainly integers

Perhaps providing the make and model of the module may be a start! Have you emailed the manufacturer? Have you GOOGLED the model, or any markings on the module?

Okay. I will do that, but, is there a way to scan for the registers address, just as with I2C devices?

Hello
Design, code and build a sniffer and analyze the communications.
Have a nice day and enjoy coding in C++.

I don't think so. I'm no Modbus expert, but I don't think that there is an agreed standard where, for example, you can always get a response reading address 0001 of every device. Then again, I could be completely wrong.

As already suggested, why don't you tell us the make and model of the of the device? Somebody else may already have used one.

Nope, MODBUS is an ALP for communication, so will not work in that way!

Try here for details

if you can't google them: try all and see what registers don't give you a "not valid register" error and check the returned content.

one for loop for holding registers
one for loop for discrete inputs
one for loop for single coils
one for loop for input registers

depending on your device you might be able to omit some tests.

By the way, can you finally make a comment of WHICH DEVICE you want to read. Provide a link, a description, pictures...

I have gotten the registers, here they are:

This is a list of registers in the LXP inverter. The numbers here are
decimal.

This is all reverse engineered and worked out manually so there may be
omissions. Please take care before changing critical values without proper
testing in case I got anything wrong!

Registers 21 and 110 are bitmasks; normally you fetch the previous
settings, apply your changes, and set the new value back.

0-1 MODEL
contains (not sure how to decode these yet):
lithiumType
powerRating
leadAcidType
ruleMask
batteryType
meterBrand
measurement
rule
2-8 SERIAL_NUM
7 FW_CODE ?
9-10 ?
12-14 TIME
15 COM_ADDR
16 LANGUAGE
20 PV_INPUT_MODE
21 FUNC_AC_CHARGE / FUNC_FORCED_DISCHG_EN / FUNC_FORCED_CHG_EN /
FUNC_EPS_EN / FUNC_FEED_IN_GRID_EN / FUNC_SET_TO_STANDBY ?

LEAST SIGNIFICANT BYTE

bit 7 = ac charge
bit 6 = grid on power ss
bit 5 = neutral detect
bit 4 = anti island
bit 3 = ? can't see any effect. normally off..
bit 2 = drms
bit 1 = ovf load derate
bit 0 = eps
fails with error code 3? (134 in dataframe second byte)

MOST SIGNIFICANT BYTE

bit 7 = feed in grid
bit 6 = DCI
bit 5 = GFCI
bit 4 = ? can't see any effect. normally on.
bit 3 = charge priority (charge before supplying load)
bit 2 = forced discharge
bit 1 = normal/standby (does not appear to save any power anyway)
bit 0 = seamless eps switching
22 START_PV_VOLT
23 CONNECT_TIME
24 RECONNECT_TIME
25 GRID_VOLT_CONN_LOW
26 GRID_VOLT_CONN_HIGH
27 GRID_FREQ_CONN_LOW
28 GRID_FREQ_CONN_HIGH
29 GRID_VOLT_LIMIT1_LOW
30 GRID_VOLT_LIMIT1_HIGH
31 GRID_VOLT_LIMIT1_LOW_TIME
32 GRID_VOLT_LIMIT1_HIGH_TIME
33 GRID_VOLT_LIMIT2_LOW
34 GRID_VOLT_LIMIT2_HIGH
35 GRID_VOLT_LIMIT2_LOW_TIME
36 GRID_VOLT_LIMIT2_HIGH_TIME
37 GRID_VOLT_LIMIT3_LOW
38 GRID_VOLT_LIMIT3_HIGH
39 GRID_VOLT_LIMIT3_LOW_TIME
40 GRID_VOLT_LIMIT3_HIGH_TIME
41 GRID_VOLT_MOV_AVG_HIGH
42 GRID_FREQ_LIMIT1_LOW
43 GRID_FREQ_LIMIT1_HIGH
44 GRID_FREQ_LIMIT1_LOW_TIME
45 GRID_FREQ_LIMIT1_HIGH_TIME
46 GRID_FREQ_LIMIT2_LOW
47 GRID_FREQ_LIMIT2_HIGH
48 GRID_FREQ_LIMIT2_LOW_TIME
49 GRID_FREQ_LIMIT2_HIGH_TIME
50 GRID_FREQ_LIMIT3_LOW
51 GRID_FREQ_LIMIT3_HIGH
52 GRID_FREQ_LIMIT3_LOW_TIME
53 GRID_FREQ_LIMIT3_HIGH_TIME
54 MAX_Q_PERCENT_FOR_QV
55 V1L
56 V2L
57 V1H
58 V2H
59 REACTIVE_POWER_CMD_TYPE
60 ACTIVE_POWER_PERCENT_CMD
61 REACTIVE_POWER_PERCENT_CMD
62 PF_CMD
63 POWER_SOFT_START_SLOPE
64 CHARGE_POWER_PERCENT_CMD
65 DISCHG_POWER_PERCENT_CMD
66 AC_CHARGE_POWER_CMD
67 AC_CHARGE_SOC_LIMIT
68 AC_CHARGE_START_HOUR / AC_CHARGE_START_MINUTE
69 AC_CHARGE_END_HOUR / AC_CHARGE_END_MINUTE
70 AC_CHARGE_START_HOUR_1 / AC_CHARGE_START_MINUTE_1
71 AC_CHARGE_END_HOUR_1 / AC_CHARGE_END_MINUTE_1
72 AC_CHARGE_START_HOUR_2 / AC_CHARGE_START_MINUTE_2
73 AC_CHARGE_END_HOUR_2 / AC_CHARGE_END_MINUTE_2
74 FORCED_CHG_POWER_CMD
75 FORCED_CHG_SOC_LIMIT
76 FORCED_CHARGE_START_HOUR / FORCED_CHARGE_START_MINUTE
77 FORCED_CHARGE_END_HOUR/ FORCED_CHARGE_END_MINUTE
78 FORCED_CHARGE_START_HOUR_1 / FORCED_CHARGE_START_MINUTE_1
79 FORCED_CHARGE_END_HOUR_1 / FORCED_CHARGE_END_MINUTE_1
80 FORCED_CHARGE_START_HOUR_2 / FORCED_CHARGE_START_MINUTE_2
81 FORCED_CHARGE_END_HOUR_2 / FORCED_CHARGE_END_MINUTE_2
82 FORCED_DISCHG_POWER_CMD
83 FORCED_DISCHG_SOC_LIMIT
84 FORCED_DISCHARGE_START_HOUR / FORCED_DISCHARGE_START_MINUTE
85 FORCED_DISCHARGE_END_HOUR / FORCED_DISCHARGE_END_MINUTE
86 FORCED_DISCHARGE_START_HOUR_1 / FORCED_DISCHARGE_START_MINUTE_1
87 FORCED_DISCHARGE_END_HOUR_1 / FORCED_DISCHARGE_END_MINUTE_1
88 FORCED_DISCHARGE_START_HOUR_2 / FORCED_DISCHARGE_START_MINUTE_2
89 FORCED_DISCHARGE_END_HOUR_2 / FORCED_DISCHARGE_END_MINUTE_2
90 EPS_VOLT_SET
91 EPS_FREQ_SET
99 LEAD_ACID_CHARGE_VOLT_REF
100 LEAD_ACID_DISCHARGE_CUT_OFF_VOLT
101 LEAD_ACID_CHARGE_RATE
102 LEAD_ACID_DISCHARGE_RATE
103 FEED_IN_GRID_POWER_PERCENT
105 DISCHG_CUT_OFF_SOC_EOD
106 LEAD_ACID_TEMPR_LOWER_LIMIT_DISCHG
107 LEAD_ACID_TEMPR_UPPER_LIMIT_DISCHG
108 LEAD_ACID_TEMPR_LOWER_LIMIT_CHG
109 LEAD_ACID_TEMPR_UPPER_LIMIT_CHG
110 FUNC_PV_GRID_OFF_EN / FUNC_RUN_WITHOUT_GRID / FUNC_MICRO_GRID_EN?
## LEAST SIGNIFICANT BYTE
bit 2 = micro grid enable
bit 1 = fast zero export
bit 0 = ? fails with error 3 (134 in dataframe second byte)
## MOST SIGNIFICANT BYTE
112 SET_MASTER_OR_SLAVE
113 SET_COMPOSED_PHASE
116 P_TO_USER_START_DISCHG
118 VBAT_START_DERATING
122 MAINTENANCE_COUNT
125 SOC_LOW_LIMIT_EPS_DISCHG
137 SPEC_LOAD_COMPENSATE
144 FLOATING_VOLTAGE
145 OUTPUT_CONFIGURATION
146 LINE_MODE_INPUT
147 BATTERY_CAPACITY
148 NOMINAL_BATTERY_VOLTAGE
149 EQUALIZATION_VOLTAGE
150 EQUALIZATION_PERIOD
151 EQUALIZATION_TIME
152 AC_FIRST_START_HOUR / AC_FIRST_START_MINUTE
153 AC_FIRST_END_HOUR / AC_FIRST_END_MINUTE
154 AC_FIRST_START_HOUR_1 / AC_FIRST_START_MINUTE_1
155 AC_FIRST_END_HOUR_1 / AC_FIRST_END_MINUTE_1
156 AC_FIRST_START_HOUR_2 / AC_FIRST_START_MINUTE_2
157 AC_FIRST_END_HOUR_2 / AC_FIRST_END_MINUTE_2
158 AC_CHARGE_START_BATTERY_VOLTAGE
159 AC_CHARGE_END_BATTERY_VOLTAGE
160 AC_CHARGE_START_BATTERY_SOC
161 AC_CHARGE_END_BATTERY_SOC
162 BATTERY_WARNING_VOLTAGE
163 BATTERY_WARNING_RECOVERY_VOLTAGE
164 BATTERY_WARNING_SOC
165 BATTERY_WARNING_RECOVERY_SOC
166 BATTERY_LOW_TO_UTILITY_VOLTAGE
167 BATTERY_LOW_TO_UTILITY_SOC
168 AC_CHARGE_BATTERY_CURRENT
169 ON_GRID_EOD_VOLTAGE
177 MAX_GENERATOR_INPUT_POWER

this information would be usefull for others if you could clearly state the complete brand name / model, of your device

further more, if you can add if you have found holding registers or input registers

It is an LXP Inverter, model LXP 3600ACS. I currently do not know which among the registers is a holding or input register

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.