把编写简单计算器作为入门的第一个范例程序,主要是因为比较简单,而且综合了HMI,数据类型,数据转换,PRG和FBD等功能块的混合等知识,个人认为还是比较适合用来快速上手的。由于是第一个范例,所以视频教程和文档说明都会比较详细(学习能力较强的可以跳着看,后面范例的说明会逐渐减少)

 

添加一个PLC,随便取个名字

 

首先是把人机界面做好,最简单的计算器需要实现加减乘除的功能,右击VISUs添加一个人机界面,名字也随便

 

在人机界面上拖放需要的控件(这个跟高级语言一样,但是注意是控件都是TwinCAT提供的控件,所以会有Rectangle,Line这种控件,一般TwinCAT2用的比较多,因为一个Rectangle既可以是Button,又可以是Textbox,但是TwinCAT3既然提供了更加接近高级语言的控件,就使用常规的按钮和文本框即可)

 

然后就是创建一个功能块了(你也可以在MAIN里面直接写,或者不创建功能块,创建FUN,PRG都可以),具体区别后面会讲到

 

FB本身是有输入输出的(VAR_INPUT,VAR_OUTPUT,而定义在VAR 和END_VAR之间的是临时变量,我们暂时用不上)在这个FB上右击添加Method,比如最简单的相加方法(注意返回类型LREAL就是double类型)

 

用同样的方法做好加减乘除,这样再主程序调用的时候就会非常方便,直接类.方法就出来了,注意FB需要实例化一个对象,我个人习惯于把变量都定义在全局变量中(至少这些变量是很多地方都要用到的)。

 

在具体编写某个Method的时候,注意最后只要让Method的名称赋值等于结果即可(加不加RETURN都行),这不仅仅是对于INT,LREAL这些基本类型,如果要函数输入两个数组,输出一个数组之类的也可以,这个后面会讲到,暂时还没用到

 

在做除法的时候,自己要判断分母是否为零(TwinCAT如果碰到非法的运算,可能会返回NaN,也可能会直接报警,例如SQRT(-1)在TwinCAT3中就会得到一个NaN的结果,而除以0就直接会报警)

 

我们看到了功能块的解决方法(Function Block,需要声明类的实例,稍微有点麻烦,但是一个整体的功能块能否划分给一个类,比如MathCalc包括了加减乘除,也可以继续扩展开多次方,开根号,算圆面积,算三角函数等等),在接着往下做之前,先来看一下别的做法。直接创建一个FUN(函数),这样也可以做,而且写法基本一样(到最后的Method名称=结果即可)

 

使用的时候不需要声明FB的实例,直接函数名即可(可以认为FUN是全局的,不是哪个类的),所以看个人的使用习惯,如果项目很小,也无所谓以后的代码复用,可以直接FUN来做,但是如果考虑一个类不断完善和代码复用,肯定还是需要用FB来的更合理(直接的FUN都是散开的,如果你有10个很基本的FUN散落在这个项目的各个位置,下次要用的时候是不是还得挨个找到,复制粘贴到新的项目?使用FB直接复制一个FB,他的所有方法就都有了)

 

除了FUN和FB的区别,我们还可以在FB上新建Action(Method,Property,Transition一个四种,但是最主要用的是Action和Method),新建了Action之后可以发现代码是空的啥也没有,因为Action只是一个代码片段,没有输入输出,相当于还是在执行MathCalc的一部分代码而已

 

如果一定要这样做也可以,但是非常繁琐,你需要对Math(FB的实例)的指定属性赋值,然后执行Math的指定Action,然后从Math的指定输出中采集结果(可想而知如果某个函数需要10个输入,你就要挨个做,肯定是不方便的)

 

那么Action具体干什么用?Action的好处就是可以更加有条理的归纳代码。比如MAIN程序的每一个状态里面已经有很多事情了(获取HMI的输入,变量转换,执行功能,显示输出,回到0状态等等),可以在MAIN里面新建一个Action把这些主程序逻辑结构不关系的东西都放进去,这样如果执行到Math_Add,就只需要一行就可以了。

 

分析完了程序结构,我们再来看人机界面的注意事项,一个文本框如果要绑定到String类型,则Text应该是%s,如果是INT类型,则%d,如果是LREAL类型,则%f,我们为了可以直接输入文本方式的数字,所以绑定到字符串类型(执行运算的时候再把字符串转成LREAL类型)

 

相比于Numpad就会方便很多,你可以直接键盘输入数字,结果也可以鼠标按进去之后复制结果

 

建议对一类功能成组,这样可以很方便的整体拖动,复制粘贴。在工具箱中搜索group即可找到,同时打开顶部的元素列表也可以批量选中一个组中的控件

 

为了演示数组类型的传入传入,我们以向量的点乘和叉乘为例。(本质上函数不能传出数组,但是可以传出结构体,结构体定义成只有一个数组的元素即可),这样只要输入的同样类型结构体赋值准确,就可以执行函数,同时得到的输出也放到指定类型结构体,并不比数组难用,在本例中,直接结构体.DATA[数组下标]即可读写数组元素

 

 

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

 

我的在线论坛:

http://csrobot.gz01.bdysite.com/

 

问题交流:

QQ:910358960

邮箱:acetaohai123@163.com

 

 

 

 

 

 

 

倍福TwinCAT(贝福Beckhoff)基础教程3.1 TwinCAT如何编写简单的计算器的更多相关文章

  1. 倍福TwinCAT(贝福Beckhoff)基础教程1.2 TwinCAT安装配置

    由于TC2和TC3都有可能用到,个人推荐都安装,但是注意必须是先安装的TwinCAT2,然后安装TwinCAT3,如果反了可能两个都没法用(打开TcSwitchRuntime提示Both TwinCA ...

  2. 倍福TwinCAT(贝福Beckhoff)基础教程1.1 TwinCAT背景知识

    本节附件中有很多PPT介绍贝福TwinCAT和EtherCAT的相关技术,在此只做简单说明. 简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PP ...

  3. 倍福TwinCAT(贝福Beckhoff)基础教程7.1 TwinCAT 如何简单执行NC功能块 TC3

    这一节我们介绍简单的NC运动(前面所讲的所有内容都是PLC编程和HMI的界面,算是基础知识),这里NC就是控制伺服电机的部分(当然还不是实际的NC轴,是虚拟轴,但是用到的函数都是一样,可以为后面的实际 ...

  4. 倍福TwinCAT(贝福Beckhoff)基础教程6.1 TwinCAT如何与高级语言通讯

    因为使用TwinCAT的人用途不同,重视点就不同.如果用来代替传统PLC+HMI做项目的,很少会需要用到跟高级语言通讯,但是如果是用来做运动控制平台如做机器人运动控制器的,就肯定会用到.不管是否用得上 ...

  5. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT如何执行系统命令

    TwinCAT提供了一系列的执行Windows系统命令的方法 Name 描述 NT_Shutdown 关机操作系统 NT_AbortShutdown 取消关机操作系统命令 NT_Reboot 重启操作 ...

  6. 倍福TwinCAT(贝福Beckhoff)基础教程4.1 TwinCAT如何读写TXT文件

    TwinCAT提供了FB_FileRead等一系列读写文件的方法,本小程序演示的是多个贝福自带的FBD功能块连起来用的方法,跟前面讲的一样,建议在初始化的时候把所有FBD都复位,准备使用   真正的读 ...

  7. 倍福TwinCAT(贝福Beckhoff)基础教程4.2 TwinCAT如何读写CSV文件

    本程序只是在官方范例程序上稍作修改,在官方原有的范例中,演示了多种模式的读写(可以认为CSV文件是比TXT文件需要更多数据量的时候使用,比如记录一个小型的数据库集合)   但是写的比较混乱,甚至没有H ...

  8. 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_字符串

    一般声明字符串都会加一个长度的限制,比如A:STRING(80);至于真实的字符串长度不要超过这个限制即可   在测试中,我演示了两个字符串的方法,CONCAT字符串拼接和REPLACE字符串替换.拼 ...

  9. 倍福TwinCAT(贝福Beckhoff)基础教程7.1 TwinCAT如何简单执行NC功能块 TC2

    TC2的程序是在TC3的基础上稍作调整,只说明不同点,请先看TC3的. TC2中的一个原本是AXIS_REF类型变量被拆成了两个(PLCTONC_AXLESTRUCT和NCTOPLC_AXLESTRU ...

随机推荐

  1. 转 C++中的static关键字

    C++中的static关键字 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作 ...

  2. Andriod布局

    布局[ViewGroup]   像素单位的变化:是用dip,而不是px,主要用于宽高的设置 在Android中支持的描述大小区域的类型有以下几种. px(pixels)——像素:不同的设备显示效果相同 ...

  3. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  4. UbuntuMate开机自动启动ssh服务

    在文件/etc/init/ssh.conf中,有一句 start on filesystem or runlevel [2345] 如果想关闭自动启动的话,把这一局修改为start on runlev ...

  5. 牛客网 牛客练习赛7 A.骰子的游戏

    A.骰⼦的游戏 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在Alice和Bob面前的是两个骰 ...

  6. UVA 10369 - Arctic NetWork (求最小生成树)

    题意: 在南极有  N  个科研站,要把这些站用卫星和无线电连接起来,是的任意两个之间都能互相通信,如果其中任意的一个地方安装了卫星,那么就可以和其他安装卫星的互相通信,和距离没有关系,但是安装无线电 ...

  7. 版本控制[0] -> git -> 使用 git 进行版本控制

    版本控制 / Version Control 目录 git-版本控制 / git-Version Control git-常用命令 / git-Freq Command git-文件忽略 / git- ...

  8. csu1812

    csu1812 题意 求三角形和矩形交的面积. 分析 半平面交.把三角形的三条边当作直线去切割矩形,最后求切割后的多边形面积即可. code #include<algorithm> #in ...

  9. Lightoj 1348 Aladdin and the Return Journey (树链剖分)(线段树单点修改区间求和)

    Finally the Great Magical Lamp was in Aladdin's hand. Now he wanted to return home. But he didn't wa ...

  10. Number Triangles

    题目描述 Consider the number triangle shown below. Write a program that calculates the highest sum of nu ...