高速计数器的编程步骤如下:
设置高速计数器编号和模式
使用`HDEF`指令定义计数器编号和模式。例如,选择计数器编号`HSC0`和模式`0`。
设置控制字节
在特殊存储器(SM)中设置控制字节,包括复位有效电平、倍频选择、计数方向控制位、向HSC写入计数方向、向HSC写入新预设值、向HSC写入新当前值和启用HSC等。
设置初始值和预设值
在特殊存储器(SM)中设置当前值和预设值。例如,初始值为`0`,预设值为`1000`。
分配并启用中断子程序
分配并启用相应的中断子程序,以便在达到特定条件时触发中断。
激活高速计数器
使用`HSC`指令激活高速计数器。
编写中断程序
根据需要编写中断程序,以处理中断事件,例如当前值等于预设值、计数方向改变或外部复位等。
允许全局中断
使用`ENI`指令允许开放高速计数器中断。
测试和验证
在实际应用中测试和验证高速计数器的功能,确保其按预期工作。
实例:利用PLC自发脉冲信号Q0.0输出,发出12000个脉冲,反馈接入PLC高速输入端I0.0,要求在I0.0接收到12000脉冲时停止工作。
初始化及设置参数
初始值为`0`,方向增计数,预设值`1000`。
定义工作模式及高速计数器号
选择高速计数器号`HSC0`,工作模式`0`。
编写中断程序
当`CV=PV`(当前值等于预设值)时,触发中断事件号为`12`。
主程序
在主程序中编写,利用高速计数器中断事件来处理达到的结果。
示例程序:
```pascal
-- 初始化高速计数器
MOV SMB37, 0x01 ; 设置控制字节
MOV SMB47, 0x00 ; 设置当前值
MOV SMB57, 0x00 ; 设置预设值
MOV SMB137, 0x00 ; 设置计数方向控制位(0=减计数)
MOV SMB147, 0x01 ; 设置向HSC写入计数方向(0=不更新)
MOV SMB157, 0x00 ; 设置向HSC写入新预设值(0=不更新)
-- 激活高速计数器
MOV HSC0, 0x00 ; 激活高速计数器
-- 允许全局中断
ENI
-- 主循环
LOOP:
-- 检查中断事件
IF HSC0=12 THEN
-- 中断处理程序
-- 停止工作
CALL STOP_WORK
END_IF
-- 继续循环
JMP LOOP
-- 停止工作子程序
STOP_WORK:
-- 停止所有工作
-- 退出程序
RET
```
通过以上步骤和示例程序,可以实现高速计数器的编程。根据具体需求,可以调整控制字节、初始值和预设值,以及编写相应的中断程序来处理不同的工作条件。