【工控】线扫相机小结 第四篇
背景
这一片主要是对第三篇继续补充。话说上一篇讲到了两种模式的切换,上一篇还遗留了一个Bug,在这一篇里进行订正!
代码回顾
/// <summary>/// 其实就是打开触发/// </summary>void SetLineSacanWorkMode(){-----首先设置为帧触发int result = device.Parameters.SetEnumValueByString("ScanMode", "FrameScar");if (result != MvError.MV_OK){ShowErrorMsg("Set ScanMode Fail!", result);}//----------------打开帧触发result = device.Parameters.SetBoolValue("FrameTriggerMode", true);if (result != MvError.MV_OK){ShowErrorMsg("Set FrameTriggerMode Fail!", result);}//帧触发:触发源result = device.Parameters.SetEnumValueByString("FrameTriggerSource", "Software");if (result != MvError.MV_OK){ShowErrorMsg("Set FrameTriggerSource Fail!", result);}result = MvError.MV_OK;//----------------打开行触发result = device.Parameters.SetBoolValue("LineTriggerMode", true);if (result != MvError.MV_OK){ShowErrorMsg("Set LineTriggerMode Fail!", result);}//行触发:触发源result = device.Parameters.SetEnumValueByString("LineTriggerSource", "FrequencyConverter");if (result != MvError.MV_OK){ShowErrorMsg("Set LineTriggerSource Fail!", result);} }-------------------------------------------------------------------------------------------------------------------------void SetLineSacanDebugMode(){//-----首先设置为帧触发int result = device.Parameters.SetEnumValueByString("ScanMode", "FrameScar");if (result != MvError.MV_OK){ShowErrorMsg("Set ScanMode Fail!", result);}result = MvError.MV_OK;//----------------关闭帧触发//result = device.Parameters.SetEnumValueByString("TriggerSelector", "FrameBurstStart");result = device.Parameters.SetBoolValue("FrameTriggerMode", false);if (result != MvError.MV_OK){ShowErrorMsg("Set FrameTriggerMode Fail!", result);}//----------------关闭行触发result = device.Parameters.SetBoolValue("LineTriggerMode", false);if (result != MvError.MV_OK){ShowErrorMsg("Set LineTriggerMode Fail!", result);}}
踩坑1
这样会带来一个bug,第二次设置 ScanMode
的时候会报错!
int result = device.Parameters.SetEnumValueByString("ScanMode", "FrameScar");
这是因为,有的参数,在相机已经开始采集的情况下,是无法设置成功的。比如这个 ScanMode
。
所以,切换设置的时候,先停止采集,然后再开始采集!
void LineSacanDebugSet(bool onoff){if (onoff == true){//先停止采集StopGrab();SetLineSacanDebugMode();//开始采集StartGrab();}else{//先停止采集StopGrab();SetLineSacanWorkMode();//开始采集StartGrab();}LineSacanDebugFlag = onoff;}
于是我再函数的外面增加了停止采集和开始采集。
这样改动之后,其实还解决了一个bug!
比如我现在是调试模式,此时帧触发和行触发都关闭了,相机处于图像不停发生送的状态 (详情参见《线扫相机小结 第二篇》)
此时如果直接切到工作模式,由于图像接收线程一直被触发,非常快,而SetLineSacanWorkMode()这个函数的调用时需要时间的。
所以会出现一些冲突:
比如,我此时 LineSacanDebugFlag 由true切换为false(调试模式切换为工作模式)但是循环还是处于调试模式的循环中。
这样就进入了不该进入的分支,应为此时其实还没进行帧促发。
所以先停止采集才是最优解!
踩坑2
编码器促发是可以设置方向的,正方向和反方向,已经任意方向。
你的运动扫描方向,要和这个编码器方向设置一致,不然会以为你的触发出问题了。
我就是因为方向设置反了,还以为第一次软触发失效了。
相关文章:

【工控】线扫相机小结 第四篇
背景 这一片主要是对第三篇继续补充。话说上一篇讲到了两种模式的切换,上一篇还遗留了一个Bug,在这一篇里进行订正! 代码回顾 /// <summary>/// 其实就是打开触发/// </summary>void SetLineSacanWorkMode(){-----首先设置为帧…...
亲测解决Unpack operator in subscript requires Python 3.11 or newer
这个问题是在小虎想提前定义一个list,然后作为index list来调用另一个list里面的变量出现的问题。 环境 Ubuntu 22.04 + python 3.10 故障代码示例 NoneList = [None] * opt.spatial_dims TargetMask = Target[i] == torch.arange(1...

数据结构 ——— 堆排序算法的实现
目录 前言 向下调整算法(默认建大堆) 堆排序算法的实现(默认升序) 前言 在之前几章学习了如何用向上调整算法和向下调整算法对数组进行建大/小堆数据结构 ——— 向上/向下调整算法将数组调整为升/降序_对数组进行降序排序代码…...

On-Chip-Network之Topology
片上网络拓扑决定了网络中节点和通道之间的物理布局和连接。拓扑对整体网络性价比的影响是巨大的。拓扑决定了消息 必须经过的跳数(或路由器)以及跳数之间的互连长度,从而显著影响网络延迟。由于经过路由器和链路会产生功耗,因此 …...

2024年11月21日Github流行趋势
项目名称:twenty 项目维护者:charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍:正在构建一个由社区支持的现代化Salesforce替代品。项目star数:21,798项目fork数:2,347 项目名称:p…...
第三十八章 IOT 通信协议MQTT协议实现的中间件EMQXDocker安装与验证指南
EMQX概述以及Docker安装与验证指南 一、EMQX概述 EMQX(原名EMQ X),是一款完全开源、高度可伸缩、高可用的分布式MQTT消息服务器。它不仅支持MQTT协议,还兼容CoAP/LwM2M等多种物联网协议,是5G时代万物互联的重要消息引擎。这款软件由杭州映云科技有限公司开发,基于Erlan…...

Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
目录 安装包 flume的部署 负载均衡测试 故障恢复 安装包 在这里给大家准备好了flume的安装包 通过网盘分享的文件:apache-flume-1.9.0-bin.tar.gz 链接: https://pan.baidu.com/s/1DXMA4PxdDtUQeMB4J62xoQ 提取码: euz7 --来自百度网盘超级会员v4的分享 ----…...
CodiMD导出pdf失败或无中文
CodiMD导出pdf失败,弹出文件保存窗口,有个pdf文件能下载,但是保存的时候提示“网站出问题了”,实际到服务器上看会发现docker崩溃了。 解决办法: 使用最新的CodiMD镜像,如nabo.codimd.dev/hackmdio/hackmd:…...

数字图像处理(2):Verilog基础语法
(1)Verilog常见数据类型: reg型、wire型、integer型、parameter型 (2)Verilog 常见进制:二进制(b或B)、十进制(d或D)、八进制(o或O)、…...

Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析:…...

爬虫重定向问题解决
一,问题 做爬虫时会遇到强制重定向的链接,此时可以手动获取重定向后的链接 如下图情况 第二个链接是目标要抓取的,但它是第一个链接重定向过去的,第一个链接接口状态也是302 二,解决方法 请求第一个链接࿰…...

Java技术复习提升 10异常
10 异常 10.1异常介绍及分类 异常捕获 选中后alttabt->选中try-catch 异常就是程序执行中不正常的情况 注意语法和逻辑错误并不是异常 异常分类有两种 error和exception error是错误 虚拟机无法解决的严重问题 exception是其他因为编程错误或者外在因素导致的一般性的问…...

真题-桂城2022年五年级
目录 GC.2022.五年级.01.拍7 输入数据 1 输出数据 1 GC.2022.五年级.02.硬币 输入数据 1 输出数据 1 答案: GC.2022.五年级.03.次大公约数 输入数据 1 输出数据 1 GC.2022.五年级.04.显示器 输入数据 1 输出数据 1 GC.2022.五年级.05.数对 输入数据 1 输…...

android 使用MediaPlayer实现音乐播放--权限请求
在Android应用中,获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新,从Android 6.0(API级别23)开始,应用需要动态请求权限,而到了android 13以上需要的权限又做了进一步…...
Web开发:ORM框架之使用Freesql的DbFrist封装常见功能
一、调用 public class Program {static string connectionstring "连接字符串(数据库名)";static void Main(string[] args){//1.连接数据库var freesql new FreeSqlBuilder().UseConnectionString(DataType.SqlServer, connectionstring…...

【多线程-第一天-多线程的执行原理-多线程的优缺点-主线程 Objective-C语言】
一、多线程的执行原理 1.单任务操作系统:同一时间只能执行一个任务 多任务操作系统:同一时间可以执行多个任务 比如,我可以一边听着酷狗,一边聊着QQ, 在单任务的操作系统里边,只有进程,没有线程, 单任务操作系统,CPU必须执行完一个任务,才能执行第二个任务, 多任…...

SQL基础语法介绍-基于MySQL
文章目录 一、SQL分类二、SQL语法1.数据库字段类型1.1.数值类型1.2 字符类型1.3 日期类型 2.字段约束2.1约束介绍2.2 非空约束(not null)2.3 唯一约束(unique)2.4 主键约束(primary key)2.5 自增长主键2.6 …...

一分钟学习数据安全——数据安全风险的系统化应对思路
数据是组织的重要资产,未经授权的数据访问可能导致数据泄露、数据篡改、隐私侵犯和合规风险等问题。企业可以通过数据访问控制来提高信息系统在数据全生命周期管理中的安全性。企业可以引入IAM系统,来控制身份来管理权限。通过对用户访问权限的管理和合适…...
端口port常识
端口(Port)用于区分不同的服务或进程。在网络通信中,每个运行在计算机上的进程都会通过一个端口来与其他计算机上的进程进行通信。以下是一些关于端口和使用常识的信息: 端口号范围: 0-1023:这些被称为“知…...
【Oracle实战】文章导读
【Oracle基础】 【实战】Oracle基础之单机安装-01 Windows 2016 Oracle 11gR2【实战】Oracle基础之单机安装-02 Windows 2016 Oracle 12cR2【实战】Oracle基础之单机安装-03 CentOS 7.9 Oracle 11gR2【实战】Oracle基础之单机安装&#x…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...