s7200典型程序例子.docx

上传人:b****6 文档编号:7379128 上传时间:2023-01-23 格式:DOCX 页数:99 大小:604.50KB
下载 相关 举报
s7200典型程序例子.docx_第1页
第1页 / 共99页
s7200典型程序例子.docx_第2页
第2页 / 共99页
s7200典型程序例子.docx_第3页
第3页 / 共99页
s7200典型程序例子.docx_第4页
第4页 / 共99页
s7200典型程序例子.docx_第5页
第5页 / 共99页
点击查看更多>>
下载资源
资源描述

s7200典型程序例子.docx

《s7200典型程序例子.docx》由会员分享,可在线阅读,更多相关《s7200典型程序例子.docx(99页珍藏版)》请在冰豆网上搜索。

s7200典型程序例子.docx

s7200典型程序例子

S7-200应用示例

本章概述

内容

H.1

模拟电位器

H–2

H.2

怎样使用高速计数器

H–6

H.3

自由通信口模式的简单应用

H–10

H.4

处理脉宽调制

H–13

H.5

可逆电动机起动器电路――适用于改变三相交流感应电动机旋转方向

H–16

H.6

步执行顺序(事件鼓定时器)

H–19

H.7

S7-200用自由通信口模式和并行打印机连接

H–23

H.8

通过自由通信口模式接受条形码阅读器的信息

H–27

H.9

集成脉冲输出通过步进电机进行定位控制

H–31

H.10

SIMATICS7-221通过自由通信口模式控制贺氏(Hayes)调制解调器

H–37

H.11

几台SIMATICS7-200PLC使用自由通信口模式连接在一个远程I/O网络上

H–43

H.12

S7-224与SIMOVERT电机驱动器之间的自由通信口通信接口

H-54

H.13

用S7-200CPU224DC/DC/DC进行定位控制,并具有位置监视和位置校正

H-64

H.14

用S7-200实现PID控制

H-80

H.15

模拟量输入的处理

H-92

H.16

S7-200与PC之间的连接:

从Windows应用程序中读数据

H-98

H.1模拟电位器

概述

本例包含了有关SIMATICS7-200的模拟电位器(POT)的使用信息。

电位器的位置转换为0至255之间的数字值,然后,存入两个特殊存储器字节SMB28和SMB29中,分别对应电位器0和电位器1的值。

需要一把小螺丝刀用以调整电位器的位置。

本应用示例介绍了使用模拟电位器调整定时器设定值的三种方案。

例图

模拟电位器

程序框图

10.0

程序和注释

方案1说明了用模拟电位器对定时器设定值进行细调的方法。

首先通过程序中的偏移量(本例中为20ms)对定时器进行粗调,然后再用电位器能把定时器的设定值精确地调整到满意的设置。

每个定时器周期之后,执行子程序1中的指令,把POT0的值(在SMB28中)读到AC1,除以2,再加上200ms偏移量。

返回主程序时,AC2中的定时器循环计数值加1,并拷贝到输出字节(QB0),以供显示。

在方案2中,对电位器1(POT1)的100次扫描值在AC3中累加后并取平均,再存入VW12。

如果该值低于低保护限值VW14,或高于高保护限值VW16(两者均在首次扫描时初始化),则将新值VW12拷贝到VW14、VW16和VW18中。

然后再分别对VW16和VW14的值减、加3ms,作为新限值,而VW18中的平均值被传回主程序作为定时器T34的设定值。

返回主程序时,VW20中的定时器循环计数值加1,并拷贝到输出字节(QB1),以供显示。

在方案3中,把电位器0(POT0)的值直接作为定时器T35的设定值,AC2中的定时器循环计数值加1,并拷贝到输出字节(QB0),以供显示。

本程序长度为110个字。

//标题:

模拟电位器:

//***************主程序***************

//这是S7-200的一个演示程序,介绍了使用模拟电位器调整定时器设定值的三种方案。

//方案1:

对来自POT0的值进行换算并加偏移量,以调整定时器的设定值,可以从200ms调到的1.48s。

每个定时器周期QB0加1。

//方案2:

从POT1来的值经过滤波给定时器提供0ms到约2.55s的稳定的设定值。

每个定时器周期QB1

加1。

//方案3:

把POT0的值直接作为定时器设定值。

每个定时器周期QB0加1。

//模拟电位器POT0和POT1的值可以分别从SMB28和SMB29中以一个字节读出。

//每次扫描时,POT的值会变化一点,方案1和2都能为定时器提供稳定的设定值。

//方案1的设定值会改变1次或2次,但每个定时器周期只装载一次。

//方案2的设定值非常稳定,每次扫描都装载。

//方案3的设定值每次扫描都会改变。

//主程序:

LDSM0.1//首次扫描时清除工作缓冲区:

MOVD+0,AC0//AC0=0。

MOVD+0,AC3//AC3=0。

MOVW+0,VW10//VW10=0。

MOVW+32000,VW14//低限工作区复位。

MOVW+0,VW16//高限工作区复位。

//方案1:

//每次扫描时POT的值会改变一点。

//下面的指令用来在每个定时器周期捕获一次换算后的值,并提供一个稳定的定时器设定值。

LDI0.0//如果输入I0.0为1状态,则选方案1。

TONT33,VW0//POT0的值经运算后作为T33的设定值。

CALL1//调用子程序1对POT0的值进行换算并加偏移量。

LDT33//若T33计时到,

INCWAC2//则AC2加1,即定时器循环计数。

MOVBAC2,QB0//把AC2的最低有效字节拷贝到输出字节QB0,以供显示。

RT33,1//定时器T33复位。

//方案2:

LDI0.1//如果输入I0.1为1状态,则选方案2。

CALL2//调用子程序2,对POT1的值进行滤波运算后存入VW18。

TONT34,VW18//VW18的值作为T34的设定值。

LDT34//若T34计时到,

INCWVW20//则VW20加1,即定时器循环计数。

MOVBVB21,QB1//把VW20最低有效字节(VB21)拷贝到输出字节QB1,以供显示。

RT34,1//定时器T34复位

 

//方案3:

LDI0.2//如果输入I0.2为1状态,

ANI0.0//且方案1不在运行(I0.0=0),则选方案3。

MOVW0,AC1//清除累加器1(AC1)

MOVBSMB28,AC1//送POT0的值到AC1。

TONT35,AC1//POT0的值作为T35的设定值。

LDT35//若T35计时到,

INCWAC2//则AC2加1,即定时器循环计数。

MOVBAC2,QB0//把AC2最低有效字节拷贝到输出字节QB0,以供显示。

RT35,1//定时器T35复位。

MEND//主程序结束

//方案1的子程序

SBR1//子程序1。

//换算POT0的值并加上偏移量后存在VW0中,再返回主程序。

LDT33//每个定时器周期检查POT0的变化。

MOVW0,AC1//清除累加器1(AC1)。

MOVBSMB28,AC1//送POT0的值给AC1。

DIV2,AC1//AC1除2,即把POT0的输入范围从0~255换算成0~127。

+120,AC1//加200ms偏移量。

MOVWAC1,VW0//把AC1值拷贝到VW0,以便能让程序员读取。

RET//子程序1结束。

//方案2的子程序

SBR2//子程序2。

//对POT1值采样100次,然后求平均值。

INCWVW10//扫描计数器加1。

MOVBSMB29,AC0//送POT1的值到AC0。

+1AC0,AC3//再加到以前的总和中(即累加POT1的值,共累加100次)。

LDWVW10,100//100次扫描之后。

DIV100,AC3//求平均值。

MOVWAC3,VW12//存平均值。

MOVW0,VW10//扫描计数器复位。

MOVD0,AC3//工作内存复位。

AW<=VW12,VW14//检查新的平均值是否在保护区之外。

OW>=VW12,VW16//

FILLVW12,VW14,3//把新的平均值存入VW14,VW16,VW18。

-1+3,VW14//设置新的低保护限。

+1+3,VW16//设置新的高保护限。

RET//POT1的滤波值存在VW18中,返回主程序

H.2怎样使用高速计数器

概述

本例叙述SIMATICS7-200的高速计数器(HSC)的一种组态功能。

对来自传感性(如编码器)信号的处理,高速计数器可采用多种不同的组态功能。

本例用脉冲输出(PLS)来为HSC产生高速计数信号,PLS可以产生脉冲串和脉宽调制信号,例如用来控制伺服电机。

既然利用脉冲输出,必须选用CPU224DC/DC/DC。

下面这个例子,展示了用HSC和脉冲输出构成一个简单的反馈回路,怎样编制一个程序来实现反馈功能。

例图

程序框图

 

程序和注释

本例描述了S7-200DC/DC/DC的高速计数器(HSC)的功能。

HSC计数速度比PLC扫描时间快得多,采用集成在CPU224中的20K硬件计数器进行计数。

总的来说,每个高速计数器需要10个字节内存用来存控制位、当前值、设定值、状态位。

本程序长度为91个字。

//主程序:

//在主程序中,首先将输出Q0.0置,0,因为这是脉冲输出功能的需要。

再初始化高速计

//数器HSC0,然后调用子程序0和1。

//HSC0起动后具有下列特性:

可更新CV和PV值,正向计数。

//当脉冲输出数达到SMD72中规定的个数后,程序就终止。

//主程序

LDSM0.1//首次扫描标志(SM0.1=1)。

RQ0.0,1//脉冲输出Q0.0复位(Q0.0=0)。

MOVB16#F8,SMB37//装载HSC0的控制位:

//激活HSC0,可更新CV,可更新PV,

//可改变方向,正向计数。

//HSC指令用这些控制位来组态HSC。

MOVD0,SMD38//HSC0当前值(CV)为0。

MOVD1000,SMD42//HSC0的第一次设定值(PV)为1000。

HDEF0,0//HSC0定为模式0。

CALL0//调用子程序0。

CALL1//调用子程序1。

MEND//主程序结束。

//********************

//子程序0:

//子程序0初始化,并激活脉冲输出(PLS)。

//在特殊存储字节SMB67中定义脉冲输出特性:

脉冲串(PT0),时基,可更新数值,激活PLS。

//SMW68定义脉冲周期,其值为时基的倍数。

//最后,在SMD72中指定需要产生的脉冲数。

(SMD72)为内存双字,即4个字节)。

//子程序0

SBR0//子程序0

MOVB16#8D,SMB67//装载脉冲输出(PLS0)的控制位:

PT0,时基1ms,可更新,激活。

MOVW1,SMW68//脉冲周期1ms。

MOVD30000,SMD72//产生30000个脉冲。

PLS0//起动脉冲输出(PLS0),从输出端Q0.0输出脉冲。

RET//子程序0结束。

//********************

//子程序1:

//子程序1起动HSC0,并把中断程序0分配给中断事件12(HSC0的当前值CV等于设定值PV)。

//只要脉冲计数值(当前值CV)达到设定值(PV),该事件就会发生。

//最后,允许中断。

//子程序1

SBR0//子程序1。

ATCH0,12//把中断程序0分配给中断事件12(HSC0的CV=PV)。

ENI//允许中断。

HSC0//按主程序中对HSC0的初始组态特性,起动HSC0。

RET//子程序1结束。

//********************

//中断程序0:

//当HSC0的计数脉冲达到第一,设定值1000时,调用中断程序0。

//输出端Q0.1置位(Q0.1=1)。

//为HSC0设置新的设定值1500(第二设定值)

//用中断程序1取代中断程序0,分配给中断事件12(HSC0的CV=PV)。

//中断程序0

INT0//中断程序0。

SQ0.1,1//输出端Q0.1置位(Q0.1=1)。

MOVB16#A0,SMB37//重置HSC0的控制位,仅更新设定值(PV)。

MOVD1500,SMD42//HSC0的下一个设定值为1500(第二设定值)。

ATCH1,12//用中断程序1取代中断程序0,分配给中断事件12。

HSC0//起动HSC0,,为其装载新的设定值。

RETI//中断程序0结束。

//********************

//中断程序1:

//当HSC0的计数脉冲达到第二设定值1500时,调用中断程序1。

//输出端Q0.2置位(Q0.2=1)。

//HSC0改成减计数,并置新的设定值1000(第三设定值)。

//用中断程序2取代中断程序1,分配给中断事件12(HSC0的CV=PV)。

//中断程序1:

INT1//中断程序1。

SQ0.2,1//输出端Q0.2置位(Q0.2=1)。

MOVB16#B0,SMB37//重置HSC0的控制位,更新设定值,并改成减计数(反向计数)。

MOVD1000,SMD42//HSC0的下一个设定值为1000(第三设定值)。

ATCH2,12//用中断程序2取代中断程序1,分配给中断事件12。

HSC0//起动HSC0,,为其装载新的设定值和方向。

RETI//中断程序1结束。

//********************

//中断程序2:

//当HSC0的计数脉冲达到第三设定值1000时,调用中断程序2。

//输出端Q0.1和Q0.2复位(Q0.1=0,Q0.2=0)。

//HSC0的计数方向重新改为正向(增计数),并将当前计数值置为0,而设定值PV保持不变(1000)。

//重新把中断程序0分配给中断事件12,程序再次起动HSC0运行。

//当脉冲数达到SMD72中规定的个数后,程序就终止。

//中断程序2:

INT2//中断程序2。

RQ0.1,2//输出端Q0.1和Q0.2复位(Q0.1=0,Q0.2=0)。

MOVB16#D8,SMB37//重置HSC0的控制位,更新CV,改为正向计数(增计数)。

MOVD0,SMD38//HSC0的当前值复位(CV=0)。

ATCH0,12//把中断程序0分配给中断事件12。

HSC0//重新起动HSC0。

RETI//中断程序2结束。

H.3自由通信口模式的简单应用

概述

自由通信口模式(FreeportMode)的通信协议可自由定义,通信所需要的信息存放在特殊存储字节SMB30中,用户须作如下说明:

●奇偶校验

●每个字符的位数

●波特率

自由通信口模式可以接收和发送数据。

本例用一个仿真的打印机程序来描述数据发送,再用一个条形码阅读器程序来说明数据接收。

例图

打印

机程序框图

打印机程序和注解

此程序描述向打印机发送数据。

为了简化此例,窗口下的终端程序可代替打印机作为接收器边接。

打印机或终端的组态特性为9600波特,无奇偶校验,每字符8位。

本程序长度为13个字。

//正确设置自由通信口模式对此应用很重要。

//所需信息装载在特殊存储字节SMB30中。

//这些输入数据可从操作手册中查询。

//发送命令XMT包含了发送信息缓冲区的起始地址,该地址单元中只包含了发送信息的长度(以字节

为单位)。

LDSM0.1//第一次扫描(SM0.1=1)。

MOVB+9,SMB30//自由通信口模式;9600波特,无奇偶校验,每字符8位。

MOVB+1,VB100//信息长度为1个ASCII字符。

MOVB16#41,VB101//A字符长度为1个字节,A=41H(十六进制)。

LDI0.1//输入I0.1起动发送。

EU//识别脉冲上升沿。

XMTVB100,0//发送。

MEND//主程序结束。

条形码阅读器程序框图

条形码阅读器程序和注解

该程序描述数据接收,条形码阅读器通过接口把读到的数据用自由通信口模式发给SIMATICS7-200。

为简化此例,窗口下的终端程序可代替条形码阅读器作为发送器连接。

本程序长度为15个字。

//************主程序********

//正确设置自由通信口模式对此应用很重要。

//所需信息装载在特殊存储字节SMB30中。

//这些输入数据可从操作手册中查询。

//接收数据借助于中断实现,当数据进入自由编程接口,接收中断事件(8)。

//就被触发了。

//在此应用中,将中断程序0(INT0)赋予接收中断事件(8)。

LDSM0.1//第一次扫描标志(SM0.1=1)。

MOVB+9,SMB30//自由通信口模式:

9600波特,无奇偶校验,每字符8位。

ATCH+0,8//指定接收中断事件8调用中断程序0。

ENI//允许中断。

MEND//结束主程序。

//********中断程序0********

//在中断程序0,把存放在特殊存储字节SMB2中的接收字符和大写字母A作比较。

//如果符合,则置输出位Q0.1为1。

INT//接收中断程序0。

LDB=SMB2,16#41//字节SMB2中的接收字符和A比较。

SQ0.1,1//若字符为A,则置Q0.1为1。

RETI//返回主程序。

H.4处理脉宽调制

概述

在S7-200系列中输出端Q0.0和Q0.1能够输出方波信号,而且方波信号的周期和脉宽均能独立调节,其中脉宽指的是在一个周期内,输出信号处于高电平的时间长度。

下面这个例子说明了脉宽调制(PWM)是如何工作的。

输出端Q0.0输出方波信号,其脉宽每周期递增0.5秒,周期固定为5秒,并且脉宽的初始值为0.5秒。

当脉宽达到设定的最大值4.5秒时,脉宽改为每周期递减0.5秒,直到脉宽为零为止。

以上过程周而复始。

在这个例子中必须把输出端Q0.0与输入端I0.0连接,这样程序才能控制PWM。

例图

程序框图

程序和注解

特殊存储字节SMB67用来初始化输出端Q0.0的PWM。

这个控制字内含PWM允许位,修改周期和脉宽的允许位,以及时间基数选择位等,由子程序0来调整这个控制字节。

通过ENI指令,使所有的中断成为全局允许,然后通过PLS0指令,使系统接受各设定值,并初始化“PTO/PWM发生器”,从而在输出端Q0.0输出脉宽调制(PWM)信号。

另外,周期5秒是通过将数值5000置入特殊存储字SMW68来实现的,初始脉宽0.5秒则通过将500写入特殊存储字SMW70来实现的。

这个初始化过程是在程序的第一个扫描周期通过执行子程序0来实现,第一个扫描周期标志是SM0.1=1。

当一个PWM循环结束,即当前脉宽为0秒时,将再一次初始化PWM。

辅助内存标记M0.0用来表明脉宽是增加,还是减少,初始化时将这个标记设为增加。

输出端Q0.0与输入端I0.0相连,这样输出信号也可送到输入端I0.0。

当第一个方波脉冲输出时,利用ATCH指令,把中断程序1(INT1)赋给中断事件0(I0.0的上升沿)。

每个周期中断程序1将当前脉宽增加0.5秒,然后利用DTCH指令分离中断INT1,使这个中断再次被屏蔽。

如果在下次增加时,脉宽大于或等于周期,则将辅助内存标记位M0.0再次置0。

这样就把中断程序2赋予事件0,并且脉宽也将每次递减0.5秒。

当脉宽值减为零时,将再次执行,初始化程序(子程序0)。

本程序长度为63个字。

//************主程序********

LDSM0.1//在第一个扫描周期SM0.1=1。

CALL0//调用子程序0来起动PWM,即初始化PWM。

LDW>=SMW70,VW0//如果脉宽大于等于(周期一脉宽),

RM0.0,1//则将辅助内存标记位M0.0置0。

LDW=SMW70,0//如果脉宽为零,

CALL0//则调用子程序0来重新开始一个完整的PWM。

LDI0.0//如果输入I0.0=1。

AM0.0//且辅助内存标记位M0.0=1(脉宽增加),

ATCH1,0//则把INT1赋给事件0(输入I0.0的正向上升沿)。

LDI0.0//如果输入I0.0=1。

ANM0.0//且辅助内存标记位M0.0=0(脉宽减少),

ATCH2,0//则把INT2赋给事件0(输入I0.0的正向上升沿)。

MEND//主程序结束。

//********主程序0********

SBR0//初始化脉宽调制

SM0.0,1//将增加脉宽的辅助内存标记位M0.0置1。

MOVB16#CB,SMB67//设定输出端Q0.0的PTO/PWM控制字节

//SM67.0:

=1允许接受新的周期。

//SM67.1:

=1允许接受新的脉宽。

//SM67.3:

=1时间基数为1ms(若为0,则时间基数为1s)。

//SM67.6:

=1选择PWM模式(若为0,则PT0模式)。

//SM67.7:

=1允许高速输出功能。

MOVW500,SMW70//指定初始脉宽(500ms)。

MOVW5000,SMW68//周期为5s。

ENI//允许全部中断。

PLS0//对PTO/PWM生成器编程的指令。

MOVWSMW68,VW0//将周期置入数据字VW0。

-1500,VW0//将(周期-脉宽)的值置入数据字VW0。

RET//子程序0结束并返回主程序。

//********中断服务程序1********

INT1//增加脉宽。

+1500,SMW70//脉宽增加500ms。

PLS0//对PTO/PWM生成器编程的指令。

DTCH0//将中断与事件0断开。

RETI//中断服务程序1结束

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1