wxk8000
级别: 略有小成
精华主题: 0
发帖数量: 48 个
工控威望: 225 点
下载积分: 864 分
在线时间: 100(小时)
注册时间: 2009-01-04
最后登录: 2022-11-02
查看wxk8000的 主题 / 回贴
楼主  发表于: 2014-02-27 22:18
图片:
请教大家一个问题:
最近在使用模拟量输出编程的时候发现一个问题,在标定的时候。
储存区AQW的用法?为何ADD_I指令将两个数相加不能直接放在AQW中?提示错误“指令操作数的存储器区无效”
[attachment=118211]

提示如下错误:


而可以放在LW中,再通过MOV_W传送至AQW中
如下图所示



有人说是“数据类型不符”
ADD_I也是将两个整型数相加得到的结果也是整型啊

AQW也是整数啊

都是整型为何不能直接OUT-AQW呢?

也有人说:

整数运算不支持OUT-AQW着整数

读写不能同时进行
[ 此帖被wxk8000在2014-02-27 22:25重新编辑 ]
wxk8000
级别: 略有小成
精华主题: 0
发帖数量: 48 个
工控威望: 225 点
下载积分: 864 分
在线时间: 100(小时)
注册时间: 2009-01-04
最后登录: 2022-11-02
查看wxk8000的 主题 / 回贴
1楼  发表于: 2014-02-27 22:22
另外,昨天问了一个好友,ADD_I在输入引脚可以接AIW,就是输出引脚不能接AQW,说是手册和西门子软件这么规定的,如下图所示:



  



也就是说必须用一个MOV_W指令将转换后的结果送入AQW



虽然手册上这么规定,但是我不太理解
zhanghuan
级别: 略有小成
精华主题: 0
发帖数量: 69 个
工控威望: 241 点
下载积分: 715 分
在线时间: 106(小时)
注册时间: 2007-08-23
最后登录: 2024-12-26
查看zhanghuan的 主题 / 回贴
2楼  发表于: 2014-02-28 00:15


按图中红色的插入ROUND试试,不用MOV
在红色ROUND指令之前,你用的是浮点数计算,而后面又整数计算,显然LD22数据类型冲突,必须加入取整指令
zhanghuan
级别: 略有小成
精华主题: 0
发帖数量: 69 个
工控威望: 241 点
下载积分: 715 分
在线时间: 106(小时)
注册时间: 2007-08-23
最后登录: 2024-12-26
查看zhanghuan的 主题 / 回贴
3楼  发表于: 2014-02-28 00:27
上面只是引用ROUND指令,正确的程序应是如下图

wxk8000
级别: 略有小成
精华主题: 0
发帖数量: 48 个
工控威望: 225 点
下载积分: 864 分
在线时间: 100(小时)
注册时间: 2009-01-04
最后登录: 2022-11-02
查看wxk8000的 主题 / 回贴
4楼  发表于: 2014-02-28 09:33
我按照您说的试了,还是不行。



请问是什么原因
wxk8000
级别: 略有小成
精华主题: 0
发帖数量: 48 个
工控威望: 225 点
下载积分: 864 分
在线时间: 100(小时)
注册时间: 2009-01-04
最后登录: 2022-11-02
查看wxk8000的 主题 / 回贴
5楼  发表于: 2014-02-28 09:36
我贴一个西门子论坛的回复,请大家在讨论讨论

“你用语句来观看这一个add指令就知道为什么了。
AQ是不允许读的,一个add指令可以分成两个下面的指令
LD     SM0.0
MOVW   1, AC0
+I     2, AC0
ld是配角没问题。mov指令没有问题。+I指令必然要先把ac读出来准备运算,然后把2加上去,然后再把结果写进去ac0。结果就产生了读的操作。然后就错了。”
zhanghuan
级别: 略有小成
精华主题: 0
发帖数量: 69 个
工控威望: 241 点
下载积分: 715 分
在线时间: 106(小时)
注册时间: 2007-08-23
最后登录: 2024-12-26
查看zhanghuan的 主题 / 回贴
6楼  发表于: 2014-03-07 23:30
按您的意思,我也试了,确实平常没这样深入研究过,只是按手册的规定去编,领教了!