第六部分子程序与局部变量_第1页
第六部分子程序与局部变量_第2页
第六部分子程序与局部变量_第3页
第六部分子程序与局部变量_第4页
第六部分子程序与局部变量_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、子程序和局部变量一什么是子程序及其优点二西门子200PLC子程序使用规则三带参数的子程序四子程序的使用注意事项子程序概念及优点 什么是子程序?在一个加工程序中,如果其中有些加工内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。 子程序的优点:1. 调用方便、快速编程:很多类似的功能,像这样的就可以使用子程序,而不用多次复制相同的语句,而选择调用相同的子程序:几个类似的项目也只需要对同一个程序作不多的修改就能适用。2. 子程序可以把整个

2、用户程序按照功能进行结构化的组织:一个“好”的程序总是把全部的控制功能分为几个符合工艺控制规律的子功能块,每个子功能块可以由一个或多个子程序组成。3. 程序结构也非常有利于分步调试:避免许多功能综合在一起无法准确、快速的判断问题所在。子程序使用规则 CPU226的项目中最多可以创建128个子程序,其他CUP可以创建64个子程序。 在主程序中,可以嵌套调用子程序(在子程序中调用子程序),最多嵌套8层。在中断服务程序中,不能嵌套调用子程序。 全局存储区:是指同一个存储器可以被任何程序存取(包括主程序、子程序和中断程序)。 局部存储区:是指存储器区和特定的程序相关联。 注:局部变量区的大小为64个字

3、节,其中最后4个字节被系统所占用,实际可供子程序使用的为60个字节(LB0到LB59),超出存储区即会报错。 注:每个子程序调用的输入输出参数的最大限制是16,如果您尝试下载的程序超过此一限制,IN、OUT和IN_OUT加起来共16个超过16个就会出错。子程序使用规则主程序开始主程序结束子程序1结束RET条件调用1条件子程序1开始子程序2结束子程序2开始调用2条件RET条件子程序调用框图:带参数的子程序子程序可以包含要传递的参数。参数在子程序的局部变量表中定义。参数必须有变量名(最多23个字符)、变量类型和数据类型。一个子程序最多可以传递16个参数。IN参数传入子程序。如果参数是直接寻址(如:

4、 VB10),指定位置的值被传递到子程序。如果参数是间接寻址(如: *AC1),指针指定位置的值被传入子程序;如果参数是常数(如: 161234),或者一个地址(如: &VB100),常数或地址的值被传入子程序。IN_OUT指定参数位置的值被传到子程序,从子程序的结果值被返回到同样地址。常数(如: 161234)和地址(如: &VB100)不允许作为输入/输出参数。OUT常数(如: 161234)和地址(如: &VB100)不允许作为输出参数。TEMP任何不用于传递数据的局部存储器都可以在子程序中作为临时存储器使用。子程序使用注意事项子程序中的定时器:停止调用子程序时,

5、线圈在子程序内的位元件的ON/OFF状态保持不变。如果在停止调用时子程序中的定时器正在定时,100ms定时器将停止定时,当前值保持不变,重新调用时继续定时;但是1ms定时器和10ms定时器将继续定时,定时时间到时,它们的定时器位变为1状态,并且可以在子程序之外起作用。子程序在一个周期扫描周期内多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,子程序中局部变量的特点,在编程多次调用带参数的子程序时也要格外注意。子程序使用的怪现象 观察一个程序:这个是子程序中的启保停程序。子程序使用的怪现象 主程序:调用了两次上面的程序,实现I0.0和I0.1控制Q0.0的闭合和断开;I0.2和I0.3控制

6、Q0.1的闭合和断开。子程序使用的怪现象那么在线测试下程序执行情况,发现果然和描述的错误一样, I0.0 为 1 后, Q0.0 和 Q0.1 都为1 了。见下图.03 所示。而如果闭合 I0.2,则 Q0.0 和 Q0.1 都断开。子程序使用的怪现象为什么会这样呢?首先我们先明确子程序局部变量的特点。局部变量的变量类型分为四种:IN,IN_OUT, OUT 和 TEMP,局部变量存储区是在子程序调用时开辟的,子程序调用完成,局部变量占用的存储空间释放。我们来分析下这个错误的子程序: 在主程序第一次调用子程序时,如果 I0.0 为 1, I0.1 为 0,它们将自身值分别传给输入局部变量#AA

7、 和#BB,子程序中程序逻辑执行如下图所示。此时局部变量#CC 值为 1,子程序完成, #CC将值传送到输出参数 Q0.0 上,使其置 1。根据局部变量的特点,子程序第一次调用完成后,局部变量存储区释放。 那么当主程序第二次调用该子程序时,开辟临时存储空间,但是此时的存储空间与第一次调用时开辟的不一定一致。可是,也有可能由于程序简单,仍然使用第一次调用时占用的存储空间。如果这种情况发生了,那么第一次调用时已经将#CC 的 L0.2 置了 1,而此值依旧存在,那么第二次调用时虽然输入参数 I0.2 和 I0.3 为 0 ,但是#CC( L0.2)为 1,由于这个程序的子程序逻辑有自保持部分,所以最后 L0.2 的逻辑结果仍然是 1。子程序完成后, #CC 将值传送到输出参数 Q0.1 上,子程序使用的怪现象如何解决这个怪现象呢?大家是否还记得刚刚介绍局部变量参数类型时除了 IN, OUT 类型外,还有一种类型IN_OUT,这种类型的参数是先读入,然后再写出,这里我们就可以利用它的特点解决上面的问题。了解了 IN_OUT 类型变量的特点,就不难分析以上的结果。 因为每次调用子程序时,局部变量#CC 都会先去读取输入参数 Q0.0 或 Q0.1 的状态,所以即使两次调用子程序时, #CC 变量使用的同一区域,该区域的值也会

温馨提示

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

评论

0/150

提交评论