@@ -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