在子程序中定义形参利用形参进行參数传导,计算后返回计算值
FC分两种,一种是不带参数功能的FC(一般为绝对寻址OB1一般只调用一次,为了优化OB1结构更美观、清爽)一種是带参数功能的FC(需要编辑对外管脚in,out,in_out等)这种FC能多次调用,但必须保证功能一样如水泵1,水泵2水泵3等,功能一样比如3个都是星型啟动10秒后转三角形启动或3个都是正转10秒后反转。
FB也分两种一种是带静态参数FB(有初始值),一种是不带静态参数FB(无初始值)可以当做FC┅样理解唯一区别是FB多了一个背景数据块DB,DB就相当于FB的大脑就像我们上面讲的的3个水泵,它们是不需要背景数据块的是死的,固定模式启动10秒后自动转三角型,死的直接调用FC如我们有个储罐,一个泵进水一个泵出水,我们要控制储罐的液位这时候就不能用功能FC,必须使用功能块FB因为控制液位需要大脑FB思考的,所有在控制过程中产生的背景数据是要零时储存在FB内等下一个周期再储存时覆盖的
无静态参数你可以理解为第一次调用FB或断电后FB里的DB背景数据被清空。带静态参数的就是第一次调用FB或断电后FB里的DB背景数据第一次参与计算时使用静态参数
总结:FC,死的不参与自由动态控制。FB活的参与自由动态控制,有大脑DBFB可以替代FC,但FC不能替代FB
|
我们知道在高级语言中普遍使用泛型那么在PLC中是否可以使用泛型呢?可以但罗嗦。
求数组中的最大值,数值类型包括Real和Int我们这里选择两种类型,控制代码量
array是傳进来的数组,可以是Int或Real类型但有大小限制,长度必须小于maxSize后面我们会写个无大小限制的程序。
程序比较简单有几个要点我们简要說下:
第二行,必须用UDINT_TO_DINT, 因为后面的索引号需用DINT最后输出的是泛型的数值,所有需要把maxElement设置为Variant所以需要用VairantPut指令把相应的数值传出来。
另外每种类型都需要写相应的处理代码,PLC的泛型很罗嗦代码量很大,其实跟PC的泛型有本质上的区别
这次我们用MOVE_BLK_VARIANT函数来去Variant 数组中的值,所以可以实现真正的变长数组最后把最大值通过VariantPut指令输出。指令的详细说明可以看系统自带的手册
这个程序只实现变长数组,长度无限淛.
看申明第二行,类型为Array〔*〕of Int另外请注意程序第1和2行,用了Lower_Bound和Upper_Bound两个函数另外S7-1200的模拟器运行这个程序出错,真机可以.S7-1500模拟器可以正常运行.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。