Device_controller_class_diag.pu 4.49 KB

@startuml

/'
UML class Diagram : can be displayed with PlantUML (plugin for Eclipse or for PyCharm)

PlantUML:
- How to install : https://projects.irap.omp.eu/projects/pyros/wiki/Project_Development#PlantUML
- Eclipse plugin : http://plantuml.com/eclipse
- class diagrams : http://plantuml.com/class-diagram
- sequence diagrams : http://plantuml.com/sequence-diagram
- state diagrams : http://plantuml.com/state-diagram
- Use Case diagrams : http://plantuml.com/use-case-diagram
- OLD Activity diagrams : http://plantuml.com/activity-diagram-legacy
- NEW Activity diagrams : http://plantuml.com/activity-diagram-beta
- Pre-processing (include...) : http://plantuml.com/preprocessing
- GANTT diagrams : http://plantuml.com/gantt-diagram
- REAL WORLD EXAMPLES !!! : https://real-world-plantuml.com/
- For Python:
    - https://github.com/SamuelMarks/python-plantuml
    - https://pythonhosted.org/plantuml/

UML diagrams theory : https://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html
'/

title 
__**DeviceController and ClientChannel classes diagram (composition)**__
<i>(ClientChannel is a COMPONENT of DeviceController)</i>
end title


/' Channels '/
ClientChannel <|-- ClientSerial
ClientChannel <|-- ClientSocket
ClientChannel <|-- ClientUSB

abstract class ClientChannel {
    my_channel # socket or serial or usb...
    {abstract} connect_to_server()
    {abstract} read()
    {abstract} put()
    put_read()
    {abstract} send_data()
    {abstract} receive_data()
    {abstract} close()
}

class ClientSocket {
    my_channel # (socket)
    --
    connect_to_server()
    send_data()
    receive_data()
    close()
}


/' Abstract Devices Controllers '/
DeviceControllerAbstract o-- ClientChannel

DeviceControllerAbstract <|-- MountPointingControllerAbstract
DeviceControllerAbstract <|-- SecurityManagementControllerAbstract
DeviceControllerAbstract <|-- DetectorSensorControllerAbstract
DeviceControllerAbstract <|-- DetectorShutterControllerAbstract
DeviceControllerAbstract <|-- DetectorFocusControllerAbstract
DeviceControllerAbstract <|-- FilterSelectorControllerAbstract

abstract class DeviceControllerAbstract { 
    my_channel # socket or serial or usb...
    _cmd = {start, stop, park...}
    class GenericResult
    --
    {abstract} connect_to_device()
    {abstract} _format_data_to_send()
    {abstract} _unformat_received_data()
    available_commands()
    execute()
    execute_generic_cmd()
    execute_native_cmd()
    execute_native_cmd()
    send_data()
    receive_data()
    ---
    **Abstract GET/SET/DO commands :**
    {abstract} get_timezone(), set_timezone()
    {abstract} get_date(), set_date()
    {abstract} get_time(), set_time()
    {abstract} do_park()
    {abstract} do_start()
    {abstract} do_stop()
    {abstract} do_init()
}

abstract class MountPointingControllerAbstract {
    _cmd = {get_ra, get_dec, do_goto...}
    ----
    **Abstract GET/SET/DO commands :**
    {abstract} get_ack()
    {abstract} get_ra(), set_ra()
    {abstract} get_dec(), set_dec()
    get_radec(), set_radec()
    {abstract} get_lat(), set_lat()
    {abstract} get_long(), set_long()
    {abstract} set_speed()
    {abstract} do_warm_start()
    {abstract} do_prec_refr()
    ----
    **Generic MACRO commands:**
    do_init() 
    do_goto() 
    do_move()
}

abstract class SecurityManagementControllerAbstract {
    _cmd = {get_status, set_light...}
}

abstract class DetectorSensorControllerAbstract {
    _cmd = {set_pose, do_start_acq...}
}

/' Concrete Devices Controllers '/

MountPointingControllerAbstract <|-- TelescopeControllerMeade
MountPointingControllerAbstract <|-- TelescopeControllerGemini
MountPointingControllerAbstract <|-- TelescopeControllerColibri

SecurityManagementControllerAbstract <|-- PLCControllerAK
SecurityManagementControllerAbstract <|-- PLCControllerColibri

DetectorSensorControllerAbstract <|-- CameraControllerCAGIRE
DetectorSensorControllerAbstract <|-- CameraControllerDDRAGO

DetectorSensorControllerAbstract <|-- SBIGController
DetectorShutterControllerAbstract <|-- SBIGController
FilterSelectorControllerAbstract <|-- SBIGController

SBIGController o-> SBIGSimulator
SBIGController <-- AgentDeviceSBIG

MountPointingControllerAbstract <|-- DeltaTauController
DetectorFocusControllerAbstract <|-- DeltaTauController
FilterSelectorControllerAbstract <|-- DeltaTauController

class TelescopeControllerGemini {
    _cmd = {get_ra, get_dec, do_goto...}
    format_data_to_send()
    unformat_received_data()
}

TelescopeControllerMeade : _cmd = {get_ra, get_dec, do_goto...}

@enduml