【S7-200 Smart开源标准化编程】之基础----突破子程序的限制,让子程序像FB一样工作
就算看帖的小伙伴不考虑什么标准化编程,能突破子程序的一些限制也是好的。
先说说标准化程序的要求:对象化编程,程序中不使用M,T,C,子程序内逻辑程序不可出现全局变量,更多的规则以后再说,先解决最基本问题。
我们首先看看200子程序有哪些限制:
1、最多128个子程序
这个限制是说你可以有128个子程序,不是调用限制,所以调用多少次都可以,受PLC资源限制。这个限制没法破。
2、子程序只能有16个脚
为什么会有这个限制呢?临时变量一共64个字节,如果脚上都是最大的双字数据类型,64除以4等于16,所以就有了这个16脚限制。注意最后四个字节的临时变量系统保留。咱也不知道干啥用了。那么这个限制如何破解呢,比如说把bool数据类型的变量整合成byte字节型的变量给子程序,比如连接的多个连续V区参数以指针的方式传给子程序。
3、最多嵌套8层
这个没啥说的,没法破,但一般情况下够用了。
[ post]4、带有计数器和定时器的子程序无法多次调用
高速计数器未试验过,先排除。普通的计数器其实就是整数加,整数减,破解无压力。定时器,我们用时间间隔定时器BGN_ITIME和CAL_ITIME指令实现毫秒级计时,多次调用无问题,破解无压力。
5、子程序内不能使用沿指令
虽然不能使用沿使令,但是通过梯形图逻辑可以产生沿信号,使用不受限
6、置位,复位指令使用受限
这个破解没问题。
更多的限制网友提一提,我们看看能不能破解。
200子程序多次调用总是出问题是因为什么的呢,200的子程序运行起来就是没有静态区的FC,问题就出在temp区,因为temp不会保存啊,所以我们就要划出V区来保存temp的数据,像建立FB背影数据块那样。这部分背景数区上电时清零,子程序内需要断电保持的数据要记得用INOUT脚引出。工作起来也简单,进入子程序后先将V区数据复制到temp,子程序逻辑运行完,把temp里的数据复制回V区。有伙伴会说,这不是就是带库的子程序嘛,应该是不同的。采用标准化方式的子程序必须全部无条件调用,就是每次扫描都得运行。
这里给出简单的例程:
例程中有嵌套,有标准化定时器、标准化计数器,子程序多次调用,沿信号的生成和使用
加我微信进群交流:50586625
smart200标准化实践modbus20220522.smart.zip (102 K) 下载次数:1190 [ 此帖被wlmissyou在2022-09-15 09:08重新编辑 ]