VisionPro串口、网口通讯

1.串口通讯

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;//串口的命名空间
using Cognex.VisionPro;
using System.IO;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.Caliper;
using Cognex.VisionPro.PMAlign;

namespace _07串口通讯
{
    class Vision
    {
        CogRecordDisplay cogRecord;//传过来的显示控件
        //声明图像采集工具
        CogAcqFifoTool fifoTool;
        //声明TooBlock工具
        CogToolBlock cogToolBlock;
        //串口通信
        SerialPort serialData;
        //是否有串口通讯(若有则可以开启实时)
        bool flag = false;
        //卡尺类型
        CogCaliperTool cogCaliper;//卡一
        CogCaliperTool cogCaliper1;//卡二
        //处理实时和显示效果图的冲突
        bool flag1 = false;
        //
        ICogImage cogImage;
        //textBox控件
        TextBox textBox1C;
        //构造函数
        public Vision(CogRecordDisplay cogRecordDisplay,TextBox textBox1)
        {
            cogRecord = cogRecordDisplay;
            textBox1C = textBox1;
        }

        //加载VPP程序
        public bool LoadVpp()
        {
            try
            {
                fifoTool = CogSerializer.LoadObjectFromFile(Directory.GetCurrentDirectory() + "\\VPP\\CogAcqTool1.vpp") as CogAcqFifoTool;
                cogToolBlock = CogSerializer.LoadObjectFromFile(Directory.GetCurrentDirectory() + "\\VPP\\TB.vpp") as CogToolBlock;
                //声明串口对象
                serialData = new SerialPort();
                serialData.PortName = "COM2";
                //波特率
                serialData.BaudRate = 9600;
                //校验位
                serialData.Parity = Parity.None;
                //数据位
                serialData.DataBits = 8;
                //停止位
                serialData.StopBits = StopBits.One;
                //串口接受数据的事件
                serialData.DataReceived += SerialData_DataReceived;//指示已通过由 System.IO.Ports.SerialPort 对象表示的端口接收了数据。
                if (!serialData.IsOpen)
                    serialData.Open();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        private void SerialData_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

            //获取缓存区的数据字节大小
            int size = serialData.BytesToRead;
            //动态创建字节数组
            byte[] buffer = new byte[size];
            //读取缓存区的数据到buffer数组
            serialData.Read(buffer, 0, buffer.Length);
            //把字节转换成字符串
            string msg = Encoding.ASCII.GetString(buffer);
            cogCaliper = cogToolBlock.Tools["CogCaliperTool1"] as CogCaliperTool;
            cogCaliper1 = cogToolBlock.Tools["CogCaliperTool2"] as CogCaliperTool;
            //判断接收T1信号  相机拍照
            if (msg.Contains("T1"))
            {
                fifoTool.Run();
                cogToolBlock.Inputs["OutputImage"].Value = fifoTool.OutputImage;
                cogToolBlock.Run();
                cogImage = cogToolBlock.Inputs["OutputImage"].Value as ICogImage;
                cogRecord.Image = null;
                cogRecord.Image = cogImage;
                //MessageBox.Show(f.ToString());
                DisplayPicture();
                //拍一张卡尺测一次宽传入
                serialData.WriteLine(cogCaliper.Results[0].Width.ToString("f2"));

            }
        }

        //关闭窗口时同时关闭相机和通讯串口
        public void FromCoing()
        {
            //关闭相机
            CogFrameGrabbers cogFrame = new CogFrameGrabbers();
            foreach (ICogFrameGrabber item in cogFrame)
            {
                item.Disconnect(false);
            }
            //关闭串口(if判断不为空时进入)
            if (serialData != null && serialData.IsOpen)
                  
                serialData.Close();
        }

        public void DisplayPicture()
        {
           
            if (cogToolBlock.RunStatus.Result == CogToolResultConstants.Accept)
            {
                cogRecord.Record = cogToolBlock.CreateLastRunRecord().SubRecords["CogPMAlignTool1.InputImage"];
                cogRecord.Fit();
            }
        }

        /// <summary>
        /// 拍照
        /// </summary>
        public void PhotoGraph()
        {
            if (fifoTool!=null&&fifoTool.Operator!=null)
            {
              //开始拍照

            }
        }

        //实时显示
        public void LivePreview()
        {  
                cogRecord.StartLiveDisplay(fifoTool.Operator, false);

        }
        //停止实时
        public void LiveStoePreview()
        {
           
           
            cogRecord.StopLiveDisplay();
        }
    }
}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值