三菱PLC加减时总是过冲 点击:4059 | 回复:10



hike_1

    
  • 精华:0帖
  • 求助:3帖
  • 帖子:13帖 | 109回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2014年8月10日
发表于:2015-08-10 13:20:33
楼主
求助帖10分-未结帖

写的一段数值加减程序,M50是加按钮,M51是减按钮,按一次M51减0.1,一直按下去每0.3s减0.1一次,范围是0.1-10,为什么每次减时都过冲,减到-0.1才停止?




yjkda

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 49回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2010年5月17日
发表于:2015-08-10 16:46:39
1楼

建議用DESUBP D200 d60 d200,你試試看

龙腾天宇

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 217回
  • 年度积分:0
  • 历史总积分:306
  • 注册:2015年3月01日
发表于:2015-08-10 22:37:42
2楼

首先楼主的想法和程序指令都没有问题————————————这里你遇到的是计算机专业的问题了,小数在计算机内部的表示使用指数来表示,是逼近这个数,不能精确的表示。这种存储方式决定了它是会有误差的,而楼主的浮点数相减,减数又要存入内存又会产生累计误差,这里你可以用编程软件做模拟,监视(D201,D200)就看到了,误差位好像在小数点后第七位。这是误差前提,关键点是比较指令,PLC的比较指令可不管你误不误差,它之比较当前准确值,所以你的D62如果设为0,D200有可能会减到0.0000024,就会再减0.1,得-0.0999976也就近似是-0.1了。在编程的时候,在涉及到判断小数是否相等的时候要注意。不能直接比较。

不死的金丝楠

  • 精华:2帖
  • 求助:0帖
  • 帖子:1200帖 | 11283回
  • 年度积分:2326
  • 历史总积分:62523
  • 注册:2006年8月05日
发表于:2015-08-11 08:40:35
3楼

个人感觉楼主思维太僵化:加减数可以是1-100,然后做浮点数处理一下再乘以0.1,最终结果不就是如此了?

楼主,换个思维,就等于换一种活法......

不及追忆

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:35
  • 注册:2015年7月11日
发表于:2015-08-11 09:55:00
4楼

同意三楼的想法,我也习惯这种思维,二楼解释的也很清晰,这是要经常留意的细节

hike_1

  • 精华:0帖
  • 求助:3帖
  • 帖子:13帖 | 109回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2014年8月10日
发表于:2015-08-16 11:57:12
5楼


回复内容:

对: 不死的金丝楠 个人感觉楼主思维太僵化:加减数可以是1-100,然后做... 内容的回复!


谢谢热心提醒。正所谓有得必有失。经过二楼讲解,这不又增长见识了吗?遇到问题不能逃避,尤其是做研究,尤其是作为技术人员,我觉得找到原因才是最重要的。

hike_1

  • 精华:0帖
  • 求助:3帖
  • 帖子:13帖 | 109回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2014年8月10日
发表于:2015-08-16 11:57:44
6楼


回复内容:

对: 龙腾天宇 首先楼主的想法和程序指令都没有问题——————————... 内容的回复!



真心感谢!!!!!!!!!

  • 精华:1帖
  • 求助:0帖
  • 帖子:7帖 | 166回
  • 年度积分:0
  • 历史总积分:954
  • 注册:2008年2月25日
发表于:2015-08-19 08:58:35
7楼

浮点运算的精度丢失一般发生在位数差超过7位的加减运算,对于DECMP比较指令,我还没遇到过出现精度丢失的问题。

听楼主这么说我仿真验证了一下,但是为什么我这里减到0.1就停止了?看起来一切正常哦。楼主你减到-0.1才停,实际上是加上是多减了2次。

只仿真这一小段程序是正常的,那么建议楼主再查下程序,是否为其他程序数据的影响导致,也可以上传程序,我帮你查查看

hike_1

  • 精华:0帖
  • 求助:3帖
  • 帖子:13帖 | 109回
  • 年度积分:0
  • 历史总积分:45
  • 注册:2014年8月10日
发表于:2015-08-19 11:19:05
8楼


回复内容:

对:   浮点运算的精度丢失一般发生在位数差超过7位的加减运算,... 内容的回复!


你好,如果方便,你可以尝试一下将D62改为0,D200改为15,即15减到0停止,我测试的时候有时候会减到-0.1,有时候会在浮点数表示的e方级。

8566

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1245回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2015年1月25日
发表于:2015-08-19 11:59:09
9楼

EW4YRTGQW5GFGFFYEW

淤泥

  • 精华:0帖
  • 求助:6帖
  • 帖子:15帖 | 336回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2013年11月26日
发表于:2015-10-06 16:53:10
10楼

学习了!!!!!!!!!!!!!!!!


热门招聘
相关主题

官方公众号

智造工程师