s7-200 大量数据的大小排序问题

在大约2秒的时间内,有大量的模拟量数据经模拟量输入口输入,已经转化为实际数值,每一个扫描周期来一个数,现在的问题是如何把其中最大的50个数据取出来并按由大到小的顺序依次放在相邻的存储单元里。

问题补充:
我用的循环比较,大于等于后一个数,小于等于前一个数时,把数写入这个位置,后面的依次移一位,可问题是最开始的五十个没法进来,我不知道怎么处理了 !

 

 
 针对我的思路,大家给点意见.

最佳答案

首先定义一张表,每次循环将数值存入表中,存满50次以后,根据下面的排序程序,进行排序
 将下一个循环进来的数据保存在另外一个区(如:vw200),然后通过FOR 循环,与每一个数进行比较,从大数开始比较,如果vw200与到第一个比vw200的数值,将后面的数据用BMB指令后移一位,将vw200数据保存在该位置
 以下数据处理上同

 你也可以不用排序,在进数据的时候,就采用上面的方法
 附:排序程序如下:

 排序程序注释:
          该程序主要是对字节、字、双字连续数据区进行排序,开始地址为vb0(可以修改),长度控制vw100,选择排序的字节、字、双字的长度,类型选择用 vw102区,分类如下
        vw102(值)                 字节                  字                          双字
           0                                     √
           1                                                             √
           2                                                                                              √
        程序默认长度是10,类型是字,升序(请在DB块中设定)

   主程序:
   LD     SM0.0
   CALL   circle:SBR0
   子程序:
   circle:SBR0
   TITLE=程序注释
   Network 1 
   LDW>   VW102, 2
   OW<    VW102, 0
   CRET
   Network 2 // 网络标题
   // 网络注释
   LD     SM0.0
   MOVD   &VB0, AC0
   MOVW   0, LW20

   Network 3 
   LD     SM0.0
   FOR    LW0, 1, VW100

   Network 4 
   LDW<>  LW0, LW20                   //次数保存                                   
   MOVD   AC0, AC1                    //首地址
   MOVW   LW0, LW20
   MOVD   AC1, AC2
   AENO
   LPS
   AW=    VW102, 1
   +D     2, AC2                      //次地址
   LRD
   AW=    VW102, 0
   INCD   AC2
   LPP
   AW=    VW102, 2
   +D     4, AC2

   Network 5 
   LD     SM0.0

   MOVW   LW0, LW4                    //循环次数减1
   INCW   LW4

   Network 6 
   LD     SM0.0
   FOR    LW2, LW4, VW100

   Network 7 
   LD     SM0.0
   LPS
   AW=    VW102, 1
   AW<=   *AC2, *AC1
   CALL   SBR1, *AC1, *AC2, *AC1, *AC2
   LRD
   AW=    VW102, 0
   AB<=   *AC2, *AC1
   CALL   SBR2, *AC1, *AC2, *AC1, *AC2
   LPP
   AW=    VW102, 2
   AD<=   *AC2, *AC1
   CALL   SBR3, *AC1, *AC2, *AC1, *AC2

   Network 8 
   LD     SM0.0
   LPS
   AW=    VW102, 1
   +D     2, AC2
   LRD
   AW=    VW102, 0
   INCD   AC2
   LPP
   AW=    VW102, 2
   +D     4, AC2

   
   Network 9 
   NEXT
   Network 10 
   LD     SM0.0
   LPS
   AW=    VW102, 1
   +D     2, AC0
   LRD
   AW=    VW102, 0
   INCD   AC0
   LPP
   AW=    VW102, 2
   +D     4, AC0

   Network 11 
   NEXT

   exchange_word:SBR1
   LD     SM0.0
   MOVW   LW0, LW6
   MOVW   LW2, LW4

   exchange_byte:SBR2
   LD     SM0.0
   MOVB   LB0, LB3
   MOVB   LB1, LB2

   exchange_dword:SBR3
   LD     SM0.0
   MOVD   LD0, LD12
   MOVD   LD4, LD8

提问者对于答案的评价:
谢谢 .

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc358629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日
下一篇 2021年7月5日

相关推荐

发表回复

登录后才能评论