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


Нужна помощь с ЦАП

Вы не вошли.

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

Alina
04.05.2011 03:58:55
#1

Гость

Нужна помощь с ЦАП

Подскажите, пожалуйста, как организовать вывод разлинчных напряжений на второй канал ЦАП? Есть ли исходники на С++ ? (не вижл студио)
Или может быть кто-нибудь смог бы мне это все подробнее пояснить. К сожалению, в мануале разобраться не получилось(

Alina
04.05.2011 03:59:30
#2

Гость

Re: Нужна помощь с ЦАП

Забыла - плата L791

04.05.2011 08:03:31
#3

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: Нужна помощь с ЦАП

Alina
04.05.2011 09:40:05
#4

Гость

Re: Нужна помощь с ЦАП

В примерах - проекты вижл студио. К тому же, насколько я понимаю, там везде переменка выдается на выходе, а мне постоянное нужно.

Alina
04.05.2011 12:27:47
#5

Гость

Re: Нужна помощь с ЦАП

Может быть кто-нибудь за скромное вознаграждение согласится помочь с программкой?

Вадим
04.05.2011 12:52:24
#6

Гость

Re: Нужна помощь с ЦАП

Мануал, описание функции IoAsync:

Для вывода отсчета на ЦАП надо заполнить структуру ASYNC_PAR так:
s_Type -L_ASYNC_DAC_OUT
Chn[0] -(0/1) выводить на 0 канал
Chn[1] -(0/1) выводить на 1 канал
Data[0] — данные для 0 канала
Data[1] — данные для 1 канала

Alina
04.05.2011 13:12:59
#7

Гость

Re: Нужна помощь с ЦАП

Вадим, это понятно, а как напряжение задавать? Мне вот это непонятно. Я хочу в процессе работы программы менять выдаваемое каналом напряжение.

Вадим
04.05.2011 14:03:23
#8

Гость

Re: Нужна помощь с ЦАП

Вам нужно постоянно циклически выводить набор значений или просто иногда менять напряжение на выходе?
Если первое, то смотрите всё же примеры, если второе, то у меня сделано так:

// В кодах цап
bool ADC::DacAsyncOutCode(int16_t u1Code, int16_t u2Code)
    {
    ASYNC_PAR pp;

    assert(u1Code >= 0);
    assert(u1Code <= 0x7ff);
    assert(u2Code >= 0);
    assert(u2Code <= 0x7ff);

    pp.s_Type = L_ASYNC_DAC_OUT;
    // pp.Mode было скопировано из какого-то примера, скорее всего не нужно.
    pp.Mode = 0;
    pp.Chn[0] = 1;
    pp.Chn[1] = 1;
    pp.Data[0] = u1Code;
    pp.Data[1] = u2Code;
    if (pI->IoAsync(&pp) != L_SUCCESS)
        {
        VLOG_E("Ошибка вывода на ЦАП питания соленоидов.");
        return false;
        }
    return true;   
    }

// В вольтах
bool ADC::DacAsyncOutV(double u1V, double u2V)
    {
    assert(u1V >= 0);
    assert(u1V <= 5.0);
    assert(u2V >= 0);
    assert(u2V <= 5.0);

    USHORT u1 = u1V / 5.0 * 0x7ff;
    USHORT u2 = u2V / 5.0 * 0x7ff;
    return DacAsyncOutCode(u1, u2);
    }


Выведенное значение держится до тех пор, пока не будет выведено новое.

Alina
04.05.2011 14:20:40
#9

Гость

Re: Нужна помощь с ЦАП

Огромное спасибо, Вадим. Именно то, что мне нужно было!

Виктор
01.06.2012 12:05:42
#10

Гость

Re: Нужна помощь с ЦАП

плата L791 ниже приведенный код
pp.s_Type = L_ASYNC_DAC_OUT;
pp.Chn[0] = 1;
pp.Chn[1] = 1;
pp.Data[0] = 0x7ff;
pp.Data[1] = 0x7ff;
return pI->IoAsync(&pp);
возвращает 1 что как я понимаю значит L_NOTSUPPORTED 1 - функция не поддерживается этой платой;
ЦАП есть и работает проверялся в PowerGraph.
Нужен асинхронный ввод с двух каналов АЦП и вывод хотя бы на 1 канал ЦАП реализовать в LabView. Написана dll с функциями инициализации карты чтения заданного канала АЦП запись в канал ЦАП и завершения. АЦП работает ЦАП пока нет, помогите, что делаю не так. Если можно пример на LabView работы с функцией IoAsync() заранее благодарю.

01.06.2012 13:21:28
#11

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Нужна помощь с ЦАП

Может версия старая у lcomp? В исходниках lcomp.dll есть в файле 791.cpp -  ULONG DaqL791::OutputDAC(PDAQ_PAR sp) ?

Виктор
01.06.2012 13:51:13
#12

Гость

Re: Нужна помощь с ЦАП

пример в папке WLCOMP_LV EXAMPLE.VI с картой L-791 не работает CIN ReadPlataDescr возвращает не правильные значения и приводит к перезагрузке компьютера. Подобное явление наблюдаем на разных компьютерах на на некоторых все же измерения проходят, но данные CIN ReadPlataDescr все равно не верные. С платой L-761 все работает нормально.

01.06.2012 13:55:26
#13

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Нужна помощь с ЦАП

791 когда куплена? в новом lcomp есть обновление прошивки для нее в папке UTILS. если старая то запускать update.bat на компе где она нормальн работает... readme.txt читать обязательно...

Виктор
08.06.2012 12:37:50
#14

Гость

Re: Нужна помощь с ЦАП

Уважаемый, Poul, благодарю за столь оперативный ответ. Приобретено в конце 2007 начале 2008 года 6 плат 4 из них L-791 и 2 L-761 все с ЦАПами. Прошивки заводские. Выяснил опытным путем, что рабочий пример асинхронного ввода с AЦП работает с lcomp.dll от 3 авг 2007г., а с новой версией 6.0.2.3 возвращает 0.
Цап не работает ни с какой из версий. Если обновлю прошивку и работать перестанет вообще как вернуть старую. Как перед обновлением сохранить старую прошивку. Нашел в 791.cpp функцию
ULONG DaqL791::OutputDAC(PDAQ_PAR sp)
{PASYNC_PAR ap = (PASYNC_PAR)sp;
ULONG cbRet;
ULONG par =0;
par = (ap->Data[0]&0xFFF)|(ap->Chn[0]<<12)|((ap->Data[1]&0xFFF)<<16)|(ap->Chn[1]<<28)|(1<<30);
if(!LDeviceIoControl( hVxd, DIOC_DAC_OUT,                           &par, sizeof(ULONG),NULL, 0,&cbRet, NULL )
    ) return L_ERROR;
return L_SUCCESS;
}
вижу только, что нужно заполнить  pp.Chn[0], pp.Chn[1], pp.Data[0], pp.Data[1].

ниже привожу содержимое используемого *.cpp для создания *.dll с функциями вызываемыми из LabView:

#include <windows.h>
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{ return 1;}
//--------------------------------

#pragma argsused
#include "../include/create.cpp"
IDaqLDevice* pI;
ASYNC_PAR pp;

//--------------------------------
extern "C" int __export load(void)
{  ULONG slot = 0;
   PLATA_DESCR_L791 pd;
   HRESULT hr;
   CallCreateInstance("lcomp.dll");
   LUnknown* pIUnknown = CreateInstance(slot);
   if(pIUnknown == NULL) return 1;
   hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
   if(!SUCCEEDED(hr)) return 2;
   pIUnknown->Release();
   pI->OpenLDevice();
   //pI->LoadBios("l761");
   pI->ReadPlataDescr(&pd);
    return 0; }

//------------------------------
extern "C" void __export close(void)
{  pI->CloseLDevice();
   pI->Release(); }

//------------------------------
extern "C" int __export read(USHORT Chn)
{ pp.s_Type = L_ASYNC_ADC_INP;
  pp.Chn[0] = Chn;
  long S=0;
  pI->IoAsync(&pp);
  S=pp.Data[0];
  return S; }

//-------------------------
extern "C" int __export U1(int U1)
{ pp.s_Type = L_ASYNC_DAC_OUT;
  //pp.Mode = 0;
pp.Chn[0] = 1;
pp.Data[0] = U1;//0x7ff;
return pI->IoAsync(&pp);
}

//--------------------------
extern "C" void __export U2(int U2)
{
pp.s_Type = L_ASYNC_DAC_OUT;
pp.Chn[1]=1;
pp.Data[1]= U2;
pI->IoAsync(&pp);
}
//----------------------------

В программировании не силен поэтому прощу показать , что не правильно и как заставить работать ЦАП через IoAsync.   
Благодарю.

08.06.2012 13:05:08
#15

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Нужна помощь с ЦАП

lcomp должен быть последний. и проверить что драйвреа  в системе стоят от последнего lcomp? а не старые какие. Как вызывать IoAsync есть в примерах L791.TST и L7XX.TST - ничего заумного там нет и Ваш код по идее должен работать. Если страшно обновлять, то можно платы к нам привезти. Работать перестать не должна, но шить надо на компе где плата стабильно работает. Прошиваться она кстати будет только если lcomp свежий стоит и драйвера в том числе...

Виктор
08.06.2012 14:55:27
#16

Гость

Re: Нужна помощь с ЦАП

Одну 791 скорее всего придется привезти по возможности, LGraph и другие программы ее видят, но при попытке запуска происходит закрытие программы или FillDAQparameters выдает ошибку.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4

Многоканальный телефон:+7 (495) 785-95-25

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск