Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Re: написание софта под Е14-140 на С#По поводу Вашего сообщения на форме: Во-первых структуру ADC_PARS_E140 нужно объявить как struct, а не class. Раз Вы ее передаете в неуправляемый код на C, то делать ее динамическим управляемым объектом не стоит – могут быть дополнительные проблемы. Во-вторых, структуры типа struct передаются в функции C вполне спокойно без использования специальных классов, просто с указанием ключевых слов ref или out. Достаточно объявить функцию так: [DllImport("E140ForCSarp.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
Соответственно, при вызове передать ее тоже со словом ref. |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Алексей (L-Card), сделал как Вы сказали! но все равно Ваша функция SET_ADC_PARS возвращает ОШИБКУ (FALSE)... может не верно объявил структуру на С#?!
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Ошибка в программе в том, что GET_MODULE_DESCRIPTION надо делать до SET_ADC_PARS, тогда все будет работать (это должно быть описано в руководстве программиста). Ничего дополнительного в обертке писать не нужно - вполне работает просто вызов функции: E140FORCSARP_API BOOL WINAPI fnE140ForCSarpSET_ADC_PARS(ADC_PARS_E140 *ap)
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Спасибо!!! Моя ошибка!((( |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Здравствуйте Уважаемые знатоки! Возник вопрос по функции
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Я делал так: [StructLayout(LayoutKind.Sequential, Pack = 1)]
Описание импорта WinAPI функций и структур рекомендую смотреть на PInvoke.net
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Андрей, Спасибо! а дальше с OVERLAPPED работали через маршалинг... ?! |
|||
|
||||
|
Re: написание софта под Е14-140 на С#За основу был взят пример из "MicroSoft Visual C++ 6.0/ReadData/ReadData.cpp" (Асинхронное чтение с 4 каналов АЦП) и переписан на C#. Для Всех функций из Lusbapi была сделана обертка (plain dll на MSVC, т.к. способа создать указатель на метод в С# я не нашел var ptr = CreateLInstance("E440"); var ReadOv = new OVERLAPPED[2];
fixed (WinAPIImports.OVERLAPPED* ov0 = &ReadOv[0], ov1 = &ReadOv[1])
ReadData(ptr, ref IoReq[RequestNumber])
---
[DllImport("lusbapi.dll", EntryPoint = "CreateLInstance", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
[DllImport(dllName, EntryPoint = "ReadData", SetLastError = true)]
код обертки над lusbapi: BOOL ReadData(LPVOID ptr, IO_REQUEST_LUSBAPI * const ReadRequest)
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Все заработало! |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Спасибо!!! |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Здравствуйте, в очередной раз, Уважаемые Знатоки и Разработчики! В продолжении темы возник вопрос! Все заработало, но не могу представить данные на графике в С#, а именно вытянуть, или даже "разложить", их из public IntPtr Buffer; после выполнения ReadData(ReadRequest);... ?! Рылся в ваших примерах так и не нашел как вытянуть данные по каждому каналу! или скорее до меня не дошло как!!!
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Антон, сами данные Вы получили? Т.е. вопрос в том, как их интерпретировать?
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Александр Е, Сами данные я получаю!!! действительно необходимо интерпретировать!
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Из написанного Александром Е получается, что если всего у Вас используется N каналов, то для того, чтобы получить i-ый отсчет по каналу ch (ch от 0 до N-1) byte_ofs = 2*(i*N + ch) |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Через ReadInt16 (или что-то подобное, я не знаток C#) можно читать 16-битные слова; byte_ofs = 2*n, где n - номер отсчета в блоке данных, начиная с 0.
Иначе говоря, n = M * i + j, где M - количество каналов в кадре, i - номер кадра (начиная с 0), j - номер логического канала в таблице логических каналов (0 <= j < M). Осталось, наверное, только уточнить, что данные идут непрерывным потоком с момента начала сбора данных (START_ADC), то есть если размер прочитанного блока данных (то, на что указывает IntPtr) не кратен размеру кадра, то в следующем блоке данные начнутся не с первого канала, а с того, на котором кончился предыдущий блок.
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Огромное СПАСИБО! Помогли!!!
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Какое смещение? Как раз никакого сме |
|||
|
||||
|
Re: написание софта под Е14-140 на С#щения не происходит, просто данные продолжаются с того места, до которого дочитали в предыдущий раз. (Я намеренно разорвал сообщение, чтобы проиллюстрировать эффект) Ведь размер блока чтения - это просто сколько программа запросила у драйвера, какими порциями ей удобнее носить. |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Если читать всегда блоками, кратными кадру, то в каждом блоке данные будут с первого канала. Но лично я не советую на это закладываться - получится "хрупкая" программа, которую (например, другой программист) может случайно сломать, нарушив неочевидное условие, и потом будет искать ошибку до посинения. |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Спасибо!!! Вроде понял!)) |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Ребята, Советую ВАМ включить данное обсуждение в мануал!))) по написанию собственного программного обеспечения! |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Ну, формат кадра и последовательность кадров там описаны (e14_140_programmers_guide.pdf 4.5.6, 3.2.4).
|
|||
|
||||
|
Re: написание софта под Е14-140 на С#Антон морально подготовьтесь к тому, что в очередной Винде про нет технологии забудут. Это часто происходит с различными начинаниями от микрософт и Вам в срочном порядке придётся всё переписывать. Поддержка прекращена. Что Вы ответите на это. |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Доброго времени суток! Тема еще актуальна? Как я понимаю, Антону все-таки удалось написать все на c#. Дабы не городить велосипед - вопрос: не остался ли проект где-нибудь в закромах? |
|||
|
||||
|
Re: написание софта под Е14-140 на С#Root_Александр пишет:
Да, вопрос актуален, можно ли где-то получить проект на C#? |