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


L780 - Как подключить библиотеки АЦП в Visual C++

Вы не вошли.

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

Женя
22.02.2006 08:23:17
#51

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

" я вообще боюсь что дело еще и в pragma pack(1) те в байтовой упаковке структуры..."

думаете .NET меняет порядок полей в структуре и поэтому идет неправильная настройка ?

для этого есть атрибут StructLayout. Перед объявлением структуры пишем [StructLayout(LayoutKind.Sequential)]

22.02.2006 10:19:28
#52

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

Я знаю что у меня байтовая в описании. Бейсик например имеет dword по умолчанию....да и все сейчас имеют dword дефаултом...

Женя
22.02.2006 14:43:48
#53

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

можно явно указать
LayoutKind.Sequential,Pack=1
и структура не будет расширяться

или вообще при помощи LayoutKind.Explicit разместить вручную данные в структуре. Но это не помогает sad

Denis
27.02.2006 19:33:39
#54

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

У меня вот такой лог:

Loading lcomp.dll
hDll = 63700992
Called CallCreateInstance. Error result = 0
hIfc = 63840024
Called OpenLDevice. Error result = 952
Called LoadBios. Error result = 0
Called ReadPlataDescr. Error result = 0
Called PlataTest. Error result = 0
L780 SerNum = 4C2408
Called RequestBufferStream. Allocated memory size(word): 100352. Error result = 0
Called SetParametersStream. Error result = 0
Plata parameters  :
Buffer size(word) : 32768
Pages             : 32
IrqStep           : 1024
FIFO              : 1024
Rate              : 200,000000000464
Called EnableCorrection(0). Error result = 0
Called InitStartLDevice. Error result = 0
Called StartLDevice. Error result = 0
0 // здесь попытки
0 // вызвать GetSyncData
0 //
0 //
Called StopLDevice. Error result = 0
Called CloseLDevice. Error result = 0
Called FreeAPIDLL. Result = 1

//  плата у меня 780..
кстати  по поводу того что возвращает OpenLDevice что это за дескриптор (Женя в твоем коде это как ошибка записана (в общем это фигня но все же))
и зачем он вообще кому нибудь нужен???

Denis
01.03.2006 19:20:36
#55

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

где можно почитать последнее описание библиотеки?
по крайней мере то с помощью которого написан пример LIBRARY/wlcomp_tst

тот мануал что поставился вместе с драйверами (Ревизия 1.0.) февраль 2003 не содержит описания функций SetParametersStream
GetSyncData и др..

где про них правильно читать

(извините если вопрос ламерский... но че то устал я искать в этой куче всего..)

01.03.2006 21:01:24
#56

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

именно на wlcomp нигде... просто исходники его смотрите... там просто вызовы функций lcompc небольшими модификациями параметров...

Denis
02.03.2006 17:57:37
#57

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

в общем то пока справляемся нашел описание библиотеки lcomp там кое что есть... но к сожалению нет тоо на чем споткнулись... а именно описания GetSyncData и GetDataFromBuffer ..
попытался сам что то сделать... пока неполучается... в частности хотелось бы уточнить
DllExport(ULONG) GetSyncData(PULONG hIfc, ULONG SyncPtr, ULONG *Sync)
{
   *Sync = ((PULONG)SyncPtr)[0];
   return 0;
}


что за переменная Sync ? что в ней хранится?

Женя есть ли у тебя какие успехи???

Denis
02.03.2006 18:26:12
#58

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

а в вашем примере используется структура _ASYNC_PARAM ? там вроде задается порядок опроса каналов и усилиние..

и еще в вашем примере значения возвращаются какието большие...
вроде как они должны быть в диапазоне от -8000 до 8000 (возможно у вас просто знак не учитывается....)?

02.03.2006 21:32:31
#59

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

В SyncPtr счетчик бегает принятых отсчетов... ASYNC_PAR вообще для одиночных отсчетов... ADC_PAR для потокового сбора, причем они разные для разных плат...

Denis
03.03.2006 12:39:38
#60

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

какая функция предусмотрена для получения результатов работы ацп...
в библиотеке wlcomp  GetSyncDada и GetDataFromBufer помечены коментарием "для LabView" . в библиотеке lcomp ничего похожего нету.. а как там предусматривалось получить результаты???

Denis
03.03.2006 13:23:40
#61

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

да и еще раз. какой же форат считываемых данных? в одном отсчете что данные по 4-м каналам?

Denis
03.03.2006 17:40:46
#62

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

и в общем то непонятно какой тип должен быть для переменной количество отсчетов. Потому как в примере оно
FillDAQparameters(&hIfc, &ap.t3, 2); // 0 t1, 1 t2, 2 t3, 3 t4

   DWORD tm = 100000;  // мы захотели 100000 отсчетов
   RequestBufferStream(&hIfc,&tm,L_STREAM_ADC);

т.е. вроде как DWORD

в тоже время при описании библиотеки wlcomp :

DllExport(ULONG)  RequestBufferStream(PULONG hIfc, ULONG *Size, ULONG StreamId) //in words
{
   return ((IDaqLDevice*)*hIfc)->RequestBufferStream(Size,StreamId);
}

оно ULONG ....
где правда?

03.03.2006 19:21:49
#63

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

ULONG и DWORD в терминах С это 32 бит целое. Разница такая что в SyncPtr[0] меняется каунтер АЦП а в SyncPtr[1] каунтер ЦАП у некоторых платбыл когдато... а со смещением в 1 страницу те 4096 пошли данные....Выделялась просто память одним куском... а так нормальные данные...шум наверное..

Denis
06.03.2006 12:25:35
#64

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

разрядность АЦП 14 бит для хранения кода с выхода АЦП достаточно 16 бит (судя по результатам в L-Graphe то получается один отсчет - 16 бит (поделил размер дат файла на количество отсчетов))

Так вот вопрос... один отсчет АЦП хранится в 32 битах или один отсчет все таки в 16 битах? (Если в 32 битах два отсчета то их надо разделить на два 16-битных кода???)

06.03.2006 13:09:27
#65

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

буфер данных 16 битный. а количество 32 бита. просто приведение типа нужно...

Женя
06.03.2006 14:08:43
#66

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

у меня ничего особо нового не получилось.

вот это :

for (int i = 0; i<100; i++)
{
RealAdress = (uint)(dataStartPointer.ToInt32() + i);
csDriverLibrary.GetDataFromBuffer(ref hIfc, RealAdress, ref MasOfData, (uint)1);
Data += "Adress = " + RealAdress.ToString() + " value = " + MasOfData.ToString()+ "/n" ;
}

скорее всего не настоящие данные. Да и странно это - для выбора каждого значения функцию вызывать.

вот такой вариант пробовал :

int[] data = new int[1000];
System.Runtime.InteropServices.Marshal.Copy(new IntPtr(plata.dataStartPointer), data, 0, 1000);

выдается (в офисе) что-то типа

-2141869864
-2128830464
192
0
-2127372288
0
...

и остальные значение нули. Дома немного другие числа и нулей поменьше.

06.03.2006 14:35:27
#67

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

еще раз - данные 16 битные...

Женя
06.03.2006 15:15:38
#68

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

а, точно

но это особого ветра не сделало.

Denis
07.03.2006 11:46:56
#69

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

сделал проверку.....
  public string StartLDevice()
        {
            string result = "";

            // проверка записывает ли Ацп вообще что нить в память.... т.е. перед съемом заполняем память 1
            Int16[] data = new Int16[1000]; // создаем массив

            // инициализируем его 5-ами
                for (int i = 0; i < data.Length; i++) // вывод массива на экран
                {
                    data[i] = 5;
                }
            // записываем его в память
                Marshal.Copy(data, 0, dataStartPointer, data.Length);
                       

            Err = csDriverLibrary.StartLDevice(ref hIfc);
            result = "Called StartLDevice. Error result = " + ErrorMessenger(Err) + "/n";

            return result;
        }

результат - ничего в память то и не пишется....
весь кусок в 5-ках...
все что мы считывали до этого - просто непроинициализированная память...

Denis
07.03.2006 12:57:50
#70

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

Женя у меня к тебе несколько вопросов...

почему использовалась структура WADC_PAR_1
а не WADC_PAR_0

вроде что для L783 - у тебя
и L780 у меня должна быть WADC_PAR_0 (по крайней мере я иак понял из мануала и такая применена в примере  wlcomp)

на данный момент .. у меня со структурой

если применена WADC_PAR_1 тогда у тебя в исходнике:

LCardDLLHandler.FillDAQparameters(ref hIfc,ref helper, IOCTL.L_ADC_PARAM);
            DAQparameters.t4 = helper;

            uint tm = 100000;        // мы захотели 100000 отсчетов
            Err = LCardDLLHandler.RequestBufferStream(ref hIfc, ref tm,IOCTL.L_STREAM_ADC);
            result += "/nCalled RequestBufferStream. Allocated memory size(word): " + tm.ToString() + ". Error result = " + Err.ToString() + '/n';

            Err = LCardDLLHandler.SetParametersStream(ref hIfc, ref helper, IOCTL.L_STREAM_ADC, ref tm, ref dataStartPointer, ref syncVarPointer, IOCTL.L_STREAM_ADC);
           

в вызове функции FillDAQparameters аргумент IOCTL.L_ADC_PARAM получается равен 1 а по примеру Client.cpp
" FillDAQparameters(&hIfc, &ap.t3, 2); // 0 t1, 1 t2, 2 t3, 3 t4"
т.е. должно быть последнее поле = 3...

аналогично SetParametersStream ...

Правда я попробовал попроваить.. и на GetSyncData
все теже нули...но попробуй ты усебя может все таки работает...

у меня с ADC_PAR_0  вообще при вызове StartLDevice синий экран смерти и комп висит....
пишет чтото типа IRQ_LESS_OR_EQUAL и т.д.

Уважаемый Poul поправте меня если я где не прав и ошибаюсь....

07.03.2006 13:23:26
#71

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

должна быть wadc_par_0 ... 1 это для 791 платы...
там для удобства в каталоге UTILS есть отладочные версии драйверов и утилитка просмотра их вывода...можно посмотреть что не тка идет....

Denis
07.03.2006 13:52:48
#72

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

utils

есть две проги
CHIOMEM.EXE - гордо пишет что ни одного девайса не обнаружено... (я так понимаю под дососм или под win 98 она работать будет... но как мне свою программу туда сунуть фрейворка для доса нет...)

вторая Dbgview.exe тоже пишет что несовместима с этой версией винды...
а можно поподробнее как это смотреть?

07.03.2006 16:01:01
#73

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

dbgview утянуть свежую с www.sysinternals.com
chiomem для другого дела...
дрова из этой папки копируете вместо релизных в window/sysstem32/drivers.. перезагружаетесь и запускаете dbgview..

Denis
07.03.2006 17:06:22
#74

Гость

Re: L780 - Как подключить библиотеки АЦП в Visual C++

сделал все как вы сказали.....
получил вот такой результат... правда на что смотреть пока непонимаю...
00000005    39.18722153    LDevicePci: In Create
00000006    39.18723679    LDevicePci: Tune type PCIC
00000007    39.18724823    LDevicePci: CreateFile status
00000008    39.18725967    0x00000000
00000009    39.18726730    
00000010    39.18729019    LDevicePci: In DIOC_GET_PARAMS
00000011    39.18730927    LDevicePci: In DIOC_GET_PARAMS
00000012    39.18732452    LDevicePci: In CleanUp
00000013    39.18733597    LDevicePci: In Close
00000014    39.18796921    LDevicePci: In Create
00000015    39.18798447    LDevicePci: Tune type PCIC
00000016    39.18799210    LDevicePci: CreateFile status
00000017    39.18800354    0x00000000
00000018    39.18801117    
00000019    39.18803024    LDevicePci: In DIOC_GET_PARAMS
00000020    39.20208740    LDevicePci: In DIOC_SET_DSP_TYPE
00000021    39.20315170    LDevicePci: In DIOC_READ_FLASH_WORD
00000022    39.20413971    LDevicePci: In DIOC_READ_FLASH_WORD
00000023    39.20494843    LDevicePci: In DIOC_READ_FLASH_WORD
00000024    39.20575714    LDevicePci: In DIOC_READ_FLASH_WORD
00000025    39.20656967    LDevicePci: In DIOC_READ_FLASH_WORD
00000026    39.20737839    LDevicePci: In DIOC_READ_FLASH_WORD
00000027    39.20818710    LDevicePci: In DIOC_READ_FLASH_WORD
00000028    39.20899963    LDevicePci: In DIOC_READ_FLASH_WORD
00000029    39.20981216    LDevicePci: In DIOC_READ_FLASH_WORD
00000030    39.21062088    LDevicePci: In DIOC_READ_FLASH_WORD
00000031    39.21142960    LDevicePci: In DIOC_READ_FLASH_WORD
00000032    39.21224213    LDevicePci: In DIOC_READ_FLASH_WORD
00000033    39.21363068    LDevicePci: In DIOC_READ_FLASH_WORD
00000034    39.21444321    LDevicePci: In DIOC_READ_FLASH_WORD
00000035    39.21525574    LDevicePci: In DIOC_READ_FLASH_WORD
00000036    39.21606445    LDevicePci: In DIOC_READ_FLASH_WORD
00000037    39.21687698    LDevicePci: In DIOC_READ_FLASH_WORD
00000038    39.21768951    LDevicePci: In DIOC_READ_FLASH_WORD
00000039    39.21849823    LDevicePci: In DIOC_READ_FLASH_WORD
00000040    39.21930695    LDevicePci: In DIOC_READ_FLASH_WORD
00000041    39.22011948    LDevicePci: In DIOC_READ_FLASH_WORD
00000042    39.22092819    LDevicePci: In DIOC_READ_FLASH_WORD
00000043    39.22173691    LDevicePci: In DIOC_READ_FLASH_WORD
00000044    39.22259903    LDevicePci: In DIOC_READ_FLASH_WORD
00000045    39.22341919    LDevicePci: In DIOC_READ_FLASH_WORD
00000046    39.22423172    LDevicePci: In DIOC_READ_FLASH_WORD
00000047    39.22504044    LDevicePci: In DIOC_READ_FLASH_WORD
00000048    39.22585297    LDevicePci: In DIOC_READ_FLASH_WORD
00000049    39.22666168    LDevicePci: In DIOC_READ_FLASH_WORD
00000050    39.22747040    LDevicePci: In DIOC_READ_FLASH_WORD
00000051    39.22828293    LDevicePci: In DIOC_READ_FLASH_WORD
00000052    39.22909164    LDevicePci: In DIOC_READ_FLASH_WORD
00000053    39.22990417    LDevicePci: In DIOC_READ_FLASH_WORD
00000054    39.23071671    LDevicePci: In DIOC_READ_FLASH_WORD
00000055    39.23152542    LDevicePci: In DIOC_READ_FLASH_WORD
00000056    39.23233414    LDevicePci: In DIOC_READ_FLASH_WORD
00000057    39.23315811    LDevicePci: In DIOC_READ_FLASH_WORD
00000058    39.23396683    LDevicePci: In DIOC_READ_FLASH_WORD
00000059    39.23477936    LDevicePci: In DIOC_READ_FLASH_WORD
00000060    39.23558807    LDevicePci: In DIOC_READ_FLASH_WORD
00000061    39.23639679    LDevicePci: In DIOC_READ_FLASH_WORD
00000062    39.23720551    LDevicePci: In DIOC_READ_FLASH_WORD
00000063    39.23803711    LDevicePci: In DIOC_READ_FLASH_WORD
00000064    39.23886490    LDevicePci: In DIOC_READ_FLASH_WORD
00000065    39.23969269    LDevicePci: In DIOC_READ_FLASH_WORD
00000066    39.24050522    LDevicePci: In DIOC_READ_FLASH_WORD
00000067    39.24131775    LDevicePci: In DIOC_READ_FLASH_WORD
00000068    39.24212265    LDevicePci: In DIOC_READ_FLASH_WORD
00000069    39.24319839    LDevicePci: In DIOC_READ_FLASH_WORD
00000070    39.24401474    LDevicePci: In DIOC_READ_FLASH_WORD
00000071    39.24482727    LDevicePci: In DIOC_READ_FLASH_WORD
00000072    39.24563217    LDevicePci: In DIOC_READ_FLASH_WORD
00000073    39.24644470    LDevicePci: In DIOC_READ_FLASH_WORD
00000074    39.24725723    LDevicePci: In DIOC_READ_FLASH_WORD
00000075    39.24806595    LDevicePci: In DIOC_READ_FLASH_WORD
00000076    39.24887848    LDevicePci: In DIOC_READ_FLASH_WORD
00000077    39.24968719    LDevicePci: In DIOC_READ_FLASH_WORD
00000078    39.25049973    LDevicePci: In DIOC_READ_FLASH_WORD
00000079    39.25130844    LDevicePci: In DIOC_READ_FLASH_WORD
00000080    39.25211716    LDevicePci: In DIOC_READ_FLASH_WORD
00000081    39.25305176    LDevicePci: In DIOC_READ_FLASH_WORD
00000082    39.25386429    LDevicePci: In DIOC_READ_FLASH_WORD
00000083    39.25467682    LDevicePci: In DIOC_READ_FLASH_WORD
00000084    39.25548553    LDevicePci: In DIOC_READ_FLASH_WORD
00000085    39.33765030    LDevicePci: In SETBUFFER
00000086    39.33766174    LDevicePci: Set Buffer
00000087    39.33767319    0x00000001
00000088    39.33767700    
00000089    39.33790588    LDevicePci: In SETUP
00000090    39.33790970    LDevicePci: 
00000091    39.33791733    0xffff
00000092    39.33792496    
00000093    39.33793259    0x0000
00000094    39.33794022    
00000095    39.33794403    0x443d
00000096    39.33795166    
00000097    39.33795929    0x0800
00000098    39.33796310    
00000099    39.33796692    LDevicePci: Set Buffer
00000100    39.33797455    0x00000020
00000101    39.33798218    
00000102    39.33798981    0x0800
00000103    39.33799362    
00000104    39.33823013    LDevicePci: In INIT_SYNC


вот этот сохраняется и выполняется аккурат до вызова функции StartLDevice...
как только вызываешь StartLDevice винда сворачивается....
в лог ничего не добавляется...

09.03.2006 10:04:12
#75

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

Re: L780 - Как подключить библиотеки АЦП в Visual C++

Похоже что RequestBuffer выполнился не так...память выделена в 1... Ну и структура параметров сбора абстрактно передалась....
Это In SETUP печатает:
         Tracer << TraceHex << " " << adcPar.t1.Rate << " " << adcPar.t1.NCh << " " << adcPar.t1.Chn[0] << " " << adcPar.t1.FIFO << "/n";
         Tracer << "Set Buffer " << wPages << " " << wIrqStep << "/n";
А это SETBUFFER:
         Tracer << "In SETBUFFER /n";

         wBufferSize = *(ULONG *)ioBuffer;
         Tracer << "Set Buffer " << wBufferSize << "/n";