Baumer工业相机堡盟相机做寄存器进行读写保存字符串信息(C++/C#)

简介: Baumer工业相机堡盟相机做寄存器进行读写保存字符串信息(C++/C#)

项目场景:

相机的使用需要与对应的相机参数相配合,常用的相机参数如:曝光,增益,IO 等的设置等;


有的项目需要使用自定义的信息保存到Baumer工业相机中去,方便后期使用;


Baumer工业相机的UserSet功能就是相机的配置参数信息,有default,userset1,2,3可以保存载入


上一篇文章已经介绍了如何对使用Baumer相机的UserSet功能:


Baumer工业相机堡盟相机参数保存与 UserSet参数设置_格林威的博客-CSDN博客


有兴趣的小伙伴可以去了解下。


问题描述

项目中需要存储一些自定义的信息到相机中去,如标定信息、镜头信息等等:


此时Baumer相机自带的UserSet功能只能相机自有属性的参数,是不能保存自定义参数的。


例如:如下为自定义数据信息:


struct SendDataStructV1
{
 // 版本号,从1开始
 int version{1};
 // 3组镜头及对应的标定数据(不需要全写)
 // 规定镜头焦距是255时,没有相应的标定数据
 unsigned char lensFocalLength1{ 255 };
 unsigned char lensFocalLength2{ 255 };
 unsigned char lensFocalLength3{ 255 };
 double data1[30]{};
 double data2[30]{};
 double data3[30]{};
 // 相机类型:1 = 2D;2 = 3D左相机;3 = 3D右相机
 char cameraType{};
 // 3D标定序列号
 char calibrationSN[16]{};
 // 红外序列号
 char laserSN[16]{};
 // 设备序列号
 char deviceSN[16]{};
};


原因分析:

项目的核心需求是需要将相机增加额外一个功能作为Flash去保存载入自定义的数据,传统的相机的UserSet功能只能保存固定的相机自有参数,如曝光、增益、IO等的数据。


因此需要获取一个可以将相机作为寄存器进行读写的功能。


解决方案:

按照如下Baumer相机设置相关参数,Baumer工业相机固件版本3.0以上具有CustomData的功能,可以保存自定义的数据进行读写。


目前最大支持数据存储量为128Byte.


对应功能使用方式和其它参数获取方式相同;


存在开关模式,128个节点分别可保存两位16进制数据,如下图所示:


5ae2666abf4844dd826a3ff061bbb310.png


控制代码如下所示:

C++代码
m_pDevice->GetRemoteNode("CustomDataConfigurationMode")->SetString("On");//开启CustomData功能(数据为16进制)地址为0-127
m_pDevice->GetRemoteNode("CustomDataSelector")->SetInt(0);//选择CustomData地址0
m_pDevice->GetRemoteNode("CustomData")->SetInt(0x10);//对CustomData地址0写入0x10
bo_int64 CustomData_from_0 = m_pDevice->GetRemoteNode("CustomData")->GetInt();//对CustomData地址0读出0x10
m_pDevice->GetRemoteNode("CustomDataSelector")->SetInt(1);//选择CustomData地址1
m_pDevice->GetRemoteNode("CustomData")->SetInt(0x12);//对CustomData地址1写入0x12 
bo_int64 CustomData_from_1 = m_pDevice->GetRemoteNode("CustomData")->GetInt();//对CustomData地址1读出0x12
m_pDevice->GetRemoteNode("CustomDataSelector")->SetInt(2);//选择CustomData地址2 
m_pDevice->GetRemoteNode("CustomData")->SetInt(0x1E);//对CustomData地址2写入0x1E  
bo_int64 CustomData_from_2 = m_pDevice->GetRemoteNode("CustomData")->GetInt();//对CustomData地址2读出0x1E
C#代码
m_pDevice.GetRemoteNode("CustomDataConfigurationMode ").Value ="On";//开启功能
m_pDevice.GetRemoteNode("CustomDataSelector").Value = 0; //选择CustomData地址0
m_pDevice.GetRemoteNode("CustomData").Value = 0x10; //对CustomData地址0写入0x10
int CustomData_from_0 = Device.GetRemoteNode("CustomData").Value;//对CustomData地址0读取数据
m_pDevice.GetRemoteNode("CustomDataSelector").Value = 1; //选择CustomData地址1
m_pDevice.GetRemoteNode("CustomData").Value = 0x12; //对CustomData地址1写入0x12
int CustomData_from_1 = Device.GetRemoteNode("CustomData").Value;//对CustomData地址1读取数据
m_pDevice.GetRemoteNode("CustomDataSelector").Value = 2; //选择CustomData地址0
m_pDevice.GetRemoteNode("CustomData").Value = 0x1E; //对CustomData地址2写入0x1E
int CustomData_from_2 = Device.GetRemoteNode("CustomData").Value;//对CustomData地址2读取数据

b987330c39404fcb9f33cc8544792ed4.png

目录
相关文章
|
7月前
|
存储 JSON 数据库
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
【C++ 软件设计思路】跨平台应用开发:如何选择合适的格式保存信息
188 0
|
7月前
|
C++
C++程序中的类封装性与信息隐蔽
C++程序中的类封装性与信息隐蔽
78 1
|
3月前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
92 0
|
6月前
|
算法 Java API
在VC++中使用CxImage库读写图像实现像素操作
在VC++中使用CxImage库读写图像实现像素操作
51 0
|
7月前
|
Linux Shell 开发工具
C++ 的 ini 配置文件读写/注释库 inicpp 用法 [ header-file-only ]
这是一个C++库,名为inicpp,用于读写带有注释的INI配置文件,仅包含一个hpp头文件,无需编译,支持C++11及以上版本。该库提供简单的接口,使得操作INI文件变得容易。用户可通过`git clone`从GitHub或Gitee获取库,并通过包含`inicpp.hpp`来使用`inicpp::iniReader`类。示例代码展示了读取、写入配置项以及添加注释的功能,还提供了转换为字符串、双精度和整型的函数。项目遵循MIT许可证,示例代码可在Linux环境下编译运行。
533 0
|
7月前
|
存储 C++ iOS开发
C++文件操作(文本文件的读写+二进制文件的读写)
C++文件操作(文本文件的读写+二进制文件的读写)
|
7月前
|
消息中间件 监控 安全
【C/C++ 程序设计】Linux 进程管理 设计 获取进程信息 策略权衡
【C/C++ 程序设计】Linux 进程管理 设计 获取进程信息 策略权衡
161 0
|
7月前
|
存储 监控 Linux
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
149 0
|
7月前
|
存储 算法 Linux
【C++ 线程管理】深入探索 Linux 系统:如何有效获取和管理线程信息
【C++ 线程管理】深入探索 Linux 系统:如何有效获取和管理线程信息
164 0
|
25天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2