Basler acA1300-200uc相机使用教程
https://www.baslerweb.com/cn/products/cameras/area-scan-cameras/ace/aca1300-200uc/
开发文档
https://zh.docs.baslerweb.com/aca1300-200uc
pylon库(C++)
主要示例功能说明
https://blog.csdn.net/juliarjuliar/article/details/79457719
CameraEventPrinter.h
//包含一个为每一个事件函数输出一条消息的一个相机事件处理器
ConfigurationEventPrinter.h
//包含一个为每一个事件函数输出一条消息的一个配置事件处理器
ImageEventPrinter.h
//包含一个为每一个事件函数输出一条消息的一个配置事件处理器
PixelFormatAndAoiConfiguration.h
//包含一个设置像素数据格式和图像AOI的配置
SampleImageCreator.h
//包含创建示例图片的函数,有必要的话转换图像格式为目标格式
DeviceRemovalHandling
//说明如何获得相机设备移除通知及如何重新连接一个移除的设备
Grab
//说明如何使用CInstantCamera类来抓取和处理图像,图像抓取和处理同步进行
Grab_CameraEvents
//说明在相机事件消息收到之后怎么被通知,这些事件会被InstantCamera类自动检索和处理,这些被事件消息装载的信息会在相机节点地图里以参数节点的形式予以公开
Grab_ChunkImage
//如何使用块特征,如何抓取图像及如何处理这些额外的数据。当相机处于分块模式时,它会传输被分为分块的数据块
Grab_MultiCast
//说明以多播模式打开一个相机,以及如何接收一个多播流。实例必须在不同的电脑上同时开始
Grab_MultipleCameras
//说明使用 ClnstantCameraArray 类从多个相机抓取和处理图像的方法。ClnstantCameraArray 类表示当前相机设备对象的一个数组,它提供和 instant camera 基本一致的用于图像抓取的接口
Grab_Strategies
//说明当前相机抓取策略的使用
Grab_UsingExposureEndEvent
//说明如何使用 Exposure End 事件加速图像获取的方法
Grab_UsingGrabLoopThread
//说明使用 Instant Camera 相机类提供的抓取循环线程抓取和处理图像的方法。
Grab_UsingSequencer
//用于展示使用相机的序列特征抓取图像的方法
GUI_ImageWindow
//说明使用 cpylonImageWindow类显示图像的方式。在此,图像被抓取,分割成多个分片,每个分片在独立窗口显示
ParametrizeCamera_AutoFunctions
开发步骤
https://blog.csdn.net/weixin_44840658/article/details/89325995
1、首先需要初始化Pylon,即调用PylonInitialize();
2、在一个try{} catch(){}语句中进行打开相机的相关操作。
3、调用相机的传输层工厂类定义一个工厂类的引用,并初始化它,也就是CTlFactory& tlFactory = CTlFactory::GetInstance();
4、得到所有连接的pylon相机,DeviceInfoList_t devices; tlFactory.EnumerateDevices(devices);
5、创建一个相机实例数组,CInstantCameraArray cameras(min(devices.size(), c_maxCamerasToUse));
6、在一个for循环当中把所有检测到的相机附加到相机实例数组当中,cameras[i].Attach(tlFactory.CreateDevice(device[i]));
7、两个相机开始抓取图像,病定义一个存取抓取结果的变量,cameras.StartGrabbing(); CGrabResultPtr ptrGrabResult;
8、for循环控制抓取的图片数量,在循环内定义一个可以标志相机序列的变量,然后通过cameras数组访问相机的相关数据即可
9、最后终止Pylon相机,即调用PylonTerminate
#include <pylon/PylonIncludes.h> using namespace Pylon; using namespace std; static const uint32_t c_countOfImagesToGrab = 10; static const size_t c_maxCamerasToUse = 2; int main(int argc, char* argv[]) { int exitCode = 0; PylonInitialize(); try { CTlFactory& tlFactory = CTlFactory::GetInstance(); DeviceInfoList_t devices; if ( tlFactory.EnumerateDevices(devices) == 0 ) { throw RUNTIME_EXCEPTION( “No camera present.”); } CInstantCameraArray cameras( min( devices.size(), c_maxCamerasToUse)); cout << "devices.size(): " << devices.size() << endl; for ( size_t i = 0; i < cameras.GetSize(); ++i) { cameras[ i ].Attach( tlFactory.CreateDevice( devices[ i ])); cout << "Using device " << cameras[ i ].GetDeviceInfo().GetModelName() << endl; } for( uint32_t i = 0; i < c_countOfImagesToGrab && cameras.IsGrabbing(); ++i) { cameras.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException); intptr_t cameraContextValue = ptrGrabResult->GetCameraContext(); cout << "Camera " << cameraContextValue << ": " << cameras[ cameraContextValu].GetDeviceInfo().GetModelName() << endl; cout << "GrabSucceeded: " << ptrGrabResult->GrabSucceeded() << endl; cout << "SizeX: " << ptrGrabResult->GetWidth() << endl; cout << "SizeY: " << ptrGrabResult->GetHeight() << endl; const uint8_t *pImageBuffer = (uint8_t *) ptrGrabResult->GetBuffer(); cout << "Gray value of first pixel: " << (uint32_t) pImageBuffer[0] << endl << endl; } } catch (const GenericException &e) { cerr << “An exception occurred.” << endl << e.GetDescription() << endl; exitCode = 1; } cerr << endl << “Press Enter to exit.” << endl; while( cin.get() != ‘\n’); PylonTerminate(); return exitCode; }
硬件接口
机械图纸https://www.baslerweb.com/cn/sales-support/downloads/document-downloads/basler-ace-usb3-c-mount-cad-technical-drawing/
3D打印支架https://www.baslerweb.com/cn/sales-support/downloads/document-downloads/blaze-ace-mounting-bracket-step-stl-model/
引脚 | 线路 | 功能 |
---|---|---|
1 | Line 3 | 通用 I/O (GPIO) 线路 |
2 | Line 1 | 光电耦合 I/O 输入线路 |
3 | Line 4 | 通用 I/O (GPIO) 线路 |
4 | Line 2 | 光电耦合 I/O 输出线路 |
5 | - | 光电耦合 I/O 线路接地 |
6 | - | 通用 I/O (GPIO) 线路接地 |
光电耦合输入电路
GPIO 输入线路
https://zh.docs.baslerweb.com/circuit-diagrams-(ace)
https://zh.docs.baslerweb.com/aca1300-200uc#general-purpose-io-lines
https://blog.csdn.net/IntegralforLove/article/details/94722689