Elektroměr DTS238-7 - modbus
Napsal: stř čer 09, 2021 11:43 pm
Další čínský kousek:
https://www.aliexpress.com/item/1005002 ... 4c4d9EoX3S 3-phase Elektroměr, umí zobrazit i vyčíst napětí, proudy, power faktor, výkon, včetně jalového, energii celkovou, odebranou i dodanou. je velice podobný jako 1 fázový DDS-238-X, zádrhel jsou nepublikované registry (číňan mi dvakrát psal, že manuál poslal, ale nic na gmail nedorazilo, ...asi nějaká cenzura...), ty celkové registry jsou stejné a ty 3ph registry začínají na 0x80h. Zádrhel byl v tom, že nebyla dokumentace a 3ph elektroměr vrací nuly na registrech 1ph například 0x0C je napětí u 1ph, ale 3ph vrací "0"... protože má napětí A, B a C na 0x80, 81 a 82h
Zatím nemám výtky, rozchodil jsem vyčítání z RS485, ukládám do Emoncms (jako obvykle). Graf vám zatím nedám, asi jsem si rozbil emoncms a budu to muset opravit... zatím obrázek: Kdyby někdo chtěl inspiraci, přikládám úryvky z pythonu:
...
import minimalmodbus # required for handling modbus
...
MeterCharger = minimalmodbus.Instrument('/dev/ttyUSB0',MeterChargerAddress) # port name, slave address
MeterCharger.serial.baudrate = 9600
MeterCharger.serial.timeout = 0.5
...
TotalEnergy1 = MeterCharger.read_registers(0,2)
LifeEnergy_High = TotalEnergy1[0]
LifeEnergy_Low = TotalEnergy1[1]
LifeEnergy = 0.01 * ((LifeEnergy_High * 65535) + LifeEnergy_Low)
NETENERGY = LifeEnergy * 1000
VOLTAGEA = MeterCharger.read_register(0x80,1)
VOLTAGEB = MeterCharger.read_register(0x81,1)
VOLTAGEC = MeterCharger.read_register(0x82,1)
CURRENTA = MeterCharger.read_register(0x83,2)
CURRENTB = MeterCharger.read_register(0x84,2)
CURRENTC = MeterCharger.read_register(0x85,2)
ActivePower1 = MeterCharger.read_registers(0x86,2)
ActivePower_High = ActivePower1[0]
ActivePower_Low = ActivePower1[1]
ActivePower = (0.01 * ((ActivePower_High * 65535) + ActivePower_Low)) * 100
ActivePowerA = MeterCharger.read_register(0x88,3)
ActivePowerB = MeterCharger.read_register(0x89,3)
ActivePowerC = MeterCharger.read_register(0x8A,3)
ApparentPower1 = MeterCharger.read_registers(0x90,2)
ApparentPower_High = ApparentPower1[0]
ApparentPower_Low = ApparentPower1[1]
ApparentPower = (0.01 * ((ApparentPower_High * 65535) + ApparentPower_Low)) * 100
ApparentPowerA = MeterCharger.read_register(0x92,3)
ApparentPowerB = MeterCharger.read_register(0x93,3)
ApparentPowerC = MeterCharger.read_register(0x94,3)
PowerFactor = MeterCharger.read_register(0x95,3)
PowerFactorA = MeterCharger.read_register(0x96,3)
PowerFactorB = MeterCharger.read_register(0x97,3)
PowerFactorC = MeterCharger.read_register(0x98,3)
...
#print
#print '= RS485-Values for Upload ='
#print 'NetEnergy = ', NETENERGY, ' Wh'
#print 'Voltage A = ', VOLTAGEA, ' V'
#print 'Voltage B = ', VOLTAGEB, ' V'
#print 'Voltage C = ', VOLTAGEC, ' V'
#print 'Current A = ', CURRENTA, ' A'
#print 'Current B = ', CURRENTB, ' A'
#print 'Current C = ', CURRENTC, ' A'
#print 'ActivePower = ', ActivePower, ' W'
#print 'ActivePower A = ', ActivePowerA, ' W'
#print 'ActivePower B = ', ActivePowerB, ' W'
#print 'ActivePower C = ', ActivePowerC, ' W'
#print 'ApparentPower = ', ApparentPower, ' VA'
#print 'ApparentPower A = ', ApparentPowerA, ' VA'
#print 'ApparentPower B = ', ApparentPowerB, ' VA'
#print 'ApparentPower C = ', ApparentPowerC, ' VA'
#print 'Power Factor = ', PowerFactor, ' -'
#print 'Power Factor A = ', PowerFactorA, ' -'
#print 'Power Factor B = ', PowerFactorB, ' -'
#print 'Power Factor C = ', PowerFactorC, ' -'
https://www.aliexpress.com/item/1005002 ... 4c4d9EoX3S 3-phase Elektroměr, umí zobrazit i vyčíst napětí, proudy, power faktor, výkon, včetně jalového, energii celkovou, odebranou i dodanou. je velice podobný jako 1 fázový DDS-238-X, zádrhel jsou nepublikované registry (číňan mi dvakrát psal, že manuál poslal, ale nic na gmail nedorazilo, ...asi nějaká cenzura...), ty celkové registry jsou stejné a ty 3ph registry začínají na 0x80h. Zádrhel byl v tom, že nebyla dokumentace a 3ph elektroměr vrací nuly na registrech 1ph například 0x0C je napětí u 1ph, ale 3ph vrací "0"... protože má napětí A, B a C na 0x80, 81 a 82h
Zatím nemám výtky, rozchodil jsem vyčítání z RS485, ukládám do Emoncms (jako obvykle). Graf vám zatím nedám, asi jsem si rozbil emoncms a budu to muset opravit... zatím obrázek: Kdyby někdo chtěl inspiraci, přikládám úryvky z pythonu:
...
import minimalmodbus # required for handling modbus
...
MeterCharger = minimalmodbus.Instrument('/dev/ttyUSB0',MeterChargerAddress) # port name, slave address
MeterCharger.serial.baudrate = 9600
MeterCharger.serial.timeout = 0.5
...
TotalEnergy1 = MeterCharger.read_registers(0,2)
LifeEnergy_High = TotalEnergy1[0]
LifeEnergy_Low = TotalEnergy1[1]
LifeEnergy = 0.01 * ((LifeEnergy_High * 65535) + LifeEnergy_Low)
NETENERGY = LifeEnergy * 1000
VOLTAGEA = MeterCharger.read_register(0x80,1)
VOLTAGEB = MeterCharger.read_register(0x81,1)
VOLTAGEC = MeterCharger.read_register(0x82,1)
CURRENTA = MeterCharger.read_register(0x83,2)
CURRENTB = MeterCharger.read_register(0x84,2)
CURRENTC = MeterCharger.read_register(0x85,2)
ActivePower1 = MeterCharger.read_registers(0x86,2)
ActivePower_High = ActivePower1[0]
ActivePower_Low = ActivePower1[1]
ActivePower = (0.01 * ((ActivePower_High * 65535) + ActivePower_Low)) * 100
ActivePowerA = MeterCharger.read_register(0x88,3)
ActivePowerB = MeterCharger.read_register(0x89,3)
ActivePowerC = MeterCharger.read_register(0x8A,3)
ApparentPower1 = MeterCharger.read_registers(0x90,2)
ApparentPower_High = ApparentPower1[0]
ApparentPower_Low = ApparentPower1[1]
ApparentPower = (0.01 * ((ApparentPower_High * 65535) + ApparentPower_Low)) * 100
ApparentPowerA = MeterCharger.read_register(0x92,3)
ApparentPowerB = MeterCharger.read_register(0x93,3)
ApparentPowerC = MeterCharger.read_register(0x94,3)
PowerFactor = MeterCharger.read_register(0x95,3)
PowerFactorA = MeterCharger.read_register(0x96,3)
PowerFactorB = MeterCharger.read_register(0x97,3)
PowerFactorC = MeterCharger.read_register(0x98,3)
...
#print '= RS485-Values for Upload ='
#print 'NetEnergy = ', NETENERGY, ' Wh'
#print 'Voltage A = ', VOLTAGEA, ' V'
#print 'Voltage B = ', VOLTAGEB, ' V'
#print 'Voltage C = ', VOLTAGEC, ' V'
#print 'Current A = ', CURRENTA, ' A'
#print 'Current B = ', CURRENTB, ' A'
#print 'Current C = ', CURRENTC, ' A'
#print 'ActivePower = ', ActivePower, ' W'
#print 'ActivePower A = ', ActivePowerA, ' W'
#print 'ActivePower B = ', ActivePowerB, ' W'
#print 'ActivePower C = ', ActivePowerC, ' W'
#print 'ApparentPower = ', ApparentPower, ' VA'
#print 'ApparentPower A = ', ApparentPowerA, ' VA'
#print 'ApparentPower B = ', ApparentPowerB, ' VA'
#print 'ApparentPower C = ', ApparentPowerC, ' VA'
#print 'Power Factor = ', PowerFactor, ' -'
#print 'Power Factor A = ', PowerFactorA, ' -'
#print 'Power Factor B = ', PowerFactorB, ' -'
#print 'Power Factor C = ', PowerFactorC, ' -'