S7-200指令集 西门子s7200指令说明

2018年9月14日11:09:25 发表评论 13,455 阅读

本章描述用于对S7- 200微型PLC编程的SIMATIC和IEC1131指令集。

用于描述指令的习惯用语

图6--1给出了对一条指令的典型描述,并指出了用于描述指令及其操作的不同区域。指令说明包括

LAD、FBD和STL三种格式。操作数表列出了指令的操作数,并给出每个操作数的有效数据类型,存   储区的区域及长度。

EN/ENO操作数和数据类型没有在指令操作数表中列出,因为这些操作数对于所有的LAD和FBD指令

来说都是一样的。

  • 对于LAD:EN和ENO是功率流,同时是布尔数据类型。
  • 对于FBD:EN和ENO是I、Q、V、M、SM、S、T、C、L或功率流,同时是布尔数据类型。
西门子S7-200可编程序控制器系统手册

图6--1 指令描述

S7- 200存储器范围及特性

西门子S7-200可编程序控制器系统手册

S7- 200CPU存储器范围及特性

表6- 2 S7-200 CPU的操作数范围

西门子S7-200可编程序控制器系统手册

表6- 2 S7-200 CPU的操作数范围

位逻辑指令

触点
标准触点

常开触点指令(LD、A和O)与常闭触点指令(LDN、AN和ON)从  存储器或者过程映像寄存器中得到参考值。标准触点指令从存 储器中得到参考值。(如果数据类型是I或Q,则也可从过程映像寄存器中得到参考值。)

当位等于1时,常开触点闭合(接通),当位等于0时,常闭触点

闭合(断开)。在FBD中,AND和OR框中的输入最多可扩展为

32个输入。在STL中,常开指令LD、AND或OR将相应地址位 的位值存入栈顶;而常闭指令 LD、AND或OR则将相应地址位的位值取反,再存入栈顶。

立即触点

立即触点不依靠S7- 200扫描周期进行更新;它会立即更新。常开立即触点指令(LDI、AI和OI)和常闭立即触点指令(LDNI、

ANI和ONI)在指令执行时得到物理输入值,但过程映像寄存器

并不刷新。

当物理输入点(位)为1时,常开立即触点闭合(接通),当物理输 入点(位)为0时,常闭立即 触点闭合(接通)。常开指令立即将物理输入值Load (加载)、AND (与)或OR (或)到栈顶,而常闭指令立即将物理输入点值的取反值Load (加载)、AND (与) 或OR (或)到栈顶。

取反指令

取反指令(NOT)改变功率流输入的状态(也就是说,它将栈顶值 由0变为1,由1变为0)。

西门子S7-200可编程序控制器系统手册

位逻辑指令

正、负转换指令

正转换触点指令(EU)检测到每一次正转换(由0到1),让功率流接通一个扫描周期。负转换触点指令

(ED)检测到每一次负转换(由1到0),让功率流接通一个扫描周期。对于正转换指令,检测到栈顶值的

0到1转换将栈顶值设为1;否则,将设为0。对于负转换指令,检测到栈顶值的1到0转换将栈顶值设  为1;否则设为0。

对于运行模式下编辑(在RUN模式下编辑应用程序),您必须为正转换指令和负转换指令输入参数。关  于在RUN模式下编辑程序的更多信息参见第5章。

 

表6--3 位逻辑输入指令的有效操作数

 

输入/输出 数据类型 操作数
BOOL I、Q、V、M、SM、S、T、C、L、功率流
位(立即) BOOL I

 

如图6--2中所示,S7- 200用逻辑堆栈来决定控制逻辑。在本例中,“iv0”到“iv7”表示逻辑堆栈的

初始值,“nv”表示指令提供的一个新值,S0表示逻辑堆栈中存储的计算值。

西门子S7-200可编程序控制器系统手册

图6--2 触点指令的操作。

  1. S0表示存储在逻辑栈中的计算值。
  2. 在装载指令执行之后,值iv8丢失。
提示由于正转换指令和负转换指令要求由1到0或者由0到1的变化,您不能在第一个扫描周期中检测到上

升沿或者下降沿的变化。在第一个扫描周期,S7- 200利用这些指令储存指定位的状态。在接下来

的扫描周期中,这些指令能够检测到指定位的变化。

西门子S7-200可编程序控制器系统手册

实例:触点指令

线圈
西门子S7-200可编程序控制器系统手册

线圈

输出

输出指令(=)将新值写入输出点的过程映像寄存器。当输出指令执行时,S7- 200将输出过程映像寄存器中的位接通或者断开。在LAD和FBD中,指定点的值等于功率流。在STL中,栈 顶的值复制到指定位。

立即输出

当指令执行时,立即输出指令(=I)将新值同时写到物理输出点 和相应的过程映像寄存器中。

当立即输出指令执行时,物理输出点立即被置为功率流值。在

STL中,立即指令将栈顶的值立即复制到物理输出点的指定位 上。“I”表示立即引用;当执行指令时,将新数值写入物理输出和相应的过程映像寄存器位置。这一点不同于非立即指令,只把新值写入过程映像寄存器。

置位和复位

置位(S)和复位(R)指令将从指定地址开始的N个点置位或者复 位。您可以一次置位或者复位1- 255个点。

如果复位指令指定的是一个定时器位(T)或计数器位(C),指令不但复位定时器或计数器位,而且清除  定时器或计数器的当前值。

 

使ENO = 0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
立即置位和立即复位

立即置位和立即复位指令将从指定地址开始的N个点立即置位或者立即复位。您可以一次置位或复  位1到128个点。

“I”表示立即引用;当执行指令时,将新数值写入物理输出点和相应的过程映像寄存器位置。这一  点不同于非立即指令,只把新值写入过程映像寄存器。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)

表6--4 位逻辑输出指令的有效操作数

输入/输出 数据类型 操作数
BOOL I、Q、V、M、SM、S、T、C、L
位(立即) BOOL Q
N BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数
西门子S7-200可编程序控制器系统手册

实例:线圈指令

西门子S7-200可编程序控制器系统手册

逻辑堆栈指令
西门子S7-200可编程序控制器系统手册栈装载与

栈装载与指令(ALD)对堆栈中第一层和第二层的值进行逻辑与 操作。结果放入栈顶。执行完栈装载与指令之后,栈深度减1。

栈装载或

栈装载或指令(OLD)对堆栈中第一层和第二层的值进行逻辑或 操作。结果放入栈顶。执行完栈装载或指令之后,栈深度减1。

逻辑推入栈

逻辑推入栈指令(LPS)复制栈顶的值,并将这个值推入栈。栈底的值被推出并消失。

逻辑读栈

逻辑读栈指令(LRD)复制堆栈中的第二个值到栈顶。堆栈没有推入栈或者弹出栈操作,但旧的栈顶值

被新的复制值取代。

逻辑弹出栈

逻辑弹出栈指令(LPP)弹出栈顶的值。堆栈的第二个栈值成为新的栈顶值。

ENO与

ENO与指令(AENO) 对ENO位和栈顶的值进行逻辑与操作,其产生的效果与LAD或者FBD中盒指令的ENO位相同。与操作结果成为新的栈顶。

ENO是LAD和FBD中盒指令的布尔输出。如果盒指令的EN输入有功率流并且执行没有错误,则ENO     将功率流传递给下一元素。您可以把ENO作为指令成功完成的使能标志位。ENO位被用作栈顶,影响功率流和后续指令的执行。STL中没有EN输入。条件指令要想执行,栈顶值必须为逻辑1。在STL     中也没有ENO输出。但是在STL中,那些与LAD和FBD中具有ENO输出的指令相应的指令,存在一个  特殊的ENO位。它可以被AENO指令访问。

装入堆栈

装入堆栈指令(LDS)复制堆栈中的第N个值到栈顶。栈底的值被推出并消失。

表6--5 装入堆栈指令的有效操作数

输入/输出 数据类型 操作数
N BYTE 常数(0到8)

如图6--3中所示,S7- 200用逻辑堆栈来决定控制逻辑。在本例中,“iv0”到“iv7”表示逻辑堆栈的

初始值,“nv”表示指令提供的一个新值,而“S0”表示逻辑堆栈中存储的计算值。

西门子S7-200可编程序控制器系统手册

图6--3 逻辑堆栈指令的操作

西门子S7-200可编程序控制器系统手册

实例:逻辑栈指令

RS触发器指令

置位优先触发器是一个置位优先的锁存器。当置位信号(S1)和复位信号(R)都为真时,输出为真。

复位优先触发器是一个复位优先的锁存器。当置位信号(S)和 复位信号(R1)都为真时,输出为假。

Bit参数用于指定被置位或者复位的布尔参数。可选的输出反映 Bit参数的信号状态。

表6--7中给出了范例程序的真值表。

西门子S7-200可编程序控制器系统手册

表6--6 RS触发器指令的有效操作数

西门子S7-200可编程序控制器系统手册

时钟指令

读实时时钟和写实时时钟

读实时时钟(TODR)指令从硬件时钟中读当前时间和日期,并把它装载到一个8字节,起始地址为T的时间缓冲区中。写实时 时钟(TODW)指令将当前时间和日期写入硬件时钟,当前时钟 存储在以地址T开始的8字节时间缓冲区中。

西门子S7-200可编程序控制器系统手册

时钟指令

您必须按照BCD码的格式编码所有的日期和时间值(例如:用

16#97表示1997年)。图6--4给出了时间缓冲区(T)的格式。

时间日期(TOD)时钟在电源掉电或内存丢失后,初始化为下列

日期和时间:

日期: 90年1月1号

时间: 00:00:00

星 期 几 : 星 期 日

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0007(TOD数据错误),只对写实时时钟指令有效。
  • 000C(时钟模块不存在)

西门子S7-200可编程序控制器系统手册

提示

S7- 200 CPU不会检查和核实日期与星期是否合理。无效日期February 30 (2月30日)可能被接受。故必须确保输入的数据是正确的。

不要同时在主程序和中断程序中使用TODR/TODW指令。如果这样做,而在执行TOD指令时出现了 执行TOD指令的中断,则中断程序中的TOD指令不会被执行。SM4.3指示了试图对时钟进行两个同 时的访问(非致命错误0007)。

在S7-200中日时时钟只使用最低有效的两个数字表示年,所以对于2000年,表达为00。S7-200PLC不以任何方式使用年信息。但是,用到年份进行计算或比较的用户程序必须考虑两位的表示方

法和世纪的变化。在2096年之前可以进行闰年的正确处理。

扩展读实时时钟

扩展读实时时钟(TODRX)指令从PLC中读取当前时间、日期和 夏令时组态 ,并装载到从由T指定的地址开始的19字节缓冲区内。

扩展写实时时钟

扩展写实时时钟(TODWX)指令写当前时间、日期和夏令时组态到PLC中由T指定的地址开始的19字节缓冲区内。

您必须按照BCD码的格式编码所有的日期和时间值(例如:用16#02表示2002年)。表6--9给出了19字节时间缓冲区(T)的格式

时间日期时钟在电源掉电或内存丢失后,初始化下列日期和 时间:

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 000C(时钟卡不存在)
  • 0091(操作数超出范围)

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0007(TOD数据错误)
  • 000C(时钟卡不存在)
  • 0091(操作数超出范围)

 

日期: 90年1月1号

时间 00:00:00

星期几: 星期日

提示S7- 200 CPU仅在字节8中选择了“用户指定”模式时才使用字节9--18。否则,返回由STEP 7- Micro/WIN或SET_RTCX指令写入这些字节的最后一个数值。

西门子S7-200可编程序控制器系统手册

1 EU约定:在UTC三月份的最后一个星期日的上午1:00向前调整时间一个小时。在UTC时间十月份的最后一个星期日的上午2:00向后调整时间一个小时。(当进行修正时,当地时间依据于与UTC的时差。)。

2 US约定:在当地时间四月份的第一个星期日的上午2:00向前调整时间一个小时。在当地时间十月份的最后一个星期日的上午

2:00向后调整时间一个小时。

3 澳大利亚约定:在当地时间十月份的最后一个星期日上午2:00向前调整时间一个小时。在当地时间三月份的最后一个星期日的上午3:00向后调整时间一个小时。

4 澳大利亚(塔斯马尼亚岛)约定:在当地时间十月份的第一个星期日的上午2:00向前调整时间一个小时。在当地时间三月份的最后一个星期日的上午3:00向后调整时间一个小时。

5 新西兰约定:在当地时间十月份的第一个星期日的上午2:00向前调整时间一个小时。在当地时间三月份的第一个星期日或三月

15号以后的上午3:00向后调整时间一个小时。

通讯指令

网络读写指令

网络读指令(NETR)初始化一个通讯操作,根据表(TBL)的定 义,通过指定端口从远程设备上采集数据。网络写指令

(NETW)初始化一个通讯操作,根据表(TBL)的定义,通过指定

端口向远程设备写数据。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 如果功能返回出错信息,会置位表状态字节中的E。(见图6--5)

 

网络读指令可以从远程站点读取最多16个字节的信息,网络写 指令可以向远程站点写最多16个字节的信息。

在程序中,您可以使用任意条网络读写指令,但是在同一时 间,最多只能有8条网络读写指令被激活。例如,在所给的S7- 200 CPU中,可以有4条网络读指令和4条网络写指令, 或者2条网络读指令和6条网络写指令在同一时间被激活。

西门子S7-200可编程序控制器系统手册

您可以使用网络读写向导程序。要启动网络读写向导程序,在命令菜单中选择工具 > 指令向导,并且在指令向导窗口中选择网络读写。

表6--10 网络读写指令的有效操作数

输入/输出 数据类型 操作数
TBL BYTE VB、MB、*VD、*LD、*AC
PORT BYTE 常数 对于CPU 221CPU 222CPU 224: 0对于CPU 224XPCPU 226: 0或1

图6--5中给出了TBL参数参照表,表6--11列出了错误代码。

西门子S7-200可编程序控制器系统手册

图6--6给出了一个实例来解释网络读写指令的使用。本例中,考虑一条生产线正在灌装黄油桶并将其   送到四台包装机(打包机)中的一台上。打包机把8个黄油桶包装到一个纸板箱中。一个分流机控制着黄  油桶流向各个打包机。4个CPU221模块用于控制打包机,一个CPU222模块安装了TD200操作器接口,被用来控制分流机。

西门子S7-200可编程序控制器系统手册

图6--6 网络读写指令举例

图6--7中给出了2号站中接收缓冲区(VB200)和发送缓冲区(VB300)中的数据。S7--200使用网络读指令   不断地读取每个打包机的控制和状态信息。每次某个打包机包装完100箱,分流机会注意到,并用网   络写指令发送一条消息清除状态字。

西门子S7-200可编程序控制器系统手册

图6--7 网络读写指令中TBL数据举例

西门子S7-200可编程序控制器系统手册

实例:程序段读和程序段写指令

西门子S7-200可编程序控制器系统手册

实例:程序段读和程序段写指令

发送和接收指令

西门子S7-200可编程序控制器系统手册发送指令(XMT)用于在自由端口模式下依靠通讯口发送数据。

接收指令(RCV)启动或者终止接收消息功能。您必须为接收操 作指定开始和结束条件。从指定的通讯口接收到的消息被存储 在数据缓冲区(TBL)中。数据缓冲区的第一个数据指明了接收到的字节数。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0009(在Port0同时发送和接收)
  • 000B(在Port1同时发送和接收)
  • RCV参数错误,置位6或者SM186.6
  • S7- 200CPU没有处于自由端口模式。

表6--12 发送和接收指令的有效操作数

 

输入/输出 数据类型 操作数
TBL BYTE IB、QB、VB、MB、SMB、SB、*VD、*LD、*AC
PORT BYTE 常数 对于CPU 221CPU 222CPU 224: 0对于CPU 224XPCPU 226: 0或1

关于使用自由端口模式的更多信息,见226第7章中用自由端口模式创建用户自定义协议部分。

使用自由端口模式控制串行通讯口

通过编程,您可以选择自由端口模式来控制S7- 200的串行通讯口。当选择了自由端口模式,用户程序通过使用接收中断、发送中断、发送指令和接收指令来控制通讯口的操作。当处于自由端口模式时,通讯协议完全由梯形图程序控制。SMB30 (对于端口0)和SMB130(对于端口1,如果您的S7-200有两个端口的话)被用于选择波特率和校验类型。

当S7-    200处于STOP模式时,自由端口模式被禁止,重新建立正常的通讯(例如:编程设备的访问)。在最简单的情况下,可以只用发送指令(XMT)向打印机或者显示器发送消息。其他例子包括与条码阅

读器、称重计和焊机的连接。在每种情况下,您都必须编写程序,来支持在自由端口模式下与S7- 200通讯的设备所使用的协议。

只有当S7-  200处于RUN模式时,才能进行自由端口通讯。要使能自由端口模式,应该在SMB30 (端口0)或者SMB130 (端口1)的协议选择区中设置01。处于自由端口通讯模式时,不能与编程设备通讯。

提示

可以使用特殊寄存器位SM0.7来控制自由端口模式。SM0.7反映的是操作模式开关的当前位置。当SM0.7等于0时,开关处于TERM位置;当SM0.7=1时,操作模式开关位于RUN位置。如果只有模式开关处于RUN位置时,才允许自由端口模式,您可以将开关改变到其他位置上,使用编程设备监 控S7- 200的运行。

将PPI通讯转变为自由端口模式

SMB30和SMB130分别配置通讯口0和通讯口1,并且为自由端口操作提供波特率、校验和数据位数

的选择。自由端口的控制字节如图6--8所示。每一个配置都产生一个停止位。

西门子S7-200可编程序控制器系统手册

图6--8 用于自由端口模式的SM控制字节(SMB30或SMB130)

发送数据

发送指令使您能够发送一个字节或多个字节的缓冲区,最多为255个。 图6--9给出了发送缓冲区的格式。

如果有一个中断程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,则会产生一个中断(对端口0为中断事件9,对端口1为中断事件26)。

西门子S7-200可编程序控制器系统手册

图6--10 接收缓冲区的格式

您可以不使用中断,通过监视SMB86 (端口0)或者SMB186 (端口1)来接收消息。当接收指令未被激

活或者已经被中止时,这一字节不为0; 当接收正在进行时,这一字节为0。

如表6--13中所示,接收指令允许您选择消息的启始和结束条件。使用SMB86至SMB94对端口0进行   设置,SMB186至SMB194对端口1进行设置。

提示

当超限或有校验错误时,接收消息功能会自动终止。必须为接收消息功能操作定义一个启始条件和

一个结束条件(最大字符数)。

西门子S7-200可编程序控制器系统手册

表6--13 接收缓冲区字节(SMB86到SMB94和SMB186到SMB194)

接收指令的启动和结束条件

接收指令使用接收消息控制字节(SMB87或SMB187)中的位来定义消息起始和结束条件。

提示

当接收指令执行时,在接收口上有来自其他器件的信号,接收消息功能有可能从一个字符的中间开  始接收字符,从而导致校验错误和接收消息功能的中止。如果校验没有被使能,接收到的消息有可  能包含错误字符。当起始条件被指定为一个特定的起始字符或任意字符时,这种情况有可能发生,  正象下面第2.条和第6.条中所描述的那样。

接收指令支持几种消息起始条件。指定包含一个停顿或者一个空闲线检测的起始条件,通过在将字  符放到消息缓冲区之前,用一个字符的起始来强制接收消息功能和消息的起始相同步,来避免以上  问题。

接收指令支持几种起始条件:

  1. 空闲线检测:空闲线条件定义为传输线路上的安静或空闲时间。在SMW90或者SMW190中指定其毫秒数。当接收指令在程序中执行时,接收消息功能对空闲线条件进行检测。如果在空闲    线时间到之前接收到任何字符,接收消息功能会忽略那些字符并且按照SMW90或者SMW190 中给定的时间值重新启动空闲线定时器。参见图6--11。在空闲线时间到之后,接收消息功能将  所有接收到的字符存入消息缓冲区。空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止位)的时间。空闲线时间的典型值为在指定波特率下传输三个字符的时间。

对于二进制协议、没有特定起始字符的协议或者指定了消息之间最小时间间隔的协议,您可以  使用空闲线检测作为起始条件。

西门子S7-200可编程序控制器系统手册

图6--11 用空闲时间检测来启动接收指令

  1. 启动字符检测:启动字符是用作消息第一个字符的任意字符。当接收到SMB88或者SMB188中  指定的起始字符后,一条消息开始。接收消息功能将起始字符作为消息的第一个字符存入接收  缓冲区。接收消息功能忽略所有在起始字符之前接收到的字符。起始字符和起始字符之后接收  到的所有字符一起存入消息缓冲区。通常,对于所有消息都使用同一字符作为起始的ASCII码协议,您可以使用起使字符检测。设置: il = 0,sc = 1,bk = 0,SMW90/SMW190 = 无关,SMB88/SMB188 = 起始字符
  1. 空闲线和起始字符:接收功能可启动一个组合了空闲线和起始字符的消息。当接收指令执行时,接收消息功能检测空闲线条件。在空闲线条件满足后,接收消息功能搜寻指定的起始字符。如果接收到的字符不是起始字符,接收消息功能重新检测空闲线条件。所有在空闲线条件  满足和接收到起始字符之前接收到的字符被忽略掉。起始字符与字符串一起存入消息缓冲区。

空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止

位)的时间。空闲线时间的典型值为在指定波特率下传输三个字符的时间。

通常,对于指定消息之间最小时间间隔并且消息的首字符是特定设备的站号或其他消息的协议,您可以使用这种类型的起始条件。这种方式尤其适用于在通讯连接上有多个设备的情况。  在这种情况下,只有当接收到的消息的起始字符为特定的站号或者设备时,接收指令才会触发  一个中断。

设 置 : il = 1,sc = 1,bk = 0,SMW90/SMW190 > 0, SMB88/SMB188 = 起始字符

  1. 断开检测:当接收到的数据保持为零值的时间大于完整的字符传输时间时,指示断开。一个完  整字符传输时间定义为传输起始位、数据位、校验位和停止位的时间总和。如果接收指令被配  置为用接收一个断点作为消息的起始,则任何在断点之后接收到的字符都会存入消息缓冲区。  任何在断点之前接收到的字符都被忽略。

通常,只有当通讯协议需要时,才使用断点检测作为起始条件。

设置: il = 0,sc = 0,bk = 1,SMW90/SMW190 = 无关,

SMB88/SMB188 = 无 关

  1. 断开和起始字符:接收指令可配置为在接收一个断开条件后开始接收字符,然后按顺序接收特  定的起始字符。在断点条件满足之后,接收消息功能寻找特定的起始字符。如果收到了除起始  字符以外的任意字符,接收消息功能重新启动寻找新的断点。所有在断点条件满足和接收到起  始字符之前接收到的字符都会被忽略。起始字符与字符串一起存入消息缓冲区。

设置: il = 0,sc = 1,bk = 1,SMW90/SMW190 = 无关,

SMB88/SMB188 = 起始字符

  1. 任意字符:接收指令可配置为立即启动接收任意和所有字符,并将它们放入消息缓冲区。这是  空闲线检测的一种特殊情况。在这种情况下,空闲线时间(SMW90或者SMW190)被设置为0。  这使得接收指令一经执行,就立即开始接收字符。

设 置 :  il = 1,sc = 0,bk = 0,SMW90/SMW190 = 0,SMB88/SMB188 = 无 关用任意字符开始一条消息允许使用消息定时器,来监控消息接收是否超时。这对于自由端口协

议的主站是非常有用的,并且当在指定时间内,没有来自从站的任何响应的情况,也需要采取  超时处理。由于空闲线时间被设置为0,当接收指令执行时,消息定时器启动。如果没有其他终止条件满足,消息定时器超时会结束接收消息功能。

设 置 : il = 1,sc = 0,bk = 0,SMW90/SMW190 = 0,SMB88/SMB188 = 无 关

c/m = 1,tmr = 1,SMW92 = 消息超时(毫秒)

接收指令支持几种结束消息的方式。结束消息的方式可以是以下一种或者几种的组合:

  1. 结束字符检测:结束字符是用于指定消息结束的任意字符。在找到起始条件之后,接收指令检  查每一个接收到的字符,并且判断它是否与结束字符匹配。如果接收到了结束字符,将其存入  消息缓冲区,接收结束。

通常,对于所有消息都使用同一字符作为结束的ASCII码协议,您可以使用结束字符检测。您  可以使用结束字符检测与字符间定时器、消息定时器或者最大字符计数相结合来结束一条

消息。

设置: ec = 1,SMB89/SMB189 = 结束字符

  1. 字符间定时器:字符间时间是从一个字符的结束(停止位)到下一个字符的结束(停止位)的时间。  如果两个字符之间的时间间隔(包括第二个字符)超过了SMW92或者SMW192中指定的毫秒数,  接收消息功能结束。接收到每个字符后,字符间定时器重新启动。见图6--12。

当协议没有特定的消息结束字符时,您可以用字符间定时器来结束一条消息。由于定时器总是  包含接收一个完整字符(包括起始位、数据位、校验位和停止位)的时间,因而该时间值应设置为大于在指定波特率下传输一个字符的时间。

您可以使用字符间定时器与结束字符检测或者最大字符计数相结合,来结束一条消息。

西门子S7-200可编程序控制器系统手册

图6--12 使用字符间定时器来结束接收指令

  1. 消息定时器:消息定时器在启动消息后指定的时间终止消息。接收消息功能的启动条件一满足,消息定时器就启动。当经过的时间超出SMW92或者SMW192中指定的毫秒数时,消息定  时器时间到。见图6--13。

通常,当通讯设备不能保障字符中间没有时间间隔或者使用调制解调器通讯时,您可以使用消  息定时器。对于调制解调器方式,您可以用消息定时器指定一个从消息开始算起,接收消息允  许的最大时间。消息定时器的典型值是在当前波特率下,接收到最长消息所需时间值的大约

1.5倍。

可以使用消息定时器与结束字符检测或者最大字符计数相结合,来结束一条消息。  设置: c/m = 1,tmr = 1,SMW92/SMW192 = 超时(毫秒)

西门子S7-200可编程序控制器系统手册

图6--13 使用消息定时器来结束接收指令

  1. 最大字符计数:接收指令必须已知要接收的最大字符数(SMB94或SMB194)。当达到或者超出   这个值,接收消息功能结束。即使不会被用作结束条件,接收指令要求用户指定一个最大字符  个数。这是因为接收指令需要知道接收消息的最大长度,这样才能保证消息缓冲区之后的用户  数据不会被覆盖。

对于消息的长度已知并且恒定的协议,可以使用最大字符计数来结束消息。最大字符计数总是  与结束字符检测、字符间定时器或者消息定时器结合在一起使用。

  1. 奇偶校验错误:当硬件发出信号指示在接收的字符上有奇偶校验错误时,接收指令自动终止。  只有在SMB30或者SMB130中使能了校验位,才有可能出现校验错误。没有办法禁止此功能。
  2. 用户终止:用户程序可以通过执行另一个在SMB87或SMB187中的启用位(EN)设置为零的接收

指令来终止接收消息功能。这样可以立即终止接收消息功能。

 

使用字符中断控制接收数据

为了完全适应对各种协议的支持,您也可以使用字符中断控制的方式接收数据。接收每个字符时都会  产生中断。在执行与接收字符事件相连的中断程序之前,接收到的字符存入SMB2中,校验状态(如果   使能的话)存入SM3.0。SMB2是自由端口接收字符缓冲区。在自由端口模式下,每一个接收到的字符   都会存放到这一位置,便于用户程序访问。SMB3用于自由端口模式。它包含一个校验错误标志位。   当接收字符的同时检测到校验错误时,该位被置位。该字节的其他位被保留。利用校验位去丢弃消息  或向该消息发送否定应答。

在较高的波特率下(38.4K到115.2K)使用字符中断时,中断之间的时间间隔会非常短。例如:在38.4 时为260微秒;在57.6K时为173微秒;在115.2K时为86微秒。确保您的中断程序足够短,不会丢失字  符或者使用接收指令。

提示

SMB2和SMB3共享端口0和端口1。当接收端口0上的字符导致执行附加在那个事件(中断事件8)的中断程序时,SMB2包含端口0上接收的字符,而SMB3包含该字符的奇偶校验状态。当接收端口1 上的字符导致执行附加在那个事件(中断事件25)的中断程序时,SMB2包含端口1上接收的字符,而

SMB3包含该字符的奇偶校验状态。

西门子S7-200可编程序控制器系统手册

实例:发送和接收指令

西门子S7-200可编程序控制器系统手册

实例:发送和接收指令

获取端口地址和设置端口地址指令

获取端口地址指令(GPA)读取PORT指定的CPU口的站地址, 并将数值放入ADDR指定的地址中。西门子S7-200可编程序控制器系统手册

设置端口地址指令(SPA)将口的站地址(PORT)设置为ADDR指 定的数值。新地址不能永久保存。重新上电后,口地址将返回 到原来的地址值(用系统块下载的地址)。

设置ENO=0的错误条件:

  • 0006(间接寻址)
  • 0004(试图在中断程序中执行设置端口地址指令)

表6--14 获取端口地址和设置端口地址指令的有效操作数

输入/输出 数据类型 操作数
ADDR BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数(常数值仅用于设置端口地址指令。)
PORT BYTE 常数 对于CPU 221CPU 222CPU 224: 0对于CPU 224XPCPU 226: 0或1

比较指令

西门子S7-200可编程序控制器系统手册

数值比较

比较指令用于比较两个数值:

IN1 = IN2 IN1 >= IN2 IN1 <= IN2 IN1 > IN2 IN1 < IN2 IN1 <> IN2

字节比较操作是无符号的。整数比较操作是有符号的。双字比较操作是有符号的。实数比较操作是有符号的。

对于LADFBD:当比较结果为真时,比较指令接通触点

(LAD)或输出(FBD)。

对于STL:当比较结果为真时,比较指令将1载入栈顶,再将

1与栈顶值作“与”或者“或”运算(STL)。

当您使用IEC比较指令时,您可以使用各种数据类型作为输 入。但是,两个输入的数据类型必须一致。

注意

下列情况是致命错误,并且会导致S7- 200立即停止执行用

户程序:

  • 非法的间接地址(任意比较指令)
  • 非法的实数(例如:NAN),(实数比较指令)

为了避免这些情况的发生,在执行比较指令之前,要确保合 理使用了指针和存储实数的数值单元。

不管功率流的状态如何,比较指令都会被执行。

表6--15 比较指令的有效操作数

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

实例:比较指令

字符串比较

西门子S7-200可编程序控制器系统手册

字符串比较指令比较两个字符串的ASCII码字符:

IN1=IN2 IN1<>IN2

当比较结果为真时,比较指令使触点闭合(LAD)或者输出接通(FBD),或者对1 进行 LD, A 或 O 操作,并置入栈顶(STL)。

注意

下列情况是致命错误,并且会导致S7- 200立即停止执行用

户程序:

  • 非法的间接地址(任意比较指令)
  • 字符串的长度超过254个字符(字符串比较指令)
  • 一个字符串的起始地址和长度使它不适合所指定的存储 区(字符串比较指令)

为了避免这些情况的发生,在执行比较指令之前,要确保合 理使用了指针和保存ASCII码字符串的存储区。确保一个保存ASCII码字符串的缓冲区能够在指定的存储区完整的

保留。

不管功率流的状态如何,比较指令都会被执行。

表6--16 字符串比较指令的有效操作数

输入/输出 类型 操作数
IN1 STRING VB,LB,*VD,*LD,*AC,常数
IN2 STRING VB、LB、*VD、*LD、*AC
OUT BOOL I、Q、V、M、SM、S、T、C、L、功率流

转换指令

西门子S7-200可编程序控制器系统手册

标准转换指令
数字转换

字节转为整数(BTI)、整数转为字节(ITB)、整数转为双整数

(ITD)、双整数转为整数(DTI)、双整数转为实数(DTR)、BCD 码转为整数(BCDI)和整数转为BCD码(IBCD)。以上指令将输入 值IN转换为指定的格式并存储到由OUT指定的输出值存储区中。例如:您可以将双整数值转为实数值; 您也可以在整数和BCD码格式之间相互转换。

四舍五入和取整

四舍五入指令(ROUND)将一个实数转为一个双整数值,并将 四舍五入的结果存入OUT指定的变量中。

取整指令(TRUNC)将一个实数转为一个双整数值,并将实数的整数部分作为结果存入OUT指定的变量中。

分段

段码指令(SEG)允许您产生一个点阵,用于点亮七段码显示器的各个段。

表6--17 标准转换指令的有效操作数

输入/输出 数据类型 操作数
IN BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数
WORD、INT IW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、*AC、常数
DINT ID、QD、VD、MD、SMD、SD、LD、HC、AC、*VD、*LD、*AC、常数
REAL ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC、常数
OUT BYTEWORD、INT

DINT、REAL

IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*ACIW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、

*AC

ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC

西门子S7-200可编程序控制器系统手册

提示

如果想将一个整数转换成实数,先用整数转双整数指令,再用双整数转实数指令。

四舍五入取整和取整指令的操作

四舍五入取整指令(ROUND)将实数值IN转换成双整数值,并且 存入OUT指定的变量中。如果小数部分大于等于0.5,则数字向上取整。

取整指令(TRUNC)将一个实数值IN转换成一个双整数,并且存 入OUT指定的变量中。只有实数的整数部分被转换,小数部分 舍去。

使ENO=0的错误条件:

  • 1(溢出)
  • 0006(间接寻址)

 

受影响的SM标志位:

  • 1(溢出)

如果所转换的不是一个有效的实数,或者其数值太大以致于无法在输出中表示,则溢出标志位置位并  且输出不会改变。

西门子S7-200可编程序控制器系统手册

实例:标准转换指令

段码指令的操作

要点亮七段码显示器中的段,可以使用段码指令。段码指令将IN中指定的字符(字节)转换生成一个点

阵并存入OUT指定的变量中。

西门子S7-200可编程序控制器系统手册

ASCII码转换指令

西门子S7-200可编程序控制器系统手册有效的ASCII码字符为十六进制的30到39和41到46。

在ASCII码和十六进制数之间相互转换

ASCII码转十六进制数指令(ATH)将一个长度为LEN从IN开始的

ASCII码字符串转换成从OUT开始的十六进制数。十六进制数转ASCII码指令(HTA)将从输入字节IN开始的十六进制数,转换 成从OUT开始的ASCII码字符串。被转换的十六进制数的位数由长度LEN给出。

可转换的ASCII字符或十六进制数字的最大数目是255。有效

ASCII输入

有效的ASCII码输入字符是0到9的十六进制数代码值30到39, 和大写字符A到F的十六进制数代码值41到46这些字母数字 字符。

使ENO=0的错误条件:

  • 7(非法的ASCII码)只对ATH有效
  • 0006(间接寻址)
  • 0091(操作数超出范围)

受影响的SM标志位:

  • 7(非法的ASCII码)
将数值转为ASCII码

整数转ASCII码(ITA)、双整数转ASCII码(DTA)和实数转ASCII  码(RTA)指令,分别将整数、双整数或实数值转换成ASCII码字符。

表6- 18 ASCII码转换指令的有效操作数

输入/输出 数据类型 操作数
IN BYTE IB、QB、VB、MB、SMB、SB、LB、*VD、*LD、*AC
INT IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数
DINT ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、 常数
实型 ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC、常数
LEN、FMT BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数
OUT BYTE IB、QB、VB、MB、SMB、SB、LB、*VD、*LD、*AC
整数转ASCII码指令的操作数

整数转ASCII码(ITA)指令将一个整数字IN转换成一个ASCII码字 符串。格式FMT指定小数点右侧的转换精度和小数点是使用逗 号还是点号。转换结果放在OUT指定的连续8个字节中。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 非法的格式
  • nnn>5

ASCII码字符串始终是8个字节。

整数转ASCII码指令的格式操作数如图6--15所示。输出缓冲区的大小始终是8个字节。nnn表示输出缓   冲区中小数点右侧的数字位数。nnn域的有效范围是0--5。指定十进制小数点右面的数字为0使数值显   示为一个没有小数点的数值。对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。高4位必须为0。

图6--15中给出了一个数值的例子,其格式为使用点号(c=0),小数点右侧有三位小数(nnn=011)。输出

缓冲区的格式符合以下规则:

  • 正数值写入输出缓冲区时没有符号位。
  • 负数值写入输出缓冲区时以负号(--)开头。
  • 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。
  • 数值在输出缓冲区中是右对齐的。
西门子S7-200可编程序控制器系统手册

图6--15 整数转ASCII码(ITA)指令的FMT操作数

双整数转ASCII码指令操作

双整数转ASCII码(DTA)指令将一个双字IN转换成一个ASCII码字符串。格式操作数FMT指定小数点右侧的转换精度。转换结 果存储在从OUT开始的连续12个字节中。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 非法的格式
  • nnn>5

输出缓冲区的大小总是12个字节。

图6--16描述了双整数转ASCII码指令的格式操作数。nnn表示输出缓冲区中小数点右侧的数字位数。nnn域的有效范围是0--5。指定十进制小数点右面的数字为0使数值显示为一个没有小数点的数值。对   于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为  整数和小数的分隔符。高4位必须为0。

图6--16中给出了一个数值的例子,其格式为使用点号(c=0),小数点右侧有四位小数(nnn=100)。输出

缓冲区的格式符合以下规则:

  • 正数值写入输出缓冲区时没有符号位。
  • 负数值写入输出缓冲区时以负号(--)开头。
  • 小数点左侧的开头的0 (除去靠近小数点的那个之外)被隐藏。
  • 数值在输出缓冲区中是右对齐的。
西门子S7-200可编程序控制器系统手册

图6--16 双整数转ASCII码(DTA)指令的FMT操作数

实数转ASCII码指令操作

实数转ASCII码指令(RTA)将一个实数值IN转为ASCII码字符 串。格式操作数FMT指定小数点右侧的转换精度,小数点是用 逗号还是用点号表示和输出缓冲区的大小。

转换结果存储在从OUT开始的输出缓冲区中。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • nnn>5
  • ssss<3
  • ssss<OUT中的字符个数

结果ASCII码字符的位数(或长度)就是输出缓冲区的大小,它的值可以在3到15字节或字符之间。

S7- 200的实数格式支持最多7位小数。试图显示7位以上的小数会产生一个四舍五入错误。

图6--17是对RTA指令中格式操作数FMT的描述。ssss表示输出缓冲区的大小。0、1或者2个字节的大   小是无效的。nnn表示输出缓冲区中小数点右侧的数字位数。nnn域的有效范围是0--5。指定十进制小   数点右面的数字为0使数值显示为一个没有小数点的数值。对于nnn大于5或者指定的输出缓冲区太小   以致于无法存储转换值的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。

图6--17中给出了一个数值的例子,其格式为:使用点号(c=0)、小数点右侧有1位小数(nnn=001)和6

个字节的缓冲区大小(ssss=0110)。输出缓冲区的格式符合以下规则:

  • 正数值写入输出缓冲区时没有符号位。
  • 负数值写入输出缓冲区时以负号(--)开头。
  • 小数点左侧的开头的0 (除去靠近小数点的那个之外)被隐藏。
  • 小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入。
  • 输出缓冲区的大小应至少比小数点右侧的数字位数多三个字节。
  • 数值在输出缓冲区中是右对齐的。
西门子S7-200可编程序控制器系统手册

图6--17 实数转ASCII码(RTA)指令的FMT操作数

西门子S7-200可编程序控制器系统手册

字符串转换指令

西门子S7-200可编程序控制器系统手册

将数值转换为字符串

整数转字符串(ITS)、双整数转字符串(DTS)和实数转字符串

(RTS)指令,将整数、双整数或实数值(IN)转换成ASCII码字符

串(OUT)。

整数转字符串的操作

整数转字符串指令(ITS)将一个整数字IN转换为8个字符长的

ASCII码字符串。格式操作数FMT指定小数点右侧的转换精度和使用逗号还是点号作为小数点。结果字符串被写入从OUT开 始的9个连续字节中。要得到更多消息,请参见第4章字符串的 格式一节。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 非法格式(nnn>5)

图6--18是对整数转字符串指令中格式操作数的描述。输出字符 串的长度总是8个字符。nnn表示输出缓冲区中小数点右侧的数 字位数。nnn域的有效范围是0--5。指定十进制小数点右面的数字为0使数值显示为一个没有小数点的数值。如果nnn的值大 于5,输出是由8个空格键的ASCII码组成的字符串。c指定是用 逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。格式操作数的高4位必须为0。

图6--18中给出了一个数值的例子,其格式为:使用点号(c=0)并且小数点后保留3位小数。OUT的值为  字符串的长度。

输出缓冲区的格式符合以下规则:

  • 正数值写入输出缓冲区时没有符号位。
  • 负数值写入输出缓冲区时以负号(--)开头。
  • 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。
  • 数值在输出缓冲区中是右对齐的。

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

双整数转字符串指令操作

双整数转字符串指令(DTS)将一个双整数IN转换为一个长度为

12个字符的ASCII码字符串。格式操作数FMT指定小数点右侧的转换精度和使用逗号还是点号作为小数点。结果字符串被写 入从OUT开始的连续13个字节。要得到更多消息,请参见第4 章字符串的格式一节。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 非法格式(nnn>5)

图6--19是对整数转字符串指令中格式操作数的描述。输出字符串的长度总是8个字符。nnn表示输出缓冲区中小数点右侧的数字位数。nnn域的有效范围是0--5。指定十进制小数点右面的数字为0使数值   显示为一个没有小数点的数值。如果nnn的值大于5,输出是由12个空格键的ASCII码组成的字符串。

c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。格式操作数的高4位必须为0。

图6--19中给出一个数值的例子,其格式为:使用点号(c=0)并且小数点后保留4位小数。OUT的值为字

符串的长度。输出缓冲区的格式符合以下规则:

西门子S7-200可编程序控制器系统手册

图6--19 整数转字符串指令的FMT操作数

实数转字符串指令操作

实数转字符串指令(RTS)将一个实数值IN转换为一个ASCII码字 符串。格式操作数FMT指定小数点右侧的转换精度和使用逗号 还是点号作为小数点。

转换结果放在从OUT开始的一个字符串中。结果字符串的长度 由格式操作数给出,它可以是3到15个字符。要得到更多消 息,请参见第4章字符串的格式一节。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 非法格式:nnn> 5 ssss < 3

ssss < 所需字符数

S7- 200的实数格式支持最多7位小数。试图显示7位以上的小数会产生一个四舍五入错误。

图6--20是对实数转字符串指令中格式操作数的描述。ssss表示输出字符串的长度。0、1或者2个字节     的大小是无效的。nnn表示输出缓冲区中小数点右侧的数字位数。nnn域的有效范围是0--5。指定十进   制小数点右面的数字为0使数值显示为一个没有小数点的数值。对于nnn大于5或者指定的输出缓冲区   太小以致于无法存储转换值的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。

图6--20中给出了一个数值的例子,其格式为:使用点号(c=0),小数点右侧有1位小数(nnn=001)和6

个字符的缓冲区大小(ssss=0110)。OUT的值为字符串的长度。输出缓冲区的格式符合以下规则:

  • 正数值写入输出缓冲区时没有符号位。
  • 负数值写入输出缓冲区时以负号(--)开头。
  • 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。
  • 小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入。
  • 输出缓冲区的大小应至少比小数点右侧的数字位数多三个字节。
  • 数值在输出缓冲区中是右对齐的。
西门子S7-200可编程序控制器系统手册

图6--20 实数转字符串指令的FMT操作数

将子字符串转换为数字值

西门子S7-200可编程序控制器系统手册

子字符串转整数(STI)、子字符串转双整数(STD)和子字符串转 实数(STR)指令,将从偏移量INDX开始的字符串值IN转换成整 数/双整数或实数值OUT。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 009B(索引 = 0)
  • 1(溢出)

子字符串转整数和字符串转双整数转换具有下列格式的 字符串:[空格] [+或--] [数字0 -- 9]

字符串转实数指令转换具有下列格式的字符串:

[空格] [+或--] [数字0 -- 9] [. 或,][数字0 -- 9]

INDX值通常设置为1,从字符串的第一个字符开始转换。

INDX可以被设置为其他值,从字符串的不同位置进行转换。这可以被用于字符串中包含非数值字符的情况。例如,如果输 入字符串是“Temperature: 77.8”,则将INDX设为数值13, 跳过字符串起始字“ Temperature:”。

子字符串转实数指令不能用于转换以科学计数法或者指数形式 表示实数的字符串。指令不会产生溢出错误(SM1.1),但是它会将字符串转换到指数之前,然后停止转换。例如:字符串

“1.234E6”转换为实数值1.234,并且没有错误提示。

当到达字符串的结尾或者遇到第一个非法字符时,转换指令结束。非法字符是指任意非数字(0 - 9)

字符。

当转换产生的整数值过大以致输出值无法表示时,溢出标志(SM1.1)会置位。例如:当输入字符串产

生的数值大于32767或者小于- 32768时,子字符串转整数指令会置位溢出标志。

当输入字符串中并不包含可以转换的合法数值时,溢出标志(SM1.1)也会置位。例如:如果输入字符

串的“A123”,转换指令会置位SM1.1 (溢出)并且输出值保持不变。

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

编码和解码指令

西门子S7-200可编程序控制器系统手册

编码

编码指令(ENCO)将输入字IN的最低有效位的位号写入输出字

节OUT的最低有效“半字节”(4位)中。

解码

译码指令(DECO)根据输入字节(IN)的低四位所表示的位号置输 出字(OUT)的相应位为1。输出字的所有其他位都清0。

SM标志位和ENO

对于编码和译码指令,下列条件影响ENO。

使ENO=0的错误条件:

  • 0006(间接寻址)

西门子S7-200可编程序控制器系统手册

计数器指令

西门子S7-200可编程序控制器系统手册

SIMATIC计数器指令
增计数器

增计数指令(CTU)从当前计数值开始,在每一个(CU)输入状态

从低到高时递增计数。当CXX的当前值大于等于预设值PV 时,计数器位CXX置位。当复位端(R)接通或者执行复位指令 后,计数器被复位。当它达到最大值(32,767)后,计数器停 止计数。

STL操作:

  • 复位输入:栈顶
  • 向上计数输入:数值载入第二个栈位置

 

减计数器

减计数指令(CTD)从当前计数值开始,在每一个(CD)输入状态 的低到高时递减计数。当CXX的当前值等于0时,计数器位CXX置位。当装载输入端(LD)接通时,计数器位被复位,并将 计数器的当前值设为预设值PV。当计数值到0时,计数器停止 计数,计数器位CXX接通。

STL操作:

  • 装载输入:栈顶

向下计数输入:数值载入第二个栈位置。

增/减计数器

增/减计数指令(CTUD),在每一个增计数输入(CU)的低到高时增计数,在每一个减计数输入(CD)的   低到高时减计数。计数器的当前值CXX保存当前计数值。在每一次计数器执行时,预设值PV与当前    值作比较。

当达到最大值(32767)时,在增计数输入处的下一个上升沿导致当前计数值变为最小值(- 32768)。当

达到最小值(- 32768)时,在减计数输入端的下一个上升沿导致当前计数值变为最大值(32767)。

当CXX的当前值大于等于预设值PV时,计数器位CXX置位。否则,计数器位关断。当复位端(R)接

通或者执行复位指令后,计数器被复位。

STL操作:

  • 复位输入:栈顶
  • 向下计数输入:数值载入第二个栈位置
  • 向上计数输入:数值载入第三个栈位置

 

表6- 22 SIMATIC计数器指令的有效操作数

输入/输出 数据类型 操作数
Cxx WORD 常数(C0到C255)
CU、CD、LD、R BOOL I、Q、V、M、SM、S、T、C、L、功率流
PV INT IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数

提示

由于每一个计数器只有一个当前值,所以不要多次定义同一个计数器。(具有相同标号的增计数器、  增/减计数器、减计数器访问相同的当前值。)

当使用复位指令复位计数器时,计数器位复位并且计数器当前值被清零。计数器标号既可以用来表

示当前值,又可以用来表示计数器位。

表6--23 计数器指令的操作

 

类型 操作 计数器位 上电周期/首次扫描
CTU CU增加当前值。当前值持续增加直至32767。 当前值 >= 预设值时,计数器位接通。 计数器位关断。 当前值可以保留。1
CTUD CU增加当前值。CD使当前值减少

当前值持续增加或减少除非计数器被复位

当前值 >= 预设值时, 计数器位接通。 计数器位关断。 当前值可以保留。1
CTD CD使当前值减少直至当前值为0。 当前值 >= 预设值时,当前值=0 计数器位关断。当前值可以保留。1

1 您可以选择计数器的当前值是否掉电保护。有关S7- 200 CPU有记忆存储器的详细内容参阅第4章。

西门子S7-200可编程序控制器系统手册

实例:SIMATIC减计数器指令

西门子S7-200可编程序控制器系统手册

实例:SIMATIC增/减计数器指令

IEC计数器指令

西门子S7-200可编程序控制器系统手册

增计数器

增计数指令(CTU)在每一个(CU)输入的上升沿从当前值开始增 计数,直至预设值(PV)。当当前值(CV)大于等于预设值时,计 数器输出位(Q)接通。当复位输入(R)使能时,计数器复位。当 计数到达预设值时,增计数器停止。

减计数器

减计数器指令(CTD)从预设值开始,在每一个(CD)输入的上升  沿减计数。当当前值(CV)等于0时,计数器输出位(Q)接通。当 装载输入(LD)使能时,计数器复位并且将计数器的当前值设为 预设值PV。当计数值到0时,减计数器停止。

/减计数器

增/减计数器指令(CTUD),在每一个增计数输入(CU)从低到高 时增计数;在每一个减计数输入(CD)从低到高时减计数。当当 前值等于预设值时,增计数输出(QU)接通。当当前值等于0 时,减计数输出(QD)接通。当装载输入(LD)使能时,计数器将 当前值设为预设值(PV)。类似的,当复位端(R)使能时,计数器复位并且当前值清0。当计数值达到预设值或者0时,计数器 停止。

表6--24 IEC计数器指令的有效操作数

输入/输出 数据类型 操作数
Cxx CTU、CTD、CTUD 常数(C0到C255)
CU、CD、LD、R BOOL I、Q、V、M、SM、S、T、C、L、功率流
PV INT IW、QW、VW、MW、SMW、SW、LW、AC、AIW、*VD、*LD、*AC,常数
Q、QU、QD BOOL I、Q、V、M、SM、S、L
CV INT IW、QW、VW、MW、SW、LW、AC、*VD、*LD、*AC

提示

由于每一个计数器只有一个当前值,所以不要多次定义同一个计数器。(具有相同标号的增计数器、  增/减计数器和减计数器访问相同的当前值。)

西门子S7-200可编程序控制器系统手册

实例:IEC计数器指令

高速计数器指令

定义高速计数器

定义高速计数器指令(HDEF)为指定的高速计数器(HSCx)选择操作模式。模块的选择决定了高速计数器的时钟、方向、启动 和复位功能。

对于每一个高速计数器使用一条定义高速计数器指令。

使ENO=0的错误条件:

  • 0003(输入点冲突)
  • 0004(中断中的非法指令)
  • 000A(HSC重复定义)
高速计数器

西门子S7-200可编程序控制器系统手册

高速计数器指令(HSC)在HSC特殊存储器位状态的基础上,配置和控制高速计数器。参数N指定高速计数器的标号。

高速计数器可以被配置为12种模式中的任意一种。参见表6--26。

每个计数器有用于时钟、方向控制、重设和启动的专用输入,它们支持这些功能。对于两相计数 器,两个时钟都可以运行在最高频率。在正交模式下,您可以选择一倍速(1x)或者四倍速(4x)计数速  率。所有计数器都可以运行在最高频率下而互不影响。

使ENO=0的错误条件:

  • 0001(在HDEF指令之前执行HSC指令)
  • 0005(同时执行HSC/PLS)

表6--25 高速计数器指令的有效操作数

输入/输出 数据类型 操作数
HSC、MODE BYTE 常数
N WORD 常数

可以参考资料光盘上应用程序中使用高速计数器的程序。参见应用示例4和应用示例29

高速计数器用于对S7- 200扫描速率无法控制的高速事件进行计数。高速计数器的最高计数频率取决于您的CPU类型。更多消息请参见附录A。

提示

CPU 221和CPU 222支持四个高速计数器:HSC0、HSC3、HSC4和HSC5。不支持HSC1和HSC2。

CPU 224、CPU 224XP和CPU 226支持六个高速计数器:HSC0到HSC5。

一般来说,高速计数器被用作驱动鼓式计时器,该设备有一个安装了增量轴式编码器的轴,以恒定的  速度转动。轴式编码器每圈提供一个确定的计数值和一个复位脉冲。来自轴式编码器的时钟和复位脉  冲作为高速计数器的输入。

高速计数器装入一组预设值中的第一个值,当前计数值小于当前预设值时,希望的输出有效。计数器

设置成在当前值等于预设值和有复位时产生中断。

随着每次当前计数值等于预设值的中断事件的出现,一个新的预设值被装入,并重新设置下一个输出  状态。当出现复位中断事件时,设置第一个预设值和第一个输出状态,这个循环又重新开始。

由于中断事件产生的速率远低于高速计数器的计数速率,用高速计数器可实现精确控制,而与PLC整   个扫描周期的关系不大。采用中断的方法允许在简单的状态控制中用独立的中断程序装入一个新的预  设值。(同样的,也可以在一个中断程序中,处理所有的中断事件。)

 

理解不同的高速计数器

对于操作模式相同的计数器,其计数功能是相同的。计数器有四种基本类型:带内部方向控制的单相  计数器,带外部方向控制的单相计数器,带2个时钟输入的双相计数器和带A/B相正交计数器的双相计   数器。注意,并不是所有计数器都能使用每一种模式。可使用每种类型:不带复位或启动输入、带复  位和不带启动、或带启动和复位输入。

  • 当激活复位输入端时,计数器清除当前值并一直保持到复位端失效。
  • 当激活启动输入端时,它允许计数器计数。当启动端失效时,计数器的当前值保持为常数,并且忽略时钟事件。
  • 如果在启动输入端无效的同时,复位信号被激活,则忽略复位信号,当前值保持不变。如果在
  • 复位信号被激活的同时,启动输入端被激活,当前值被清除。
  • 在使用高速计数器之前,应该用HDEF (高速计数器定义)指令为计数器选择一种计数模式。使用初次扫描存储器位SM0.1 (该位仅在第一次扫描周期接通,之后断开)来调用一个包含HDEF指令的子程序。
高速计数器编程

您可以使用指令向导来配置计数器。向导使用下列信息:计数器类型和模式、计数器预设值、计数器  当前值和初始计数方向。要启动HSC指令向导,可以在命令菜单窗口中选择工具 > 指令向导,然后在向导窗口中选择HSC指令。

对高速计数器编程,您必须完成下列基本操作:

  • 定义计数器和模式
  • 设置控制字节
  • 设置初始值
  • 设置预设值
  • 指定并使能中断程序
  • 激活高速计数器
定义计数器的模式和输入

使用高速计数器定义指令来定义计数器的模式和输入。

表6--26中给出了与高速计数器相关的时钟、方向控制、复位和启动输入点。同一个输入点不能用于两   个不同的功能,但是任何一个没有被高速计数器的当前模式使用的输入点,都可以被用作其他用途。  例如,如果HSC0正被用于模式1,它占用I0.0和I0.2,则I0.1可以被边缘中断或者HSC3占用。

提示

注意:HSC0的所有模式(模式12除外)总是使用I0.0,HSC4的所有模式总是使用I0.3,因此在使用  这些计数器时,相应的输入点不能用于其他功能。

表6--26 高速计数器的输入点

西门子S7-200可编程序控制器系统手册

HSC模式举例

图6--22到图6--26中给出了每种模式下计数器功能的时序图。

西门子S7-200可编程序控制器系统手册

图6--22 模式0、1或2操作实例

西门子S7-200可编程序控制器系统手册

图6--23 模式3、4或5操作实例

当您使用模式6、7或者8时,如果增时钟输入的上升沿与减时钟输入的上升沿之间的时间间隔小于0.3微秒,高速计数器会把这些事件看作是同时发生的。如果这种情况发生,当前值不变,计数方向  指示不变。只要增时钟输入的上升沿与减时钟输入的上升沿之间的时间间隔大于0.3微秒,高速计数  器分别捕捉每个事件。在以上两种情况下,都不会有错误产生,计数器保持正确的当前值。

西门子S7-200可编程序控制器系统手册

图6--24 模式6、7或8操作实例

西门子S7-200可编程序控制器系统手册

图6--25 模式9、10或者11操作实例(一倍速正交模式)

西门子S7-200可编程序控制器系统手册

图6--26 模式9、10或者11操作实例(四倍速正交模式)

复位和启动操作

如图6--27中所示的复位和启动操作适用于使用复位和启动输入的所有模式。在复位和启动输入图中,

复位输入和启动输入都被编程为高电平有效。

西门子S7-200可编程序控制器系统手册

图6--27 带有或者不带启动输入的复位操作举例

对于高速计数器,有三个控制位用于配置复位和启动信号的有效状态以及选择一倍速或者四倍速计数  模式(仅用于正交计数器)。这些位位于各个计数器的控制字节中并且只有在HDEF指令执行时使用。在表6--27中给出了这些位的定义。

提示

在执行HDEF指令前,必须把这些控制位设定到希望的状态。否则,计数器对计数模式的选择取缺    省设置。

一旦HDEF指令被执行,您就不能再更改计数器的设置,除非先进入STOP模式。

表6--27 复位和启动输入的有效电平以及1x/4x控制位

HSC0 HSC1 HSC2 HSC4 描述(仅当HDEF执行时使用)
SM37.0 SM47.0 SM57.0 SM147.0 用于复位的有效电平控制位1:0 = 复位为高电平有效 1 = 复位为低电平有效
-- -- -- SM47.1 SM57.1 -- -- -- 用于启动的有效电平控制位1:0 = 启动为高电平有效 1 = 启动为低电平有效
SM37.2 SM47.2 SM57.2 SM147.2 正交计数器的计数速率选择:0 = 4X计数速率 1 = 1X计数速率

1 缺省设置为:复位输入和启动输入高电平有效,正交计数率为四倍速(四倍输入时钟频率)。

西门子S7-200可编程序控制器系统手册

实例:高速计数器定义指令

设置控制字节

只有定义了计数器和计数器模式,才能对计数器的动态参数进行编程。每个高速计数器都有一个控制

字节,包括以下内容:

  • 使能或者禁止计数器
  • 控制计数方向(只对模式0、1和2有效)或者对所有其他模式定义初始化计数方向。
  • 装载初始值
  • 装载预设值

在执行HSC指令时,要检验控制字节和相关的初始值和预设值。表6--28中对这些控制位逐一做了  说明。

表6--28 HSC0到HSC5的控制位

西门子S7-200可编程序控制器系统手册

表6--28 HSC0到HSC5的控制位

读取当前值

只能使用数据类型HC (高速计数器当前值)后跟计数器编号(0、1、2、3、4或5)来读取每个高速计数器的当前值 ,如表6--29所示。当希望读取状态图或用户程序中的当前计数时,使用HC数据类型。

HC数据类型为只读;不能使用HC数据类型将一个新当前计数写入高速计数器。

表6--29 HSC0、HSC1、HSC2、HSC3、HSC4和HSC5的当前值

西门子S7-200可编程序控制器系统手册

实例:读取和保存当前计数

设置初始值和预设值

每个高速计数器在内部存储了一个32位当前值(CV)和一个32位预设值(PV)。当前值是计数器的实际计   数值,而预设值是一个可选择的比较值,它用于在当前值到达预设值时触发一个中断。可使用上一部  分所述的HC数据类型读取当前值。无法直接读取预设值。要将新当前值或预设值载入高速计数器, 必须设置保持期望的新当前和/或新预设值的控制字节和特殊存储双字,也要执行HSC指令以使新数值传送到高速计数器。表6--30列出用于保持期望的新当前值和预设值的特殊存储双字。

使用下列步骤将一个新当前值和/或新预设值写入高速计数器(步骤1和2可以任意顺序完成):

  1. 将要写入的数值装载到合适的SM新当前值和/或新预设值中(表6- 30)。装载这些数值不会影响

高速计数器。

  1. 置位或清除合适控制字节中的合适位(表6- 28)指示是否更新当前和/或预设值(位5用于预设

值,位x.6用于当前值)。操作这些位不会影响高速计数器。

  1. 执行HSC指令引用合适的高速计数器编号。执行该指令将检查控制字节。如果控制字节指定更  新当前值、预设值或两者,则将合适的数值从SM新当前值和/或新预设值位置复制到高速计数   器内部寄存器中。

表6--30 HSC0、HSC1、HSC2、HSC3、HSC4和HSC5的新当前值和新预设值

西门子S7-200可编程序控制器系统手册

提示对控制字节和新当前值和新预设值的SM位置的修改将不影响高速计数器,直到执行相应的HSC指  令为止。
西门子S7-200可编程序控制器系统手册

实例:更新当前值和预设值

指定中断

所有计数器模式都支持在HSC的当前值等于预设值时产生一个中断事件。使用外部复位端的计数模式  支持外部复位中断。除去模式0、1和2之外,所有计数器模式支持计数方向改变中断。每种中断条件   都可以分别使能或者禁止。要得到关于使用中断的更多信息,参见通讯和中断指令一节。

注意当使用外部复位中断时,不要写入初始值,或者是在该中断程序中禁止再允许高速计数器,否则会  产生一个致命错误。

 

状态字节

每个高速计数器都有一个状态字节,其中的状态存储位指出了当前计数方向,当前值是否大于或者等  于预设值。表6--31给出了每个高速计数器状态位的定义。

提示只有在执行中断程序时,状态位才有效。监视高速计数器状态的目的是使其他事件能够产生中断以 完成更重要的操作。

表6--31 HSC0到HSC5的状态位

西门子S7-200可编程序控制器系统手册

高速计数器的初始化步骤举例

以下以HSC1为例,对初始化和操作的步骤进行描述。在初始化描述中,假定S7- 200已经置成RUN 模式。因此,首次扫描标志位为真。如果不是这种情况,请记住在进入RUN模式之后,对每一个高速  计数器的HDEF指令只能执行一次。对一个高速计数器第二次执行HDEF指令会引起运行错误,而且不能改变第一次执行HDEF指令时对计数器的设置。

HSC1为内部方向控制的单相增/减计数器(模式0、1或2),初始化步骤如下:

初始化模式0、1或2

 

  1. 用初次扫描存储器位(SM0.1=1)调用执行初始化操作的子程序。由于采用了这样的子程序调 用,后续扫描不会再调用这个子程序,从而减少了扫描时间,也提供了一个结构优化的程序。
  2. 初始化子程序中,根据所希望的控制操作对SMB47置数。例如:

SMB47 = 16#F8 产生下列结果:

启用计数器写新当前值写新预设值

将方向设为向上计数

将启动和复位输入设为高电平有效

  1. 在HSC输入设为1,MODE输入设为下列其中一个数值时,执行HDEF指令:0用于无外部复位  或启动,1用于外部复位和无启动,或2用于外部复位和启动。
  2. 向SMD48(双字)写入所希望的初始值(若写入0,则清除)。
  3. 向SMD52(双字)写入所希望的预设值。
  4. 为了捕获当前值(CV)等于预设值(PV)中断事件,编写中断子程序,并指定CV=PV中断事件(事  件13)调用该中断子程序。参看本章中断一节,以了解中断处理的细节。
  5. 为了捕获外部复位事件,编写中断子程序,并指定外部复位中断事件(事件15)调用该中断子  程序。
  6. 执行全局中断允许指令(ENI)来允许HSC1中断。
  7. 执行HSC指令,使S7- 200对HSC1编程。
  8. 退出子程序。

 

初始化模式3、4或5

HSC1为外部方向控制的单相增/减计数器(模式3、4或5),初始化步骤如下:

 

  1. 用初次扫描存储器位(SM0.1=1)调用执行初始化操作的子程序。由于采用了这样的子程序调 用,后续扫描不会再调用这个子程序,从而减少了扫描时间,也提供了一个结构优化的程序。
  2. 初始化子程序中,根据所希望的控制操作对SMB47置数。例如:

SMB47 = 16#F8 产生下列结果:

启用计数器写新当前值写新预设值

将HSC的初始方向设为向上计数将启动和复位输入设为高电平有效

  1. 在HSC输入设为1,MODE输入设为下列其中一个数值时,执行HDEF指令:3用于无外部复位  或启动,4用于外部复位和无启动,或5用于外部复位和启动。
  2. 向SMD48(双字)写入所希望的初始值(若写入0,则清除)。
  3. 向SMD52(双字)写入所希望的预设值。
  4. 为了捕获当前值(CV)等于预设值(PV)中断事件,编写中断子程序,并指定CV=PV中断事件(事  件13)调用该中断子程序。参看本章中断一节,以了解中断处理的细节。
  5. 为了捕获计数方向改变中断事件,编写中断子程序,并指定计数方向改变中断事件(事件14)调  用该中断子程序。
  6. 为了捕获外部复位事件,编写中断子程序,并指定外部复位中断事件(事件15)调用该中断子  程序。
  7. 执行全局中断允许指令(ENI)来允许HSC1中断。
  8. 执行HSC指令,使S7- 200对HSC1编程。
  9. 退出子程序。
初始化模式6、7或8

HSC1为具有增/减两种时钟的两相增/减计数器(模式6、7或8),初始化步骤如下:

  1. 用初次扫描存储器位(SM0.1=1)调用执行初始化操作的子程序。由于采用了这样的子程序调 用,后续扫描不会再调用这个子程序,从而减少了扫描时间,也提供了一个结构优化的程序。
  2. 初始化子程序中,根据所希望的控制操作对SMB47置数。例如:

SMB47 = 16#F8 产生下列结果:

启用计数器写新当前值写新预设值

将HSC的初始方向设为向上计数将启动和复位输入设为高电平有效

  1. 在HSC输入设为1,MODE设为下列其中一个数值时,执行HDEF指令:6用于无外部复位或启    动,7用于外部复位和无启动,或8用于外部复位和启动。
  2. 向SMD48(双字)写入所希望的初始值(若写入0,则清除)。
  3. 向SMD52(双字)写入所希望的预设值。
  4. 为了捕获当前值(CV)等于预设值(PV)中断事件,编写中断子程序,并指定CV=PV中断事件(事  件13)调用该中断子程序。参看本章中断一节,以了解中断处理的细节。
  5. 为了捕获计数方向改变中断事件,编写中断子程序,并指定计数方向改变中断事件(事件14)调  用该中断子程序。
  6. 为了捕获外部复位事件,编写中断子程序,并指定外部复位中断事件(事件15)调用该中断子  程序。
  7. 执行全局中断允许指令(ENI)来允许HSC1中断。
  8. 执行HSC指令,使S7- 200对HSC1编程。
  9. 退出子程序。
初始化模式9、10或11

HSC1为A/B相正交计数器(模式9、10或11),初始化步骤如下:

  1. 用初次扫描存储器位(SM0.1=1)调用执行初始化操作的子程序。由于采用了这样的子程序调 用,后续扫描不会再调用这个子程序,从而减少了扫描时间,也提供了一个结构优化的程序。
  2. 初始化子程序中,根据所希望的控制操作对SMB47置数。

实例(1x计数模式):

SMB47 = 16#FC 产生下列结果:

启用计数器写新当前值写新预设值

将HSC的初始方向设为向上计数将启动和复位输入设为高电平有效

实例(4x计数模式):

SMB47 = 16#F8 产生下列结果:

启用计数器写新当前值写新预设值

将HSC的初始方向设为向上计数将启动和复位输入设为高电平有效

  1. 在HSC输入设为1,MODE输入设为下列其中一个数值时,执行HDEF指令:9用于无外部复位  或启动,10用于外部复位和无启动,或11用于外部复位和启动。
  2. 向SMD48(双字)写入所希望的初始值(若写入0,则清除)。
  3. 向SMD52(双字)写入所希望的预设值。
  4. 为了捕获当前值(CV)等于预设值(PV)中断事件,编写中断子程序,并指定CV=PV中断事件(事  件13)调用该中断子程序。参见本章中断一节,以了解中断处理的细节。
  5. 为了捕获计数方向改变中断事件,编写中断子程序,并指定计数方向改变中断事件(事件14)调  用该中断子程序。
  6. 为了捕获外部复位事件,编写中断子程序,并指定外部复位中断事件(事件15)调用该中断子  程序。
  7. 执行全局中断允许指令(ENI)来允许HSC1中断。
  8. 执行HSC指令,使S7- 200对HSC1编程。
  9. 退出子程序。
初始化模式12

HSC0为PTO0产生的脉冲计数(模式12),初始化步骤如下:

  1. 用初次扫描存储器位(SM0.1=1)调用执行初始化操作的子程序。由于采用了这样的子程序调 用,后续扫描不会再调用这个子程序,从而减少了扫描时间,也提供了一个结构优化的程序。
  2. 初始化子程序中,根据所希望的控制操作对SMB37置数。例如:

SMB37 = 16#F8 产生下列结果:

启用计数器写新当前值写新预设值

将方向设为向上计数

将启动和复位输入设为高电平有效

  1. 执行HDEF指令时,HSC输入置0,MODE输入置12。
  2. 向SMD38(双字)写入所希望的初始值(若写入0,则清除)。
  3. 向SMD42(双字)写入所希望的预设值。
  4. 为了捕获当前值(CV)等于预设值(PV)中断事件,编写中断子程序,并指定CV=PV中断事件(事  件12)调用该中断子程序。参看本章中断一节,以了解中断处理的细节。
  5. 执行全局中断允许指令(ENI)来允许HSC1中断。
  6. 执行HSC指令,使S7- 200对HSC0编程。
  7. 退出子程序。
改变模式0、1、2或12的计数方向

对具有内部方向(控制模式0、1、2或12)的单相计数器HSC1,改变其计数方向的步骤如下:

  1. 向SMB47写入所需的计数方向:

SMB47=16#90 允许计数

置HSC计数方向为减。

SMB47=16#98 允许计数

置HSC计数方向为增

  1. 执行HSC指令,使S7- 200对HSC1编程。

 

写入新的初始值(任何模式下)

在改变初始值时,迫使计数器处于非工作状态。当计数器被禁止时,它既不计数也不产生中断。  以下步骤描述了如何改变HSC1的初始值(任何模式下):

  1. 向SMB47写入新的初始值的控制位:

SMB47=16#C0 允许计数

写入新的初始值

  1. 向SMD48(双字)写入所希望的初始值(若写入0,则清除)。
  2. 执行HSC指令,使S7- 200对HSC1编程。
写入新的预设值(任何模式下)

以下步骤描述了如何改变HSC1的预设值(任何模式):

  1. 向SMB47写入允许写入新的预设值的控制位:

SMB47=16#A0 允许计数

写入新的预设值

  1. 向SMD52(双字)写入所希望的预设值。
  2. 执行HSC指令,使S7- 200对HSC1编程。
禁止HSC(任何模式下)

以下步骤描述了如何禁止HSC1高速计数器(任何模式):

  1. 写入SMB47以禁止计数:

SMB47=16#00 禁止计数

  1. 执行HSC指令,以禁止计数。
西门子S7-200可编程序控制器系统手册

实例:高速计数器指令

西门子S7-200可编程序控制器系统手册

脉冲输出指令

西门子S7-200可编程序控制器系统手册

脉冲输出指令(PLS)用于在高速输出(Q0.0和Q0.1)上控制脉冲 串输出(PTO)和脉宽调制(PWM)功能。

改进的位控向导可以创建为您的应用程序定制的指令,这可以 简化您的编程任务并充分利用S7-200CPU的特有特性。关于位控向导的更多信息,参见9章。

可以继续使用旧的PLS指令创建您自己的运动应用,但是只有改进的位控向导创建的指令才支持PTO上的线性斜坡。

PTO可以输出一串脉冲(占空比50%),用户可以控制脉冲的周 期和个数。

PWM可以输出连续的、占空比可调的脉冲串,用户可以控制脉冲的周期和脉宽。

S7-    200有两个PTO/PWM发生器,它们可以产生一个高速脉冲串或者一个脉宽调制信号波形。一个生成器分配给数字输出点Q0.0,另一个生成器分配给数字输出点Q0.1。一个指定的特殊存储(SM)位置存储每个发生器的下列数据:一个控制字节(8位数值)、一个脉冲计数值(无符号32位数值)、一个周期    和脉冲宽度值(无符号16位数值)。

PTO/PWM生成器和进程图像寄存器共享使用Q0.0和Q0.1。当PTO或PWM功能在Q0.0或Q0.1激活,

PTO/PWM生成器控制输出,正常使用输出点禁止。输出信号波形不受过程映像区状态、输出点强制   值或者立即输出指令执行的影响。当不使用PTO/PWM发生器功能时,对输出点的控制权交回到过程   映像寄存器。过程映像寄存器决定输出信号波形的起始和结束状态,以高低电平产生信号波形的启动  和结束。

表6--32 脉冲输出指令的有效操作数

输入/输出 数据类型 操作数
Q0.X WORD 常数: 0 (= Q0.0) 1 (= Q0.1)
提示在使能PTO或者PWM操作之前,将Q0.0和Q0.1过程映像寄存器清0。 所有控制位、周期、脉宽和脉冲计数值的缺省值均为0。

PTO/PWM的输出负载至少为10%的额定负载,才能提供陡直的上升沿和下降沿。

脉冲串操作(PTO)

PTO按照给定的脉冲个数和周期输出一串方波(占空比50%)。(见图6- 28) PTO可以产生单段脉冲串

或者多段脉冲串(使用脉冲波形)。可以指定脉冲数和周期(以微秒或毫秒为增加量):

O    脉冲数目: 1到4,294,967,295

O   周 期: 10 µs到65,535 µs或2 ms到65,535 ms。

如果为周期指定一个奇的微秒数或毫秒数(例如75 ms),将会引起占空比失真。

表6--33中是对脉冲计数和周期的限定。

脉冲个数/周期 结果
周期<2个时间单位 将周期缺省地设定为2个时间单位
脉冲个数=0 将脉冲个数缺省地设定为1个脉冲

PTO功能允许脉冲串“链接”或者“排队”。当当前脉冲串输出完成时,会立即开始输出一个新的脉  冲串。这保证了多个输出脉冲串之间的连续性。

使用位控向导

位控向导自动处理PTO脉冲的单段管道和多段管道、脉宽调制、SM位置配置和创建包络表。这里是  可供您参考的信息。建议您使用位控向导。关于位控向导的更多信息,参见第9章。

PTO脉冲串的单段管道

在单段管道模式,需要为下一个脉冲串更新特殊寄存器。一旦启动了起始PTO段,就必须按照第二个   信号波形的要求改变特殊寄存器,并再次执行PLS指令。第二个脉冲串的属性在管道中一直保持到第   一个脉冲串发送完成。在管道中一次只能存储一段脉冲串的属性。当第一个脉冲串发送完成时,接着  输出第二个信号波形,此时管道可以用于下一个新的脉冲串。重复这个过程可以再次设定下一个脉冲  串的特性。

除去以下两种情况之外,脉冲串之间可以作到平滑转换:时间基准发生了变化或者在利用PLS指令捕  捉到新脉冲之前,启动的脉冲串已经完成。

PTO脉冲串的多段管道

在多段管道模式,CPU自动从V存储器区的包络表中读出每个脉冲串的特性。在该模式下,仅使用特   殊存储器区的控制字节和状态字节。选择多段操作,必须装入包络表在V存储器中的起始地址偏移量

(SMW168或SMW178)。时间基准可以选择微秒或者毫秒,但是,在包络表中的所有周期值必须使用

同一个时间基准,而且在包络正在运行时不能改变。执行PLS指令来启动多段操作。

每段记录的长度为8个字节,由16位周期值、16位周期增量值和32位脉冲个数值组成。表6--34中给出   了包络表的格式。您可以通过编程的方式使脉冲的周期自动增减。在周期增量处输入一个正值将增加  周期;输入一个负值将减少周期;输入0将不改变周期。

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

表6--34 多段PTO操作的包络表格式

字节偏移量 分段 描述
0 分段数目:1到2551
1 #1 初始周期(2到65,535时间基准单位)
3 每个脉冲的周期增量(有符号值)(- 32768到32767时间基准单位)
5 脉冲数(1到4,294,967,295)
9 #2 初始周期(2到65,535时间基准单位)
11 每个脉冲的周期增量(有符号值)(- 32,768到32,767时间基准单位)
13 脉冲数(1到4,294,967,295)
(连续) #3 (连续)

1 输入0作为脉冲串的段数会产生一个非致命错误。将不产生PTO输出。

脉宽调制(PWM)
西门子S7-200可编程序控制器系统手册

图6--29 脉宽调制(PWM)

PWM产生一个占空比变化周期固定的脉冲输出。(见图6-29) 您可以以微秒或者毫秒为单位指定其周期和脉冲宽度:

O   周 期: 10 µs到65,535 µs或2 ms到65,535 ms

O    脉宽时间: 0 µs到65,535 µs或0 ms到65,535 ms

有两个方法改变PWM信号波形的特性:

O 同步更新:如果不要求改变时间基准,则可以使用同步更新。利用同步更新,信号波形特性的变化发生在周期边沿,提供平滑转换。

O  异步更新:通常,对于PWM操作,脉冲宽度在周期保持不变时变化,所以不要求改变时间基准。但是,如果需要改变PTO/PWM发生器的时间基准,就要使用异步更新。异步更新会造成

PTO/PWM功能被瞬时禁止,和PWM信号波形不同步。这会引起被控设备的振动。由于这个原因,建议采用PWM同步更新。选择一个适合于所有周期时间的时间基准。

提示控制字节中的PWM更新方式位(SM67.4或SM77.4)用于指定更新方式。当PLS指令执行时变化生效。

如果改变了时间基准,会产生一个异步更新,而与PWM更新方式位的状态无关。

使用SM来配置和控制PTO/PWM操作

PLS指令会从特殊存储器SM中读取数据,使程序按照其存储值控制PTO/PWM发生器。SMB67控制

PTO0或者PWM0,SMB77控制PTO1或者PWM1。表6--36对用于控制PTO/PWM操作的存储器给出了描述。您可以使用表6--37作为一个快速参考,用其中的数值作为PTO/PWM控制寄存器的值来实现  需要的操作。

您可以通过修改SM存储区(包括控制字节),然后执行PLS指令来改变PTO或PWM信号波形的特性。  您可以在任意时刻禁止PTO或者PWM信号波形,方法为:首先将控制字节中的使能位(SM67.7或者

SM77.7)清0,然后执行PLS指令。

PTO状态字节中的空闲位(SM66.7或者SM76.7)标志着脉冲串输出完成。另外,在脉冲串输出完成时,您可以执行一段中断程序。(参考中断指令和通讯指令中的描述)。如果您使用多段操作,可以在  整个包络表完成之后执行中断程序。

下列条件使SM66.4 (或SM76.4)或SM66.5 (或SM76.5)置位:

O 在许多脉冲后,指定导致非法周期的周期增量数值将产生运算溢出条件,该条件终止PTO功能并将“增量计算错误”位(SM66.4或SM76.4)设为1。输出返回映像寄存器控制。

O 如果要手动终止一个正在进行中的PTO包络,要把状态字节中的用户终止位(SM66.5或

SM76.5)置1。

O 在将PTO/PWM溢出位(SM66.6或SM76.6)设为1时,尝试装载管线。如果希望检测后续溢出,必须在检测到溢出后手动清除该位。当CPU切换至RUN模式时,该位被初始化为0。

提示如果要装入新的脉冲数(SMD72或SMD82)、脉冲宽度(SMW70或SMW80)或周期(SMW68或SMW78),应该在执行PLS指令前装入这些值和控制寄存器。如果要使用多段脉冲串操作,在使用PLS指令前也需要装入包络表的起始偏移量(SMW168或SMW178)和包络表的值。

表6--36 PTO/PWM控制寄存器的SM标志

西门子S7-200可编程序控制器系统手册

表6--36 PTO/PWM控制寄存器的SM标志

西门子S7-200可编程序控制器系统手册

表6--37 PTO/PWM控制字节参考

计算包络表的值
西门子S7-200可编程序控制器系统手册

图6--30 频率/时间图

PTO/PWM发生器的多段管道功能在许多应用中非常 有用,尤其在步进电机控制中。

例如:您可以用带有脉冲包络的PTO来控制一台步进电机,来实现一个简单的加速、匀速和减速过程或者一个由最多255段脉冲波形组成的复杂过程,而其中每 一段波形都是加速、匀速或者减速操作。

图6--30中的示例给出的包络表值要求产生一个输出信 号波形包括三段:步进电机加速(第一段);步进电机匀 速(第二段)和步进电机减速(第三段)。

对于该实例:启动和最终脉冲频率是2 kHz,最大脉冲频率是10 kHz,要求4000个脉冲才能达到期望的电机旋转数。由于包络表中的值是用周期表示的,而不是用频率,需要把给定的频率值转换成周期    值。因此,启动(初始)和最终(结束)周期时间是500 µs,相应于最大频率的周期时间是100 µs。在输出包络的加速部分,要求在200个脉冲左右达到最大脉冲频率。也假定包络的减速部分,在400个脉冲完成。

在该例中,使用一个简单公式计算PTO/PWM发生器用来调整每个脉冲周期所使用的周期增量值:

De给定段的周期增量=|ECT- ICT|/Q

其中: End_CTseg = 此段的结束周期Init_CTseg = 此段的初始周期Quantityseg = 此段中的脉冲数量

利用这个公式,

分段1 (加速): 增量周期 = --2 分段2 (恒速): 增量周期 = 0 分段3 (减速): 增量周期 = 1

假定包络表存放在从VB500开始的V存储器区,表6--38给出了产生所要求信号波形的值。该表的值可以在用户程序中用指令放在V存储器中。一种方法是在数据块中定义包络表的值。

V存储器地址 数值 描述
VB500 3 总段数
VW501 500 初始周期 段#1
VW503 --2 周期增量
VD505 200 脉冲数
VW509 100 初始周期 段#2
VW511 0 周期增量
VD513 3400 脉冲数
VW517 100 初始周期 段#3
VW519 1 周期增量
VD521 400 脉冲数

表6--38 包络表值

段的最后一个脉冲的周期在包络中不直接指定,但必须计算出来(除非周期增量是0)。如果在段之间需  要平滑转换,知道段的最后一个脉冲的周期是有用的。计算段的最后一个脉冲周期的公式是:

段的最后一个脉冲的周期时间=ICT+(DEL*(Q- 1))

其中: Init_CTseg = 该段的初始化周期

Deltaseg=该段的增量周期时间

Quantityseg=该段的脉冲数量

作为介绍,上面的简例是有用的,实际应用可能需要更复杂的信号波形包络。记住:周期增量只能以  微秒数或毫秒数指定,周期的修改在每个脉冲上进行

这两项的影响使对于一个段的周期增量的计算可能需要叠代方法。对于结束周期值或给定段的脉冲个

数,可能需要作调整。

在确定正确的包络表值的过程中,给定的波形段的持续时间很有用。按照下面的公式可以计算完成一  个给定波形段的时间长短:

波形段的持续时间=Q*(ICT+((DEL/2)*(Q- 1)))

其中: Quantityseg = 该段的脉冲数量

ICT=该段的初始化周期时间

DEL=该段的增量周期时间

数字运算指令

西门子S7-200可编程序控制器系统手册

数字运算指令

加、减、乘、除指令
加法 减法
IN1+IN2=OUTFBD IN1- IN2=OUT LAD
IN1+OUT=OUT OUT- IN1=OUT STL

整数加法(+I)或者整数减法(--I)指令,将两个16位整数相加或者 相减,产生一个16位结果。双整数加法(+D)或者双整数减法(--D)指令,将两个32位整数相加或者相减,产生一个32位结果。实数加法(+R)和实数减法(--R)指令,将两个32位实数相加 或相减,产生一个32位实数结果。

乘法 除法
IN1*IN2=OUTFBD IN1/IN2=OUT LAD
IN1*OUT=OUT OUT/IN1=OUT STL

 

整数乘法(*I)或者整数除法(/I)指令,将两个16位整数相乘或者 相除,产生一个16位结果。(对于除法,余数不被保留。) 双整数乘法(*D)或者双整数除法(/D)指令,将两个32位整数相乘或 者相除,产生一个32位结果。(对于除法,余数不被保留。) 实数乘法(*R)或实数除法(/R)指令,将两个32位实数相乘或相除, 产生一个32位实数结果。

SM标志位和ENO

SM1.1表示溢出错误和非法值。如果SM1.1置位,SM1.0和

SM1.2的状态不再有效而且原始输入操作数不会发生变化。如 果SM1.1和SM1.3没有置位,那么数字运算产生一个有效的结 果,同时SM1.0和SM1.2有效。在除法运算中,如果SM1.3置位,其他数学运算标志位不会发生变化。

使ENO=0的错误条件:

  • 1(溢出)
  • 3(被0除)
  • 0006(间接寻址)

受影响的特殊存储器位:

  • 0(结果为0)
  • 1(溢出,运算过程中产生非法数值或者输入参数非法)
  • 2(结果为负)
  • 3(被0除)

表6--39 加、减、乘、除指令的有效操作数

输入/输出 数据类型 操作数
IN1、IN2 INT 

DINT

实型

IW、QW、VW、MW、SMW、SW、T、C、LW、AC、AIW、*VD、*AC、*LD、常数

ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、常数

ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC、常数

OUT INTDINT、REAL IW、QW、VW、MW、SMW、SW、LW、T、C、AC、*VD、*AC、*LDID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC

实数(或者浮点数)的表示格式采用ANSI/IEEE 754- 1985标准(单精度)。要得到更多信息请参考该标准。

西门子S7-200可编程序控制器系统手册

实例:整数数学运算指令

西门子S7-200可编程序控制器系统手册

实例:实数数学运算指令

整数乘法产生双整数和带余数的整数除法

西门子S7-200可编程序控制器系统手册

整数乘法产生双整数

IN1 * IN2 = OUT LAD 和FBD IN1 * OUT = OUT STL

 

整数乘法产生双整数指令(MUL),将两个16位整数相乘,得到

32位结果。在STL的MUL指令中,OUT的低16位被用作一个

乘数。

 

带余数的整数除法

IN1 / IN2 = OUT LAD 和FBD OUT / IN1 = OUT STL

 

带余数的整数除法指令(DIV),将两个16位整数相除,得到32 位结果。其中16位为余数(高16位字中),另外16位为商(低16  位字中)。

 

 

在STL的DIV指令中,OUT的低16位被用作除数。

SM标志位和ENO

对于在本页中介绍的两条指令,特殊存储器(SM)标志位表示错误和非法值。如果在除法指令执行时,SM1.3(被0除)置位,其他数字运算标志位不会发生变化。否则,当数字运算完成时,所有支持  的数字运算状态位都包含有效状态。

使ENO=0的错误条件:

  • 1(溢出)
  • 3(被0除)
  • 0006(间接寻址)

受影响的特殊存储器位:

  • 0(结果为0)
  • 1(溢出)
  • 2(结果为负)
  • 3(被0除)

表6--40 整数乘法产生双整数和带余数的整数除法指令的有效操作数

输入/输出 数据类型 操作数
IN1、IN2 INT IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数
OUT DINT ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC
西门子S7-200可编程序控制器系统手册

实例:乘以整数到长整数指令和除以整数带余数指令

数学功能指令

西门子S7-200可编程序控制器系统手册

正弦、余弦和正切

正弦(SIN)、余弦(COS)和正切(TAN)指令计算角度值IN的三角函数值,并 将结果存放在OUT中。输入角度值是弧度值。

SIN(IN)= OUT COS (IN) = OUT TAN (IN) = OUT

若要将角度从度转换为弧度:使用MUL_R (*R)指令将以度为单位表示的角度乘以1.745329E- 2 (大约为π/180)。

自然对数和自然指数

自然对数指令(LN)计算输入值IN的自然对数,并将结果存放到OUT中。

自然指数指令(EXP)计算输入值IN的自然指数值,并将结果存放到OUT中。

LN (IN) = OUT EXP (IN)= OUT

若要从自然对数获得以10为底的对数:将自然对数除以2.302585(大约为10的自然对数)。

若要将一个实数作为另一个实数的幂,包括分数指数:组合自然指数指令和自然对数指令。例如,要将X作为

Y的幂,输入如下指令:EXP (Y * LN (X))。

平方根

平方根指令(SQRT)计算实数(IN)的平方根,并将结果存放到OUT中。

SQRT(IN)=OUT

若要获得其他根:         5的立方 = 53^ = EXP(3*LN(5)) = 125

125的立方根 = 125(^1/3) = EXP((1/3)*LN(125))= 5

5的平方根的三次方 = 5(^3/2) = EXP(3/2*LN(5)) = 11.18034

数学功能指令的SM位和ENO

对于本页中描述的所有指令,SM1.1用来表示溢出错误或者非法的数值。如果SM1.1置位,SM1.0和SM1.2的状态不再有效而且原始输入操作数不会发生变化。如果SM1.1没有置位,那么数字运算产生一个有效的结果,   同时SM1.0和SM1.2状态有效。

使ENO=0的错误条件:

  • 1(溢出)
  • 0006(间接寻址)

受影响的特殊存储器位:

  • 0(结果为0)
  • 1(溢出)
  • 2(结果为负)

表6--41 数学功能指令的有效操作数

输入/输出 数据类型 操作数
IN REAL ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC、常数
OUT REAL ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC

实数(或者浮点数)的表示格式采用ANSI/IEEE 754- 1985标准(单精度)。要得到更多信息请参考该标准。

增加和减少指令

西门子S7-200可编程序控制器系统手册

增加

IN+1=OUT LADFBD

OUT+1=OUT STL

减少

IN - 1=OUT LADFBD

OUT -  1=OUT STL

增加或者减少指令将输入IN加1或者减1,并将结果存放在

OUT中。

字节增加(INCB)和字节减少(DECB)操作是无符号的。 字增加(INCW)和字减少(DECW)操作是有符号的。

双字增加(INCD)和双字减少(DECD)操作是有符号的。

使ENO=0的错误条件:

  • 1(溢出)
  • 0006(间接寻址)

受影响的特殊存储器位:

  • 0(结果为0)
  • 1(溢出)
  • 2(结果为负)对于字和双字操作有效

表6--42 增加和减少指令的有效操作数

输入/输出 数据类型 操作数
IN BYTE INT DINT IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数    IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数

ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、常数

OUT BYTE INTDINT IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*AC、*LD              IW、QW、VW、MW、SMW、SW、T、C、LW、AC、*VD、*LD、*ACID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC
西门子S7-200可编程序控制器系统手册

实例:递增和递减指令

比例/积分/微分(PID)回路控制指令

西门子S7-200可编程序控制器系统手册

PID回路控制指令(PID)根据输入和表(TBL)中的组态信息,对

相应的LOOP执行PID回路计算。

使ENO=0的错误条件:

  • 1(溢出)
  • 0006(间接寻址)

受影响的特殊存储器位:

  • 1(溢出)

PID回路指令(包含比例、积分、微分回路)可以用来进行PID运 算。但是,可以进行这种PID运算的前提条件是逻辑堆栈栈顶(TOS)值必须为1。该指令有两个操作数:作为回路表起始地址 的“表”地址和从0到7的常数的回路编号。

在程序中最多可以用8条PID指令。如果两个或两个以上的PID指令用了同一个回路号,那么即使这些  指令的回路表不同,这些PID运算之间也会相互干涉,产生不可预料的结果。

回路表包含9个参数,用来控制和监视PID运算。这些参数分别是过程变量当前值(PVn),过程变量前    值(PVn- 1),设定值(SPn),输出值(Mn),增益(Kc),采样时间(Ts),积分时间(TI),微分时间(TD)和积分项前值(MX)。

为了让PID运算以预想的采样频率工作,PID指令必须用在定时发生的中断程序中,或者用在主程序  中被定时器所控制以一定频率执行。采样时间必须通过回路表输入到PID运算中。

自整定功能已经集成到PID指令中。对于自整定的详细描述,参考第15章。PID整定控制面板只能用  于由PID向导创建的PID回路。

表6--43 PID回路控制指令的有效操作数

输入/输出 数据类型 操作数
TBL BYTE VB
LOOP BYTE 常数(0到7)

STEP 7- Micro/WIN提供了PID指令向导,指导您定义一个闭环控制过程的PID算法。在命令菜单中

选择工具 > 指令向导,然后在指令向导窗口中选择PID指令。

提示

下限设置点和上限设置点要和过程变量的下限和上限相对应。

理解PID算法

PID控制器调节输出,保证偏差(e)为零,使系统达到稳定状态。偏差(e)是设定值(SP)和过程变量

(PV)的差。PID控制的原理基于下面的算式;输出M(t)是比例项、积分项和微分项的函数。

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

理解PID方程的微分项

微分项值MD与偏差的变化成正比。S7-200使用下列算式来求解微分项:

西门子S7-200可编程序控制器系统手册

回路控制类型的选择

在许多控制系统中,只需要一种或两种回路控制类型。例如只需要比例回路或者比例积分回路。通过  设置常量参数,可以选择需要的回路控制类型。

 

如果不想要积分动作(PID计算中没有“I”),可以把积分时间(复位)置为无穷大“INF”。即使没有积  分作用,积分项还是不为零,因为有初值MX。

如果不想要微分回路,可以把微分时间置为零。

如果不想要比例回路,但需要积分或积分微分回路,可以把增益设为0.0。系统会在计算积分项和微

分项时,把增益当作1.0看待。

回路输入的转换和标准化

每个回路有两个输入量,设定值和过程变量。设定值通常是一个固定的值,比如设定的汽车速度。过  程变量是与PID回路输出有关,可以衡量输出对控制系统作用的大小。在汽车速度控制系统的实例中,过程变量应该是测量轮胎转速的测速计输入。

设定值和过程变量都可能是现实世界的值,它们的大小、范围和工程单位都可能不一样。在PID指令  对这些现实世界的值进行运算之前,必须把它们转换成标准的浮点型表达形式。

转换的第一步是把16位整数值转成浮点型实数值。下面的指令序列提供了实现这种转换的方法:

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

控制方式

S7- 200的PID回路没有内置模式控制。只有当PID盒接通时,才执行PID运算。在这种意义上说,

PID运算存在一种“自动“运行方式。当PID运算不被执行时,我们称之为“手动”模式。

同计数器指令相似,PID指令有一个使能位。当该使能位检测到一个信号的正跳变(从0到1)。PID指令   执行一系列的动作,使PID指令从手动方式无扰动地切换到自动方式。为了达到无扰动切换,在转变   到自动控制前,必须把手动方式下的输出值填入回路表中的Mn栏。PID指令对回路表中的值进行下列  动作,以保证当使能位正跳变出现时,从手动方式无扰动切换到自动方式:

  1. 置设定值(SPn)=过程变量(PVn)
  2. 置过程变量前值(PVn--1)=过程变量现值(PVn)
  3. 置积分项前值(MX)=输出值(Mn)

PID使能位的默认值是1,在CPU启动或从STOP方式转到RUN方式时建立。CPU进入RUN方式后首

次使PID块有效,没有检测到使能位的正跳变,那么就没有无扰动切换的动作。

报警与特殊操作PID指令是执行PID运算的简单而功能强大的指令。如果需要其他处理,如报警检查或回路变量的特  殊计算等,则这些处理必须使用S7-200支持的基本指令来实现。

出错条件

如果指令指定的回路表起始地址或PID回路号操作数超出范围,那么在编译期间,CPU将产生编译错  误(范围错误),从而编译失败。

PID指令不检查回路表中的一些输入值 是否超界,您必须保证过程变量和设定值(以及作为输入的和

前一次过程变量)必须在0.0到1.0之间。

如果PID计算的算术运算发生错误,那么特殊存储器标志位SM1.1 (溢出或非法值)会被置1,并且中止PID指令的执行。(要想消除这种错误,单靠改变回路表中的输出值是不够的,正确的方法是在下一  次执行PID运算之前,改变引起算术运算错误的输入值,而不是更新输出值)。

回路表

回路表有80字节长,它的格式如表6--44所示。

 

表6--44 回路表

偏移量 格式 类型 描述
0 过程变量(PVn) 实型 输入 过程变量,必须在0.0~1.0之间
4 设定值(SPn) 实型 输入 包含的设定值必须标定在0.0和1.0之间。
8 输出(Mn) 实型 输入/ 输出 输出值,必须在0.0~1.0之间
12 增益(KC) 实型 输入 增益是比例常数。 可正可负
16 采样时间(TS) 实型 输入 包含采样时间,单位为秒。必须是正数
20 积分时间或复位(TI) 实型 输入 包含积分时间或复位,单位为分钟。必须是正数
24 微分时间或速率(TD) 实型 输入 包含微分时间或速率,单位为分钟。必须是正数
28 偏差(MX) 实型 输入/ 输出 积分项前项,必须在0.0~1.0之间
32 以前的过程变量(PVn--1) 实型 输入/ 输出 包含最后一次执行PID指令时所存储的过程变量的值。
36 - 79 保留给自整定变量。对于详细信息,参考表15- 1。

中断指令

西门子S7-200可编程序控制器系统手册

中断允许和中断禁止

中断允许指令(ENI)全局地允许所有被连接的中断事件。中断禁

止指令(DISI)全局地禁止处理所有中断事件。

当进入RUN模式时,初始状态为禁止中断。在RUN模式,您可 以执行全局中断允许指令(ENI)允许所有中断。执行“禁用中断”指令可禁止中断过程;然而,激活的中断事件仍继续

排队。

使ENO=0的错误条件:

  • 0004(试图在中断程序中执行ENI、DISI或者HDEF指令。)
中断条件返回

中断条件返回指令(CRETI)用于根据前面的逻辑操作的条件,

从中断程序中返回。

中断连接

中断连接指令(ATCH)将中断事件EVNT与中断程序号INT相关

联,并使能该中断事件。

使ENO=0的错误条件:

  • 0002(与HSC的输入分配相冲突)
中断分离

中断分离指令(DTCH)将中断事件EVNT与中断程序之间的关联

切断,并禁止该中断事件。

清除中断事件

清除中断事指令从中断队列中清除所有EVNT类型的中断事 件。使用此指令从中断队列中清除不需要的中断事件。如果此 指令用于清除假的中断事件,在从队列中清除事件之前要首先 分离事件。否则,在执行清除事件指令之后,新的事件将被增 加到队列中。

实例说明了处于正交模式的高速计数器如何使用CLR_EVNT指 令清除中断事件。如果光电传感器正好处在从明亮过渡到黑暗 的边界位置,那么在新的PV值装载之前,小的机械振动将生成 实际并不需要的中断。

表6--45 中断指令的有效操作数

输入/输出 数据类型 操作数
INT BYTE 常数(0到127)
EVNT BYTE 常数 CPU 221和 CPU 222: 0到12,19到23和27到33CPU 224: 0到23和27到33

CPU 224XPCPU 226: 0到33

对中断连接和中断分离指令的理解

在激活一个中断程序前,必须在中断事件和该事件发生时希望执行的那段程序间建立一种联系。中断  连接指令(ATCH)指定某中断事件(由中断事件号指定)所要调用的程序段(由中断程序号指定)。多个中   断事件可调用同一个中断程序,但一个中断事件不能同时指定调用多个中断程序。

当把中断事件和中断程序连接时,自动允许中断。如果采用禁止全局中断指令不响应所有中断,每个  中断事件进行排队,直到采用允许全局中断指令重新允许中断,如果不用允许全局中断指令,可能会  使中断队列溢出。

可以用中断分离指令(DTCH)截断中断事件和中断程序之间的联系,以单独禁止中断事件。中断分离    指令(DTCH)使中断回到不激活或无效状态 表6--46列出了不同类型的中断事件。

西门子S7-200可编程序控制器系统手册

表6--46 中断事件

西门子S7-200可编程序控制器系统手册

理解S7- 200对中断程序的处理

执行中断程序用于响应与其相关的内部或者外部事件。一旦执行完中断程序的最后一条指令,控制权  会回到主程序。您可以执行中断条件返回指令(CRETI)退出中断程序。表6--47对于在应用程序中使用  中断程序给出了一些指导和限定。

表6--47 使用中断程序的指导和限定

指导
中断处理提供了对特殊的内部或外部事件的响应。用户应当优化中断程序以执行一个特殊的任务,然后把控制返回主程序。

应当使中断程序短小而简单,执行时对其他处理也不要延时过长。如果做不到这些,意外的条件可能会引起由  主程序控制的设备操作异常。对中断而言,其格言是“越短越好”。

限定
在中断程序中不能使用DISI、ENI、HDEF、LSCR和END指令。

 

系统对中断的支持

由于中断指令影响触点、线圈和累加器逻辑,所以系统保存和恢复逻辑堆栈、累加寄存器以及指示累  加器和指令操作状态的特殊存储器标志位(SM)。这避免了进入中断程序或从中断程序返回对主用户程  序造成破坏。

在主程序和中断程序间共享数据

您可以在主程序和一个或多个中断程序间共享数据。例如,用户主程序的某个地方可以为某个中断程  序提供要用到的数据,反之亦然。如果用户程序共享数据,必须考虑中断事件异步特性的影响,这是  因为中断事件会在用户主程序执行的任何地方出现。共享数据一致性问题的解决要依赖于主程序被中  断事件中断时中断程序的操作。使用中断程序的局部变量表,这样可以保证中断程序只使用临时内存,而不会覆盖程序的其他地方使用的数据。

这里有几种可以确保在用户主程序和中断程序间正确共享数据的编程技巧。这些技巧或限制共享存储  器单元的访问方式,或让使用共享存储器单元的指令序列不会被中断。

0  对于共享单个变量的STL程序而言:如果共享数据是单字节、字或双字变量,而程序STL (语句表)编写,则通过把对共享数据进行操作的中间值存储到非共享的存储位置或累加器中,可确  保正确的共享访问。

0 对于共享单个变量的LAD程序而言:如果共享数据是单字节、字或双字变量,而程序用LAD

(梯形图)编写,则通过建立只使用“移动”指令(MOVB、MOVW、MOVD、MOVR)访问共享

的存储位置的惯例,可确保正确的共享访问。这些Move指令由执行时不受中断事件影响的单条

STL指令组成,而其他许多梯形图指令是由可被中断的STL指令序列组成的。

0 对于共享多个变量的STL或LAD程序而言:如果共享数据由大量相关字节、字或双字构成,则中断禁用/启用指令(DISI和ENI)可用于控制中断程序的执行。在用户程序开始对共享存储器单元操作的地方禁止中断。一旦所有影响共享存储器单元的操作完成后,再允许中断。在禁用中  断期间,无法执行中断程序,因此无法访问共享存储位置;然而,该方法会导致对中断事件的  响应延迟。

 

在中断程序中调用子程序

您可以在一个中断程序中调用一个子程序的嵌套层。中断程序与被调用的子程序共享累加器和逻辑  堆栈。

 

S7- 200支持的中断类型

S7-200支持下列类型的中断程序:

  1. 通讯端口中断:S7-200生成允许用户程序控制通讯端口的事件。
  2.  I/O中断:S7-200生成各种I/O的不同状态更改的事件。这些事件使您可以对高速计数器、脉冲输出或输入的上升或下降状态做出响应。
  3.  基于时间的中断:S7-200生成允许程序以特定时间间隔做出反应的事件。

 

通讯口中断

PLC的串行通讯口可由LAD或STL程序来控制。通讯口的这种操作模式称为自由端口模式。在自由端     口模式下,用户可用程序定义波特率、每个字符位数、校验和通讯协议。利用接收和发送中断可简化  程序对通讯的控制。对于更多信息,参考发送和接收指令。

I/O中断

I/O中断包含了上升沿或下降沿中断、高速计数器中断和脉冲串输出(PTO)中断。S7- 200 CPU可用输入I0.0至I0.3的上升沿或下降沿产生中断。上升沿事件和下降沿事件可被这些输入点捕获。这些上  升沿/下降沿事件可被用于指示当某个事件发生时必须引起注意的条件。

高速计数器中断允许响应诸如当前值等于预设值、相应于轴转动方向变化的计数方向改变和计数器外  部复位等事件而产生的中断。每种高速计数器可对高速事件实时响应,而PLC扫描速率对这些高速事  件是不能控制的。

脉冲串输出中断给出了已完成指定脉冲数输出的指示。脉冲串输出的一个典型应用是步进电机。  可以通过将一个中断程序连接到相应的I/O事件上来允许上述的每一个中断。

时基中断

时基中断包括定时中断和定时器T32/T96中断。CPU可以支持定时中断。可以用定时中断指定一个周     期性的活动。周期以1 ms为增量单位,周期时间可从1 ms到255 ms。对定时中断0,必须把周期时间写入SMB34;对定时中断1,必须把周期时间写入SMB35。

每当定时器溢出时,定时中断事件把控制权交给相应的中断程序。通常可用定时中断以固定的时间间  隔去控制模拟量输入的采样或者执行一个PID回路。

当把某个中断程序连接到一个定时中断事件上,如果该定时中断被允许,那就开始计时。在连接期间,系统捕捉周期时间值,因而后来对SMB34和SMB35的更改不会影响周期。为改变周期时间,首先必须修改周期时间值,然后重新把中断程序连接到定时中断事件上。当重新连接时,定时中断功能  清除前一次连接时的任何累计值,并用新值重新开始计时。

一旦允许,定时中断就连续地运行,指定时间间隔的每次溢出时执行被连接的中断程序。如果退出

RUN模式或分离定时中断,则定时中断被禁止。如果执行了全局中断禁止指令,定时中断事件会继续    出现,每个出现的定时中断事件将进入中断队列(直到中断允许或队列满)。请参见定时中断的例子 程序。

 

定时器T32/T96中断允许及时地响应一个给定的时间间隔。这些中断只支持1ms分辨率的延时接通定   时器(TON)和延时断开定时器(TOF)T32和T96。T32和T96定时器在其他方面工作正常。一旦中断允许,当有效定时器的当前值等于预设值时,在CPU的正常1 ms定时刷新中,执行被连接的中断程序。首先把一个中断程序连接到T32/T96中断事件上,然后允许该中断。

 

中断优先级和中断队列

在各个指定的优先级之内,CPU按先来先服务的原则处理中断。任何时间点上,只有一个用户中断程  序正在执行。一旦中断程序开始执行,它要一直执行到结束。而且不会被别的中断程序,甚至是更高  优先级的中断程序所打断。当另一个中断正在处理中,新出现的中断需要排队,等待处理。

表6--48给出了3个中断队列以及它们能够存储的中断个数。

表6--48 每个中断队列的最大数目

队列 CPU211、CPU222、CPU224 CPU224XP和CPU226
通讯中断队列 4 8
I/O中断队列 16 16
定时中断队列 8 8

有时,可能有多于队列所能保存数目的中断出现。因而,由系统维护的队列溢出存储器位表明丢失的  中断事件的类型。中断队列溢出位如表6--49所示。您应当只在中断程序中使用这些位,因为在队列变  空时,这些位会被复位,控制权回到主程序。

表6--50给出了所有中断事件的优先级和事件号。

表6--49 中断队列溢出标志位

描述(0=不溢出,1=溢出) SM位
通讯中断队列 SM4.0
I/O中断队列 SM4.1
定时中断队列 SM4.2

 

表6--50 中断事件的优先级顺序

事件号 描述 优先级组 组中的优先级
8 端口0: 接收字符 通讯(最高) 0
9 端口0: 发送完成 0
23 端口0: 接收消息完成 0
24 端口1: 接收消息完成 1
25 端口1: 接收字符 1
26 端口1: 发送完成 1
19 PTO 0完成中断 I/O(中等) 0
20 PTO 1完成中断 1
0 上升沿, I0.0 2
2 上升沿, I0.1 3
4 上升沿, I0.2 4
6 上升沿, I0.3 5
1 下降沿, I0.0 6
3 下降沿, I0.1 7
5 下降沿, I0.2 8
7 下降沿, I0.3 9
12 HSC0 CV=PV(当前值=预设值) 10
27 HSC0 输入方向改变 11
28 HSC0 外部复位 12
13 HSC1 CV=PV(当前值 = 预设值) 13
14 HSC1 输入方向改变 14
15 HSC1 外部复位 15
16 HSC2 CV=PV(当前值=预设值) 16
17 HSC2 输入方向改变 17
18 HSC2 外部复位 18
32 HSC3 CV=PV(当前值 = 预设值) 19
29 HSC4 CV=PV (当前值 = 预设值) 20
30 HSC4 输入方向改变 21
31 HSC4 外部复位 22
33 HSC5 CV=PV (当前值 = 预设值) 23
10 定时中断0 SMB34 定时(最低) 0
11 定时中断1 SMB35 1
21 定时器T32 CT=PT中断 2
22 定时器T96 CT=PT中断 3
西门子S7-200可编程序控制器系统手册

实例:中断指令

西门子S7-200可编程序控制器系统手册

实例:用于读取模拟量输入数值的定时中断

西门子S7-200可编程序控制器系统手册

实例:清除中断事件指令

逻辑操作指令

西门子S7-200可编程序控制器系统手册

取反指令
字节、字和双字取反

字节取反(INVB)、字取反(INVW)和双字取反(INVD)指令将输入

IN取反的结果存入OUT中。

使ENO=0的错误条件:

  • 0006(间接寻址)

 

受影响的SM标志位:

  • 0(结果为0)

 

表6--51 取反指令的有效操作数

 

输入/输出 数据类型 操作数
IN BYTE WORD DWORD IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数    IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数

ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、常数

OUT BYTE WORD DWORD IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC                 IW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、*AC

ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC

西门子S7-200可编程序控制器系统手册

实例:取反指令

与、或和异或指令

西门子S7-200可编程序控制器系统手册

字节与、字与和双字与

字节与(ANDB)、字与(ANDW)和双字与(ANDD)指令将输入值

IN1和IN2的相应位进行与操作,将结果存入OUT中。

字节或、字或和双字或

字节或(ORB)、字或指令(ORW)和双字或(ORD)指令将两个输 入值IN1和IN2的相应位进行或操作,将结果存入OUT中。

字节异或、字节或和双字异或

字节异或ROB)、异或ORW)和双字异或(ORD)指令将两个输入 值IN1和IN2的相应位进行异或操作,将结果存入OUT中。

SM标志位和ENO

对于本页中描述的所有指令,下列情况影响SM位和ENO。

使ENO=0的错误条件:

  • 0006(间接寻址)

 

受影响的SM标志位:

  • 0(结果为0)

表6--52 与、或和异或指令的有效操作数

 

输入/输出 数据类型 操作数
IN1、IN2 BYTE WORD 

DWORD

IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、

*AC、常数

ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、常数

OUT BYTE WORD 

DWORD

IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*AC、*LDIW、QW、VW、MW、SMW、SW、T、C、LW、AC、*VD、*AC、

*LD

ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*AC、*LD

 

西门子S7-200可编程序控制器系统手册

实例:与、或和异或指令

传送指令

西门子S7-200可编程序控制器系统手册

字节、字、双字或者实数传送

字节传送(MOVB)、字传送(MOVW)、双字传送(MOVD)和实数 传送指令在不改变原值的情况下将IN中的值传送到OUT。

使用双字传送指令可以创建一个指针。要得到更多信息,请参

考第4章中指针和间接寻址一节。

对于IEC传送指令,输入和输出的数据类型可以不同,但数据

长度必须相同。

使ENO=0的错误条件:

  • 0006(间接寻址)

 

表6--53 传送指令的有效操作数

 

输入/输出 数据类型 操作数
IN BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、 常数
WORD、INT IW、QW、VW、MW、SMW、SW、T、C、LW、AC、AIW、*VD、*AC、*LD、常数
DWORD、DINT ID、QD、VD、MD、SMD、SD、LD、HC、&VB、&IB、&QB、&MB、&SB、&T、&C、&SMB、&AIW、&AQW、AC、*VD、

*LD、*AC、常数、

REAL ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC、 常数
OUT BYTEWORD、INT

DWORD、DINT、REAL

IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*ACIW、QW、VW、MW、SMW、SW、T、C、LW、AC、AQW、

*VD、*LD、*AC

ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC

字节立即传送(读和写)

西门子S7-200可编程序控制器系统手册

字节立即传送指令允许您在物理I/O和存储器之间立即传送一个 字节数据。

字节立即读(BIR)指令读物理输入(IN),并将结果存入内存地址

(OUT),但过程映像寄存器并不刷新。

字节立即写指令(BIW)从内存地址(IN)中读取数据,写入物理输 出(OUT),同时刷新相应的过程映像区。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 不能访问扩展模块

表6--54 字节立即读指令的有效操作数

输入/输出 数据类型 操作数
IN BYTE IB、*VD、*LD、*AC
OUT BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC

表6--55 字节立即写指令的有效操作数

输入/输出 数据类型 操作数
IN BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、 常数
OUT BYTE QB、*VD、*LD、*AC
块传送指令

西门子S7-200可编程序控制器系统手册

字节、字、双字的块传送

字节块传送(BMB)、字块传送(BMW)和双字块传送(BMD)指令 传送指定数量的数据到一个新的存储区,数据的起始地址IN, 数据长度为N个字节、字或者双字,新块的起始地址为OUT。

N的范围从1到255。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)

表6--56 块传送指令的有效操作数

 

输入/输出 数据类型 操作数
IN BYTEWORD、INT

DWORD、DINT

IB、QB、VB、MB、SMB、SB、LB、*VD、*LD、*ACIW、QW、VW、SMW、SW、T、C、LW、AIW、*VD、*LD、*AC

ID、QD、VD、MD、SMD、SD、LD、*VD、*LD、*AC

OUT BYTEWORD、INT

 

DWORD、DINT

IB、QB、VB、MB、SMB、SB、LB、*VD、*LD、*AC                   IW、QW、VW、MW、SMW、SW、T、C、LW、AQW、*VD、*LD、*AC

ID、QD、VD、MD、SMD、SD、LD、*VD、*LD、*AC

N BYTE IB、QB、VB、MB、SMB、SB、LB、AC、常数、*VD、*LD、*AC
西门子S7-200可编程序控制器系统手册

实例:块移动指令

程序控制指令

西门子S7-200可编程序控制器系统手册

条件结束

条件结束指令(END)根据前面的逻辑关系终止当前扫描周期。 可以在主程序中使用条件结束指令,但不能在子程序或中断程 序中使用该命令。

停止

停止指令(STOP)导致S7- 200 CPU从RUN到STOP模式,从

而可以立即终止程序的执行。

如果STOP指令在中断程序中执行,那么该中断立即终止,并且忽略所有挂起的中断,继续扫描程序的剩余部分。完成当前 周期的剩余动作,包括主用户程序的执行,并在当前扫描的最 后,完成从RUN到STOP模式的转变。

监视程序复位

监视程序复位指令(WDR)允许S7-200 CPU的系统监视狗定时器被重新触发,这样可以在不引起监视狗错误的情况下,增加此扫描所允许的时间。

使用WDR指令时要小心, 因为如果您用循环指令去阻止扫描完成或过度的延迟扫描完成的时间,那么在终止本次扫描之前,下列操作过程将被禁止:

  • 通讯(自由端口方式除外)
  • I/O更新(立即I/O除外)
  • 强制更新
  • SM位更新(SM0,SM5 - SM29不能被更新)
  • 运行时间诊断
  • 由于扫描时间超过25秒,10ms和100ms定时器将不会正确累计时间。
  • 在中断程序中的STOP指令

带数字量输出的扩展模块也包含一个监视狗定时器,如果模块没有被S7-200写,则此监视狗定时器将关断输出。在扩展的扫描时间内,对每个带数字量输出的扩展模块进行立即写操作,以  保持正确的输出。请参考这段描述之后的实例。

提示如果希望程序的扫描周期超过500 ms,或者在中断事件发生时有可能使程序的扫描周期超过500 ms时,您应该使用监视程序复位指令来重新触发监视狗定时器。

每次使用监视程序复位指令,您应该对每个扩展模块的某一个输出字节使用一个立即写指令来复位  每个扩展模块的监视狗。

如果您使用了监视程序复位指令允许程序的执行有一个很长的扫描时间,此时将S7- 200的模式开关切换到STOP位置,则在1.4秒内,CPU转到STOP方式。

西门子S7-200可编程序控制器系统手册

实例:停止、结束和监视程序复位指令

For- Next循环指令

西门子S7-200可编程序控制器系统手册

FOR和NEXT指令可以描述需重复进行一定次数的循环体。每条FOR指令必须对应一条NEXT指令。For- Next循环嵌套(一个For- Next循环在另一个For- Next循环之内)深度可达8层。

FOR- NEXT指令执行FOR指令和NEXT指令之间的指令。必须

指定计数值或者当前循环次数INDX、初始值(INIT)和终止值

(FINAL)。

NEXT指令标志着FOR循环的结束。

使ENO=0的错误条件:

  • 0006(间接寻址)

如果允许FOR/NEXT循环,除非在循环内部修改了终值,循环 体就一直循环执行直到循环结束。当FOR/NEXT循环执行的过 程中可以修改这些值。当循环再次允许时,它把初始值拷贝到INDX中(当前循环次数)。

当下一次允许时,FOR/NEXT指令复位它自己。

例如,给定1的INIT值和10的FINAL值,随着INDX数值增加:1、2、3、 ...10,在For指令和Next指令之间的指令被执行。

如果初值大于终值,那么循环体不被执行。每执行一次循环体,当前计数值增加1,并且将其结果同

终值作比较, 如果大于终值,那么终止循环。

如果程序进入FOR- NEXT循环时,栈顶值为1,则当程序退出FOR- NEXT循环时,栈顶值也将为1。

表6- 57 FOR- NEXT指令的有效操作数

输入/输出 数据类型 操作数
INDX INT IW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、*AC
INIT、FINAL INT VW、IW、QW、MW、SMW、SW、T、C、LW、AC、AIW、*VD、*AC、常数
西门子S7-200可编程序控制器系统手册

实例:For- Next循环指令

跳转指令

西门子S7-200可编程序控制器系统手册

跳转到标号指令(JMP)执行程序内标号N指定的程序分支。 标号指令标识跳转目的地的位置N。

您可以在主程序、子程序或者中断程序中,使用跳转指令。跳 转和与之相应的标号指令必须位于同一段程序代码(无论是主程 序、子程序还是中断程序)。

不能从主程序跳到子程序或中断程序, 同样不能从子程序或中断程序跳出。

可以在SCR程序段中使用跳转指令,但相应的标号指令必须也 在同一个SCR段中。

表6--58 跳转指令的有效操作数

输入/输出 数据类型 操作数
N WORD 常数(0到255)
西门子S7-200可编程序控制器系统手册

实例:跳转到标签指令

顺控继电器(SCR)指令

西门子S7-200可编程序控制器系统手册

SCR指令使您能够按照自然工艺段在LAD、FBD或STL中编制 状态控制程序。

只要您的应用中包含的一系列操作需要反复执行,就可以使用SCR使程序更加结构化,以至于直接针对应用。这样可以使得 编程和调试更加快速和简单。

装载SCR指令(LSCR)将S位的值装载到SCR和逻辑堆栈中。

SCR堆栈的结果值决定是否执行SCR程序段。SCR堆栈的值会 被复制到逻辑堆栈中,因此可以直接将盒或者输出线圈连接到 左侧的功率流线上而不经过中间触点。

限定

当使用SCR时,请注意下面的限定:

  • 不能把同一个S位用于不同程序中。例如:如果在主程序中用了S0.1,在子程序中就不能再使用它。
  • 无法跳转入或跳转出SCR段;然而,可以使用Jump和Label指令在SCR段附近跳转,或在SCR段内跳转。
  • 在SCR段中不能使用END指令。

表6--59           顺控继电器指令的有效操作数

输入/输出 数据类型 操作数
S_BIT BOOL S

图6--31给出了S堆栈和逻辑堆栈以及执行LSCR指令产生的影响。以下是对顺控继电器指令的正确  理解:

装载SCR指令(LSCR)标志着SCR段的开始,SCR结束指令则标志着SCR段的结束。在装载SCR指令与SCR结束指令之间的所有逻辑操作的执行取决于S堆栈的值。而在SCR结束指令和  下一条装载SCR指令之间的逻辑操作则不依赖于S堆栈的值。

西门子S7-200可编程序控制器系统手册

  • SCR传输指令(SCRT)将程序控制权从一个激活的SCR段传递到另一个SCR段。
  • 执行SCRT指令可以使当前激活的程序段的S位复位,同时使下一个将要执行的程序段的S位置位。在SCRT 指令指行时,复位当前激活的程序段的S位并不会影响S堆栈。SCR段会一直保持功率流直到退出。
  • SCR条件结束指令(CSCRE)可以使程序退出一个激活的程序段而不执行CSCRE与SCRE之间的指令。CSCRE指令不影响任何S位,也不影响S堆栈。

在以下实例中,首次扫描位SM0.1置位S0.1,从而在首次扫描中,激活状态1。延时2秒后,T37导致切换到状态2。切换使状态1停止,激活状态2。

西门子S7-200可编程序控制器系统手册

实例:顺序控制继电器指令

分支控制

在许多实例中,一个顺序控制状态流必须分成两个或多个不同分支控制状态流。当一个控制状态流分

离成多个分支时,所有的分支控制状态流必须同时激活, 如图6--32所示。

西门子S7-200可编程序控制器系统手册

图6--32 控制流的分支

使用多条由相同转移条件激活的SCRT指令,可以在一段SCR程序中实现控制流的分支,如下面的实    例所示。

西门子S7-200可编程序控制器系统手册

合并控制

与分支控制的情况类似,两个或者多个分支状态流必须合并为一个状态流。当多个状态流汇集成一个  时,我们称之为合并。当控制流合并时,所有的控制流必须都完成,才能执行下一个状态。图6--33给    出了两个控制流合并的示意图。

在SCR程序中,通过从状态L转到状态L,以及从状态M转到状态M的方法实现控制流的合并。当状态

L、M的SCR使能位为真时,即可激活状态N,如下例所示。

西门子S7-200可编程序控制器系统手册

图6--33 控制流的合并

西门子S7-200可编程序控制器系统手册

在有些情况下,一个控制流可能转入多个可能的控制流中的某一个。到底进入哪一个,取决于控制流

前面的转移条件,哪一个首先为真,如图6--34所示。

西门子S7-200可编程序控制器系统手册

图6--34 条件转换控制流分支

西门子S7-200可编程序控制器系统手册

实例:条件转移

诊断LED指令

西门子S7-200可编程序控制器系统手册

如果输入参数IN的值为零,就将诊断LED置为OFF。如果输入 参数IN的值大于零,就将诊断LED置为ON(黄色)。

当系统块中指定的条件为真或者用非零IN参数执行DIAG_LED 指令时,CPU发光二极管(LED)标注的SF/DIAG可以被配置用于显示黄色。

系统块(配置LED)复选框选项:

  • 当有一项在CPU内被强制时,SF/DIAGLED为ON(黄色)
  • 当模块有I/O错误时,SF/DIAGLED为ON(黄色) 两个配置LED选项都不选中,将使SF/DIAG黄光只受DIAG_LED指令控制。CPU系统故障(SF)用红光指示。

表6--60 诊断LED指令的有效操作数

输入/输出 数据类型 操作数
IN BYTE VB、IB、QB、MB、SB、SMB、LB、AC、常数、*VD、*LD、*AC
西门子S7-200可编程序控制器系统手册

实例1诊断LED指令

移位和循环指令

西门子S7-200可编程序控制器系统手册

右移和左移指令

移位指令将输入值IN右移或左移N位,并将结果装载到输出

OUT中。

移位指令对移出的位自动补零。如果位数N大于或等于最大允 许值(对于字节操作为8,对于字操作为16,对于双字操作为

32),那么移位操作的次数为最大允许值。如果移位次数大于

0,溢出标志位(SM1.1)上就是最近移出的位值。如果移位操作 的结果为0,零存储器位(SM1.0)置位。

字节操作是无符号的。对于字和双字操作,当使用有符号数据 类型时,符号位也被移动。

使ENO=0的错误条件:

  • 0006(间接寻址)受影响的SM标志位:
  • 0(结果为0)
  • 1(溢出)
循环右移和循环左移指令

循环移位指令将输入值IN循环右移或者循环左移N位,并将输 出结果装载到OUT中。循环移位是圆形的。

如果位数N大于或者等于最大允许值(对于字节操作为8,对于字操作为16,对于双字操作为32),S7--200在执行循环移位之 前,会执行取模操作,得到一个有效的移位次数。移位位数的 取模操作的结果,对于字节操作是0到7,对于字操作是0到15,而对于双字操作是0到31。

如果移位次数为0,循环移位指令不执行。如果循环移位指令执行,最后一个移位的值会复制到溢出  标志位(SM1.1)。

如果移位次数不是8(对于字节操作)、16(对于字操作)和32(对于双字操作)的整数倍,最后被移出的

位会被复制到溢出标志位(SM1.1)。当要被循环移位的值是零时,零标志位(SM1.0)被置位。

字节操作是无符号的。对于字和双字操作,当使用有符号数据类型时,符号位也被移位。

使ENO=0的错误条件:

  • 0006(间接寻址)

受影响的SM标志位:

  • 0(结果为0)
  • 1(溢出)

表6--61 移位和循环移位指令的有效操作数

 

输入/输出 数据类型 操作数
IN BYTE WORD 

DWORD

IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、

*AC、常数

ID、QD、VD、MD、SMD、SD、LD、AC、HC、*VD、*LD、*AC、常数

OUT BYTE WORD 

DWORD

IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*ACIW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、

*AC

ID、QD、VD、MD、SMD、SD、LD、AC、*VD、*LD、*AC

N BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数
西门子S7-200可编程序控制器系统手册

实例:移位和循环移位指令

移位寄存器指令

西门子S7-200可编程序控制器系统手册

移位寄存器指令将一个数值移入移位寄存器中。移位寄存器指 令提供了一种排列和控制产品流或者数据的简单方法。使用该 指令,每个扫描周期,整个移位寄存器移动一位。

移位寄存器指令把输入的DATA数值移入移位寄存器。其中,

S_BIT指定移位寄存器的最低位,N指定移位寄存器的长度和

移位方向(正向移位=N,反向移位=-N)。

SHRB指令移出的每一位都被放入溢出标志位(SM1.1)。

这条指令的执行取决于最低有效位(S_BIT)和由长度(N)指定的

位数。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 0092(计数区错误)

 

受影响的SM标志位:

  • 1(溢出)

表6--62 移位寄存器指令的有效操作数

输入/输出 数据类型 操作数
DATA、S_BIT BOOL I、Q、V、M、SM、S、T、C、L
N BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数

位移位寄存器的最高位(MSB.b)可通过下面公式计算求得:

西门子S7-200可编程序控制器系统手册

MSB.b = [(S_BIT的字节号) + ([N] - 1 + (S_BIT的位号)) / 8].[8的余数]

例如:如果S_BIT是V33.4、N是14,下列计算显示

MSB.b是V35.1。

MSB.b =V33+([14]- 1+4)/8

=V33+17/8

=V33+2 (余数为1)

=V35.1

当反向移动时,N为负值,输入数据从最高位移入,

最低位(S_BIT)移出。移出的数据放在溢出标志位

(SM1.1)中。

当正向移动时,N为正值,输入数据从最低位(S_BIT)

移入,最高位移出。移出的数据放在溢出标志位

(SM1.1)中。

移位寄存器的最大长度为64位,可正可负。图6--35中 给出了N为正和负两种情况下的移位过程。

西门子S7-200可编程序控制器系统手册

实例:移位寄存器位指令

字节交换指令

西门子S7-200可编程序控制器系统手册

字节交换指令用来交换输入字IN的高字节和低字节。

使ENO=0的错误条件:

  • 0006(间接寻址)

表6--63 字节交换指令的有效操作数

 

输入/输出 数据类型 操作数
IN WORD IW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、*AC

西门子S7-200可编程序控制器系统手册

字符串指令

西门子S7-200可编程序控制器系统手册

字符串长度

字符串长度指令(SLEN)返回IN中指定的字符串的长度值。

字符串复制

字符串复制指令(SCPY)将IN中指定的字符串复制到OUT中。

字符串连接

字符串连接指令(SCAT)将IN中指定的字符串连接到OUT中指定 字符串的后面。

SM标志位和ENO

对于字符串长度、字符串复制和字符串连接指令,下列条件影 响ENO。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)

表6--64 字符串长度指令的有效操作数

输入/输出 数据类型 操作数
IN STRING VB、LB、*VD、*LD、*AC、字符串常数
OUT BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC

表6--65 字符串复制和字符串连接

输入/输出 数据类型 操作数
IN STRING VB、LB、*VD、*LD、*AC、字符串常数
OUT STRING VB、LB、*VD、*AC、*LD

西门子S7-200可编程序控制器系统手册

从字符串中复制子字符串

西门子S7-200可编程序控制器系统手册

从字符串中复制子字符串指令(SSCPY)从INDX指定的字符号开 始,将IN中存储的字符串中的N个字符复制到OUT中。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 009B(索引=0)

表6--66 从字符串中复制子字符串指令

 

输入/输出 数据类型 操作数
IN STRING VB、LB、*VD、*LD、*AC、字符串常数
OUT STRING VB、LB、*VD、*LD、*AC
INDX、N BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC、常数
西门子S7-200可编程序控制器系统手册

实例:复制子字符串指令

字符串搜索

西门子S7-200可编程序控制器系统手册

字符串搜索指令(SFND)在IN1字符串中寻找IN2字符串。从

OUT指定的起始位置开始搜索(必须位于1至字符串长度范围

内)。如果在IN1中找到了与IN2中字符串相匹配的一段字符,则

OUT中会存入这段字符中首个字符的位置。如果没有找到, OUT被清0。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 009B(索引=0)
字符搜索

字符搜索指令(CFND)在IN1字符串中寻找IN2字符串中的任意字符。从OUT指定的起始位置开始搜索(必须位于1至字符串长 度范围内)。如果找到了匹配的字符,字符的位置被写入OUT 中。如果没有找到,OUT被清0。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)
  • 009B(索引=0)

表6--67 字符串搜索和字符搜索指令的有效操作数

输入/输出 数据类型 操作数
IN1、IN2 STRING VB、LB、*VD、*LD、*AC、字符串常数
OUT BYTE IB、QB、VB、MB、SMB、SB、LB、AC、*VD、*LD、*AC

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

表指令

西门子S7-200可编程序控制器系统手册

填表

ATT指令向表(TBL)中增加一个数值(DATA)。表中第一个数是最大填表数(TL),第二个数是实际填表数(EC),指出已填入表 的数据个数。新的数据填加在表中上一个数据的后面。每向表 中填加一个新的数据,EC会自动加1。

一个表最多可以有100条数据。

使ENO=0的错误条件:

  • 4(表溢出)
  • 0006(间接寻址)
  • 0091(操作数超出范围)

 

受影响的SM标志位:

  • 如果表出现溢出,4会置1。

表6--68 表指令的有效操作数

输入/输出 数据类型 操作数
DATA INT IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数
TBL WORD IW、QW、VW、MW、SMW、SW、T、C、LW、*VD、*LD、*AC
西门子S7-200可编程序控制器系统手册

实例:添加到表格指令

先进先出和后进先出

西门子S7-200可编程序控制器系统手册

一个表可以有最多100条数据。

先进先出

先进先出(FIFO)指令从表(TBL)中移走第一个数据,并将此数 输出到DATA。剩余数据依次上移一个位置。每执行一条本指 令,表中的数据数减1。

后进先出

后进先出(LIFO)指令从表(TBL)中移走最后一个数据,并将此数 输出到DATA。每执行一条本指令,表中的数据数减1。

使ENO=0的错误条件:

  • 5(空表)
  • 0006(间接寻址)
  • 0091(操作数超出范围)

受影响的SM标志位:

  • 当您试图从一个空表中删除一条数据时,5会置1。

表6--69 先进先出和先进后出指令的有效操作数

表6--69 先进先出和先进后出指令的有效操作数

 

输入/输出 数据类型 操作数
TBL WORD IW、QW、VW、MW、SMW、SW、T、C、LW、*VD、*LD、*AC
DATA INT IW、QW、VW、MW、SMW、SW、T、C、LW、AC、AQW、*VD、*LD、*AC

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

实例:先入后出指令

存储器填充

西门子S7-200可编程序控制器系统手册

存储器填充指令(FILL)用输入值(IN)填充从输出(OUT)开始的N

个字的内容。

N的范围从1到255。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)

西门子S7-200可编程序控制器系统手册

查表

西门子S7-200可编程序控制器系统手册

查表指令(FND)搜索表,以查找符合一定规则的数据。查表指令从INDX开始搜索表(TBL),寻找符合PTN和条件(=、<>、< 或>)的数据。命令参数CMD是一个1~4的数值,分别代表=、

<>、<和>。

如果发现了一个符合条件的数据,那么INDX指向表中该数的位 置。为了查找下一个符合条件的数据,在激活查表指令前,必  须先对INDX加1。如果没有发现符合条件的数据,那么INDX等 于EC。

一个表可以有最多100条数据。数据条标号从0到99。

使ENO=0的错误条件:

  • 0006(间接寻址)
  • 0091(操作数超出范围)

表6--71 查表指令的有效操作数

输入/输出 数据类型 操作数
TBL WORD IW、QW、VW、MW、SMW、T、C、LW、*VD、*LC、*AC
PTN INT IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数
INDX WORD IW、QW、VW、MW、SMW、SW、T、C、LW、AIW、AC、*VD、*LD、*AC
CMD BYTE (常数) 1:等于(=), 2:不等于(<>), 3:小于(<), 4:大于(>)
提示当您用FND指令查找由指令ATT、LIFO和FIFO生成的表时,实际填表数(EC)和输入数据相符,直    接对应。最大填表数(TL)对ATT、LIFO和FIFO指令是必需的,但FND指令并不需要它。参见图

6--36。

因此,FND指令的操作数SRC是一个字地址(指向EC),比相应的ATT、LIFO或FIFO指令的操作数

TABLE要高2个字节。

西门子S7-200可编程序控制器系统手册

图6--36 FND指令与ATT、LIFO和FIFO指令所使用的表格式上的差异

西门子S7-200可编程序控制器系统手册

实例:查表指令

西门子S7-200可编程序控制器系统手册

实例:创建表格

定时器指令

西门子S7-200可编程序控制器系统手册

SIMATIC定时器指令
打开延迟定时器

有记忆的打开延迟定时器

打开延迟定时器(TON)和有记忆的打开延迟定时器在使能输入 接通时记时。定时器号(Txx)决定了定时器的分辨率,并且分辨 率现在已经在指令盒上标出了。

关断延时定时器

关断延时定时器用于在输入断开后延时一段时间断开输出。定 时器号(Txx)决定了定时器的分辨率,并且分辨率现在已经在指 令盒上标出了。

表6- 72 SIMATIC定时器指令的有效操作数

输入/输出 数据类型 操作数
TXX WORD 常数(T0到T255)
IN BOOL I、Q、V、M、SM、S、T、C、L、功率流
PT INT IW、QW、VW、MW、SMW、SW、LW、T、C、AC、AIW、*VD、*LD、*AC、常数
提示不能将同一个定时器号同时用作TOF和TON。例如,不能够既有TON T32又有TOF T32。

如表6--73所示,三类定时器用于执行不同类型的定时任务:

  • 打开延迟定时器(TON)用于单一间隔的定时
  • 有记忆打开延迟定时器(TONR)用于累计许多时间间隔
  • 关断延时定时器(TOF)用于关断或者故障事件后的延时(例如:在电机停后,需要冷却电机)

表6--73 定时器指令的操作数

类型 当前值>=预设值 使能输入(IN)的状态 上电周期/首次扫描
TON 定时器位ON,当前连续计数到32767 ON:当前值计数时间OFF:定时器位关闭,当前值 = 0 定时器位OFF,当前值=0
TONR 定时器位ON,当前连续计数到32767 ON:当前值计数时间OFF:定时器位和当前值保持最后状态 定时器位OFF当前值可以保持1
TOF 定时器位OFF当前值=预设值,停止计数 ON:定时器位接通,当前值 = 0 OFF:在接通至断开转换后定时器开始计数 定时器位OFF 当前值=0

1 有记忆定时器的当前值可以设为掉电保持,有关S7- 200 CPU有记忆存储器的详细内容参阅第4章。要了解使用打开延迟定时器(TON)的范例程序,请参考光盘资料中的程序设计提示。见Tip31

当使能输入接通时,打开延迟定时器和有记忆打开延迟定时器开始计时, 当定时器的当前值(Txxx) 大于等于预设值时,该定时器位被置位。

  • 当允许输入断开时,清除打开延迟定时器的当前值,而对于有记忆打开延迟定时器,其当前值保持不变。
  • 可以用有记忆打开延迟定时器累计输入信号的接通时间, 利用复位指令(R)清除其当前值。
  • 当达到预设时间后,打开延迟定时器和有记忆打开延迟定时器继续计时,一直计到最大值32767。
  • 关断延时定时器(TOF)用来在输入断开后延时一段时间断开输出。当接通启用输入时,立即接通定时  器位,且当前值被设为0。当输入关闭时,定时器开始计时,一直到所使用的时间到达预置时间。
  • 当到达预设值时,定时器位关闭,当前值停止递增;然而,如果在TOF到达预设值之前重新接通输入,则定时器位保持接通。
  • TOF指令必须用输入信号的接通到断开的跳变启动计时。
  • 如果TOF定时器在顺控(SCR)区,而且顺控区没有启动,TOF定时器的当前值设置为0,定时器位设置为断开,当前值不计时。

提示

可以只使用复位(R)指令来复位TONR。还可以使用复位指令去复位TON或TOF中的任何一个。复位 指令执行如下的操作:

  • 定时器位=OFF
  • 定时器当前位置=0

TONR定时器只能通过复位指令进行复位操作。复位后,为了再启动,TOF定时器需要使能输入有  一个从ON到OFF的跳变。

为定时器选择分辨率

定时器对时间间隔记数。定时器的分辨率(时基)决定了每个时间间隔的时间长短。例如,分辨率为10    毫秒的TON可计算在启用TON后流逝的10毫秒时间间隔的数目:10毫秒定时器的计数50表示500毫秒。SIMATIC定时器提供三种分辨率:1毫秒、10毫秒和100毫秒。如表6--74所示,定时器号决定了   定时器的分辨率。

提示为确保最小时间间隔,每次将预设值(PV)增大1。例如:为确保100毫秒的定时器其最小时间间隔至少为2100毫秒,将PV设为22。

表6--74 定时器号和分辨率

定时器类型 分辨率 用秒(s)表示的最大值 定时器号
TONR 1ms 32.767 s (0.546分钟) T0,T64
10 ms 327.67s T1 - T4,T65 - T68
100 ms 3276.7s T5 - T31,T69- T95
TON、TOF 1ms 32.767s T32,T96
10 ms 327.67s T33 - T36,T97 - T100
100 ms 3276.7s T37 - T63,T101 - T255
分辨率对定时器的影响

对于1 ms分辨率的定时器来说,定时器位和当前值的更新不与扫描周期同步。对于大于1 ms的程序

扫描周期,定时器位和当前值在一次扫描内刷新多次。

对于10 ms分辨率的定时器来说,定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时  器当前值上。

对于分辨率为100 ms的定时器,在执行指令时对定时器位和当前值进行更新;因此,确保在每个扫

描周期内,程序仅为100毫秒的定时器执行一次指令,以便使定时器保持正确计时。

西门子S7-200可编程序控制器系统手册

实例:SIMATIC打开延迟定时器

提示为了确保在每一次定时器达到预设值时,自复位定时器的输出都能接通一个程序扫描周期,用一个常闭触点来代替定时器位作为定时器的使能输入。
西门子S7-200可编程序控制器系统手册

实例:SIMATIC自复位打开延迟定时器

西门子S7-200可编程序控制器系统手册

实例:SIMATIC关断延时定时器

西门子S7-200可编程序控制器系统手册

实例:SIMATIC保持性打开延迟定时器

IEC定时器指令

西门子S7-200可编程序控制器系统手册

打开延迟定时器

当使能输入接通时,打开延迟定时器(TON)指令对时间进行 计数。

关断延时定时器

关断延时定时器(TOF)用于在输入断开后,延时一段时间后断 开输出。

脉冲定时器

脉冲定时器(TP)以指定的周期产生脉冲。

表6--75 IEC定时器指令的有效操作数

输入/输出 数据类型 操作数
TXX TON、TOF、TP 常数(T32到T63,T96到T255)
IN BOOL I、Q、V、M、SM、S、T、C、L、功率流
PT INT IW、QW、VW、MW、SMW、SW、LW、AC、AIW、*VD、*LD、*AC,常数
Q BOOL I、Q、V、M、SM、S、L
ET INT IW、QW、VW、MW、SMW、SW、LW、AC、AQW、*VD、*LD、*AC
  • 当输入断开时,关断延时定时器功能块把输出断开的时间延迟一个固定的时间。当使能输入(IN)变为0时,定时器的值又变为预设值。当经过时间(ET)大于等于预设时间(PT)时,定时器输  出位(Q)接通。一旦达到预设值,定时器的输出位变为0,一直保持到使能输入(IN)再变为1。如  果使能输入(IN)变为0的持续时间小于预设值(PT),定时器的输出位一直保持接通。0 当使能输入端(IN)为1时,打开延迟定时器功能块开始启动定时,一直到预设值。当经过时间(ET)大于等于预设值(PT)时,定时器输出位(Q)变为1。当使能输入端(IN)为0时,定时器输出复  位。当预设时间(PT)到达时,定时停止并且定时器不工作。
  • 脉冲定时器用于产生一个指定宽度的脉冲。当使能输入(IN)变为1时,输出位(Q)接通, 在预设时间内输出位保持接通。一旦经过时间(ET)达到预设时间(PT),输出位变为0。经过的时间会  被保存到使能输入断开。当输出接通时,它会一直保持到脉冲周期结束。

当前值的每次计数为时基的倍数。例如:以10ms为时基的定时器,计数值为50,代表500ms。IEC    定时器(TON、TOF和TP)有三种分辨率。分辨率由定时器号决定,如表6--76所示。

表6--76 IEC定时器的分辨率

分辨率 用秒(s)表示的最大值 定时器号
1 ms 32.767 s (0.546分钟) T32,T96
10 ms 327.67s T33 - T36,T97 - T100
100 ms 3276.7s T37 - T63,T101 - T255

西门子S7-200可编程序控制器系统手册

时间间隔定时器

西门子S7-200可编程序控制器系统手册

触发时间间隔

触发时间间隔(BITIM)指令读内置的1毫秒计数器的当前值,并 将此值存储到OUT中。双字毫秒值的最大定时间隔是2的32次 幂或49.7天。

计算时间间隔

计算时间间隔(CITIM)指令计算当前时间和IN提供的值之间的时间差。时间差被存储在OUT中。双字毫秒值的最大定时间隔 是2的32次幂或49.7天。依据于BITIM指令执行的时间, CITIM自动处理在最大间隔内发生的1毫秒定时器翻转。

西门子S7-200可编程序控制器系统手册

子程序指令

西门子S7-200可编程序控制器系统手册

子程序调用指令(CALL)将程序控制权交给子程序SBR_N。调用子程序时可以带参数也可以不带参数。子程序执行完成后, 控制权返回到调用子程序的指令的下一条指令。

子程序条件返回指令(CRET)根据它前面的逻辑决定是否终止子 程序。

要添加一个子程序可以在命令菜单中选择:编辑 > 插入 > 子程序。

使ENO=0的错误条件:

  • 0008(超过子程序嵌套最大限制)
  • 0006(间接寻址)

在主程序中,可以嵌套调用子程序(在子程序中调用子程序), 最多嵌套8层。在中断程序中,不能嵌套调用子程序。

在被中断程序调用的子程序中不能再出现子程序调用。不禁止递归调用(子程序调用自己),但是当使  用带子程序的递归调用时应慎重。

表6--78 子程序指令的有效操作数

西门子S7-200可编程序控制器系统手册

提示STEP 7- Micro/WIN为每个子程序自动加入返回指令。

当有一个子程序被调用时,系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为零,把控制  交给被调用的子程序。当子程序完成之后,恢复逻辑堆栈,把控制权交还给调用程序。

因为累加器可在主程序和子程序之间自由传递, 所以在子程序调用时,累加器的值既不保存也不恢复。

当子程序在同一个周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器指令。

带参数调用子程序

子程序可以包含要传递的参数。参数在子程序的局部变量表中定义。参数必须有变量名(最多23个字  符)、变量类型和数据类型。一个子程序最多可以传递16个参数。

局部变量表中的变量类型区定义变量是传入子程序(IN)、传入和传出子程序(IN_OUT)或者传出子程序

(OUT)。表6--79中描述了一个子程序中的参数类型。要加入一个参数,把光标放到要加入的变量类型  区(IN、IN_OUT、OUT)。点击鼠标右键可以得到一个菜单选择。选择插入选项,然后选择下一行选项。这样就出现了另一个所选类型的参数项。

表6--79 子程序的参数类型

参数 描述
IN 参数传入子程序。如果参数是直接寻址(如:VB10),指定位置的值被传递到子程序。如果参数  是间接寻址(如:*AC1),指针指定位置的值被传入子程序;如果参数是常数(如:16#1234),   或者一个地址(如:&VB100),常数或地址的值被传入子程序。
IN_OUT 指定参数位置的值被传到子程序,从子程序的结果值被返回到同样地址。常数(如:16#1234)   和地址(如:&VB100)不允许作为输入/输出参数。
OUT 从子程序来的结果值被返回到指定参数位置。常数(如:16#1234)和地址(如:&VB100)不允许  作为输出参数。由于输出参数并不保留子程序最后一次执行时分配给它的数值,所以必须在每  次调用子程序时将数值分配给输出参数。注意:在电源上电时,SET和RESET指令只影响布尔  量操作数的值。
TEMP 任何不用于传递数据的局部存储器都可以在子程序中作为临时存储器使用。

如图6--37中所示,局部变量表中的数据类型区定义了参数的大小和格式。参数类型如下所示:

  • BOOL:此数据类型用于单个位输入和输出。下例中的IN3是布尔输入。
  • BYTE、WORD、DWORD:这些数据类型分别识别1、2或4个字节的无符号输入或输出参数。
  • INT、DINT:这些数据类型分别识别2或4个字节的有符号输入或输出参数。
  • REAL:此数据类型识别单精度型(4字节)IEEE浮点数值。
  • STRING:此数据类型用作一个指向字符串的四字节指针。
  • 功率流:布尔型功率流只允许位(布尔型)输入。该变量声明告诉STEP 7- Micro/WIN 32此输入参数是位逻辑指令组合的功率流结果。在局部变量表中布尔功率流输入必须出现在其他类型的  前面。只有输入参数可以这样使用。下例中的使能输入(EN)和IN1输入使用布尔逻辑。

西门子S7-200可编程序控制器系统手册

地址参数(如IN4处的&VB100)以一个双字(无符号)的值传送到子程序。在带常数调用程序时必须指明  常数类型。例如,为了将一个数值为12,345的无符号双字常量作为参数传递,常量参数必须指定为

DW#12345。如果参数遗漏常量描述符,则该常量被视为一种不同的类型。

输入或输出参数上没有自动数据类型转换功能。例如,如果局部变量表明一个参数具有实型,而在调  用时使用一个双字,子程序中的值就是双字。

当给子程序传递值时,它们放在子程序的局部存储器中。局部变量表的最左列是每个被传递参数的局  部存储器地址。当子程序调用时,输入参数值被拷贝到子程序的局部存储器。当子程序完成时,从局  部存储器区拷贝输出参数值到指定的输出参数地址。

数据单元的大小和类型用参数的代码表示。在子程序中局部存储器的参数值的分配如下所示:

  • 按照子程序指令的调用顺序,参数值分别给局部存储器,起始地址是L0。
  • 1到8连续位参数值分配一个字节,从Lx.0到Lx.7。
  • 字节、字和双字值按照所需字节分配在局部存储器中(LBx、LWx或LDx)。
  • 在带参数调用子程序指令中,参数必须按照一定顺序排列,输入参数在最前面,其次是输入/输出参  数,然后是输出参数。

如果用语句表编程,CALL指令的格式是:

CALL子程序号,参数1,参数2,…,参数

西门子S7-200可编程序控制器系统手册

西门子S7-200可编程序控制器系统手册

weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: