版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章 可编程序控制器可编程序控制器的功能指令的功能指令 6.1 6.1 S7-200S7-200的指令规约与数据类型检查的指令规约与数据类型检查 6.2 6.2 程序控制指令程序控制指令 6.3 6.3 局部变量表与子程序局部变量表与子程序 6.4 6.4 数据处理指令数据处理指令 6.5 6.5 数学运算指令数学运算指令 6.6 6.6 中断程序与中断指令中断程序与中断指令 6.7 6.7 高速计数器与高速脉冲输出指令高速计数器与高速脉冲输出指令 返回返回 6.1 6.1 S7-200S7-200的指令规约的指令规约 6.1.1 使能输入与使能输出使能输入与使能输出 6.1.2 梯形图
2、中的网络与指令梯形图中的网络与指令 6.1.3 其他规约其他规约 返回返回后一页后一页前一页前一页1EN与与ENO 在梯形图中,用方框表示功能指令,在在梯形图中,用方框表示功能指令,在SIMATIC指令系统中将这些方框称为指令系统中将这些方框称为“盒子盒子”(Box),在,在IECll31-3指令系统中将它们称为指令系统中将它们称为“功能块功能块”。功能。功能块的输入端均在左边,输出端均在右边块的输入端均在左边,输出端均在右边(见图见图6-1)。梯形图中有一条提供梯形图中有一条提供“能流能流”的左侧垂直母线,图的左侧垂直母线,图中中I2.4的常开触点接通时,能流流到功能块的常开触点接通时,能流
3、流到功能块DEC_B的数字量输入端的数字量输入端EN(Enable IN,使能输入,使能输入),该输入,该输入端有能流时,功能指令端有能流时,功能指令DEC_B才能被执行。才能被执行。 返回返回后一页后一页前一页前一页 如果功能块在如果功能块在EN处有能流而且执行时无错误,则处有能流而且执行时无错误,则ENO(Enable OUT,使能输出,使能输出)将能流传递给下一元将能流传递给下一元件。如果执行过程中有错误,能流在出现错误的功件。如果执行过程中有错误,能流在出现错误的功能块终止。能块终止。 ENO可作为下一功能块的可作为下一功能块的EN输入,即几个功能输入,即几个功能块可以串联在一行中块可
4、以串联在一行中(见图见图6-1),只有前一功能块被,只有前一功能块被正确执行,后一功能块才能被执行。正确执行,后一功能块才能被执行。EN和和ENO的的操作数均为能流,数据类型为操作数均为能流,数据类型为BOOL(布尔布尔)型。型。 图中的功能块图中的功能块DEC_B表示将字节变量表示将字节变量VB0的值减的值减1,并将结果送回并将结果送回VB0,该功能块的输入和输出可以是,该功能块的输入和输出可以是不同的变量。不同的变量。 返回返回后一页后一页前一页前一页语句表语句表(STL)中没有中没有EN输入,对于要执行的输入,对于要执行的STL指指令,栈顶的值必须为令,栈顶的值必须为1,指令才能执行。与
5、梯形图,指令才能执行。与梯形图中的中的ENO相对应,语句表设置了相对应,语句表设置了ENO位,可用位,可用AENO(And ENO)指令存取指令存取ENO位,位,AENO用来产用来产生与功能块的生与功能块的ENO相同的效果。相同的效果。图图6-1中的梯形图对应的语句表为:中的梯形图对应的语句表为:LD I2.4DEC_B VB0AENOMOV_B VB0,VB2 返回返回后一页后一页前一页前一页S7-200系统手册的指令部分给出了指令的描述,使系统手册的指令部分给出了指令的描述,使 ENO=0的错误条件、受影响的的错误条件、受影响的SM 位、该指令支持位、该指令支持的的CPU型号和操作数表,该
6、表中给出了每个操作数型号和操作数表,该表中给出了每个操作数允许的存储器区、寻址方和数据类型。允许的存储器区、寻址方和数据类型。2网络网络 在梯形图中,程序被划分为称为网络在梯形图中,程序被划分为称为网络(Network)的的独立的段,网络由触点、线圈和功能块组成。在梯独立的段,网络由触点、线圈和功能块组成。在梯形图中给出了网络的编号,如网络形图中给出了网络的编号,如网络2。能流只能从左。能流只能从左往右流动,网络中不能有断路、开路和反方向的能往右流动,网络中不能有断路、开路和反方向的能流。允许以网络为单位给梯形图程序加注释。流。允许以网络为单位给梯形图程序加注释。返回返回 STL程序不使用网络
7、,如果用程序不使用网络,如果用Network这个关键词对这个关键词对程序分段,可以将程序分段,可以将STL程序转换为梯形图程序。程序转换为梯形图程序。返回返回 返回返回3.指令的输入与输出指令的输入与输出必须有能流输入才能执行的功能块或线圈指令称为必须有能流输入才能执行的功能块或线圈指令称为条件输入指令,它们不能直接连接到左侧母线上,条件输入指令,它们不能直接连接到左侧母线上,如果需要无条件执行这些指令,可以用接在左侧母如果需要无条件执行这些指令,可以用接在左侧母线上的线上的SM0.0(该位始终为(该位始终为1)的常开触点来驱动它)的常开触点来驱动它们。们。有的线圈或功能块的执行与能流无关,如
8、标号指令有的线圈或功能块的执行与能流无关,如标号指令LBL和顺序控制指令和顺序控制指令SCR等,称为无条件输入指令,等,称为无条件输入指令,应将它们直接接在左侧母线上。应将它们直接接在左侧母线上。不能级连的指令块不能级连的指令块ENO没有输出端和能流流出。没有输出端和能流流出。JMP、CRET、LBL、NEXT、SCR和和SCRE等属于等属于这类指令。这类指令。返回返回返回返回 触点比较指令没有能流输入时,输出为触点比较指令没有能流输入时,输出为0,有能流输,有能流输入时,入时, 输出与比较结果有关。输出与比较结果有关。4、其他规约、其他规约SIMATIC程序编辑器中的直接地址由存储器区和地程
9、序编辑器中的直接地址由存储器区和地址组成,如址组成,如I0.0。IEC程序编辑器用程序编辑器用%表示直接地址,表示直接地址,如如%I0.0“INPUT1”为全局符号名,符号为全局符号名,符号“#INPUT1”中的中的“#”号表示该符号是局部变量。号表示该符号是局部变量。梯形图中的规约:梯形图中的规约:“ ”是一个开路符号,或需要能流连接。是一个开路符号,或需要能流连接。返回返回 “ |”表示输出是一个可选的能流,用于指令的级表示输出是一个可选的能流,用于指令的级连。连。符号符号“”表示有一个值或能流可以使用。表示有一个值或能流可以使用。返回返回6.2 6.2 程序控制指令程序控制指令 表表6-
10、11是程序控制指令的列表。下面对各种程序控是程序控制指令的列表。下面对各种程序控制指令分别加以说明。制指令分别加以说明。621 循环指令循环指令 在控制系统中经常遇到需要重复执行若干次同样的在控制系统中经常遇到需要重复执行若干次同样的任务的情况,这时可以使用循环指令。任务的情况,这时可以使用循环指令。名名 称称循环开始循环开始循环结束循环结束指令指令FORNEXT指令表格式指令表格式FOR INDX,INIT,FINALNEXT梯形图格式梯形图格式FOR指令表示循环的开始,指令表示循环的开始,NEXT指令表示循环的结指令表示循环的结束,并将堆栈的栈顶值设为束,并将堆栈的栈顶值设为1。驱动。驱动
11、FOR指令的逻辑条指令的逻辑条件满足时,反复执行件满足时,反复执行FOR与与NEXT之间的指令。在之间的指令。在FOR指令中,需要设置指针或当前循环次数计数器指令中,需要设置指针或当前循环次数计数器(1NDX)、起始值、起始值(1NIT)和结束值和结束值(FINAL)。返回返回后一页后一页前一页前一页假设假设INIT等于等于1,FINAL等于等于10,每次执行,每次执行FOR与与NEXT之间的指令后,之间的指令后,INDX的值加的值加1,并将结果与,并将结果与结束值比较。如果结束值比较。如果INDX大于结束值,则循环终止,大于结束值,则循环终止,FOR与与NEXT之间的指令将被执行之间的指令将
12、被执行10次。如果起始次。如果起始值大于结束值,则不执行循环。值大于结束值,则不执行循环。 指指 令令输入输入/输出输出操作数操作数数据类型数据类型FORINDXVW、IW、QW、MW、SW、SMW、LW、T,C,AC,*VD,*AC,*LDINTINITVW、IW、QW、MW、SW、SMW、LW、T,C,AIW,AC,常数,常数,*VD,*AC,*LDINTFINALVW、IW、QW、MW、SW、SMW、LW、T,C,AIW,AC,常数,常数,*VD,*AC,*LDINT返回返回后一页后一页前一页前一页FOREN ENOINDX INIT FINAL FOREN ENOINDX INIT F
13、INAL 21( NEXT ) ( NEXT ) 返回返回(2)再次启动循环时,它将初始值)再次启动循环时,它将初始值INIT传送到指针传送到指针INDX中。中。 FOR指令必须与指令必须与NEXT指令配套使用。允许循环嵌套,即指令配套使用。允许循环嵌套,即FORNEXT循环在另一个循环在另一个FORNEXT循环之中,循环之中,最多可最多可嵌套嵌套8层层。 下面是使用下面是使用FOR/NEXT循环的注意事项:循环的注意事项:(1)如果启动了)如果启动了FOR/NEXT循环,除非在循环内循环,除非在循环内部修改了结束值,否则循环就一直进行,直到循环部修改了结束值,否则循环就一直进行,直到循环结束
14、。结束。在循环的执行过程中,可以改变循环的参数。在循环的执行过程中,可以改变循环的参数。解读下列梯形图程序功能解读下列梯形图程序功能返回返回6.2.2 跳转与标号指令跳转与标号指令条 件 满 足条 件 满 足 ( 栈 顶 的 值 为栈 顶 的 值 为 1 ) 时 , 跳 转 指 令时 , 跳 转 指 令JMP(Jump)使程序流程转到对应的标号使程序流程转到对应的标号LBL(1abel)处,标号指令用来指示跳转指令的处,标号指令用来指示跳转指令的目的位置。目的位置。JMP与与LBL指令中的操作数指令中的操作数n为常为常数数0255,JMP和对应的和对应的LBL指令必须在同一指令必须在同一程序块
15、中程序块中。名名 称称跳跳 转转标标 号号指令指令JMPLBL指令表格式指令表格式JMP NLBL N梯形图格式梯形图格式(1) JMP和和LBL指令必须成对使用于主程序、子程序或中断程序中。主程序、指令必须成对使用于主程序、子程序或中断程序中。主程序、子程序或中断程序之间不允许相互跳转。若在步进程序中使用跳转指令,则子程序或中断程序之间不允许相互跳转。若在步进程序中使用跳转指令,则必须使必须使JMP和和LBL指令在同一个指令在同一个SCR段中。段中。(2) 多条跳转指令可对应同一标号,但不允许一个跳转指令对应多个相同标号,多条跳转指令可对应同一标号,但不允许一个跳转指令对应多个相同标号,即在
16、程序中不能出现两个相同的标号。即在程序中不能出现两个相同的标号。(3) 执行跳转指令时,跳过的程序段中各元件的状态如下。执行跳转指令时,跳过的程序段中各元件的状态如下。 各输出线圈保持跳转前的状态。各输出线圈保持跳转前的状态。 计数器停止计数,当前值保持跳转之前的计数值。计数器停止计数,当前值保持跳转之前的计数值。 1ms、10ms定时器保持跳转之前的工作状态,原来工作的继续工作,定时器保持跳转之前的工作状态,原来工作的继续工作,到设置值后可以正常动作,当前值要累计到到设置值后可以正常动作,当前值要累计到32767才停止。才停止。100ms定时器在跳定时器在跳转时停止工作,但不会复位,当前值保
17、持不变,跳转结束后若条件允许可继转时停止工作,但不会复位,当前值保持不变,跳转结束后若条件允许可继续计时,但已不能准确计时了。续计时,但已不能准确计时了。(4) 标号指令标号指令LBL一般放置在一般放置在JMP指令之后,以减少程序执行时间。若要放置指令之后,以减少程序执行时间。若要放置在在JMP指令之前,则必须严格控制跳转指令的运行时间,否则会引起运行瓶指令之前,则必须严格控制跳转指令的运行时间,否则会引起运行瓶颈,导致扫描周期过长。颈,导致扫描周期过长。 (1) CRET多用于子程序内部,在条件满足时起结束子程序的作用。多用于子程序内部,在条件满足时起结束子程序的作用。在子程序的最后,编程软
18、件将自动添加子程序无条件结束指令在子程序的最后,编程软件将自动添加子程序无条件结束指令RET。 (2) 子程序可以嵌套运行,即在子程序内部又对另一子程序进行调用。子程序可以嵌套运行,即在子程序内部又对另一子程序进行调用。子程序的嵌套深度最多为子程序的嵌套深度最多为8层。在中断程序中仅能有一次子程序调用。可以层。在中断程序中仅能有一次子程序调用。可以进行子程序自身的递归调用,但使用时要慎重。进行子程序自身的递归调用,但使用时要慎重。 (3) 当一个子程序被调用时,系统自动保存当前的堆栈数据,并把栈顶值当一个子程序被调用时,系统自动保存当前的堆栈数据,并把栈顶值置置1,堆栈中的其他值为,堆栈中的其
19、他值为0,子程序完全占有控制权。子程序执行结束时,通过,子程序完全占有控制权。子程序执行结束时,通过子程序结束指令自动恢复原来的逻辑堆栈值,调用程序重新取得控制权。子程序结束指令自动恢复原来的逻辑堆栈值,调用程序重新取得控制权。 (4) 累加器累加器AC可以在调用程序和被调子程序之间自由传递数据,所以累加可以在调用程序和被调子程序之间自由传递数据,所以累加器的值在子程序调用时既不保存又不恢复。器的值在子程序调用时既不保存又不恢复。 5) 带参数的子程序调用带参数的子程序调用可以带参数调用子程序,这种方式扩大了子程序的使用范围,增加了调用的灵可以带参数调用子程序,这种方式扩大了子程序的使用范围,
20、增加了调用的灵活性。活性。返回返回后一页后一页前一页前一页6.2.3 停止指令停止指令 停止指令停止指令STOP使可编程序控制器从运行模式进使可编程序控制器从运行模式进入停止模式,立即终止程序的执行。如果在中断入停止模式,立即终止程序的执行。如果在中断程序中执行停止指令,中断程序立即终止,并忽程序中执行停止指令,中断程序立即终止,并忽略全部等待执行的中断,继续执行主程序的剩余略全部等待执行的中断,继续执行主程序的剩余部分,并在主程序的结束处,完成从运行方式至部分,并在主程序的结束处,完成从运行方式至停止方式的转换。停止方式的转换。 返回返回后一页后一页前一页前一页6.2.4 监控定时器复位指令
21、监控定时器复位指令 监控定时器监控定时器(Watchdog)又称看门狗,它的定时时又称看门狗,它的定时时间为间为300ms,每次扫描它都被自动复位一次,正常,每次扫描它都被自动复位一次,正常工作时如果扫描周期小于工作时如果扫描周期小于300ms,监控定时器不起,监控定时器不起作用。如果强烈的外部干扰使可编程序控制器偏离作用。如果强烈的外部干扰使可编程序控制器偏离正常的程序执行路线,监控定时器不再被周期性地正常的程序执行路线,监控定时器不再被周期性地复位,定时时间到时,可编程序控制器将停止运行。复位,定时时间到时,可编程序控制器将停止运行。 在以下情况下扫描周期可能大于在以下情况下扫描周期可能大
22、于300ms,监控定,监控定时器会停止执行用户程序:时器会停止执行用户程序:(1)用户程序很长。用户程序很长。(2)出现中断事件时,执行中断程序的时间较长。出现中断事件时,执行中断程序的时间较长。 返回返回(3)循环指令使扫描时间延长。循环指令使扫描时间延长。 为了防止在正常情况下监控定时器动作,可将监为了防止在正常情况下监控定时器动作,可将监控定时器复位控定时器复位(WDR)指令插入到程序中适当的地方,指令插入到程序中适当的地方,使监控定时器复位。如果使监控定时器复位。如果FORNEXT循环程序的循环程序的执行时间可能超过监控定时器的定时时间,可将执行时间可能超过监控定时器的定时时间,可将W
23、DR指令插入到循环程序中。条件跳转指令指令插入到循环程序中。条件跳转指令JMP若若在它对应的标号之后在它对应的标号之后(即程序往回跳即程序往回跳),可能因连续,可能因连续反复跳步使它们之间的程序被反复执行,总的执行反复跳步使它们之间的程序被反复执行,总的执行时间超过监控定时器的定时时间。为了避免出现这时间超过监控定时器的定时时间。为了避免出现这样的情况,可在样的情况,可在JMP指令和对应的标号之间插入指令和对应的标号之间插入WDR指令。指令。使用使用WDR指令后,在终止本次扫描之前,下列操作指令后,在终止本次扫描之前,下列操作将被禁止:将被禁止:返回返回后一页后一页前一页前一页(1)通信通信(
24、自由口模式除外自由口模式除外)(2)IO更新更新(立即立即IO除外除外)(3)强制更新。强制更新。(4)SM位更新位更新(不能更新不能更新SM0 )(5)运行时间诊断。运行时间诊断。 (6)在中断程序中的在中断程序中的STOP指令指令(7)如果扫描时间超过如果扫描时间超过25s,10ms定时器和定时器和100ms定时定时器不能正确累计时间。器不能正确累计时间。如果将如果将CPU的方式开关切换到的方式开关切换到STOP位置,位置,1.4s内内CPU转到停止模式。转到停止模式。返回返回后一页后一页前一页前一页6.3 6.3 局部变量表与子程序局部变量表与子程序 6.3.1 局部变量表局部变量表1局
25、部变量与全局变量局部变量与全局变量程序中的每个程序中的每个POU(ProgramOrganizationalUnit,程序组织单元程序组织单元)均有自己的由均有自己的由64字节字节L储器组成的局储器组成的局部变量表。它们用来定义有范围限制的变量,局部部变量表。它们用来定义有范围限制的变量,局部变量只在它被创建的变量只在它被创建的POU中有效。与之相反,全中有效。与之相反,全局符号在各局符号在各POU中均有效,只能在符号表全局中均有效,只能在符号表全局变量表中定义。变量表中定义。全局符号与局部变量名称相同时,在定义局部变量全局符号与局部变量名称相同时,在定义局部变量的的POU中,该局部变量的定义
26、优先,该全局定义中,该局部变量的定义优先,该全局定义则在其它则在其它POU中使用。中使用。返回返回局部变量适用于以下两种情况:局部变量适用于以下两种情况:(1)在子程序中只用局部变量,不用绝对地址或全局在子程序中只用局部变量,不用绝对地址或全局符号,子程序可移植到别的项目去。符号,子程序可移植到别的项目去。(2)如果使用临时变量如果使用临时变量(TEMP),同一片物理存储器,同一片物理存储器可在不同的程序中重复使用。可在不同的程序中重复使用。如果不是上述两种情况,不需要使用局部变量。通如果不是上述两种情况,不需要使用局部变量。通过在符号表过在符号表(SIMATIC)或全局变量表(或全局变量表(
27、IEC)中进)中进行定义,可使符号成为全局变量。行定义,可使符号成为全局变量。2局部变量的类型局部变量的类型TEMP(临时变量临时变量):暂时保存在局部数据区中的变:暂时保存在局部数据区中的变量。只有在执行该量。只有在执行该POU时,定义的临时变量才被使时,定义的临时变量才被使用,用,POU执行完后,不再使用临时变量的数值。执行完后,不再使用临时变量的数值。返回返回在主程序或中断程序中,局部变量表只包含在主程序或中断程序中,局部变量表只包含TEMP变变量。子程序中的局部变量表还有下面的量。子程序中的局部变量表还有下面的3种变量:种变量:IN(输入变量输入变量):由调用它的:由调用它的POU提供
28、的输人参数。提供的输人参数。OUT(输出变量输出变量):返回给调用它的:返回给调用它的POU的输出参数。的输出参数。IN_OUT(输入输出变量输入输出变量):其初始值由调用它的:其初始值由调用它的POU提供,被子程序修改后返回给调用它的提供,被子程序修改后返回给调用它的POU。3. 局部变量的赋值局部变量的赋值在局部变量表中赋值时,只需指定声明局部变量的类在局部变量表中赋值时,只需指定声明局部变量的类型型(TEMP,IN,IN_OUT或或OUT)和数据类型和数据类型(参见参见SIMATIC和和IEC11313的数据类型的数据类型),但不指定存储,但不指定存储器地址,程序编辑器自在器地址,程序编
29、辑器自在L存储区中为所有局部变量存储区中为所有局部变量指定存储器位置。指定存储器位置。返回返回4在局部变量表中增加新的变量在局部变量表中增加新的变量对于主程序与中断程序,局部变量表显示一组已被对于主程序与中断程序,局部变量表显示一组已被预先定义为预先定义为TEMP(临时临时)变量的行。表中增加行,变量的行。表中增加行,只需用右键单击表中的某一行,选择只需用右键单击表中的某一行,选择“插入一行插入一行”指令,在所选行的上部插入行,选择指令,在所选行的上部插入行,选择“插入一行下插入一行下”指令,在所选行的下部插入新的行。指令,在所选行的下部插入新的行。对于子程序,局部变量表显示数据类型被预先定义
30、对于子程序,局部变量表显示数据类型被预先定义为为IN、IN_OUT、OUT和和TEMP的一行,不能改变的一行,不能改变它们的顺序。如果要增加新的局部变量,必须用鼠它们的顺序。如果要增加新的局部变量,必须用鼠标右键单击已有的行,并出菜单在所击行的上下插标右键单击已有的行,并出菜单在所击行的上下插入相同类型的另一局部变量。入相同类型的另一局部变量。 返回返回5局部变量数据类型检查局部变量数据类型检查 局部变量作为参数向子程序传递时,在该子程序局部变量作为参数向子程序传递时,在该子程序的局部变量表中指定的数据类型必须与调用的局部变量表中指定的数据类型必须与调用POU中中的数据类型值匹配。的数据类型值
31、匹配。 例如从主程序例如从主程序OB1调用子程序调用子程序SBR0,使用名为,使用名为INPUT1的全局符号作为子程序的输人参数。在的全局符号作为子程序的输人参数。在SBR0的局部变量表中,已经定义了一个名为的局部变量表中,已经定义了一个名为FIRST的局部变量作为该输入参数。的局部变量作为该输入参数。当当OB1调用调用SBR0时,时,INPUT1的数值被传入的数值被传入FIRST,INPUT1和和FIRST的数据类型必须匹配。的数据类型必须匹配。 返回返回6显示或隐藏局部变量表显示或隐藏局部变量表 将水平分裂条拉至程序编辑器视窗的顶部,则不将水平分裂条拉至程序编辑器视窗的顶部,则不再显示局部
32、变量表,但它仍然存在。将分裂条下拉,再显示局部变量表,但它仍然存在。将分裂条下拉,将再次显示局部变量表。将再次显示局部变量表。 7在局部变量表中进行赋值在局部变量表中进行赋值 在程序中使用符号名时,程序编辑器首先检查有在程序中使用符号名时,程序编辑器首先检查有关关POU的局部变量表,然后检查符号表全局变量的局部变量表,然后检查符号表全局变量表。如果某符号名在两处都没有定义,程序编辑器表。如果某符号名在两处都没有定义,程序编辑器则将其视为全局符号,程序编辑器指定一条绿色波则将其视为全局符号,程序编辑器指定一条绿色波浪 状 下 画 线 , 并 将 名 称 括 在 双 引 号 中 , 例 如浪 状
33、下 画 线 , 并 将 名 称 括 在 双 引 号 中 , 例 如“UndefinedLocalVar(未定义的局部变量未定义的局部变量)。如果。如果后来对该符号名赋了值,程序编辑器不会自动再次后来对该符号名赋了值,程序编辑器不会自动再次读取局部变量表并修改它。读取局部变量表并修改它。返回返回为了将该符号名作为局部变量使用,必须手工删除为了将该符号名作为局部变量使用,必须手工删除程序代码中的引号,并在符号名前插入程序代码中的引号,并在符号名前插入#号,例如号,例如改为改为#UndefinedLocalVar。 各子程序最多可调用各子程序最多可调用16个输入输出参数,如果个输入输出参数,如果超出
34、超出16个,将返回错误。个,将返回错误。 选择希望的变量类型所在的行,并在名称域中键选择希望的变量类型所在的行,并在名称域中键入变量名称,在数据类型域中键入数据类型。不需入变量名称,在数据类型域中键入数据类型。不需在局部变量表中的变量名称前加在局部变量表中的变量名称前加#号,号,#号只在程序号只在程序代码中的局部变量名之前使用。代码中的局部变量名之前使用。 局部变量名可包含数字、字母和下画号局部变量名可包含数字、字母和下画号(“-”),也,也可以包含扩展字符可以包含扩展字符(ASCll128ASCll255)。第一个。第一个字符必须是字母或扩展字符,关键字不能作为符号字符必须是字母或扩展字符,
35、关键字不能作为符号名。名。返回返回局部变量表中的变量名被下载和存储在局部变量表中的变量名被下载和存储在CPU存储器存储器中,使用较长的变量名将占用较多的存储空间。中,使用较长的变量名将占用较多的存储空间。6.3.2 子程序的编写与调用子程序的编写与调用 S7-200CPU的控制程序由主程序、子程序和中断程的控制程序由主程序、子程序和中断程序组成。序组成。STEP 7MicroWIN 32在程序编辑器窗在程序编辑器窗口里为每个口里为每个POU(程序组织单元程序组织单元)提供一个独立的页。提供一个独立的页。主程序总是第主程序总是第1页,后面是子程序或中断程序。页,后面是子程序或中断程序。 因为各个
36、程序在编辑器窗口里被分开,因为各个程序在编辑器窗口里被分开,编译时在编译时在程序结束的地方自动加入无条件结束指令程序结束的地方自动加入无条件结束指令END、MEND、RET或或RETI。如果在程序里加了这些指令,。如果在程序里加了这些指令,编译时反而会出错。编译时反而会出错。名名 称称子程序调用子程序调用子程序结束子程序结束指令指令CALLCRET指令表格式指令表格式CALL SBR_NCRET梯形图格式梯形图格式CALL 子程序调用指令,当子程序调用指令,当EN端口执行条件存在时,将主端口执行条件存在时,将主程序转到子程序入口开始执行子程序。程序转到子程序入口开始执行子程序。SBR_N是子程
37、序名,是子程序名,标志子程序入口地址。在编辑软件中,标志子程序入口地址。在编辑软件中,SBR_N随着子程序随着子程序名称的修改而自动改变。名称的修改而自动改变。 CRET 有条件子程序返回指令,在其逻辑条件成立时,有条件子程序返回指令,在其逻辑条件成立时,结束子程序执行,返回主程序中的子程序调用处继续向下结束子程序执行,返回主程序中的子程序调用处继续向下执行。执行。返回返回1子程序的作用子程序的作用 子程序常用于需要多次反复执行相同任务的地方,子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要子程序的时只需要写一次子程序,别的程序在需要子程序的时候调用它,而无需重写
38、该程序。子程序的调用是有候调用它,而无需重写该程序。子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以减少扫描时间。此使用子程序可以减少扫描时间。使用子程序可以将程序分成容易管理的小块,使程使用子程序可以将程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。如果子程序中序结构简单清晰,易于查错和维护。如果子程序中只引用参数和局部变量,可以将子程序移植到其他只引用参数和局部变量,可以将子程序移植到其他项目。为了移植子程序,应项目。为了移植子程序,应避免使用避免使用全局符号和变全局符号和变量,如量,如I、Q、M、SM、A
39、I、AQ、V、T、C、S、AC等存储器中的等存储器中的绝对地址绝对地址。返回返回2子程序的创建子程序的创建 可采用下列方法创建子程序:在可采用下列方法创建子程序:在“编辑编辑”菜单中选菜单中选择择“插入一子程序插入一子程序”;在程序编辑器视窗中按鼠标;在程序编辑器视窗中按鼠标右键,从弹出菜单中选择右键,从弹出菜单中选择“插入一子程序插入一子程序”。程序。程序编辑器将从原来的编辑器将从原来的POU显示进入新的子程序,程序显示进入新的子程序,程序编辑器底部将出现标志新的子程序的新标签,在程编辑器底部将出现标志新的子程序的新标签,在程序编辑器窗口中可以对新的子程序编程。可以使用序编辑器窗口中可以对新
40、的子程序编程。可以使用该子程序的局部变量表定义参数,该子程序的局部变量表定义参数,各子程序最多可各子程序最多可以定义以定义16个个IN、OUT参数。参数。用右键双击指令树中的用右键双击指令树中的子程序或中断程序的图标,在弹出的窗口中选择子程序或中断程序的图标,在弹出的窗口中选择“重新命名重新命名”,可修改它们的名称。,可修改它们的名称。返回返回假设创建了一个名为假设创建了一个名为CULCU的子程序,首先在该的子程序,首先在该子程序的局部变量表中,定义一个名为子程序的局部变量表中,定义一个名为“输入输入”的的双字双字IN(输人输人)变量、一个名为变量、一个名为“输出输出”的双字的双字OUT(输出
41、输出)变量和一个名为变量和一个名为TMP1的双字的双字TEMP(临临时时)变量变量(见图见图6-5)。在图。在图6-6的子程序中,输入变量的子程序中,输入变量被乘以被乘以12000,再除以,再除以13257,运算结果作为子程序,运算结果作为子程序的输出。的输出。返回返回 3子程序的调用子程序的调用 可以在主程序、另一子程序或中断程序中调用子程可以在主程序、另一子程序或中断程序中调用子程序,但是序,但是不能在子程序中调用自己不能在子程序中调用自己(即不允许递归调即不允许递归调用用)。调用子程序时将执行子程序的全部指令,直至调用子程序时将执行子程序的全部指令,直至子程序结束,然后返回调用程序中子程
42、序调用指令的子程序结束,然后返回调用程序中子程序调用指令的下一条指令之处。下一条指令之处。 返回返回 在梯形图程序中插入子程序调用指令时,首先打在梯形图程序中插入子程序调用指令时,首先打开程序编辑器视窗中需要调用子程序的开程序编辑器视窗中需要调用子程序的POU,找到,找到需要调用子程序的地方。在指令树的最下面用左键需要调用子程序的地方。在指令树的最下面用左键打开子程序文件夹,将需要调用的子程序图标从指打开子程序文件夹,将需要调用的子程序图标从指令树拖到程序编辑器中的正确位置。或将光标置于令树拖到程序编辑器中的正确位置。或将光标置于程序编辑器视窗中,然后双击指令树中的调用指令。程序编辑器视窗中,
43、然后双击指令树中的调用指令。 应为子程序调用指令的各参数指定有效的操作数,应为子程序调用指令的各参数指定有效的操作数,有效操作数为存储器地址、常量、全局符号和调用有效操作数为存储器地址、常量、全局符号和调用指令所在的指令所在的POU中的局部变量中的局部变量(不是被调用子程序中不是被调用子程序中的局部变量的局部变量)。 如果在使用子程序调用指令后修改该子程序中的如果在使用子程序调用指令后修改该子程序中的局部变量表,调用指令将变为无效。必须删除无效局部变量表,调用指令将变为无效。必须删除无效调用,并用能反映正确参数的新的调用指令代替。调用,并用能反映正确参数的新的调用指令代替。返回返回在语句表程序
44、中调用子程序时使用调用指令在语句表程序中调用子程序时使用调用指令“SBR n”。在调用子程序时,。在调用子程序时,CPU保存整个逻辑保存整个逻辑堆栈后,将栈顶值置为堆栈后,将栈顶值置为1,堆栈中的其他值清,堆栈中的其他值清0,控制转移至被调用的子程序。子程序执行完成时,控制转移至被调用的子程序。子程序执行完成时,用调用时保存的数据恢复堆栈,控制返回调用程用调用时保存的数据恢复堆栈,控制返回调用程序。序。子程序和调用程序共用累加器,不会因使用子程序和调用程序共用累加器,不会因使用子程序自动保存或恢复累加器。子程序自动保存或恢复累加器。4调用带参数的子程序调用带参数的子程序 调用带参数的子程序时需
45、要设置调用的参数,调用带参数的子程序时需要设置调用的参数,参数在子程序的局部变量表中定义,最多可传递参数在子程序的局部变量表中定义,最多可传递16个参数。个参数。 局部变量局部变量(L)地址地址变量名变量名(Name)参数类型参数类型(Var.Type)数据类型数据类型(Data Type)说明说明(Comments)无无ENINBOOL指令使能输入指令使能输入参数参数LB0INPUT1INBYTEL1.0INPUT2INBOOLLD2INPUT3INDWORDLW6TRANSIN_OUTWORDLD8OUTPUT1OUTDWORDLD12OUTPUT2OUTDWORD返回返回 IN(输入输入
46、)是传入子程序的输入参数。如果参数是传入子程序的输入参数。如果参数是直接寻址,如是直接寻址,如VBl0,指定地址的值被传入子程,指定地址的值被传入子程序。如果参数是间接寻址,如序。如果参数是间接寻址,如*AC1,指针指定地,指针指定地址的值被传入子程序。如果参数是常数址的值被传入子程序。如果参数是常数(例如例如DW#12345)或地址或地址(如如&VBl00),它们的值被传给,它们的值被传给子程序,子程序,“#”为常数描述符。为常数描述符。 OUT(输出输出)是子程序的执行结果,它被返回给是子程序的执行结果,它被返回给调用它的调用它的POU。常数和地址常数和地址(如如&VBl0
47、0)不能作输不能作输出量。出量。 IN_OUT(输入输出输入输出)将参数的初始值传给予程序,将参数的初始值传给予程序,子程序的执行结果返回给同一地址。子程序的执行结果返回给同一地址。常数和地址常数和地址不不能作输入输出参数。能作输入输出参数。在子程序中可以使用参数在子程序中可以使用参数IN、IN_OUT和和OUT。 返回返回 TEMP是局部存储变量,不能用来传递参是局部存储变量,不能用来传递参数,它们只能在子程序中使用。数,它们只能在子程序中使用。 子程序传递的参数放在子程序的局部变量表中,子程序传递的参数放在子程序的局部变量表中,局部变量表最左边的一列是每个被传递的参数的局部变量表最左边的一
48、列是每个被传递的参数的局部存储器地址。调用子程序时,输入参数被拷局部存储器地址。调用子程序时,输入参数被拷贝到子程序的局部存储器,子程序执行完后,从贝到子程序的局部存储器,子程序执行完后,从局部存储器区拷贝输出参数到指定的输出参数地局部存储器区拷贝输出参数到指定的输出参数地址。数据单元的大小和类型用参数的代码表示。址。数据单元的大小和类型用参数的代码表示。在子程序中局部参数存储器的参数值分配如下:在子程序中局部参数存储器的参数值分配如下: (1)按子程序指令的调用顺序,给参数值分配局部按子程序指令的调用顺序,给参数值分配局部存储器,起始地址是存储器,起始地址是L0。返回返回 (2)18个连续的
49、位参数分配一个字节,字节中个连续的位参数分配一个字节,字节中的位地址为的位地址为Lx.0Lx.7。 (3)字节、字和双字值在局部存储器中按字节顺序字节、字和双字值在局部存储器中按字节顺序分配,如分配,如LBx,LWx或或LDx。 在带参数调用子程序指令中,参数必须按一定的在带参数调用子程序指令中,参数必须按一定的顺序排列,输入参数在最前面,其次是输入输出顺序排列,输入参数在最前面,其次是输入输出参数,最后是输出参数。参数,最后是输出参数。如果用语句表编程,子程序调用指令的格式为:如果用语句表编程,子程序调用指令的格式为: CALL子程序号,参数子程序号,参数1,参数,参数2,参数参数nn:01
50、6。带参数调用子程序使。带参数调用子程序使ENO:0的错误条件:的错误条件:SM43(运行时间运行时间),0008(子程序嵌套超界子程序嵌套超界)。 返回返回例例6-2 子程序调用举例子程序调用举例(见图见图6-7) 主程序主程序 LD 100 CALL 10,I0.1,VBl0,I1.0,&VBl00,*AC1, VD200 .子程序子程序10.LD I2.1CRET.I1.0VD200VB10*AC1 I0.0 SBR10 EN IN1 OUTIN2 IN3 IN4 IN/OUT &VB100I0.1I2.1RET返回返回5子程序的嵌套调用子程序的嵌套调用 程序中最多可创建
51、程序中最多可创建64个子程序。子程序可以嵌个子程序。子程序可以嵌套调用套调用(在子程序中调用别的子程序在子程序中调用别的子程序),最大嵌套深,最大嵌套深度为度为8。6. 程序的有条件返回程序的有条件返回 在子程序中用触点电路控制在子程序中用触点电路控制RET(从子程序有条从子程序有条件返回件返回)指令,触点电路接通时条件满足,子程序指令,触点电路接通时条件满足,子程序被终止。被终止。编程软件自动地为主程序和子程序添加无编程软件自动地为主程序和子程序添加无条件返回指令。条件返回指令。 类似地,可以在主程序中用触点电路驱动类似地,可以在主程序中用触点电路驱动END(有条件结束)(有条件结束)返回返
52、回6.4 6.4 数据处理指令数据处理指令 6.4.1 SIMATIC比较指令比较指令 比较指令用于将两个操作数按指定条件进行比较,当条比较指令用于将两个操作数按指定条件进行比较,当条件成立时,触点闭合。所以比较指令也是一种位控制指令,件成立时,触点闭合。所以比较指令也是一种位控制指令,对其可以进行对其可以进行LD、A和和O编程。编程。 比较指令可以应用于字节、整数、双字整数和实数比较比较指令可以应用于字节、整数、双字整数和实数比较。其中,字节比较是无符号的,整数、双字整数和实数比较。其中,字节比较是无符号的,整数、双字整数和实数比较是有符号的。是有符号的。 其比较的关系运算符有其比较的关系运
53、算符有6种:种:=、=、=和和。 返回返回IN2IN1 = BIN2IN1 = DIN2IN1= = IIN2IN1 R比较方式比较方式输输 入入操操 作作 数数数据类型数据类型字节比较字节比较IN1、IN2VB,IB,QB,MB,SMB,LB,SB,AC,常,常数,数,*VD,*AC,*LDBYTE整数比较整数比较IN1、IN2IW,QW,MW,SW,SMW,VW,LW。AIW,T,C,AC,常数,常数,*VD,*AC,*LDINT双字整数比较双字整数比较IN1、IN2ID,QD,MD,SD,SMD,VD,LD,HC,AC,常数,常数,*VD,*AC,*LDDINT实数比较实数比较IN1、I
54、N2ID,QD,MD,SD,SMD,VD,LD,AC,常,常数,数,*VD,*AC,*LDREAL返回返回6.4.2 SIMATIC数据传送指令数据传送指令 SIMATIC功能指令助记符中最后的功能指令助记符中最后的B、W、DW(或或D)和和R分别表示操作数为字节分别表示操作数为字节(Byte)、字、字(Word)、双字、双字(DoubleWord)和实数和实数(Real)。名名 称称字节传送字节传送字传送字传送双字传送双字传送实数传送实数传送指令指令MOVBMOVWMOVDMOVR指令表格式指令表格式MOVB IN,OUTMOVW IN,OUTMOVD IN,OUTMOVR IN,OUT梯形
55、图格式梯形图格式指指 令令IN/OUT操操 作作 数数数据类型数据类型MOVBINVB,IB,QB,MB,SB,SMB,LB,AC,常数,常数,*VD,*AC,*LDBYTEOUTVB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LDBYTEMOVWINVW,IW,QW,MW,SW,SMW,LW,T,C,AIW,常数,常数,AC,*VD,*AC,*LDWORD,INTOUTVW,IW,QW,MW,SW,SMW,LW,AQW,AC,*VD,*AC,*LDWORD,INTMOVB EN端口执行条件存在时,把端口执行条件存在时,把IN所指的字节原值传送到所指的字节原值传送到OUT所
56、指字节所指字节存储单元。存储单元。 MOVW EN端口执行条件存在时,把端口执行条件存在时,把IN所指的字原值传送到所指的字原值传送到OUT所指字存所指字存储单元。储单元。 MOVD EN端口执行条件存在时,把端口执行条件存在时,把IN所指的双字原值传送到所指的双字原值传送到OUT所指双字所指双字存储单元。存储单元。 MOVR EN端口执行条件存在时,把端口执行条件存在时,把IN所指的所指的32位实数原值传送到位实数原值传送到OUT所指所指双字长的存储单元。双字长的存储单元。MOVDINVD,ID,QD,MD,SD,SMD,LD,HC,&VB,&IB,&QB,&
57、MB,&SB,&T,&C,AC, 常数,常数,*VD,*AC,*LDDWORD,DINTOUTVD,ID,QD,MD,SD,SMD,LD,AC, *VD,*AC,*LDDWORD,DINTMOVRINVD,ID,QD,MD,SD,SMD,LD,AC, 常数,常数,*VD,*AC,*LDREALOUTVD,ID,QD,MD,SD,SMD,LD,AC, *VD,*AC,*LDREAL2字节、字、双字的块传送指令字节、字、双字的块传送指令块传送指令将从输入地址块传送指令将从输入地址(1N)开始的开始的N个数据传送到输出地个数据传送到输出地址址(OUT)开始的开始的N个单元,个
58、单元,N:1255,N为字节变量为字节变量名名 称称字节块传送字节块传送字块传送字块传送双字块传送双字块传送指令指令BMBBMWBMD指令表格式指令表格式BMB IN,OUT,NBMW IN,OUT,NBMD IN,OUT,N梯形图格式梯形图格式指指 令令操操 作作 数数数据类型数据类型BMBIN/OUTVB,IB,QB,MB,SB,SMB,LB, *VD,*AC,*LDBYTENVB,IB,QB,MB,SB,SMB,LB,AC,常数,常数,*VD,*AC,*LDBYTEBMWINVW,IW,QW,MW,SW,SMW,LW,T,C,AIW,*VD,*AC,*LDWORDOUTVW,IW,QW,
59、MW,SW,SMW,LW,T,C,AQW,*VD,*AC,*LDWORDNVB,IB,QB,MB,SB,SMB,LB,AC,常数,常数,*VD,*AC,*LDBYTEBMDIN/OUTVD,ID,QD,MD,SD,SMD,LD,*VD,*AC,*LDDWORDNVB,IB,QB,MB,SB,SMB,LB,AC,常数,常数,*VD,*AC,*LDBYTE3字节交换指令字节交换指令字节交换字节交换SWAP(SwapBytes)指令交换输入字指令交换输入字(1N)的高字节与低字节。的高字节与低字节。名名 称称高低字节交换高低字节交换指令指令SWAP指令表格式指令表格式SWAP IN梯形图格式梯形图格
60、式指指 令令输输 入入操操 作作 数数 数据类型数据类型SWAPINVW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LDWORDSWAP指令使用举例指令使用举例4字节立即读写指令字节立即读写指令字节立即读字节立即读MOV_BIR(MoveBytelmmediateRead)指指令读取令读取IN输入端给出的输入端给出的1个字节的物理输入点个字节的物理输入点(1B),并将结果写入并将结果写入OUT。 字节立即写字节立即写MOV_BIW(MoveBytelmmediateWrite)指令将输入指令将输入(1N)给出的给出的1字节数值写入字节数值写入OUT端给出的端给出的物理输出点物理输出点(QB)。两条指令的。两条指令的IN和和OUT都是字节变都是字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年桥梁服务质量与耐久性评估的关系
- 2026年桥梁设计中的空间结构优化分析
- 小学语文后鼻韵母专项训练卷
- 工业废弃物处理与循环利用方案
- 2026年电气节能设计在绿色建筑中的具体措施
- 电力营业厅培训课件
- 建筑装饰行业薪资与福利管理办法
- 2026年桥梁健康监测技术的市场应用案例
- 膜结构建筑施工方案详细说明
- 快餐行业店面运营管理手册
- 数据中心智能化系统设备部署方案
- 专项突破:平面直角坐标系中面积、规律、新定义、几何综合问题(解析版)
- 2025年铍矿行业分析报告及未来发展趋势预测
- 化学剥脱美容技术
- 医疗机构传染病隔离区域设置与管理要求
- 2025年数学广东一模试卷及答案
- 安全总监先进个人材料范文
- 2025年高速公路收费员考试题(附答案+解析)
- 智算中心大模型训练部署方案
- 2025年中国BBU备用电源行业市场全景分析及前景机遇研判报告
- 幼儿园大班社会教案《影子变变变》含反思
评论
0/150
提交评论