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'))
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') )
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()