技成培训网 技成学习APP 技成工具箱 技成企业服务

欢迎回到技成培训网

技成培训网

电工题库宝典

技成电工课堂

PLC练习题

技成PLC课堂

变频器故障查询

技成PLC学吧

伺服驱动故障查询

技成PLC网校

当前位置:技成首页 > 文章中心 > 技成百科 > db里面的位是什么性质的,db1.dbx2.0与db1.dbx2.1是两个独立的位,但是在如下的程序中却一起变化是怎么回事

db里面的位是什么性质的,db1.dbx2.0与db1.dbx2.1是两个独立的位,但是在如下的程序中却一起变化是怎么回事

郑志武 发布于2012-12-04 22:59 5 0 标签:

程序如图所示,当我把db点换成其他的m点、q点时候是不存在这个问题的。只要换成db1里面的位,就会一起变化。是因为db1里面的位有什么特殊性吗?


图片说明: 1,程序原文

佳答案

呵呵,你也遇到了我们曾经都遇到的问题。
那么,为什么会遇到这种情况呢?
原因在于:
1.在输出实参为m、i、q、pq时,fc输出形参(指针)指向实参实际存储地址,如果在fc中,没有对输出形参形成实质性操作,则形参指针所指向的实际存储区内容不会改变,对于参数传递过程而言,仅仅是调用时形参指向实参,调用结束时形参指针区域释放的一个过程。


2.在输出实参为db块时,fc开始调用时,先在v区为该形参分配一个存储区(可能是位,也可能是字节或其它,根据形参参数类型而定),每一次调用fc,根据调用fc时所传递的实参类型不同,为输出形参分配的v区区域可能不同,比如一个fc有一个位输入形参,一个位输出形参,在次调用时,实参分别是i0.0,db0.dbx0.0,则为输出形参分配的v区为v20.1;第二次调用fc,实参分别为db0.dbx0.1,db0.dbx0.2,则为输出形参分配的v区为v20.2,原来的v20.1被输入形参所对应的实参db0.dbx0.1内容所填充。如果第二次调用fc时,实参为m0.1,db0.dbx0.2,则为输出形参分配的v区仍为v20.1。其后,fc在实际运行时,针对输出形参(数据块)的处理其实都是在对该v区进行处理,在fc结束调用后,不管在fc中有没有对该v区进行实质性处理,该v区的内容均会被拷贝至另一个存储区,比如l区,该l区与实参区对应,但不在同一区,此时并一直等到本次ob循环结束,该l区内容都不会被拷贝至实参区,所以这个时候实参区的内容还不会有变化。

那么,怎么避免这种情况呢?有2个办法:
1.确保每次调用fc时,初始化所有output参数。
2.把输出类型由output改为in/out参数。

不知道我说的你能不能理解,详情请参考我在百度文库上的文档。
https://wenku.baidu.com/view/7655e8f9770bf78a65295471.html


参考资料:https://wenku.baidu.com/view/7655e8f9770bf78a65295471.html

若有收获,就点个赞吧!

文章来源于网络及文献如有侵权请联系站长
分享到:

微信扫一扫分享

阅读与本文标签相同的文章

相关推荐

最新文章 热门文章
最新课程 免费课程
PLC资料下载 电工电气资料下载
应用新秀
变频器故障代码查询APP
伺服故障代码查询APP
技成
手机APP
热门标签