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

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

本章描述用于对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所示。