说说200 smart高速计数器的计数2
上文说到编写西门子200 smart PLC采用直接编程方式编写测试例子程序,及编写类似程序中需要注意的关键问题。今天再来编写一个模拟主轴位置程序,假设,仍然使用旋转编码器货号:koyo TRD-2T1000BF模拟一个假象的主轴,该旋转编码器转动一周产生1000个脉冲,通过高速计数器读取到高速脉冲转换为-360~360度的位置值,其中正、负符号表示主轴方向。
编写该程序的思路:使用高速计数器号HSC0
初始化高速计数器:
1) 设置控制字节SMB37 = 16# F8
2) 设置当前值SMD38 = 0
3) 设置预设值SMD42 = 360
4) 定义高速计数器模式:HSC0模式9
5) 开改变方向中断,中断事件号27(目的是监控SM36.5的值)
有网友提问该位的状态含义
6) 开中断
7) 启用高速计数器HSC0
主程序调用初始化,当高速计数器的当前值大于360时,重新写入0值;同样,当高速计数器反转当前值小于-360时,重新写入0值。这样让高速计数器转换始终在-360~360的脉冲数据复范围内作正、负方向的位置显示,当然实际应用还需要进行编码器与实际主轴的减速比关系,为方便理解这里不再作转换控制的程序。
程序:
初始化高速计数器:

主程序调用:

当高速计数器大于360或者小于-360时,重新清0:

改变方向中断检测程序:也可以直接监控标志位SM36.5的状态

编译、保存程序,连接外部编码器及plc电源,上电测试,新建“状态图表”,图示:
当增计数时:SM36.5 = 1

当减计数时:SM36.5 = 0

高速计数器显示在-360~+360之间变化的数据。
上次在回复网友提问中没有详细说明该位的含义,该位状态只有在调用“改变方向”中断时,与文档的说明一致显示为加(增)计数时=1,减计数时=0。当调用“当前值等于预设值”中断时,该位当前值等于预设值时=1,大于预设值仍然=1。
帮助文档,图示:
