签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
仪表采集的某个16位数据存放在VW502中,实际值是35250,也是我们需要的数据,而系统在线监视默认是有符号数-30286,指令用错了吗?请哪位大师指点迷津,谢谢!
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=64&a_id=1882730&s_id=83&num=16
同一个内存地址里面储存的数据,既可以把它当作字节(无符号 或 有符号的整数),也可以把它当作字(无符号 或 有符号的整数),还可以把它当作双字(无符号 或 有符号的长整数,或者 是浮点数)!
在作者没有告诉别人的前提下,每个人看到的结果很大可能就是不一样的。所以,你说的显示的结果出乎你的意料,那只是出乎你的意料而已!
有一个问题:
既然你的仪表采集的是浮点数,那么它就应该是 4 个字节的数据(两个 WORD)。从你的通讯读取指令来看,确实是读取了两个 WORD 的数据。
不过,它的储存地址起始地址是从 VB500,并不是你说的 VW502!
若这个数据真的是浮点数,那你下面的指令应该是直接使用 DI_R 指令,把 VD500 转换成 浮点数才对!注意,是 VD500,不是 VW500!
除非,仪表那边传送来的数据已经乘以一个系数,然后取整成一个不大于 32767 的整数,再转成一个 WORD!以前在 DCS 系统中,为了节省传送的字节数,我这么干过!
抱歉,我的表达有所欠缺。
仪表通讯回复2个16位无符号整数,第2个数据是要有用的,放在VW502里面,现在数据超过32767系统就默
认是负数,我需要的是原始的无符号数正数,而不是负数 。
改如何转换,谢谢!
LD SM0.0
MOVD 0, AC0
MOVW VW0, AC0
MOVD AC0, VD2
这样vd2就是你要的数。看看行不行?
你确定你的vw0只能是无符号16位整数。
师傅,为啥用AC0?
仪表是绝对值编码器,modbus通讯,转一圈数值增加1024,可不断累加
1. 如果你的数据读取过来以后不需要进行加减乘除等等运算,那就直接在 HMI 上设置变量为 无符号整数,就可以正常显示了。
2. 如果你的数据读取过来以后还需要进行运算,那么建议你用 MOV_W 指令把 VW502 传送到 VW602。确保 VW600 = 0。然后再进行运算的时候,直接使用 VD600 就可以了。
你这个问题很好,应该是你数据读取以后处理的问题,你可以2个地址一起读一下看看数值是多少。。
将VW500存放到VD区。
回复你4楼的提问,你想200smart软件中,因为没有16位数据传送到32位的mov指令,只能临时先将16位数据临时存放到累加器中(AC0~AC3)的任意一个,再转传出来到VD寄存器,这样可以回避数据溢出的问题。
我在找答案那边看到,也做了一点建议,你确认读取到40001的数据范围是什么?根据范围再来确定处理方法。
当然在不知道数据范围的情况下,将VW数据存放到VD是可行的。
如果是编码器数据,那这个数据可能是VD500,你状态图表监控一下,或者看看这个编码器的说明书。
先整数转成双整数,再进行放大
既然超过了整数的上限了,那就只能用双整数了呀
为啥??你是问为啥要用ac地址还是问为啥要这么做?
不用ac用v都可以的。目的是扩展成32位整数。用I_DI指令只能处理有符号数。所以就这样扩展。
你绝对值编码器,跟这事情有啥关系?一个问题归一个问题解决。解决了这个问题再考虑你绝对值编码器什么回事。或者你一次性说清楚什么回事。
无缘无故的……modbus读2个数据,又有两个字节不要。又编码器又仪表。又绝对值又干啥要处理这数值。绝对值的当前值又干嘛无符号,绝对值明明是有符号的?
我感觉一下子什么都联系不起来。
VD是两个字 也就是说要两个单位的modbus地址合起来 所以你应该把 双整VD转换成浮点数VD
你是不是要改成双整数
最终的解决方案是什么?
我觉得你可以先确定数据来源是是不是已经超过16位,若已经超过直接用VD是否可行呢?
终于看到一个明白人了,还是王老师厉害啊。
楼主,你知道整数无符号最大值是多少吗?
你知道整数有符号最大值是多少吗?
你知道双整数无符号最大值是多少吗?
你知道双整数有符号最大值是多少吗?
顺便还问下,
你知道整数无符号最小值是多少吗?
你知道整数有符号最小值是多少吗?
你知道双整数无符号最小值是多少吗?
你知道双整数有符号最小值是多少吗?
你的MODBUS Count读数是4,而不是2.不信你多看下手册说明。
搞清楚数据存储方法,各种数据的字节数,这样更有利于理解这个。
这个就比 自己之前来回加减算出来的简洁多了 累加器的典型用法!
学习到了,接收到的就是有符号的负数啊...
让我想着如果是负数不行加上最大值呢....
收到的双字,且超过字的上限值,你为啥非要当做字用呢?直接使用双字整数计算或者展示不就行了
我有点那个,要是编码器装反转了的时候,一走便是负数,楼主会怎样?
分享
扫码分享好友 任选多种好礼
收藏
有帮助
1. 文件大小:上传文件的大小请限制在2M以内。
2. 文件格式:请不要上传.exe文件,系统支持的格式有:.avi,.wmv,.mp3,.rar,.zip,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.wma,.asf,.txt,.7z
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录