wwcwwc
级别: VIP会员

精华主题: 0
发帖数量: 3393 个
工控威望: 3189 点
下载积分: 70437 分
在线时间: 1604(小时)
注册时间: 2008-04-20
最后登录: 2024-11-19
查看wwcwwc的 主题 / 回贴
楼主  发表于: 2017-06-17 11:23
说说200 smart高速计数器的计数

    以前,做过几次200 PLC的高速计数器应用,连接的是编码器或者光栅尺之类,深深对它比较稳定的特性记忆犹新。200虽然已离我们渐行渐远了,而200 smart PL的高速计数器性能或者编程情况又将如何?
   今拿了一个第三方的增量型旋转编码器来测试,看在200 smart PLC下如何能够稳定的运行。测试高速计数功能的增量型编码器电压24V,1000线,A/B正交;Z相零脉冲输出型,这对于使用过用PLC作为高速输入载体的同事,是非常熟悉不过的事情。
200smart PLC本体集成了4个高速计数器(HSC0~HSC3),如果单相输入时,最高计数频率达200K hz,这在同类型小型PLC中也算是比较高的了,并且允许输入NPN;PNP输出型的高速计数器,所支持的电压有24V和部分5V的产品。200 smart PLC沿用原200对高速计数器的向导功能方便用户使用,这对刚刚开始使用者是一个好办法,把一些所谓比较复杂的控制用向导方式加以简化。既然是说200 smart PLC的高速计数器,那先需要熟悉高速计数器的工作模式。
200 smart PLC高速计数器的工作模式:
1)单相高速计数器,内部方向控制
2)单相高速计数器,外部方向控制
3)双向增、减高速计数器,双路高速脉冲输入
4)A/B正交高速脉冲计数器
上述4类高速输入模式的每一类还可以分:
1)    无复位、无启动输入
2)    有复位、无启动输入
3)    有复位、有启动输入
其中,HSC0和HSC2支持8种高速计数器模式(0、1、3、4、6、7、9、10),HSC1和HSC3仅仅支持模式(0)
下面,我用向导的方式编辑一个高速计数器控制程序,根据高速计数器外部输入元件A/B正交型编码器,选择所对应的高速计数器号,打开200 smart 软件,选择一款与实际PLC型号一致的cpu,CR60。点击“工具”按钮,软件上部的工具栏中出现“高速计数器”向导,选择高速计数器模式0或(2),点击“下一页”按钮,选择高速计数器名称,这里选择默认名称,点击“下一页”,这里 选择模式,因为我的高速输入为A/B正交型编码器,只能选择模式9、10,这里选择模式9,图示:A/B正交,无复位输入(不连接Z相输入)

点击“下一页”,定义高速计数器子程序名称,这里选择默认名称,在“值”选项中先设置“预设值”= 10000,不设置“当前值”,在“选项”的输入初始计数方向设置为“上”,计数速率选择1倍频方式,图示:

点击“下一页”选择“中断”,这里选择“当前值等于预设值(CV = PV)中断,并产生一个中断源,图示:

点击“下一页”,不选择“步”,直接点击“下一页”,在“组件”中可以看到之前用向导生成地方子程序和中断程序,图示:

点击“下一页”,进入“映射”,这个窗口主要是对外部连接的一些定义,输入端子,其中A相连接I0.0;B相连接I0.1,其它设置在“系统块”中可以修改,图示:

点击“下一页”,完成高速计数器向导,点击“生成”,图示:

向导完成后,点开左侧目录树下的“程序块”,系统已经自动映射了一个高速计数器子程序和一个当前值等于预设值的中断程序,图示:

用户仅仅需要调用一个初始化高速计数器子程序及中断程序就可以使用高速计数器功能了,用SM0.1调用初始化高速计数器子程序,图示:

我这里先做一个当高速计数器的当前值等于预设值时,在中断中启动Q0.0作为高速计数器数据达到时的标记,并在主程序中允许随意复位,图示:

主程序复位程序,图示:

选择“系统块”,打开“数字量输入”,将默认6.4mS的刷新时间修改为3.2uS,并勾选“脉冲捕捉,图示:

最后,连接外部编码器接线、通讯连接线后,把程序编译、下载到cpu中等待测试,借用西门子官方提供的CAD图纸连接编码器接线示意,图示:

启动PLC运行,为监控高速计数器输出数据,新建“状态图表”,图示:

当前值等于10000个脉冲数后,立即进入中断置位了Q0.0,实验成功。
小结:
无论是那种方式组态高速计数器(向导或直接赋值给相应的控制字、状态字),其目的就是设置控制字SMB37;初始值SMD38;预设值SMD42;定义高速计数器模式;启动高速计数器号,开中断这些基本步骤。高速计数器允许调用若干种类的中断,参见中断事件优先级表单,关于各高速计数器中断的含义及中断号。设置完成与外部元件对应的参数后(向导中的映射窗口有硬件连接地址),用SM0.1调用初始化子程序即可,如果需要实时调用高速计数器的当前值,用MOV_DW将HC*传送到一个数据寄存器中,当然这个简单的传送与程序的扫描机制关联着刷新机制,这样的调用建议在主程序中进行,用户在实际应用中需要引起注意。
[ 此帖被wwcwwc在2017-06-17 11:39重新编辑 ]
weilller
级别: 略有小成
精华主题: 0
发帖数量: 126 个
工控威望: 250 点
下载积分: 466 分
在线时间: 34(小时)
注册时间: 2008-03-28
最后登录: 2024-09-21
查看weilller的 主题 / 回贴
1楼  发表于: 2018-01-10 13:17
楼主伟大