def test_big_endian_payload_builder(self): """ Test basic bit message encoding/decoding """ builder = BinaryPayloadBuilder(endian=Endian.Big) builder.add_8bit_uint(1) builder.add_16bit_uint(2) builder.add_32bit_uint(3) builder.add_64bit_uint(4) builder.add_8bit_int(-1) builder.add_16bit_int(-2) builder.add_32bit_int(-3) builder.add_64bit_int(-4) builder.add_32bit_float(1.25) builder.add_64bit_float(6.25) builder.add_string('test') builder.add_bits(self.bitstring) self.assertEqual(self.big_endian_payload, str(builder))
def set(self, _type, address, values, _datatype=None): """ Generic 'set' 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 values: Value(s) to set the addresses to. :return: Value of requested address for type. """ if _datatype == None: #print("Adding a None type") if _type == "di": self._set_di(address, values) elif _type == "co": self._set_co(address, values) elif _type == "hr": self._set_hr(address, values) elif _type == "ir": self._set_ir(address, values) else: print("t: {} a: {} v: {}") raise ValueError elif _datatype == 'bool': print("Adding a bool type") builder = BinaryPayloadBuilder(endian=Endian.Big) builder.add_bits(values) payload = unpack_bitstring(builder.to_string()) if _type == "di": self._set_di(address, payload) elif _type == "co": self._set_co(address, payload) else: builder = BinaryPayloadBuilder(endian=Endian.Big) 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 builder.add_32bit_float(values) elif _datatype == '64bit_float': builder.add_64bit_float(values) payload = builder.to_registers() if _type == "hr": self._set_hr(address, payload) elif _type == "ir": self._set_ir(address, payload) else: print("t: {} a: {} v: {}") raise ValueError