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


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

Вы не вошли.

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

Denis
09.03.2006 13:51:36
#76

Гость

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

Насчет RequestBuffer там все правильно ибо я и создавал один отсчет (в поле экспериментов)..
а вот что значит "структура параметров сбора абстрактно передалась" не совсем понял.. можно пожалуйста поподробнее разъяснить....
и "Tracer << TraceHex << " " << adcPar.t1.Rate << " " << adcPar.t1.NCh << " " << adcPar.t1.Chn[0] << " " << adcPar.t1.FIFO << "/n";
" - это вообще как что откуда... ????

09.03.2006 14:17:51
#77

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

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

это то что драйвер печатает... поля структуры WADC_PAR_0 как они дошли до него... Rate левый число каналов 0, а в массиве логических номеров лажа.... Кроме этого памяти выделили 1, а собирать хотите 32 страницы по 0x800....

Denis
09.03.2006 15:21:39
#78

Гость

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

при инициализации структуры
drate имеет значение 200,
но после вызова функции
csDriverLibrary.FillDAQparameters(ref hIfc, ref InitParameters, (uint)2);
изменяются поля:
dKadr  становится:
dKadr = 8.10317065744228E-320
и        
dRate    -3.692299988305681E+34

к чему бы это?? что делает такого FillDAQparameters и кстати заодно вопрос что делается с полями помечаными в мануале *
USHORT Rate;
*  USHORT Kadr;
*  USHORT Scale;
*  USHORT FPDelay
?

09.03.2006 16:15:51
#79

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

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

это поля для внутреннего пользования платы уже те коды в делители. Вычисляются они...

Denis
09.03.2006 16:23:10
#80

Гость

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

а что с этим?
csDriverLibrary.FillDAQparameters(ref hIfc, ref InitParameters, (uint)2);
изменяются поля:
dKadr становится:
dKadr = 8.10317065744228E-320
и
dRate -3.692299988305681E+34

почему так происходит?

09.03.2006 16:39:14
#81

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

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

значит так неудачно передаются параметры структуры...какая-то несовместимость..
Я надеюсь перед этим вызывается ReadPlataDesr...

Denis
09.03.2006 16:45:09
#82

Гость

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

сначала вызывается инициаизация : (где собственно и вызывается ReadPlataDesr)

public unsafe string Initialization()
        {
            string InitializationLog  = "";
            csDriverLibrary.PLATA_DESCR L780_Description = new csDriverLibrary.PLATA_DESCR();  // создается конкретный экземпляр структуры

            InitializationLog += "Loading lcomp.dll/n";
            hDll = csDriverLibrary.LoadAPIDLL("lcomp.dll");
            InitializationLog += "Адрес начала библиотеки : " + hDll.ToString() + "/n";

            hIfc = csDriverLibrary.CallCreateInstance(ref hDll, slotNum, ref Err); //указатель на устройство
            InitializationLog += "Вызов функции CallCreateInstance... /n" + ErrorMessenger(Err) +
                      "/n Указатель на устройство : " + hIfc.ToString() + "/n";
            uint DiviceDiscriptor;
            DiviceDiscriptor = csDriverLibrary.OpenLDevice(ref hIfc);
            InitializationLog += "Вызов функции OpenLDevice... /n" + ErrorMessenger(Err) + "/n";
            InitializationLog += "Дискриптор полученного устройства : " + DiviceDiscriptor.ToString() + "/n";

            Err = csDriverLibrary.LoadBios(ref hIfc, "l780");
            InitializationLog += "Загрузка биоса... /n" + ErrorMessenger(Err) + "/n";

            Err = csDriverLibrary.ReadPlataDescr(ref hIfc, ref L780_Description);
            InitializationLog += "Считывание параметров платы... /n" + ErrorMessenger(Err) + "/n";
           // L780_Description = L780_Descr; // копируем результат в созданную структуру.


            Err = csDriverLibrary.PlataTest(ref hIfc);
            InitializationLog += "Инициализация функции тестирования платы... /n" + ErrorMessenger(Err) + "/n";   
                       
            InitializationLog += DecodeStructureContent(L780_Description);
           
            return InitializationLog;
        }


потом вызывается  непосредственно установка параметров

  public uint NumberOfSamples = 1000000; // количество отсчетов
       

        public unsafe string SetWorkParameters()
        {
            string result = "";
            csDriverLibrary.WADC_PAR_0 InitParameters = new csDriverLibrary.WADC_PAR_0();
       
            InitParameters.s_Type = csDriverLibrary.L_ADC_PARAM; // тип структуры (должен быть L_ADC_PARAM);
            InitParameters.AutoInit = 1; // флаг указывающий на тип сбора данных 0 - однократный 1 - циклический;
            InitParameters.dRate = 200;     // частота опроса каналов в кадре (кГц);
            InitParameters.dKadr = 0;       // интервал между кадрами (мс);             
            InitParameters.dScale = 0;     // масштаб работы тайймера для 1250 или делителя для 1221                       
            InitParameters.SynchroType = 3; // тип синхронизации;  (если больше 2 - то нет синхронизации)           
            InitParameters.SynchroSensitivity = 0; // вид синхронизации           
            InitParameters.SynchroMode = 0;         // режим синхронизации           
            InitParameters.AdChannel = 0;           // канал по которому выполняется синхронизация                       
            InitParameters.AdPorog = 0;             // уровень синхронизации
            InitParameters.NCh = 4;         // количество опрашиваемых каналов ;
            InitParameters.Chn[0] = 0x0;    // массив с номерами каналов и усилением на них; описывает порядок опроса каналов;
            InitParameters.Chn[1] = 0x1;
            InitParameters.Chn[2] = 0x2;
            InitParameters.Chn[3] = 0x3;
            InitParameters.FIFO = 2048;     // размер половины аппаратного буфера FIFO на плате;
            InitParameters.IrqStep = 2048;  //  шаг генерации прерываний
            InitParameters.Pages = 32;       // размер уольцевого буфера в шагах прерываний
            // произведение этих двух параметров IrqStep*Pages задает количество отсчетов,
            // которое соберет плата при однократном сборе, но не больше чем 128К отсчетов.
            // При циклическом сборе они игнорируются – буфер всегда 128К.
            InitParameters.IrqEna = 1;      // разрешение генерации прерывания от платы (1/0),
            // при этом mask - это младшие 16 бит в слове разрешающем прерывания от платы (блок АЦП);
            InitParameters.AdcEna = 1;      // разрешение работы АЦП (1/0);

            csDriverLibrary.FillDAQparameters(ref hIfc, ref InitParameters, (uint)2); //sp_type (t1=0, t2=1, t3 = 2, t4 =3)           

            //InitParameters.dRate = 200;     // частота опроса каналов в кадре (кГц);
            //InitParameters.dKadr = 0.0;

         
            DAQparameters.t3 = InitParameters;

            uint tm = NumberOfSamples;        // количество отсчтов
            Err = csDriverLibrary.RequestBufferStream(ref hIfc, ref tm, csDriverLibrary.L_STREAM_ADC);
            result += "/nCalled RequestBufferStream. Allocated memory size(word): " + tm.ToString() + ". Error result = " + Err.ToString() + '/n';

            Err = csDriverLibrary.SetParametersStream(ref hIfc, ref InitParameters, /*csDriverLibrary.L_STREAM_ADC*/ (uint)2, ref tm, ref dataStartPointer, ref syncVarPointer, csDriverLibrary.L_STREAM_ADC);
            result += "Called SetParametersStream. Error result = " + Err.ToString() + "/n";
            result += "Plata parameters  : " + "/n";
            result += "Buffer size(word) : " + tm.ToString() + "/n";
            result += "Pages             : " + InitParameters.Pages.ToString() + "/n";
            result += "IrqStep           : " + InitParameters.IrqStep.ToString() + "/n";
            result += "FIFO              : " + InitParameters.FIFO.ToString() + "/n";
            result += "Rate              : " + InitParameters.dRate.ToString() + "/n";

            DAQparameters.t3 = InitParameters;

            Err = csDriverLibrary.EnableCorrection(ref hIfc,1); // Коррекция
            result += "Called EnableCorrection. Error result = " + ErrorMessenger(Err) + "/n";
            Err = csDriverLibrary.InitStartLDevice(ref hIfc); // Инициализация
            result += "Called InitStartLDevice. Error result = " + ErrorMessenger(Err) + "/n";


            return result;
        }

дальше только StartLDevice

...
стрктуктура WADC_PAR_0

public unsafe struct WADC_PAR_0
        {           
            public ushort s_Type;
            public ushort FIFO;
            public ushort IrqStep;
            public ushort Pages;

            public ushort AutoInit;

            public double dRate;
            public double dKadr;
            public double dScale;
            public double Rate;
            public ushort Kadr;
            public ushort Scale;
            public ushort FPDelay;

            public ushort SynchroType;
            public ushort SynchroSensitivity;
            public ushort SynchroMode;
            public ushort AdChannel;
            public ushort AdPorog;
            public ushort NCh;
            public fixed ushort Chn[128];
            public ushort IrqEna;
            public ushort AdcEna;
        }

все правильно?
что можно еще попробовать?

09.03.2006 16:56:26
#83

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

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

в структуре Rate тоже должен быть ushort, и кроме этого вопрос в байтовой упаковке структуры....

Denis
09.03.2006 17:09:54
#84

Гость

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

он там ushort  - это я при переписывании ошибся....
а можно поподробнее про байтовую упаковку структуры?

Denis
09.03.2006 17:32:56
#85

Гость

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

добавил атрибут к структуре - тот про который Женя писал: LayoutKind.Sequential,Pack=1
в результате о счастье:
dKadr    0.0050184461805555551   
dRate    199.26486486486488

теперь это вроде как похоже на правду.....

буда сейчас дальше экспериментировать.....
может поясните как данные с дебаг виею расшифровывать....
получается такое (только окончание после чтения ПлатаДескр)

LDevicePci: In DIOC_READ_FLASH_WORD
LDevicePci: In DIOC_READ_FLASH_WORD
LDevicePci: In DIOC_READ_FLASH_WORD
LDevicePci: In DIOC_READ_FLASH_WORD
LDevicePci: In SETBUFFER
LDevicePci: Set Buffer
0x000f4240

LDevicePci: In SETUP
LDevicePci: 
0x0049

0x0004

0x0000

0x0800

LDevicePci: Set Buffer
0x00000020

0x0800

LDevicePci: In INIT_SYNC
LDevicePci: In START
LDevicePci: In Start IO
LDevicePci: Enable

Denis
09.03.2006 18:10:12
#86

Гость

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

В общем спасибо всем большое!!!!
Все заработало прекрасно!!!!
Спасибо большое Жене без него и его ответов ничего бы не вышло ибо моих знаний в программировании явно недостаточно... (кстати Женя если тебе надо исходник я тебе перешлю... хотя я думаю если ты в своем просто исправишь ошибку со структурой (см. выше) и поставишь атрибут перед ее объявлением, то у тебя тоже все заработает...)

Спасибо большое Poul и хоть развернутость ваших ответов меня несколько смущала (чтение ответа преваращалась в угадайку) тем неменее без вас вообще бы никуда....

в общем спасибо..


....

и по ходу вопрос....

эта программа, которую мы все вместе запустили на 780 устройстве, вообще то "кошка" реально нужно будет управлять 14-440 устройством.. я так подозреваю что в общем то это тот же 780 только с USB и все изменения будут на уровне установки драйверов. Т.е. Я надеюсь что все кроме другого биоса.. Поправте меня если я не прав...


P.S. прикольно от первого поста до последнего прошло ровно 3 месяца....

09.03.2006 21:01:10
#87

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

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

у 440 свои драйвера и функции тоже слегка свои...но принципы теже... ответы специально коцаные чтобы задумываться....
Ну я же написал что печатает драйвер просто некотрые поля структуры... а остальноек просто маркеры входа в соответствующие DeviceIoControl, если помотреть исходники функций..Видно что старт прошел и в плате разрешилось собирать данные, теперь каунтер должен бегать и данные в буфере обновляться...

Женя
10.03.2006 12:32:53
#88

Гость

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

при помощи GetDataFromBuffer так и не получилось достать данные

System.Runtime.InteropServices.Marshal.Copy достает достает данные типа

0
178
0
10321
-346
-44
-42
0
0
-36
-36
1
0
1
6622
1
0
8027
6664
6
6
29534
494
7298
333
...

числа меняются, значит данные с платы =/. но откуда такие здоровые числа ? ведь они должны быть ос -2000 до +200 у L-783

пытался еще настроить плату на выбор данных с одного канала :

helper.NCh = 1;         // количество опрашиваемых каналов ;
            helper.Chn[0] = 0x82;    // массив с номерами каналов и усилением на них; описывает порядок опроса каналов;
        //    helper.Chn[1] = 0x34;
       //     helper.Chn[2] = 0x19;
        //    helper.Chn[3] = 0x5;

выводятся не меняющиеся данные.

10.03.2006 13:24:56
#89

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

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

данные должны быть - signed 16 bit

Женя
24.03.2006 15:23:36
#90

Гость

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

1. Хотел уточнить как из массива данных вынимать каналы ?

я пробовал выделять таким образом :

допустим у нас 4 канала. Тогда я брал данные i-го канала по адресу

data[4*k + i]

где k - номер отсчета.

Но когда я отобразил полученные данные графически и сравнил с тем, что отображает старая прога, увидел, что данные явно не те - даже не близко.

2. И еще у меня фигня такая происходит - когда выполняю прогу из под Visual Studio, указатель на данные крутится примерно в районе - 65 605 632. Данные выбираются меняются; А когда запускаю сгенерированный exe-шник (запускаю не из под студии), указатель на данные уже находится в районе 18 026 496 и данные не меняются.

3. При настройке каналов шестнадцатеричными числами - вот так :

helper.Chn[0] = 0x14;    // массив с номерами каналов и усилением на них; описывает порядок опроса каналов;
            helper.Chn[1] = 0x0;
            helper.Chn[2] = 0x45;
...

всё работает нормально (относительно smile)

когда настраиваю таким образом -

for (int i = 0; i < 10; i++)
            {
                helper.Chn[i] = ((Chanel)chanels.GetByIndex(i)).logicalChanel;
            }

данные не идут

массивы helper.Chn сравнивал после обоих случаев - идентичны. Почему плата ведет себя по разному ? магия...

Denis
18.04.2006 08:02:14
#91

Гость

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

Есть вопрос ....
Отслеживать даные можно с помощью функции  GetSyncData(ref hIfc, (uint)syncVarPointer.ToInt32(), ref ReadingPosPointer); соответственно в ReadingPosPointer и будет тот самый отсчетчик которые снимает данные... но к сожалению получается что отсчетчик бегает а данные в памяти ОЗУ еще не обновлены... они обновляются только после того как он пройдет полный цикл... это так и задумано или я что то неправиольно делаю.... т.е. если я задам снять 4096 - от ReadingPosPointer циклически будет получать значения 2048 и 4096 - и так по кругу... данные обновяться в озу только полсе того как он пробежит весь цикл.... если поставиь снять 65536 отсчетов то соответсвенно ReadingPosPointer принимает значения 2048б 4096 и т.д. с шагом 2048 - но данные обновяться только когда он достигнет значения 65536...
даныные снимаю напрямую с помощью функции
Marshal.Copy(dataStartPointer, dataPortion, 0, SizeOfDataPortion);


в общем вопрос это все таки мой глюк или просто так и дложно работать...

18.04.2006 09:19:17
#92

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

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

обновлены но не все...когда счетчик 2048 то в массиве 0...2027 свежие данные...

Denis
18.04.2006 10:13:28
#93

Гость

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

точно 2027 - не 2047????

18.04.2006 16:19:45
#94

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

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

2047... опечатался...

Антон
13.03.2008 10:17:20
#95

Гость

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

Если у кого что-то получилось на C# может поделится классом или даже программкой какой?

Илья
22.12.2009 21:58:46
#96

Гость

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

Поделитесь, пожалуйста, исходничком! Вроде как в начале получается, но дальше застрял...Что такое csDriverLibrary и прочее...
Выручайте...

landed ikar
18.02.2010 21:35:55
#97

Гость

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

если кого интересует вот мои исходники, которые кое-как работают.

class Program
    {
        static void Main(string[] args)
        {
           
            uint hDll;
            uint hObj;
            uint Err = 0;
            PLATA_DESCR pd = new PLATA_DESCR();
            SLOT_PARAM slp = new SLOT_PARAM();
            ADC_PAR_0 adcPar = new ADC_PAR_0();

            adcPar.s_Type = 1;
            adcPar.AutoInit = 1;
            adcPar.dRate = 400.0;
            adcPar.dKadr = 0.0;
            adcPar.dScale = 0;
            adcPar.SynchroType = 3;
            adcPar.SynchroSensitivity = 0;
            adcPar.SynchroMode = 0;
            adcPar.AdChannel = 0;
            adcPar.AdPorog = 0;
            adcPar.NCh = 1;
            adcPar.Chn = new uint[128];
            //adcPar.Chn[0] = new uint();
            adcPar.Chn[0] = 0x2;
            adcPar.FIFO = 1024;
            adcPar.IrqStep = 1024;
            adcPar.Pages = 32;
            adcPar.IrqEna = 1;
            adcPar.AdcEna = 1;

            string s = "lcomp.dll";
            Console.WriteLine("Hello World!!!");
            hDll = wlcomp.LoadAPIDLL(s);
            Console.WriteLine(hDll.ToString());
            hObj = wlcomp.CallCreateInstance(ref hDll, 1, ref Err);
            Console.WriteLine(hObj.ToString());
            Console.WriteLine(Err.ToString());
            wlcomp.OpenLDevice(ref hObj);
            Err = wlcomp.LoadBios(ref hObj, "L783"); Console.WriteLine("LoadBios "+Err.ToString());
            Err = wlcomp.PlataTest(ref hObj); Console.WriteLine("PlataTest "+Err.ToString());
            Console.WriteLine("Read FLASH");
            Err = wlcomp.ReadPlataDescr(ref hObj, ref pd); Console.WriteLine("ReadPlataDescr "+Err.ToString());
            Err = wlcomp.GetSlotParam(ref hObj, ref slp); Console.WriteLine("GetSlotParam "+Err.ToString());
            Err = wlcomp.FillDAQparameters(ref hObj, ref adcPar, 0); Console.WriteLine("FillDAQparameters " + Err.ToString());

            uint tm = 1000;
            IntPtr Data = new IntPtr();
            IntPtr sync = new IntPtr();

            Err = wlcomp.RequestBufferStream(ref hObj, ref tm, wlcomp.L_STREAM_ADC);
            Console.Write("Called RequestBufferStream. Allocated memory size(word): " + tm.ToString() + ".//n Error result = " + Err.ToString() + //'//n//');


            Err = wlcomp.SetParametersStream(ref hObj, ref adcPar, 0, ref tm, ref Data, ref sync,1); Console.WriteLine("SetParametersStream " + Err.ToString());
            Console.Write("Called SetParametersStream. Error result = " + Err.ToString() + "//n");
            Console.Write("Plata parameters : " + "//n");
            Console.Write("Buffer size(word) : " + tm.ToString() + "//n");
            Console.Write("Pages : " + adcPar.Pages.ToString() + "//n");
            Console.Write("IrqStep : " + adcPar.IrqStep.ToString() + "//n");
            Console.Write("FIFO : " + adcPar.FIFO.ToString() + "//n");
            Console.Write("Rate : " + adcPar.dRate.ToString() + "//n");

            Err = wlcomp.EnableCorrection(ref hObj,1); Console.WriteLine("EnableCorrection " + Err.ToString());
            Err = wlcomp.InitStartLDevice(ref hObj); Console.WriteLine("InitStartLDevice " + Err.ToString());

            short[] MasOfData = new short[2048];
            short[] MasOfDataCopy = new short[2048];
            MasOfData.CopyTo(MasOfDataCopy, 0);
            Marshal.Copy(MasOfData, 0, Data, 2048);

            Err = wlcomp.StartLDevice(ref hObj); Console.WriteLine("StartLDevice " + Err.ToString());
            Console.Read();//подождать немного, пока пройдет сбор данных
           
            Err = wlcomp.StopLDevice(ref hObj); Console.WriteLine("StopLDevice " + Err.ToString());

            Console.Write( " syncVarPointer = " + sync.ToString() + " dataStartPointer = " + Data.ToString());
            Console.Write( " Разница = " + (sync.ToInt32() - Data.ToInt32()).ToString()+//'//n//');

            //Marshal.Copy(Data, MasOfData, 0, 1000);

            uint RealAdress = 0;
            byte[] ByteArray = new byte[5000];
            short[] ShortArray = new short[3000];
            Marshal.Copy(Data, ByteArray, 0, 4096);
            Marshal.Copy(Data, ShortArray, 0, 2048);
           

            for (int i = 0; i<2048; i++)
            {
            RealAdress = (uint)(Data.ToInt32() + i);
            Console.Write( "Adress = " + RealAdress.ToString() + " value 1 = " + ShortArray[i] + //'//n//');

            }


            Encoding ascii = Encoding.ASCII;
            Console.WriteLine("SerNum "+ascii.GetString(pd.SerNum));
            Console.WriteLine("BrdName "+ascii.GetString(pd.BrdName));

            wlcomp.CloseLDevice(ref hObj);
            wlcomp.FreeAPIDLL(ref hDll);
            Console.Read();
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct PLATA_DESCR
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)]
        public byte[] SerNum;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
        public byte[] BrdName;
        public byte Rev;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
        public byte[] DspType;
        public int Quartz;
        public ushort IsDacPresent;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
        public ushort[] Reserv1;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public ushort[] KoefADC;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public ushort[] KoefDAC;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public ushort[] Custom;
    }
    [StructLayout(LayoutKind.Sequential)]
    internal struct SLOT_PARAM
    {
        public uint Base;
        public uint BaseL;
        public uint Base1;
        public uint BaseL1;
        public uint Mem;
        public uint MemL;
        public uint Mem1;
        public uint MemL1;
        public uint Irq;
        public uint BoardType;
        public uint DSPType;
        public uint Dma;
        public uint DmaDac;
        public uint DTA_REG;
        public uint IDMA_REG;
        public uint CMD_REG;
        public uint IRQ_RST;
        public uint DTA_ARRAY;
        public uint RDY_REG;
        public uint CFG_REG;
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct W_ASYNC_PARAM
    {
        public uint s_Type;
        public uint FIFO;
        public uint IrqStep;
        public uint Pages;
        public double dRate;
        public uint Rate;
        public uint NCh;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public uint[] Chn;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public uint[] Data;
        public uint Mode;
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct ADC_PAR_0
    {
        public uint s_Type;
        public uint FIFO;
        public uint IrqStep;
        public uint Pages;

        public uint AutoInit;

        public double dRate;
        public double dKadr;
        public double dScale;
        public uint Rate;
        public uint Kadr;
        public uint Scale;
        public uint FPDelay;

        public uint SynchroType;
        public uint SynchroSensitivity;
        public uint SynchroMode;
        public uint AdChannel;
        public uint AdPorog;

        public uint NCh;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
        public uint[] Chn;
        public uint IrqEna;
        public uint AdcEna;
    }

    static class wlcomp
    {
        public static uint L_STREAM_ADC = 1;

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint LoadAPIDLL(string dllname);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint FreeAPIDLL(ref uint hDll);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint CallCreateInstance(ref uint hDll, uint slot, ref uint Err); // return handle for new iface

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint PlataTest(ref uint hIfc);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint GetSlotParam(ref uint hIfc, ref SLOT_PARAM slPar);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint OpenLDevice(ref uint hIfc);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint CloseLDevice(ref uint hIfc);

        ///
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint SetParametersStream(ref uint hIfc, ref ADC_PAR_0 sp, uint sp_type, ref uint UsedSize, ref IntPtr Data, ref IntPtr Sync, uint StreamId);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint RequestBufferStream(ref uint hIfc, ref uint Size, uint StreamId); //in words
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint FillDAQparameters(ref uint hIfc, ref ADC_PAR_0 sp, uint sp_type);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint InitStartLDevice(ref uint hIfc);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint StartLDevice(ref uint hIfc);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint StopLDevice(ref uint hIfc);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint LoadBios(ref uint hIfc, string FileName);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint IoAsync(ref uint hIfc, ref W_ASYNC_PARAM sp);  // collect all async io operations

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint ReadPlataDescr(ref uint hIfc, ref PLATA_DESCR pd);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint WritePlataDescr(ref uint hIfc, ref PLATA_DESCR pd, ushort Ena);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint ReadFlashWord(ref uint hIfc, ushort FlashAddress, ref ushort Data);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint WriteFlashWord(ref uint hIfc, ushort FlashAddress, ushort Data);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint EnableFlashWrite(ref uint hIfc, ushort Flag);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint EnableCorrection(ref uint hIfc, ushort Ena);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint GetParameter(ref uint hIfc, uint name, ref uint param);
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint SetParameter(ref uint hIfc, uint name, ref uint param);

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint SetLDeviceEvent(ref uint hIfc, uint hEvent, uint EventId);


        // For LabView
        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint GetSyncData(ref uint hIfc, uint SyncPtr, uint Offset, ref uint Sync);
        // читает из адреса описываемого 32 битным числом SyncPtr значение в переменную Sync

        [DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        public static extern uint GetDataFromBuffer(ref uint hIfc, uint DataPtr, ref IntPtr DataArray, uint size, uint mask);
        // копирует данные из буфера аналогично

        //[DllImport("C:/Program Files/L-Card/LIBRARY/BIN/wlcomp.dll")]
        //public static extern uint PutDataToBuffer(ref uint hIfc, uint DataPtr, LPVOID DataArray, uint size);
        // копирует данные в буфер аналогично
    }

landed ikar
18.02.2010 21:42:36
#98

Гость

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

и следом вопрос аналогичный вопросу Жени от 10.03.06 12:32
получю непонятные данные из буфера.
вот отчет:

13434880
13647640
0
LoadBios 0
PlataTest 0
Read FLASH
ReadPlataDescr 0
GetSlotParam 0
FillDAQparameters 0
Called RequestBufferStream. Allocated memory size(word): 2048.
Error result = 0
SetParametersStream 0
Called SetParametersStream. Error result = 0
Plata parameters :
Buffer size(word) : 2048
Pages : 2
IrqStep : 1024
FIFO : 1024
Rate : 400,000060869536
EnableCorrection 0
InitStartLDevice 0
StartLDevice 0
StopLDevice 0
syncVarPointer = 13697024 dataStartPointer = 13701120 ђ §­Ёж  = -4096
Adress = 13701120 value 1 = 0
Adress = 13701121 value 1 = 0
Adress = 13701122 value 1 = 0
Adress = 13701123 value 1 = -169
Adress = 13701124 value 1 = 154
Adress = 13701125 value 1 = 142
Adress = 13701126 value 1 = 570
Adress = 13701127 value 1 = 151
Adress = 13701128 value 1 = 236
Adress = 13701129 value 1 = 1
Adress = 13701130 value 1 = 196
Adress = 13701131 value 1 = 6419
Adress = 13701132 value 1 = 2
Adress = 13701133 value 1 = 1
Adress = 13701134 value 1 = -412
Adress = 13701135 value 1 = -32014
......
Adress = 13703165 value 1 = 5
Adress = 13703166 value 1 = -6377
Adress = 13703167 value 1 = 21508
SerNum 3R386069
BrdName L783

пробовал читать днные с помощью функции GetDataFromBuffer но получалась ахинея отличная от той что я привел в отчете..

НАК
10.11.2010 17:12:46
#99

Гость

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

У меня виснит GetSyncData и в Data какая-то ахинея.Кто-нибудь знает как читать данные с АЦП

10.11.2010 17:46:54
#100

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

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

читать как в примерах. У точните свой вопрос...