Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Циклический режим вывода в

Вы не вошли.

 Поиск | Регистрация | Вход 

Владимир
31.10.2012 16:22:14
#1

Гость

Циклический режим вывода в

Здравствуйте!
Хочу запустить ЦАП  Е14-140МD на вывод в циклическом режиме. В приложении к руководству программиста e14_140m_addendum_dac.pdf написано, что это делается изменением в структуре DAC_PARS_E140 байта RunMode.

Скачал lusbapi34.exe, взял оттуда Lusbapi.h
В этом файле:
// версия библиотеки
#define     VERSION_MAJOR_LUSBAPI    (0x3)
#define     VERSION_MINOR_LUSBAPI     (0x4)

..............................

struct DAC_PARS_E140
{
BYTE SyncWithADC;                            BYTE SetZeroOnStop;                        double DacRate;                                };

Как видно, RunMode в структуре нет. Как быть?

01.11.2012 11:15:39
#2

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: Циклический режим вывода в

Так получилось, что развитие прошивки E14-140-M опередило обновление библиотеки lusbapi, и хитрые новые режимы и параметры ЦАП не попали в версию 3.4.

Для этого и было написано приложение e14_140m_addendum_dac.pdf, в самом начале которого говорится, цитирую:
"1.1. ...Lusbapi 3.3 ... соответствует функциональности версии 3.05 встроенного ПО и не содержит всех структур и функций, описанных ниже ... новая функциональность может быть реализована в прикладной программе с использованием недокументированных функций GetArray() и PutArray(). Необходимые примечания даны в разделе "Функции для работы с ЦАП""
Значит, с 3.4 та же история, что с 3.3 sad

И конкретно про RunMode, п. 2.4:
"Примечание: в модулях E14‑140‑M с версией встроенного ПО ниже 3.10 поле RunMode может принимать только значения 0 или 1 (поддерживается только потоковый режим), а значение стоповой константы всегда нулевое (поле StopConst игнорируется). В версии lusbapi 3.3 поле RunMode называлось соответственно SetZeroOnStop."

А самое главное - в пункте 3.1, с большим красным восклицательным знаком на полях:
"В версии Lusbapi 3.3 данная структура содержит меньше полей. При необходимости использования новых возможностей следует определить вспомогательный тип:
#pragma pack(1)
struct DAC_PARS_E140_INT
{
    WORD RateDiv;    // 0…7, равно (200 / DacRate) – 1
    BYTE SyncWithADC;
    BYTE RunMode;
    DWORD TotalSamples;
    WORD PreloadSamples;
    SHORT StopConst[2];
    WORD StartOffset;
};
и использовать недокументированные вызовы GetArray() и PutArray():
DAC_PARS_E140_INT my_dac_pars;
pModule->GetArray((BYTE*)&my_dac_pars, sizeof(my_dac_pars), 0x0160);
pModule->PutArray((BYTE*)&my_dac_pars, sizeof(my_dac_pars), 0x0160);
"

Посмотрите примеры ЦАП в e140-console-test.zip, они как раз все написаны с этим трюком.

Прошу прощения за неудобство, надеюсь, что в будущем lusbapi все это добавится штатно. А пока советую опираться на e14_140m_addendum_dac.pdf, он соответствует свежей прошивке E14-140-M.