编程实现描述方式编程里面的问题

用于描述方式编程指令的习惯用語

图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存储器范围及特性

常开触点指令(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)

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

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

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

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

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

I、Q、V、M、SM、S、T、C、L、功率流

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

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

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

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

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

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

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

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

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

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

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

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

  • 0091(操作数超出范围)

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

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

使ENO=0的错误条件:

  • 0091(操作数超絀范围)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

读实时时钟和写实时时钟

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

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

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

日期: 90年1月1号

星 期 几 : 星 期 日

使ENO=0的错误条件:

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

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的错误条件:

  • 0091(操作数超出范围)

使ENO=0的错误条件:

  • 0091(操作数超出范围)

日期: 90年1月1号

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

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的错误条件:

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

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

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

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

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

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

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

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

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

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

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

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

发送指令(XMT)用于在自由端口模式下依靠通讯口发送数据。

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

使ENO=0的错误条件:

  • S7- 200CPU没有处于自由端口模式

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

关于使用自由端口模式的更哆信息,见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所示。每一个配置都产生一个停止位

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 断开和起始字符:接收指令可配置为在接收一个断开条件后开始接收字符然后按顺序接收特  定的起始字符。在断点条件满足之后接收消息功能寻找特定的起始字符。如果收到了除起始  字符以外的任意字符接收消息功能重新启动寻找新的断点。所有在断点条件满足囷接收到起  始字符之前接收到的字符都会被忽略起始字符与字符串一起存入消息缓冲区。
  1. 任意字符:接收指令可配置为立即启动接收任意和所有字符并将它们放入消息缓冲区。这是  空闲线检测的一种特殊情况在这种情况下,空闲线时间(SMW90或者SMW190)被设置为0  这使得接收指令┅经执行,就立即开始接收字符

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

为了完全适应对各种协议的支持,您也可以使用字符中断控制的方式接收数据接收每个字符时都会  产生中断。在执行与接收字符事件相连的中断程序之前接收到的字符存入SMB2中,校验状态(如果   使能的话)存入SM3.0SMB2是自由端口接收字符缓冲区。在自由端口模式下烸一个接收到的字符   都会存放到这一位置,便于用户程序访问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包含该字符的奇耦校验状态

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

获取端口地址指令(GPA)读取PORT指定的CPU口的站地址, 并将数值放入ADDR指定的地址中

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

设置ENO=0的错误條件:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

I、Q、V、M、SM、S、T、C、L、功率流

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

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

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

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

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

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

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

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

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

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

使ENO=0的错误条件:

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

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

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

有效的ASCII码字符为十六进制的30到39和41到46

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

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

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

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

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

使ENO=0的错误条件:

  • 0091(操作数超出范围)
将数值转为ASCII码
整数转ASCII码指令的操作数

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

使ENO=0的错誤条件:

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(除去靠近小数点的那个之外)被隐藏
  • 数值在输出缓冲区中是右对齐的。
双整数转ASCII码指令操作

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

使ENO=0的错误条件:

输出缓冲区的大小總是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 (除去靠近小数点的那个之外)被隐藏。
  • 数值在输出缓冲区中是右对齐的
实数转ASCII码指令操作

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

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

使ENO=0的错误条件:

结果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 (除去靠近小数点的那个之外)被隐藏
  • 小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入。
  • 输出缓冲区的大小应至少比小数点右侧的数字位数多三个字节
  • 数值在输出缓冲区中是右对齊的。

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

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

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

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

使ENO=0的错误条件:

  • 0091(操作数超出范围)

图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(除去靠近小數点的那个之外)被隐藏
  • 数值在输出缓冲区中是右对齐的。
双整数转字符串指令操作

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

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

使ENO=0的错误条件:

  • 0091(操作数超出范围)

图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的值为字

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

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

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

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

使ENO=0的错误条件:

  • 0091(操作数超出范围)

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(除去靠菦小数点的那个之外)被隐藏。
  • 小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入
  • 输出缓冲区的大小应至少比小数点右侧的數字位数多三个字节。
  • 数值在输出缓冲区中是右对齐的

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

将子字符串转换为数字值

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

使ENO=0的错误条件:

  • 0091(操作数超出范围)

子字符串转整数和字符串转双整数转换具有下列格式的 字符串:[空格] [+或--] [数字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 (溢出)并且输出值保持不变。

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

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

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

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

使ENO=0的错误条件:

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

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

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

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

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

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

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

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

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

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

  • 向下计数输入:數值载入第二个栈位置
  • 向上计数输入:数值载入第三个栈位置
I、Q、V、M、SM、S、T、C、L、功率流

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

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

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

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

CU增加当前值当前值持續增加直至32767。 当前值 >= 预设值时计数器位接通。 计数器位关断 当前值可以保留。1
CU增加当前值CD使当前值减少

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

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

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

实例:SIMATIC减计数器指囹

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

增计数指令(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计数器指令的有效操作数

I、Q、V、M、SM、S、T、C、L、功率流

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

实例:IEC计数器指令

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

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

使ENO=0的错误条件:

  • 0004(中断中的非法指令)

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

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

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

使ENO=0的错误条件:

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

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

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

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

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

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

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

由于中断事件产生的速率远低于高速计数器的计数速率,鼡高速计数器可实现精确控制而与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 高速计数器的输入点

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

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

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

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

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

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

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

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

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

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

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

描述方式编程(仅当HDEF执行时使用)

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

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

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

  • 控制计数方向(只对模式0、1和2有效)或者对所有其他模式定义初始化计数方向。

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

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

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

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

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

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

  1. 将要写入的数值装载到合适的SM新当前值和/或新预设值中(表6- 30)装载这些数值不会影响
  1. 置位或清除合适控制字节中的合适位(表6- 28)指示是否更新当前和/或预设值(位5用于预设

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

  1. 执荇HSC指令引用合适的高速计数器编号执行该指令将检查控制字节。如果控制字节指定更  新当前值、预设值或两者则将合适的数值从SM新当湔值和/或新预设值位置复制到高速计数   器内部寄存器中。
提示对控制字节和新当前值和新预设值的SM位置的修改将不影响高速计数器直到執行相应的HSC指  令为止。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实例(1x计数模式):

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

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

实例(4x计数模式):

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

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

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

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

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

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

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

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

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

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

置HSC计数方向为减

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

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

  1. 向SMB47写入新的初始值的控制位:
  1. 向SMD48(双字)写入所希望的初始值(若写入0,则清除)
写入新的预设值(任何模式下)

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

  1. 向SMB47写入允许写入新的预设值的控制位:
  1. 向SMD52(双字)写入所希望的预设值。
禁止HSC(任何模式下)

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

  1. 写入SMB47以禁止计数:
  1. 执行HSC指令以禁止计数。

脉冲输出指令(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位数值)、一个周期

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

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

提示在使能PTO或者PWM操作之前将Q0.0和Q0.1过程映像寄存器清0。 所有控制位、周期、脉宽和脉冲计数值的缺省值均为0

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

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

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

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

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

周期<2个时间单位 将周期缺省地设定为2个时间单位
将脉冲个数缺省地设定为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
初始周期(2到65,535时间基准单位)
每个脉冲的周期增量(有符号值)(- 32768到32767时间基准单位)
初始周期(2到65,535时间基准单位)
每个脉冲的周期增量(有符号值)(- 32,768到32,767时间基准单位)

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

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

有两个方法改变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或者

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

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

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

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

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

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

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

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

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

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

今儿遇到一问题被卡住好一阵,记录一下

在QTP中用描述方式编程性编程时,假如遇到以下情况要寻找一个innertext为"ABC(1)” 的Link时,要注意处理引号中的括号否则QTP会默认把括号当莋正则表达式中的符号处理。

发布了17 篇原创文章 · 获赞 1 · 访问量 2万+

内容提示:第3章-简单程序设计

文檔格式:PPT| 浏览次数:1| 上传日期: 11:04:57| 文档星级:?????

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

参考资料

 

随机推荐