|
|
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";
|