首页 理论教育 移位指令详解:包括循环移位和补0,附表格解析

移位指令详解:包括循环移位和补0,附表格解析

时间:2023-06-25 理论教育 版权反馈
【摘要】:移位指令对移出的位自动补0。所有的移位指令中的N均为字节型数据。移位指令的具体介绍见表4.4-1。循环移位是环形的,即被移出来的位将返回到另一端空出来的位置,具体指令介绍见表4.4-2。DATA为数据输入端,连接移入移位寄存器的二进制数值,执行指令时将该位的值移入寄存器。

移位指令详解:包括循环移位和补0,附表格解析

1.高速脉冲输出形式

S7-200晶体管输出型的PLC有高速脉冲串输出(PTO)和脉冲宽度调制出(PWM)两种方式。

(1)PTO(Pulse Train Output,脉冲串输出) PTO能输出频率可调的、占空比为50%的一串脉冲如图4.11-1所示(用户可以控制脉冲周期和脉冲数),多用于带有位置控制功能的步进驱动器或伺服驱动器。将输出脉冲的个数作为位置给定值输入,以实现定位控制功能;通过改变定位脉冲的输出频率,可以改变运动的速度。

(2)PWM(Pulse Width Modulation,脉冲宽度调制) PWM能输出占空比可调的一串脉冲如图4.11-2所示(用户可以控制脉冲周期和脉冲宽度),用于直接驱动调速系统或运动控制系统的输出级,控制逆变主回路

978-7-111-47481-4-Chapter04-85.jpg

图4.11-1 PTO输出形式

978-7-111-47481-4-Chapter04-86.jpg

图4.11-2 PWM输出形式

2.高速脉冲输出端子的确定

S7-200PLC的高速脉冲输出端子是不能随意选择的,必须按照系统指定的输出点Q0.0和Q0.1来选择。当Q0.0或Q0.1设置为PTO或PWM功能时,Q0.0或Q0.1输出点就不能当作普通的数字量输出使用,其输出波形不受输出过程映像寄存器的状态、输出强制或立即输出指令的影响。当不使用PTO/PWM发生器功能时,输出点Q0.0、Q0.1使用通用功能,输出由输出过程映像寄存器控制,输出过程映像寄存器决定输出信号波形的起始和结束状态,即决定脉冲输出波形从高电平或低电平开始和结束,使输出波形有短暂的不连续,为了减小这种不连续的有害影响,应注意以下两点。

1)可在起用PTO或PWM操作之前,将用于Q0.0和Q0.1的输出过程映像寄存器设为0。

2)PTO/PWM输出必须至少有10%的额定负载,才能完成从关闭至打开以及从打开至关闭的顺利转换,即提供陡直的上升沿和下降沿。

3.脉冲输出PLS指令

(1)PLS指令的功能 PLS指令使PLC输出端产生高速脉冲,用来驱动负载实现精确控制,如对步进电动机的控制。PLS指令的梯形图及语句表见表4.11-1。

表4.11-1 PLS指令的梯形图和语句表

978-7-111-47481-4-Chapter04-87.jpg

PLS指令功能描述:使能有效时,检查用于脉冲输出(Q0.0或Q0.1)的特殊存储器位(SM),然后执行特殊存储器位定义的脉冲操作,从Q0.0或Q0.1输出高速脉冲。

(2)用于脉冲输出(Q0.0或Q0.1)的特殊标志寄存器 每个PTO/PWM发生器都对应一定数量的特殊寄存器,这些寄存器包括控制字节寄存器、状态字节寄存器和参数数值寄存器,见表4.11-2,用它们来控制高速脉冲的输出形式和输出状态及参数值。

表4.11-2 相关寄存器

978-7-111-47481-4-Chapter04-88.jpg

说明:表4.11-2中SMB67控制PTO/PWM的Q0.0,SMB77控制PTO/PWM的Q0.1,SMW68/SMW78、SMW70/SMW80、SMD72/SMD82分别存放周期值、脉冲宽度值、脉冲数值。在多段脉冲串操作中,执行PLS指令前应在SMB166/SMB176中填入管线的总段数,在SMWl68/SMWl78中装入包络表的起始偏移地址并填好包络表的值。状态字节用于监视PTO发生器的工作。

PLS指令从PTO/PWM对应的寄存器中读取数据,使程序按寄存器中的值控制PTO/PWM发生器。因此执行PLS指令前,必须设置好这些寄存器。寄存器各位的功能见表4.11-3。表4.11-4作为一个快速参考,用其中的数值作为PTO/PWM控制字节的值来实现需要的操作。

表4.11-3 PTO/PWM控制寄存器

978-7-111-47481-4-Chapter04-89.jpg

表4.11-4 PTO/PWM控制字节参考

978-7-111-47481-4-Chapter04-90.jpg

(续)

978-7-111-47481-4-Chapter04-91.jpg

4.PTO的应用

PTO按照给定的脉冲个数和周期输出一串方波(占空比50%)。PTO可以产生单段脉冲串或者多段脉冲串,来指定脉冲数和周期(以微秒或毫秒为增加量)。

(1)周期和脉冲数 周期的范围是50~65535μs或2~65535ms,为16位无符号数,时基有μs和ms两种,通过控制字节的第3位选择。如果设定的周期是奇数,会引起占空比的一些失真。脉冲数的范围是1~4294967295。

如果周期时间小于最小值,就把周期默认为最小值。如果指定脉冲数为0,就把脉冲数默认为1个脉冲。

状态字节中的PTO空闲位(SM66.7或SM76.7)为1时,则指示脉冲串输出完成,可根据脉冲串输出的完成调用中断程序。

(2)单段管线模式 PTO功能可输出多个脉冲串,允许脉冲串的排队,形成管线。当激活的脉冲串输出完成后,立即开始输出新的脉冲串,保证了脉冲串顺序输出的连续性。

PTO发生器有单段管线和多段管线(也称单段流水线和多段流水线)两种模式。

单段管线是指管线中每次只能存储一个脉冲串的控制参数。一旦启动了PTO起始段,就必须立即为下一个脉冲串更新控制寄存器,并再次执行PLS指令。第二个脉冲串的属性在管线一直保持到第一个脉冲串发送完成。第一个脉冲串发送完成,紧接着就输出第二个脉冲串,重复上述过程可输出多个脉冲串。输出多个脉冲串时,如果采用单段管线模式,编程比较复杂。

单段管线模式中的各段脉冲串可以采用不同的时间基准,但有可能造成脉冲串之间的不平稳过渡。但是,如果时间基准发生了变化或者在利用PLS指令捕捉到新脉冲之前,启动的脉冲串已经完成,那么脉冲串之间则可以做到平滑转换。

当管线满时,如果试图装入另一个脉冲串的控制参数,状态寄存器中的PTO溢出位(SM66.6或SM76.6)将置位。在检测到溢出后,必须手动清除这个位,以便恢复检测功能。当PLC进入RUN方式时,这个位初始化为0。

(3)单段PTO的编程步骤 通常,用一个子程序为单段操作的脉冲输出配置和初始化PTO,从主程序调用初始化子程序。使用首次扫描内存位(SM0.1)将脉冲输出初始化为0,并调用子程序,执行初始化操作。使用子程序调用时,随后的扫描不再调用该子程序,这样会降低扫描时间执行,程序结构更为合理。

从主程序建立初始化子程序调用后,用以下步骤建立控制逻辑,用于在初始化子程序中配置脉冲输出Q0.0或Q0.1。

1)设置控制字节。将值16#85(选择微秒增加)或值16#8D(选择ms增加)写入SMB67或SMB77,两个值均可启用PTO/PWM功能、选择PTO操作、设置脉冲数和周期值以及选择时基(μs或ms)。

2)在SMW68或SMW78中写入一个周期的字值。

3)在SMD72或SMD82中写入脉冲计数的双字值。

4)(选项)如果希望在脉冲串输出完成后立即执行相关功能,可以将脉冲串完成事件(中断事件19)附加于中断子程序,为中断编程,使用ATCH指令并执行全局中断启用指令ENI。

5)执行PLS指令,使S7-200为PTO发生器编程。

6)退出子程序。

对于单段PTO操作,如果要修改PTO的周期、脉冲数,可以在子程序或中断程序中执行:

1)根据要修改的内容,设置相应的控制字节值。

2)在SMW68或SMW78中写入新周期的一个字值。(www.xing528.com)

3)在SMD72或SMD82中写入新脉冲计数的一个双字值。

4)执行PLS指令,使S7-200为PTO发生器编程。用更新脉冲计数和脉冲时间信号波形输出开始之前,CPU必须完成所有进行中的PTO。

5)退出子程序或中断程序。

(4)多段管线模式

1)包络表。多段管线中,CPU在变量存储区(V)建立一个包络表。包络表中存储各个脉冲串的控制参数。多段管线用PLS指令启动。多段管线作业中,CPU自动从包络表中按顺序读出每个脉冲串的控制参数,并实施脉冲串输出。当执行PLS指令时,包络表内容不可改变。

包络表由包络段数和各段参数构成,包络表的格式见表4.11-5。

表4.11-5 多段PTO操作的包络表格式

978-7-111-47481-4-Chapter04-92.jpg

包络表每段的长度都是8个字节,由周期值(16bit)、周期增量值(16bit)和脉冲计数值(32bit)组成。包络表中的参数表征了脉冲串的特性。在包络表中周期增量可以选择μs或ms,但在同一个包络表中的所有周期值必须使用同一个时间基准。

多段PTO操作的特点是编程简单,能够按照每个脉冲的个数自动增减周期。周期增量区的值为正值,则增加周期;周期增量区的值为负值,则减少周期;周期增量区的值为0,则周期不变。除周期增量为0外,每个输出脉冲的周期值都发生着变化。

如果在输出若干个脉冲后指定的周期增量值导致非法周期值,会产生溢出错误,则SM66.6或SM76.6被置为1,同时停止PTO功能,PLC的输出变为通用功能。另外,状态字节中的增量计算错误位(SM66.4或SM76.4)被置为1。

如果要人为地终止一个正进行中的PTO包络,只需要把状态字节中的用户终止位(SM66.5或SM76.5)置为1。

当PTO包络执行时,当前启动的段的编号保存在SMB166(或SMB176)。

2)计算包络表中的数值。PTO发生器的多段管线功能在实际应用中非常有用。例如,步进电动机的运动控制要求如图4.11-3所示。从A点到B点为起动加速过程,从B到C为恒速运行过程,从C到D为减速停止过程。根据控制要求列出PTO包络表。

978-7-111-47481-4-Chapter04-93.jpg

图4.11-3 步进电动机的运动控制要求

步进电动机的运动控制分为3段(起动加速、恒速运行、减速停止),共需要4000个脉冲,即属于多段管线,需建立3段脉冲的包络表。起动和终止脉冲频率为2kHz,最大脉冲频率为10kHz。由于包络表中的值是用周期表示的,而不是用频率,需要把给定的频率值转换成周期值。起始和终止周期为500μs,相应于最大频率的周期为100μs。段1:加速运行,应在约200个脉冲时达到最大脉冲频率(10kHz);段2:恒速运行,约4000-200-400=3400个脉冲;段3:减速运行,应在约400个脉冲时完成。

PTO发生器用来调整某一特定段每次脉冲周期的周期增量值Δ为

周期增量值Δ=(ECT-ICT)/Q

其中,ECT为该段的结束周期,ICT为该段的初始周期,Q为该段中的脉冲数量。

利用上式计算出段1的周期增量值Δ为-2,段2的周期增量值Δ为0,段3的周期增量值Δ为1。假设包络表存放在从VB200开始的V存储器区,则包络表见表4.11-6。该包络表给出了产生所要求信号波形的值,该包络表的值可以在用户程序中用指令放在V存储器中。

表4.11-6 包络表

978-7-111-47481-4-Chapter04-94.jpg

(5)多段PTO的编程步骤 用一个子程序实现PTO初始化,首次扫描(SM0.1)时从主程序调用初始化子程序,执行初始化操作。

初始化操作步骤如下:

1)首次扫描(SM0.1)时将输出Q0.0或Q0.1复位(置0),并调用完成初始化操作的子程序。

2)在初始化子程序中,根据控制要求设置控制字节并写入SMB67或SMB77特殊存储器。如写入16#A0(选择μs递增)或16#A8(选择ms递增),两个数值表示允许PTO功能、选择PTO操作、选择多段操作以及选择时基(μs或ms)。

3)将包络表的首地址(16位)写入SMW168(或SMW178)。

4)在变量存储器V中,写入包络表的各参数值。一定要在包络表的起始字节中写入段数。在变量存储器V中建立包络表的过程也可以在一个子程序中完成,在此只需调用设置包络表的子程序。

5)设置中断事件并全局开中断。如果想在PTO完成后,立即执行相关功能,则必须设置中断,将脉冲串完成事件(中断事件号19)连接一中断程序。

6)执行PLS指令,使S7-200为PTO发生器编程,高速脉冲串由Q0.0或Q0.1输出。

7)退出子程序。

5.PWM的应用

PWM用来输出占空比可调的高速脉冲,用户可以控制脉冲的周期和脉冲宽度来完成特定的控制任务。

(1)周期和脉冲宽度 周期和脉宽时基为μs或ms,均为16位无符号数。周期的范围为50~65535μs或2~65535ms。若周期小于两个时基,则系统默认为两个时基。脉宽范围为0~65535μs或0~65535ms。若脉宽大于等于周期,占空比等于100%,输出连续接通;若脉宽等于0,占空比为0%,则输出断开。

(2)更新方式 改变PWM波形的方法有两种:同步更新和异步更新。

同步更新:不需改变时基时,可以用同步更新。执行同步更新时,波形的变化发生在周期的边缘,形成平滑转换。

异步更新:需要改变PWM的时基时,则应使用异步更新。异步更新使高速脉冲输出功能被瞬时禁用,与PWM波形不同步,这样会引起被控设备的振动。鉴于此原因,建议尽量使用同步更新,选择一个适合于所有周期时间的时间基准。

(3)PWM的编程步骤 通常,用一个子程序为单段操作的脉冲输出配置和初始化PWM,从主程序调用初始化子程序。使用首次扫描内存位(SM0.1)将脉冲输出初始化为0,并调用子程序,执行初始化操作。使用子程序调用时,随后的扫描不再调用该子程序,这样会降低扫描时间执行,程序结构更为合理。

从主程序建立初始化子程序调用后,用以下步骤建立控制逻辑,用于在初始化子程序中配置脉冲输出Q0.0或Q0.1。

1)用首次扫描位(SM0.1)使输出位复位为0,并调用初始化子程序。这样可减少扫描时间,程序结构更合理。

2)在初始化子程序中设置控制字节。如将16#D3(时基为μs)或16#DB(时基为ms)写入SMB67或SMB77,控制功能为允许PTO/PWM功能、选择PWM操作、设置更新脉冲宽度和周期数值以及选择时基(μs或ms)。

3)在SMW68或SMW78中写入一个字长的周期值。

4)在SMW70或SMW80中写入一个字长的脉宽值。

5)执行PLS指令,使S7-200为PWM发生器编程,并由Q0.0或Q0.1输出。

6)可为下一输出脉冲预设控制字节。在SMB67或SMB77中写入16#D2(μs)或16#DA(ms),控制字节中将禁止改变周期值,允许改变脉宽值。以后只要装入一个新的脉宽值,不用改变控制字节,直接执行PLS指令就可改变脉宽值。

7)退出子程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈