def readPF(): # data = device.read(0xf002, 2) #read power factor # pf = util.data_to_float(data) # print 'power factor = %s' % pf data = device.read(0xf10a, 2) #read power factor pf = util.data_to_float(data) print 'power factor = %s' % pf return pf
def data_read(self): # Changed to the bulk read option to speed up acquisition time # freq = self.generic_float_read(999) #p1 = self.generic_float_read(1025) #p2 = self.generic_float_read(1027) #p3 = self.generic_float_read(1029) read_start = 999 read_end = 1121 #2440 data = self.bulk_float_read(start=read_start, end=read_end) freq_offset = 999 - read_start freq = util.data_to_float(data[freq_offset * 2 + 0:freq_offset * 2 + 4]) p_offset = 1025 - read_start p1 = util.data_to_float(data[p_offset * 2 + 0:p_offset * 2 + 4]) p2 = util.data_to_float(data[p_offset * 2 + 4:p_offset * 2 + 8]) p3 = util.data_to_float(data[p_offset * 2 + 8:p_offset * 2 + 12]) var_offset = 1041 - read_start var1 = util.data_to_float(data[var_offset * 2 + 0:var_offset * 2 + 4]) var2 = util.data_to_float(data[var_offset * 2 + 4:var_offset * 2 + 8]) var3 = util.data_to_float(data[var_offset * 2 + 8:var_offset * 2 + 12]) v_offset = 1103 - read_start v1 = util.data_to_float(data[v_offset * 2 + 0:v_offset * 2 + 4]) v2 = util.data_to_float(data[v_offset * 2 + 4:v_offset * 2 + 8]) v3 = util.data_to_float(data[v_offset * 2 + 8:v_offset * 2 + 12]) va_offset = 1057 - read_start va1 = util.data_to_float(data[va_offset * 2 + 0:va_offset * 2 + 4]) va2 = util.data_to_float(data[va_offset * 2 + 4:va_offset * 2 + 8]) va3 = util.data_to_float(data[va_offset * 2 + 8:va_offset * 2 + 12]) i_offset = 1117 - read_start i1 = util.data_to_float(data[i_offset * 2 + 0:i_offset * 2 + 4]) i2 = util.data_to_float(data[i_offset * 2 + 4:i_offset * 2 + 8]) i3 = util.data_to_float(data[i_offset * 2 + 8:i_offset * 2 + 12]) read_start = 3973 # Elspec unit rejects any read that includes 2441, so need to do a second read read_end = 3977 data = self.bulk_float_read(start=read_start, end=read_end) pf_offset = 3973 - read_start pf1 = util.data_to_float(data[pf_offset * 2 + 0:pf_offset * 2 + 4]) pf1 = -p1 / va1 * var1 / abs(var1) pf2 = util.data_to_float(data[pf_offset * 2 + 4:pf_offset * 2 + 8]) pf2 = -p2 / va2 * var2 / abs(var2) pf3 = util.data_to_float(data[pf_offset * 2 + 8:pf_offset * 2 + 12]) pf3 = -p3 / va3 * var3 / abs(var3) '''data = self.bulk_float_read(start=3475, end=3479) pf1 = 1 pf2 = 2 pf3 = 3''' # 3 phase option datarec = { 'TIME': time.time(), 'AC_VRMS_1': v1, 'AC_IRMS_1': i1, 'AC_P_1': p1, 'AC_S_1': va1, 'AC_Q_1': var1, 'AC_PF_1': pf1, 'AC_FREQ_1': freq, 'AC_VRMS_2': v2, 'AC_IRMS_2': i2, 'AC_P_2': p2, 'AC_S_2': va2, 'AC_Q_2': var2, 'AC_PF_2': pf2, 'AC_FREQ_2': freq, 'AC_VRMS_3': v3, 'AC_IRMS_3': i3, 'AC_P_3': p3, 'AC_S_3': va3, 'AC_Q_3': var3, 'AC_PF_3': pf3, 'AC_FREQ_3': freq, 'DC_V': None, 'DC_I': None, 'DC_P': None, 'TRIG': None, 'TRIG_GRID': None } data = [] for chan in data_points: data.append(datarec[chan]) return data
def generic_float_read(reg): data = device.read(reg, 2, op=client.FUNC_READ_INPUT) data_num = util.data_to_float(data) return data_num
1119: I2 1121: I3 3475: PF1 3477: PF2 3479: PF3 ''' if __name__ == "__main__": ipaddr = '1.1.1.39' #ipaddr = str(raw_input('ip address: ')) device = None if ipaddr: device = client.ModbusClientDeviceTCP(slave_id=159, ipaddr=ipaddr, ipport=502, timeout=10) #, trace_func=trace) data = device.read(1025, 2, op=client.FUNC_READ_INPUT) print((util.data_to_float(data))) data = device.read(1027, 2, op=client.FUNC_READ_INPUT) print((util.data_to_float(data))) data = device.read(1029, 2, op=client.FUNC_READ_INPUT) print((util.data_to_float(data))) print(('%s' % data_read())) print((data_read()['AC_P_1'])) print((data_read()['AC_P_2'])) print((data_read()['AC_P_3']))
def readFloatPower(): data = device.read(11735, 2) watt = util.data_to_float(data) return watt
def readFloatPF(): data = device.read(11759, 2) pf = util.data_to_float(data) return pf
def readFloatHz(): data = device.read(11761, 2) freq = util.data_to_float(data) return freq
def bulk_float_read(device, start=11700, end=11762): actual_start = start - 1 # the register is one less than reported in the literature actual_length = (end - start) + 2 print(('Start Reg: %s, Read Length: %s' % (actual_start, actual_length))) data = device.read(actual_start, actual_length) print(('Data length: %s' % len(data))) print(('Start Reg: %s, End Reg: %s' % (reg_shift(11762)[0], reg_shift(11762)[1]))) print(util.data_to_float(data[reg_shift(11762)[0]:reg_shift(11762)[1]])) datarec = { 'time': time.time(), 'ac_1': ( util.data_to_float( data[reg_shift(11720)[0]:reg_shift(11720)[1]]), # Voltage, A-N util.data_to_float(data[reg_shift(11700)[0]:reg_shift(11700)[1]] ), # Current, Phase A util.data_to_float(data[reg_shift(11730)[0]:reg_shift(11730)[1]] ), # Real Power, Phase A util.data_to_float(data[reg_shift(11746)[0]:reg_shift(11746)[1]] ), # Apparent Power, Phase A util.data_to_float(data[reg_shift(11738)[0]:reg_shift(11738)[1]] ), # Reactive Power, Phase A util.data_to_float(data[reg_shift(11754)[0]:reg_shift(11754)[1]] ), # True Power Factor, Phase A util.data_to_float( data[reg_shift(11762)[0]:reg_shift(11762)[1]])), # Frequency 'ac_2': ( util.data_to_float( data[reg_shift(11722)[0]:reg_shift(11722)[1]]), # Voltage, B-N util.data_to_float(data[reg_shift(11702)[0]:reg_shift(11702)[1]] ), # Current, Phase B util.data_to_float(data[reg_shift(11732)[0]:reg_shift(11732)[1]] ), # Real Power, Phase B util.data_to_float(data[reg_shift(11748)[0]:reg_shift(11748)[1]] ), # Apparent Power, Phase B util.data_to_float(data[reg_shift(11740)[0]:reg_shift(11740)[1]] ), # Reactive Power, Phase B util.data_to_float(data[reg_shift(11756)[0]:reg_shift(11756)[1]] ), # True Power Factor, Phase B util.data_to_float( data[reg_shift(11762)[0]:reg_shift(11762)[1]])), # Frequency 'ac_3': ( util.data_to_float( data[reg_shift(11724)[0]:reg_shift(11724)[1]]), # Voltage, C-N util.data_to_float(data[reg_shift(11704)[0]:reg_shift(11704)[1]] ), # Current, Phase C util.data_to_float(data[reg_shift(11734)[0]:reg_shift(11734)[1]] ), # Real Power, Phase C util.data_to_float(data[reg_shift(11750)[0]:reg_shift(11750)[1]] ), # Apparent Power, Phase C util.data_to_float(data[reg_shift(11742)[0]:reg_shift(11742)[1]] ), # Reactive Power, Phase C util.data_to_float(data[reg_shift(11758)[0]:reg_shift(11758)[1]] ), # True Power Factor, Phase C util.data_to_float( data[reg_shift(11762)[0]:reg_shift(11762)[1]])), # Frequency 'dc': (None, None, None) } return datarec
def generic_float_read(self, reg_in_lit): data = self.device.read( reg_in_lit - 1, 2) # the register is one less than reported in the literature data_num = util.data_to_float(data) return data_num
def test_data_to_float(self): self.assertEqual(util.data_to_float(b'\x7f\xc0\x00\x00'), None) self.assertEqual(util.data_to_float(b'\x44\x7a\x00\x00'), float(1000)) self.assertEqual(util.data_to_float(b'\xc4\x7a\x00\x00'), float(-1000))