Мы предлагаем услуги по интеграции рентгеновских детекторов Detection Technology. Имеем отлаженные решения и многолетний опыт применения в различных проектах.
Семейство высокопроизводительных плат линейных рентгеновских детекторов с ASIC-предусилителем. ASIC-предусилитель преобразует выходное напряжение фотодиодной матрицы в напряжение последовательного выхода для легкой интеграции с электроникой считывания. Могут быть расположены встык, образуя большую линейную матрицу детекторов.
Шаг пикселя 1,5, 1,6 и 2,5 мм доступен с различными вариантами сцинтилляторов для широкого спектра применений с энергией рентгеновского излучения от 30 до 450 кВт/ч. X-Card 2 выпускается с шагом пикселя 0,2, 0,4 и 0,8 мм и обладает ключевыми преимуществами при меньшем шаге пикселя, повышенной чувствительности и длительном сроке службы благодаря максимальной стойкости к излучению. Доступны варианты сцинтилляторов для широкого спектра применений с энергией рентгеновского излучения от 30 кВп до 9 МэВ.
#ifndef XRAYPLUGIN_H
#define XRAYPLUGIN_H
#include "XRayPluginGlobal.h"
#ifdef __cplusplus
extern "C" {
#endif
#define XRAYPLUGIN_ALLOK (0) ///< Все хорошо
#define XRAYPLUGIN_NOT_CONNECTED (-1) ///< Плата не подключена (попытка работы с платой в отсутствии пройденой процедуры подключения)
#define XRAYPLUGIN_ALLREADY_CONNECTED (-2) ///< Плата уже подключена (ошибка при подключении к новой плате, когда уже есть одно подключение)
#define XRAYPLUGIN_INTERNAL_ERROR (-3) ///< Внутренняя ошибка (не должно появляться в штатной работе)
#define XRAYPLUGIN_BAD_PARAMS (-4) ///< Неверные/недопустимые параметры
#define XRAYPLUGIN_LOCK_ERROR (-5) ///< Ошибка захвата мьютекса (возможна при некоректной работе в многопоточном окружении)
#define XRAYPLUGIN_INIT_ERROR (-6) ///< Ошибка инициализации платы (возможно аппаратные проблемы платы)
#define XRAYPLUGIN_NOT_FOUND (-7) ///< Плата не обнаружена (плата не подключена, нет питания платы и т.п.)
#define XRAYPLUGIN_FAILTURE (-8) ///< Сбой
#define XRAYPLUGIN_UNSUPPORTED (-9) ///< Операция не поддерживается (текущая версия платы не поддерживает данный функционал)
#define XRAYPLUGIN_RECEIVEINPROGRESS (-10) ///< Идет прием данных (возникает при попытке изменения конфигурации/настроек при активном режиме сканирования когда идет поток строк)
#define XRAYPLUGIN_BITS_16 (16) ///< 16-битный режим сэмплирования данных
#define XRAYPLUGIN_BITS_18 (18) ///< 18-битный режим сэмплирования данных
#define XRAYPLUGIN_CARDINFO_NAME_MAXLEN (30)
#define XRAYPLUGIN_CARDINFO_DESC_MAXLEN (50)
/// Информация о плате-сенсоров поддерживаемой данной платой захвата
struct cardInfo {
char name[XRAYPLUGIN_CARDINFO_NAME_MAXLEN], ///< Название платы
description[XRAYPLUGIN_CARDINFO_DESC_MAXLEN]; ///< описание платы
char energyCount; ///< кол-во энергий (1 или 2)
short pixelsCountPerEnergy;
} __attribute__((packed));
#define XRAYPLUGIN_PLUGIN_API_VERSION "0.9"
#define XRAYPLUGIN_PLUGININFO_VERSION_MAXLEN (25)
#define XRAYPLUGIN_PLUGININFO_DESCRIPTION_MAXLEN (30)
#define XRAYPLUGIN_PLUGININFO_TIMESTAMPSTR_MAXLEN (30)
/// Информация о данном плагине
struct pluginInfo {
int apiVersion; ///< версия API
unsigned long long pluginApiFeatureSet; ///< битовое поле с поддерживаемыми опциональными возможностями
unsigned int timestamp; ///< дата/время сборки плагина
char version[XRAYPLUGIN_PLUGININFO_VERSION_MAXLEN], ///< версия плагина
description[XRAYPLUGIN_PLUGININFO_DESCRIPTION_MAXLEN], ///< описание плагина
timestampStr[XRAYPLUGIN_PLUGININFO_TIMESTAMPSTR_MAXLEN]; ///< отметка времени
} __attribute__((packed));
#define XRAYPLUGIN_BOARDINFO_VENDOR_MAXLEN (50)
#define XRAYPLUGIN_BOARDINFO_MODEL_MAXLEN (50)
#define XRAYPLUGIN_BOARDINFO_DESCRIPTION_MAXLEN (50)
#define XRAYPLUGIN_BOARDINFO_SERIALNUMBER_MAXLEN (25)
#define XRAYPLUGIN_BOARDINFO_SOFTWAREVERSION_MAXLEN (25)
#define XRAYPLUGIN_ERRORSTR_MAXLEN (120)
/// Информация о подключенной плате захвата
struct boardInfo {
unsigned long long boardApiFeatureSet; ///< битовое поле с поддерживаемыми опциональными возможностями
char channelsCount; ///< кол-во каналов для подключения плат сенсоров
char vendor[XRAYPLUGIN_BOARDINFO_VENDOR_MAXLEN], ///< прозводитель платы
model[XRAYPLUGIN_BOARDINFO_MODEL_MAXLEN], ///< модель платы
description[XRAYPLUGIN_BOARDINFO_DESCRIPTION_MAXLEN], ///< описание платы
serialNumber[XRAYPLUGIN_BOARDINFO_SERIALNUMBER_MAXLEN], ///< серийный номер платы
softwareVersion[XRAYPLUGIN_BOARDINFO_SOFTWAREVERSION_MAXLEN]; ///< версия ПО/прошивки платы
float minGain, maxGain, gainStep, minStartConvPeriodSec, maxStartConvPeriodSec,
minStartTransferDelaySec, maxStartTransferDelaySec;
short minStartConvDelay, maxStartConvDelay;
short supportedCardsTypeCount;
} __attribute__((packed));
/// Конфигурация платы захвата
struct boardConfig {
char cardCount[XRAYPLUGIN_BOARD_MAXCHANNELSCOUNT];
} __attribute__((packed));
/// Конфигурация всей системы захвата (возможно объединение нескольких плат захвата в единую систему)
struct boardsConfig {
struct boardConfig boards[XRAYPLUGIN_BOARD_MAXBOARDSCOUNT];
short card; ///< тип используемой платы сенсоров
char bits; ///< режим "битности"
char masterBoardNum; ///< При использовании конфигурации с несколькими платами захвата, здесь указывается номер платы захвата "мастера" (истоника синхронизации)
} __attribute__((packed));
/// настройки синхронизации платы захвата
struct syncConfig {
float startConvPeriod, startTransferDelay;
int startConvDelay;
} __attribute__((packed));
/// Структура с данными строки изображения
struct imgLine {
const float *leData, ///< данные с низкоэнергетической линейки
*heData; ///< данные с высокоэнергетической линейки
int length; ///< длина строки (кол-во пикселей)
} __attribute__((packed));
/// Callback-функция в которую передаются сообщения протокола работы (лога)
typedef void (* __stdcall xrayLogCallbackFn)(int logLevel, const char *fileName,
const char *funcName, unsigned int line, long long threadId,
const char *threadNameIn, const char *msg, void *userData);
/*!
Установить указатель на callback-функцию лога
\param[in] fn указатель на callback-функцию
\param[in] userData указатель на данные пользователя который будет передаваться в callback-функцию
*/
int __stdcall DLL_PUBLIC xraySetPrintCallback(xrayLogCallbackFn fn, void *userData);
/*!
Установить текущий уровень подробности лога
\param[in] info Уровень подробности лога
*/
int __stdcall DLL_PUBLIC xraySetLogLevel(int logLevel);
/*!
Функция которая должна вызываться при загрузке плагина, возвращает структуру с
описанием плагина
\param[out] info Информация о плагине
*/
int __stdcall DLL_PUBLIC xrayPluginLoad(struct pluginInfo *info);
/*!
Выгрузить плагин
*/
int __stdcall DLL_PUBLIC xrayPluginUnload(void);
///
/*!
Запросить код и описание последней ошибки
\param[out] errorNum Указатель на переменную куда сохранить код ошибки
\param[out] errorStr Указатель на буфер куда сохранить описание ошибки
\param[in] errorStrSize Размер буфера куда будет сохранено описание ошибки
*/
int __stdcall DLL_PUBLIC xrayGetErrorMessage(int *errorNum, char *errorStr,
int errorStrSize);
/// Callback-функция в которую строки изображения
typedef void (* __stdcall xrayLineCallbackFn)(int status, const struct imgLine *line,
void *userData);
/*!
Подключение к плате захвата
\param[in] connectString Строка подключения
\param[out] info Информация о подключенной плате захвата
*/
int __stdcall DLL_PUBLIC xrayBoardConnect(const char *connectString,
struct boardInfo *info);
/*!
Отключиться от платы захвата
*/
int __stdcall DLL_PUBLIC xrayBoardDisconnect(void);
/*!
Получить информацию плате сенсоров
\param[in] num Номер типа платы сенсоров
\param[out] info Информация о плате сенсоров
*/
int __stdcall DLL_PUBLIC xrayGetCardTypeInfo(int num, struct cardInfo *info);
/*!
Задать конфигурацию системы захвата (состоящей из одной или нескольких плат захвата)
\param[in] config структура с описанием системы захвата
*/
int __stdcall DLL_PUBLIC xraySetBoardConfig(struct boardsConfig *config);
/*!
Задать конфигурацию системы синхронизации
\param[in] config структура с конфигурацией синхронизации
*/
int __stdcall DLL_PUBLIC xraySetSyncConfig(struct syncConfig *config);
/*!
Задать уровень усиления сигнала с сенсоров
\param[in] value уровень усиления сигнала
*/
int __stdcall DLL_PUBLIC xraySetGain(float value);
/*!
Запустить прием данных. При этом система сбора начнет формировать строки
изображения в соответствии с заданной ранее конфигурацией
*/
int __stdcall DLL_PUBLIC xrayStartReceive(void);
/*!
Остановить прием данных.
*/
int __stdcall DLL_PUBLIC xrayStopReceive(void);
/*!
Установить указатель на Callback-функцию для возвращения строк изображения
\param[in] fn указатель на callback-функцию для возврата строк
\param[in] userData указатель на данные пользователя который будет передаваться в callback-функцию
*/
int __stdcall DLL_PUBLIC xraySetImgLineCallback(xrayLineCallbackFn fn, void *userData);
#ifdef __cplusplus
}
#endif
#endif // XRAYPLUGIN_H