【S7-200 Smart开源标准化编程】之基础----突破子程序的限制,让子程序像FB一样工作

已锁定

不欲勿施

  • 帖子

    838
  • 精华

    14
  • 被关注

    256

论坛等级:奇侠

注册时间:2009-03-27

钻石 钻石 如何晋级?

【S7-200 Smart开源标准化编程】之基础----突破子程序的限制,让子程序像FB一样工作

13434

131

2021-11-17 16:07:52

就算看帖的小伙伴不考虑什么标准化编程,能突破子程序的一些限制也是好的。

先说说标准化程序的要求:对象化编程,程序中不使用M,T,C,子程序内逻辑程序不可出现全局变量,更多的规则以后再说,先解决最基本问题。

我们首先看看200子程序有哪些限制:

1、最多128个子程序

这个限制是说你可以有128个子程序,不是调用限制,所以调用多少次都可以,受PLC资源限制。这个限制没法破。

2、子程序只能有16个脚

为什么会有这个限制呢?临时变量一共64个字节,如果脚上都是最大的双字数据类型,64除以4等于16,所以就有了这个16脚限制。注意最后四个字节的临时变量系统保留。咱也不知道干啥用了。那么这个限制如何破解呢,比如说把bool数据类型的变量整合成byte字节型的变量给子程序,比如连接的多个连续V区参数以指针的方式传给子程序。

3、最多嵌套8层

这个没啥说的,没法破,但一般情况下够用了。

4、带有计数器和定时器的子程序无法多次调用

高速计数器未试验过,先排除。普通的计数器其实就是整数加,整数减,破解无压力。定时器,我们用时间间隔定时器BGN_ITIME和CAL_ITIME指令实现毫秒级计时,多次调用无问题,破解无压力。

5、子程序内不能使用沿指令

虽然不能使用沿使令,但是通过梯形图逻辑可以产生沿信号,使用不受限

6、置位,复位指令使用受限

这个破解没问题。


更多的限制网友提一提,我们看看能不能破解。


200子程序多次调用总是出问题是因为什么的呢,200的子程序运行起来就是没有静态区的FC,问题就出在temp区,因为temp不会保存啊,所以我们就要划出V区来保存temp的数据,像建立FB背影数据块那样。这部分背景数区上电时清零,子程序内需要断电保持的数据要记得用INOUT脚引出。工作起来也简单,进入子程序后先将V区数据复制到temp,子程序逻辑运行完,把temp里的数据复制回V区。有伙伴会说,这不是就是带库的子程序嘛,应该是不同的。采用标准化方式的子程序必须全部无条件调用,就是每次扫描都得运行。


这里给出简单的例程:

例程中有嵌套,有标准化定时器、标准化计数器,子程序多次调用,沿信号的生成和使用




【不欲勿施】【S7-200 Smart开源标准化编程】之三------IO对象与动作及最新例程

https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1732419&b_id=64&s_id=0&num=2#anch

下面是最新程序的改进:

仅用一个全局指针变量用最少的计算量和程序量实现背景数据的索引,并且用SMD2040来实现,不再有V区全局变量,实现程序中无全局变量的要求。关于最后字节的获取,在OB1最后的程序段,绝对的画龙点睛。最新程序定时器增加了过程值,增加了单按钮控制启停的对象,还新增了正**作的设备对象及其它。

【S7-200 Smart开源标准化编程】modbus rtu终极封装-单条msg指令多任务读轮询写优先掉站跳过掉站恢复

最新的程序也在下面的这个帖子里

https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1760741&b_id=64&s_id=0&num=29#anch


【S7-200 Smart开源标准化编程】之基础----突破子程序的限制,让子程序像FB一样工作 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7477条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。