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

E14-440 Ошибка FillDAQparameters (C#)

Вы не вошли.

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

Roman
23.06.2014 08:58:07
#1

Гость

E14-440 Ошибка FillDAQparameters (C#)

Добрый день!

Карта E14-440. Библиотека lcomp, wlcomp.

Возникает ошибка при вызове FillDAQparameters. Вызовы других функций проходят успешно.

Возвращает dRate: 3,03618161338821E-319 и дает адреса Sync: 5636096 и Data: 5640192, а размер Size: 0.

А если меняем тип поля sp_type (в DllImport SetParametersStream) с uint на ulong, то возвращает  dRate: 2,60494154500976E+268 и Size: 10240, но  пропадают адреса Sync: 0 и Data: 0.

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

namespace lcard
{

    [StructLayout(LayoutKind.Sequential, Pack=1)]
    public unsafe 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, Pack=1)]
    public unsafe struct ADC_PAR_0
    {

public ushort s_Type;
public ushort AutoInit;
public double dRate;
public double dKadr;
public double dScale;
public ushort 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 FIFO;
public ushort IrqStep;
public ushort Pages;
public ushort IrqEna;
public ushort AdcEna;
       
}
   
[StructLayout(LayoutKind.Sequential, Pack=1)]
public unsafe struct SLOT_PARAM
{
public ulong Base;
public ulong BaseL;     
public ulong Base1;     
public ulong BaseL1;   
public ulong Mem;       
public ulong MemL;     
public ulong Mem1;     
public ulong MemL1;     
public ulong Irq;       
public ulong BoardType;
public ulong DSPType;   
public ulong Dma;       
public ulong DmaDac;   
public ulong DTA_REG;   
public ulong IDMA_REG; 
public ulong CMD_REG;   
public ulong IRQ_RST;   
public ulong DTA_ARRAY;
public ulong RDY_REG;   
public ulong CFG_REG;   
}

   
   
public partial  class MainForm : Form
{
           
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint LoadAPIDLL(string dllname);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint FreeAPIDLL(ref uint hDll);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint CallCreateInstance(ref uint hDll, uint Slot, ref uint Err);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint OpenLDevice(ref uint hObj);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint CloseLDevice(ref uint hObj);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint LoadBios(ref uint hObj, string BiosName);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint PlataTest(ref uint hObj);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint ReadPlataDescr(ref uint hObj, ref PLATA_DESCR pd);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint StartLDevice(ref uint hObj);
       
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint RequestBufferStream(ref uint hObj, ref uint UsedSize, uint StreamId);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint FillDAQparameters(ref uint hObj, ref ADC_PAR_0 sp, uint sp_type);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint SetParametersStream(ref uint hObj, ref ADC_PAR_0 sp, uint sp_type, ref uint UsedSize, ref IntPtr Data, ref IntPtr Sync, uint StreamId);
       
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint GetSlotParam(ref uint hObj, ref SLOT_PARAM slPar);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint InitStartLDevice(ref uint hObj);
[DllImport("C:/Users/!!!/Desktop/C#/123/DLL/wlcomp.dll")]
        public static extern uint StopLDevice(ref uint hObj);
   


uint hDll;
uint hObj;
uint Err=0;
   
uint tm = 10000;

IntPtr Sync = new IntPtr();
IntPtr Data = new IntPtr();           
           
           
       
public unsafe MainForm()
       
        {
       
    InitializeComponent();
           
   
PLATA_DESCR pd = new PLATA_DESCR();
SLOT_PARAM spl = new SLOT_PARAM();
    ADC_PAR_0 adcPar = new ADC_PAR_0();
                 
    string s = "lcomp.dll";
    hDll = LoadAPIDLL(s);
    hObj = CallCreateInstance(ref hDll, 0, ref Err);
    Err =  OpenLDevice(ref hObj);                        
    Err =  LoadBios(ref hObj, "C:/Users/!!!/Desktop/C#/123/DLL/E440");   
    Err =  PlataTest(ref hObj);                       
    Err =  GetSlotParam(ref hObj, ref spl);                    
    Err =  ReadPlataDescr(ref hObj, ref pd);                    
                       
           
    adcPar.s_Type = 1;
        adcPar.AutoInit = 1;
        adcPar.dRate = 100.0;            
        adcPar.dKadr = 0;
        adcPar.dScale = 0;
        adcPar.SynchroType = 0;
        adcPar.SynchroSensitivity = 0;
        adcPar.SynchroMode = 0;
        adcPar.AdChannel = 0;
        adcPar.AdPorog = 0;
        adcPar.NCh = 1;
        adcPar.Chn[0] = 0x0;
             //adcPar.Chn[1] = 0x1;
             //adcPar.Chn[2] = 0x2;
             //adcPar.Chn[3] = 0x3;
        adcPar.FIFO = 4096;
        adcPar.IrqStep = 4096;
        adcPar.Pages = 32;
        adcPar.IrqEna = 1;
        adcPar.AdcEna = 1;
           
            
        Err = RequestBufferStream(ref hObj, ref tm, 1);                            
                                   
        Err = SetParametersStream(ref hObj, ref adcPar, 2, ref tm, ref Data, ref Sync, 1);
            
           Err = FillDAQparameters(ref hObj, ref adcPar, 2);                                   
                    
           
    Err = InitStartLDevice(ref hObj);                                                
    Err = StartLDevice (ref hObj);                                                
    Err = StopLDevice (ref hObj);                                                    
    Err = CloseLDevice(ref hObj);                    
    Err = FreeAPIDLL(ref hDll);                   
       
    }
   
}
}

23.06.2014 11:43:23
#2

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

Re: E14-440 Ошибка FillDAQparameters (C#)

У Вас описание   public unsafe struct ADC_PAR_0 устарвшее. там везде сейчас ULONG. Посмотрите в свежем файле ioctl.h...

Roman
23.06.2014 13:09:54
#3

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

Поменял на ulong, теперь в SetParametersStream ошибка пошла

23.06.2014 14:27:08
#4

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

Re: E14-440 Ошибка FillDAQparameters (C#)

Я надеюсь Вы все комплектно обновили? И dll свежая и хедеры...

Roman
24.06.2014 12:28:23
#5

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

Обновил комплектно, lcomp и wlcomp свежие (от 14.03.2014). SetParametersStream попрежнему показывает ошибку. На что еще можно обратить внимание?

24.06.2014 12:33:22
#6

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

Re: E14-440 Ошибка FillDAQparameters (C#)

сначал fill должен быть, а потом set.

Roman
24.06.2014 13:52:48
#7

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

обновил...  сейчас и fil и set ушли в ошибку. И все также если меняешь тип sp_type в set, то адреса Data и Sync появляются.

24.06.2014 14:35:12
#8

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

Re: E14-440 Ошибка FillDAQparameters (C#)

Я бы начал с C/C++ примеров.

Roman
27.06.2014 13:45:38
#9

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

Poul пишет:

Я бы начал с C/C++ примеров.

Разобрался. Всё зароботало.

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

Благодарю за помощь!

Сергей333
04.10.2023 14:30:27
#10

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

Добрый день, вопрос топикстартеру, вы можете выложить рабочий пример на с# c с получением данных от E14-440

Сергей333
04.10.2023 15:25:25
#11

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

hDll = LoadAPIDLL(s);
hObj = CallCreateInstance(ref hDll, 0, ref Err);

первая строка возвращает ссылку, а во второй строке ошибка 2, судя по исходникам wlcomp он тупо не может создать объект, что может быть ?

Сергей333
05.10.2023 07:46:01
#12

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

в первом случае я пытался загрузить х64 версии библиотек, сегодня попробовал х86, объект создался, но на строке

Err = SetParametersStream(ref hObj, ref adcPar, 2, ref tm, ref Data, ref Sync, 1);

вылетает окно смерти...

SeyranG
13.02.2024 13:20:49
#13

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

в строке
string s = "lcomp.dll";
hDll = LoadAPIDLL(s);
вылетает ошибка "System.BadImageFormatException: 'Была сделана попытка загрузить программу, имеющую неверный формат. "
При чем пробовал разные версии lcomp.dll и отдельно попробовал wlcomp.dll
Проект .Net Core6 ОС Windows 10
может кто нибудь подсказать что можно сделать?

и еще ни один пример на VC++ скачанный под Е14-440 под Windows 10 и VisualStudio2022 не работает, с этим как быть ?

SeyranG
13.02.2024 14:59:07
#14

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

lcomp64.dll и wlcomp64.dll дали результат, библиотека прочиталась, но как у прежнего оратора
hObj = CallCreateInstance(ref hDll, 0, ref Err);
возвращает ошибку 2

библиотеки последние с сайта

SeyranG
14.02.2024 09:52:09
#15

Гость

Re: E14-440 Ошибка FillDAQparameters (C#)

#define L_ERROR 2
Нашел описание ошибки в ioctl.h, хотя описанием трудно назвать.

Контакты

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

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

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

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