电气控制与S7-1200应用 第5章_第1页
电气控制与S7-1200应用 第5章_第2页
电气控制与S7-1200应用 第5章_第3页
电气控制与S7-1200应用 第5章_第4页
电气控制与S7-1200应用 第5章_第5页
已阅读5页,还剩126页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电气控制与S7-1200应用

(第五章)主编:王成凤

陈建明副主编:赵明明郭香静

磊第5章S7-1200PLC的指令系统

学习目标:

熟练掌握梯形图的编程方法,掌握基本指令和功能指令中的常用指令,了解和会用其他指令。通过对本章的学习,做到可以根据需要编制出结构较复杂的控制程序。第5章S7-1200PLC的指令系统

教学内容:

5.1S7-1200PLC编程基础

5.2基本指令

5.3工艺指令5.1S7-1200PLC编程基础5.1.1编程语言西门子公司为S7-1200PLC提供3种标准编程语言:梯形图(LAD)、功能块图(FBD)和结构化控制语言(SCL)。梯形图是基于电路图来表示的一种图形编程语言,功能块图是基于布尔代数中使用的图形逻辑符号来表示的一种编程语言,结构化控制语言是一种基于文本的高级编程语言。为S7-1200PLC创建代码块时,应选择该块要使用的编程语言(默认LAD,可与FBD随时切换,SCL不可转换)。用户程序可以使用由任意或所有编程语言创建的代码块。5.1.1编程语言1、梯形图(LAD)沿用了继电器、触头、串/并联等类似的图形符号,并简化了符号,还向多种功能(如数学、定时器、计数器和移动等)提供功能框指令。是融逻辑操作、控制于一体,面向对象的、实时的、图形化的编程语言。图5-1梯形图语言的梯级5.1.1编程语言按自上而下、从左到右的顺序排列,最左边的竖线称为起始母线(也称左母线),然后按一定的控制要求和规则连接各个节点,最后以继电器线圈或功能框指令(或再接右母线)结束,称为一个逻辑行或一个“梯级”。

通常一个LAD程序段中有若干逻辑行(梯级),形似梯子,梯形图由此而得名。梯形图信号流向清楚、简单、直观、易懂,很适合电气工程人员使用。5.1.1编程语言1、梯形图(LAD)创建LAD程序段时应注意以下规则:①不能创建如图(a)所示可能导致反向能流的分支;②不能创建如图(b)所示可能导致短路的分支。图5-2错误的分支结构5.1.1编程语言2、功能块图(FBD)

类似于普通的逻辑功能图,它沿用了半导体逻辑电路的逻辑框图的表达方式,使用布尔代数的图形逻辑符号来表示控制逻辑,使用指令框来表示复杂的功能,有基本功能模块和特殊功能模块两类。

基本功能模块如AND、OR、XOR等,特殊功能模块如脉冲输出、计数器等。一般用一种功能方框表示一种特定的功能,框图内的符号表达了该功能块图的功能。5.1.1编程语言3、结构化控制语言(SCL)

结构化控制语言(StructuredControlLanguage,SCL)是用于SIMATICS7CPU的基于PASCAL的高级编程语言。

SCL指令使用标准编程运算符,例如,用(:=)表示赋值,+表示相加,-表示相减,*表示相乘,/表示相除。SCL也使用标准的PASCAL程序控制操作,如IF-THEN-ELSE、CASE、REPEAT-UNTIL、GOTO和RETURN等。

LAD和FBD之间可以有条件相互转换,但与SCL之间不可以相互转换,建议初学者首先掌握梯形图编程,等熟练并积累一定的经验后再尝试应用其他编程语言。5.1.1编程语言4、LAD、FBD和SCL的EN和ENOEN(使能输入)是布尔输入。执行功能框指令时,能流(EN=1)必须出现在其输入端。如果LAD功能框的EN输入直接连接到左母线,将始终执行该指令。ENO(使能输出)是布尔输出。如果功能框在EN输入端有能流且正确执行了其功能,则ENO输出会将能流(ENO=1)传递到下一个元素。如果执行功能框指令时检测到错误,则在产生该错误的功能框指令处终止该能流(ENO=0)。5.1.1编程语言

LAD、FBD和SCL的EN和ENO的操作数类型见表5-1。程序编辑器输入/输出操作数数据类型LADEN,ENO能流BoolFBDENI、I_:P、Q、M、DB、Temp、能流BoolENO能流BoolSCLEN1TRUE、FALSEBoolENO2TRUE、FALSEBool表5-1EN

ENO

的操作数类型5.1.2数据类型1、基本数据类型及数据类型检查(1)基本数据类型S7-1200PLC的指令参数所用的基本数据类型有布尔型(Bool)、字节型(Byte)、字型(Word)、双字型(DWord)、无符号8位整数USint、有符号8位整数Sint、无符号16位整数UInt、有符号16位整数Int、无符号32位整数UDint、有符号32位整数Dint、32位实数型Real、64位实数型LReal、IEC时间值Time、日期值Date,以及时钟值TOD、字节日期和时间结构DTL、单字符Char、双字符WChar、单字节字符串String、双字节字符串WString。5.1.2数据类型2、数据长度与数值范围表5-5不同的数据长度对应的数值范围变量类型符号位数取值范围常数举例位Bool11,0TRUE,FALSE或1,0字节Byte816#00

~

16#FF16#12,16#AB字Word1616#0000

~

16#FFFF16#ABCD,16#0001双字DWord3216#00000000

~

16#FFFFFFFF16#02468ACE字符Char816#00

~

16#FF‘A’,‘t’,‘@’有符号字节SInt8-128

~

127123,-123有符号整数Int16-32768

~

32767123,-123有符号双整数Dint32-2147483648

~

2147483647123,-123无符号字节USInt80

~

255123

无符号整数UInt160

~65535123

无符号双整数UDint320

~

4294967295123

单精度浮点数(实数)Real32±1.175495×10-38

~

±3.402823×103812.45,-3.4,-1.2E+3双精度浮点数(实数)LReal64±2.2250738585072020×10-308

~

±1.7976931348623157×1030812345.12345-1,2E+40时间Time32T#-24d_20h_31m_23s_648ms

~

T#24d_20h_31m_23s_647msT#1d_2h_15m_30s_45ms日期Date16位D#1990-1-1~D#2168-12-31D#2009-12-315.1.3存储器与地址

S7-1200PLC的存储器分为程序区、系统区、数据区。系统区用于存放有关PLC配置结构的参数,如PLC主机及扩展模块的I/O配置和编址、配置PLC站地址,设置保护口令、停电记忆保持区、软件滤波功能等,存储器为EEPROM。

CPU提供了以下用于存储用户程序、数据和组态的存储区:●装载存储器,用于非易失性地存储用户程序、数据和组态。将项目下载到CPU后,CPU会先将程序存储在装载存储区中。该存储区位于存储卡(如存在)或CPU中。CPU能够在断电后继续保持该非易失性存储区。存储卡支持的存储空间比CPU内置的存储空间更大。5.1.3存储器与地址●工作存储器,是易失性存储器,集成在CPU中的高速存取的RAM。类似于计算机的内存,用于在执行用户程序时存储用户项目的某些内容。CPU会将一些项目内容从装载存储器复制到工作存储器中。该易失性存储区将在断电后丢失,而在恢复供电时由CPU恢复。

●保持性存储器,用于非易失性地存储限量的工作存储器值。断电过程中,CPU使用保持性存储区存储所选用户存储单元的值。如果发生断电或掉电,CPU将在上电时恢复这些保持性值。●存储卡,可选的存储卡用来存储用户程序,或用于传送程序。存储卡属性可设置为“存储”或“传递”。5.1.3存储器与地址数据区是S7-1200CPU提供的存储器的特定区域。它包括过程映象输入(I)、物理输入(I_:P)、过程映象输出(Q)、物理输出(Q_:P)、位存储器(M)、临时存储器(L)、函数块(FB)的变量、数据块(DB)。数据区空间是用户程序执行过程中的内部工作区域。数据区使CPU的运行更快、更有效。存储器为EEPROM和RAM。

用户对程序区、系统区和部分数据区进行编辑,编辑后写入PLC的EEPROM。RAM为EEPROM存储器提供备份存储区,用于PLC运行时动态使用。RAM由大容量电容作停电保持。5.1.3存储器与地址1、数据区存储器的地址表示格式每个存储单元都有唯一的地址。用户程序利用这些地址访问存储单元中的信息。绝对地址由存储区域标示符、空间大小标识符和起始地址三部分组成,具体说明如下:

1)存储区标识符(如I、Q或M);

2)要访问的数据的大小(“B”表示Byte、“W”表示Word或“D”表示DWord);

3)数据的起始地址(如字节3或字3);5.1.3存储器与地址●访问布尔值地址中的位时,不需要输入数据大小的助记符,仅需输入数据的存储区、字节位置和位位置(如I0.0、Q0.1或M3.4)。5.1.3存储器与地址●访问字节、字、双字地址数据区存储器的区域格式为:ATx。必须指定区域标识符A、数据长度T以及该字节、字或双字的起始字节地址x。

ATx:如用MB100、MW100、MD100

分别表示字节、字、双字的地址。MW100由MB100、MB101两个字节组成;MD100由MB100~MB103四个字节组成。多字节数据,低地址字节为数据高位、高地址字节为数据低位,顺序排列。5.1.3存储器与地址2、数据区存储器区域(1)输入/输出映像寄存器(I/Q)①输入映像寄存器(I)

输入映像寄存器(I)也称为过程映像输入(I)。PLC的输入端子是从外部接收输入信号的窗口。每个输入端子与输入映像寄存器(I)的相应位相对应。输入点的状态在每次扫描周期开始(或结束)时进行采样,并将采样值存于输入映像寄存器,作为程序处理时输入点状态的依据。输入映像寄存器的状态只能由外部输入信号驱动,而不能在内部由程序指令来改变(特殊调试状态时可由指令改变)。输入映像寄存器(I)的地址格式为:

位地址:I[字节地址].[位地址],如I0.1。

字节、字、双字地址:I[数据长度][起始字节地址],如IB4、IW6、ID10。5.1.3存储器与地址②输出映像寄存器(Q)输出映像寄存器(Q)也称为过程映像输出(Q)。每个输出模块的端子与输出映像寄存器的相应位相对应。CPU将输出判断结果存放在输出映像寄存器中,在扫描周期的结尾,CPU以批处理方式将输出映像寄存器的数值复制到相应的输出端子上,通过输出模块将输出信号传送给外部负载。可见,PLC的输出端子是PLC向外部负载发出控制命令的窗口。输出映像寄存器(Q)地址格式为:

位地址:Q[字节地址].[位地址],如Q1.1。

字节、字、双字地址:Q[数据长度][起始字节地址],如QB5、QW8、QD11。5.1.3存储器与地址(2)位存储器(M)位存储器(M)也称内部全局标志位存储器(M)或称内部线圈,模拟继电器-接触器控制系统中的中间继电器,针对控制继电器及数据的位存储区(M存储器)用于存储操作的中间状态或其他控制信息。可以按位、字节、字或双字访问位存储区。M存储器允许读访问和写访问。位存储器(M)的地址格式为:

位地址:M[字节地址].[位地址],如M26.7。

字节、字、双字地址:M[数据长度][起始字节地址],如MB11、MW23、MD26。5.1.3存储器与地址(3)临时存储器(L)CPU根据需要分配临时存储器。启动代码块(对于OB)或调用代码块(对于FC或FB)时,CPU将为代码块分配临时存储器并将存储单元初始化为0。

临时存储器与M存储器类似,但有一个主要的区别:M存储器在“全局”范围内有效,而临时存储器只在“局部”范围内有效。位存储器(M):任何OB、FC或FB都可以访问M存储器中的数据,也就是说,这些数据可以全局性地用于用户程序中的所有元素,而L存储器只应用于“局部”。5.1.3存储器与地址

临时存储器(L):CPU限定只有创建或声明了临时存储单元的OB、FC或FB才可以访问临时存储器中的数据。临时存储单元是局部有效的,并且其他代码块不会共享临时存储器,即使在代码块调用其他代码块时也是如此。例如:当OB调用FC时,FC无法访问对其进行调用的OB的临时存储器。

可以按位、字节、字、双字访问局部存储器,局部存储器(L)的地址格式为:

位地址:L[字节地址].[位地址],如L0.0。

字节、字、双字地址:L[数据长度][起始字节地址],如LB33、LW44、LD55。5.1.3存储器与地址(4)数据块(DB)存储器数据块存储器用于存储各种类型的数据,其中包括操作的中间状态或FB的其他控制信息参数,以及许多指令(如定时器和计数器)所需的数据结构。可以按位、字节、字或双字访问数据块存储器。读/写数据块允许读访问和写访问,只读数据块只允许读访问。

位地址:DB[数据块编号].DBX[字节地址].[位地址],如DB1.DBX2.3。

字节、字、双字地址:DB[数据块编号].DB[大小][起始字节地址],如DB1.DBB4、DB10.DBW2、DB20.DBD8。

综上所述,S7-1200PLC的常用存储区(寄存器)、基本功能以及相关约定可参阅下表所示内容。存储区(符号)功能说明强制保持过程影像输入(I)在扫描循环开始时,从物理输入复制的输入值无无物理输入(I_:P)通过该区域立即读取物理输入支持无过程映像出(Q)在扫描循环开始时,将输出值写入物理输出无无物理输出(Q_:P)通过该区域立即写物理输出支持无位存储器(M)用于存储用户程序的中间运算结果或标志位无支持临时存储器(L)块的临时局部数据,只能供块内部使用,只可以通过符合方式来访问无无数据块(DB)数据存储器与FB的参数存储器无支持

常用系统存储区表5.1.3存储器与地址5.2基本指令S7-1200PLC有9种基本指令,包含:位逻辑运算指令;定时器和计数器指令;比较指令;数学运算指令;移动指令;转换指令;程序控制指令;逻辑运算指令;移位和循环移位指令;5.2.1位逻辑运算指令

位逻辑运算指令包含:触点和线圈等基本元素指令、置位和复位指令、上升沿和下降沿指令。位逻辑运算指令中如果有操作数,则为BOOL型,操作数的编址范围可以是:I、I_:P、Q、Q_:P、M、L、DB。1、触点和线圈等基本元素指令

触点和线圈等基本元素指令包括触点指令、NOT逻辑反相器指令、输出线圈指令,主要是与位相关的输入/输出及触点的简单连接。5.2.1位逻辑运算指令(1)触点指令在梯形图中,每个从左母线开始的单一逻辑行、每个程序块(逻辑梯级)的开始、指令盒的输入端都必须使用触点指令。触点有常开触点和常闭触点两种,可将触点相互连接并创建用户自己的组合逻辑。LAD触点分配位IN为布尔型,IN值赋“1”时,常开触点闭合(ON),常闭触点断开(OFF);IN值赋“0”时,常开触点断开(OFF),常闭触点闭合(ON)。常开触点常闭触点所谓“常开”触点或“常闭”触点,是指IN=0时,触点所处的通断状态。5.2.1位逻辑运算指令

触点串联方式连接,创建AND逻辑程序段;触点并联方式连接,创建OR逻辑程序段。

如果用户指定的输入位使用存储器标识符I或Q,则从过程映像寄存器中读取位值。控制过程中的物理触点信号会连接到PLC上的I端子,CPU周期的扫描已连接的输入信号并持续更新过程映像输入寄存器中的相应状态值。5.2.1位逻辑运算指令

通过在I偏移量后追加“:P”,可执行立即读取物理输入(例如,%I0.0:P)。对于立即读取,直接从物理输入读取位数据值,而非从过程映像输入寄存器中读取。立即读取不会更新过程映像输入寄存器的内容(要等到下个周期采用阶段才能够更新其内容)。IEC61131-3规定地址前需要添加%,以表示与变量名的区别5.2.1位逻辑运算指令(2)NOT逻辑反相器指令NOT逻辑反相器指令可对输入的逻辑运算结果(RLO)进行取反。LAD的NOT触点能取反能流输入的逻辑状态。输入为“1”则输出为“0”,反之输入为“0”则输出为“1”。5.2.1位逻辑运算指令(3)输出线圈指令输出线圈有赋值线圈和赋值取反线圈两种,可向输出位OUT写入值,OUT数据类型为布尔型。

如果有能流通过输出线圈,则赋值线圈输出位OUT设置为“1”,赋值取反线圈输出位OUT设置为“0”;如果没有能流通过输出线圈,则赋值线圈输出位OUT设置为“0”,赋值取反线圈输出位OUT设置为“1”。赋值线圈指令赋值取反线圈指令5.2.1位逻辑运算指令(3)输出线圈指令如果指定的输出线圈输出位OUT使用存储器标识符Q,则CPU接通或断开输出映像寄存器中的输出位,同时将指定的位设置为等于能流状态。控制执行器的输出信号连接到S7-1200的Q端子。

通过在Q偏移量后加上“:P”,可指定立即写入物理输出(例如,%Q3.4:P)。对于立即写入,将位数据值写入输出映像输出(输出映像寄存器被更新,这点有别于立即读指令)并直接写入物理输出。5.2.1位逻辑……触点和线圈等基本元素指令LAD编程实例,以及对应的时序图。5.2.1位逻辑运算指令2、置位和复位指令(该类指令具有“记忆”性)(1)S和R:置位和复位线圈指令置位和复位线圈指令分配位OUT数据类型为布尔型。

当线圈输入的逻辑运算结果(RLO)为“1”时,才执行S和R指令,S指令参数OUT的数据值设置为1,R指令参数OUT的数据值设置为0。当线圈输入的逻辑运算结果(RLO)为“0”时,不执行S和R指令。置位线圈指令复位线圈指令5.2.1位逻辑运算指令置位保持(记忆)复位保持(记忆)5.2.1位逻辑运算指令(2)SET_BF和RESET_BF:置位和复位位域指令置位和复位位域指令分配位OUT的数据类型为布尔型,用于指定置位或复位位域起始元素;分配位n的数据类型为无符号整型,赋值为常量,用于指定要置位或复位的位数。当指令输入的逻辑运算结果(RLO)为“1”时,执行SET_BF和RESET_BF指令;执行SET_BF时,置位从OUT开始的n位数据;执行RESET_BF时,复位从OUT开始的n位数据。当指令输入的逻辑运算结果(RLO)为“0”时,不执行指令。置位位域指令复位位域指令

SET_BF和RESET_BF指令必须是梯形图分支中最右端的指令。SET_BF和RESET_BF指令梯形图(LAD)编程实例如图5-4所示。5.2.1位逻辑运算指令图5-4SET_BF和RESET_BF指令LAD编程实例分支新母线M0.0~M0.3四位置“1”M1.4~M1.7四位置“0”5.2.1位逻辑运算指令(3)RS和SR:置位优先和复位优先指令

RS和SR指令分配位S和S1为置位输入,1表示优先;分配位R和R1为复位输入,1表示优先;分配位INOUT为待置位或复位的数据;分配位Q遵循INOUT位的状态。分配位S、S1、R、R1、INOUT和Q的数据类型都为布尔型。RS置位优先指令SR复位优先指令5.2.1位逻辑运算指令

RS指令如果S1和R输入都为“1”,则INOUT的值置位;SR指令如果S和R1输入都为“1”,则INOUT的值复位。INOUT的当前信号状态被传送到Q,并可在Q处进行查询。RS和SR指令的输入/输出变化见表。指令S1RINOUTRS00先前状态010101111指令SR1INOUTSR00先前状态010101110表5-6RS和SR指令输入输出变化5.2.1位逻辑运算指令

RS和SR指令LAD编程实例。图5-5RS和SR指令LAD编程实例5.2.1位逻辑运算指令3、上升沿和下降沿指令上升沿和下降沿指令包含:P和N触点指令、P和N线圈指令、P_TRIG和N_TRIG功能框指令、R_TRIG和F_TRIG功能框指令。(1)P和N触点指令:扫描IN的上升沿和下降沿

P和N触点指令分配位IN为指令要扫描的信号,数据类型为布尔型;分配位M_BIT保存上次扫描的IN的信号状态,数据类型为布尔型。P触点指令N触点指令5.2.1位逻辑运算指令

执行指令时,P和N触点指令比较IN的当前信号状态与保存在操作数M_BIT中的上一次扫描的信号状态。

检测到操作数IN的上升沿时,P触点指令的信号状态将在一个程序周期内保持置位为“1”;检测到操作数IN的下降沿时,N触点指令的信号状态将在一个程序周期内保持置位为“1”;在其他任何情况下,P和N触点指令的信号状态均为“0”。图5-6P和N触点指令LAD编程实例一个周期一个周期举例:设计故障信息显示电路,从故障信号I0.0的上升沿开始,Q0.7控制的指示灯以1Hz的频率闪烁。操作人员按复位按钮I0.1后,如果故障已经消失,则指示灯灭,如果没有消失,则指示灯转为常亮,直至故障消失。

本控制功能的程序、时序图如右图所示,其中M0.5为系统特殊寄存器标志位,可以在该位设置提供1s、占空比50%的时钟脉冲。5.2.1位逻辑运算指令5.2.1位逻辑运算指令(2)P和N线圈指令:在信号上升沿和下降沿置位操作数

P和N线圈指令在扫描到线圈输入信号的上升沿或下降沿时,将分配位OUT在一个程序周期内置位为“1”。分配位OUT数据类型为布尔型;分配位M_BIT保存上次查询的线圈输入信号状态,数据类型为布尔型。

执行指令时,P和N线圈指令将比较当前线圈输入信号状态与保存在操作数M_BIT中的上一次查询的信号状态。P线圈指令N线圈指令5.2.1位逻辑运算指令

检测到线圈输入信号状态的上升沿时,P线圈指令将OUT在一个程序周期内置位为“1”;检测到线圈输入信号状态的下降沿时,N线圈指令将OUT在一个程序周期内置位为“1”;在其他任何情况下,参数OUT的信号状态均为“0”。

P和N线圈的能流输入状态通过线圈后变为能流输出状态。P和N线圈可以放置在程序段中的任何位置。图5-7P和N线圈指令LAD编程实例5.2.1位逻辑运算指令(3)P_TRIG和N_TRIG功能框指令

P_TRIG和N_TRIG功能框指令分配位CLK为指令要扫描的信号,数据类型为布尔型;分配位M_BIT保存上次扫描的CLK的信号状态,数据类型为布尔型;Q为指令边沿检测的结果,数据类型为布尔型。

执行指令时,P_TRIG和N_TRIG指令比较CLK输入的RLO当前状态与保存在操作数M_BIT中上一次查询的信号状态。P_TRIG功能框指令N_TRIG功能框指令5.2.1位逻辑运算指令

检测到CLK输入的RLO上升沿时,P_TRIG指令的Q将在一个程序周期内置位为“1”;检测到CLK输入的RLO下降沿时,N_TRIG指令的Q将在一个程序周期内置位为“1”;在其他任何情况下,输出Q的信号状态均为“0”。

在LAD编程中,P_TRIG和N_TRIG指令不能放置在程序段的开头或结尾。图5-8P_TRIG和N_TRIG指令LAD编程实例P触点、P线圈指令和N触点、N线圈指令针对的是触点和线圈,而P_TRIG和N_TRIG功能框指令用于能流的检测。5.2.1位逻辑运算指令(4)R_TRIG和F_TRIG功能框指令

R_TRIG和F_TRIG功能框指令(是一种函数),分配位CLK为指令要扫描的信号,数据类型为布尔型;Q为指令边沿检测的结果,数据类型为布尔型;指令调用时,分配的背景数据块DB可存储CLK输入的前一状态(有别于P_TRIG和N_TRIG功能框指令用M_BIT)。R_TRIG功能框指令F_TRIG功能框指令5.2.1位逻辑运算指令

使能输入EN为“1”时,执行R_TRIG和F_TRIG指令。执行指令时,R_TRIG和F_TRIG指令比较参数CLK输入的当前状态与保存在背景数据块中上一次查询的信号状态。

检测到参数CLK输入信号上升沿时,R_TRIG指令的输出Q将在一个程序周期内置位为“1”;检测到参数CLK输入信号下降沿时,F_TRIG指令的输出Q将在一个程序周期内置位为“1”;在其他任何情况下,输出Q的信号状态均为“0”。在LAD编程中,R_TRIG和F_TRIG指令不能放置在程序段的开头或结尾。图5-9R_TRIG指令LAD编程实例5.2.2定时器和计数器指令1、定时器指令(1)TP指令(脉冲型定时器)

脉冲型定时器可生成具有预设宽度时间的脉冲,指令标识符为TP。其中,IN表示控制信息输入,0为禁用定时器,1为启用定时器;PT表示预设时间的输入;Q表示定时器的输出状态;ET表示定时器的当前值。5.2.2定时器和计数器指令

PT和ET的值以表示毫秒时间的有符号双精度整数形式存储在存储器中。Time数据使用T#标识符,以简单时间单元(T#200ms)或复合时间单元(如T#2s_200ms)的形式输入,见表5-7。

在定时器指令中,无法使用表5-7中Time数据类型的负数范围,负的PT值在定时器指令执行时被设置为0。ET始终为正值。数据类型大小有效数值范围Time32位,以DInt数据的形式存储T#-24d_20h_31m_23s_648ms到T#24d_20h_31m_23s_647ms;以-2147483648ms到+2147483647ms的形式存储;表5-7TIME数据类型的大小和范围5.2.2定时器和计数器指令

PT指令执行时的时序图。

该指令常用于生成固定宽带的脉冲。在使能端IN的状态从OFF变为ON后,无论后续使能端的状态如何变化,都将输出Q置位由PT指定的一段时间。图5-10TP指令执行时的时序图当前值ET达到预设值PT后,不再增加。当前值ET达到预设值且IN为OFF时,ET复位清零。初始状态5.2.2定时器和计数器指令

PT指令实例。当I0.5接通为ON时,Q0.4的状态为ON,5s后,Q0.4的状态变为OFF,在这5s时间内,不管I0.5的状态如何变化,Q0.4的状态始终保持为ON。图5-11TP指令执行程序MD102:32位有符号双精度整数5.2.2定时器和计数器指令(2)TON指令(接通(通电)延时定时器)接通延时定时器在预设的延时过后将输出Q设置为ON,定时器的指令标识符为TON。指令中引脚定义与TP指令引脚定义一致。TON指令执行时的时序图如图所示。图5-12TON指令执行时序图IN为OFF时,ET复位清零。初始状态5.2.2定时器和计数器指令

TON指令实例。当I0.5接通为ON时,执行复位优先指令中的置位功能,使得Q0.4输出为ON,当Q0.4输出为ON时,启动接通延时定时器TON,使该定时器进行延时,延时10s后,定时器的输出端Q输出为ON状态,此时复位优先指令中的复位端信号为ON,执行复位功能,Q0.4输出为OFF。图5-13TON指令执行程序5.2.2定时器和计数器指令(3)TOF指令(关断延时定时器)关断延时定时器在预设的延时过后将输出Q重置为OFF,定时器的指令标识符为TOF。指令中引脚定义与TP/TON指令引脚定义一致。TOF指令执行时的时序图如图所示。图5-14TP指令执行时序图预启动预启动启动启动启动初始状态5.2.2定时器和计数器指令TOF指令实例:如图5-15说明了该指令的工作原理,根据对TOF定时器的执行过程的分析,可以看出该程序表示的是一个断开延时的过程,当I0.5为ON时,Q0.4输出为ON,当I0.5变为OFF时,Q0.4保持输出10s后自动断开为OFF,即所谓的指令发出后,延时关断控制。图5-15TOF指令执行程序5.2.2定时器和计数器指令(4)TONR指令(保持性接通延时定时器)

保持性接通延时定时器在预设的延时过后将输出Q设置为ON,标识符为TONR。

保持性接通延时定时器的功能与接通延时定时器的功能基本一致,区别在于保持型接通延时定时器在定时器的输入端的状态变为OFF时,定时器的当前值不清零,在使用R输入重置经过的时间之前,会跨越多个定时时段一直累加经过的时间而接通延时定时器;在定时器的输入端的状态变为OFF时,定时器的当前值会自动清零。指令中引脚定义R表示重置定时器,其余与TP/TON指令引脚定义一致。5.2.2定时器和计数器指令TONR指令执行时的时序图如图所示。图5-16TONR指令执行时序图启动暂停累加暂停累加动作重置5.2.2定时器和计数器指令

TONR指令实例:当I0.5接通为ON时,定时器TONR开始执行延时功能,若在定时器的延时时间未到达10S时,I0.5变为OFF,则定时器的当前值保持不变,当I0.5再次变为ON时,定时器在原基础上继续往上计时。当定时器的延时时间到达10S时,Q0.4输出为ON。在任何时候,只要I1.1的状态为ON,则该定时器的当前值都会被清零,输出Q0.4复位。图5-17TONR指令执行程序5.2.2定时器和计数器指令(4)TONR指令(保持性接通延时定时器)TONR指令实例。当I0.5接通为ON时,TONR指令执行延时功能,若在定时器的延时时间未到达10s时,I0.5变为OFF,则定时器的当前值保持不变,当I0.5再次变为ON时,定时器在原基础上继续往上计时。当定时器的延时时间到达10s时,Q0.4输出为ON。在任何时候,只要I1.1的状态为ON,则该定时器的当前值都会被清零,输出Q0.4复位。图5-17TONR指令执行程序5.2.2定时器和计数器指令

使用定时器指令的几点说明·用户程序中可以使用的定时器数仅受CPU存储器容量限制。每个定时器均使用16字节的IEC_Timer数据类型的DB结构来存储功能框或线圈指令顶部指定的定时器数据。STEP7会在插入指令时自动创建该DB。·DB结构包含3个成员(元素),START成员,存放定时器启动时间,启动时有CPU注入;ELAPSED成员,存放延时经过的时间,等于CPU当前时间减去启动时间;Q成员,定时器位状态,对应于定时器输出Q端状态。

注意,经过的时间将停留在预设值上(达到预设值后定时器便不会继续累加经过的时间)。5.2.2定时器和计数器指令

当且仅当满足以下条件时才会执行定时器更新:·已执行定时器指令(TP、TON、TOF或TONR)。·某个指令直接引用DB中定时器结构的“ELAPSED”成员。·某个指令直接引用DB中定时器结构的“Q”成员。·可在同一个扫描周期内多次更新定时器。

每次执行定时器指令(TP、TON、TOF、TONR)和每次将定时器结构的ELAPSED或Q成员用作其它已执行指令的参数时,都会更新定时器。这在需要最新时间数据(本质上是立即读取定时器)时会是一项优点。但是,如果希望在整个程序扫描周期内保持一致的值,请使用定时器指令的Q和ET输出中的变量(如图5-17中的Q4.0和MD102)而不是定时器DB结构的ELAPSED和Q成员。5.2.2定时器和计数器指令·自复位定时器适合用于触发需要周期性发生的动作。

通常,将引用定时器位的常闭触点放置在定时器指令前面可创建自复位定时器。该定时器网络通常位于使用该定时器位来触发动作的一个或多个依赖型网络上面。当定时器时间已到(经过的时间达到预设值)时,定时器位将在一个扫描周期内为ON,因而可执行由该定时器位控制的依赖型网络逻辑。

下次执行定时器网络时,常闭触点将为OFF,从而复位定时器并清除定时器位。

下次扫描期间,常闭触点将为ON,因此将重启定时器。特别注意:创建此类自复位定时器时,请勿将定时器DB结构的“Q”成员用作该定时器指令前面常闭触点的参数。而是要使用与该定时器指令的“Q”输出相连的变量。如果访问定时器DB结构的Q成员,将导致定时器更新,且如果因常闭触点而更新定时器,该触点将立即复位该定时器。定时器指令的Q输出将在一个扫描周期内不为ON,并且依赖型网络不会执行。5.2.2定时器和计数器指令2、计数器指令计数器用来累计输入脉冲的次数。计数器是由集成电路构成的,是应用非常广泛的编程元件,可使用计数器指令对内部程序事件和外部过程事件进行计数。

计数器与定时器的结构和使用基本相似,编程时需要输入预设值PV(计数的次数),计数器累计它的脉冲输入端电位上升沿个数,当计数器达到预设值PV时,发出中断请求信号,以便PLC作出相应的处理。

计数器指令有3种:加计数器指令CTU、减计数器指令CTD、加减计数器指令CTUD。5.2.2定时器和计数器指令(1)加计数器指令CTUCU表示加计数的输入信号,PV表示预设计数值,数据类型可为SInt、Int、Dint、USInt、UInt、UDInt。R用来将计数值重置为零(复位),CV表示当前计数值,Q表示计数器的输出参数。CTU指令执行时的时序图如图所示。图5-18CTU指令执行时序图右图:预设值PV=3。CV≥PV时,Q=1;R=1时CV复位(清零)复位5.2.2定时器和计数器指令(2)减计数器指令CTDCD表示减计数的输入信号,LD用来重新装载预设值(预启动且优先),PV、CV、Q与CTU指令引脚定义一致。

CTD指令执行时的时序图如图所示。图5-19CTD指令执行时序图与计数脉冲同时存在,LD优先有效。右图:预设值PV=3。CV=0时,Q=1;LD=1时CV复位(重装)重装首次装载5.2.2定时器和计数器指令(3)加减计数器指令CTUDCU表示加计数的输入信号,CD表示减计数的输入信号,R用来将计数值重置为零,LD用来重新装载预设值,QU、QD表示计数器的输出参数,PV、CV与CTU指令引脚定义一致。CTUD指令执行时的时序图如图所示。图5-20CTUD指令执行时序图右图:预设PV=4。CV≥PV时QU=1,QD=0;CV=0时QU=0,QD=1重装置零5.2.2定时器和计数器指令

计数器应用举例:设计一个包装用传输带,按下启动按钮启动,每传送100件物品,传送带自动停止;然后再按下启动按钮,进行下一轮传送。

I0.0接常开启动按钮,I0.1接光电计数传感器,Q0.0控制传送带电机启闭。安装在传输带上驱动电机Q0.0=0,传送带不动,则I0.1无效。5.2.3比较指令

比较指令包含:比较值指令、IN_RANGE和OUT_RANGE功能框指令、OK和NOT_OK指令、VARIANT指针比较指令。1、比较值指令

比较值指令用来比较数据类型相同的IN1和IN2的大小。如果满足比较条件,则比较指令返回逻辑运算结果(RLO)“1”;如果不满足比较条件,则比较指令返回“0”。5.2.3比较指令

比较值指令支持多种比较类型,见表。

IN1和IN2的数据类型可为:Byte,Word,DWord,SInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,String,WString,Char,Time,Date,常数等。比较类型满足以下条件时结果为真==IN1等于IN2<>IN1不等于IN2>=IN1大于等于IN2<=IN1小于等于IN2>IN1大于IN2<IN1小于IN2表5-8比较值指令比较类型说明5.2.3比较指令2、IN_RANGE(范围内值)和OUT_RANGE(范围外值)功能框指令:

IN_RANGE和OUT_RANGE指令将输入VAL与比较下限MIN和比较上限MAX进行比较。VAL与MIN和MAX的数据类型可为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、常数。在范围内?在范围外?5.2.3比较指令

功能框输入信号状态为1时,执行IN_RANGE和OUT_RANGE指令。如果输入VAL的值满足MIN<=VAL<=MAX,IN_RANGE功能框输出信号为“1”,OUT_RANGE功能框输出信号为“0”;否则,IN_RANGE功能框输出信号为“0”,OUT_RANGE功能框输出信号为“1”(即,满足以下条件时OUT_RANGE比较结果为真:VAL<MIN或VAL>MAX)。5.2.3比较指令3、OK和NOT_OK指令:检查有效性和检查无效性指令

OK和NOT_OK指令用于检查输入参数IN是否为符合IEEE754规范(IEEE二进制浮点数算术标准)的有效实数。

如果该LAD触点为真,则激活该触点并传递能流。如果输入参数IN为有效实数,则OK指令传递能流;如果输入参数IN不是有效实数,则NOT_OK指令传递能流。5.2.4数学运算指令1、加法运算指令(ADD)

使能输入EN有效时,将IN1和IN2相加,产生结果OUT。

IN1、IN2的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、常数。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。

单击“???”并从下拉菜单中选择数据类型参数,IN1、IN2和OUT的数据类型必须相同。特别说明:

要添加ADD或MUL输入,请单击“创建”(Create)图标,或在其中一个现有IN参数的输入短线处单击右键,并选择“插入输入”(Insertinput)命令。5.2.4数学运算指令启用加法指令(EN=1)后,指令会对输入值(IN1和IN2)执行相加运算并将结果存储在输出参数(OUT)指定的存储器地址中。运算成功完成后,指令会设置ENO=1。

程序实例如图所示:当I0.0输入有效时,执行结果为MB0+MB1→MB2。图5-21加法运算指令执行程序5.2.4数学运算指令2、减法运算指令(SUB)

使能输入EN有效时,将IN1减去IN2,产生结果OUT。

IN1、IN2的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、常数。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。IN1、IN2和OUT的数据类型必须相同。

单击“???”并从下拉菜单中选择数据类型参数,IN1、IN2和OUT的数据类型必须相同。5.2.4数学运算指令启用减法指令(EN=1)后,指令会对输入值(IN1和IN2)执行相减运算并将结果存储在输出参数(OUT)指定的存储器地址中。运算成功完成后,指令会设置ENO=1。

程序实例如图所示:当I0.0输入有效时,执行结果为MB0-MB1→MB2。图5-22减法运算指令执行程序5.2.4数学运算指令3、乘法运算指令(MUL)

使能输入EN有效时,将IN1和IN2相乘,产生结果OUT。

IN1、IN2的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、常数。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。IN1、IN2和OUT的数据类型必须相同。

启用乘法指令(EN=1)后,指令会对输入值(IN1和IN2)执行相乘运算并将结果存储在通过输出参数(OUT)指定的存储器地址中。运算成功完成后,指令会设置ENO=1。5.2.4数学运算指令4、除法运算指令(DIV)

使能输入EN有效时,将IN1除以IN2,产生结果OUT。

IN1、IN2的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、常数。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。IN1、IN2和OUT的数据类型必须相同。

启用除法指令(EN=1)后,指令会对输入值(IN1和IN2)执行相除运算并将结果存储在通过输出参数(OUT)指定的存储器地址中。运算成功完成后,指令会设置ENO=1。5.2.4数学运算指令5、INC(递增)和DEC(递减)指令

递增、递减指令又称自增、自减指令,是对无符号或有符号整数进行自动增加或减少一个单位的操作指令。IN/OUT的数据类型:SInt、Int、DInt、USInt、UInt、UDInt。

使能输入EN有效时,将IN/OUT值自增或自减,即IN/OUT+1=IN/OUT

IN/OUT-1=IN/OUT

。5.2.4数学运算指令

程序实例如图所示:当I0.0输入有效时,执行结果为MB0+1→MB0。图5-23递增指令执行程序注:使ENO出错(ENO=0)的条件是结果值超出所选数据类型的有效数值范围。例如,以SInt为例:INC(+127)的结果为+128,超出该数据类型的最大值。5.2.4数学运算指令6、数学函数指令

使用浮点指令可编写使用Real或LReal数据类型的数学运算程序。数学函数指令具体说明参见下表。指令标识符指令功能说明SQR平方(IN2=OUT)SQRT平方根(√IN=OUT)LN自然对数(LN(IN)=OUT)EXP自然指数(eIN=OUT),其中底数e=2.71828182845904523536SIN正弦(sin(IN弧度)=OUT)COS余弦(cos(IN弧度)=OUT)TAN正切(tan(IN弧度)=OUT)ASIN反正弦(arcsine(IN)=OUT弧度),其中sin(OUT弧度)=INACOS反余弦(arccos(IN)=OUT弧度),其中cos(OUT弧度)=INATAN反正切(arctan(IN)=OUT弧度),其中tan(OUT弧度)=INFRAC分数(浮点数IN的小数部分=OUT)EXPT一般指数(IN1IN2=OUT)数学函数指令示例5.2.5移动指令1、MOVE指令:移动指令

使能输入EN为“1”时,执行MOVE指令,将存储在IN指定的源地址的单个数据元素复制到OUT1指定的单个或多个目标地址(可通过指令框添加多个目标地址),要求IN和OUT1的数据类型一致。

IN和OUT1支持的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、Byte、Word、DWord、Char、WChar、Array、Struct、DTL、Time、Date、TOD等。5.2.5移动指令2、MOVE_BLK指令和UMOVE_BLK指令:可中断块移动和不可中断块移动指令

MOVE_BLK和UMOVE_BLK指令可将数据块或临时存储区中一个存储区的数据元素块复制到到另一个存储区中,要求源范围和目标范围的数据类型相同。MOVE_BLK指令可中断移动,UMOVE_BLK指令不可中断移动。

IN指定源起始地址,OUT指定目标起始地址,COUNT用于指定将移动到目标范围中的元素个数。通过IN中元素的宽度来定义元素待移动的宽度。5.2.5移动指令

IN和OUT支持的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、Byte、Word、DWord、Time、Date、TOD、WChar。COUNT的数据类型为UInt或常数。

使能输入EN为“1”时,执行MOVE_BLK和UMOVE_BLK指令。ENO为“1”,表示成功复制了全部元素;ENO为“0”,表示源(IN)范围或目标(OUT)范围超出可用存储区。MOVE_BLK和UMOVE_BLK指令在处理中断的方式上有所不同:●在MOVE_BLK执行期间排队并处理中断事件。在中断OB子程序中未使用移动目标地址的数据时,或者虽然使用了该数据,但目标数据不必一致时,使用MOVE_BLK指令。如果MOVE_BLK操作被中断,则最后移动的一个数据元素在目标地址中是完整并且一致的。MOVE_BLK操作会在中断OB执行完成后继续执行。●在UMOVE_BLK完成执行前排队但不处理中断事件。如果在执行中断OB子程序前移动操作必须完成且目标数据必须一致,则使用UMOVE_BLK指令。5.2.5移动指令3、FILL_BLK和UFILL_BLK指令:可中断填充和不可中断填充指令

使能输入EN为“1”时,执行填充指令,输入IN的数据会从输出OUT指定的目标起始地址开始填充目标存储区域,输入COUNT指定填充范围。FILL_BLK和UFILL_BLK指令在处理中断的方式上有所不同:●在FILL_BLK执行期间排队并处理中断事件。在中断OB子程序中未使用移动目标地址的数据时,或者虽然使用了该数据,但目标数据不必一致时,使用FILL_BLK指令。●在UFILL_BLK完成执行前排队但不处理中断事件。如果在执行中断OB子程序前移动操作必须完成且目标数据必须一致,则使用UFILL_BLK指令。5.2.5移动指令

IN和OUT支持的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal、Byte、Word、DWord、Time、Date、TOD、WChar。IN中数据可为常数。OUT指定的目标存储区域只能在数据块(DB)或临时存储器(L)中。

COUNT的数据类型为UInt或常数。

ENO为“1”,表示指令执行无错误,参数IN中元素成功复制到全部的目标中;ENO为“0”,表示目标(OUT)范围超出可用存储区,仅复制部分元素。5.2.5移动指令4、SWAP交换指令

SWAP交换指令支持Word和DWord数据类型。

使能输入EN为“1”时,执行SWAP指令,更改输入IN中Word和DWord类型数据的顺序,并在输出OUT中查询结果。

用于反转二字节和四字节数据元素的字节顺序。不改变每个字节中的位顺序。执行SWAP指令之后,ENO始终为TRUE。5.2.5移动指令

示例2:SWAP指令交换数据类型为DWord的操作数。图5-24SWAP指令交换数据类型为DWORD的操作数5.2.5移动指令5、Variant指针移动指令

Variant指针移动指令包含3条:

VariantGet读出Variant变量值指令。读取SRC(源)中Variant指针所指向的变量,并将其写入DST(目的)的变量中。

VariantPut写入Variant变量值指令。将SRC参数中变量的值写入DST中Variant指针所指向的变量中。

CountOfElements获取Array元素数量指令。查询IN中Variant指针指向的变量所含有的数组元素数目,并将结果保存在RET_VAL中。

Variant指针移动指令中,Variant指针指向的变量在临时存储器(L)中声明。5.2.6转换指令转换指令是对操作数的类型进行转换,包括数据的类型转换、码的类型转换以及数据和码之间的类型转换等。1、CONV(转换值)指令使能输入EN有效时,将数据元素IN从一种数据类型转换为另一种数据类型OUT。IN和OUT的数据类型可以为:SInt、USInt、Int、UInt、DInt、UDInt、Real、LReal、BCD16、BCD32、Char、WChar。

所占存储器小的数据类型向大的数据类型转换时,值被传送到目标数据类型的最低有效字节;所占存储器大的数据类型向小的数据类型转换时,值的低字节被传送到目标数据类型。5.2.6转换指令

选择(转换源)数据类型之后,(转换目标)下拉列表中将显示可能的转换项列表。与BCD16进行转换仅限于Int(16位)数据类型。与BCD32进行转换仅限于DInt(32位)数据类型。

程序实例如图所示:当I0.0输入有效时,执行结果为将MD6中的双整数型数据转换为整数型存储在MW0中。如MD6中数据为16#0001_2710,执行结果MW0中数据为16#2710。图5-25转换值指令执行程序5.2.6转换指令2、实数与整数之间的转换指令使能输入EN有效时,将实数转换为整数,包含两种指令:ROUND指令(取整)和TRUNC指令(截尾取整)。

IN的数据类型为:Real、LReal。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。5.2.6转换指令(1)ROUND指令(小数部分四舍五入取整)使能输入EN有效时,将实数的小数部分舍入为最接近的整数值,如果该数值刚好是两个连续整数的一半(如10.5),则将其取整为偶数。

根据转换规则,IN为实数,OUT为整数。针对不同的IN取值,可得出执行结果OUT取值见表。IN10.210.610.511.5OUT10111012表5-9取整指令执行结果5.2.6转换指令(2)TRUNC指令(小数部分截尾取整)使能输入EN有效时,将实数转换为整数,小数部分被取整为0。

根据转换规则,IN为实数,OUT为整数。针对不同的IN取值,可得出执行结果OUT取值见表。IN10.210.610.511.5OUT10101011表5-10截尾取整指令执行结果5.2.6转换指令3、编码、解码指令(1)ENCO指令(编码)使能输入EN有效时,将输入数据IN中值为1的最低有效位的位号编码成二进制数,输出到OUT所指定的字节单元。即用一个字节来对一个数据中的一位有效位进行编码。

IN的数据类型为:Byte、Word、DWord。OUT的数据类型为:Int。5.2.6转换指令根据编码规则,如果IN为Byte、Word、DWord则OUT为Int。针对不同的IN取值,可得出执行结果OUT取值见表。IN16#0116#0216#0316#0400000001000000100000001100000100OUT16#0016#0116#0016#020000000000000000000000000000000100000000000000000000000000000010表5-11编码指令执行结果问题:如果IN输入的数据是00000000,则指令执行过程和结果将会如何?结论:如果IN输入的数据是00000000,则指令执行的结果是OUT为0000000000000000,将

ENO设置为FALSE。5.2.6转换指令(2)DECO指令(解码)使能输入EN有效时,将二进制数解码成位序列,DECO指令通过将参数OUT中的相应位置为1(其他所有位设置为0)解码参数IN中的二进制数。即对输入的编码进行译码来选择一个数据中的一位。

IN的数据类型为:UInt。OUT的数据类型为:Byte、Word、DWord,默认为DWord。5.2.6转换指令根据译码规则,如果IN为UInt,则OUT为Byte、Word、DWord。针对不同的IN取值,可得出执行结果OUT取值见表。10000表5-12译码指令执行结果IN16#0016#0116#0216#0400000000000000010000001100000100OUT16#0116#0216#0416#1000000000000000010000000000000010000000000000010000000000000100005.2.6转换指令4、浮点数向上取整和浮点数向下取整指令(1)CEIL指令(浮点数向上取整)使能输入EN有效时,将实数(Real或LReal)转换为大于或等于所选实数的最小整数(小数部分四舍五入)。

IN的数据类型为:Real、LReal。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。5.2.6转换指令(2)FLOOR指令(浮点数向下取整)使能输入EN有效时,将实数(Real或LReal)转换为小于或等于所选实数的最大整数(小数部分截尾)。

IN的数据类型为:Real,LReal。OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Real、LReal。5.2.7程序控制指令

程序控制用于改变程序执行的顺序。程序控制类指令使程序结构灵活,合理使用该指令可以优化程序结构,增强程序功能。程序控制指令包含:跳转和标签指令、JMP_LIST跳转列表指令、SWITCH跳转分配器指令、RET返回指令等。5.2.7程序控制指令1、跳转和标签指令跳转指令包含:JMP指令和JMPN指令,指令上方的占位符指定该跳转标签的标识符。可使用JMP和JMPN指令中断程序的顺序执行,并从由跳转标签(Lable)标识的目标程序段继续执行。

Label_name是跳转指令及相应跳转标签的标识符,跳转标签的标识符在程序块中只能分配一次。JMP指令JMPN指令跳转标签5.2.7程序控制指令跳转指令可以往前跳,也可以往后跳,但只能在同一个代码块中跳转,但不能从一个代码块跳转到另一个代码块,即跳转指令与指定的跳转标签必须位于同一代码块中。可以从同一代码块中的多个位置跳转到同一个跳转标签。JMP指令:如果能流通过JMP线圈,则程序从指定跳转标签后的第一条指令继续执行。JMPN指令:如果没有能流通过JMPN线圈,则程序从指定跳转标签后的第一条指令继续执行。

跳转标签:JMP或JMPN跳转指令的目标标签。5.2.7程序控制指令2、JMP_LIST(跳转列表)指令JMP_LIST指令用作程序跳转分配器,控制程序段的执行。使能输入EN为“1”时执行指令。

根据输入K(UInt数据类型)的值跳转到输出DESTx指定的跳转标签(Label),程序从该跳转标签(Label)标识的目标程序段继续执行。

可在JMP_LIST指令框中增加输出DESTx的数量,S7-1200PLC最多可以声明32个输出。K值对应跳转标签号,如果K输入的值超过(标签数-1),则不进行跳转,继续处理下一程序段5.2.7程序控制指令3、SWITCH(跳转分配器)指令SWITCH指令用作程序跳转分配器,控制程序段的执行。使能输入EN为“1”时执行指令。

根据输入K(UInt数据类型)的值将与分配给各个比较输入的值进行比较,跳转到第一个比较结果为TRUE的比较值对应的输出参数DESTx指定的跳转标签,程序从该跳转标签(Label)标识的目标程序段继续执行。如果比较结果都不为TRUE,则跳转到分配给输出参数ELSE的跳转标签。程序从目标跳转标签后面的程序指令继续执行。

比较输入类型可以选择为:

==、<>、<、<=、>、>=。5.2.7程序控制指令4、RET(返回)指令RET指令用于终止当前块的执行。当且仅当有能流通过RET线圈时,当前块的程序执行将在该点终止,并且不执行RET指令以后的指令。

如果当前块为组织块(OB),则返回值“Return_Value”将被忽略;如果当前块为函数(FC)或函数块(FB),则返回值“Return_Value”的值作为被调用功能框的ENO值传回调用例程。

不要求用户将RET指令用作块中的最后一个指令,一个块中可以有多个RET指令。5.2.8字逻辑运算指令逻辑运算是对无符号数进行的逻辑处理,逻辑运算指令主要包括逻辑与、逻辑或、逻辑异或和取反等。1、逻辑与运算指令(AND)使能输入EN有效时,将两个IN1、IN2的逻辑数按位求与,得到输出结果OUT。

IN的数据类型为:Byte、Word、Dword;OUT的数据类型为:Byte、Word、DWord。指令中所选数据类型将IN1、IN2和OUT设置为相同的数据类型。

单击“???”可从下拉菜单中选择数据类型。5.2.8逻辑运算指令程序实例如图所示:当I0.0输入有效时,将MB0、MB1中的字节按位求与,将逻辑结果存入MB1中。

根据逻辑与运算指令规则,针对不同的IN1、IN2取值,可得出执行逻辑结果OUT,见表。MB016#0016#0116#0216#03MB116#5516#5516#5516#55MB216#0016#0116#0016#01图5-26逻辑与运算指令执行程序表5-13取整指令执行结果16#55010101015.2.8逻辑运算指令2、逻辑或运算指令(OR)使能输入EN有效时,将两个IN1、IN2的逻辑数按位求或,得到输出结果OUT。

IN的数据类型为:Byte、Word、Dword;OUT的数据类型为:Byte、Word、DWord。指令中所选数据类型将IN1、IN2和OUT设置为相同的数据类型。单击“???”可从下拉菜单中选择数据类型。5.2.8逻辑运算指令3、逻辑异或运算指令(XOR)使能输入EN有效时,将两个IN1、IN2的逻辑数按位求异或,得到输出结果OUT。

IN的数据类型为:Byte、Word、Dword;OUT的数据类型为:Byte、Word、DWord。指令中所选数据类型将IN1、IN2和OUT设置为相同的数据类型。单击“???”可从下拉菜单中选择数据类型。5.2.8逻辑运算指令4、求反码指令(INV)使能输入EN有效时,计算参数IN的二进制反码。通过对参数IN各位的值取反来计算反码(将每个0变为1,每个1变为0),得到输出结果OUT。

IN的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Byte、Word、DWord;

OUT的数据类型为:SInt、Int、DInt、USInt、UInt、UDInt、Byte、Word、DWord。

单击“???”可从下拉菜单中选择数据类型。5.2.9移位和循环移位指令1、移位指令移位指令包含SHR右移指令和SHL左移指令。

IN中变量为待移位的数据,OUT中变量保存移位结果。IN和OUT的数据类型为:位字符串(Byte、Word、Dword)和整型(SInt、Int、DInt、USInt、UInt、UDInt)。IN可以为常数。N用于指定移位位数,数据类型为:USInt、UInt、UDInt、常数。

使能输入EN为“1”时,执行移位指令;移位指令执行后,ENO保持为“1”。5.2.9移位和循环移位指令

SHL指令将IN中的变量按位向左移动参数N指定的位数,并用0填充移位操作清空的位置,将结果保存在OUT指定的变量中。

SHR指令将IN中的变量按位向右移动参数N指定的位数,将结果保存在OU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论