资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第 十四 讲 控制功能指令,控制功能指令,程序控制指令用于对程序流转的控制,可以控制程序的结束、分支、循环、子程序或中断程序调用等。通过程序控制指令的合理应用,可以使程序结构灵活、层次分明,增强程序功能。,读转换开关位置指令,I/O,控制指令,主控继电器指令,跳转指令,循环指令,子程序,中断程序,转鼓指令,1.读转换开关位置指令,读转换器位置,(SWITCH_POS),允许逻辑读,RUN/STOP,转换器的当前位置,以及转换器配置模式。,功能,许用操作数,描述,POS,除了,S,SA,SB,SC,之外任何操作数,写进当前转换器位置值的存储单元:,1-,运行,I/O,激活,2-,运行,I/O,不激活,3-,停止模式,MODE,除了,S,SA,SB,SC,之外任何操作数,写进转换器配置值的存储单元,0,转换器配置不支持,1,转换器控制运行,/,停止模式,2,转换器不用,或由拥护申请使用,3,转换器控制存储保护,或运行,/,停止模式,S,返回,2.I/O控制指令,当,DO I/O(DO_IO),接收能流,在程序运行时,每次扫描就刷新输入或输出点。除了正常的,I/O,扫描外,在程序执行期间也可以利用,DO_IO,功能刷新其所选择的,I/O,。,如果输出指定,,DO_IO,根据存储在,I/O,存储器中最新值刷新输出。在整个,I/O,模块增量范围内使用,I/O,;如有必要,在,DO_IO,执行期间,,PLC,调整基准点。,暂停,I/O(SUS_IO),功能块在一个,CPU,扫描中出现事故时停止正常,I/O,扫描。在下次输出扫描期间,保持所有输出的当前状态。在下次输入扫描期间,输入数据刷新。,可用操作数,参量,许用操作数,描述,ST,I,,,Q,,,AI,,,AQ,被扫描的输入或输出点(字)组起始地址。,ST,和,END,必须在相同的存储区域。,注意:,如果,ST,和,END,在,BOOL,量存储器中,,ST,必须是字节组。那就是说,基准地址必须从(,8n+1,)开始,例如,%I01,,,%Q09,,,%Q49,。,END,I,,,Q,,,AI,,,AQ,被扫描的输入或输出点的最后一位的地址。必须和,ST,在相同的存储区域。,注意:,如果,ST,和,END,在,BOOL,量存储器中,,END,的基准地址必须是,8n,,例如,%I08,,,%Q16,ALT,I,,,Q,,,M,,,T,,,G,,,R,,,AI,,,AQ,对于一个输入扫描,,ALT,指定地址来存储扫描输入点,/,字的值。对于一个输出扫描,,ALT,从指定地址获得输出点,/,字的值发送到,I/O,模块中。,注意:如果,ST,和,END,在模拟量存储器中,,ALT,仅是一个,WORD,。,应用举例,注意:,大部分使用,DO_IO,和,SUS_IO,的程序,把,SUS_IO,功能块,放在第一梯级,,处理输入的,DO_IO,功能块放在,下一个梯级,,处理输出的,DO_IO,功能块放在,最后一个梯级,。,DO_IO,功能块处理输出点的范围从,%Q00001,到,%Q00030,。如果在这个范围内的模块是一个,32,点的模块,,DO_IO,功能块执行对整个模块的扫描,不会把,I/O,模块从中间分开扫描。,返回,3、主控继电器指令(MCRN,END MCRN),3、主控继电器指令(MCRN,END MCRN),一个,MCRN,指令标志一个逻辑段的开始,执行该逻辑段时断开能流。一个,MCRN,段的结束必须由一个和,MCRN,同名的,ENDMCRN,作记号。在逻辑里,ENDMCRN,必须跟在相应的,MCRN,后面。,ENDMCRN,有一个名称,用来识别及联合相应的,MCRN,。,主控继电器指令,在激活的,MCRN,和相应的,ENDMCRN,之间的所有梯级执行时,有来自母线的负能流。,在主控继电器范围内的功能块执行时,能流断开,线圈关断。,一个,MCRN,强加下列控制:,定时器不计时。,TMR,类型重置。对于一个,ONDTR,功能块,累加器保持原来的值。,正常输出关断,取反输出接通。,在一个激活的主控继电器范围内的子程序调用不执行。可是,在子程序内的任一定时器连续不断地计时。,举例,:,主控继电器的嵌套形式:,只要,V_I0002,触点允许能流进入,MCRN,功能块,程序执行,能流不进入线圈,一直执行到关联的,ENDMCRN,。如果,V_I0001,和,V_I0003,触点为,ON,,线圈,V_Q0001,关断,,SET,线圈,V_Q0003,维持当前状态。,返回,4、跳转指令(JUMP,LABEL),一个,JUMP,指令将旁路逻辑程序的一部分。程序在同一个块中指定的,LABELN,中连续执行。能量流直接从,JUMPN,跳转到由,LABELN,指定梯级。当跳转激活时,在,jump,和,label,之间的任何功能块都不执行。,JUMPN,有一个与之相关联的,LABELN,。,跳转指令,跳转指令性质:,在,JUMPN,和与其相关的,LABELN,之间的所有线圈都保持它们先前的状态。,与定时器、计数器、锁存器和继电器相关联的线圈也保持它们先前的状态。,任何,JUMPN,能向前跳转也能向后跳转,也就是说,,LABELN,既能在前面梯级中也能在后面梯级中。,LABELN,必须在同一个块中。,跳转指令,注意:,1,)为了避免由向前或向后,JUMPN,指令建立一个死循环,一个向后,JUMPN,应该包含一条有条件的路径。,2,)一个,JUMPN,指令的右端不连接任何指令或语句。,3,),多条跳转指令可对应同一标号,但不允许一个跳转指令对应多个相同标号,即在程序中不能出现两个相同的标号。,4,)一个,JUMPN,与和它相关联的,LABELN,能放在程序的任何地方,只要,JUMPN/LABELN,在下面的范围内:,不与,MCRN/ENDMCRN,对的范围重叠,不与,FOR_LOOP/END_FOR,对范围重叠,返回,5.循环指令,FORLOOP,ENDFOR,EXITFOR,循环指令,FORLOOP,ENDFOR,EXITFOR,一个,FOR_LOOP,可以通过设置一个负的增加量给下标变量递减赋值。,当,START,和,END,的值设置相等,程序循环仅执行一次。当,START,的值不能增加,/,减少到,END,的值时,不执行循环语句。,如果在第一次测试时,,FOR_LOOP,指令的使能输入有能流,在,FOR,和相应的,END_FOR,指令之间的梯级执行循环的次数由,START,,,END,和,INCREMENT,最初指定值决定。这种重复执行出现在,PLC,单个扫描情况,如果循环周期长,这种重复执行可能导致看门狗定时器停止。,程序循环允许嵌套,但限制在,5,对,FOR/END_FOR,内。,完全嵌套,也允许带有,JUMP,和,MCR,的嵌套。,控制要求:使用自增、自减指令和数据指针,将,%R00101,%R00200,中的数据逆序传送到,%R00301,%R00400,中。,例,.,数据逆序传输,控制要求:使用自增、自减指令和数据指针,将,%R00001,%R00030,中的数据逆序传送到,%R00201,%R00230,中。,例,.,数据逆序传输,返回,参考程序,6.子程序,不带参数调用子程序 带参数调用子程序,子程序,新建一个梯形图子程序,修改子程序名,根据需要可以新建几个子程序(最多,512,个),打开属性窗,带参数子程序与不带参数子程序,子程序,不带参数调用子程序 带参数调用子程序,子程序,注意:,一个,CALL,功能块能在任何程序块中使用,包括,_MAIN,块或一个带参数块。但不能在一个外部块中使用。,不能调用一个,_MAIN,块。,执行调用之前,被调用的块必须存在。,一个已知块的调用和被调用的次数没有限制。,通过调用块本身可以形成递归子程序。当堆栈容量配置为默认值(,64K,),,PLC,保证在,“,应用堆栈溢出,”,错误发生之前,8,个嵌套调用中最小一个调用。,当一个程序块、带参模块或外部,C,块的,Y0,参数返回,ON,时,,CALL,向右传递能流,当返回为,OFF,时,,CALL,不向右传递能流,。,例,1,:使用子程序,设计一彩灯控制程序实现如下功能:,前,64s,,,16,个输出,(Q00001,Q00016),,初态为,Q00001,闭合,其他打开,依次从最低位到最高位移位闭合,循环,4,次;,后,64s,,,16,个输出,(Q00001,Q00016),,初态为,Q00016,和,Q00015,闭合,其它打开,依次从最高位到最低位两两移位闭合,循环,8,次。,程序:,返回,例,2,:,思考:,使用带参数的子程序实现一位数加法计算器计算结果的显示:,(,1,)计算结果存放在,%R00001,中,数据类型为,INT,型;,(,2,)第一个数码管显示计算结果的十位数,第二个数码管显示计算结果的个位数。,7.中断程序,1,)由,CPU,产生,中断的时间间隔由用户指定。如果设定了初始延时,则在完成停止,-,运行转换并经过初始延时时间后,开始计算中断时间。,2,),I/O,中断由,I/O,模块发出,,I/O,中断用于指示离散输入状态的改变,(,上升沿,/,下降沿,),,模拟量范围限制,(,高,/,低报警,),和高速计数器事件。,3,)模块中断由,VME,模块产生。每个模块支持单个中断。,注意:,中断驱动块执行后能中断非中断驱动块的执行。如果正在中断的逻辑和已中断的逻辑访问相同的数据,会产生不可预期的错误。需要的话,在共享数据正在被访问时,服务请求程序,17,或服务请求程序,32,可以临时屏蔽,I/O,和定时中断程序的执行。,用于启动程序块的,3,种中断类型,中断程序,中断设置,定时中断块第一次执行的时间为:,CPU,进入运行模式后,(,延时*时间基准,)+(,时间间隔*时间基准,),时间基准,(Time Base),设定的时间间隔和延时的最小时间单元。时间基准可以设定为,1,秒,,0.1,秒和,0.001,秒,时间间隔,(Interval),设定值,*,时间基准后,得到的值为程序块两次执行的时间间隔,延时,(Delay),(,可选择,),设定值,*,时间基准后,得到的值为延时多长时间开始第一次执行程序块,1,)定时中断:系统上电后定期执行的中断程序块,中断设置,程序块可以由某些硬件输入的中断信号触发。例如,,24 VDC,,,32,路的输入模块,(IC697MDL650),,不管输入信号是上升沿还是下降沿,第一次输入时都发出一个中断。如果模块配置中将中断功能使能,则中断可以触发执行一个程序块。,I/O,中断在程序块属性栏中配置,触发必须使用全局变量,%I,%AI,或者,%AQ,。,2,),I/O,中断,如果在模块硬件配置中将,VME,中断参数使能,程序块可以由,VME,模块输入的中断信号触发。,PAC,系统,CPU,允许每个模块有一个中断。要配置模块中断,在程序块属性栏中标明模块所在的机架,/,槽号,/,中断,ID,即可。,3,)模块中断,举例:,完成功能:,输出继电器,Q00001,以,1,秒为周期通断。,思考:,主程序为如下梯形图时绘制,Q00001,的时序。,优先级程序块时序,优先级时序允许你为每一个触发指定一个优先级。优先级数值范围为,1-16,,,1,优先级最高。单个模块可以有多个优先级不同的中断,也可以有多个优先级相同的中断。,将接收到的中断级别和正在执行的程序块的中断级别进行比较后,会按如下方式执行程序:,如果接收到的中断级别高于正在执行的程序块的中断级别,则停止执行当前程序块,转而执行和新收到的中断相关的程序块。,如果接收到的中断级别等同于正在执行的程序块的中断级别,则继续执行当前程序块。将新收到的中断放入队列中。,如果接收到的中断级别低于正在执行的程序块的中断级别,则将新收到的中断放入队列中。,返
展开阅读全文