说说200 smart高速计数器的计数6
上文说到西门子编程方法灵活、多变,充分体现了“高深莫测”、“多样化”、“个性化”的理念,给编程者充满想象的空间和无穷的动力。
今天逛论坛,在【说说200 smart高速计数器的计数5】中看到网友的留言,关于采用高速计数器如何编辑电子凸轮的问题,因为对此问题的交流还不够深入透彻,仅仅是大致的理解,可能存在偏题。
记得在第三方PLC编程指令中有2个电子凸轮控制指令可以直接调用,即绝对式电子凸轮控制指令【ABSD】和相对式电子凸轮控制指令【INCD】,虚拟的触点数允许范围1~64组(个)。但这些指令均不采用中断方式调用,计数器也是普通型,在实际应用中可能会在某些特殊的场合引起一些响应偏差,尤其是在高速系统应用上,这个偏差更加突出。
晚上回家想了想那个留言,好像是说最好采用高速计数器HSC0,模式9做,正好我前几次做验证时的那个编码器还没有拆掉,就使用高速计数器HSC0,模式9做试试。
编程思路:均按4对(个)触点编辑为例
简要说明:200 smart PLC允许用户最多分别新建128个子程序和中断子程序。
1) 绝对式电子凸轮:
A) 定义高速计数器控制字节 10111100(16# EC)
B) 定义当前值SMD38 = 0
C) 定义预设值SMD42 = 8个(2个预设值为一组,分别控制开、关)
D)启用高速计数器HSC0,模式9(A、B正交,不连接Z相脉冲输入)
E) 定义当前值等于预设值中断,中断事件号12
F) 启用高速计数器
当前值等于预设值时,调用中断,在中断子程序中编辑更新预设值及相应的控制程序
假设,电子凸轮第一组数据:100个脉冲后开、150个脉冲后关;第二组数据:150个脉冲后开,180个脉冲后关;第三组数据:300个脉冲后开,360个脉冲后关;第四组数据:360个脉冲后开,400脉冲后关。
开关组数列表统计:

上述组数开关可以自行设置任意数据,没有次序关联,第一组电子凸轮开设置在初始化子程序中,当然,如果需要回原点的系统中,程序执行原点回归后可以重新初始化子程序一次。
程序:
初始化子程序:

主程序调用:

当前值等于预设值中断子程序:INT2(第一组开关开)

当前值等于预设值中断子程序:INT3(第一组开关关)

当前值等于预设值中断子程序:INT3(第二组开关开)

当前值等于预设值中断子程序:INT4(第二组开关关)

当前值等于预设值中断子程序:INT5(第三组开关关,第四组开关开)

当前值等于预设值中断子程序:INT6(第四组开关关),重新返回到第一个中断事件做循环

将程序编译、保存到指定的盘符,连接外部编码器接线及电源、通讯电缆。确认无误后,上电,将程序下载到cpu,新建“状态图表”监控程序,图示:

监控“状态图表”程序按思路方式循环运行正确无误。
2) 相对式电子凸轮:
A) 定义高速计数器控制字节 (16# FC)
B) 调用当前值SMD38 = 0,在中断子程序中调用设置当前值SMD38= 0
C) 定义预设值SMD42 = 8个(2个预设值为一组,分别控制开、关)也可以采用其它方式
D)启用高速计数器HSC0,模式9(A、B正交,不连接Z相脉冲输入)
E) 定义当前值等于预设值中断,中断事件号12,同一个中断事件可以连接不同的中断
F) 启用高速计数器
G)当当前值等于预设值时,调用中断,在中断子程序中编辑更新当前值、预设值及相应的控制程序
开关组数列表统计:仍然按绝对式电子凸轮定义开关数据

与绝对值不同的程序之处增加了在各中断中重新定义当前值,变更初始化子,具体程序验证在此省略了。
数据关系看似一致,但相对式电子凸轮每次重新启动当前值均从0开始计数,而绝对式是从原值上进行累加的,只要是理清了这个思路,编写程序就不是问题了。
不知道我这样的理解是否是你想要的那种?如果不是,请详细描述具体过程。
哦,对了。还需要重申一下的是200 smart PLC在使用高速计数器程序时,必须在“系统块”中的“数字量输入”中重新设置滤波时间,并在“启动”项中设置为“RUN”模式。