S7-200 高速计数器简单案例(2)
前面以几个较简单的程序案例学习了一下高速计数器的应用,那么今天就做几个稍微复杂一些的程序案例,提高一下对高速计数器的掌握程度和熟练应用。
1、用编码器测量电机转速与频率
主程序:
子程序:
中断程序:
以上的程序中,在主程序中,用I0.7的上升沿调用高速计数器初始化子程序,然后做一个高速计数器初始化的子程序,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,这里没有写入初始值和预设值,定义的是高速计数器HSC0和HSC模式1,然后激活高速计数器,还做了高速计数器中断,我们设置定时中断0的时间间隔为100ms,因为SMB34的定时中断0为中断事件号10,我们建立中断程序0和中断事件10的中断连接,并全局允许中断。
然后再看一下中断程序,因为是100ms的定时中断,每100ms执行一次中断程序。我们就用100ms计算的脉冲个数,再乘以600化成1分钟的脉冲个数,再除于分辨率就是等于转速,程序中的500就是编码器的分辨率。而对于编码器的频率的计算,我们有这样一个公式,频率/工频50Hz=转速/工频下的转速,所以频率=(转速/工频下的转速)*工频50Hz,这里我们先把双整数的转速转换成实数,再除以工频下的转速1488.0,再乘以工频50.0Hz,那么就得到了编码器的频率了。
2、用编码器测量机床位置,不论机床朝正方向移动或朝反方向移动,都能知道机床的当前位置,有一原点位置感应开关I0.7,当原点位置感应开关接通时,机床的当前位置为0。假设编码器的分辨率为1024,丝杆的进给量即转1圈移动的位置为10,计算公式是当前值除以分辨率,再乘于进给量)
主程序:
子程序:
以上的程序中,首先做一个高速计数器初始化的子程序,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,这里没有写入初始值和预设值,定义的是高速计数器HSC0和HSC模式1,然后激活高速计数器。
在主程序中,用I0.7的上升沿调用高速计数器初始化子程序。然后是做机床朝正方向移动的控制,做个起保停程序,当I0.3接通时,Q0.0接通并自锁,在Q0.0接通的上升沿传送16#B8到SMB37(加计数不更新当前值),同时激活高速计数器。然后是做机床朝反方向移动的控制,做个起保停程序,当I0.4接通时,Q0.1接通并自锁,在Q0.1接通的上升沿传送16#B0到SMB37(减计数不更新当前值),同时激活高速计数器。
后面还做了一个用SM0.1常闭触点的上升沿来调用高速计数器初始化的子程序,并且用SM0.1的常开触点来驱动传送指令传送VD1000的值到SMD38,用SM0.1的常闭触点来驱动传送指令传送HC0的值到VD1000,这里是为了实现停电保持功能。PLC从STOP拨向RUN时,在第一个扫描周期之后会传送HC0的计数值到VD1000里面进行存储,当PLC断电后再从STOP拨向RUN时,SM0.1接通一个扫描周期,把VD1000存储的计数器传到到SMB38,那么当前值就是存储在VD1000里面的值。然后再做一个计算,把双整数HC0的当前值转换成实数,再进行HC0的当前值除以分辨率1024.0,再乘于进给量10.0,这样就可以测量出机床位置。
那么以上就是一些简单的高速计数器的应用,比较详细的讲了一下,可以理解吗?