# -*- coding: utf-8 -*- # # This file wraps around a tango device class and provides a number of abstractions useful for hardware devices. It works together # # Distributed under the terms of the APACHE license. # See LICENSE.txt for more info. """ """ # PyTango imports from tango.server import run from tango.server import device_property from tango import AttrWriteType from tango import DevState # Additional import from util.attribute_wrapper import attribute_wrapper from util.hardware_device import hardware_device import configparser import numpy from clients.ini_client import * __all__ = ["ini_device"] def write_ini_file(filename): with open(filename, 'w') as configfile: config = configparser.ConfigParser() config['scalar'] = {} config['scalar']['double_scalar_R'] = '1.2' config['scalar']['bool_scalar_R'] = 'True' config['scalar']['int_scalar_R'] = '5' config['scalar']['str_scalar_R'] = 'this is a test' config['spectrum'] = {} config['spectrum']['double_spectrum_R'] = '1.2, 2.3, 3.4, 4.5' config['spectrum']['bool_spectrum_R'] = 'True, True, False, False' config['spectrum']['int_spectrum_R'] = '1, 2, 3, 4' config['spectrum']['str_spectrum_R'] = '"a", "b", "c", "d"' config['image'] = {} config['image']['double_image_R'] = '1.2, 2.3, 3.4, 4.5, 5.6, 6.7' config['image']['bool_image_R'] = 'True, True, False, False, True, False' config['image']['int_image_R'] = '1, 2, 3, 4, 5, 6' config['image']['str_image_R'] = '"a", "b", "c", "d", "e", "f"' config.write(configfile) class ini_device(hardware_device): """ This class is the minimal (read empty) implementation of a class using 'hardware_device' """ # ---------- # Attributes # ---------- """ attribute wrapper objects can be declared here. All attribute wrapper objects will get automatically put in a list (attr_list) for easy access example = attribute_wrapper(comms_annotation="this is an example", datatype=numpy.double, dims=(8, 2), access=AttrWriteType.READ_WRITE) ... """ double_scalar_RW = attribute_wrapper(comms_annotation={"section": "scalar", "name": "double_scalar_RW"}, datatype=numpy.double, access=AttrWriteType.READ_WRITE) double_scalar_R = attribute_wrapper(comms_annotation={"section": "scalar", "name": "double_scalar_R"}, datatype=numpy.double) bool_scalar_RW = attribute_wrapper(comms_annotation={"section": "scalar", "name": "bool_scalar_RW"}, datatype=numpy.bool_, access=AttrWriteType.READ_WRITE) bool_scalar_R = attribute_wrapper(comms_annotation={"section": "scalar", "name": "bool_scalar_R"}, datatype=numpy.bool_) int_scalar_RW = attribute_wrapper(comms_annotation={"section": "scalar", "name": "int_scalar_RW"}, datatype=numpy.int64, access=AttrWriteType.READ_WRITE) int_scalar_R = attribute_wrapper(comms_annotation={"section": "scalar", "name": "int_scalar_R"}, datatype=numpy.int64) str_scalar_RW = attribute_wrapper(comms_annotation={"section": "scalar", "name": "str_scalar_RW"}, datatype=numpy.str_, access=AttrWriteType.READ_WRITE) str_scalar_R = attribute_wrapper(comms_annotation={"section": "scalar", "name": "str_scalar_R"}, datatype=numpy.str_) double_spectrum_RW = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "double_spectrum_RW"}, datatype=numpy.double, dims=(4,), access=AttrWriteType.READ_WRITE) double_spectrum_R = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "double_spectrum_R"}, datatype=numpy.double, dims=(4,)) bool_spectrum_RW = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "bool_spectrum_RW"}, datatype=numpy.bool_, dims=(4,), access=AttrWriteType.READ_WRITE) bool_spectrum_R = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "bool_spectrum_R"}, datatype=numpy.bool_, dims=(4,)) int_spectrum_RW = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "int_spectrum_RW"}, datatype=numpy.int64, dims=(4,), access=AttrWriteType.READ_WRITE) int_spectrum_R = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "int_spectrum_R"}, datatype=numpy.int64, dims=(4,)) str_spectrum_RW = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "str_spectrum_RW"}, datatype=numpy.str_, dims=(4,), access=AttrWriteType.READ_WRITE) str_spectrum_R = attribute_wrapper(comms_annotation={"section": "spectrum", "name": "str_spectrum_R"}, datatype=numpy.str_, dims=(4,)) double_image_RW = attribute_wrapper(comms_annotation={"section": "image", "name": "double_image_RW"}, datatype=numpy.double, dims=(3, 2), access=AttrWriteType.READ_WRITE) double_image_R = attribute_wrapper(comms_annotation={"section": "image", "name": "double_image_R"}, datatype=numpy.double, dims=(3, 2)) bool_image_RW = attribute_wrapper(comms_annotation={"section": "image", "name": "bool_image_RW"}, datatype=numpy.bool_, dims=(3, 2), access=AttrWriteType.READ_WRITE) bool_image_R = attribute_wrapper(comms_annotation={"section": "image", "name": "bool_image_R"}, datatype=numpy.bool_, dims=(3, 2)) int_image_RW = attribute_wrapper(comms_annotation={"section": "image", "name": "int_image_RW"}, datatype=numpy.int64, dims=(3, 2), access=AttrWriteType.READ_WRITE) int_image_R = attribute_wrapper(comms_annotation={"section": "image", "name": "int_image_R"}, datatype=numpy.int64, dims=(3, 2)) str_image_RW = attribute_wrapper(comms_annotation={"section": "image", "name": "str_image_RW"}, datatype=numpy.str_, dims=(3, 2), access=AttrWriteType.READ_WRITE) str_image_R = attribute_wrapper(comms_annotation={"section": "image", "name": "str_image_R"}, datatype=numpy.str_, dims=(3, 2)) # -------- # overloaded functions # -------- def configure_for_initialise(self): """ user code here. is called when the sate is set to INIT """ """Initialises the attributes and properties of the PCC.""" # set up the OPC ua client self.ini_client = ini_client("example.ini", self.Fault, self) # map an access helper class for i in self.attr_list(): try: i.set_comm_client(self.ini_client) except Exception as e: # use the pass function instead of setting read/write fails i.set_pass_func() self.warn_stream("error while setting the ini attribute {} read/write function. {}".format(i, e)) self.ini_client.start() # ---------- # Run server # ---------- def main(args=None, **kwargs): write_ini_file("example.ini") """Main function of the hardware device module.""" return run((ini_device,), args=args, **kwargs) if __name__ == '__main__': main()