wlmissyou
级别: 探索解密
精华主题: 0
发帖数量: 62 个
工控威望: 165 点
下载积分: 1279 分
在线时间: 98(小时)
注册时间: 2017-06-11
最后登录: 2024-11-21
查看wlmissyou的 主题 / 回贴
楼主  发表于: 2021-11-17 20:41
【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重新编辑 ]
本帖最近评分记录:
  • 下载积分:+1(y282574647) 厉害,不过看不懂
  • 下载积分:+1(hsiung) QR码过期了
  • 下载积分:+1(完美世界)
    eaglesence
    eaglesence
    级别: 家园常客
    精华主题: 0
    发帖数量: 422 个
    工控威望: 703 点
    下载积分: 20124 分
    在线时间: 89(小时)
    注册时间: 2019-04-02
    最后登录: 2024-11-21
    查看eaglesence的 主题 / 回贴
    1楼  发表于: 2021-11-18 20:45
    西门子论坛搬运的吗?还是原作者?程序还是挺厉害的