映美精相机软触发

映美精 DFK 41BG02.H分辨率 1280X960最大帧率15

采用C#编程,使用软件触发模式。触发1次,到ImageAvalible事件发生,记录其时间为96毫秒附近波动。

手动计算时间如下:

像素个数:1280 * 960= 1,228,800

RGB格式,1个像素3个Byte来表示,其字节数: 1,228,800 * 3 = 3686400

相机处理后,读出时间1000 / 15 = 66.6666 毫秒

使用千兆网连接,其理论最大速度125MB/s,按理想状态传递

3686400 / 1000 /125 = 29.49 毫秒

总耗费时间合计: 66.67 + 29.49 = 96.16 毫秒

曝光时间可调节,节约几个毫秒。

若测形状尺寸,还是选择黑白相机,传输时间节约22毫秒。

由于第1次接触机器视觉,生怕像素选择小了,结果搞个100万像素的相机。

此相机发热,用手摸,感觉有点烫手。按道理,触发模式,相机不用总是处理数据,它在发热为哪般?

 

C#代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TIS.Imaging;
using System.Diagnostics;

namespace 相机
{
    public partial class Form1 : Form
    {

        ICImagingControl ic;
        VCDButtonProperty SoftTrigger;
        VCDPropertyItem TriggerMode;

        Stopwatch s;
        
        
        public Form1()
        {
            InitializeComponent();

            //debug
            s = new Stopwatch();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //ic 初始化

            initCamera();

       }

        private void icImagingControl1_ImageAvailable(object sender, TIS.Imaging.ICImagingControl.ImageAvailableEventArgs e)
        {
            //图像Ready


            //停止计时
            s.Stop();
            //显示流逝时间
            updateLabel1Delegate label1Update = new updateLabel1Delegate(updateLabel1);
            this.Invoke(label1Update);
            
            //复位计时
            s.Reset();
            //传递bitmap到PictureBox
            pic.Image = ic.ImageActiveBuffer.Bitmap;


        }

        private void button1_Click(object sender, EventArgs e)
        {

            //捕捉按钮

            //开始计时
           s.Start();

            //按软触发按钮
            SoftTrigger.Push();
            


        }

        private void button2_Click(object sender, EventArgs e)
        {
            //退出按钮

            ic.LiveStop();
            Close();
        }

        //代理更新流逝时间
        private delegate void updateLabel1Delegate();
        private  void updateLabel1()
        {

            label1.Text = "耗时:" + s.ElapsedMilliseconds.ToString() + "毫秒";


        }

        private void initCamera()
        {
            //初始化相机
            try
            {
                ic = new ICImagingControl();

                //Device dev = ic.Devices[0];
                //设备名
                ic.Device = "DFx 41BG02.H";

                //视频格式
                ic.VideoFormat = "BY8 (1280x960)";
                //帧速率
                ic.DeviceFrameRate = 15.0F;
                //多线程
                ic.ImageAvailableExecutionMode = EventExecutionMode.MultiThreaded;
                //连续捕捉
                ic.LiveCaptureContinuous = true;
                //live显示
                ic.LiveDisplay = false;
                //触发模式
                ic.DeviceTrigger = true;
                //缓冲区数量
                //ic.ImageActiveBuffer = 1;

                //事件
                ic.DeviceLost += new System.EventHandler(deviceUnplug);
                ic.ImageAvailable += new System.EventHandler(icImagingControl1_ImageAvailable);
                
                //软触发
                TriggerMode = ic.VCDPropertyItems.FindItem(VCDIDs.VCDID_TriggerMode);
                SoftTrigger = (VCDButtonProperty)TriggerMode.Elements.FindInterface("{FDB4003C-552C-4FAA-B87B-42E888D54147}" + ":" + VCDIDs.VCDInterface_Button);


                //启动流
                ic.LiveStart();
            }
            catch (Exception)
            {


                MessageBox.Show("相机初始化失败。");
            }

        }


        private void deviceUnplug(Object sender, TIS.Imaging.ICImagingControl.DeviceLostEventArgs e)
        {
            //相机拔出
            MessageBox.Show("相机丢失。");


        }


        //end


    }
}


 

你可能感兴趣的:(PLC自动化)