| 品牌 |
西门子 |
型号 |
1FL6061-1AC61-0AA1 |
| 电压 |
220V/320V |
功率 |
120kW |
| 产品认证 |
ccc |
加工定制 |
否 |
| 外形尺寸 |
40mm |
重量 |
0.5kg |
| 用途 |
广泛 |
|
西门子变频器代理商 西门子1FL6061-1AC61-0AA1代理商 西门子变频器代理商 西门子1FL6061-1AC61-0AA1代理商
功能块编程与调用举例
对功能块编程分两步进行:*步是定义局部变量(填写局部变量表);第二步是编写要执行的程序,可以用梯形图或语句表两种形式编程,并在编程过程中使用定义了的局部变量(数据)。
定义局部变量的工作内容包括:
(1) 分别定义形参、静态变量和临时变量(FC块中不包括静态变量);
(2) 确定各变量的声明类型(Decl.)、变量名(Name)和数据类型(Data Type),还要为变量设置初始值(Initial Value)(尽管对有些变量初始值不一定有意义)。如果需要还可为变量注释(Comment)。在增量编程模式下,STEP 7将自动产生局部变量地址(Address)。
写功能块程序时,可以用以下两种方式使用局部变量:
(1) 使用变量名,此时变量名前加前缀“#”,以区别于在符号表中定义的符号地址。增量方式下,前缀会自动产生。
(2) 直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。
在调用FB块时,要说明其背景数据块。背景数据块应在调用前生成,其顺序格式与变量声明表必须保持*。在增量方式下,调用FB块时,STEP 7会自动提醒并生成背景数据块。此时也为背景数据块设置了初始值,该初始值与变量声明表中的相同。当然也可以为背景数据块设置当前值(Current Value),即存储在CPU中的数值。
1.二分频器
假设功能块FC10是二分频器产生程序,功能是对不同的输入位进行二分频处理。以下给出了FC10的变量声明表和语句表程序。在程序中使用了跳变沿检测指令。
1) FC10的变量声明表(见表5.3)
Address Decl. Symbol Data Type Initial Value Comment
0.0 In INP BOOL FALSE 脉冲输入信号
1.0 Out OUTP BOOL FALSE 脉冲输出信号
2.0 In_Out ETF BOOL FALSE 跳变沿标志
2) 语句表程序
Network 1
A #INP 对脉冲输入信号产生RLO
FP #ETF 对前面的RLO进行跳变沿检测,若有正跳沿则RLO=1,否则RLO=0
NOT 取反RLO
BEC 若RLO=1(没有正跳沿),结束块;若RLO=0(有正跳沿),继续执行下一条指令
AN #OUTP
= #OUTP 输出信号反转
BEU 无条件结束块
在功能块FCl0中定义了三个形参,程序中以引用变量名方式使用了形参变量。也可以为FC10在符号表中定义一个符号名,如“BINARY”,并选用以下两种方式之一调用功能块FC10。调用时为形参分别赋予实参I0.0、Q4.0和M10.0,以对输入位I0.0进行二分频以产生输出脉冲Q4.0。
调用方式1 调用方式2
CALL FC10 CALL BINARY
INP:= I0.0 INP:= I0.0
OUTP:= Q4.0 OUTP:= Q4.0
ETF:= M10.0 ETF:= M10.0
2.读模拟输入量程序
一些S7-300的应用系统中,使用8通道模拟量模块采集信号,当模块数量较多时,读模拟输入量就很繁琐。下面给出一个通用程序FC100,利用它可以方便地把模拟量读回并顺序存入数据块,因为模入模块的起始地址、通道数、存储数据块号及数据在数据块中的存储起始位置均是可变的,所以可在调用FC100时灵活确定。
Address Decl. Symbol Data Type Initial Value Comment
0.0 In PIW_Addr INT
模入模块通道起始地址
2.0 In CH_LEN INT
要读入的通道数
4.0 In DB_No INT
存储数据块号
6.0 In DBW_Addr INT
存储在数据块中的字地址
Network 1
L #DB_No
T LW0
OPN DB[LW 0] 打开存储数据块
L #PIW_Addr
SLD 3 形成模入模块地址指针
T LD4 在临时本地数据双字LD 4中存储模入模块地址指针
L #DBW_Addr
SLD 3 形成数据块存储地址指针
T LD8 在临时本地数据双字LD 8中存入数据块存储地址指针
L #CH_LEN 以要读入的通道数为循环次数,装入累加器1
2.读模拟输入量程序
一些S7-300的应用系统中,使用8通道模拟量模块采集信号,当模块数量较多时,读模拟输入量就很繁琐。下面给出一个通用程序FC100,利用它可以方便地把模拟量读回并顺序存入数据块,因为模入模块的起始地址、通道数、存储数据块号及数据在数据块中的存储起始位置均是可变的,所以可在调用FC100时灵活确定。
Address Decl. Symbol Data Type Initial Value Comment
0.0 In PIW_Addr INT
模入模块通道起始地址
2.0 In CH_LEN INT
要读入的通道数
4.0 In DB_No INT
存储数据块号
6.0 In DBW_Addr INT
存储在数据块中的字地址
Network 1
L #DB_No
T LW0
OPN DB[LW 0] 打开存储数据块
L #PIW_Addr
SLD 3 形成模入模块地址指针
T LD4 在临时本地数据双字LD 4中存储模入模块地址指针
L #DBW_Addr
SLD 3 形成数据块存储地址指针
T LD8 在临时本地数据双字LD 8中存入数据块存储地址指针
L #CH_LEN 以要读入的通道数为循环次数,装入累加器1
NEXT:T LW 0
将累加器1的值,装入循环次数计数器LW0(临时本地数据字)
L LD4
LARl 将模入模块地址指针装入地址寄存器1
L PIW[ARl,P#0.0] 读模入模块装入累加器1
T LW2 将累加器1的内容暂存入缓冲器LW2
L LD8
LARl 将数据块存储地址指针装入地址寄存器1
L LW2 将数据缓冲器中的内容装入累加器1
T DBW[ARl,P#0.0] 将累加器的内容存入数据块中
L LD4 AR1+P#2.0→AR1
+ L#16 ACC1+(.._0001_0 000)
T LD4 调整模入模块地址指针,指向下一通道Acc1+(bb bbbb bxxx)
L LD8
+ L#16
T LD8 调整数据块存储地址指针,指向下一存储地址
L LW0 将循环次数计数器LW0的值装入累加器1
LOOP NEXT 若累加器1的值不为0,将累加器减1继续循环;若累加
器为0,则结束
在FC100中,寄存器间接寻址指令OP NDB[LW0]使用了临时本地数据LW0,变量表中定义的临时变量虽然也在L堆栈中,但不能用于存储器间接寻址,从这里也可看出临时本地数据与临时变量的区别。程序中LW2、LD4和LD8起的作用也可用临时变量替代。
下面举例说明如何使用FC100。在某应用中,机架0的4号槽位安装了一个8模入模块(地址256开始),若要将前6个模入模块信号读回,存入DB50.DBW10开始的6个字单元中,可按下列形式调用FC100:
CALL FC100
PIW_Add:= 256
CH_LEN:= 6
DB_No:= 50
DBW_Addr:= 10
数据块
数据块定义在S7 CPU存储器中,用户可在存储器中建立一个或多个数据块。每个数据块可大可小,但CPU对数据块数量及数据总量有限制,如对于CPU314,用作数据块的存储器最多为8 KB(8192 B),用户定义的数据总量不能超出这个限制。对数据块必须遵循先定义后使用的原则,否则,将造成系统错误。