回复:到底子程序使用AC的前后是否要保存和恢复原有的AC值?

已锁定

xinchen

  • 帖子

    240
  • 精华

    1
  • 被关注

    5

论坛等级:侠圣

注册时间:2015-11-05

白金 白金 如何晋级?

发布于 2023-01-30 10:55:15

45楼

展开查看
以下是引用芳季在2023-01-22 21:58:45的发言 >33楼

我想问一问你个人。造成ac要保存一些数据,是什么原因什么需求的必须?你把ac保存到V等地方就什么事也没有了。不就是改一下地址。谁都不用做保存恢复动作。对全体程序都有利。你也知道自己打扫你上层自己用过的自己保存了就谁都不用再烦此事了。


你试试举例有什么做法一定要AC跨调用回来之后要AC数据是原好的?你一下子举不出。而且应该始终都举不出。无非就是上层或前一个子程序懒,随便把东西放在得心应手的AC里。然后谁都想得心应手,但是被占住了,只能保存恢复。


反过来,从来都没有靠ac保存数据,而是作中间变量用,如:一个字节型整数转浮点数然后输出:


BTI LB0 AC0


ITD AC0 AC0  


DTR AC0 LD1


哪会占住AC?(难道最后这个LD也写成AC?就这样就占住AC?那你自己后来的程序又用AC吗?)即使AC有值也是垃圾,可以随便让下一个使用者覆盖。没损失。


谁干的程序要占住AC?例子没人能举出,但是就有见过做保存恢复的。既然没有因为,何必有所以?



以下是引用xiatianyun在2023-01-22 20:40:20的发言 >:大过年的没什么事,...

引用详细内容:

大过年的没什么事,除了做饭吃饭。

两种都是规则。

如果采用第二种,看似很合理很理性很懂得自律,举个例子,如果父程序先后调用了两个子程序,调用前和调用后父程序分别做了AC保存和恢复,那就是先后两次了,在两个子程序间夹杂着一些关于AC的操作,影响对程序理解的顺畅度了。比起直接两个子程序调用的做法舒服程度就大打折扣了。

第一种,从父程序角度看很顺畅。唯一的要求是子程序自己“打扫卫生”和原样恢复。

同样是保存和恢复,代码一个放在父程序一个放在子程序,不多也不少。但第一种流畅第二种费劲。

唯一的分歧恐怕是芳季前辈说的同一套系统存在这两种规则编写的程序如何处理了。如果是我,我遵循第一种规则,如果有子程序代码就修改子程序实现自己打扫AC和恢复。如果没有代码?。。。我知道它子程序用了什么AC?只好封装再出发了:AC0-AC3都封装在新的子程序里面。

----------------------------------------------------------------------

没觉得AC 有什么不好的,虽然一样可以使用V来替代。不过在涉及数据类型转换之类的我一般先考虑AC。

想到的用AC的场景有以下几种:

1.跨子程序传递参数;(污染子程序,个人是强烈不建议的,也不建议用V什么的代替,除非真的不得已)

2.类型转换;(推荐,如从byte->float,明显省了几种类型的临时变量)

3.指针;(尤其是做循环时,习惯用AC1,而不用L,临时变量都用变量名访问而不是地址)

-------------------


什么时候“一定要AC跨调用回来之后要AC数据是原好的”

像子程序1有循环,循环体内调用子程序2,子程序2内再有循环,此时1和2各自保存恢复AC;

以仓库为例,仓库有排/列/层,最终到库位,每个库位有多个信号,我习惯以8列为一个分控柜(方便按字节处理与或非),多个分控柜做一个子程序1(动态配置分控柜个数,信号整理等),分控柜内做子程序2(子程序2内处理分控柜内部的信号,如每库、每列)

------------------------


“当两种思维的子程序一齐使用的话矛盾产生了”

同意32L的,如果子程序没有自己保存恢复AC,那就改子程序,如果加密了就去密码再改,如果还不行,就只能先测试子程序有没有用AC,用了哪个,再进行封装处理;


就像modbus库,我想没几个人在调用前后不管三七二十一的保存所有AC,再恢复的吧


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9142条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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