intro_dio
The DIO library is a family of routines designed to give the
applications programmer relatively easy access to the
"live" data contained in the accelerator datapool as well
as much of the "static" data contained in the accelerator
database.
For example, one of the most basic tasks for an accelerator
control program is to read the value of a device in engineering
units. This can be accomplished with a single call to the
routine 'dio_get_dev(_c)'. Previously, this would have required
a minimum of seven calls which doesn't even include code to
do things such as retry pending requests.
As in the above example, all DIO routine names begin with
"dio_". Also, all single device readings or settings require
only a single call by the application program. Lists of devices
are also handled by DIO, but they always require two calls
from the application. The first call sets up the list for
later setting or retrieval of data and returns a list identification
number. The second call actually sends or receives the data
using the list ID returned from the previous call. Lists are
limited in at least one respect in that all data from a given
list is retrieved at the same frequency or on the same machine
clock event.
Another benefit of the DIO routines is that they can automatically
log database and datapool errors during program debugging through
the use of the 'dio_tuner' routine. This routine allows you to
enable or disable automatic logging of errors as well as adjust
the retry period parameters used by the DIO routines for
interfacing with the datapool and the database.
There are separate DIO routines to send and receive raw data in
addition to the routines that handle common engineering units.
There are routines to send and receive alarm information, to
read status, to perform basic control, to read extended text,
to read family information, to read analog and digital alarm
text, to read EMCs, to read save/restore information, to read
device sibling data, to read device types, to read SSDNs, to
read device data lengths, to read source nodes, to read device
names, and to read device descriptive text.
All arguments to the DIO routines are passed by reference (the
FORTRAN default) except for routines with the suffix "_c".
Some routines contain optional arguments as noted in their
individual help entries.
An important parameter to understand in dealing with data
acquisition is the frequency time descriptor (FTD). It is the
value that tells the system how often or when to read/set the
desired data. There are a few special values for the FTD
which are as follows (found in 'diolib' include file):
FTD_ONESHOT -> read data once
FTD_DEFAULT -> use default FTD in database
FTD_NOSHOT -> setting only FTD
FTD_1HZ -> read at 1 Hz
FTD_EVENT_MASK OR'ed with TCLK event value -> read on TCLK event
Any positive FTD having a value of four or greater specifies
a frequency in 60 Hz ticks. Any negative value indicates
that data I/O should occur at a Tevatron Clock (TCLK) event
whose number is contained in the low order byte of the FTD.
(Note: FTDs are always passed as two byte integers.)
Another important value is the property index (PI). This value
indicates which piece of information from a given device is
desired. The correct property can only be selected if the user
has knowledge about that particular type of device. In other
words, a given property can give you different kinds of information
about different kinds of devices. The defined constants for
property indices are found in the 'dbprops' include file.
(Note: PIs are always passed as two byte integers.)
See also 'intro_TD'.
These functions require the following include files:
dbprops_h, diolib_h
Related functions:
dio_alarm_dnom(_c), dio_alarm_dnom_lst, dio_alarm_events(_c),
dio_alarm_events_lst, dio_alarm_flags(_c), dio_alarm_flags_list,
dio_alarm_limits(_c), dio_alarm_lim_lst, dio_alarm_tries(_c),
dio_alarm_tries_lst, dio_analog_alarm_text(_c),
dio_array_device_negative_c, dio_array_device_off_c,
dio_array_device_on_c, dio_array_device_positive_c,
dio_array_device_reset_c, dio_bld_alrm_lst, dio_bld_get(_c),
dio_bld_get_raw(_c), dio_bld_set(_c), dio_bld_set_raw(_c),
dio_build_get_array_list_c, dio_build_snapshot_list_c,
dio_cancel_alarm(_c), dio_cancel_alarm_lst, dio_cancel_snapshot_list_c,
dio_can_get(_c), dio_can_get_lst, dio_can_set(_c),
dio_can_set_device_c, dio_can_set_lst, dio_can_snapshot_c,
dio_change_ftd(_c), dio_change_ftd_lst(_c), dio_cntrl_dev(_c),
dio_cntrl_lst, dio_data_len(_c), dio_dbquery_c, dio_default_ftd,
dio_delete_all_emc_info, dio_delete_all_info, dio_delete_all_name_info,
dio_delete_cache, dio_delete_info(_c), dio_delete_name_info_c,
dio_delete_pdb, dio_delete_pdb_all, dio_delete_pdb_lst,
dio_delete_requests_c, dio_desired_alarm_limit_type,
dio_device_index(_c), dio_device_location_c, dio_device_ssdr(_c),
dio_device_state_c, dio_device_type_c, dio_dev_emc, dio_dev_name(_c),
dio_dev_node, dio_dev_ssdn(_c), dio_dev_text(_c), dio_dev_type,
dio_digital_alarm_text(_c), dio_disable(_c), dio_disable_abort(_c),
dio_disable_settings, dio_dis_abt_lst, dio_dis_lst, dio_dpreq_info,
dio_emc_to_device_index, dio_emc_type_c, dio_enable(_c),
dio_enable_abort(_c), dio_enable_settings, dio_ena_abt_lst, dio_ena_lst,
dio_event_control(_c), dio_event_control_list_c, dio_extrema(_c),
dio_ext_text(_c), dio_family, dio_family_info(_c), dio_find_name_c,
dio_flush, dio_get_alarm(_c), dio_get_alrm_lst, dio_get_array_device_c,
dio_get_db_alarm(_c), dio_get_dev(_c), dio_get_directed_list,
dio_get_directed_list_raw_c, dio_get_last_setting,
dio_get_last_setting_raw, dio_get_lst, dio_get_lst_raw(_c),
dio_get_oneshot_ftd, dio_get_pdb, dio_get_properties,
dio_get_raw(_c), dio_get_retry, dio_get_snapshot_list_c,
dio_get_status_array_device_c, dio_get_timer_ref, dio_has_property_c,
dio_has_property_list_c, dio_insert_pdb_lst, dio_insert_reqlst,
dio_is_abort(_c), dio_is_abrt_inh(_c), dio_is_abtinh_lst,
dio_is_abt_lst, dio_is_broken_c, dio_is_bypas(_c), dio_is_byp_lst,
dio_is_controlled_set_c, dio_is_controlled_set_list,
dio_is_display_dec(_c), dio_is_display_short(_c), dio_is_family,
dio_is_good(_c), dio_is_good_lst, dio_is_on(_c), dio_is_on_lst,
dio_is_positive(_c), dio_is_pos_lst, dio_is_rdy_lst, dio_is_ready(_c),
dio_is_remote(_c), dio_is_rem_lst, dio_is_setting_enabled,
dio_is_step_motor, dio_madc_location_c, dio_madc_number_c,
dio_move_step_motor, dio_name_to_index, dio_negative, dio_neg_lst,
dio_node, dio_off, dio_off_lst, dio_on, dio_on_lst, dio_pdb_ctl,
dio_pdb_sts, dio_positive, dio_pos_lst, dio_primary_to_scaled_data_c,
dio_protection_mask_c, dio_query_tuner, dio_raw_data_type,
dio_raw_to_scaled_custom_c, dio_raw_to_scaled_data(_c),
dio_raw_to_status_c, dio_raw_to_status_text, dio_raw_to_value_text_c,
dio_rearm_snapshot_list_c, dio_reset, dio_restore_last_setting,
dio_rst_lst, dio_salarm_dnom(_c), dio_salarm_dnom_lst,
dio_salarm_lim(_c), dio_salarm_lim_lst, dio_save_info,
dio_scaled_to_raw_data(_c), dio_scaled_to_value_text_c, dio_scaling,
dio_scaling_len(_c), dio_scaling_length_list_c, dio_scaling_text(_c),
dio_set_abort_inh_lst, dio_set_alarm_flags_c, dio_set_array_device_c,
dio_set_broken_c, dio_set_bypass_lst, dio_set_dev(_c),
dio_set_for_read(_c), dio_set_hash_table_size_c, dio_set_lst,
dio_set_lst_raw(_c), dio_set_raw(_c), dio_set_step_motor,
dio_set_timer_ref, dio_siblings, dio_simulate, dio_simulate_query,
dio_status(_c), dio_sts_lst, dio_sts_txt(_c), dio_sts_txt_lst,
dio_tuner(_c), dio_value_text_c, dio_virtual_machine_info_c,
dio_wildcard_build, dio_wildcard_cancel, dio_wildcard_read,
mio_cancel, mio_control, mio_fill_status, mio_read, mio_select_pool,
mio_set, read_packeted_data_c, read_packeted_device_c, td_build(_c),
td_cancel, td_query, td_read, td_read_one(_c), td_set(_c),
td_set_one(_c)