hil_watchdog_start
Starts the watchdog timer with the given timeout interval.
Description
The hil_watchdog_start function starts the watchdog timer with the given timeout interval. It should only be called after the expiration states have been configured using the hil_watchdog_set_xxxx_expiration_state functions. Once the watchdog timer has been started, it must be reloaded each time before it expires using the hil_watchdog_reload function.
Prototype
t_error hil_watchdog_start(t_card card, t_double timeout);
Parameters
t_card card
A handle to the board, as returned by hil_open .
t_double timeout
The expiration timeout interval in seconds.
Select a board type from the list for board-specific details: .
Return value
The return value is 0 if the watchdog started successfully. Otherwise a
negative error code is returned. Error codes are
defined in quanser_errors.h
. A suitable error message
may be retrieved using
msg_get_error_message
.
Error codes
QERR_HIL_WATCHDOG_START
This function is not supported by the board-specific HIL driver for this board type.
QERR_INVALID_CARD_HANDLE
An invalid card handle was passed as an argument. Once a card has been closed using hil_close the card handle is invalid.
QERR_INVALID_TIMER_PERIOD
The specified timer period is invalid.
Requirements
Include Files |
Libraries |
---|---|
hil.h |
hil.lib;quanser_runtime.lib;quanser_common.lib |
Examples
/* * Configure a watchdog timer that will expire every 0.1 seconds and reset the * analog outputs to 0V and the digital outputs to tristate upon expiration. * Also create a task for performing real-time control that reads * four encoder channels every millisecond. The watchdog is reloaded every sampling * instant. */ t_double frequency = 1000; /* 1 kHz (0.001 seconds) */ t_uint32 samples = 5000; /* Iterate for 5000 samples (5 seconds) */ t_uint32 samples_in_buffer = frequency; t_uint32 samples_to_read = 1; /* Read one sample (four channels) every sampling instant */ t_double timeout = 0.1; /* 0.1 seconds */ t_uint32 encoder_channels[] = { 0, 1, 2, 3 }; t_uint32 analog_channels[] = { 0, 1, 2, 3 }; t_double voltages[] = { 0, 0, 0, 0 }; t_uint32 digital_channels[16]; t_uint32 states[16]; t_int32 counts[4]; t_error result; t_task task; int index; for (index=0; index < ARRAY_LENGTH(digital_channels); index++) { digital_channels[index] = index; states[index] = DIGITAL_STATE_TRISTATE; } hil_watchdog_set_analog_expiration_state(card, analog_channels, ARRAY_LENGTH(analog_channels), voltages); hil_watchdog_set_digital_expiration_state(card, digital_channels, ARRAY_LENGTH(digital_channels), states); hil_task_create_encoder_reader(board, samples_in_buffer, channels, ARRAY_LENGTH(channels), &task); hil_watchdog_start(card, timeout); hil_task_start(task, SYSTEM_CLOCK_1, frequency, samples); for (int index = 0; index < samples; index++) { hil_task_read_encoder(task, samples_to_read, counts); /* returns every millisecond with next sample */ hil_watchdog_reload(card); /* reload watchdog before using counts for control */ ... /* do control calculations and output motor torques */ } hil_task_stop(task); hil_task_delete(task); hil_watchdog_stop(card);
Copyright ©2024 Quanser Inc. This page was generated 2024-10-17. Submit feedback to Quanser about this page.