1.实验的基本要求
用高速脉冲输出功能产生周期为2ms,占空比为50%的PWM脉冲列,送给高速计数器HSC1计数。
期望的高速计数器的当前计数值和Q0.4~Q0.6的波形见图3-83。HSC1的初始参数如下:当前值的初始值为0,加计数,当前值小于预设值2000时仅Q0.4为1状态。
当前值等于2000时产生中断,中断程序令HSC1仍然为加计数,新的预设值为3000,Q0.4被复位,Q0.5被置位。当前值等于3000时产生第二次中断,HSC1改为减计数,新的预设值为1500,Q0.5被复位,Q0.6被置位。当前值等于1500时产生第3次中断,HSC1的当前值被清0,改为加计数,新的预设值为2000,Q0.6被复位,Q0.4被置位。实际上是一个新的循环周期开始了。
由于出现中断的次数远比HSC的计数次数少,因此可以实现对快速操作的精确控制。
2.硬件接线
作者做实验使用的是继电器输出的CPU 1214C,为了输出高频脉冲,使用了一块2DI/2DQ信号板。图3-84是硬件接线图,用信号板的输出点Q4.0发出PWM脉冲,送给HSC1的高速脉冲输入点I0.0计数。使用PLC内部的脉冲发生器的优点是简单方便,做频率测量实验时易于验证测量的结果。
CPU的L+和M端子之间是内置的DC24V电源。将它的参考点M与数字量输入的内部电路的公共点1M相连,用内置的电源作输入回路的电源。内置的电源同时又作为2DI/2DQ信号板的电源。电流从DC24V电源的正极L+流出,流入信号板的L+端子,经过信号板内部的MOSFET(场效应晶体管)开关,从Q4.0输出端子流出,流入I0.0的输入端,经内部的输入电路,从1M端子流出,最后回到DC24V电源的负极M点。
图3-83 高速计数器的当前计数值波形图
图3-84 硬件接线图
也可以用外部的脉冲信号发生器或增量式编码器为高速计数器提供外部脉冲信号。
3.PWM的组态与编程
组态PTO1/PWM1产生PWM脉冲(见图3-74),输出源为信号板上的输出点,时间单位为ms,脉冲宽度的格式为百分数,脉冲的周期为2ms,初始脉冲宽度为50%。
在OB1中调用CTRL_PWM指令(见图3-76),用I0.4启动脉冲发生器。
4.高速计数器的组态
组态时设置HSC1的工作方式为单相脉冲计数(见图3-80),使用CPU集成的输入点I0.0,通过用户程序改变计数的方向。设置HSC的初始状态为加计数,初始计数值为0,初始参考值为2000(见图3-80和图3-81)。出现计数值等于参考值的事件时,调用硬件中断组织块OB40(见图3-82)。HSC默认的地址为ID1000,在运行时可以用该地址监视HSC的计数值。
5.程序设计
由高速计数器实际计数值的波形图(见图3-83)可知,HSC以循环的方式工作。每个循环周期产生3次计数值等于参考值的硬件中断。可以生成3个硬件中断OB,在OB中用“将OB与中断事件脱离”指令DETACH断开硬件中断事件与原来的中断OB的连接(见4.3.5节),用“将OB附加到中断事件”指令ATTACH将下一个中断OB指定给中断事件。
本节的程序采用另一种处理方法,设置MB11为标志字节,其取值范围为0、1、2,初始值为0。HSC1的计数值等于参考值时,调用OB40。根据MB11的值,用比较指令来判断是图3-83中的哪一次中断,以调用不同的“控制高速计数器”指令CTRL_HSC,来设置下一阶段的计数方向、计数值的初始值和参考值,同时对输出点进行置位和复位处理。处理完后,将MB11的值加1,运算结果如果为3,将MB11清零(见图3-85)。
组态CPU时,采用默认的MB1作系统存储器字节(见图1-28)。CPU进入RUN模式后,M1.0仅在首次扫描时为TRUE。在OB1中,用M1.0的常开触点将标志字节MB11清零(见图3-86),将输出点Q0.4置位为1。
图3-85 OB40的程序段4的程序(www.xing528.com)
图3-86 OB1中的初始化程序
图3-87中的高速计数器控制指令CTRL_HSC的输入参数HSC为HSC1的硬件标识符。EN为1时,参数BUSY为1,STATUS是执行指令的状态代码。
DIR为TRUE时,计数方向NEW_DIR(1为加计数,-1为减计数)被装载到HSC。只有在组态时设置计数方向由用户程序控制,参数DIR才有效。
CV为TRUE时,32位计数值NEW_CV被装载到HSC。
RV为TRUE时,32位参考值NEW_RV被装载到HSC。
PERIOD为TRUE时,频率测量的周期NEW_PERIOD(单位为ms)被装载到HSC。
如果请求修改参数的DIR、CV、RV、PERIOD为FALSE,相应的输入值被忽略。
将组态数据和用户程序下载到CPU后,进入RUN模式。用外接的小开关使I0.4为TRUE,信号板的Q4.0开始输出PWM脉冲,送给I0.0计数。因为传送的是占空比为0.5的脉冲,Q4.0和I0.0的LED的亮度比I0.4的LED的稍微暗一点。
开始运行时使用组态的初始值,计数值小于参考值2000时(见图3-83),输出Q0.4为1状态。计数值等于参考值时产生中断,调用硬件中断组织块OB40。此时标志字节MB11的值为0,OB40的程序段1中的比较触点接通(见图3-87),调用第一条CTRL_HSC指令,CV为0,HSC1的实际计数值保持不变。RV为1,将新的参考值3000送给HSC1。复位Q0.4,置位下一阶段的输出Q0.5。在程序段4将MB11的值加1(见图3-85)。
当计数值等于参考值3000时产生中断,第2次调用硬件中断组织块OB40。此时标志字节MB11的值为1,OB40的程序段2中的比较触点接通(见图3-88),调用第2条CTRL_HSC指令,CV为FALSE,HSC1的实际计数值保持不变。RV为1,装载新的参考值1500。DIR为1,NEW_DIR为-1,将计数方向改为减计数。复位Q0.5,置位下一阶段的输出Q0.6。在程序段4将MB11的值加1。
图3-87 OB40的程序段1的程序
图3-88 OB40的程序段2的程序
当计数值等于参考值1500时产生中断,第3次调用硬件中断组织块OB40。此时标志字节MB11的值为2,OB40的程序段3中的比较触点接通(见图3-89),调用第3条CTRL_HSC指令。RV为1,装载新的参考值2000。CV为1,用参数NEW_CV将实际计数值复位为0。DIR为1,NEW_DIR为1,计数方向改为加计数。复位Q0.6,置位下一阶段的输出Q0.4。
在程序段4将MB11加1后,其值为3,比较触点接通,MOVE指令将MB11复位为0(见图3-85)。以后将重复上述的3个阶段的运行,直到I0.4变为FALSE,脉冲发生器停止发出脉冲为止。Q0.4~Q0.6依次为TRUE的时间分别为4s、2s和3s,分别与3个阶段的计数值2000、1000和1500对应。
图3-89 OB40的程序段3的程序
用监控表监视ID1000,可以看到HSC1的计数值的变化情况。图3-90同时监视了标志字节MB11的值。
图3-90 监控表
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。