回复:SCL编程问题

荣海

  • 帖子

    371
  • 精华

    0
  • 被关注

    10

论坛等级:侠士

注册时间:2009-04-02

普通 普通 如何晋级?

发布于 2010-07-15 10:39:42

10楼

楼主,我在5楼所使用的转换公式有误,现予以更正。希望所有对此转换产生误解的朋友,和将要使用SCL进行编程的朋友,对此引起重视,给大家造成的误导,感到很抱歉!
上述转换公式错误原因:“DWORD_TO_REAL仅仅是从源数据拷贝位串至目的变量”,而“DINT_TO_REAL函数将把源数据转换并按照IEEE REAL的格式存储到目的变量。所以从WORD到REAL的转换,为了获得正确的“REAL”数,必须总是通过中间步骤“DWORD_TO_DINT”和“DINT_TO_REAL”来实现。
上述转换公式更正为:
DB2.DBD10:=DWORD_TO_WORD(DINT_TO_DWORD(REAL_TO_DINT(DINT_TO_REAL(DWORD_TO_DINT(DB2.DBD10))+INT_TO_REAL(1))))); //补充:对于DWORD类型数据正确
所以这样一来转换就变得非常复杂了,所以不要采用REAL数据类型相加了,因为1是INT类型的,所以将两个数转换为DINT来运算比较方便,当然这样一来数据精度可能存在问题。
DB2.DBD10:=DWORD_TO_WORD(DINT_TO_DWORD(DWORD_TO_DINT(REAL_TO_DWORD(DB2.DBD10))+INT_TO_DINT(1))); //补充:错误。
在数据类型转换时,分为两类数据类型转换,A类隐式数据类型转换,B类显式数据类型转换,在使用的时候需要非常小心。上述使用到的转换函数中,WORD_TO_DWORD、INT_TO_DINT、INT_TO_REAL、DINT_TO_REAL等属于A类转换函数,其它属于B类转换函数。
物竞天择,适者生存!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54615条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。