[三菱] 三菱ST语言编程(4)——功能块的封装与调用

[复制链接]
查看21368 | 回复0 | 2024-8-8 09:34:33 | 显示全部楼层 |阅读模式


在第一篇教学中我们举了一个电机控制的例子,3个按钮控制电机正反转和停止。



单个电机控制

只是一台电机程序看上去挺简洁的,那如果是5台电机呢?10台呢?如果直接复制程序的话先不说程序篇幅,单就建立变量就够费事的了吧。而且实际项目中电机的自动控制程序很可能很复杂,复制程序修改变量名称也是一项庞大的工作量,再加上变量与设备地址的对应和赋值。。。不敢想象。

这时如果把单个电机的控制程序封装成块,按照电机的数量去调用就可以极大的减轻我们的工作量,而这个块就是今天要讲的内容功能块(FB).

功能块的封装

三菱的软件在左侧的导航栏有专门建立功能块的空间:



与建立程序段一样右键后新建数据,也会出现一个标签声明窗口和程序编辑窗口,这里要注意的是,功能块只能使用局部标签,不能使用全局标签和地址,毕竟功能块是要重复调用且互相不发生干涉的,符合这个特性的只能是局部标签。



声明标签

与普通程序的局部标签相比,功能块标签的类多了几个选项,分别是输入变量(input)、输出变量(output)和输入输出变量(in_out),而这几个变量类型也是功能块与外界程序的接口。

例如这个程序的按钮变量需要与外界的按钮地址进行连接,而且按钮对于这段程序来说属于控制者,因此把按钮变量声明为input类型;而正反转变量要传递给电机是执行者,因此把正反转声明为output类型;in_out类型即可输入也可输出,本人用的也不多,以后找找资料为大家分享。

其他类型的变量在这里只用来服务功能块内部程序,例如使用for或者case,需要一个数字型的中间变量(var)来让程序执行,调用后不会在外部程序中显示。

然后在程序编辑窗口将最上面的程序复制到这里,功能块建立完成。

调用功能块

功能块有了,在ST下如何使用功能块呢?三菱的拖拽法是比较方便的:

点击部件选择窗口按钮,可以在右侧出现部件列表:



部件列表

找到刚刚建立的功能块,用鼠标左键拖拽至程序编辑窗口中:



拖动FB

这时出现标签登录/选择窗口,这是由于功能块想要使用是需要声明标签的,就像普通的变量一样,改好标签名称,点击应用即可自动声明完成。如果生成的FB标签需要更改,也可以在标签表里编辑。



功能块想要使用,需要对他的接口引脚进行赋值,上图可以看出,拖动过来的功能块会自动将所有接口引脚列出,我们只需要将引脚后面赋值就可以。为了便于观看,稍微整理下格式:



实际上三菱的引脚赋值符号与标准的ST语言是由差异的,标准的输入引脚赋值用":=",而输出引脚使用"=>"符号,三菱的ST并没有进行区分。

如果一个功能块有一些引脚用不到,比如一个电机只要正转也停止就行了,用这个功能块也没有问题,只要将用不到的引脚删掉就好了:



模拟运行,验证一下功能块是否可用:



将第一个电机正转,第二台电机并没有影响。

习惯梯形图的人可能会觉得ST对于功能块的展现并不直观,我们可以使用FBD(结构化梯形图)来调用功能块:



FBD

左侧为输入引脚,右侧为输出引脚,相对ST来说清晰一点,你们更喜欢哪种方式呢?



常用的功能块

除了自建的功能块,三菱提供了很多直接可用的功能块,常用的比如上升沿(R_TRIG),下降沿(F_TRIG),延时启动(TON),延时关闭(TOF)等。与自建的功能块相比,这些功能块功能比较单一,需要与其他程序配合,所以用FBD就不是很方便了。我们修改一下上面电机控制的例子,来感受这些常用块的用法。按钮的输入检测下降沿执行,正反转启动要延时1秒执行:



在这里可以看到,功能块的输入端口采用括号的形式引出,而输出端口即可以用括号,也可以用类似结构体调用元素的方式,在FB标签后面加符号点"."引出,并且可以直接使用。

当然后加的这些功能完全可以写进我们封装好的功能块内部程序中,这样外面的程序就不用变化了:



在这里可以还可以看到,功能块的所有引脚不一定非要在同一个括号内赋值,可以在需要的单独赋值某一个引脚。调用的系统功能块的标签也可以根据实现的功能起名,文章里是为了体现功能块本身选择的自动生成。





文章来源:综合网络,侵权联删,谢谢。


戳这里,实用案例

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则