三菱fb功能块手册中文_三菱ST语言教学(5)——功能(FC)的编辑与使用

本文介绍三菱PLC中功能(FC)的使用和创建。FC作为带有逻辑的变量,无需设定输出,直接调用。通过示例详细讲解如何创建一个用于扫雷游戏的FC,包括生成随机坐标并实现查重功能,避免死循环。FC的调用方式与功能块FB有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章讲了功能块(FB)的封装与调用,功能块是将一段程序打包成块,设定输入和输出变量,方便重复调用。本篇讲一下与功能块类似的功能(FC,三菱叫做FUN,函数),FC也是一段程序和逻辑的封装,也需要设定输入变量,但是他的输出并不需要设置变量,输出的是它本身,或者说FC本身就是一个带着逻辑的变量,因此使用时也无需将FC声明变量。

FC的使用

三菱也同样提供了很多FC可以直接使用,点击部件选择窗口按钮, 在函数下能看到非常多的FC:

35dae135bab165d9d7898819168ceb9a.png

系统函数

如果你不清楚他的功能是什么,可以选中后点击F1查看帮助手册。

这里选择一个随机数RND函数,将它拉倒程序中:

158908855a99926ad4f56956daf783ad.png

随机数

从引脚名称的字面意思来看,括号内要输入一个布尔量的使能变量和一个16位的任何类型的变量,选中RND按F1看下具体怎么使用:

aaaaa6c24669deaf1634387e0a3a265e.png

帮助

可以看到,RND是高电平触发,从0到32767随机生成一个数,并存储在D里面。

使能开关直接赋值,建立个word变量存储生成的数字:

4894fc57909cb1904e3bc13f27982771.png

仿真模拟后,可以看到变量RNDnumber里面的值一直在变化(原谅我不会发动图。。。),而且看上去也没什么规律。如果想要能够控制触发时机,可以将使能开关设置一个bit变量,通过控制变量的值来控制随机数的产生。

FC的建立

仍然举例进行说明。

假设我们现在想要写一个扫雷游戏的程序,先看看扫雷的定义:

8d246a7d252882ea2d59bed0d4181c99.png

扫雷游戏

扫雷最高难度定义16*30的格子中存在99个雷,那么程序的其中一个任务就是生成99个雷的坐标,真正扫雷中的雷我不清楚是如何产生的,但我们的程序可以用随机数来产生,通过两个随机数来定义一个雷的XY坐标,循环99次产生99个雷,并将整个功能写进一个FC中。

三菱同样存在建立FC的位置,并且与FB是在相同的地方,仍然是在左侧导航栏FB/FUN右键-新建数据,在弹出的设置窗口中将数据类型选为函数,

4d3c2806c02f30bff35ee85252f716b4.png

建立FC

下面还要设置返回值,我们想要这个功能反回99组XY坐标,显然基本数据类型的变量并不能满足要求,需要建立一个容量合适的结构体和数组的组合:

cc9e0b937ebc2083dcb8024a6d6518a9.png

存储坐标的结构体。

在结构体ST_MinesXY中声明了100个iX和100个iY(实际上99个就够),然后将结构体名称填入上图的返回值类型,点击确定后在弹出的窗口中编辑FC内部的程序:

f44e255c3e42c7cc1872a835402ea0b3.png

照着RND的方式,我们也建立一个bit变量Enable用来启动这个功能,使用for循环,每个循环使用两个RND生成两个随机数,存放在tempX和tempY中,由于游戏的格子只有30*16,所以需要通过数学运算将tempX控制在0-29之间,tempX控制在1-15之间,99次后99个雷就完成了。

上面说过,FC输出的是FC本身,因此我们建立的FC名称就是一个变量,变量类型就是上面输入的返回值的类型,也就是刚刚建立结构体。我们将处理完成的两个随机数写进FC返回值中。

上面的程序有一个问题,生成的坐标有可能是相同的,需要一个查重的功能,每次生成的坐标要与前面生成的坐标依次进行对比,如果存在相同的要重新生成:

4ec1c2c77fc7c00e1df1955679dd63de.png

查重功能

可以用3个步骤理解这段程序:

1.置位一个bit变量Check,Check触发一个while循环;

2.在这个循环中,将当前生成的随机数与之前生成的所有随机数通过for循环进行遍历和判断;

3.如果存在重复,置位Repetiton变量,重新生成随机数,Check的值不变,这样while循环会重复步骤2和3;如果没有重复的则复位Check,跳出while循环,进行最外面的for循环的下一步,生成下一个雷的坐标。

这个程序存在一个风险,那就是每次生成的随机数都与前面的重复,那么Check一直置位,导致while进入死循环,所以我们在赋值的地方随便增加一点计算,减小重复的概率:

4162423212412699531747172ee2bc89.png

增加计算,减小重复概率

保存后就可以在部件列表中找到这个FC,然后按照上面的方法调用,仿真运行一次看看效果:

440403c307f3893192509fe64b562efc.png

运行测试

这里的调用方法跟上面调用RND不同的是,FC返回的值并不在括号内赋值,这是FC的标准用法。通过仿真监看赋值后的结构体变量stMines能够看到已经生成了99个XY坐标,由于触发一直置位true,XY坐标也是一直在变化的。

<think>嗯,用户问的是汇川PLC功能块怎么使用。首先,我得确定用户对PLC的基础了解程度。汇川的PLC应该类似于其他品牌,比如西门子或者三菱,但可能有些特定的操作步骤。用户可能是工程师或者技术人员,需要实际操作的指导。 首先,功能块FB)在PLC编程中用于模块化代码,提高复用性。我需要分步骤解释,从创建到调用,再到参数设置和调试。用户可能想知道具体在软件中的操作,比如使用AutoShop,汇川常用的编程软件。 然后,考虑用户可能的疑问,比如功能块和函数(FC)的区别,或者实例化的概念。需要简明扼要地说明这些术语,避免混淆。还要提到输入输出参数,以及保持型变量的应用场景,比如计数器、PID控制。 另外,用户可能遇到常见问题,比如功能块不执行或者参数错误,需要给出排查建议,比如检查使能信号和变量地址冲突。示例部分用梯形图和ST语言展示,能帮助用户更直观地理解。 最后,确保回答结构清晰,步骤明确,语言通俗,避免过于专业的术语,但必要的术语还是得用,同时提供实际例子,这样用户能跟着操作。检查是否涵盖了创建、调用、调试和注意事项,这些都是使用功能块的关键点。</think>汇川PLC功能块(Function Block)使用步骤详解: 一、功能块基础概念 1. 功能块(FB)是可重复调用的程序模块,封装特定算法或控制逻辑(如PID、计数器等) 2. 普通程序段的区别: - 拥有独立的数据存储区(静态变量) - 支持参数化调用 - 可创建多个实例 二、使用步骤(以AutoShop编程软件为例) 1. 创建功能块: $$ FB\_Example $$ ```ladder // 输入参数 VAR_INPUT EN: BOOL; // 使能信号 SetValue: REAL; // 设定值 END_VAR // 输出参数 VAR_OUTPUT OutValue: REAL; // 输出值 END_VAR // 算法实现 IF EN THEN OutValue := SetValue * 0.8; END_IF ``` 2. 调用功能块: ```ladder |--[FB_Example(EN:=M0, SetValue:=D100, OutValue=>D200)]--| ``` 3. 参数设置技巧: - 输入参数使用`:=`赋值 - 输出参数使用`=>`连接 - 保持型变量用`RETAIN`声明 三、典型应用场景 1. 闭环控制:PID_FB模块 ```st PID_FB( EN := TRUE, PV := AD_CH1, SV := 50.0, MV => DA_CH1 ); ``` 2. 运动控制:MC_MoveAbsolute_FB 3. 通讯处理:ModbusRTU_FB 四、调试要点 1. 在线监视时可通过右键菜单"进入FB实例"查看内部状态 2. 使用背景数据块(Instance DB)存储运行数据 3. 注意变量地址冲突问题,建议使用自动分配模式 五、常见问题处理 1. 功能块不执行:检查EN使能信号和参数数据类型 2. 输出值异常:确认输入参数范围和FB算法逻辑 3. 多实例冲突:确保每个调用使用独立实例名 六、最佳实践建议 1. 复杂功能块建议先用ST语言编写 2. 重要参数设置范围限制: $$ \text{SetValue} \in [0,100] $$ 3. 版本管理:修改后需重新下载整个工程 (注:具体指令名称可能因PLC型号不同有所差异,建议对照对应型号的《功能块手册》操作)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值