有趣生活

当前位置:首页>汽车>plc补码怎么取出?负数补码惹的祸

plc补码怎么取出?负数补码惹的祸

发布时间:2026-08-16阅读(1)

导读在程序设计调试的时候,难免会发生一些低级错误,究竟是什么问题让两个人困惑了半天呢?言归正传,一个朋友要更换一台加工中心的主轴变频器,相应的程序块是STL代码....

在程序设计调试的时候,难免会发生一些低级错误,究竟是什么问题让两个人困惑了半天呢?

言归正传,一个朋友要更换一台加工中心的主轴变频器,相应的程序块是STL代码,让我帮忙解读一下控制字和状态字。这段STL的程序并不复杂,找了个时间将程序从头到尾捋了一遍,把通信报文的状态字和控制字逐位解析出来。

程序块接口

部分STL代码

朋友将我分析出来的报文和实际的PROFIBUS报文(设备从总线捕获的)数据对比,发现报文中速度数据不太对。为什么报文中的速度值0XFBC4不在正常速度范围内呢?

程序中给速度做了限定:

  • 正转速度给定速度>=100%,输出0x4000,所以速度的取值范围0X0000~0X4000;
  • 同理反转最大输出0XC000,最高位符号位,反转的速度范围为0X8000-0XC000。(这里是错误的)

04 4F FB C4 //04 4F这个两个字节控制字,FB C4这两个字节是给定速度06 B7 FF 9D04 47 00 0002 33 00 0004 4F 00 0002 B7 FF A504 47 00 0002 33 00 00

变频器速度的取值范围

我把STL代码又分析了一遍,从程序解读出来报文都是正确的,两个都搞程序的人讨论了半个小时后,终于恍然大悟,原来是负数,[笑哭][笑哭][笑哭],此时变频器是反转的。变频器反转的取值范围不是0X8000-0XC000而是0X0000-0XC000,也就是十进制的0~-16384,报文中的0XFB C4转换为整数就是-1084。

N年前就知道计算机中数值用补码存放,到了实际用的时候脑子就瓦特了,错以为计算机用原码存储。

总结:

在计算机系统中,数值一律用补码来表示和存储。PLC中整数用补码表示,正数的原码等于补码,负数的原码取反 1才是补码。

原码反码补码知识

相关文章

    Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图