MIL开发实践(4)——E2v相机参数

article/2025/10/13 21:48:04

目录

  • 前言
  • 效果图
  • 正文
    • 连接串口
    • 向串口写入命令
    • 举例设置的参数
      • ComBox类型
      • Int类型
  • 总结

前言

这篇文章的主要内容是完成对相机参数这部分的配置。因为这个相机参数这个接口的特殊原因,只能采用串口的形式才能对相机的参数进行设置,所以,需要具备一定的连接串口并使用串口发送信息的知识。话不多说,看代码~

效果图

在这里插入图片描述
因为这里的相机没有加光源和镜头,所以整体的效果看起来就是这样。

正文

连接串口

首先,我们当相机创建成功时,我们需要同时也连接上串口,从而让程序能够自动读取硬件上的参数,从而显示出正确的参数。串口的初始化如下:

void MDeviceE2v::InitSerialConfigure()
{m_pSerial->setPortName("COM3");if(m_pSerial->open(QIODevice::ReadWrite)){qint32 baudrate = 9600;m_pSerial->setBaudRate(baudrate);m_pSerial->setDataBits(QSerialPort::Data8);m_pSerial->setParity(QSerialPort::NoParity);m_pSerial->setStopBits(QSerialPort::OneStop);m_pSerial->setFlowControl(QSerialPort::NoFlowControl);}else{QMessageBox::information(NULL, "Error", "The Serial open fail.");qDebug()<<"The Serial open fail";}
}

连接串口,我们需要知道的参数有端口号,波特率,数据位,校验位,停止位。这就需要你提前知道了,可以从供应商那边知道。去网上找有很多这种demo,下一个下来就可以知道大概是怎么回事了。

向串口写入命令

注意,我们向串口写入指令要边写然后马上就读,不然,容易出现读错误的情况,我这里把写命令读串口数据封装成了一个接口函数,如下:

//向串口写命令
QString MDeviceE2v::WriteCmdToSerial(QString cmd)
{//qDebug()<<"MDeviceE2v::WriteCmdToSerial cmd"<<cmd;QByteArray bytes;bytes= (QByteArray)(cmd.toStdString().c_str());bytes.append("\r");QString cmd2 = (QString)bytes;bool reset = true;
RESET_CMD:qint32 nRet = -1;nRet = m_pSerial->write(bytes);//nRet返回实际写入的字节数QByteArray response_data;if(m_pSerial->waitForBytesWritten(3000)){while(m_pSerial->waitForReadyRead(500)){response_data += m_pSerial->readAll();if(response_data.size()>0){reset = false;}}}if(reset==true&&(nRet!=0)){reset = false;goto RESET_CMD;}QString response_dataStr;response_dataStr = QString::fromLocal8Bit(response_data);return response_dataStr;
}
  1. 接下来对这个函数进行一定的解释,首先,我需要对这个命令做一定的处理,因为文档要求传入的命令需要结尾有一个\r。不然,串口是无法识别命令的,所以,你一定要看清楚文档中的命令,有可能要求多一个回车符,多有可能,仔细一点总是没错的。不然,你会浪费很多时间去查问题。
  2. 然后,我就需要使用write这个函数把命令写入串口之中,然后,通过waitForBytesWrittenwaitForReadyRead这两个命令,产生一定的延时,然后,使用read去读取串口的命令。
  3. 最后,最好判断一下是否读到了数据,如果没读到的话,使用goto再写一次,读一次。确保读到你要的命令。

举例设置的参数

我这里基本把文档中给出的参数都给设置了,首先,先声明一下,因为无法得到每个参数前面的名字,所以,我使用让软件去读取xml文档,从而得到我想要的参数的名字。然后,里面的数据再是使用串口去读取。关于读取xml文档,将xml文档解析成不同的节点,就需要你自己去查询资料了,我这里里就不赘述了。我只列举一下,我设置了两个参数。先上代码:

ComBox类型

QString MDeviceE2v::GetOutputMode()
{QString cmd;cmd = "r mode\n";QString OutputMode  = WriteCmdToSerial(cmd);qint32 outputModeInt = GetRightNum(OutputMode);switch (outputModeInt) {case 0:return "Medium 4 Outputs 8bits";break;case 1:return "Medium 4 Outputs 12bits";break;case 2:return "Full 8 Outputs 8bits";break;case 3:return "Full Plus 10 Outputs 8bits";break;case 4:return "Medium 4 Outputs 10bits";break;case 5:return "Base 2 Outputs 8bits";break;case 6:return "Base 2 Outputs 10bits";break;case 7:return "Base 2 Outputs 12bits";break;}return "OutputMode Error";
}void MDeviceE2v::SetOutputMode(QString OutputMode)
{qDebug()<<"OutputMode"<<OutputMode;QString cmd;if(OutputMode=="Medium 4 Outputs 8bits"){cmd = "w mode 0\n";}else if(OutputMode=="Medium 4 Outputs 10bits"){cmd = "w mode 4\n";}else if(OutputMode=="Medium 4 Outputs 12bits"){cmd = "w mode 1\n";}else if(OutputMode=="Base 2 Outputs 8bits"){cmd = "w mode 5\n";}else if(OutputMode=="Base 2 Outputs 10bits"){cmd = "w mode 6\n";}else if(OutputMode =="Base 2 Outputs 12bits"){cmd = "w mode 7\n";}else if(OutputMode =="Full 8 Outputs 8bits"){cmd = "w mode 2\n";}else if(OutputMode =="Full Plus 10 Outputs 8bits"){cmd = "w mode 3\n";}else{cmd ="OutputMode error cmd";}QString response_data  = WriteCmdToSerial(cmd);if(!response_data.contains("Ok")){qDebug()<<"Error SetOutputMode fail";}
}

这是第一种,你需要写入命令,然后,它的返回值只会是单纯的一个数字,你需要进行一定的转换,从而得到你要的字符串,基本上对这种类型的参数都是这样做的。上面的GetRightNum这个函数是将得到的字符串做一定的分割,从而得到前面的数字。不然,它的字符串还是比较复杂的,没必要每个参数都写那么同样的几行代码,封装一下即可。

Int类型

这种类型就是使用具体的数字去控制的,这个相对于上面会简单一点,应该不难理解。接下来,上代码:

int   MDeviceE2v::GetGain()
{QString cmd;cmd = "r gain\n";QString Gain  = WriteCmdToSerial(cmd);int GainInt = GetRightNum(Gain);return GainInt;
}void   MDeviceE2v::SetGain(int Gain)
{qDebug()<<"SetGain"<<Gain;QString cmd;QString Gain2 = QString::number(Gain);cmd = "w gain "+Gain2;cmd = cmd.append('\n');qDebug()<<"SetGain cmd"<<cmd;QString response_data  = WriteCmdToSerial(cmd);qDebug()<<"SensorMode response_data"<<response_data;if(!response_data.contains("Ok")){qDebug()<<"Error SetGain fail";}
}

上面就是我列举的两种类型了,其实是还有Command型,和Boolean型,但Command型我没使用到,Boolean被我转换成ComBox型了,这就看你自己的操作了。

总结

关于参数的设置基本就完成了,有可能会遇到一些坑,但很多坑我都在文章中讲了,你可能需要细心一点看一下,其他遇到的,百度或谷歌也能解决,不过,最好还是看文档。
如果有需要可以去看看我的另外三篇文章。感谢您的观看~

MIL开发实践(1)——开发环境的设置
MIL开发实践(2)——MIL实时采图
MIL开发实践(3)——MIL触发采图

若有错误,欢迎指出,感谢~


http://chatgpt.dhexx.cn/article/Km6cVFwi.shtml

相关文章

机械师怎么打开计算机管理,机械师创物者-R笔记本智能控制中心使用教程

②在官网“驱动下载”页面下选择“MACHENIKE-R”对应的配置驱动,找到“控制中心驱动”选项,点击“立即下载”。 ③ 下载完成后,对zip压缩包进行解压操作,双击文件夹中的“UniwillService.exe”开始安装。 ④ 软件的安装流程十分简单,只需要点击进程中的“install”选项开始…

[基础]tfcenter的安装和启动

文章系列 tfcenter的安装和启动 tfcenter开启端口映射功能 tfcenter开启本地文件功能 tfcenter开启Webdav文件服务 tfcenter开启http代理功能 tfcenter开启socks5代理功能 tfcenter搭建个人服务器 tfcenter支持端口映射、本地文件管理、Webdav文件服务、http代理和socks…

redis简单介绍

&#xff08;一&#xff09;redis简介 what: Redis是一个开源的、基于内存的缓存数据库 Redis&#xff1a;支持每秒十几万此的读/写操作 场景&#xff1a;由于一般的系统任务中通常不会存在高并发的情况&#xff0c;所以这样看起来并没有什么问题&#xff0c;可是一旦涉及大…

Mac端口5000被ControlCe占用问题解决方法

问题 Mac上运行flask应用时提示端口5000已被占用。 查看占用情况&#xff1a; $ lsof -i:5000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ControlCe 70052 jiaqi 24u IPv4 0xa620acf2cebbe09f 0t0 TCP *:commplex-main (LISTEN) C…

android 控制中心os,控制中心Control Center--IOS 11

控制中心Control Center--IOS 11 介绍 控制中心Control Center--IOS 11 ?控制中心Control Center--IOS 11便捷操控手机&#xff0c;一键访问相机&#xff0c;闹钟等功能和应用&#xff0c;便捷调控音量等 控制中心Control Center--IOS 11完美适配三星&#xff0c;华为&#xf…

触摸板失效,fn快捷键不显示,神舟control center3.0无法打开等问题重装驱动

神舟电脑 Hasee -- 服务与支持 在上面的网站找到自己电脑型号的驱动&#xff0c;然后找到控制中心或者热键的驱动&#xff0c;我的是控制中心 下载解压好之后进行安装 安装好之后找到这个路径&#xff0c;我是把里面的东西都安装了一遍&#xff0c;安装好后他自动打开是英文的…

EMC ControlCenter 6.1 install update bandle 9 failed

https://community.emc.com/message/553651#553651 问题是&#xff1a; Aleksandr 2011-7-5 上午6:25 I install update bandle 9 on the ControlCenter 6.1 but instal failed with this error: StorageScope Repository Pre-upgrade failed.Please review log: sys password…

Javalin:一个轻量的 Web Framework

说起 Java 语言下的 Web 框架那就非 Spring Framework 不可了&#xff0c;但是今天在和别人在聊天的过程中发现了一个新奇的项目 Javalin。Javalin 是一个轻量的 Web 框架。支持 WebSocket, HTTP2 和异步请求。简单的看了一下官方的说明文档&#xff0c;确实非常轻量&#xff0…

ControlCenter and Dataviewer

Hardware and cable assignment Download: https://sensirion.com/products/sensor-evaluation/control-center/ logging address: “File” --> “Setting” --> “Output Directory” data folder: “File” --> “Open Data Log Folder” Plot the data …

战神 控制中心 controlcenter安装

前言 啊啊啊啊&#xff0c;终于解决问题了&#xff0c;希望对正在看的您有所帮助&#xff01; 首先说下背景&#xff0c;本人使用的是战神Z7-CT7NA&#xff0c;昨天重装了win10的系统&#xff0c;在官网 战神电脑驱动下载 下载对应的电脑驱动&#xff0c;安装了&#xff0c;可…

神舟战神笔记本Controlcenter3.0安装教程,解决osd only

把Controlcenter误删&#xff0c;安装不成供&#xff0c;且屡次出现“osd only"&#xff0c;折腾了一下午&#xff0c;真的是绝绝子&#xff0c;借鉴了zhihu大佬和小破站下面的神人评论&#xff0c;现在将解决方法总结如下&#xff0c;希望帮助你们少走弯路&#xff01; …

AHB

一、信号定义 以下是有多个master时由arbiter产生的信号&#xff0c;一般在one master - one slave project中用不上&#xff1b; 判断跨1k: 当地址ADDR_plus_burst[10:0] 的bit10为1时&#xff0c;即ADDR_plus_burst[10]1, cross_1k_byte1&#xff1b; 判断跨4k:当地址ADDR_p…

一文学习 AHB ram 验证

文章目录 前言面试答案1. `uvm_do()` 的源代码零、计算机体系结构中的memory1. memory中的大小端存储2. 内存对齐的理解2.1 什么是内存对齐2.2 为什么要内存对齐2.3 怎么进行内存对齐一、搭建验证框架1. code 顺序2. coverage coding二、搭建设计框架1. config 的脉络2. vif 的…

AHB-SRAM简单设计之总线控制单元 ahb_slave_if.v

前言 这部分的代码在最后&#xff0c;本来打算刚开始就直接上代码&#xff0c;可是200多行&#xff0c;有点占篇幅。我们就先分析下这部分&#xff01; 推荐一篇硕士论文&#xff0c;可以自行搜索下载&#xff0c;或点击免费下载&#xff1a;基于AHB总线SRAM控制器 的设计及优…

AMBA5 AHB协议规范(AHB5,AHB-Lite)中文版-第六章 数据总线

第六章 数据总线 本章描述了数据总线。它包含以下部分&#xff1a; – 数据总线 on page 6-60. – 大小端 on page 6-61. – 数据总线宽度 on page 6-65. 6.1 Data buses 实现AHB系统需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位&#xff0c;但可以按照…

[接口-AMBA-AHB] AHB总线协议

一、典型AMBA系统 AHB总线的强大之处在于它可以将微控制器CPU、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等连接起来构成一个独立的完成SOC系统&#xff0c;不仅如此&#xff0c;还可以通过AHB-APB桥来连接APB总线系统。 AHB可以成为一…

基于AHB的SRAM设计

基于AHB的SRAM设计 一、描述 作为系统的缓存&#xff1b;SRAM存储体由MeMery complier生成&#xff1b;项目完成SRAM控制器的设计&#xff1b;SRAM作为AHB Slave的形式存在&#xff1b; 二、特性 支持8位&#xff0c;16位和32位的SRAM数据读写操作&#xff1b;支持SRAM的单…

AHB lite协议

文章目录 概述特点AHB的组成单个master的AHB lite结构多个master的AHB lite结构结构1结构2 AHB lite基本信号1.系统信号2.master3.slave信号4.译码器信号5.多路器 信号详细解释HSIZE[2:0]HTRANS[1:0]HBURST[2:0]HREADY与HREADYOUTHRESP AHB基本传输1.没有等待状态的单个传输2.有…

【读书笔记】AMBA 2 AHB、AMBA 3 AHB(AHB_Lite)和AMBA 5 AHB协议比较

1、牛客算是一个Verilog宝藏刷题网站了&#xff0c;网站提供在线仿真环境&#xff0c;不用自己找题&#xff08;点击直达&#xff09;&#xff0c;<刷题记录>专栏&#xff0c;持续打卡中… 2、官方手册&#xff1a;AMBA系列官方协议规范文档&#xff0c;点击下载 更详细的…

Ahb2ApbBridge

一、设计前需注意 &#xff08;1&#xff09;要做总线&#xff0c;协议是关键&#xff0c;每个控制信号与输入输出的时序一定要搞清楚&#xff0c;直接看amba官方spec&#xff0c;链接已贴出http://pan.baidu.com/s/1gfwxTWB。 &#xff08;2&#xff09;Ahb2Apb桥作为逻辑连接…