PLC高速脉冲输出指令
基本指令和顺序控制指令是PLC最常用的指令,为了适应现代工业自动控制需要,PLC制造商开始逐步为PLC增加很多功能指令,功能指令使PLC具有强大的数据运算和特殊处理功能,从而大大扩展了PLC的使用范围。
高速脉冲输出指令说明如下:
要让高速脉冲发生器产生合符要求的脉冲,须对其进行有关控制及参数设置,另外,通过读取其工作状态可触发需要的操作。
1.控制字节
高速脉冲发生器的控制采用一个SM控制字节(8位),用来设置脉冲输出类型(PTO或PWM)、脉冲时间单位等内容。高速脉冲发生器的控制字节说明见表5-14,例如当SM67.6=0时,让Q0.0端子输出PTO脉冲;当SM77.3=1时,让Q0.1端子输出时间单位为ms的脉冲。
表1 速脉冲发生器的控制字节
2.参数设置
高速脉冲发生器采用SM存储器来设置脉冲的有关参数。脉冲参数设置存储器说明见表2,例如SM67.3=1,SMW68=25,则将脉冲周期设为25ms。
表2 脉冲参数设置存储器
3. 状态位
高速脉冲发生器的状态采用SM位来显示,通过读取状态位信息可触发需要的操作。高速脉冲发生器的状态位说明见表3,例如SM66.7=1表示Q0.0端子脉冲输出完成。
表3 高速脉冲发生器的状态位
在设置脉冲个数时,若将脉冲个数设为0,系统会默认为个数为1;在设置脉冲周期时,如果周期小于两个时间单位,系统会默认周期值为两个时间单位,如时间单位为ms,周期设为1.3ms,系统会默认周期为2ms,另外,如果将周期值设为奇数值(如75ms),产生的脉冲波形会失真。
PTO脉冲可分为单段脉冲串和多段脉冲串,多段脉冲串由多个单段脉冲串组成。
1.单段脉冲串的产生
要让Q0.0或Q0.1端子输出单段脉冲串,须先对相关的控制字节和参数进行设置,再执行高速脉冲输出PLS指令。
图2是一段用来产生单段脉冲串的程序。在PLC首次扫描时,SM0.1触点闭合一个扫描周期,复位指令将Q0.0输出映像寄存器(即Q0.0线圈)置0,以便将Q0.0端子用作高速脉冲输出;当I0.1触点闭合时,上升沿P触点接通一个扫描周期,MOV_B、MOV_W和MOV_DW依次执行,对高速脉冲发生器的控制字节和参数进行设置,然后执行高速脉冲输出PLS指令,让高速脉冲发生器按设置产生单段PTO脉冲串并从Q0.0端子输出。在PTO脉冲串输出期间,如果I0.2触点闭合,MOV_B、MOV_DW依次执行,将控制字节设为禁止脉冲输出、脉冲个数设为0,然后执行PLS指令,高速脉冲发生器马上按新的设置工作,即停止从Q0.0端子输出脉冲。单段PTO脉冲串输出完成后,状态位SM66.7会置1,表示PTO脉冲输出结束。
若网络2中不使用边沿P触点,那么在单段PTO脉冲串输出完成后如果I0.1触点仍处于闭合,则会在前一段脉冲串后面继续输出相同的下一段脉冲串。
图2 一段产生单段脉冲串的程序
2. 多段脉冲串的产生
多段脉冲串有两种类型:单段管道脉冲串和多段管道脉冲串。
(1)单段管道脉冲串
单段管道脉冲串是由多个单段脉冲串组成,每个单段脉冲串的参数可以不同,但单段脉冲串中的每个脉冲参数要相同。
由于控制单元参数只能对单段脉冲串产生作用,因此在输出单段管道脉冲串时,要求执行PLS指令产生首段脉冲串后,马上按第二段脉冲串要求刷新控制参数单元,并再次执行PLS指令,这样首段脉冲串输出完成后,会接着按新的控制参数输出第二段脉冲串。单段管道脉冲串的每个脉冲串可采用不同参数,这样易出现脉冲串之间连接不平稳,在输出多个参数不同的脉冲串时,编程也很复杂。
(2)多段管道脉冲串
多段管道脉冲串也由多个单段脉冲串组成,每个单段脉冲串的参数可以不同,单段脉冲串中的每个脉冲参数也可以不同。
1)参数设置包络表。由于多段管道脉冲串的各个脉冲串允许有较复杂的变化,无法用产生单段管道脉冲串的方法来输出多段管道脉冲串,S7-200 PLC采用在变量存储区建立一个包络表,由该表来设置多段管道脉冲串中的各个脉冲串的参数。多段管道脉冲串的参数设置包络表见表4。从包络表可以看出,每段脉冲串的参数占用8个字节,其中2字节为16位初始周期值,2字节为16位周期增量值,4字节为32位脉冲数值,可以通过编程的方式使脉冲的周期自动增减,在周期增量处输入一个正值会增加周期,输入一个负值会减少周期,输入0将不改变周期。
表4 多段管道脉冲串的参数设置包络表
在多段管道模式下,系统仍使用特殊存储器区的相应控制字节和状态位,每个脉冲串的参数则从包络表的变量存储器区读出。在多段管道编程时,必须将包络表的变量存储器起始地址(即包络表中的n值)装入SMW168或SMW178中,在包络表中的所有周期值必须使用同一个时间单位,而且在运行时不能改变包络表中的内容,执行PLS指令来启动多段管道操作。
2)多段管道脉冲串的应用举例。多段管道脉冲串常用于步进电机的控制。图3是一个步进电机的控制包络线,包络线分3段:第1段(AB段)为加速运行,电机的起始频率为2kHz(周期为500μs),终止频率为10kHz(周期为100μs),要求运行脉冲数目为200个;第2段(BC段)为恒速运行,电机的起始和终止频率均为10kHz(周期为100μs),要求运行脉冲数目为3600个;第3段(CD段)为减速运行,电机的起始频率为10kHz(周期为100μs),终止频率为2kHz(500μs),要求运行脉冲数目为200个。
列包络表除了要知道段脉冲的起始周期和脉冲数目外,还须知道每个脉冲的周期增量,周期增量可用下面公式计算获得:
周期增量值=(段终止脉冲周期值-段起始脉冲周期值)/该段脉冲数
例如AB段周期增量值=(100μs-500μs)/200=-2μs。
图3 一个步进电机的控制包络线
根据步进电机的控制包络线可列出相应的包络表,包络表见表5。
表5 根据步进电机的控制包络线列出的包络表
根据包络表可编写出步进电机的控制程序,程序如图4所示,该程序由主程序、SBR_0子程序和INT_0中断程序组成。
在主程序中,PLC首次扫描时SM0.1触点闭合一个扫描周期,先将Q0.0端子输出映像寄存器置0,以便将该端子用作高速脉冲输出,然后执行子程序调用指令转入SBR_0子程序。在SBR_0子程序中,网络1用于设置多段管道脉冲串的参数包络表(段数、第1段参数、第2段参数和第3段参数),网络2先设置脉冲输出的控制字节,并将包络表起始单元地址号送入SMW168单元,然后用中断连接指令将INT_0中断程序与中断事件19(PTO 0脉冲串输出完成产生中断)连接起来,再用ENI指令允许所有的中断,最后执行PLS指令,让高速脉冲发生器按设定的控制方式和参数(由包络表设置)工作,即从Q0.0端子输出多段管道脉冲串,去驱动步进电机按加速、恒速和减速顺序运行。当Q0.0端子的多管道PTO脉冲输出完成后,马上会向系统发出中断请求,系统则执行INT_0中断程序,Q1.0线圈得电。
图4 步进电机控制程序
1. 波形改变方式
PWM脉冲的波形改变方式有两种:同步更新和异步更新。
(1)同步更新
如果不需改变时间基准,则可以使用同步更新方式,利用同步更新,信号波形特性的变化发生在周期边沿,使波形能平滑转换。
(2)异步更新
如果需要改变PWM发生器的时间基准,就要使用异步更新,异步更新会使PWM功能被瞬时禁止, PWM信号波形过渡不平滑,这会引起被控设备的振动。
由于异步更新生成的PWM脉冲有较大的缺陷,一般情况下尽量使用脉宽变化、周期不变的PWM脉冲,这样可使用同步更新。
2. 产生PWM脉冲的编程方法
要让高速脉冲发生器产生PWM脉冲,可按以下步骤编程:
1)根据需要设置控制字节SMB67或SMB68。
2)根据需要设置脉冲的周期值和脉宽值。周期值在SMW68或SMW78中设置,脉宽值在SMW70或SMW80中设置。
3)执行高速脉冲输出PLS指令,系统则会让高速脉冲发生器按设置从Q0.0或Q0.1端子输出PWM脉冲。
3.产生PWM脉冲的编程实例
图5是一个产生PWM脉冲的程序,其实现的功能是:让PLC从Q0.0端子输出PWM脉冲,要求PWM脉冲的周期固定为5s,初始脉宽为0.5s,每周期脉宽递增0.5s,当脉宽达到4.5s后开始递减,每周期递减0.5s,直到脉宽为0。以后重复上述过程。
该程序由主程序、SBR_0子程序和INT_0、INT_1两个中断程序组成,SBR_0子程序为PWM初始化程序,用来设置脉冲控制字节和初始脉冲参数,INT_0中断程序用于实现脉宽递增,INT_1中断程序用于实现脉宽递减。由于程序采用中断事件0(I0.0上升沿中断)产生中断,因此要将脉冲输出端子Q0.0与I0.0端子连接,这样在Q0.0端子输出脉冲上升沿时,I0.0端子会输入脉冲上升沿,从而触发中断程序,实现脉冲递增或递减。
程序工作过程说明如下:
在主程序中,PLC上电首次扫描时SM0.1触点接通一个扫描周期,子程序调用指令执行,转入执行SBR_0子程序。在子程序中,先将M0.0线圈置1,然后设置脉冲的控制字节和初始参数,再允许所有的中断,最后执行高速脉冲输出PLS指令,让高速脉冲发生器按设定的控制字节和参数产生并从Q0.0端子输出PWM脉冲,同时从子程序返回到主程序网络2,由于网络2、3指令条件不满足,程序执行网络4,M0.0常开触点闭合(在子程序中M0.0线圈被置1),中断连接ATCH指令执行,将INT_0中断程序与中断事件0(I0.0上升沿中断)连接起来。当Q0.0端子输出脉冲上升沿时,I0.0端子输入脉冲上升沿,中断事件0马上发出中断请求,系统响应该中断而执行INT_0中断程序。
在INT_0中断程序中,ADD_I指令将脉冲宽度值增加0.5s,再执行PLS指令,让Q0.0端子输出完前一个PWM脉冲后按新设置的宽度输出下一个脉冲,接着执行中断分离DTCH指令,将中断事件0与INT_0中断程序分离,然后从中断程序返回主程序。在主程序中,又执行中断连接ATCH指令,又将INT_0中断程序与中断事件0连接起来,在Q0.0端子输出第二个PWM脉冲上升沿时,又会产生中断而再次执行INT_0中断程序,将脉冲宽度值再增加0.5s,然后执行PLS指令让Q0.0端子输出的第三个脉冲宽度增加0.5s。以后INT_0中断程序会重复执行,直到SMW70单元中的数值增加到4500。
当SMW70单元中的数值增加到4500时,主程序中的“SMW70|>=I|4500”触点闭合,将M0.0线圈复位,网络4中的M0.0常开触点断开,中断连接ATCH指令无法执行,INT_0中断程序也无法执行,网络5中的M0.0常闭触点闭合,中断连接ATCH指令执行,将INT_1中断程序与中断事件0连接起来。当Q0.0端子输出脉冲上升沿(I0.0端子输入脉冲上升沿)时,中断事件0马上发出中断请求,系统响应该中断而执行INT_1中断程序。
在INT_1中断程序中,将脉冲宽度值减0.5s,再执行PLS指令,让Q0.0端子输出PWM脉冲宽度减0.5s,接着执行中断分离DTCH指令,分离中断,然后从中断程序返回主程序。在主程序中,又执行网络5中的中断连接ATCH指令,又将INT_1中断程序与中断事件0连接起来,在Q0.0端子输出PWM脉冲上升沿时,又会产生中断而再次执行INT_1中断程序,将脉冲宽度值再减0.5s。以后INT_1中断程序会重复执行,直到SMW70单元中的数值减少到0。
当SMW70单元中的数值减少到0时,主程序中的“SMW70|==I|0”触点闭合,子程序调用指令执行,转入执行SBR_0子程序,又进行PWM初始化操作。
以后程序重复上述工作过程,从而使Q0.0端子输出先递增0.5s、后递减0.5s、周期为5s连续的PWM脉冲。
图5 产生PWM脉冲的程序
(-END-)
选自《学PLC技术超简单》蔡杏山 主编
往期精彩