Skip to content

Commit de40f3c

Browse files
authored
Merge pull request #3052 from LKuemmel/fixes
sdm: reduce bulk read
2 parents b2e7657 + 1f3ed2c commit de40f3c

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

packages/modules/common/sdm.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ class Sdm630_72(Sdm):
3838
REG_MAPPING_BULK_1 = (
3939
(SdmRegister.VOLTAGE_L1, [ModbusDataType.FLOAT_32]*3),
4040
(SdmRegister.CURRENT_L1, [ModbusDataType.FLOAT_32]*3),
41-
(SdmRegister.POWER_L1, [ModbusDataType.FLOAT_32]*3),
42-
(SdmRegister.POWER_FACTOR_L1, [ModbusDataType.FLOAT_32]*3)
41+
(SdmRegister.POWER_L1, [ModbusDataType.FLOAT_32]*3)
4342
)
4443
REG_MAPPING_BULK_2 = (
4544
(SdmRegister.FREQUENCY, ModbusDataType.FLOAT_32),
@@ -58,12 +57,19 @@ def get_power(self) -> Tuple[List[float], float]:
5857
power = sum(powers)
5958
return powers, power
6059

60+
def get_voltages(self) -> Tuple[List[float], float]:
61+
# client handler
62+
time.sleep(0.1)
63+
return self.client.read_input_registers(0x00, [ModbusDataType.FLOAT_32]*3, unit=self.id)
64+
6165
def get_counter_state(self) -> CounterState:
6266
# entgegen der Doku können nicht bei allen SDM72 80 Register auf einmal gelesen werden,
63-
# manche können auch nur 50
67+
# manche können auch nur 20
6468
time.sleep(0.1)
6569
bulk_1 = self.client.read_input_registers_bulk(
66-
SdmRegister.VOLTAGE_L1, 38, mapping=self.REG_MAPPING_BULK_1, unit=self.id)
70+
SdmRegister.VOLTAGE_L1, 20, mapping=self.REG_MAPPING_BULK_1, unit=self.id)
71+
time.sleep(0.1)
72+
power_factors = self.client.read_input_registers(0x1E, [ModbusDataType.FLOAT_32]*3, unit=self.id)
6773
time.sleep(0.1)
6874
bulk_2 = self.client.read_input_registers_bulk(
6975
SdmRegister.FREQUENCY, 8, mapping=self.REG_MAPPING_BULK_2, unit=self.id)
@@ -78,7 +84,7 @@ def get_counter_state(self) -> CounterState:
7884
voltages=resp[SdmRegister.VOLTAGE_L1],
7985
currents=resp[SdmRegister.CURRENT_L1],
8086
powers=resp[SdmRegister.POWER_L1],
81-
power_factors=resp[SdmRegister.POWER_FACTOR_L1],
87+
power_factors=power_factors,
8288
frequency=frequency,
8389
serial_number=self.serial_number
8490
)
@@ -90,8 +96,7 @@ class Sdm120(Sdm):
9096
REG_MAPPING_BULK_1 = (
9197
(SdmRegister.VOLTAGE_L1, ModbusDataType.FLOAT_32),
9298
(SdmRegister.CURRENT_L1, ModbusDataType.FLOAT_32),
93-
(SdmRegister.POWER_L1, ModbusDataType.FLOAT_32),
94-
(SdmRegister.POWER_FACTOR_L1, ModbusDataType.FLOAT_32)
99+
(SdmRegister.POWER_L1, ModbusDataType.FLOAT_32)
95100
)
96101
REG_MAPPING_BULK_2 = (
97102
(SdmRegister.FREQUENCY, ModbusDataType.FLOAT_32),
@@ -110,10 +115,12 @@ def get_power(self) -> Tuple[List[float], float]:
110115
return [power, 0, 0], power
111116

112117
def get_counter_state(self) -> CounterState:
113-
# beim SDM120 steht nichts von Bulk-Reads in der Doku, daher auch auf 50 Register limitiert
118+
# beim SDM120 steht nichts von Bulk-Reads in der Doku, daher auch auf 20 Register limitiert
114119
time.sleep(0.1)
115120
bulk_1 = self.client.read_input_registers_bulk(
116-
SdmRegister.VOLTAGE_L1, 32, mapping=self.REG_MAPPING_BULK_1, unit=self.id)
121+
SdmRegister.VOLTAGE_L1, 14, mapping=self.REG_MAPPING_BULK_1, unit=self.id)
122+
time.sleep(0.1)
123+
power_factor = self.client.read_input_registers(0x1E, ModbusDataType.FLOAT_32, unit=self.id)
117124
time.sleep(0.1)
118125
bulk_2 = self.client.read_input_registers_bulk(
119126
SdmRegister.FREQUENCY, 8, mapping=self.REG_MAPPING_BULK_2, unit=self.id)
@@ -128,7 +135,7 @@ def get_counter_state(self) -> CounterState:
128135
voltages=[resp[SdmRegister.VOLTAGE_L1], 0, 0],
129136
currents=[resp[SdmRegister.CURRENT_L1], 0, 0],
130137
powers=[resp[SdmRegister.POWER_L1], 0, 0],
131-
power_factors=[resp[SdmRegister.POWER_FACTOR_L1], 0, 0],
138+
power_factors=[power_factor, 0, 0],
132139
frequency=frequency,
133140
serial_number=self.serial_number
134141
)

0 commit comments

Comments
 (0)