首页 理论教育 CPU计数器指令:轻松访问计数器存储区

CPU计数器指令:轻松访问计数器存储区

时间:2023-06-29 理论教育 版权反馈
【摘要】:在CPU存储器中,有为计数器保留的区域。语句表指令集和梯形图指令集均支持256个计数器。计数器指令是仅有的可访问计数器存储区的函数。设置计数器或进行正常计数时不需起用计数器。也就是说,即使设置计数器的预设值、升值计数器或降值计数器的常数RLO为1,在起用之后也不会再次执行这些指令。例:L 将当前计数器值载入ACCU 1指令格式为:L〈计数器〉可寻址存储区为C。如果输入R为1,则计数器复位,并将计数值设置为零。

CPU计数器指令:轻松访问计数器存储区

计数器是STEP 7编程语言中用于计数的功能单元。在CPU存储器中,有为计数器保留的区域。此存储区为每个计数器保留一个16位字。语句表指令集梯形图指令集均支持256个计数器。计数器指令是仅有的可访问计数器存储区的函数。计数值的范围为0~999,计数字的0~11位是计数值的BCD码。

1.语句表(STL)的计数器指令

(1)FR起用计数器(释放)

指令格式为:FR〈计数器〉

可寻址存储区为C。变量的数据类型为COUNTER型。当RLO从“0”跳转到“1”时,FR〈计数器〉会将边缘检测标记清零,该标记用于设置和选择寻址计数器的升值或降值计数。设置计数器或进行正常计数时不需起用计数器。也就是说,即使设置计数器的预设值、升值计数器或降值计数器的常数RLO为1,在起用之后也不会再次执行这些指令。

例:

(2)L 将当前计数器值载入ACCU 1

指令格式为:L〈计数器〉

可寻址存储区为C。变量的数据类型为COUNTER型。ACCU 1的内容保存到ACCU 2中后,L〈计数器〉将寻址计数器的当前计数值作为整型值载入ACCU 1-L。

例:

L C3 ∥以二进制格式将计数器C3的计数值载入ACCU 1-L

(3)LC 将当前计数器值作为BCD码载入ACCU 1

指令格式为:LC〈计数器〉

可寻址存储区为C。变量的数据类型为COUNTER型。ACCU 1的原有内容保存到ACCU 2中后,LC〈计数器〉将寻址计数器的计数值作为BCD码载入ACCU 1。

例:

LC C3 ∥以二进制编码的十进制格式(BCD)将计数器C3的计数值载入ACCU 1-L

(4)R 将计数器复位

指令格式为:R〈计数器〉

可寻址存储区为C。变量的数据类型为COUNTER型。如果RLO=1,R〈计数器〉会将“0”载入寻址计数器中。

例:

A I2.3 ∥检查输入I 2.3的信号状态

R C3 ∥如果RLO从0变到1,则将计数器C3复位到0

(5)S设置计数器预设值

指令格式为:S〈计数器〉

可寻址存储区为C。变量的数据类型为COUNTER型。当RLO从“0”跳转到“1”时,S〈计数器〉将ACCU 1-L的计数值载入寻址计数器。ACCU 1中的计数值必须是介于“0”和“999”之间的BCD码形式的数值。

例:

(6)CU 升值计数器

指令格式为:CU〈计数器〉

寻址存储区为C。变量的数据类型为COUNTER型。当RLO从“0”跳转到“1”,并且计数小于“999”时,CU〈计数器〉将寻址计数器的计数值增1。当计数值达到上限“999”时,升值过程停止。RLO的附加跳转无效,而且溢出的OV位不被置位。

例:

(7)CD 降值计数器

指令格式为:CD〈计数器〉

寻址存储区为C。变量的数据类型为COUNTER型。当RLO从“0”跳转到“1”,并且计数大于0时,CD〈计数器〉将寻址计数器的计数值减1。当计数达到下限“0”时,降值过程停止。由于计数器不用负值计数,所以RLO的附加跳转无效。

例:

2.梯形图(LAD)的计数器指令

(1)S_CUD 双向计数器

指令符号为:

Cno.为计数器标识号,寻址存储区为C。(www.xing528.com)

CU为升值计数输入;CD为降值计数输入;S为预设计数器设置输入;PV为预设计数器的值,将计数器值以“C#〈值〉”的格式输入(范围为0~999);R为复位输入;CV为当前计数器值,十六进制数字;CV_BCD为当前计数器值;BCD码Q为计数器状态,寻址存储区均为I、Q、M、L、D。

如果输入S有上升沿,S_CUD(双向计数器)预置为输入PV的值。如果输入R为1,则计数器复位,并将计数值设置为零。如果输入CU的信号状态从“0”切换为“1”,并且计数器的值小于“999”,则计数器的值增1。如果输入CD有上升沿,并且计数器的值大于“0”,则计数器的值减1。如果两个计数输入都有上升沿,则执行两个指令,并且计数值保持不变。如果已设置计数器,并且输入CU/CD的RLO=1,则即使没有从上升沿到下降沿或下降沿到上升沿的切换,计数器也会在下一个扫描周期进行相应的计数。如果计数值大于等于零(“0”),则输出Q的信号状态为“1”。避免在多个程序点使用同一计数器(可能出现计数出错)。

例:

如果I0.2从“0”变为“1”,则计数器预设为MW10的值。如果I0.0的信号状态从“0”改变为“1”,则计数器C10的值将增加1,当C10的值等于“999”时除外。如果I0.1从“0”改变为“1”,则C10减少1,但当C10的值为“0”时除外。如果C10不等于零,则Q4.0为“1”。

(2)S_CU 升值计数器

指令符号为:

Cno.为计数器标识号,寻址存储区为C。

CU为升值计数输入;S为为预设计数器设置输入;PV为预设计数器的值,将计数器值以“C#〈值〉”的格式输入(范围为0~999);R为复位输入;CV为当前计数器值,十六进制数字;CV_BCD为当前计数器值;BCD码Q为计数器状态,寻址存储区均为I、Q、M、L、D。

如果输入S有上升沿,则S_CU(升值计数器)预置为输入PV的值。如果输入R为“1”,则计数器复位,并将计数值设置为零。如果输入CU的信号状态从“0”切换为“1”,并且计数器的值小于“999”,则计数器的值增1。如果已设置计数器,并且输入CU的RLO=1,则即使没有从上升沿到下降沿或下降沿到上升沿的切换,计数器也会在下一个扫描周期进行相应的计数。如果计数值大于等于零(“0”),则输出Q的信号状态为“1”。

例:

如果I0.2从“0”改变为“1”,则计数器预置为MW10的值。如果I0.0的信号状态从“0”改变为“1”,则计数器C10的值将增加1,当C10的值等于“999”时除外。如果C10不等于零,则Q4.0为“1”。

(3)S_CD 降值计数器

指令符号为:

如果输入S有上升沿,则S_CD(降值计数器)设置为输入PV的值。如果输入R为1,则计数器复位,并将计数值设置为零。如果输入CD的信号状态从“0”切换为“1”,并且计数器的值大于零,则计数器的值减1。如果已设置计数器,并且输入CD的RLO=1,则即使没有从上升沿到下降沿或下降沿到上升沿的改变,计数器也会在下一个扫描周期进行相应的计数。如果计数值大于等于零(“0”),则输出Q的信号状态为“1”。

例:

如果I0.2从“0”改变为“1”,则计数器预置为MW10的值。如果I0.0的信号状态从“0”改变为“1”,则计数器C10的值将减1,当C10的值等于“0”时除外。如果C10不等于零,则Q4.0为“1”。

(4)---(SC) 设置计数器值

指令符号为: 〈C编号〉

---(SC)

〈C编号〉为要预置的计数器编号。〈预设值〉的寻址存储区为I、Q、M、L、D或常数,预置BCD的值(0~999)。---(SC)(设置计数器值)仅在RLO中有上升沿时才会执行。此时,预设值被传送至指定的计数器。

例:

如在I0.0有上升沿(从“0”改变为“1”),则计数器C5预置为100。如果没有上升沿,则计数器C5的值保持不变。

(5)---(CU) 升值计数器线圈

指令符号为:〈C编号〉

---(CU)

〈C编号〉为要预置的计数器编号,其范围依赖于CPU,如在RLO中有上升沿,并且计数器的值小于“999”,则---(CU)(升值计数器线圈)将指定计数器的值加1。如果RLO中没有上升沿,或者计数器的值已经是“999”,则计数器值不变。

例:

如果输入I0.0的信号状态从“0”改变为“1”(RLO中有上升沿),则将预设值100载入计数器C10。如果输入I0.1的信号状态从“0”改变为“1”(在RLO中有上升沿),则计数器C10的计数值将增加1,但当C10的值等于“999”时除外。如果RLO中没有上升沿,则C10的值保持不变。如果I0.2的信号状态为“1”,则计数器C10复位为“0”。

(6)---(CD) 降值计数器线圈

指令符号为:〈C编号〉

---(CD)

如果RLO状态中有上升沿,并且计数器的值大于“0”,则---(CD)(降值计数器线圈)将指定计数器的值减1。如果RLO中没有上升沿,或者计数器的值已经是“0”,则计数器值不变。

例:

如果输入I0.0的信号状态从“0”改变为“1”(RLO中有上升沿),则将预设值100载入计数器C10。

如果输入I0.1的信号状态从“0”改变为“1”(在RLO中有上升沿),则计数器C10的计数值将减1,但当C10的值等于“0”时除外。如果RLO中没有上升沿,则C10的值保持不变。

如果计数值=0,则接通Q4.0。

如果输入I0.2的信号状态为“1”,则计数器C10复位为“0”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈