Ejemplo n.º 1
0
    def write_output(self, register_type: Union[RegisterTypeEnum, CoilTypeEnum], value):
        if type(register_type) == 'str':
            register = registerByName(register_type)
        elif type(register_type) == RegisterTypeEnum:
            register = registers.get(register_type)
        elif type(register_type) == CoilTypeEnum:
            register = coils.get(register_type)

        if not register:
            raise Exception("Unknown register {}".format(register_type.name))

        values = register.encode(value)
        response = False
        if register.is_coil():
            self.client.write_coil(register.address, values, unit=self.unit)
            response = True
        elif register.is_discrete_input():
            _logger.error("Cannot write discrete input {}".format(register_type.name))
            pass
        elif register.is_input_register():
            _logger.error("Cannot write input register {}".format(register_type.name))
            pass
        else:
            self.client.write_registers(register.address, values, unit=self.unit)
            response = True
        return response
Ejemplo n.º 2
0
    def read_input(self, register_type: Union[RegisterTypeEnum, CoilTypeEnum]):
        if type(register_type) == 'str':
            register = registerByName(register_type)
        elif type(register_type) == RegisterTypeEnum:
            register = registers.get(register_type)
        elif type(register_type) == CoilTypeEnum:
            register = coils.get(register_type)

        if not register:
            raise Exception("Unknown register {}".format(register_type.name))

        if register.is_coil():
            response = self.client.read_coils(register.address,
                                              register.size,
                                              unit=self.unit)
        elif register.is_discrete_input():
            response = self.client.read_discrete_inputs(register.address,
                                                        register.size,
                                                        unit=self.unit)
        elif register.is_input_register():
            response = self.client.read_input_registers(register.address,
                                                        register.size,
                                                        unit=self.unit)
        else:
            response = self.client.read_holding_registers(register.address,
                                                          register.size,
                                                          unit=self.unit)
        return register.decode(response)