很多刚学西门子S7-1200 PLC编程的新手,都会遇到这样的问题:控制3台电机就要写3遍起保停程序,控制8个指示灯闪烁就要写8段重复代码,程序又长又乱,后期改一个参数,就要把所有重复的程序全改一遍,费时又费力,还容易出错。
其实解决这个问题的方法超简单,就是用S7-1200里的FC函数(功能)。它是PLC标准化编程的核心,也是新手从“会写程序”到“写好程序”的必经之路。一次编写,就能无限次调用,不用再重复写代码,程序简洁又规范,后期维护效率直接翻倍。
这篇文章就用最通俗的大白话,从FC是什么、怎么建立,到IN/OUT/IN_OUT/TEMP参数详解、形参实参的区别,全给新手讲透,看完就能上手创建自己的第一个FC函数。
一、先搞懂核心:FC函数到底是什么?为什么一定要学?
FC函数,也叫功能,是西门子S7-1200 PLC里的一种用户程序块,你可以把它理解成一个提前做好的“功能模板”。
比如你把电机启停的控制逻辑,写进一个FC函数里,做好通用的接口。后面项目里不管是控制1台、10台还是100台电机,都不用再重复写起保停程序,直接调用这个FC函数,填好对应参数,就能直接用。
用FC函数的3个核心优势,新手一定要知道
1.告别重复编程,效率翻倍:通用逻辑只写一次,后续无限次调用,不用再复制粘贴重复代码,编程时间直接缩短80%。
2.程序标准化,不出错:同一个控制逻辑用同一个FC模板,不会出现“这个电机程序这么写,那个电机那么写”的混乱情况,程序规范,故障率大幅降低。
3.后期维护超简单:想要修改控制逻辑,只需要改FC里的这一段程序,所有调用这个FC的地方,都会自动同步更新,不用一个个改,维护效率直接拉满。
二、手把手教你:在博途里创建一个FC函数
新手不用怕,创建FC的步骤超简单,跟着下面的步骤来,30秒就能创建完成:
1.打开博途TIA Portal,进入你的项目,在左侧项目树里,找到PLC设备下的「程序块」文件夹;
2.双击「添加新块」,弹出添加新块对话框;
3.在弹出的窗口里,选择「FC(功能)」,填写块名称(比如“电机启停控制”),选择编程语言(新手推荐LAD梯形图),块编号可以自动分配,也可以自己设置;
4. 点击「确定」,你的第一个FC函数就创建完成了,双击就能打开编写程序。
三、新手必学:FC的4种核心参数类型全解
FC函数的核心,就是接口参数,也叫形参。它就像这个功能模板的“接线端子”,我们通过这些端子,把外部的信号、数据传进FC里,也把FC的运算结果传出去。
S7-1200 FC函数里,最核心的4种参数类型是:IN、OUT、IN_OUT、TEMP,新手一定要分清它们的区别和用法,这是用好FC的基础。
1. 输入参数 IN
- 核心作用:只进不出,专门用来把外部的信号、数据传进FC函数里,给FC的程序提供输入条件。
- 通俗理解:就像家里水龙头的进水口,水只能从这里流进来,不能倒流出去。
- 典型用法:启动按钮信号、停止按钮信号、传感器信号、设定值、计数预设值这些只需要给FC提供输入的内容,都用IN参数。
- 关键特性:在FC内部,只能读取这个参数的值,不能修改它的值,避免外部数据被意外改动。
2. 输出参数 OUT
- 核心作用:只出不进,专门用来把FC函数的运算结果、控制信号,传到外部的PLC地址里。
- 通俗理解:就像水龙头的出水口,水只能从这里流出去,不能从这里流进来。
- 典型用法:电机接触器输出、指示灯输出、阀门控制信号、运算结果这些需要FC输出给外部的内容,都用OUT参数。
- 关键特性:在FC内部,必须给这个参数赋值,不然会出现随机数值,导致程序逻辑错误。
3. 输入输出参数 IN_OUT
- 核心作用:可进可出,既能把外部数据传进FC里,也能把FC修改后的数据再传回外部,同一个参数兼顾输入和输出。
- 通俗理解:就像家里的洗衣机,衣服从这个口放进去,洗完还是从这个口拿出来,既能进也能出。
- 典型用法:电机运行状态、当前计数值、累计运行时间、需要在FC内部修改并保持的数值,都用IN_OUT参数。
- 关键特性:参数的数值会保持上一次的状态,不会因为FC调用结束就清零,适合需要持续修改、保持状态的变量。
4. 临时变量 TEMP
- 核心作用:只在FC内部临时使用,只能在FC内部读写,不能和外部的PLC地址传递数据,是FC内部的“临时中转站”。
- 通俗理解:就像你做饭时的临时菜板,只在做饭的时候用,做完饭就清理干净,不会带到外面去。
- 典型用法:FC内部运算的中间结果、临时的逻辑状态、循环计数变量这些只在FC内部用的内容,都用TEMP参数。
- 关键特性:TEMP变量只在FC调用的扫描周期内有效,FC调用结束后,变量会被清零,绝对不能未赋值就直接使用,这是新手最容易踩的坑。
四、新手必懂:形参和实参到底有什么区别?
很多新手刚接触FC,总会被形参和实参搞晕,其实一句话就能讲明白:
- 形参:就是我们在FC函数的接口里,定义的IN/OUT/IN_OUT这些参数名称,比如“启动按钮”“停止按钮”“电机输出”,它是模板里的“通用端子名称”,没有具体的PLC地址。
- 实参:就是我们调用FC的时候,给每个形参分配的具体PLC地址,比如给“启动按钮”分配%I0.0,给“电机输出”分配%Q0.0,它是实际的硬件地址、变量地址。
举个通俗的例子:
FC函数就像一个通用的手机充电模板,形参就是模板里的“充电口”“电源口”,实参就是你实际插进去的“充电线”“电源插座”。模板只有一个,但你可以给不同的手机、不同的插座调用这个模板,只要对应插好线(填好实参)就能用。
五、新手必记的FC编程避坑红线
1.OUT参数必须赋值,IN_OUT参数慎用:OUT参数如果不赋值,会出现随机数值,导致输出失控;IN_OUT参数不要滥用,只有需要修改并保持数值的变量才用,单纯的输入输出用IN和OUT更安全。
2.TEMP变量必须先赋值,再使用:TEMP变量是临时变量,调用结束就会清零,未赋值就使用,会读取到随机的垃圾数值,导致程序逻辑完全错乱,这是新手最容易犯的错误。
3.FC内部不要用全局变量,全部用接口参数:不要在FC里直接写%I0.0、%Q0.0这些全局地址,全部用形参代替,不然FC就失去了通用性,没法重复调用。
4.不要在FC里写定时器、计数器的背景数据块:定时器、计数器建议放在OB1里调用,或者用多重背景,不然多次调用FC时,会出现定时器互相干扰的问题。
5.形参命名要规范,不要用默认名称:形参要起有实际意义的名字,比如“start_btn”“motor_out”,不要用“IN1”“OUT2”这种默认名称,不然后期调用的时候,根本不知道每个参数该填什么。
以上就是西门子S7-1200 FC函数的基础核心内容,新手只要把这些内容吃透,分清4种参数的用法,理解形参和实参的区别,就能开始编写自己的通用FC函数了。下一篇我们就进入实战,手把手教你编写第一个电机启停通用FC,实现一次编写、