回复网友关于“查找一组数据的最大数和最小数”的问题 点击:486 | 回复:7



wanggq

    
发表于:2012-04-29 16:22:55
楼主

  引用 aoteerxsp 的一个帖子内容:

 

   此时没有PLC,不知道这个找D10-D19的方法最大数可行不?

 

  原贴的图片内容如下



 

  wanggq对这一问题的回复:

 

  没有PLC实体也可以根据图片中的梯形图程序片断作出如下的 判 断

 

     这个指定寻找D10-D19 这10个数据之最大值的方法是不行的!

 

  判断的依据是:

 

  第一,该片断中的寄存器D100的初值没有进行设定合适的"初始值"。如果D100的“初值”比D10-D19这个范围内每一个数据都大,则该片断不可能查找出指定范围内的“最大值”!

 

  第二,假如D0的“初值”为0,则该片断实际查找的范围就是:D11至D20,而并不是指定的D10至D19这个范围!

 

  第三,该片断中的“修饰指针”的范围设定不正确。即便D100的“初值”不大于指定范围之内的数据最大值,但是,倘若紧接的指定查找范围之外的D20其内容大于指定范围内数据最大值,则该片断之查找运行的“结果”是一个“错误的结果”!

        



楼主最近还看过



wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-29 16:40:08
1楼

 

  可能有的网友会认为D100是一个非保持型的数据寄存器,所以它的初值是“0”,怎么可能大于指定范围内的数据呢?

 

但是,请网友们注意:16bit数据寄存器的内容范围是K -32768 到 K32767 。倘若指定的10个数据都是负数,这“0”不就大于指定范围内的最大值了么!

    

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-29 20:34:17
2楼

 

  顶楼引用网友的原图片不够清楚,我把它整理成清晰的梯形图方便大家分析.我们可以方便的看出该程序片断的功能实际所查找的数据范围与目的所指定的查找范围是错挪了一节的.

 

 

  

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-29 21:29:30
3楼

 

     从楼上的图片我们可以看出:由于该片断实际查找的数据范围与指定的数据范围不一致,当指定范围的数据最大值出现在D10,或者在指定数据范围之外的D20的内容比D10-D19的任何一个数据都大时,皆会引起查找的结果出错!

  

  如果你要把“变址指针”(即前面叫的“修饰指针”)的“加1”运算放在前面运算,为了保证该功能片断能够正确的实现查找D10-D19这一数据范围,则需把“D10E”改为“D9E”

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-29 21:48:43
4楼

 

   在实际运用上,我们通常不止希望程序只做一次的“查找数据的最大值”。所以,实际运用上,每次要做最大值查找之前都要先对“指针”归零。这个归零的作用不只是为了多次的进行“查找”,而且还能保证每次查找开始时都是从指定起点开始查找。

 

下面我给一个较好的改进片断供大家参考:

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-29 21:57:06
5楼

 

   三菱FX适用的 查找指定数据范围(D10-D19)的最大值的功能片断:

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-01 21:22:18
6楼

 

   我给出的改进片断还可以进一步的改进:4楼、5楼的片断把D10-D19 这10个数据查找一遍需要10个扫描周期,如果改写成下面的参数,则只需 9个扫描周期就能实现查找出D10-D19 这10个数据中的“最大值”!

 

  比较起点改成:D11 ;指针范围设置成:0-8 。

         

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-09 14:54:43
7楼

 

  相关内容请参阅《在FX系列上怎样查找出D10-D49中的最大数和最小数》一贴。

          

SSI ļʱ