中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

台达论坛

fluketop kollmorgen 抖音 西门子减速电机 德嘉 台达 英威腾 泓格论坛 西门子 我和LOGO!有个约会 FLIR红外热像论坛 【有奖活动】英威腾 “Ni美国国家仪器 “PLC发展趋势大讨论”活动圆满结束 艾睿光电产品体验活动 cc-link图文征集活动 西门子SMART LINE V3
工控论坛首页 台达PLC → 浏览主题: 功能块计算
发表新帖 回复该主题
回帖:1个,阅读:186 [上一页] [1] [下一页]
* 帖子主题:

功能块计算

分享到
58
369710040
文章数:1
年度积分:58
历史总积分:58
品牌积分(台达):0
注册时间:2021/9/25
发站内信
发表于:2021/9/27 8:20:20
#0楼
为什么把功能块局部符号A、B顺序对换一下就没有数据了?
附件 1.jpg

附件 2.jpg

附件 3.jpg



31487
cvlsam 版主
文章数:11407
年度积分:1347
历史总积分:31487
品牌积分(台达):30
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2021/9/28 9:37:18
#1楼
以下是引用3697100402021/9/27 8:20:20的发言:
为什么把功能块局部符号A、B顺序对换一下就没有数据了?
附件 1.jpg

附件 2.jpg

附件 3.jpg




导致该问题的原因是产生了地址重叠,这是程序员的编程错误。
当程序开始运行时,由于A,B变量类型为DWORD,因此系统为其分配了2个Word的地址。

附件 workpicture1.jpg

附件 workpicture2.jpg

系统分别给A变量赋于了D200开始的起始地址,给B变量赋于了D202开始的地址。

由于使用了DMUL指令,因此运算结果占用2个DWORD空间。


附件 workpicture3.jpg

也就是说,第一次DMUL的运算结果存放在D202开始的连续两个DWORD空间,即D202存放了结果的低DWORD数据,D204存放了高DWORD数据,因为结果是8,因此D202=8,D204=0
同样,第二次DMUL的运行结果存放在D200开始的连续两个DWORD空间,D202存放了高DWORD数据,因为结果是4,因此D200=4,D202=0

由此,产生了地址重叠,导致B的输出变为0。

那么,为什么调换了位置就好了呢?
原因在调换了位置后:
第一次DMUL指令的输出结果A占用了D200,D202,由于其数值比较小,因此数值不足以需要用到D202的位置,所以即使发生了地址重叠,D202的数据依旧被B所覆盖,当A的数值足够大时,结果仍然不会正确。

正确的做法是为A,B分配足够的存储空间,由于台达DVP系列并不支持64位的LWORD数据类型,因此你可以为其定义数组,从而使得变量A,B占用64位空间。




附件 workpicture4.jpg

Good Luck~
+20
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2021 Gkong.com, All Rights Reserved

156