S71200 计数器指令详解Word格式.docx
《S71200 计数器指令详解Word格式.docx》由会员分享,可在线阅读,更多相关《S71200 计数器指令详解Word格式.docx(11页珍藏版)》请在冰点文库上搜索。
计数器类型
计数器类型(TIA博途V14开始)
计数范围
SINT
IEC_SCOUNTER
CTU_SINT
CTD_SINT
CTUD_SINT
-128~127
INT
IEC_COUNTER
CTU_INT
CTD_INT
CTUD_INT
-32768~32767
DINT
IEC_DCOUNTER
CTU_DINT
CTD_DINT
CTUD_DINT
-2147483648~2147483647
USINT
IEC_USCOUNTER
CTU_USINT
CTD_USINT
CTUD_USINT
0~255
UINT
IEC_UCOUNTER
CTU_UINT
CTD_UINT
CTUD_UINT
0~65535
UDINT
IEC_UDCOUNTER
CTU_UDINT
CTD_UDINT
CTUD_UDINT
0~4294967295
表2计数器引脚汇总
输入的变量
名称
说明
数据类型
备注
CU
加计数输入脉冲
BOOL
仅出现在CTU、CTUD
CD
减计数输入脉冲
仅出现在CTD、CTUD
R
CV清0
LD
CV设置为PV
PV
预设值
整数
输出的变量
Q
输出位
仅出现在CTU、CTD
QD
仅出现在CTUD
QU
CV
计数值
表3计数器使用及时序图
指令
时序图
加计数
LAD:
SCL:
CTU
每当CU从“0”变为“1”,CV增加1;
当CV=PV时,Q输出“1”,此后每当CU从“0”变为“1”,Q保持输出“1”,CV继续增加1直到达到计数器指定的整数类型的最大值。
在任意时刻,只要R为“1”时,Q输出“0”,CV立即停止计数并回到0。
减计数
CTD
每当CD从“0”变为“1”,CV减少1;
当CV=0时,Q输出“1”,此后每当CU从“0”变为“1”,Q保持输出“1”,CV继续减少1直到达到计数器指定的整数类型的最小值。
在任意时刻,只要LD为“1”时,Q输出“0”,CV立即停止计数并回到PV值。
加减计数
CTUD
每当CU从“0”变为“1”,CV增加1,每当CD从“0”变为“1”,CV减少1;
当CV>
=PV时,QU输出“1”,当CV<
PV时,QU输出“0”;
当CV<
=0时,QD输出“1”,当CV>
0时,QD输出“0”;
CV的上下限取决于计数器指定的整数类型的最大值与最小值。
在任意时刻,只要R为“1”时,QU输出“0”,CV立即停止计数并回到0;
只要LD为“1”时,QD输出“0”,CV立即停止计数并回到PV值。
S7-1200计数器创建
S7-1200计数器创建有以下几种方法:
1.指令直接拖入块中,自动生成计数器的背景数据块,该块位于“系统块>
程序资源”中,参见图2。
需要在指令中修改计数值类型。
图2自动生成计数器的背景数据块
2.指令直接拖入FB块中,生成多重背景,参见图3。
多重背景的数据类型在TIA博途V14之前是IEC_COUNTER类型,从TIA博途V14开始是CTU_INT、CTD_INT、CTUD_INT等类型(取决于指令)。
图3多重背景
3.指令直接拖入FB、FC块中,生成参数实例,从TIA博途V14开始,参见图4。
图4参数实例
4.在DB块、FB的静态变量、FC和FB的INOUT变量中新建IEC_COUNTER、CTU_INT、CTD_INT、CTUD_INT类型变量,在程序中将计数器指令拖入块中时,在弹出的“调用选项”页面点击“取消”按钮,之后将该建好的变量填入指定位置。
(1)DB块中新建IEC_COUNTER等类型变量(LAD/FBD),如果是IEC_COUNTER等类型变量的数组,S7-1200从V2.0版本开始支持,参见图5、6。
图5DB块中的定义
图6计数器使用
(2)FB的静态变量中新建IEC_COUNTER等类型变量(LAD/FBD),如果是IEC_COUNTER等类型变量的数组,S7-1200从V2.0版本开始支持,参见图7。
图7静态变量中定义
(3)FC和FB的INOUT变量中新建IEC_COUNTER等类型变量(LAD/FBD),如果是IEC_COUNTER等类型变量的数组,S7-1200从V2.0版本开始支持,从TIA博途V14开始支持IEC_COUNTER等类型变量的变长数组(ARRAY[#]),参见图8。
图8INOUT中定义
(4)以上三种方法的SCL版本,从TIA博途V14开始支持,参见图9。
图9SCL中使用
从以上四个示例可以看出,IEC_COUNTER、CTU_INT、CTD_INT、CTUD_INT四种数据类型没有本质的区别,可以互换使用,为使得程序明确,建议只使用计数器对应名字的数据类型。
5.在插入DB时,选择IEC_COUNTER类型的数据块,将该数据块填在指令上方。
此种方法生成的数据块等同于第一种的背景数据块,位于“系统块>
程序资源”中,从TIA博途V11开始,参见图10.
图10新建IEC_COUNTER类型DB
S7-1200计数器常见问题
1.为什么计数器不计数?
答:
可能原因如下:
(1)计数器的输入位(CU、CD)需要有电平信号的跳变,计数器才会计数。
如果保持不变的信号作为输入位是不会开始计数的。
(2)计数器的背景数据块重复使用。
2.如何编程自复位计数器并产生脉冲?
正确答案见图11,错误答案见图12、13。
图11正确程序
图12错误程序1
图13错误程序2
正确原因:
当计数值达到10,"
DB77"
.Static_15(False)作为计数器R的输入,并没有复位,Q输出"
.Static_15为True,在下一周期时执行复位指令,使得计数值清零,之后Q输出"
.Static_15为False,实现自复位计数器并产生脉冲。
错误1原因:
当计数值达到10,首先置位"
数据块_2"
.QU,紧接着"
.QU作为计数器R的输入,使得计数值清零,同时复位"
.QU,在下一网络段"
.Static_15依然是False,无法实现脉冲。
错误2原因:
.CV=10,紧接着"
.CV与"
.PV的比较结果(True)作为计数器R的输入,使得计数值清零,同时复位"
从例子可知,计数器的执行是先处理输入,再处理输出,在指令块执行过程中,内部变量(例如QU、CV)可能出现多次变化。