西门子S7-200 PLC指令简介及实例分析 下载本文

内容发布更新时间 : 2024/12/24 20:48:37星期一 下面是文章的全部内容请认真阅读。

表6-14 例6-6包络表

V变量存储器地址 段号 参数值 3 段数 初始周期 每个脉冲的周期增量Δ 脉冲数 初始周期 每个脉冲的周期增量Δ 脉冲数 初始周期 每个脉冲的周期增量Δ 脉冲数 说明 VB200 VB201 VB203 VB205 VB209 VB211 VB213 VB217 VB219 VB221 段1 500 μs -2 μs 200 100μs 段2 0 3600 100μs 段3 2 μs 200 在程序中的用指令可将表中的数据送入V变量存储区中。 (3)多段流水线PTO初始化和操作步骤

用一个子程序实现PTO初始化,首次扫描(SM0.1)时从主程序调用初始化子程序,执行初始化操作。以后的扫描不再调用该子程序,这样减少扫描时间,程序结构更好。

初始化操作步骤如下:

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

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

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

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

MOVD +3600 VD213 //段2中的脉冲数

设为3600

// 段3:

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

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

【例6-7】PTO指令应用实例。编程实现例6-6中的步进电机的控制

分析:编程前首先选择高速脉冲发生器为Q0.0,并确定PTO为3段流水线。设置控制字节SMB67为16#A0表示允许PTO功能、选择PTO操作、选择多段操作、以及选择时基为微秒,不允许更新周期和脉冲数。建立3段的包络表(例6-6),并将包络表的首地址装入SMW168。PTO完成调用中断程序,使Q1.0接通。PTO完成的中断事件号为19。用中断调用指令ATCH将中断事件19与中断程序INT-0连接,并全局开中断。执行PLS指令,退出子程序。本例题的主程序,初始化子程序,和中断程序如图6-15所示。 主程序

LD SM0.1// 首次扫描时,将Q0.0复位 R Q0.0 1

CALL SBR_0//调用子程序0 子程序0

// 写入PTO包络表 LD SM0.0

MOVB 3 VB200 // 将包络表段数设为3 // 段1:

MOVW +500 VW201 //段1的初始循环时间 设为500ms MOVW -2 VW203 //段1的Δ设为-2 ms MOVD +200 VD205 //段1的脉冲数设为200

// 段2: MOVW +100

VW209 //段2的初

始周期

为100 ms MOVW +0 VW211 //段2的Δ设为0 ms

MOVW +100 VW217 //段3的初始周期设

为100ms

MOVW +1 VW219 //段3的Δ设为1ms MOVD +200 VD221 //段3中的脉冲数设为200

LD SM0.0

MOVB 16#A0, SMB67 // 设置控制字节 MOVW +200, SMW168 // 将包络表起始地址 指定为V200 ATCH INT_0, 19 // 设置中断 ENI // 全局开中断

PLS 0 // 起动PTO,由Q0.0输出

中断程序0

LD SM0.0 // PTO完成时,输出Q1.0 = Q1.0

图6-15 例6-7主程序,初始化子程序,中断程序

5. PWM的使用

PWM是脉宽可调的高速脉冲输出,通过控制脉宽和脉冲的周期,实现控制任务。 (1)周期和脉宽

周期和脉宽时基为:微秒或毫秒,均为16位无符号数。

周期的范围从50微秒至65,535微秒,或从2毫秒至65,535毫秒。若周期 < 2个时基,则系统默认为两个时基。

脉宽范围从0微秒至65,535微秒或从0毫秒至65,535毫秒。若脉宽>= 周期,占空比=100%,输出连续接通。若脉宽= 0,占空比为0%,则输出断开。

(2)更新方式

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

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

异步更新:需要改变PWM的时基时,则应使用异步更新。异步更新使高速脉冲输出功能被瞬时禁用,与PWM波形不同步。这样可能造成控制设备震动。

常见的PWM操作是脉冲宽度不同,但周期保持不变,即不要求时基改变。因此先选择适合于所有周期的时基,尽量使用同步更新。

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

2在初始化子程序中设置控制字节。如将16#D3(时基微秒)或16#DB(时

基毫秒)写入SMB67 或SMB77,控制功能为:允许PTO/PWM功能、选择PWM操作、设置更新脉冲宽度和周期数值、以及选择时基(微秒或毫秒)。

3在SMW68或SMW78中写入一个字长的周期值。 4在SMW70或SMW80中写入一个字长的脉宽值。

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

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

【例6-8】PWM应用举例。设计程序,从PLC的Q0.0输出高速脉冲。该串脉冲脉宽的初始值为0.1s,周期固定为1s,其脉宽每周期递增0.1s,当脉宽达到设定的0.9s时,脉宽改为每周期递减0.1s,直到脉宽减为0。以上过程重复执行。

分析:因为每个周期都有操作,所以须把Q0.0接到I0.0,采用输入中断的方法完成控制任务,并且编写两个中断程序,一个中断程序实现脉宽递增,一个中断程序实现脉宽递减,并设置标志位,在初始化操作时使其置位,执行脉宽递增中断程序,当脉宽达到0.9s时,使其复位,执行脉宽递减中断程序。在子程序中完成PWM的初始化操作,选用输出端为Q0.0,控制字节为SMB67,控制字节设定为16#DA(允许PWM输出,Q0.0为PWM方式,同步更新,时基为ms,允许更新脉宽,不允许更新周期)。程序如图6-16所示。

(b)子程序

(c)中断程序

图6-16 例6-8题图

6.3.6 高速输入、高速输出指令编程实训

1. 实训目的

(1)掌握高速处理类指令的组成、相关特殊存储器的设置、指令的输入及指令执行后的结果,进一步熟悉指令的作用和使用方法。

(2)通过实训的编程、调试练习观察程序执行的过程,分析指令的工作原理,熟悉指令的具体应用,掌握编程技巧和能力。

2. 实训内容 用脉冲输出指令PLS和高速输出端子Q0.0给高速计数器HSC提供高速

计数脉冲信号,因为要使用高速脉冲输出功能,必须选用直流电源型的CPU模块。输入侧的公共端与输出侧的公共端相连,高速输出端Q0.0接到高速输入端I0.0,24V电源正端与输出侧的1L+端子相连。有脉冲输出时Q0.0与I0.0对应的LED亮。在子程序0中,把中断程序0与中断事件12(CV=PV时产生中断)连接起来。

外部接线图如图6-17所示。

图6-17 外部接线图

程序如下:

主程序

LD SM0.1 //首次扫描时SM0.1=1

CALL SBR_0 //调用子程序0,初始化高速输出和HSC0 子程序0

LD SM0.0 //设置PLS 0的控制字节:允许单段PTO功能 MOVB 16#8D, SMB67 //时基ms,可更新脉冲数和周期 R Q0.0, 1 //复位脉冲输出Q0.0的输出映像寄存器 MOVW +2, SMW68 //输出脉冲的周期为2ms MOVD +12000, SMD72 //产生12000个脉冲(共24秒) PLS 0 //起动PLS 0,从输出端Q0.0输出脉冲 S Q0.1, 1 //在第一段时间内(4s)Q0.1为1

MOVB 16#F8, SMB37 //HSC0初始化,可更新CV,PV和计数方向,加计数 MOVD +0, SMD38 //HSC0的当前值清0

MOVD +2000, SMD42 //HSC0的第一次设定值为2000(延时4s) HDEF 0, 0 //定义HSC0为模式0

ATCH INT_0, 12 //定义HSC0的CV=PV时,执行中断程序0 ENI //允许全局中断 HSC 0 //起动HSC0

中断程序0

当HSC0的计数值加到第一设定值2000时(经过4s),调用中断程序0。在中断程序0中将HSC0改为减计数,中断程序1分配给中断事件12

LD SM0.0 //SM0.0总是为ON R Q0.1, 1 //复位Q0.1 S Q0.2, 1 //复位Q0.2

MOVB 16#B0, SMB37 //重新设置HSC0的控制位,改为减计数 MOVD +1000, SMD42 //HSC0的第2设定值为1000 ATCH INT_1, 12 //中断程序1,分配给中断事件12 HSC 0 //起动HSC0,装入新的设定值和计数方向

中断程序1

当HSC0的当计数值减到第二设定值1000时(经过了2s),调用中断程序1。在中断程序1中HSC0改为加计数,重新把中断程序0分配给中断事件12,当总脉冲数达到SMD72中规定的个数时,(经过了24s),脉冲输出终止。

LD SM0.0 //SM0.0总是为0 R Q0.2, 1 //复位Q0.2 S Q0.1, 1 //置位Q0.1

MOVB 16#F8, SMB37 //重新设置HSC0的控制位,改为加计数 MOVD +0, SMD38 //HSC0的当前值复位