找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
上位我是用高级语言按照浮点数的IEEE754表示规则转换过来的,读到的是这样的:
十进制:DB1.DBD7=-1.073741824E9
十六进制:DB1.DBD7=CE800000
十进制:DB1.DBD11=-1.1811160064E9
十六进制:DB1.DBD11=CE800001
十进制:DB1.DBD15=1.974461964222464E9
十六进制:DB1.DBD15=CE8CCCCD
十进制:DB1.DBD19=1.1811160064E9
十六进制:DB1.DBD19=4E800001
16进制的读取与PLC的一模一样,但是只有一个数计算的结果是对的。我想应该是PLC传输的问题
L -1.073742e+009 CE800000
T DB1.DBD 7 CE800000
L -1.073742e+009 CE800001//同样的数为什么16进制表示于上面不同?
T DB1.DBD 11 CE800001
因为同一个浮点数PLC用显示了两种16进制,所以我认为另外两个浮点数的16进制表示出了问题,导致上位读取错误,为什么会这样?
请指教,谢谢
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
1.使用16进制转IEEE754的小程序可以检验转换程序是否正确。
0xCE800000=>-1073741824
0xCE800001=>-1073741952
0xCE8CCCCD=>-1181116032
0x4E800001=>1073741952
结果符合你的PLC程序中浮点数。
上位机中读出来的十六进制数据是正确的,说明通讯正常,检查你所编写的十六进制转IEEE754程序。
2.同样的浮点数为什么转换为16进制不同?
拷贝了你的STL语句,在线测试显示DB1.DBD7和DBD11都是0xCE800001。
可能的原因:
1.你的PLC中-1.073742e+009最后三位没有显示出来,将监视窗口数据格式设置为十进制比较后三位;
2.你的PLC中-1.073742e+009不是一个常数,后三位在指令执行期间有变化,精度较高的传感器稳定时读数也会些微变化。
《16 to IEEE754 小程序》
http://bbs.e10000.cn/images/upload/2007/11/02/080903.rar
《符合IEEE-754标准的十六进制数转换为浮点数》Delphi语言
http://topic.csdn.net/t/20030625/15/1955893.html
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
专家置评
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城