device_controller_class_diagram.txt 3.86 KB
/'
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
'/



@startuml

title 
__**DeviceController and ClientChannel classes diagram (1 - 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 <|-- TelescopeControllerAbstract
DeviceControllerAbstract <|-- PLCControllerAbstract
DeviceControllerAbstract <|-- CameraControllerAbstract

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 TelescopeControllerAbstract {
    _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 PLCControllerAbstract {
    _cmd = {get_status, set_light...}
}

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

/' Concrete Devices Controllers '/

TelescopeControllerAbstract <|-- TelescopeControllerMeade
TelescopeControllerAbstract <|-- TelescopeControllerGemini
TelescopeControllerAbstract <|-- TelescopeControllerColibri

PLCControllerAbstract <|-- PLCControllerAK
PLCControllerAbstract <|-- PLCControllerColibri

CameraControllerAbstract <|-- CameraControllerVIS_AK
CameraControllerAbstract <|-- CameraControllerCAGIRE
CameraControllerAbstract <|-- CameraControllerDDRAGO

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