根据CXP XML文件配置相机
1 说明
GenICam 定义了相机需要实施一个xml文件用于描述相机的功能、寄存器等详细信息,有了这些信息,host才能利用这些信息完成对相机的配置。
对于CoaxPress 接口的Device相机而言,xml信息是如何存储的呢?
Xml 一般情形下都会存在bootstrap 寄存器的用户区间内。
1.1 为什么要xml
1.2 xml存在哪里
2 如何读出xml文件
利用标准采集卡及其对应的SDK应该都可以导出xml配置文件。
2.1 华睿相机
我们以kaya 的采集卡为例进行说明。
图 2‑1 kaya 采集卡及其配套SDK VISION POINT获取相机信息
导出其xml文件即可。
该相机型号为华睿 A9B57CX200
图 2‑2 华睿 A9B57CX200 4 通道6.25Gbps CoaXPress
2.2 海康相机
图 2‑3 HK MVGY1004采集卡 MVS界面
选中相机右键即可保存相机的xml文件
图 2‑4 HK CXP 属性
图 2‑5 相机拍摄画面
图 2‑6 海康大面阵相机
2.3 Admic相机
图 2‑7 Admic 相机连接
图 2‑8 Admic 小相机
3 SDK demo 如何根据xml配置相机
以huarui_A9B57CX200.xml 为示例进行说明,如何在SDK demo中完成相机寄存器的配置。
3.1 配置图像格式
首先查看相机格式寄存器地址。
上图意思是说,PixelFormatReg地址是在ImageFormatControlBase 基地址基础上偏移0x0030,对应实际地址为ImageFormatControlBase + 0x0030, ImageFormatControlBase为0x30010000。
那么向寄存器写入什么值呢?如下图所示,如果要配置成Mono8,那么PixelFormatReg就要写入0x01080001.
那么怎么写入呢?
在SDK Demo中,如何完成这个配置呢?
调用 WRITE_DEVICE_REG (int address, int value) 即可,如果要读出数据,调用 int read_value = READ_DEVICE_REG(int address) 即可。
在什么位置完成相机的设置呢?
应该在设备链接建立之后配置。
3.2 配置曝光时间
根据附录示例,曝光时间参数地址 AcquisitionControlBase + 0x0058, //int Addr_ExposureTime;
那么对应增加WRITE_DEVICE_REG (0x30020000+ 0X58, exposure_time), 通常相机单位是us。
曝光模式也是类似的设置。
4 附录
以huarui_A9B57CX200.xml 为示例
//huarui A9B57CX200 5000*5000
const CameraRegisters CameraRegistersVendorHuarui = {
#define AcquisitionControlBase 0x30020000
AcquisitionControlBase + 0x0000,//int Addr_AcquisitionMode;
AcquisitionControlBase + 0x0004, //int Addr_AcquisitionStart;// 1
AcquisitionControlBase + 0x0008, //int Addr_AcquisitionStop ;// 1
AcquisitionControlBase + 0x000c, //int Addr_AcquisitionBurstFrameCount;// 1
AcquisitionControlBase + 0x0010, //int Addr_AcquisitionFrameRate;
AcquisitionControlBase + 0x0014,//int AcquisitionStatusAcq
//int Addr_AcquisitionFrameRateEnable;
//int Addr_AcquisitionFrameRateMax;
////#define ResetAll 0x00008300//resets the camera to its power up state
AcquisitionControlBase + 0x0020,//int Addr_TriggerMode ; //sel==1 ¹Ì¶¨ÉèÖÃ
AcquisitionControlBase + 0x0030, //int Addr_TriggerSource;
AcquisitionControlBase + 0x0038, //int Addr_TriggerActivation;
AcquisitionControlBase + 0x0028,//int Addr_TriggerSoftware;
AcquisitionControlBase + 0x003c, //Addr_TriggerDelay
AcquisitionControlBase + 0x0048, //int Addr_ExposureMode;
AcquisitionControlBase + 0x0050, //int Addr_ExposureTimeMinReg;
AcquisitionControlBase + 0x0054, //int Addr_ExposureTimeMaxReg;
AcquisitionControlBase + 0x0058, //int Addr_ExposureTime;
#define AnalogControlBase 0x30030000
AnalogControlBase + 0x001C,//int Addr_BlackLevel;//Controls the analog black level 0-255
AnalogControlBase + 0x000C,//int Addr_AnalogGain;//Defines the analog Gain in discrete steps.enum x1 x2 x4
//
//
#define ImageFormatControlBase 0x30010000
ImageFormatControlBase + 0x0010,//int Addr_Width ;
ImageFormatControlBase + 0x001c,//int Addr_Height ;
ImageFormatControlBase + 0x0028,//int Addr_OffsetX ;
ImageFormatControlBase + 0x002C,//int Addr_OffsetY ;
ImageFormatControlBase + 0x0030,//int Addr_PixelFormat ;
ImageFormatControlBase + 0x0004,//int Addr_SensorHeight ;
ImageFormatControlBase + 0x0674,//int Addr_SensorWidth ;
ImageFormatControlBase + 0x003c,//int Addr_TEST_IMAGE_SLECTOR;//TestImageSelector
//
#define TransportLayerControlBase 0x30040000
TransportLayerControlBase + 0x4,//int Addr_TapGeometry ; //0x0004
TransportLayerControlBase + 0x301C,//int Addr_Image1StreamID;
};