Хорошего дня.
У меня стоит задача разработать ПО по захвату сигнала с ПЗС датчика.
К самой железке прилагается dll для работы с ней. Я реализовал функции по
инициализации, установке параметров, но вот захват сигнала не идёт.
Вот описание функции GetData из документа по описанию всех функций dll:
" 3.24 CCD_GetData
function CCD_GetData ( ID : Integer; pData : PDWORDArr) :
boolean; stdcall;
Функция CCD_GetData используется для получения данных
(результатов регистрации).
pData – указатель на массив DWORD. Длина выделенной
памяти должна быть эквивалентна числу пикселов
ПЗС-датчика и числу установленных регистраций
(4*Npixels*Nframes). Функция применима только для камер
на основе ПЗС-линейки. Используется совместно с
функцией CCD_InitMeasuring. В новых разработках и для
всех камер на основе ПЗС-матрицы следует использовать
функцию CCD_InitMeasuringData. Если к компьютеру подключено несколько приборов, то ID
используется как идентификатор ПЗС-прибора. ID может
принимать значение 0,1,2.
Если используется один прибор, то ID = 0.
Если функция выполнила операцию правильно, то она
вернет значение TRUE.
"
конфигурацию вызова dll прилагаю, скажите, пожалуйста, может у меня
что нет так с параметрами? Функция мне возвращает 0 и пустой массив.
Количество пикселов 512, количество кадров - 1.
С датчиком также идёт программа на С написанная, там измерения идут в нормальном режиме.
Производитель dll пишет, что "Память выделяется в байтах.
GetMem(pData, Round(Np*SizeOf(DWORD)*Nf));
Размер двойного слова 4 байта. "
Помогите разобраться, что к чему.
Спасибо.
Захват сигнала. ПЗС датчика.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Захват сигнала. ПЗС датчика.
Сходу видно некорректность: прототип функции выглядит так:
А в вы определяете функцию как
Далее, размер массива должен быть Round(Np*SizeOf(DWORD)*Nf), а конкретнее "Число пикселей" х 4 х "Число кадров", то есть в вашем случае 512 х 4 х 1, а вы выделяете 512 х 1.
Код: Выделить всё
function CCD_GetData(ID: Integer; pData: PDWORDArr): boolean; stdcall;
Видите разницу?uint8_t CCD_GetData(int32_t *pData, int32_t ID);
Далее, размер массива должен быть Round(Np*SizeOf(DWORD)*Nf), а конкретнее "Число пикселей" х 4 х "Число кадров", то есть в вашем случае 512 х 4 х 1, а вы выделяете 512 х 1.
-
- assistant
- Сообщения: 119
- Зарегистрирован: 16 фев 2009, 12:55
- Версия LabVIEW: 8.6
- Контактная информация:
Re: Захват сигнала. ПЗС датчика.
Спасибо.
Я не понял в чём не правильность прототипа функции??
у меня return type - unit8, если 0 - false, если 1 - true или не в этом ошибка?
или поменять местами ID и указатель на массив?
Я не понял в чём не правильность прототипа функции??
у меня return type - unit8, если 0 - false, если 1 - true или не в этом ошибка?
или поменять местами ID и указатель на массив?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Захват сигнала. ПЗС датчика.
Конечно, должно быть строгое соответствие, параметры передаются на стек в определенном порядке и в том же порядке возвращаются.Kayfolom писал(а):или поменять местами ID и указатель на массив?
-
- assistant
- Сообщения: 119
- Зарегистрирован: 16 фев 2009, 12:55
- Версия LabVIEW: 8.6
- Контактная информация:
Re: Захват сигнала. ПЗС датчика.
Спасибо. Вечером отпишусь.
А, что по поводу массива? и загадочной фразы:
Память выделяется в байтах.
GetMem(pData, Round(Np*SizeOf(DWORD)*Nf));
Размер двойного слова 4 байта.
ведь, если буду заводить массив длинной 512*4*1, то и вернётся такой же, а у меня каналов 512 и на график результаты
должны отображаться ввиде массива длинной 512
А, что по поводу массива? и загадочной фразы:
Память выделяется в байтах.
GetMem(pData, Round(Np*SizeOf(DWORD)*Nf));
Размер двойного слова 4 байта.
ведь, если буду заводить массив длинной 512*4*1, то и вернётся такой же, а у меня каналов 512 и на график результаты
должны отображаться ввиде массива длинной 512
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Захват сигнала. ПЗС датчика.
Kayfolom
Всё-таки у вас на картинке получается верно нарисовано. С помощью Initialize Array вы выделяете память для массива, всего элементов будет 512, каждый элемент в массиве имеет тип U32 или DWORD (4 байта). То есть, оставляете это так, как есть, больше ничего выделять дополнительно не надо. В принципе, можно даже не выделять память, а прописать в настройках CLFN в поле Minimum Size значение 512, тогда сам выделит память при вызове функции.
Всё-таки у вас на картинке получается верно нарисовано. С помощью Initialize Array вы выделяете память для массива, всего элементов будет 512, каждый элемент в массиве имеет тип U32 или DWORD (4 байта). То есть, оставляете это так, как есть, больше ничего выделять дополнительно не надо. В принципе, можно даже не выделять память, а прописать в настройках CLFN в поле Minimum Size значение 512, тогда сам выделит память при вызове функции.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение