|
|
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.04.2014
- Сообщений: 3,727
|
Re: E14-440 Ошибка FillDAQparameters (C#)
У Вас описание public unsafe struct ADC_PAR_0 устарвшее. там везде сейчас ULONG. Посмотрите в свежем файле ioctl.h...
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
Поменял на ulong, теперь в SetParametersStream ошибка пошла
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: E14-440 Ошибка FillDAQparameters (C#)
Я надеюсь Вы все комплектно обновили? И dll свежая и хедеры...
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
Обновил комплектно, lcomp и wlcomp свежие (от 14.03.2014). SetParametersStream попрежнему показывает ошибку. На что еще можно обратить внимание?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: E14-440 Ошибка FillDAQparameters (C#)
сначал fill должен быть, а потом set.
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
обновил... сейчас и fil и set ушли в ошибку. И все также если меняешь тип sp_type в set, то адреса Data и Sync появляются.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: E14-440 Ошибка FillDAQparameters (C#)
Я бы начал с C/C++ примеров.
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
Poul пишет:Я бы начал с C/C++ примеров.
Разобрался. Всё зароботало. Не правильно упаковывал структуру с параметрами. Последовательность должна быть такая же, как в примере. Благодарю за помощь!
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
Добрый день, вопрос топикстартеру, вы можете выложить рабочий пример на с# c с получением данных от E14-440
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
hDll = LoadAPIDLL(s);
hObj = CallCreateInstance(ref hDll, 0, ref Err);
первая строка возвращает ссылку, а во второй строке ошибка 2, судя по исходникам wlcomp он тупо не может создать объект, что может быть ?
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
в первом случае я пытался загрузить х64 версии библиотек, сегодня попробовал х86, объект создался, но на строке Err = SetParametersStream(ref hObj, ref adcPar, 2, ref tm, ref Data, ref Sync, 1);
вылетает окно смерти...
|
|
|
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 не работает, с этим как быть ?
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
lcomp64.dll и wlcomp64.dll дали результат, библиотека прочиталась, но как у прежнего оратора hObj = CallCreateInstance(ref hDll, 0, ref Err); возвращает ошибку 2 библиотеки последние с сайта
|
|
|
Re: E14-440 Ошибка FillDAQparameters (C#)
#define L_ERROR 2 Нашел описание ошибки в ioctl.h, хотя описанием трудно назвать.
|