ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#笔记 线扫相机利用串口通信设置曝光

2022-01-16 15:01:29  阅读:258  来源: 互联网

标签:Parity C# 接口 相机 Camera Link 串口 线扫 Com


1. 串口通信

串行接口是一种可以将接收来自CPU并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)即串口按位(bit)发送和接收字节通信方式

 

 

 

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.

标签:Parity,C#,接口,相机,Camera,Link,串口,线扫,Com
来源: https://www.cnblogs.com/Fish0403/p/15513696.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有