C#笔记 线扫相机利用串口通信设置曝光
1. 串口通信
using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports; namespace portDemo
{
public partial class Form1 : Form
{
public SerialPort Com;
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
Com = new SerialPort();
cmbBaudRate.SelectedIndex = 6;
cmbDataBits.SelectedIndex = 3;
cmbStopBits.SelectedIndex = 1;
cmbParity.SelectedIndex = 0;
}
/// <summary>
/// 检索串口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSearchCom_Click(object sender, EventArgs e)
{
string[] PortNames = SerialPort.GetPortNames();
if (PortNames.Length != 0)
{
for (int i = 0; i < PortNames.Length; i++)
{
cmbPortName.Items.Add(PortNames[i]);
}
cmbPortName.SelectedIndex = 0;
}
else
MessageBox.Show("No Ports!");
}
/// <summary>
/// 打开串口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpenCom_Click(object sender, EventArgs e)
{
try
{
Com.PortName = cmbPortName.Text;
Com.BaudRate = int.Parse(cmbBaudRate.Text);
Com.DataBits = int.Parse(cmbDataBits.Text);
switch (cmbStopBits.Text)
{
case "None":
Com.StopBits = StopBits.None;
break;
case "One":
Com.StopBits = StopBits.One;
break;
case "Two":
Com.StopBits = StopBits.Two;
break;
case "OnePointFive":
Com.StopBits = StopBits.OnePointFive;
break;
}
switch (cmbParity.Text)
{
case "None":
Com.Parity = Parity.None;
break;
case "Even":
Com.Parity = Parity.Even;
break;
case "Odd":
Com.Parity = Parity.Odd;
break;
case "Space":
Com.Parity = Parity.None;
break;
case "Mark":
Com.Parity = Parity.None;
break;
}
Com.Open(); new Task(() =>
{
while (true)
{
RecieveData();
}
}).Start();
}
catch (Exception ex)
{
MessageBox.Show("打开串口失败!");
}
}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, EventArgs e)
{
if (Com.IsOpen)
{
Com.Write(textBox2.Text);
}
textBox1.AppendText(Com.PortName + "发送:" + textBox2.Text + "\r\n");
} /// <summary>
/// 接收数据
/// </summary>
private void RecieveData()
{
// 查询串口中目前保存了多少数据
int n = Com.BytesToRead; // 读取数据
byte[] buf = new byte[n];
Com.Read(buf, 0, n);
Com.Encoding = Encoding.GetEncoding("GB2312"); // 打印数据
if (buf.Length > 0)
{
string str = Encoding.Default.GetString(buf);
if (this.textBox1.InvokeRequired)
{
this.Invoke(new Action(delegate{ textBox1.AppendText(Com.PortName + "接收:" + str + "\r\n"); }));
}
else
{
textBox1.AppendText(Com.PortName + "接收:" + str + "\r\n");
}
} } }
}
2. 线扫相机
2.1 Camera Link接口
工业相机的数字接口主要包括以下几类:Camera Link接口、IEEE 1394接口、USB接口、网络接口、CoaXPress接口。Camera Link接口是专门针对工业相机(camera)的特殊应用需求(图像的数据量大、带宽要求高)而研发出来的,传输速度快,这也正是Camera Link接口最主要的优点之一。根据相机实际带宽需求的不同,Camera Link采集卡从传输速度上也可以分为以下四类(带宽依次增加,且向下兼容):Base(2.0Gbit/S 即255MB/s)、Medium(4.8Gbit/S即610MB/S)、Full(5.4Gbit/S @ 85MHZ即680MB/s)、Deca(6.8Gbit/S即850MB/S),从外观上看不出它们的区别,因为提升速度主要是通过增加内部集成的芯片模块来实现的。主要的差别是: 只具有Base功能的采集卡一般只有一个Camera Link接口,而其他的至少包含两个。
使用Camera Link接口的工业相机还具有一个特点,那就是相机生产商一般不提供该相机的使用接口(例如相机自带的图像采集软件,以及相应的SDK等),这是因为:Camera Link接口的工业相机和其他接口相机不同,它的图像采集、处理等软件算法工作主要在Camera Link采集卡上来完成,相机厂商主要只负责硬件这一部分的工作。换句话说,对于Camera Link接口的工业相机来说,这个相机在物理上是被硬生生拆成了两部分,其中一部分以采集卡的形式被安装在主机电脑上了。这样的好处是:如果你对某款Camera Link采集卡的编程比较熟悉,那么世界上任何使用该接口的相机你都可以很快上手。
2.2 曝光参数
网口相机的曝光参数如之前的海康相机一般,利用pMyCamera.MV_CC_SetEnumValue_NET即可。线扫相机一般需要通过自己的软件设置曝光,以e2v相机为例,e2v相机通过comcam软件设置曝光,打开comcam软件,连接Com口,选择One external trigger with exteral exposure time工作模式,让曝光受外部控制。然后依据说明书上的指令,用串口程序连接Com口,发送指令,“t exp 600”可将曝光设置为60.
C#笔记 线扫相机利用串口通信设置曝光的更多相关文章
- DALSA网口线扫相机SDK开发详解例程(C#版)
首先吐槽一句,官方的demos写的真的不好,坑爹啊.对于小白来说,开发官方demos为我所用太难了.为什么呢?因为它Dalsa的DALSA.SaperaLT.SapClassBasic.dll中,不仅 ...
- VisionPro连接Dalsa线扫相机
1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...
- STM32嵌入式开发学习笔记(六):串口通信(上)
本文我们将了解STM32与外部设备通过串口通信的方式. 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平.传输层,通信前要发RTS,CT ...
- STM32嵌入式开发学习笔记(七):串口通信(下)
下面我们进行几个串口通信的实际应用. 实验一:发信实验,让开发板通过串口向电脑发送信息: #include <stdio.h> #include <stm32f10x.h> # ...
- Dalsa线扫相机SDK开发-小试牛刀(1)
拿到了dalsa相机,可以用Sapera软件配置相机,进行图像采集.但是自己开发的话就得撸起袖子写代码了,查了两篇不错的博文,作为指导. Sapera帮助文档 - <好好先生>专栏 - 博 ...
- Dalsa线扫相机SDK下载和安装
1.首先去官方网站下载SDK Support Downloads - Teledyne DALSA http://www.teledynedalsa.com/imaging/support/downl ...
- Dalsa线扫相机配置-一台工控机同时连接多个GigE相机
如图,我强悍的工控机,有六个网口. 实际用的时候连了多台相机,为了偷懒我就把六个网口的地址分别设为192.168.0.1~192.168.0.6,以为相机的IP只要设在192.168.0这个网段然后随 ...
- [转]C#串口通信 SerialPort类
本文转自:https://blog.csdn.net/weixin_41415541/article/details/80921956 因为公司项目需要将USB扫码枪改为串口扫码枪,串口扫码的好处在于 ...
- winform SerialPort串口通信问题
一.串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串 ...
- Arduino和C51之串口通信
技术:51单片机.Arduino.串口通信 概述 本文主要讲解串口通信技术的使用方法,并通过串口点灯实验介绍了51单片机和Arduino串口的使用,为初学者学习串口知识提供帮助 详细 代码下载:h ...
随机推荐
- docker 应用篇————docker开篇[一]
前言 因为最近看了一些docker 底层,然后希望把docker应用先编写出来,然后进行细节篇讲解,比如说docker 的底层是如何实现的之类的话题. 正文 docker 这东西怎么说呢?有一些东西需 ...
- MMDeploy部署实战系列【第六章】:将编译好的MMdeploy导入到自己的项目中 (C++)
MMDeploy部署实战系列[第六章]:将编译好的MMdeploy导入到自己的项目中 (C++) 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给 ...
- TypeScript 中类的理解?应用场景?
一.是什么 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础 ❝ 类是一种用户定义的引用数据类型,也称类类型 ❞ 传统的面向对象语 ...
- 离线语音识别,vosk,离线流式实时静音噪声监测,支持多语言开发python c++ c# java等
#!/usr/bin/env python3 from vosk import Model, KaldiRecognizer, SetLogLevel import sys import os imp ...
- 阿里云服务网格 ASM 正式发布商业化版本
简介:为了更好地满足企业日益加深的大规模使用服务网格产品.服务多语言互通.服务精细治理等需求,2022 年 4 月 1 日起,阿里云服务网格产品 ASM 正式发布商业化版本,为企业在生产环境下大规模 ...
- 【ClickHouse 技术系列】- ClickHouse 聚合函数和聚合状态
简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被国 ...
- dotnet 6 在 System.Text.Json 使用 source generation 源代码生成提升 JSON 序列化性能
这是一个在 dotnet 6 早就引入的功能,此功能的使用方法能简单,提升的效果也很棒.使用的时候需要将 Json 序列化工具类换成 dotnet 运行时自带的 System.Text.Json 进行 ...
- 2019-11-29-C#-如何写-DEBUG-输出
title author date CreateTime categories C# 如何写 DEBUG 输出 lindexi 2019-11-29 08:28:35 +0800 2018-2-13 ...
- 04 Xpath_[实例]爬取maoyan
目录 Xpath lxml库的安装和使用 提取的内容 代码 生成的csv 下载的图片 参考文档 Xpath lxml库的安装和使用 提取的内容 随意选取的一段 节点包含的影片信息,如下所示: < ...
- Critical Expression
什么是Critical Expression 所谓Critical Expression就是一个表达式依赖的值,必须出现在这个表达式前面.比如: times (label-$) db 0 ;times ...