1、西门子S7-200系列PLC应用指令,Prof. Qi Hanhong Yanshan University ,2019/10/3,1,电气控制与PLC,时间间隔定时器指令,2019/10/3,电气控制与PLC,2,时间间隔定时器指令:触发时间间隔指令(BITIM)和计算时间间隔指令(CITIM)。BITIM指令:读内置的1ms计数器的当前值,并将此值存储到OUT中,双字ms值的最大定时间隔是2的32次幂或49.7天。CITIM指令:计算当前时间和IN提供的值之间的时间差,时间差被存储到OUT中,双字ms值的最大定时间隔是2的32次幂或49.7天。依据BITIM指令执行的时间,CITIM自动处
2、理在最大间隔内发生的1ms定时器翻转。,高速计数器指令,2019/10/3,电气控制与PLC,3,用于对S7-200扫描速率无法控制的高速事件进行计数,最高计数频率取决于CPU的类型。高速计数器指令包括定义高速计数器指令(HDEF)和高速计数指令(HSC)。DEF指令:为指定的高速计数器HSCx选择操作模式,决定高速计数器的时钟、方向、启动和复位功能,每一个高速计数器使用一条定义高速计数器指令。HDEF指令ENO=0的错误条件为:输入点冲突(代码0003)、中断中的非法指令(0004)和HSC重复定义(代码000A)。HSC指令:在HSC特殊存储器位状态的基础上,配置和控制高速计数器,参数N指
3、定高速计数器的标号。高速计数器可以配置为12种模式中的任意一种(见表7-2)。每一个高速计数器都有时钟、方向控制、复位、启动的特定输入。对于双相计数器,两个时钟都可以运行在最高频率。在正交模式下,可以选择一倍速(1x)或4倍速(4x)计数频率。所有计数器都可以运行在最高频率下而互不影响。HSC指令ENO=0的错误条件为:在HDEF指令之前执行HSC指令(代码0001)和同时执行HSC/PLS(代码0005)。,高速计数器指令,2019/10/3,电气控制与PLC,4,高速计数器的编程必须完成定义计数器和模式、设置控制字节、设置初始值、设置预置值、指定并使能中断服务程序和激活高速计数器等基本操作
4、。HDEF指令定义计数器的模式和输入。与HSC相关的时钟、方向控制、复位和启动输入点如表所示。同一个输入点不能用于两个不同的功能,但任何一个没有被高速计数器当前模式使用的输入点,可用作其他用途。HSC可以有最多三个控制位用于配置复位和启动信号的有效状态以及选择一倍或者4倍计数模式(仅用于正交计数器),这些位位于各个计数器的控制字节中,如表所示。这些位只有在HDEF指令执行时使用,在执行HDEF指令前,必须把这些控制位设定到希望的状态,否则,计数器对计数模式的选择取缺省模式。一旦HDEF指令被执行,除非先进入STOP模式,否则不能再更改计数器的设置。,高速计数器指令,2019/10/3,电气控制
5、与PLC,5,高速计数器对应的控制字节其他控制位的功能如表所示,其控制功能包括使能或者禁止计数器、控制计数方向(模式0、1和2)或者对所有其它模式定义初始化计数方向、初始值与预置值的更新控制等。,高速计数器指令,2019/10/3,电气控制与PLC,6,设置初始值与预置值:每个高速计数器都有一个32位的初始值和一个32位的预置值,都是符号整数。为了向高速计数器装入新的初始值和预置值,必须先设置控制字节,并且把初始值和预置值存入特殊存储器中,然后执行HSC指令,从而将新的值传送到高速计数器。每个高速计数器的当前值只能使用数据类型HCx的格式进行读取,可用读操作指令直接访问当前值,但是写操作只能用
6、HSC指令实现。HSC初始值、预置值和当前值特殊存储器如表所示。,中断服务:所有计数器模式都支持在HSC的当前值等于预设值时产生一个中断事件,使用外部复位端的计数模式支持外部复位中断。除模式0、1和2外,所有计数器模式支持计数方向改变中断,每种中断条件都可以分别使能或禁止。需要注意的是:当使用外部复位中断时,不要写入初始值,或者在该中断服务程序中禁止再使能允许高速计数器,否则会产生致命的错误。每个高速计数器都有一个状态字节,其中的存储位指出了当前计数方向,当前值是否大于或等于预置值,如表所示。同样需要注意的是:只有在执行中断服务程序时,状态位才有效,监视高速计数器状态的目的是使其他事件能够产生
7、中断以完成更重要的操作。,高速计数器指令,2019/10/3,电气控制与PLC,7,时钟指令,2019/10/3,电气控制与PLC,8,读实时时钟指令(TODR):从硬件时钟中读取当前日期,并把它装载到一个8字节、起始地址为T的时间缓冲区。写实时时钟指令(TODW):将当前时间和日期写入硬件时钟,当前时钟存储在以地址T开始的8字节时间缓冲区中。时钟指令见表。使ENO=0的错误条件:间接寻址(代码:0006)、TOD数据错误(代码:0007,只对写实时时钟指令有效)、时钟模块不存在(代码:000C)。时钟指令所有日期和时间值必须按照BCD码的格式编码,如图所示。时间和日期(TOD)时钟在电源掉电
8、或内存丢失后,初始化日期和时间为:日期01-Jan-90、时间00:00:00、星期日。,网络读写指令,2019/10/3,电气控制与PLC,9,网络读指令(NETR):初始化一个通信操作,根据表TBL的定义,通过指定端口从远程设备上采集数据。NETR指令可以从远程站点读取最多16字节的信息。网络写指令(NETW):初始化一个通信操作,根据表TBL的定义,通过指定端口向远程设备写数据。NETW指令可以向远程站点写最多16字节的信息。在程序中,可以使用任意条网络读写指令,但在同一时间,最多只能有总共8条网络读写指令被激活。使ENO=0的错误条件为:间接寻址(代码0006)、功能返回出错(置位表状
9、态字节中的E)。,发送和接收指令,2019/10/3,电气控制与PLC,10,发送指令(XMT):用于在自由口模式下依靠通信口发送数据。接收指令(RCV):启动或者终止接收信息功能,必须为接收操作指定开始和结束条件。从指定的通信口接收到的信息被存储在数据缓冲区TBL中,数据缓冲区的第一个数据指明了接收到的字节数。使ENO=0的错误条件为:间接寻址(代码0006)、在PORT0同时发送和接收(代码0009)、在PORT1同时发送和接收(代码000B)、RCV参数错误(置位SM86.6或SM186.6)、S7-200 CPU未处于自由口模式等。,发送和接收指令,2019/10/3,电气控制与PLC
10、,11,通过编程,可以选择自由口模式来控制S7-200的串行通信口,当选择了自由口模式,用户程序通过使用接收中断、发送中断、发送指令和接收指令来控制通信口的操作通信协议完全由梯形图程序控制,SMB30(对于端口0)和SMB130(对于端口1)用于选择波特率和校验类型。当S7-200处于STOP模式时,自由口模式被禁止,重新建立正常的通信。只有当S7-200处于RUN模式时,才能进行自由口通信,使能自由口模式,应该在SMB30(端口0)或者SMB130(端口1)的协议选择区设置01,处于自由口通讯模式时不能与编程设备通信。可以使用特殊寄存器SM0.7来控制自由口模式,当SM0.7=0,开关处于T
11、ERM位置;SM0.7=1,开关处于RUN位置。SMB30和SMB130分别配置通信口0和通信口1,并且为自由口操作提供波特率、校验和数据位数的选择,控制字节如图所示,每个配置都产生一个停止位。,发送和接收指令,2019/10/3,电气控制与PLC,12,发送指令发送一个或多个字节的缓冲区,最多255个,发送缓冲区的格式如图a所示。如果有一个中断服务程序连接到发送结束事件上,在发送完缓冲区中的最后一个字时,则会产生一 个中断(对端口0为中断事件9,对端口1为中断事件26)。可以不使用中断来执行发送指令,通过监视SM4.5或SM4.6的信号,判断发送是否完成。把字符数设置为0并执行XMT指令,可
12、产生一个BREAK状态,这样产生的BREAK状态,在线上会持续以当前波特率传输16位数据所需要的时间,发送BREAK和发送其他任何信息的操作是一样的。当BREAK完成时,产生一个发送中断并且SM4.5或SM4.6反应发送操作的当前状态。接收指令接收一个或多个字节的缓冲区,最多255个,接收缓冲区的格式如图b所示。如果有一个中断服务程序连接到接受信息完成事件上,在接收完缓冲区中的最后一个字符时,S7-200会产生一个中断(对端口0为中断事件23,对端口1为中断事件24)。可以不使用中断,通过监视SMB86(端口0)或者SMB186(端口1)来接收信息,当接收指令未被激活或者已经被中止时,这一字节
13、不为0;当接收正在进行时,这一字节为0。,发送和接收指令,2019/10/3,电气控制与PLC,13,接收指令允许选择信息的起始和结束条件,使用SMB86SMB94对端口0进行设置,SMB186SMB194对端口1进行设置。当超限或有校验错误时,接收信息功能会自动终止,必须为接收信息功能定义一个起始条件和一个结束条件(最大字符数)。接收指令用接收信息控制字节(SMB87或SMB187)中的位来定义信息起始和结束条件。当接收指令执行时,在接收口上有来自其他器件的信号,接收信息功能有可能从一个字符的中间开始接收字符,从而导致校验错误和接收信息功能的中止。如果校验没有被使能,接收到的信息有可能包含错
14、误字符。当起始条件被指定为一个特定的起始字符或者任意字符时,这种情况有可能发生。如果指定包含一个停顿或者一个空闲线检测的起始条件,在将字符放到信息缓冲区之前,用一个字符的起始来强制接收信息功能和信息的起始相同步,可以避免以上问题。,发送和接收指令,2019/10/3,电气控制与PLC,14,接收指令支持的几种起始条件:空闲线检测空闲线条件是指在传输线上一段安静或者空闲的时间。在SMW90或者SMW190中指定其毫秒数。当接收指令在程序中执行时,接收信息功能对空闲线条件进行检测,如果在空闲线时间到之前接收到任何字符,接收信息功能会忽略那些字符并且按照SMW90或SMW190中给定的时间值重新启动
15、空闲线定时器,如图所示。在空闲线时间到之后,接收信息功能将所有接收到的字符存入信息缓冲区。空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止位的时间),空闲线时间的典型值为在指定波特率下传输3个字符的时间。对于二进制协议、没有特定起始字符的协议或者指定了信息之间最小时间间隔的协议,可以使用空闲线检测作为起始条件。设置:il=1,sc=0,bk=0,SMW90/SMW190=空闲线超时时间(单位为ms)。,发送和接收指令,2019/10/3,电气控制与PLC,15,接收指令支持的几种起始条件:起始字符检测起始字符可以是用于作为一条信息首字符的任意一个字符。当接收到
16、SMB88或SMB188中指定的起始字符后,一条信息开始。接收信息功能将起始字符作为信息的第一个字符存入接收缓冲区。接收信息功能忽略所有在起始字符之前接收到的字符。起始字符和起始字符之后接收到的所有字符一起存入信息缓冲区。通常,对于所有信息都使用同一个字符作为起始的ASCII码协议,可以使用起始字符检测。设置:il=0,sc=1,bk=0,SMW90/SMW190被忽略,SMB88/SMB188=起始字符。,接收指令支持的几种起始条件:空闲线和起始字符接收指令可以利用空闲线和起始字符的组合来启动一条信息。当接收指令执行时,接收信息功能检测空闲线条件,在空闲线条件满足后,接收信息功能搜寻指定的起
17、始字符,如果接收到的字符不是起始字符,接收信息功能重新检测空闲线条件。所有在空闲线条件满足和接收到起始字符之前接收到的字符被忽略掉,起始字符与字符串一起存入信息缓冲区。空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止位的时间),空闲线时间的典型值为在指定波特率下传输3个字符的时间。通常,对于指定信息之间最小时间间隔并且信息的首字符是特定设备的站号或其他信息的协议,可以使用这种类型的起始条件,这种方式尤其适用于在通信连接上有多个设备的情况,在这种情况下,只有当接收到的信息的起始字符为特定的站号或者设备时,接收指令才会触发一个中断。设置:il=1,sc=1,bk=
18、0,SMW90/SMW1900,SMB88/SMB188=起始字符。,发送和接收指令,2019/10/3,电气控制与PLC,16,接收指令支持的几种起始条件:断点检测断点是指在大于一个完整字符传输时间的一段时间内,接收数据一直为0。一个完整字符传输时间定义为传输起始位、数据位、校验位和停止位的时间总和。如果接收指令被配置为用接收一个断点作为信息的起始,则任何在断点之后接收到的字符都会存入信息缓冲区,任何在断点之前接收到的字符被忽略。通常,只有当通信协议需要时,才使用断点检测作为起始条件。设置:il=0,sc=0,bk=1,SMW90/SMW190被忽略,SMB88/SMB188被忽略。,接收指
19、令支持的几种起始条件:断点和起始字符接收指令可以被配置为接收到断点条件和一个指定的起始字符之后,启动接收。在断点条件满足后,接收信息功能寻找特定的起始字符,如果受到了除起始字符以外的任意字符,接收信息功能重新启动寻找新的断点。所有断点条件满足和和接收到起始字符之前接收到的字符都会被忽略,起始字符与字符串一起存入信息缓冲区。设置:il=0,sc=1,bk=1,SMW90/SMW190被忽略,SMB88/SMB188=起始字符。,接收指令支持的几种起始条件:任意字符接收指令可以被配置为立即接收任意字符并把全部接收到的字符存入信息缓冲区。这是空闲线检测的一种特殊情况。在这种情况下,空闲线时间被设置为
20、0,使得接收指令一经执行就立即开始接收字符。设置:il=1,sc=0,bk=0,SMW90/SMW190=0,SMB88/SMB188被忽略。用任意字符开始一条信息允许使用信息定时器来监控信息接收是否超时。这对于自由口协议的主站是非常有用的,并且当在指定时间内内,没有来自从站的任何响应的情况,也需要采取超时处理。由于空闲线时间被设置为0,当接收指令执行时,信息定时器启动,如果没有其它终止条件满足,信息定时器超时会结束接收信息功能。设置:c/m=1,tmr=1,SMW92/ SMW192=信息超时时间(单位为ms)。,发送和接收指令,2019/10/3,电气控制与PLC,17,接收指令支持的结束
21、信息方式,可以是一种或几种的组合:结束字符检测结束字符是用于表示信息结束的任意字符。在找到起始条件后,接收指令检查每一个接收到的字符,并且判断它是否与结束字符匹配,如果接收到了结束字符,将其存入信息缓冲区,接收结束。通常,对于所有信息都使用同一个字符作为结束的ASCII码协议,可以使用结束字符检测。可以使用结束字符检测与字符间隔定时器、信息定时器或者最大字符计数相结合来结束一条信息。设置:ec=1,SMB89/SMB189=结束字符。,接收指令支持的结束信息方式,可以是一种或几种的组合:字符间隔定时器字符间隔定时器是指从一个字符的结尾(停止位)到下一个字符的结尾(停止位)之间的时间。如果两个字
22、符之间的时间间隔(包括第二个字符)超过了SMW92或者SMW192中指定的毫秒数,接收信息功能结束。接收到字符后,字符间隔定时器重新启动,如图所示。当协议没有特定的信息结束字符时,可以用字符间隔定时器来结束一条信息。由于定时器总是包含接收一个完整字符(包括起始位、数据位、校验位和停止位)的时间,因而该时间应设置为大于在指定波特率下传输一个字符的时间。可以使用字符间隔定时器与结束字符检测或者最大字符计数相组合来结束一条信息。设置:c/m=0,tmr=1,SMW92/SMW192=信息超时时间(单位为ms)。,发送和接收指令,2019/10/3,电气控制与PLC,18,接收指令支持的结束信息方式,
23、可以是一种或几种的组合:信息定时器从信息的开始算起,在经过一段指定的时间之后,信息定时器结束一条信息。接收信息功能的启动条件一满足,信息定时器就启动,当经过的时间超过SMW92或者SMW192中指定的毫秒数时,信息定时器时间到,如图7所示。通常,当通讯设备不能保障字符中间没有时间间隔或者使用Modem通信时,可以使用信息定时器。对于Modem方式,可以用信息定时器指定一个从信息开始算起,接收信息允许的最大时间。信息定时器的典型值是在当前波特率下接收到最长信息所需时间值的大约1.5倍。可以使用信息定时器与结束字符检测或者最大字符计数相组合来结束一条信息。设置:c/m=1,tmr=1,SMW92/
24、SMW192=信息超时时间(单位为ms)。,接收指令支持的结束信息方式,可以是一种或几种的组合:最大字符计数必须告诉接收指令接收字符的最大个数(SMB94或者SMB194),当达到或者超出这个值,接收信息功能结束。即使不会被用作结束条件,接收指令要求用户指定一个最大字符个数,这是因为接收指令需要知道接收信息的最大长度,这样才能保证信息缓冲区之后的用户数据不会被覆盖。对于信息的长度已知并且恒定的协议,可以使用最大字符计数来结束信息。最大字符计数总是与检测字符结束、字符间隔定时器或者信息定时器结合在一起使用。,发送和接收指令,2019/10/3,电气控制与PLC,19,接收指令支持的结束信息方式,
25、可以是一种或几种的组合:校验错误当接收字符的同时出现硬件信号校验错误时,接收指令会自动结束。只有在SMB30或者SMB130中使能了校验位,才有可能出现校验错误,没有办法禁止此功能。,为了完全适应对各种协议的支持,也可以使用字符中断控制的方式接收数据。接收每个字符时都会产生中断。在执行与接收字符事件相连的中断服务程序之前,接收到的字符存入SMB2中,校验状态(入锅使能)存入SM3.0。SMB2是自由口接收字符缓冲区,在自由口模式下,每一个接收到的字符都会存放到这一位置,便于用户程序访问。SMB3用于自由口模式,它包含一个校验错误标志位,当接收字符的同时检测到校验错误时,该位被置位,该字节的其他
26、位被保留,利用校验位去丢弃信息或向该信息发送否定应答。在较高的波特率下(38.4KB115.2KB)使用字符中断时,中断之间的时间间隔(38.4KB时为260s;57.6KB时为173s;115.2KB时为86s)会非常短。因此,要确保中断服务程序足够短,才不会丢失字符或者使用接收指令。SMB2和SMB3是端口0和端口1共用的。当字符的接收来自端口0时,执行与事件(中断事件8)相连的中断服务程序,SMB2中存储从端口0接收到的字符,SMB3中存储该字符的校验状态。当字符的接收来自端口1,执行与事件(中断事件25)相连的中断服务程序,SMB2中存储从端口1接收到的字符,SMB3中存储该字符的校验
27、状态。,接收指令支持的结束信息方式,可以是一种或几种的组合:用户结束用户可以通过程序来结束接收信息功能,先将SMB87或者SMB187中的使能位置为0,再次执行接收指令即可,这样可以立即终止接收信息功能。,获取和设定口地址指令,2019/10/3,电气控制与PLC,20,获取口地址指令(GPA):读取PORT指定的CPU口的站地址,并将数值放入ADDR指定的地址中。设定口地址指令(SPA):将口的站地址(PORT)设置为ADDR指定的数值。新地址不能永久保存,重新上电后,口地址将返回到原来的地址值(系统块下载的地址)。使ENO=0的错误条件为:间接寻址(代码0006)、试图在中断服务程序中执行
28、设定口地址指令(代码0004)。,数值比较指令,2019/10/3,电气控制与PLC,21,数值比较指令用于比较两个数值:IN1=IN2,IN1=IN2,IN1IN2,IN1IN2。 包括:无符号字节比较(B)、有符号整数比较(I)、有符号双字比较(D)以及有符号实数比较(R)。 对于LAD和FBD,当比较结果为真时,比较指令使触点闭合(LAD)或者输出接通(FBD);对于STL,当比较结果为真时,对1进行LD、A或O操作,并置入栈顶。数值比较指令非法的间接地址以及实数比较指令非法的实数,是致命的错误,会导致S7-200立即停止执行用户程序,因此,为了避免这种情况的发生,在执行数值比较指令之前
29、,要确保合理使用指针和存储实数的数值单元。,数值比较指令,2019/10/3,电气控制与PLC,22,字符串比较指令,2019/10/3,电气控制与PLC,23,字符串比较指令比较两个字符串的ASCII码字符:IN1=IN2,IN1IN2。当比较结果为真时,比较指令使触点(LAD)或输出(FBD)接通,或者对1进行LD、A或O操作,并置入栈顶(STL)。字符串比较指令非法的间接地址、字符串长度超过254个字符以及字符串起始地址和长度不适合所指定的存储区,是致命的错误,会导致S7-200立即停止执行用户程序,因此,为了避免这种情况的发生,在执行字符串比较指令之前,要确保合理使用指针和存储ASCI
30、I码字符串的存储区,确保一个保存ASCII码字符串的缓冲区能够在指定的存储区完整的保留。,标准转换指令,2019/10/3,电气控制与PLC,24,数字转换指令:字节转整数指令(BTI)将字节值IN转换成整数值,并且存入OUT指定的变量中,字节是无符号的,因而没有符号扩展位。整数转字节指令(ITB)将一个字的值IN转换成一个字节值,并且存入OUT指定的变量中,只有0255中的值被转换,所有其他值会产生溢出并且输出不会改变。整数转双整数指令(ITD)将整数值IN转换成双整数值,并且存入OUT指定的变量中,符号位扩展到高字节中。双整数转整数指令(DTI)将一个双整数值IN转换成一个整数值,并将结果
31、存入OUT指定的变量中,如果所转换的数值太大以致于无法在输出中表示,则溢出标志位置位并且输出不会改变。双整数转实数指令(DTR)将一个32位有符号整数值IN转换成一个32位实数,并将结果存入OUT指定的变量中。BCD码转整数指令(BCDI)将一个BCD码IN的值转换成整数值,并将结果存入OUT指定的变量中,IN的有效范围是09999的BCD码。整数转BCD码指令(IBCD)将输入的整数值IN转换成BCD码,并将结果存入OUT指定的变量中,IN的有效范围是09999的BCD码。四舍五入和取整指令:四舍五入取整指令(ROUND)将实数值IN转换成双整数值,并将四舍五入的结果存入OUT指定的变量中。
32、取整指令(TRUNC)将一个实数值IN转换成一个双整数值,并将实数的整数部分作为结果存入OUT指定的变量中。如果所转换的不是一个有效地实数,或者其数值太大以致于无法在输出中表示,则溢出标志位置位并且输出不会改变。七段码指令:七段码指令(SEG)将IN中指定的字符字节转换生成一个点阵并存入OUT指定的变量中,用于点亮七段数码显示器的各个段。,标准转换指令,2019/10/3,电气控制与PLC,25,标准转换指令,2019/10/3,电气控制与PLC,26,ASCII码转换指令,2019/10/3,电气控制与PLC,27,ASCII码转十六进制数指令(ATH):将一个长度为LEN从IN开始的ASC
33、II码字符串转换成从OUT开始的十六进制数。十六进制数转ASCII码指令(HTA)将从输入字节IN开始的十六进制数转换成从OUT开始的ASCII码字符串,被转换的十六进制数的位数由长度LEN给出。能被转换的ASCII码字符串或者十六进制数的最大值为255,有效的ASCII码输入字符是09的十六进制数代码值3039和大写字符A到F的十六进制数代码值4146这些字母数字字符。整数转ASCII码指令(ITA):将一个整数字IN转换成一个ASCII码字符串,格式FMT指定小数点右侧的转换精度和小数点是使用逗号还是点号,转换结果放在OUT指定的连续8个字节中。格式操作数FMT如图所示,输出缓冲区的大小始
34、终是8个字节,nnn表示输出缓冲区中小数点右侧的数字位数,范围是05,小数点右侧的位数定为0使得所显示的数值没有小数位,对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填充;c指定用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符;高四位必须为0。示例中的格式为使用点号(c=0),小数点右侧有三位小数(nnn=011)。输出缓冲区的格式符合以下规则:正数值写入输出缓冲区时没有符号位;负数值写入输出缓冲区时以负号(-)开头;小数点左侧开头的0(除去靠近小数点的之外)被隐藏;数值在输出缓冲区是右对齐的。,ASCII码转换指令,2019/10/3,电气控制与PLC,28,双整数转AS
35、CII码指令(DTA):将一个双字IN转换成一个ASCII码字符串,格式操作数FMT指定小数点右侧的转换精度,转换结果存储在从OUT开始的连续12个字节中。格式操作数FMT如图所示,nnn表示输出缓冲区中小数点右侧的数字位数,范围是05,小数点右侧的位数定为0使得所显示的数值没有小数位,对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填充;c指定用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符;高四位必须为0。示例中的格式为使用点号(c=0),小数点右侧有四位小数(nnn=100)。输出缓冲区的格式符合以下规则:正数值写入输出缓冲区时没有符号位;负数值写入输出缓冲区时以负号(
36、-)开头;小数点左侧开头的0(除去靠近小数点的之外)被隐藏;数值在输出缓冲区是右对齐的。,ASCII码转换指令,2019/10/3,电气控制与PLC,29,实数转ASCII码指令(RTA):将一个实数值IN转为ASCII码字符串,格式操作数FMT指定小数点右侧的转换精度、小数点使用逗号还是点表示以及输出缓冲区的大小,转换结果存储在从OUT开始的输出缓冲区中,结果ASCII码字符的位数(或长度)就是输出缓冲区的大小,其值在315字节或字符之间,S7-200的实数格式支持最多7位小数,显示7位以上的小数会产生一个四舍五入错误。格式操作数FMT如图所示,ssss表示输出缓冲区的大小,0、1或者2个字
37、节的大小是无效的;nnn表示输出缓冲区中小数点右侧的数字位数,范围是0到5,小数点右侧的位数定为0使得所显示的数值没有小数位,对于nnn大于5或者指定的输出缓冲区太小以致于无法存储转换值的情况,输出缓冲区会被空格键的ASCII码填充;c指定用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。示例中的格式为使用点号(c=0),小数点右侧有一位小数(nnn=001)和6个字节的缓冲区大小(ssss=0110)。输出缓冲区的格式符合以下规则:正数值写入输出缓冲区时没有符号位;负数值写入输出缓冲区时以负号(-)开头;小数点左侧开头的0(除去靠近小数点的之外)被隐藏;小数点右侧的数值按照指定的小数
38、点右侧的数字位数被四舍五入;输出缓冲区的大小应至少比小数点右侧的数字位数多三个字节;数值在输出缓冲区是右对齐的。,ASCII码转换指令,2019/10/3,电气控制与PLC,30,数字值转字符串指令,2019/10/3,电气控制与PLC,31,整数转字符串指令(ITS):将一个整数字IN转换为8个字符串长的ASCII码字符串,格式操作数FMT指定小数点右侧的转换精度和使用逗号还是点号作为小数点,转换结果被写入从OUT开始的9个连续字节中。ITS指令的格式操作数如图所示,输出字符串的长度总是8个字符,nnn表示输出缓冲区中小数点右侧的数字位数,范围是05,小数点右侧的位数定为0使得所显示的数值没
39、有小数位,对于nnn大于5的情况,输出是由8个空格键的ASCII码组成的字符串;c指定用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符;高四位必须为0。示例中的格式为使用点号(c=0),小数点右侧有3位小数(nnn=011)。输出缓冲区的格式符合以下规则:正数值写入输出缓冲区时没有符号位;负数值写入输出缓冲区时以负号(-)开头;小数点左侧开头的0(除去靠近小数点的之外)被隐藏;数值在输出缓冲区是右对齐的。,数字值转字符串指令,2019/10/3,电气控制与PLC,32,双整数转字符串指令(DTS):将一个双整数IN转换成一个长度为12个字符的ASCII码字符串,格式操作数FMT指定小数
40、点右侧的转换精度和使用逗号还是点号作为小数点,转换结果被写入从OUT开始的连续13个字节中。DTS指令的格式操作数如图所示,输出字符串的长度总是8个字符,nnn表示输出缓冲区中小数点右侧的数字位数,范围是05,小数点右侧的位数定为0使得所显示的数值没有小数位,对于nnn大于5的情况,输出是由12个空格键的ASCII码组成的字符串;c指定用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符;高四位必须为0。示例中的格式为使用点号(c=0),小数点右侧有4位小数(nnn=100)。输出缓冲区的格式符合以下规则:正数值写入输出缓冲区时没有符号位;负数值写入输出缓冲区时以负号(-)开头;小数点左侧
41、开头的0(除去靠近小数点的之外)被隐藏;数值在输出缓冲区是右对齐的。,数字值转字符串指令,2019/10/3,电气控制与PLC,33,实数转字符串指令(RTS):将一个实数值IN转换为一个ASCII码字符串,格式操作数FMT指定小数点右侧的转换精度以及小数点使用逗号还是点表示,转换结果存储在从OUT开始的一个字符串中,结果字符串的长度由格式操作数给出,可以是315个字符,S7-200的实数格式支持最多7位小数,显示7位以上的小数会产生一个四舍五入错误。格式操作数FMT如图所示,ssss表示输出字符串的长度,0、1或者2个字节的大小是无效的;nnn表示输出缓冲区中小数点右侧的数字位数,范围是05
42、,小数点右侧的位数定为0使得所显示的数值没有小数位,对于nnn大于5或者指定的输出缓冲区太小以致于无法存储转换值的情况,输出缓冲区会被空格键的ASCII码填充;c指定用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。示例中的格式为使用点号(c=0),小数点右侧有一位小数(nnn=001)和6个字节的缓冲区大小(ssss=0110)。输出缓冲区的格式符合以下规则:正数值写入输出缓冲区时没有符号位;负数值写入输出缓冲区时以负号(-)开头;小数点左侧开头的0(除去靠近小数点的之外)被隐藏;小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入;输出缓冲区的大小应至少比小数点右侧的数字位数多
43、三个字节;数值在输出缓冲区是右对齐的。,数字值转字符串指令,2019/10/3,电气控制与PLC,34,子字符串转数字值指令,2019/10/3,电气控制与PLC,35,包括:子字符串转整数指令(STI)、子字符串转双整数指令(STD)和子字符串转实数指令(STR),将从偏移量INDX开始的字符串值IN转换成整数、双整数或实数值OUT。STI或STD指令将字符串转换为以下格式:空格+或-数字09。STR指令将字符串转换为以下格式:空格+或-数字0-9.或,数字09。INDX通常设置为1,从字符串的第一个字符开始转换。INDEX也可设为其它值,从字符串的不同位置进行转换,用于字符串中包含非数字值
44、字符的情况。STR指令不能用于以科学计数法或者指数形式表示实数的字符串,指令不会产生溢出错误(SM1.1),但是它会将字符串转换到指数之前,然后停止转换。,子字符串转数字值指令,2019/10/3,电气控制与PLC,36,当到达字符串的结尾或者遇到第一个非数字(09)非法字符时,转换指令结束。当转换产生的整数值过大以致输出值无法表示时,溢出标志SM1.1置位。当输入字符串中并不包含可以转换的合法数值时,溢出标志也会置位。子字符串转数字值指令的合法与非法字符串如图所示。,编码与解码指令,2019/10/3,电气控制与PLC,37,编码指令(ENCO):将输入字IN的最低有效位的位号写入输出字节O
45、UT的最低有效半字节(4位)中。译码指令(DECO):根据输入字节IN的低四位所表示的位号置输出字OUT的相应位为1,输出字的所有其它位都清0。编码和解码指令使ENO=0的错误条件为:间接寻址(代码0006)。,脉冲输出指令,2019/10/3,电气控制与PLC,38,脉冲输出指令(PLS):用于在高速输出(Q0.0和Q0.1)上控制脉冲串(PTO)输出和脉宽调制(PWM)输出功能。PTO可以输出一串脉冲(占空比50%),用户控制脉冲的周期和个数。PWM可以输出连续、占空比可调的脉冲串,用户控制脉冲的周期和脉宽。,S7-200有两个PTO/PWM发生器,分别是数字输出点Q0.0和Q0.1,可以
46、产生高速脉冲串或脉宽调制波形。指定的特殊寄存器SM位置位每个发生器存储下列数据:一个控制字节(8位)、一个计数值(32位无符号数)和一个周期或脉宽值(16位无符号数)。PTO/PWM发生器与过程映像寄存器共用Q0.0和Q0.1,当Q0.0或Q0.1上激活PTO或PWM功能时,PTO/PWM发生器对输出拥有控制权,同时普通输出点功能被禁止,输出功能不受过程映像区状态、输出点强制或者立即输出指令执行的影响。使能PTO/PWM操作之前,将Q0.0和Q0.1过程映像寄存器清0,所有控制位、周期、脉宽和脉冲计数值的缺省值均为0,PTO/PWM的输出负载至少为10%额定负载,才能提供陡直的上升沿和下降沿。
47、当不使用PTO/PWM发生器功能时,对输出点的控制权交回到过程映像寄存器。,脉冲输出指令,2019/10/3,电气控制与PLC,39,PTO按照给定的脉冲个数(1到4,294,967,295)和周期(10到65535s或者2到65535ms)输出一串方波(占空比50%),如果为周期指定一个奇的微妙或毫秒数,会引起占空比失真。PTO可以产生单段脉冲串或者多段脉冲串(使用脉冲包络):单段管线模式:需要为下一个脉冲串更新特殊寄存器。一旦启动了起始PTO段,就必须按照第二个波形的要求改变特殊寄存器,并再次执行PLS指令,第二个脉冲串的属性在管线中一直保持到第一个脉冲串发送完成。在管线中一次只能存储一段
48、脉冲串属性,当第一个脉冲串发送完成时,接着输出第二个波形,此时管线可以用于下一个新的脉冲串,重复这个过程可以再次设定下一个脉冲串的特性。除非时间基准发生了变化,或者PLS指令捕捉到新脉冲之前启动的脉冲串已经完成,脉冲串之间可以做到平滑转换。,多段管线模式:CPU自动从V存储区的包络表中读出每个脉冲串的特性。在该模式下,仅使用特殊存储器区的控制字节和状态字节。选择多段操作,必须装入包络表在V存储器中的起始地址偏移量(SMW168或SMW178)。时间基准可以选择微秒或者毫秒,但是,在包络表中的所有周期值必须使用同一个时间基准,而且在包络正在运行时不能改变,执行PLS指令来启动多段操作。每段记录的
49、长度为8个字节,由16位周期值、16位周期增量值和32位脉冲个数值组成。如表所示为多段PTO模式的包络表的格式。可以通过编程的方式,在周期增量处输入一个正值或者负值使脉冲的周期自动增减。当PTO包络执行时,当前启动的段的编号保存在SMB166(或SMB176)。,脉冲输出指令,2019/10/3,电气控制与PLC,40,PWM产生一个占空比变化周期固定的脉冲输出(周期:10到65535s或者2到65535ms;脉宽:0到65535s或者0到65535ms)。有两个方法改变PWM波形的特性:,同步更新:如果不需要改变时间基准,就可以进行同步更新。利用同步更新,波形特性的变化发生在周期边沿,提供平滑转换。异步更新:PWM的典型操作是当周期时间保持常数时变化脉冲宽度,所以,不需要改变时间基准,但是,如果需要改变PTO/PWM发生器的时间基准,就要使用异步更新。异步更新会造成PTO/PTW功能被瞬时禁止,和PWM波形不同步,引起被控设备的振动,因此建议采用同步更新,选择一个适合于所有周期时间的时间基准。控制字节中的PWM更新方式位(SM67.4或SM77.4)用于指定更新方式,当PLS指令执行时变化生效。如果改变了时间基准,会产生一个异步更新,而与PWM更新方式位的状态无关。,