CPU31XC工作在计数和测量两种不同模式下调用的SFB系统功能块也不相同,计数模式下调用SFB47,测量模式下调用SFB48。
在程序编辑窗口中,Library-->Standard Library-->System Function Blocks 中可以找到SFB47:
SFB47可以实现以下功能:
● 通过软件门 SW_GATE 启动/停止计数器
● 启用/控制输出 DO
● 读出状态位
● 读取当前计数值和锁存器值
● 用于读/写内部计数寄存器的作业
● 读出当前周期(不与块互连,但仅在背景数据块中可用)
输入 | 参数 | 数据类型 | 在背景数据块中的地址 | 说明 | 值的有效范围 | 缺省值 |
LADDR | WORD | 0 | 在“HW Config”中指定的子模块 I/O 地址。 如果输入和输出地址不相同,则必须指定两者 中较低的地址。 |
16#300 | ||
CHANNEL | INT | 2 | 通道号: | CPU 312C:0~1 CPU 313C CPU或313C-2 DP/PtP:0~2 CPU 314C-2 DP/PtP:0~3 |
0 | |
SW_GATE | BOOL | 4.0 | 软件门, 用于计数器启动/停止 | TRUE/FALSE | FALSE | |
CTRL_DO | BOOL | 4.1 | 启用输出控制 | TRUE/FALSE | FALSE | |
SET_DO | BOOL | 4.2 | 输出置位 | TRUE/FALSE | FALSE | |
JOB_REQ | BOOL | 4.3 | 作业请求(正跳沿) | TRUE/FALSE | FALSE | |
JOB_ID | WORD | 6 | 作业号 | 不带有功能的作业: 16#00 写入计数值: 16#01 写装载值: 16#02 写入比较值: 16#04 写入滞后: 16#08 写入脉冲持续时间: 16#10 读装载值: 16#82 读比较值: 16#84 读取滞后: 16#88 读取脉冲持续时间: 16#90 |
0 | |
JOB_VAL | DINT | 8 | 写作业的值 | -2^31 到 +2^31-1 | 0 | |
输出 | STS_GATE | BOOL | 12.0 | 内部门状态 | TRUE/FALSE | FALSE |
STS_STRT | BOOL | 12.1 | 硬件门状态(启动输入) | TRUE/FALSE | FALSE | |
STS_LTCH | BOOL | 12.2 | 锁存器输入状态 | TRUE/FALSE | FALSE | |
STS_DO | BOOL | 12.3 | 输出状态 | TRUE/FALSE | FALSE | |
STS_C_DN | BOOL | 12.4 | 向下计数的状态。 始终指示最后的计数方向。在第一次调用 SFB 之 后,STS_C_DN 的值为 FALSE。 |
TRUE/FALSE | FALSE | |
STS_C_UP | BOOL | 12.5 | 向上计数的状态。 始终指示最后的计数方向。在第一次调用 SFB 之 后,STS_C_UP 的值为 TRUE。 |
TRUE/FALSE | FALSE | |
COUNTVAL | DINT | 14 | 当前计数值 | -2^31 到 2^31 - 1 | 0 | |
LATCHVAL | DINT | 18 | 当前锁存器值 | -2^31 到 2^31 - 1 | 0 | |
JOB_DONE | BOOL | 22.0 | 作业已完成,可启动新作业 | TRUE/FALSE | TRUE | |
JOB_ERR | BOOL | 22.1 | 错误作业 | TRUE/FALSE | FALSE | |
JOB_STAT | WORD | 24 | 作业错误编号 | 0 到 FFFF (十六进制) | 0 |
在程序编辑窗口中,Library-->Standard Library-->System Function Blocks 中可以找到SFB48:
SFB48可以实现如下功能:
● 通过软件门 SW_GATE 启动/停止
● 启用/控制输出 DO
● 读出状态位
● 读出当前测量值
● 用于读取和写入内部频率计数寄存器的作业
输入 | 参数 | 数据类型 | 在背景数据块中的地址 | 说明 | 值的有效范围 | 缺省值 |
LADDR | WORD | 0 | 在“HW Config”中指定的子模块 I/O 地址。 如果输入和输出地址不相同,则必须指定两者 中较低的地址。 |
16#300 | ||
CHANNEL | INT | 2 | 通道号: | CPU 312C:0~1 CPU 313C CPU或313C-2 DP/PtP:0~2 CPU 314C-2 DP/PtP:0~3 |
0 | |
SW_GATE | BOOL | 4.0 | 软件门, 用于计数器启动/停止 | TRUE/FALSE | FALSE | |
MAN_DO | BOOL | 4.1 | 启用输出手动控制 | TRUE/FALSE | FALSE | |
SET_DO | BOOL | 4.2 | 输出置位 | TRUE/FALSE | FALSE | |
JOB_REQ | BOOL | 4.3 | 作业请求(正跳沿) | TRUE/FALSE | FALSE | |
JOB_ID | WORD | 6 | 作业号 | 不带有功能的作业: 16#00 写入下限: 16#01 写入上限: 16#02 写入积分时间: 16#04 读下限: 16#81 读上限: 16#82 读积分时间: 16#84 |
0 | |
JOB_VAL | DINT | 8 | 写作业的值 | -2^31 到 +2^31-1 | 0 | |
输出 | STS_GATE | BOOL | 12.0 | 内部门状态 | TRUE/FALSE | FALSE |
STS_STRT | BOOL | 12.1 | 硬件门状态(启动输入) | TRUE/FALSE | FALSE | |
STS_LTCH | BOOL | 12.2 | 锁存器输入状态 | TRUE/FALSE | FALSE | |
STS_DO | BOOL | 12.3 | 输出状态 | TRUE/FALSE | FALSE | |
STS_C_DN | BOOL | 12.4 | 向下计数的状态。 始终指示最后的计数方向。在第一次调用 SFB 之 后,STS_C_DN 的值为 FALSE。 |
TRUE/FALSE | FALSE | |
STS_C_UP | BOOL | 12.5 | 向上计数的状态。 始终指示最后的计数方向。在第一次调用 SFB 之 后,STS_C_UP 的值为 TRUE。 |
TRUE/FALSE | FALSE | |
MEAS_VAL | DINT | 14 | 当前频率值 | 0 到 2^31 - 1 | 0 | |
COUNTVAL | DINT | 18 | 当前锁存器值 | -2^31 到 2^31 - 1 | 0 | |
JOB_DONE | BOOL | 22.0 | 作业已完成,可启动新作业 | TRUE/FALSE | TRUE | |
JOB_ERR | BOOL | 22.1 | 错误作业 | TRUE/FALSE | FALSE | |
JOB_STAT | WORD | 24 | 作业错误编号 | 0 到 FFFF (十六进制) | 0 |
当硬件门和软件门打开时(使用软件门控制则仅须软件门打开),计数功能开始进行。用户通过调用SFB47(48)开始计数(频率测量),例如:
CALL "COUNT" , DB47
LADDR :=W#16#300
CHANNEL :=0
SW_GATE :=M0.0
CTRL_DO :=
SET_DO :=
JOB_REQ :=
JOB_ID :=
JOB_VAL :=
STS_GATE:=
STS_STRT:=
STS_LTCH:=
STS_DO :=
STS_C_DN:=
STS_C_UP:=
COUNTVAL:=MD10
LATCHVAL:=
JOB_DONE:=
JOB_ERR :=
JOB_STAT:=
当M0.0 为“1” 时,通道0开始计数。
"LADDR "是通道的逻辑地址,见下图,选择输入、输出地址 中较小的值:
只有当CTRL_DO(频率测量:MAN_DO)和SET_DO同时为‘1’时,对用通道的输出点才会被置位,例如:
L 16#07
T MB0 //将M0.0,M0.1,M0.2置1
CALL "COUNT" , DB47
LADDR :=W#16#300
CHANNEL :=0
SW_GATE :=M0.0
CTRL_DO :=M0.1
SET_DO :=M0.2
JOB_REQ :=
JOB_ID :=
JOB_VAL :=
STS_GATE:=
STS_STRT:=
STS_LTCH:=
STS_DO :=
STS_C_DN:=
STS_C_UP:=
COUNTVAL:=MD10
LATCHVAL:=
JOB_DONE:=
JOB_ERR :=
JOB_STAT:=
此时,通道0对应的输出点DO0会被置位。不同CPU输出点对应的接线端子请参考接线部分。
首先要年个作业号写入JOB_ID,作业值写入JOB_VAL中,再将一个上升沿信号送到JOB_REQ输入。作业操作完成后JOB_DONE会被置1。
下面是一个在计数模式下更新装载时额例子:
L 16#02
T MW2 //将写装载值的任务号16#02写入MW2
L 200
T MD4 //将写新的装载值200写入MD4
L 16#09
T MW2 //置位M0.0, M0.3
CALL "COUNT" , DB47
LADDR :=W#16#300
CHANNEL :=0
SW_GATE :=M0.0
CTRL_DO :=
SET_DO :=
JOB_REQ :=M0.3
JOB_ID :=MW2
JOB_VAL :=MD4
STS_GATE:=
STS_STRT:=
STS_LTCH:=
STS_DO :=
STS_C_DN:=
STS_C_UP:=
COUNTVAL:=MD10
LATCHVAL:=
JOB_DONE:=M20.0
JOB_ERR :=
JOB_STAT:=