|  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          " я вообще боюсь что дело еще и в pragma pack(1) те в байтовой упаковке структуры..."
 думаете .NET меняет порядок полей в структуре и поэтому идет неправильная настройка ?
 для этого есть атрибут StructLayout. Перед объявлением структуры пишем [StructLayout(LayoutKind.Sequential)] | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          Я знаю что у меня байтовая в описании. Бейсик например имеет dword по умолчанию....да и все сейчас имеют dword дефаултом... | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          можно явно указать
LayoutKind.Sequential,Pack=1
 и структура не будет расширяться
 или вообще при помощи LayoutKind.Explicit разместить вручную данные в структуре. Но это не помогает  | 
  
    |  | 
    | 
       | 
        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 что это за дескриптор (Женя в твоем коде это как ошибка записана (в общем это фигня но все же))
 и зачем он вообще кому нибудь нужен???
 | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          где можно почитать последнее описание библиотеки? 
по крайней мере то с помощью которого написан пример LIBRARY/wlcomp_tst
 тот мануал что поставился вместе с драйверами (Ревизия 1.0.) февраль 2003 не содержит описания функций SetParametersStream 
GetSyncData и др..
 где про них правильно читать
 (извините если вопрос ламерский... но че то устал я искать в этой куче всего..) | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          именно на wlcomp нигде... просто исходники его смотрите... там просто вызовы функций lcompc небольшими модификациями параметров... | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          в общем то пока справляемся нашел описание библиотеки lcomp там кое что есть... но к сожалению нет тоо на чем споткнулись... а именно описания GetSyncData и GetDataFromBuffer .. 
попытался сам что то сделать... пока неполучается... в частности хотелось бы уточнить
 DllExport(ULONG) GetSyncData(PULONG hIfc, ULONG SyncPtr, ULONG *Sync)
 {
 *Sync = ((PULONG)SyncPtr)[0];
 return 0;
 }
 
что за переменная Sync ? что в ней хранится?
 Женя есть ли у тебя какие успехи??? | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          а в вашем примере используется структура _ASYNC_PARAM ? там вроде задается порядок опроса каналов и усилиние..
 и еще в вашем примере значения возвращаются какието большие...
вроде как они должны быть в диапазоне от -8000 до 8000 (возможно у вас просто знак не учитывается....)?
 | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          В SyncPtr счетчик бегает принятых отсчетов... ASYNC_PAR вообще для одиночных отсчетов... ADC_PAR для потокового сбора, причем они разные для разных плат... | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          какая функция предусмотрена для получения результатов работы ацп...
в библиотеке wlcomp  GetSyncDada и GetDataFromBufer помечены коментарием "для LabView" . в библиотеке lcomp ничего похожего нету.. а как там предусматривалось получить результаты???
 | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          да и еще раз. какой же форат считываемых данных? в одном отсчете что данные по 4-м каналам? | 
  
    |  | 
    | 
       | 
        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 ....
где правда?
 | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          ULONG и DWORD в терминах С это 32 бит целое. Разница такая что в SyncPtr[0] меняется каунтер АЦП а в SyncPtr[1] каунтер ЦАП у некоторых платбыл когдато... а со смещением в 1 страницу те 4096 пошли данные....Выделялась просто память одним куском... а так нормальные данные...шум наверное.. | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          разрядность АЦП 14 бит для хранения кода с выхода АЦП достаточно 16 бит (судя по результатам в L-Graphe то получается один отсчет - 16 бит (поделил размер дат файла на количество отсчетов))
 Так вот вопрос... один отсчет АЦП хранится в 32 битах или один отсчет все таки в 16 битах? (Если в 32 битах два отсчета то их надо разделить на два 16-битных кода???) | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          буфер данных 16 битный. а количество 32 бита. просто приведение типа нужно... | 
  
    |  | 
    | 
       | 
        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
 ...
 и остальные значение нули. Дома немного другие числа и нулей поменьше. | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          еще раз - данные 16 битные... | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          а, точно
 но это особого ветра не сделало. | 
  
    |  | 
    | 
       | 
        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-ках...
 все что мы считывали до этого - просто непроинициализированная память...
 | 
  
    |  | 
    | 
       | 
        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 поправте меня если я где не прав и ошибаюсь.... | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          должна быть wadc_par_0 ... 1 это для 791 платы...
там для удобства в каталоге UTILS есть отладочные версии драйверов и утилитка просмотра их вывода...можно посмотреть что не тка идет....
 | 
  
    |  | 
    | 
       | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          utils
 есть две проги 
CHIOMEM.EXE - гордо пишет что ни одного девайса не обнаружено... (я так понимаю под дососм или под win 98 она работать будет... но как мне свою программу туда сунуть фрейворка для доса нет...)
 вторая Dbgview.exe тоже пишет что несовместима с этой версией винды...
а можно поподробнее как это смотреть?
 | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 23.04.2014Сообщений: 3,727 | 
        Re: L780 - Как подключить библиотеки АЦП в Visual C++
          dbgview утянуть свежую с www.sysinternals.com
chiomem для другого дела...
 дрова из этой папки копируете вместо релизных в window/sysstem32/drivers.. перезагружаетесь и запускаете dbgview..
 | 
  
    |  | 
    | 
       | 
        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 винда сворачивается....
 в лог ничего не добавляется...
 | 
  
    |  | 
    | 
       
      
        
        Сотрудник "Л Кард"Откуда: МоскваЗдесь с 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";
 |