分享

【跟着我一起来学习s7-200】38子程序

 老黄兄 2015-01-14

前面学习了中断与中断程序的内容,那么今天就学习一下子程序的内容。子程序,它是备用程序,是调用才执行的,它的作用主要是优化程序结构,节约PLC资源。

在我们的编程软件里面,是默认提供了一个空的子程序SBR_0的,我们还可以创建子程序,在程序编辑区单击右键,选择“插入-子程序”就可以了。插入的此程序会从0开始递增生成,我们要注意的是对于CPU226XM,为SBR_0-SBR_127,对于其余的CPU,为SBR_0-SBR_63。

说到调用子程序,我们的主程序、子程序、中断程序都可以调用子程序。要调用子程序的时候,我们只需要在指令列表中的“调用子程序”文件夹里找到子程序,把它拖拽出来就可以了。如果子程序的局部变量表是有定义参数的,在调用了子程序后修改了局部变量表的话,那么调用指令是无效的,这样只能重新调用子程序。

对于子程序的调用,我们可以分为带参数的子程序调用和不带参数的子程序调用这两种。不带参数的子程序调用的特点有几个,第一是直接在子程序中利用绝对地址进行编程,第二是子程序功能块是没有接口的,第三是不带参数的子程序只能调用一次,这个我们要注意一下,不然会出现双线圈的错误,第四是当跳出子程序时要对内部状态复位或清零。

以下就是不带参数子程序调用的使用的例子。我们可以看到在子程序中利用的是绝对地址的,并且是没有定义接口的。

2014-10-11 16:32 上传

下载附件 (2.9 KB)


2014-10-11 16:32 上传

下载附件 (3.29 KB)


而带参数的子程序调用是要对局部变量表定义参数的,变量的地址也是有范围的,为LB0-LB31、LW0-LW30、LD0-LD28。子程序的局部变量表中是有IN、OUT、IN_OUT接口的,IN是把外面的数据传到内部,OUT是把内部的数据传到外部,IN_OUT是把外部的数据传到内部,再经过运算后再把数据传到外部。还有TEMP临时变量,TEMP是用于中间运算的,我们要注意的是它是要先赋值后使用的。子程序中凡是运算的中间过程我们都可以用累加器AC0-AC3,它的使用是没有限制的。还有就是带参数的子程序可以多次被调用,在每次调用时可以对不同的变量、数据进行相同的运算或操作。

以下就是带参数子程序调用的使用的例子。我们可以看到我们在子程序的局部变量表里是有定义接口的,定义了3个变量DW1、DW2和SUM,这些变量就是子程序的参数。我们要注意的是子程序的参数是形式参数,这些参数在调用子程序时是被实际的数据替代的。我们看到在变量符号前面有个“#”号,这就是表示这个变量是局部变量。

2014-10-11 16:33 上传

下载附件 (3.06 KB)


2014-10-11 16:34 上传

下载附件 (4.05 KB)


还有一个我们要注意的是,子程序在调用执行中,调用条件突然断开的话,所有状态会保持当前状态,100ms定时器会暂停计时,1ms和10ms定时器则不受扫描周期控制,会继续计时。

那么以上就是子程序的一些主要内容,后面的话会做一下子程序调用的应用,来更好的巩固子程序的内容。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多