Rsh API  SDK 2.1
Документация по программированию
 Указатель Классы Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы Страницы
Открытые члены | Полный список членов класса
Структура IRshDeviceabstract

Интерфейс используется для управления практически всеми АЦП/ЦАП устройствами ЗАО "Руднев-Шиляев". Подробнее...

#include <IRshDevice.h>

Открытые члены

virtual U32 __stdcall Connect (RshBaseType *key, U32 mode=RSH_CONNECT_MODE_BASE)=0
 Подключение к заданному устройству. Подробнее...
 
virtual U32 __stdcall Init (RshBaseType *structure, U32 mode=RSH_INIT_MODE_INIT)=0
 Установка параметров сбора и настройка устройства. Подробнее...
 
virtual U32 __stdcall Start ()=0
 Запуск процесса сбора данных или генерации сигнала. Подробнее...
 
virtual U32 __stdcall Stop ()=0
 Остановка процесса сбора данных или генерации сигнала. Подробнее...
 
virtual U32 __stdcall GetData (RshBaseType *buffer, U32 flags=RSH_DATA_MODE_NO_FLAGS)=0
 Получение (или отправка) буфера с данными. Подробнее...
 
virtual U32 __stdcall Get (U32 mode, RshBaseType *adr=((VOID *) 0x0))=0
 Получение различной информации об устройстве и библиотеке абстракции. Подробнее...
 

Подробное описание

Интерфейс используется для управления практически всеми АЦП/ЦАП устройствами ЗАО "Руднев-Шиляев".

Основной интерфейс для управления устройствами, выпускаемыми фирмой ЗАО "Руднев-Шиляев", а также некоторыми устройствами других фирм.
Обычный сценарий работы - получение объекта, реализующего интерфейс IRshDevice, из библиотеки абстракции, которая может быть загружена используя класс RshDllClient. После этого пользователь получает доступ ко всем возможностям устройства, при этом ему не нужно знать низкоуровневых деталей реализации аппаратной структуры устройства и драйвера.

Прим.
Некоторые устройства ЗАО "Руднев-Шиляев" не используют этот интерфейс, например, усилители заряда подключаются к компьютеру через последовательный порт и управляются по протоколу RS-232.
См. также
RshDllClient.
Примеры:
GSPF-052PCI_Generate.cpp, GSPF-053USB_Generate.cpp, IRshDevice_DoubleFreqMode_RU.cpp, IRshDevice_Get_RSH_GET_BUFFER_READY_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_BASE_LIST_EXT_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_BASE_LIST_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_INFORMATION_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_IS_CAPABLE_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_BUFFER_READY_EVENT_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_GATHERING_COMPLETE_RU.cpp, IRshDevice_GetData_DigitalInput_RU.cpp, IRshDevice_Init_RshInitDMA_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_Port.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_Port.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_Port.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_Port.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_Port.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_Port.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_Port.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_Port.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_Port.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, LA48DPCI_Port.cpp, Leonardo2_Persistent.cpp, Leonardo2_Port.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_Port.cpp, Python_StartStop.cpp, RshInitDAC_RU.cpp и Sirius_StartStop.cpp.

Методы

virtual U32 __stdcall IRshDevice::Connect ( RshBaseType key,
U32  mode = RSH_CONNECT_MODE_BASE 
)
pure virtual

Подключение к заданному устройству.

Аргументы
[in]keyИдентификационный ключ устройства. В зависимости от выбранного режима подключения может быть индексом устройства, его серийным номером или строкой подключения.
В качестве ключа используется структура RshDeviceKey (тип параметра RshBaseType оставлен для большей универсальности).
[in]modeРежим подключения к устройству с использованием серийного номера устройства, его индекса или строки подключения.
Возвращает
RSH_API_SUCCESS или код ошибки.

Данный метод нужно вызывать первым, до вызова любых других методов доступа к устройству.
После успешного вызова этого метода устройство полностью готово к использованию и может быть настроено для сбора данных. Большинство других методов интерфейса (такие как Init(), Start()) вернут ошибку, если вызвать их до вызова Connect().
Можно, однако, получить некоторые статические параметры библиотеки абстракции и устройства, используя метод Get().

Прим.
Если вы используете режим подключения RSH_CONNECT_MODE_BASE, нумерация устройств начинается с 1. Порядок устройств определяется операционной системой, и зависит от используемого разъема (слота), а так же очередности подключения устройств к компьютеру.
См. также
Get() | RSH_CONNECT_MODES | RshDeviceKey
Примеры:
GSPF-052PCI_Generate.cpp, GSPF-053USB_Generate.cpp, IRshDevice_Get_RSH_GET_DEVICE_BASE_LIST_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_Port.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_Port.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_Port.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_Port.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_Port.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_Port.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_Port.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_Port.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_Port.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, LA48DPCI_Port.cpp, Leonardo2_Persistent.cpp, Leonardo2_Port.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_Port.cpp, Python_StartStop.cpp и Sirius_StartStop.cpp.
virtual U32 __stdcall IRshDevice::Get ( U32  mode,
RshBaseType adr = ((VOID *) 0x0) 
)
pure virtual

Получение различной информации об устройстве и библиотеке абстракции.

Аргументы
[in]modeОдна из констант списка RSH_GET. В зависимости от используемой константы, действие метода будет меняться. Все необходимые сведения приведены в описании конкретной константы.
[in,out]adrАдрес объекта, унаследованного от класса RshBaseType. Какой конкретно тип будет использоваться, зависит от используемого режима (параметр mode ). В некоторых случаях можно передавать NULL.
Возвращает
RSH_API_SUCCESS или код ошибки.

Данный метод используется для выполнения широкого спектра действий ввиду его гибкости. С помощью этого метода можно получать информацию (как статическую, так и динамическую) об устройстве и библиотеке абстракции, а также управлять некоторыми функциями библиотеки и устройства.

Прим.
Всегда проверяйте возвращаемое методом значение, чтобы быть уверенными в том, что полученная информация актуальна.
В большинстве случаев, передаваемый в метод объект будет модифицирован, и после вызова метода будет содержать запрошенные данные. Но в некоторых случаях данные отправляются в устройство (или библиотеку абстракции). В этих случаях, константы из списка RSH_GET имеют суффикс _SET, и данные должны быть подготовлены до вызова метода.
См. также
RSH_GET
Примеры:
GSPF-052PCI_Generate.cpp, GSPF-053USB_Generate.cpp, IRshDevice_DoubleFreqMode_RU.cpp, IRshDevice_Get_RSH_GET_BUFFER_READY_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_BASE_LIST_EXT_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_BASE_LIST_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_INFORMATION_RU.cpp, IRshDevice_Get_RSH_GET_DEVICE_IS_CAPABLE_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_BUFFER_READY_EVENT_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_GATHERING_COMPLETE_RU.cpp, IRshDevice_GetData_DigitalInput_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_Port.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_Port.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_Port.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_Port.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_Port.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_Port.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_Port.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_Port.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_Port.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, LA48DPCI_Port.cpp, Leonardo2_Persistent.cpp, Leonardo2_Port.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_Port.cpp, Python_StartStop.cpp, RshInitDAC_RU.cpp и Sirius_StartStop.cpp.
virtual U32 __stdcall IRshDevice::GetData ( RshBaseType buffer,
U32  flags = RSH_DATA_MODE_NO_FLAGS 
)
pure virtual

Получение (или отправка) буфера с данными.

Аргументы
[in,out]bufferБуфер для данных (или буфер с данными при генерации сигнала). Одна из реализаций шаблона RshBufferType для простых типов данных.
Чаще всего для передачи данных используются типы буфера RSH_BUFFER_S8, RSH_BUFFER_S16, RSH_BUFFER_S32. Данные всегда приводятся к старшему биту (исключение - специальные дополнительные флаги преобразования данных, см. flags).
Кроме того, иногда удобно использовать RSH_BUFFER_DOUBLE, в котором данные будут сразу в вольтах, а не в МЗР.
Пользователь должен сам выделить память под данные перед вызовом GetData(). Это можно сделать с помощью метода RshBufferType::Allocate.
[in]flagsДополнительные флаги преобразования данных. Могут использоваться, например, для того, чтобы получить сигналы с цифровых линий одновременно с данными аналоговых каналов. Полный список флагов: RSH_DATA_MODES.
Возвращает
RSH_API_SUCCESS или код ошибки.

Этот метод используется для передачи данных из (или к) библиотеке абстракции устройства. После получения события RSH_GET_WAIT_BUFFER_READY_EVENT данные готовы (уже находятся в компьютере, в памяти библиотеки абстракции). Можно забрать их в свою программу, предварительно выделив память в объекте RshBufferType. Если размер выделенного буфера окажется меньше, чем размер доступных данных, ничего страшного не произойдет - буфер будет заполнен полностью. В обратной ситуации (когда размер выделенного буфера больше чем размер доступных данных) в буфер будет переложено столько данных, сколько есть в наличии. В поле RshBufferType::size после вызова GetData() содержится фактический размер переданных данных.
Все размеры всегда в словах (отсчетах АЦП).

Прим.
В структурах инициализации размер буфера всегда привязан к каналу. Если, к примеру, при инициализации был задан размер 2048 отсчетов, и выбрано 2 канала, следует ожидать 2048*2 = 4096 отсчетов при вызове метода GetData().
См. также
RshBufferType | RSH_DATA_MODES
Примеры:
GSPF-052PCI_Generate.cpp, GSPF-053USB_Generate.cpp, IRshDevice_Get_RSH_GET_BUFFER_READY_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_BUFFER_READY_EVENT_RU.cpp, IRshDevice_GetData_DigitalInput_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, Leonardo2_Persistent.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_StartStop.cpp и Sirius_StartStop.cpp.
virtual U32 __stdcall IRshDevice::Init ( RshBaseType structure,
U32  mode = RSH_INIT_MODE_INIT 
)
pure virtual

Установка параметров сбора и настройка устройства.

Аргументы
[in,out]structureСтруктура инициализации, унаследованная от RshBaseType.
Каждое устройство поддерживает как минимум одну структуру инициализации, такую как RshInitDMA или RshInitMemory.
[in]modeRSH_INIT_MODE_CHECK - проверка полей в переданной структуре инициализаци, неподходящие значения будут исправлены на допустимые. После исправления параметров метод завершает работу, обращений к устройству не производится.
RSH_INIT_MODE_INIT - действительня реализация, после исправления значений в структуре производится передача выбранных параметров к устройству, запись в регистры и тому подобное.
Возвращает
RSH_API_SUCCESS или код ошибки.

Данный метод используется для задания параметров сбора (генерации). Для передачи параметров используется одна из специальных структур инициализации:
RshInitDMA: как правило, данная структура используется для низкочастотных (до 10Мгц) устройств без установленной флэш памяти для данных.
RshInitMemory: для высокочастотных устройств с собственной памятью.
RshInitGSPF: для цифровых генераторов сигнала.
RshInitVoltmeter: для вольтметра В7/78
RshInitPort: для доступа к цифровым портам.
RshInitDAC: для доступа к ЦАПам.
Используя данные структуры, можно задать различные параметры сбора, такие как частоту дискретизации, число каналов, размер буфера и др. Более подробно - в описании структур инициализации.

Пример использования метода:

IRshDevice* device;
//структура инициализации
RshInitDMA params;
params.startType = RshInitDMA::Program; //запуск по внутреннему таймеру
params.frequency = 10000.0; //частота дискретизации (на канал)
params.dmaMode = RshInitDMA::Single; //одиночный запуск (без непрерывного режима)
params.bufferSize = 2048; //размер буфера (на канал)
//настройка каналов
//делаем канал 0 активным
params.channels[0].SetUsed();
//альтернативный вариант - прямое манипулирование битами контрольного слова канала
//params.channels[0].control |= RshChannel::Used;
U32 res = device->Init(&params);
if(res != RSH_API_SUCESS)
{
//обработка ошибки
}
Прим.
Чтобы узнать, поддерживает или нет конкретное устройство ту или иную структуру инициализации, используйте метод Get() с параметром RSH_GET_DEVICE_IS_CAPABLE с соответствующими кодами для структур (RSH_CAPS_SOFT_INIT_MEMORY, RSH_CAPS_SOFT_INIT_DMA и т.д.)
См. также
RshInitDMA | RshInitMemory | RshInitDAC | RshInitVoltmeter | RshInitPort | RshInitGSPF
Примеры:
GSPF-052PCI_Generate.cpp, GSPF-053USB_Generate.cpp, IRshDevice_Get_RSH_GET_WAIT_GATHERING_COMPLETE_RU.cpp, IRshDevice_Init_RshInitDMA_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_Port.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_Port.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_Port.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_Port.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_Port.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_Port.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_Port.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_Port.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_Port.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, LA48DPCI_Port.cpp, Leonardo2_Persistent.cpp, Leonardo2_Port.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_Port.cpp, Python_StartStop.cpp, RshInitDAC_RU.cpp и Sirius_StartStop.cpp.
virtual U32 __stdcall IRshDevice::Start ( )
pure virtual

Запуск процесса сбора данных или генерации сигнала.

Возвращает
RSH_API_SUCCESS или код ошибки.

Устройства сбора данных начинают процесс сбора и передачи данных, когда вызывается этот метод. После завершения передачи ставится флаг готовности данных, и данные можно получить с помощью метода GetData()
Генераторы сигнала (серия ГСПФ) начинают проигрование буфера по этой команде. Таким образом, для генераторов порядок команд будет обратным: сначала нужно передать подготовленный буфер с данными с помощью метода GetData() и только затем запустить генарацию, вызвав Start().

Прим.
Процесс запуска происходит не мгновенно, требуется некоторое время на передачу команды и подготовку устройства.
Более того, если используется синхронизация в каком-либо виде, непосредственно процесс сбора данных начнется только после получения события синхронизации.
См. также
RSH_GET_WAIT_BUFFER_READY_EVENT | Синхронизация
Примеры:
GSPF-052PCI_Generate.cpp, GSPF-053USB_Generate.cpp, IRshDevice_Get_RSH_GET_BUFFER_READY_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_BUFFER_READY_EVENT_RU.cpp, IRshDevice_Get_RSH_GET_WAIT_GATHERING_COMPLETE_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, Leonardo2_Persistent.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_StartStop.cpp и Sirius_StartStop.cpp.
virtual U32 __stdcall IRshDevice::Stop ( )
pure virtual

Остановка процесса сбора данных или генерации сигнала.

Возвращает
RSH_API_SUCCESS или код ошибки.

При вызове этого метода вся активность, связанная со сбором или генерацией прекращается: останавливается АЦП (ЦАП), сбрасывается процесс передачи по USB, ПДП каналы возвращаются в исходное состояние. Устройство готово к следующему вызову метода Start().

Прим.
Если данный метод вызывается до того, как была успешно завершена передача блока данных (размер блока определяется настройками сбора в структуре инициализации), метод Get() с параметром RSH_GET_WAIT_BUFFER_READY_EVENT вернет код ошибки в качестве результата работы.
См. также
RSH_GET_WAIT_BUFFER_READY_EVENT
Примеры:
IRshDevice_Get_RSH_GET_WAIT_GATHERING_COMPLETE_RU.cpp, LA-1.5PCI_Persistent.cpp, LA-1.5PCI_StartStop.cpp, LA-20USB_Persistent.cpp, LA-20USB_StartStop.cpp, LA-2M5PCI_Persistent.cpp, LA-2M5PCI_StartStop.cpp, LA-2USB_Persistent.cpp, LA-2USB_StartStop.cpp, LA-50USB_Persistent.cpp, LA-50USB_StartStop.cpp, LA-5Net_Persistent.cpp, LA-5Net_StartStop.cpp, LA-i24USB_Persistent.cpp, LA-i24USB_StartStop.cpp, LA-n10-12PCI_StartStop.cpp, LA-n10-12USB_StartStop.cpp, LA-n10M8-100PCI_StartStop.cpp, LA-n10M8-500PCI_StartStop.cpp, LA-n150PCI_Persistent.cpp, LA-n150PCI_StartStop.cpp, LA-n1USB_StartStop.cpp, LA-n20-12PCI_StartStop.cpp, LA-n2USB_StartStop.cpp, Leonardo2_Persistent.cpp, Leonardo2_StartStop.cpp, Python_Continuous.cpp, Python_StartStop.cpp и Sirius_StartStop.cpp.

Объявления и описания членов структуры находятся в файле: