全国服务热线:

15861139266

面向对象编程方式开发自定义工业相机类--苏州机器视觉培训
发布时间:2022-11-15 10:44:19 点击次数:858

 最早的编程方式是面向过程的,譬如PLC梯形图编程等,程序员只需要根据客户的业务需求来组织代码或指令编写,基于流水线式的方式进行开发,这种编程方法应付小规模的开发,不太复杂的项目还可以应付,一旦项目很复杂,那么编程的难度就会加大,表现在编写的语句增多,多数指令还会出现冗余,代码或指令逻辑之间的粘合度高,难以修改升级,调试也极其不方便,后面发展就出现了模块化编程,将某些特定相似功能的指令代码集成到一个模块中,但这样编程只是调理性的改观,并没有质的变化。

而面向对象编程提供了一个额外的组织层次,对于大规模的复杂的程序,面向对象更容易解决,面向对象是对项目开发过程中所涉及到的硬件,业务逻辑关系等进行抽象化,形成一个模型,这个模型就是我们前面所说的类。 一旦我们能针对不同的对象,抽象成不同的类,对类的功能加以封装,编写出成熟的类库文件,那么我们开发程序时候,只需要通过业务逻辑对这些类进行有机组合就可以了,而我们做升级改动时,只需要改动对应的类即可,不会影响到其他类。

我们经常在视觉上位机开发中需要自己预先定义好一个类来供项目使用,而这个类一旦编写完成,我们也可以直接应用到其他项目中,这样方便很多,这里我们工业上常用的工业相机为例来定义一个相机类,后面的项目再用到相机类,我们就可以直接使用了。


1.1

面向对象编程是基于对事物的抽象化,它为一个相对独立的事物建立模型,而这个模型反映了该事物的应有特征。比如我们开发一个视觉自动化部件---工业相机,由于工业相机在工业生产中是经常使用到的一个独立的部件,那么我们就可以为相机来抽象出一个类,具体使用时实例化这个类对象即可。



image.png


 面向对象编程有三大特性,封装,继承和多态。

此处封装就是对相机的抽象化类编程,隐藏了相机内部的逻辑在类内,只对外表明属性及相关方法(功能)供其他程序调用,在状态改变时,会触发相应的事件,开发者可以通过事件去触发其他关联动作。

      这里抽象出的相机的属性是相机的名称,当前相机状态。通过实例化相机对象提供属性,我们可以获取或者改动相机的名称,当前相机的状态等。相机类提供的方法主要是切换相机状态,复位相机故障等,我们可以通过调用方法实现对相机的控制来控制PLC等下位机,通过相机事件中的代码我们可以在相机对象触发事件的时候实时执行相应动作。

      继承是一个对象创建来自另外一个对象,比如面阵相机可以从前面的相机类继承,继承后的新对象具有被继承对象的所有特性,我们把这种关系称为“父类与子类”,就如同师傅的所有品格和技能都被徒弟继承一样的意义,相机对象是父类,面阵相机对象是子类,一个父类可以由很多子类,但在C#中,一个子类只能从一个父类继承。

image.png

 多态是父类方法的重写,同样的方法名称,子类和父类的执行时不一样的,比如对相机对象来说,如果我们调用其打开OPEN()方法,那么就是打开相机,打开的命令是一直输出的,而对于面阵相机,我们就可以对继承来的OPEN()方法内容进行重写,打开命令后命令的输出是每隔1s一次,就如同继承了师傅的某种剑法后,徒弟继续改进一个意义。虽然方法的名称相同,但是执行方式完全不同。


1.2  相机类编写

 

  通过下面指示图分析

1668480492148.png

编写类的完整代码如下

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;

 

namespace test12

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        // 首先在项目中创建一个名称为“Camera”的相机类,用关键词class创建新类,后面是类名称

        class Camera

        {

            //对应相机来说,相机打开和关闭时的指示的背景颜色,开关状态,故障发生和故障消除都是属性

 

 

            //字段和属性,都可以叫做是成员变量。属性和字段都是用来存储数据的,用于类内的方法等,但肯定是有不同的

            //定义字段并赋值,私有字段只生活在类内,不能被外部直接访问

            //声明相机类的三个内部变量,即三个私有字段,可以赋予默认值,这个值是外界未知的,但外界可以通过属性去更改的。

            Color clrClose = Color.Red;//定义相机关闭时指示灯背景颜色

            Color clrOpen = Color.Green;//定义相机打开时指示灯背景颜色

            Color clrUnknow = Color.White;//定义相机在未知情况下指示的背景颜色

 

            //属性:是指事物在任何条件下具有的性质,对字段进行安全保护

            //属性则是对字段的封装,它使用getset访问器来控制如何设置或返回字段值。

 

            //属性ClrClose用于外界定义关状态的背景颜色

            public Color ClrClose

            {

                get {

                    //..这里可以编写更改字段值的函数代码,然后通过ClrClose返回给外界

                    return clrClose;

                }

                set {

                    //这里可以对外界通过ClrClose的设置值value进行更改或安全防护后再赋给内部字段clrClose

                    clrClose = value;

                     }

            }

            //属性ClrOpen用于外界定义开状态的背景颜色

            public Color ClrOpen

            {

                get { return clrOpen; }

                set { clrOpen = value; }

            }

            //属性ClrUnknow用于外界定义未知状态的背景颜色

            public Color ClrUnknow

            {

                get { return clrUnknow; }

                set { clrUnknow = value; }

            }

            //从相机读取回来的开关状态的属性,如果不需要做私有字段,直接可以用自由属性,

            //这样简单些,可以输入prop然后按TAB键可以快捷操作了

            public Boolean Close { get; set; }//外界可以直接访问Close

            public Boolean Open { get; set; }

 

            //方法可以理解为类里面的函数,用于执行查询,运算等操作,方法与函数不同是因为,

            //方法必须和类相关联,不能独立存在

            //方法可以访问类内的所有变量,函数时独立大代码与类无关

            //上位机对相机发送命令进行开关操作,读取相机当前状态都可以使用方法来实现

 

            //创建一个属性,用于保存相机收到的输出命令状态

            bool h = false;//定义一个私有字段

            //该属性是只读的,只需要get 就可以,外界可以通过该属性H 获取命令状态

            public Boolean H

            {

                get { return h; }

            }

 

            //创建一个用于相机操作的方法,将相机的命令值保存到相机命令状态属性中

            public void Cmd(Boolean Command)

            {

                h = Command;//将外界操作相机的参数Command传递给私有字段h

            }

            //创建一个方法,用于外界,UI界面控件类中指示灯显示背景状态

            public Color GetColor()

            {

                if (Open)

                   return ClrOpen;

                if (Close)

                    return ClrClose;

                return ClrUnknow;

            }

 

 

            //事件是指程序执行过程中发生的外部输入或者内部触发的信息,比如单击鼠标,

            //按下某个按键,被监控的值达到报警值等

            //事件一旦触发,就会去执行某段程序,比如监控值达到报警值就弹出报警提示框等

            //这里我们编写一个相机故障报警事件,定义逻辑是,当发生命令给相机同时,

            //程序对相机反馈进行监控,如果不能在固定时间

            //内得到相机的反馈开关状态就触发一个故障事件,由事件中的代码执行错误提示等工作

 

            //定义委托函数和事件变量

 

            public delegate void ErrorHander(Boolean Item);

            public event ErrorHander Error;

 

            //事件发生启动方法

            public Boolean BJ(Boolean Item)

            {

                //记录当前时间,换算成s

                long Time = System.DateTime.Now.Ticks / 10000000;

                //等待相机的反馈和命令一致

                while ((!Item && !Close)||(Item && Open))

                {

                    Application.DoEvents();

                    //如果5s后任然没有收到反馈信号则触发事件

                    if ((System.DateTime.Now.Ticks/10000000-Time)>=5.0)

                    {

                        if (Error !=null)//事件没有发生时

                        {

                            Error(Item);//触发事件发生

                        }

                        return false;//没有事件返回false

                    }

                }

                return true;//命令成功返回true

 

            }

        }

 

 

        //那么后续调用类时候需要实例化操作才能使用,可以通过关键字new 实例化类,

        //PLC中我们通常调用一个FB块同时赋予一个背景数据块DB其实就是对FB的实例化,

        //这里我们可以通过调用窗体加载事件对类进行实例化

 

        //声明一个相机类

        Camera Ca1;

        //定义一个故障事件发生时候指定执行的方法:弹出报警提示框

        private void Ts(Boolean Item)

        {

            MessageBox.Show("操作相机失败:" + Item.ToString());

        }

        //加载窗体

        private void Form1_Load(object sender, EventArgs e)

        {

            //加载窗体时实例化

            Ca1 = new Camera();

            //类被实例化后就可以正常访问它属性和事件了

            //这里我们模拟一个相机反馈信号直接赋值给Open属性

            Ca1.Open = true;//通过直接赋值模拟相机开反馈信号是打开的

            MessageBox.Show(Ca1.GetColor().ToString());//弹出提示栏说明当前获取的背景颜色

 

            //绑定故障处理方法到相机事件

            Ca1.Error += Ts;

 

            //触发报警监控方法,也就是模拟硬件相机开信号

            Ca1.Cmd(true);

            Ca1.BJ(true);//触发报警监控方法

 

            //通过模拟反馈值和输入值使其不一致

            Ca1.Open = Ca1.Close = false;

            //这样就会有报警提示框出现了

        }

        

    }

}


小白成专家,大林上位机视觉软件培训专家


不装逼,不扯淡,只唠干货,能做项目!!


校区: 苏州大林上位机机器视觉培训机构,分为两个校区,苏州校区(苏州木渎),常州校区(常州新北),


老师: 是专业从事上位机视觉软件的开发培训,培训老师是电气自动化专业出生,从事多年上位机机器视觉相关项目开发,对

          电气人员学习C#开发视觉软件有独到的见解,即使您是零基础,或只要从事过电气自动化相关工作的学员都能够轻松快 速               学 会


硬件设施:校区提供2000多平方的实训基地,完美的设备硬件配套,可以做到边学习边操作,鉴于本机构内属于某自动化公司,

                学员可以配合边学习边配合公司开发人员完成项目,这样学习事半功倍


毕业服务:完成学业后可以择优录取,在我们自动化公司的实习


课程对象: 1.零基础学员

               2.有电气及PLC编程基础的更容易入手


课程特色:为您提供零基础快速成为上位机及机器视觉软件开发专家方案


课程内容: 小白亦可通过学习成为工业软件开发专家,从电气图,到梯形图,到高级语言SCL,再到C#,突破高级语言难的瓶颈,                  轻松掌握

从零开始,从电气基本元件入手,跟随课程递进学习,PLC,工业机器人,数据库,运动控制器,上位机,机器视觉,一 网打尽



欢迎现场咨询,老师私人定制课程 ,学习更清晰!


苏州上位机软件开发培训

苏州上位机编程培训

苏州上位机软件开发培训学校

C#与苏州上位机开发培训

C#苏州上位机编程培训

VSC#编程培训

C#与工业自动化编程培训

C#与PLC监控培训

C#与PLC编程苏州苏州上位机软件培训

C#与工业机器人编程培训

C#工业苏州上位机软件开发培训

苏州上位机监控系统开发培训

C#与运动控制卡培训

PLC编程培训

苏州上位机与西门子PLC培训

苏州上位机与西门子PLC全科编程培训

苏州上位机与西门子200SMART编程培训

苏州上位机与西门子PLC编程培训机构

苏州上位机与西门子PLC培训学校

苏州上位机与西门子博图编程培训

苏州上位机与西门子200SMARTPLC编程培训

苏州上位机与西门子S7-1200PLC编程培训

苏州上位机与西门子S7-1500PLC编程培训

苏州上位机与西门子SCL编程培训


苏州上位机与三菱PLC全科培训

苏州上位机与三菱PLC编程培训

苏州上位机与三菱FX系列编程培训

苏州上位机与三菱PLC编程培训机构

苏州上位机与三菱PLC培训学校

苏州上位机与三菱FX3UPLC编程培训

苏州上位机与三菱FX5UPLC编程培训

苏州上位机工业机器人编程培训

苏州上位机与ABB工业机器人编程培训

苏州上位机与六轴机器人

苏州上位机与四轴机器人编程定位

苏州上位机与Epson机器人培训

苏州机器视觉软件开发培训

CCD苏州机器视觉培训

苏州机器视觉软件框架开发培训

工业苏州机器视觉培训

苏州机器视觉软件编程培训

视觉深度学习培训

2D苏州机器视觉培训

3D苏州机器视觉编程培训

飞拍视觉编程培训

Halcon苏州机器视觉培训

VisionPro苏州机器视觉培训

海康苏州机器视觉培训

C#联合halcon苏州机器视觉培训

机器人与视觉培训

Halcon视觉培训

视觉与运动控制

3D图像处理实操

机器人视觉软件开发培训

Halcon深度学习培训

视觉光学分选机实操培训

视觉纠偏实操培训

视觉对位贴合实操培训

ABB机器人视觉实操培训

Epson机器人视觉实操培训

激光3D视觉检测培训

苏州机器视觉测量软件编程培训

苏州机器视觉缺陷检测软件开发培训

苏州机器视觉与运动控制卡开发

苏州机器视觉与雷赛运动控制卡开发

视觉引导无序抓取培训

视觉引导机器人定位


视觉PLC编程培训

苏州机器视觉与西门子PLC培训

苏州机器视觉与西门子PLC全科编程培训

苏州机器视觉与西门子200SMART编程培训

苏州机器视觉与西门子PLC编程培训机构

苏州机器视觉与西门子PLC培训学校

苏州机器视觉与西门子博图编程培训

苏州机器视觉与西门子200SMARTPLC编程培训

苏州机器视觉与西门子S7-1200PLC编程培训

苏州机器视觉与西门子S7-1500PLC编程培训

苏州机器视觉与西门子SCL编程培训


苏州机器视觉与三菱PLC全科培训

苏州机器视觉与三菱PLC编程培训

苏州机器视觉与三菱FX系列编程培训

苏州机器视觉与三菱PLC编程培训机构

苏州机器视觉与三菱PLC培训学校

苏州机器视觉与三菱FX3UPLC编程培训

苏州机器视觉与三菱FX5UPLC编程培训


苏州机器视觉工业机器人编程培训

苏州机器视觉与ABB工业机器人编程培训

苏州机器视觉与六轴机器人

苏州机器视觉与四轴机器人编程定位

苏州机器视觉与Epson机器人培训




立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络