Example #1
0
 def writeCosPhi(self, valCosPhi=1.0, test=False):
     #self.logger.info('writeCosPhi called')
     addr = 61706  # Modbus address of FixedCosPhi
     if test:  # Check to see if this function is going to be used for testing or just writing to register
         if self.tcpClient.is_open():
             try:
                 data_conv = utils.encode_ieee(valCosPhi)
                 regs_data = self.tcpClient.write_multiple_registers(
                     addr,
                     [data_conv & 0xffff, (data_conv & 0xffff0000) >> 16])
                 return str(regs_data)
             except Exception as exc:
                 self.logger.exception(exc)
                 client.captureException()
                 return False
         else:
             self.tcpClient.open()
             return False
     else:
         try:
             data_conv = utils.encode_ieee(valCosPhi)
             regs_data = self.tcpClient.write_multiple_registers(
                 addr, [data_conv & 0xffff, (data_conv & 0xffff0000) >> 16])
             return str(regs_data)
         except Exception as exc:
             self.logger.exception(exc)
             client.captureException()
             return False
Example #2
0
 def test_encode_ieee(self):
     # test IEEE NaN
     self.assertEqual(utils.encode_ieee(float('nan')), 2143289344)
     # test +/- infinity
     #self.assertTrue(math.isinf(utils.decode_ieee(0xff800000)))
     #self.assertTrue(math.isinf(utils.decode_ieee(0x7f800000)))
     # test some values
     self.assertAlmostEqual(utils.encode_ieee(0.3), 0x3e99999a)
     self.assertAlmostEqual(utils.encode_ieee(-0.3), 0xbe99999a)
Example #3
0
    def realtime(self, battVal=0.0, cosPhi=1.0):
        #self.logger.info('StorageRT function called')
        if battVal > 0:
            command_mode = 4  # Discharging (positive values)
        elif battVal < 0:
            command_mode = 3  # Charging (negative values)
        else:
            command_mode = 1

        # Battery power
        battPower = abs(battVal)  # [W]: float32: [-3300W ... 3300W]
        powerFloat = utils.encode_ieee(battPower)  # Converting to ieee float32

        if self.tcpClient.is_open():
            # Setting time
            self.tcpClient.write_multiple_registers(
                self.addr_time,
                [self.timeBatt & 0xffff, (self.timeBatt & 0xffff0000) >> 16])

            # Setting mode
            self.tcpClient.write_single_register(self.addr_command,
                                                 command_mode)

            # Setting power
            if command_mode == 4:
                regs_disPower = self.tcpClient.write_multiple_registers(
                    self.addr_disPower,
                    [powerFloat & 0xffff, (powerFloat & 0xffff0000) >> 16])
                if str(regs_disPower
                       ) != "True":  # Check if write function worked
                    return 0
                else:
                    return float(time.time())

            elif command_mode == 3:
                regs_chaPower = self.tcpClient.write_multiple_registers(
                    self.addr_chaPower,
                    [powerFloat & 0xffff, (powerFloat & 0xffff0000) >> 16])
                if str(regs_chaPower
                       ) != "True":  # Check if write function worked
                    return 0
                else:
                    return float(time.time())

            else:
                return 0

        else:

            self.tcpClient.open()
            return -1
Example #4
0
 def write_float(self, address, floats_list):
     b32_1 = [utils.encode_ieee(f) for f in floats_list]
     b16_1 = utils.long_list_to_word(b32_1)
     return self.write_multiple_registers(address, b16_1)
Example #5
0
 def write_float(self, address, floats_list):
     b32_l = [utils.encode_ieee(f) for f in floats_list]
     b16_l = utils.long_list_to_word(b32_l)
     return self.write_multiple_registers(address, b16_l)
Example #6
0
 def set_floats(cls, address, floats_list):
     b32_l = [utils.encode_ieee(f) for f in floats_list]
     b16_l = utils.long_list_to_word(b32_l)
     return cls.set_words(address, b16_l)
Example #7
0
 def write_float(self, address, floats_list):
     b32_l = [utils.encode_ieee(f) for f in floats_list]
     b16_l = utils.long_list_to_word(b32_l)
     return self.modbusClient.write_multiple_registers(address, floats_list)
Example #8
0
    def urlBased(self, devId, state=None, powerReal=0, cosPhi=1.0):
        #self.logger.info('Storage URL function called')
        if state == None:
            batt = requests.get(url=self.PWRNET_API_BASE_URL + "device/" +
                                devId + "/",
                                timeout=10)
            battStatus = batt.json()["status"]
            power = batt.json()["value"]
            phi = batt.json()["cosphi"]
            print "power: ", power
            print "phi: ", phi
        else:
            battStatus = state

        if (battStatus == "DISCHARGE"):
            command_mode = 4

        elif (battStatus == "CHARGE"):
            command_mode = 3

        else:
            command_mode = 1
        powerFloat = utils.encode_ieee(
            powerReal)  # Converting power to ieee float32
        #powerFloat = utils.encode_ieee(power) # Converting power to ieee float32

        if self.tcpClient.is_open():
            #print 'TCP battery Opened!'
            # Setting time
            self.tcpClient.write_multiple_registers(
                self.addr_time,
                [self.timeBatt & 0xffff, (self.timeBatt & 0xffff0000) >> 16])

            # Setting mode
            self.tcpClient.write_single_register(self.addr_command,
                                                 command_mode)

            # Setting cosphi
            #print "writing cosphi"
            #regs_cosphi = self.writeCosPhi(valCosPhi=phi)
            regs_cosphi = self.writeCosPhi(valCosPhi=cosPhi)
            #print "regs_cosphi: ", regs_cosphi
            if regs_cosphi == False:
                return -1

            # Setting power
            if (command_mode == 4):
                regs_disPower = self.tcpClient.write_multiple_registers(
                    self.addr_disPower,
                    [powerFloat & 0xffff, (powerFloat & 0xffff0000) >> 16])
                if (str(regs_disPower) !=
                        "True"):  # Check if write function worked
                    return 0
                else:
                    return float(time.time())

            elif (command_mode == 3):
                regs_chaPower = self.tcpClient.write_multiple_registers(
                    self.addr_chaPower,
                    [powerFloat & 0xffff, (powerFloat & 0xffff0000) >> 16])
                if (str(regs_chaPower) !=
                        "True"):  # Check if write function worked
                    return 0
                else:
                    return float(time.time())

            else:
                return 0

        else:
            #self.logger.debug('tcpClient is not open')
            self.tcpClient.open()
            #print 'Returning batt...'
            return -1
 def write_multiple_floats(self, address: int, floats_list: list):
     integer_32bits_representation_list = [modbus_utils.encode_ieee(number) for number in floats_list]
     integers_represented_in_list_of_16bits = modbus_utils.long_list_to_word(integer_32bits_representation_list)
     return self.write_multiple_registers(address, integers_represented_in_list_of_16bits)
Example #10
0
 def write_float(self, address: int, float_number: float):
     integer_32bits_representation = modbus_utils.encode_ieee(float_number)
     integer_represented_in_list_of_16bits = modbus_utils.long_list_to_word([integer_32bits_representation])
     return self.write_multiple_registers(address, integer_represented_in_list_of_16bits)
Example #11
0
c = ModbusClient()

c.host(client_host)
c.port(client_port)

if not c.is_open():
    if not c.open():
        print("unable to connect to " + client_host + ":" + str(client_port))


def int32_to_int8(n):
    mask = (1 << 16) - 1
    return [(n >> k) & mask for k in range(0, 32, 16)]


var_int = utils.encode_ieee(7.5)
print(var_int)
sonuc=int32_to_int8(var_int)
print(sonuc)
if c.is_open():
    # read 10 registers at address 0, store result in regs list
    print(var_int)
    c.write_single_register(0,5)
    c.write_multiple_registers(1,sonuc)

    regs = c.read_holding_registers(0,100)
    # if success display registers
    if regs:
        print("reg ad #0 to 9: " , regs)

    bits = c.read_discrete_inputs(0, 16)