签到有奖
消息提醒
运维工程师专区
官方商城
点击复制链接
关注该帖后,有多人参加探讨会对您通知与提示!
帖子
精华
被关注
论坛等级:奇侠
注册时间:2009-03-27
钻石 如何晋级?
发布于 2025-09-06 16:22:43
76楼
我的建议是不使用AC累加器
引用69楼详细内容:
是的,建议很好尤其是AC的使用,只是探讨了回收的一种可能性,可行性的方案,程序没有做,而且回收相对复杂,想要用回收回来的存储区更复杂。只做了最简单,无冗余,无容错的递增式分配,程序也做了多次断电上电测试了,VB0断电保持应该不会出问题,关键是子程序要按照例程类似的规范来写,子程序里也可以包含物理地址的首地址指针,解决物理AI/AQ/I/Q点的映射问题。这个程序总体还是不太中看,更不中用。
引用68楼详细内容:
每个子程序除了记录本身 static 的数据外,还记录了下级子程序的数据指针
通过指针可以确认本子程序是否被分配过内存地址,这样不会因为“乱序”或局部扫描引起数据地址错乱的问题,哪怕在 中断 中也能使用,学到了
最开始举的例子真心容易误导
提到的 “V7700.0的下升沿是天然的回收内存的绝佳标志位,代表可以释放回收分配给它的内存”,这句话怎么理解呢,求指教,确实没看到初始化或者回收动作
这 VB0 起还是断电保持的,当修改了程序后(扩大了 static 的数量),很有可能地址会重新排列,没有初始化或者回收,内存排布可能会有问题(指针≠0,不会重新分配)
分配时能区分 非保持 和 保持 就更好了,firstscan 时直接复位 非保持 区域
另外有个建议,分配核心函数中,使用 AC 前,建议保存 AC 值,在完成后恢复 AC,这样外部可以随意使用,比如外部 循环+AC 调用子程序就能放心使用
引用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字节。
请填写推广理由:
2026共启We来,驰骋工控路,领跑新征程
助你技有所长,论有所获
首次发帖探讨工控技术话题 立获新人礼包,100中奖哦! (包含周边、书籍、兑奖西币)
共有9022条技术帖
恭喜,你发布的帖子
快扫描右侧二维码晒一晒吧!
再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!
分享
只看 楼主
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!