关于S7-200PLC程序中数据类型转换问题 点击:1373 | 回复:0



独角怪兽

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 222回
  • 年度积分:0
  • 历史总积分:310
  • 注册:2006年3月05日
发表于:2007-11-14 10:02:00
楼主
 写作此篇文章的目的缘自工控网论坛的一篇文章《S7-200编程小技巧》见http://gx.gongkong.com/tech/detail.asp?id=292970 文中实际上是介绍了一种数据 类型转换的方法。该方法是基于对数据在PLC内存中存储格式理解的基础上提出的。对于字节类型BYTE转换成无符号整型WORD,无符号整型转换 成无符号双整型DWORD,无疑是正确的。但是对于有符号整型INT转换成有符号双整型DINT时,问题就来了,对于有符号整型的负数转换成双整 型时,还是对的吗?让我们来分析一下,有符号整数在PLC内存中是以补码形式存储的,补码表示法中,正数采用符号-绝对值表示,即数的最 高有效位为0表示符号为正,数的其余部分则表示数的绝对值。例如,假设机器字长为16位,则[+1]补=0000000000000001,[+127]补 =0000000001111111,[+0]补=0000000000000000。当用补码表示法来表示负数时则要麻烦一些。负数X用2^n-|x|来表示,其中n为机器的字长。 当n=16时,[-1]补=2^16-127=1111111110000001,显然,最高有效位为1表示该数的符号为负。按照文中的方法,对于负数扩展成双整型时,最 高有效位是0,不是负数,而变成了正数,肯定是错了。那么,我么应该怎么做才是对的呢?这涉及到用补码表示数时的符号扩展问题。所谓符号扩展是指一个数从位数较少扩展到位数较多(如从16位扩展到32位)。对于用补码表示的数,正数 的符号扩展应该在前面补0,而负数的符号扩展则应该在前面补1。在http://www.smart-sys.cn相关文章http://www.smart-sys.cn/article/show/44有程序范例。


热门招聘
相关主题

官方公众号

智造工程师