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

目录
相关文章
|
11月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1277 27
|
11月前
|
C语言 C++
【实战指南】 C/C++ 枚举转字符串实现
本文介绍了在C/C++中实现枚举转字符串的实用技巧,通过宏定义与统一管理枚举名,提升代码调试效率并减少维护错误。
602 96
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
548 8
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
517 5
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
1449 0
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
418 16
|
SQL Java 测试技术
C#字符串拼接的6种方式及其性能分析对比
在C#编程中字符串拼接是一种常见且基础的操作,广泛应用于各种场景,如动态生成SQL查询、构建日志信息、格式化用户显示内容等。然而,不同的字符串拼接方式在性能和内存使用上可能存在显著差异。今天咱们一起来看看在C#中字符串拼接的常见6种方式及其使用BenchmarkDotNet进行性能分析对比。
478 6
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
500 0
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
442 0