回复:问一问自己做子程序自动分配背景数据的人。

不欲勿施

  • 帖子

    836
  • 精华

    16
  • 被关注

    388

论坛等级:奇侠

注册时间:2009-03-27

钻石 钻石 如何晋级?

发布于 2025-09-06 16:22:43

76楼

展开查看
以下是引用Zane在2025-09-06 13:40:45的发言 >70楼

我的建议是不使用AC累加器

以下是引用holdkcsxyz在2025-09-06 12:48:52的发言 >69楼:是的,建议很好尤其...

引用69楼详细内容:

是的,建议很好尤其是AC的使用,只是探讨了回收的一种可能性,可行性的方案,程序没有做,而且回收相对复杂,想要用回收回来的存储区更复杂。只做了最简单,无冗余,无容错的递增式分配,程序也做了多次断电上电测试了,VB0断电保持应该不会出问题,关键是子程序要按照例程类似的规范来写,子程序里也可以包含物理地址的首地址指针,解决物理AI/AQ/I/Q点的映射问题。这个程序总体还是不太中看,更不中用。

以下是引用xinchen在2025-09-06 11:35:07的发言 >68楼:每个子程序除了记录...

引用68楼详细内容:

每个子程序除了记录本身 static 的数据外,还记录了下级子程序的数据指针

通过指针可以确认本子程序是否被分配过内存地址,这样不会因为“乱序”或局部扫描引起数据地址错乱的问题,哪怕在 中断 中也能使用,学到了


最开始举的例子真心容易误导



提到的 “V7700.0的下升沿是天然的回收内存的绝佳标志位,代表可以释放回收分配给它的内存”,这句话怎么理解呢,求指教,确实没看到初始化或者回收动作

这 VB0 起还是断电保持的,当修改了程序后(扩大了 static 的数量),很有可能地址会重新排列,没有初始化或者回收,内存排布可能会有问题(指针≠0,不会重新分配)

分配时能区分 非保持 和 保持 就更好了,firstscan 时直接复位 非保持 区域



另外有个建议,分配核心函数中,使用 AC 前,建议保存 AC 值,在完成后恢复 AC,这样外部可以随意使用,比如外部 循环+AC 调用子程序就能放心使用


以下是引用holdkcsxyz在2025-09-04 20:38:12的发言 >64楼:仅供参考,错漏难...

引用64楼详细内容:

仅供参考,错漏难免,自己在PLC平台上较少用这种自动分配方式,只是探讨一下,感觉全局变量直接寻址编程是PLC编程的精髓之一,主要还是要把工业现场的人情世故讲清楚就好,每个变量必须有寓意丰富且合适的中文名,绝没有临时变量,后续难说;在其他平台会向这种方式靠拢。

整个程序只有一个全局容器VD7100,核函数占用VB7000---VB7009;VD7100位于main中,它分配给子程序"子程序总容器"的接口空容器,其余的全部自动分配;

V2.8版本L区较小,但是V3.0版本的Smart的子程序的L区有1024个字节,因此子程序"子程序总容器"有足够多的LDxx空容器分配从属于它的子程序(启动停止保持---子程序).

最简单的全自动分配存储区250903_Const.zip


在新的V3 smart上应该可以只使用L不使AC了,因为L大到1024个字节了,之前使用AC是因为L只有64字节。

13478405725
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9022条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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