示例#1
0
    def test_payload_decoder_coil_factory(self):
        """ Test the payload decoder reset functionality """
        payload = [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1]
        decoder = BinaryPayloadDecoder.from_coils(payload,
                                                  endian=Endian.Little)
        encoded = '\x11\x88'
        self.assertEqual(encoded, decoder.decode_string(2))

        decoder = BinaryPayloadDecoder.from_coils(payload, endian=Endian.Big)
        encoded = '\x11\x88'
        self.assertEqual(encoded, decoder.decode_string(2))

        self.assertRaises(ParameterException,
                          lambda: BinaryPayloadDecoder.from_coils('abcd'))
示例#2
0
    def test_payload_decoder_coil_factory(self):
        """ Test the payload decoder reset functionality """
        payload = [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1]
        decoder = BinaryPayloadDecoder.from_coils(payload, endian=Endian.Little)
        encoded = '\x11\x88'
        self.assertEqual(encoded, decoder.decode_string(2))

        decoder = BinaryPayloadDecoder.from_coils(payload, endian=Endian.Big)
        encoded = '\x11\x88'
        self.assertEqual(encoded, decoder.decode_string(2))

        self.assertRaises(
            ParameterException,
            lambda: BinaryPayloadDecoder.from_coils('abcd')
        )
示例#3
0
    def get(self, _type, address, count, _datatype=None):  # get == Decoder
        """
        Generic 'get' method for LockedDataBlock. Figures out the underlying method to call according to _type.
        :param _type: Type of modbus register ('co', 'di', 'hr', 'ir')
        :param address: Index of the register
        :param count: The amount of registers to get sequentially
        :return: Value of requested index(es).
        """

        if _datatype == None:
            #log.debug("Retrieving a None type")
            if _type == "di":
                return self._get_di(address, count)
            elif _type == "co":
                return self._get_co(address, count)
            elif _type == "hr":
                return self._get_hr(address, count)
            elif _type == "ir":
                return self._get_ir(address, count)
            else:
                print("t: {}   a: {}   c: {}")
                raise ValueError
        elif _datatype == 'bool':
            if _type == "di":
                values = self._get_di(address, count)
            elif _type == "co":
                values = self._get_co(address, count)
            # elif _type == "hr":
            #     values = self._get_hr(address, count)
            # elif _type == "ir":
            #     values = self._get_ir(address, count)
            else:
                print("t: {}   a: {}   c: {}")
                raise ValueError
            decoder = BinaryPayloadDecoder.from_coils(values.bits,
                                                      endian=Endian.Big)
            return decoder.decode_bits()
        else:
            if _type == "hr":
                values = self._get_hr(address, count)
            elif _type == "ir":
                values = self._get_ir(address, count)
            else:
                print("t: {}   a: {}   c: {}")
                raise ValueError
            if _datatype == '32bit_float':  # TODO: try for the datatypes you have in the RTU for the mosaik simulation and do it also for set and test
                decoder = BinaryPayloadDecoder.from_registers(
                    values, endian=Endian.Big)
                return decoder.decode_32bit_float()
            elif _datatype == '64bit_float':
                decoder = BinaryPayloadDecoder.from_registers(
                    values, endian=Endian.Big)
                return decoder.decode_64bit_float()