说说200 smart高速计数器的计数3
上文说到利用旋转编码器模拟主轴的编程思路,调用改变方向中断(中断事件号27)、及当前值等于预设值(中断事件号12),编辑模拟主轴的控制程序。因前一段时间没有验证过已经编写好的控制程序,故临时用了普通指令替代,今看到热心的网友也提示了这个问题,在这里表示感谢!是的,只有大家积极的参与讨论,有些平时没有关注过的或者是尚未理解透彻的一些问题均可以在讨论中得到解决或者提示。利用这3个中断编写的程序失败的原因是调用改变方向中断时,仅仅只有正转(加计数)时,该中断才被激活,而反转(减计数)时无法被再次激活改变方向中断(中断选取不合理)。另外,编程进入死胡同的原因是我的程序并没有告知PLC需要改变方向的判断指令,使程序思路一时无法实现,现改变思路利用外部I0.2的上升沿、下降沿中断重新赋值测试,就是告诉PLC我现在需要改变模拟的电机旋转方向了,让PLC事先做好相应的计数准备工作。
编程思路:
初始化高速计数器程序:
1) 定义高速计数器控制字节,SMB37 = F8
2) 定义带断电数据保持的当前值,SMD38 = 0,如果需要断电保持,则采用VD0地址
3) 定义预设值,SMD42 = 360(记录旋转编码器脉冲数据)
4) 定义高速计数器号HSC0,模式9,因为连接的是A/B正交输出型旋转编码器,不连接Z相输入,硬件决定
5) 启用外部输入I0.2上升沿中断,中断事件号4;启用外部输入I0.2下降沿中断,中断事件号5,启用当前值等于预设值中断,中断事件号12后连接各自的中断
6) 开中断
7) 启用高速计数器HSC0
8) 如果需要改变计数方向,则使用外部中断状态重新写入预设值,当前值不变,重新启用高速计数器并调用当前值等于预设值中断,使在不改变方向的前提下始终调用该中断。
程序:
初始化高速计数器子程序:

主程序调用初始化子程序:

I0.2上升沿中断程序:

I0.2下降沿中断程序:重新设置预设值为负,反方向

为了监控方便,打开“状态图表”,输入需要监控的地址VD0,监控高速计数器运行情况,编译、保存到指定的盘符,连接一个开关模拟电机旋转方向的判断,并将程序下载到cpu,启动PLC运行,当断开I0.2时,高速计数器被锁在0-(-360)之间,图示:

闭合I0.2开关时,即调用上升沿中断内容,高速计数器被锁在0-360数据之间,图示:

编写高速计数器的一般步骤:
1) 编写高速计数器前首先确认外部输入元件的类型
2) 编写高速计数器初始化子程序并在主程序中调用SM0.1或沿触发
3) 根据高速输入元件类型选择相应的高速计数器号及计数模式并启用
4) 根据实际需要定义高速计数器控制字节
5) 定义当前值和预设值
6) 启用相应的中断并开中断
7) 启动高速计数器
8) 在相应的中断程序中编写相应的控制程序
9) 调用高速计数器数据,编辑相应的控制程序,根据需要启用断电保持功能
10) 连接外部元件确认正确后上电并测试程序