isample_hw_adapter.coffee#

Hardware adapters are a special type of component to interface with hardware devices. A hardware adapter provides an standard port interface to specific hardware. In this case we have an EtherCAT Adapter with a list of ports. Each port can include several EtherCAT communication objects described in the data object map.

Code: isample_hw_adapter.coffee#
Adapter        'isample_hw_adapter',
    info:      'isample Hw Adapter'
    desc:      'This component defines the interface with the isample Actuators and Sensors'
    abstract:  false
    extends:   ['EthercatAdapter']

    input_ports:
        operator_leds:         { type: 'isample_hmi_leds',          protocol: 'pull', max_rate: 1, blocking_mode: 'async', desc: 'Human Machine Interface (HMI) digital outputs' }
        focus_motor_control:   { type: 'isample_motor_control',     protocol: 'pull', max_rate: 1, blocking_mode: 'async', desc: 'motor control' }
        fw1_motor_control:     { type: 'isample_motor_control',     protocol: 'pull', max_rate: 1, blocking_mode: 'async', desc: 'motor control' }
        fw2_motor_control:     { type: 'isample_motor_control',     protocol: 'pull', max_rate: 1, blocking_mode: 'async', desc: 'motor control' }
        sdo_in:                { type: 'isample_sdo_data',          protocol: 'pull', max_rate: 1, blocking_mode: 'async', desc: 'sdo set config values' }

    output_ports:
        operator_buttons:      { type: 'isample_hmi_buttons',       protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'Human Machine Interface (HMI) digital inputs' }
        cryo_internal_temp:    { type: 'isample_temp_measurements', protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'temperature measurements' }
        cryo_external_temp:    { type: 'isample_temp_measurements', protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'temperature measurements' }
        focus_motor_status:    { type: 'isample_motor_status',      protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'motor state' }
        fw1_motor_status:      { type: 'isample_motor_status',      protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'motor state' }
        fw2_motor_status:      { type: 'isample_motor_status',      protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'motor state' }
        sdo_out:               { type: 'isample_sdo_data',          protocol: 'push', max_rate: 1, blocking_mode: 'async', desc: 'sdo get configured values' }

    data_object_map: [

        # input ports / rx_pdos
        { data_object: "pilot",                    port: "operator_leds",       field: "pilot" }
        { data_object: "emergency_light",          port: "operator_leds",       field: "emergency_light" }
        { data_object: "heartbeat",                port: "operator_leds",       field: "heartbeat" }
        { data_object: "counter",                  port: "operator_leds",       field: "counter" }

        { data_object: "focus_enable",             port: "focus_motor_control", field: "enable" }
        { data_object: "focus_reset",              port: "focus_motor_control", field: "reset" }
        { data_object: "focus_velocity",           port: "focus_motor_control", field: "velocity" }

        { data_object: "fw1_enable",               port: "fw1_motor_control",   field: "enable" }
        { data_object: "fw1_reset",                port: "fw1_motor_control",   field: "reset" }
        { data_object: "fw1_velocity",             port: "fw1_motor_control",   field: "velocity" }

        { data_object: "fw2_enable",               port: "fw2_motor_control",   field: "enable" }
        { data_object: "fw2_reset",                port: "fw2_motor_control",   field: "reset" }
        { data_object: "fw2_velocity",             port: "fw2_motor_control",   field: "velocity" }

        { data_object: "sensor_type_1",            port: "sdo_in",              field: "sensor_type_1" }
        { data_object: "sensor_type_2",            port: "sdo_in",              field: "sensor_type_2" }

        # ouput ports / tx_pdos
        { data_object: "red_push_button",          port: "operator_buttons",    field: "red_push_button" }
        { data_object: "green_push_button",        port: "operator_buttons",    field: "green_push_button" }
        { data_object: "emergency_button",         port: "operator_buttons",    field: "emergency_button" }

        { data_object: "temp_sensor1",             port: "cryo_internal_temp",  field: "temp_sensor1" }
        { data_object: "temp_sensor2",             port: "cryo_internal_temp",  field: "temp_sensor2" }

        { data_object: "temp_sensor3",             port: "cryo_external_temp",  field: "temp_sensor1" }
        { data_object: "temp_sensor4",             port: "cryo_external_temp",  field: "temp_sensor2" }

        { data_object: "focus_ready",              port: "focus_motor_status",  field: "ready" }
        { data_object: "focus_enabled",            port: "focus_motor_status",  field: "enabled" }
        { data_object: "focus_warning",            port: "focus_motor_status",  field: "warning" }
        { data_object: "focus_error",              port: "focus_motor_status",  field: "error" }
        { data_object: "focus_moving_positive",    port: "focus_motor_status",  field: "moving_positive" }
        { data_object: "focus_moving_negative",    port: "focus_motor_status",  field: "moving_negative" }

        { data_object: "fw1_ready",                port: "fw1_motor_status",    field: "ready" }
        { data_object: "fw1_enabled",              port: "fw1_motor_status",    field: "enabled" }
        { data_object: "fw1_warning",              port: "fw1_motor_status",    field: "warning" }
        { data_object: "fw1_error",                port: "fw1_motor_status",    field: "error" }
        { data_object: "fw1_moving_positive",      port: "fw1_motor_status",    field: "moving_positive" }
        { data_object: "fw1_moving_negative",      port: "fw1_motor_status",    field: "moving_negative" }

        { data_object: "fw2_ready",                port: "fw2_motor_status",    field: "ready" }
        { data_object: "fw2_enabled",              port: "fw2_motor_status",    field: "enabled" }
        { data_object: "fw2_warning",              port: "fw2_motor_status",    field: "warning" }
        { data_object: "fw2_error",                port: "fw2_motor_status",    field: "error" }
        { data_object: "fw2_moving_positive",      port: "fw2_motor_status",    field: "moving_positive" }
        { data_object: "fw2_moving_negative",      port: "fw2_motor_status",    field: "moving_negative" }

        # sdos
        { data_object: "sensor_type_1",            port: "sdo_out",             field: "sensor_type_1" }
        { data_object: "sensor_type_2",            port: "sdo_out",             field: "sensor_type_2" }
    ]

    instance_configurations: ['isample_hw_adapter']