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日

相关推荐

  • 还是西门子200pid的问题

    做了个项目是温度控制的,控制在80度,当温度高于80时使变频器输水量加大,当温度低于80时使变频器输水量减小,既正作用。我根据西门子200pid向导做的,比例把默认的1.0改为负1…

    SIMATIC S7-200 2020年10月31日
  • 西门子指令 解答

    LD     I1.0 O      V1233.7&nbs…

    SIMATIC S7-200 2021年7月4日
  • TD400C

    各位大湿,TD400C的面板ESC键有没有对应的V存储区位,为什么我在符号表里看不到啊,如有的话,应该怎么看? 最佳答案 TD400C 具有15 个可定义的按键…

    SIMATIC S7-200 2020年10月31日
  • 请教s7200smart系列SR40如何与两台威纶通连接?

    s7200smart系列 SR40 如何与两台威纶通连接 例如:MT6013IP,并且现在触摸屏是不支持以太网的,那么有什么方法可以连接两台呢,s72…

    SIMATIC S7-200 2021年7月5日
  • 200与AB通讯经常报故障

    1756-L61与200走DP通讯,200是从站,原来通讯是好的,最近EM277老是报故障(一星期三次了),有红灯,不知道怎么回事? 问题补充:我也怀疑可能是:1、干扰2、屏蔽。电…

    SIMATIC S7-200 2020年11月1日
  • S7200计数器断电保持

    C0   C1   C2  C3  各自计数在,断电后怎么保持数据。 最佳答案 …

    SIMATIC S7-200 2018年12月14日
  • S7-200 读ABB变频器程序

    S7-200 读ABB ACS 5 10变频器程序,用MODBU RTUPLC主站指令库不知道怎么写通讯程序,读其参数 最佳答案 …

    SIMATIC S7-200 2021年7月5日
  • S7-200和S7-200 smart 扩展模块可以通用吗

    S7-200的模块停产了,扩展模块可以跟S7-200 smart 扩展模块可以通用吗 最佳答案 新旧款模块是不能通用互换。新旧款的扩转模块是不能通用,而且新旧款…

    SIMATIC S7-200 2021年7月5日
  • SMART 200 SR20显示不能下载

    使用smart200 SR20CPU ,程序编辑完后下载显示错误,是程序超过存储容量还是其它原因。   程序编辑完没有错误,程序下…

    2021年7月5日
  • 剪刀清洗液体配液

    1.灌1用于乳化液体制备和备用,灌2用于存储混合好的乳化液体并向使用端正常供液.2.灌1与灌2通过SV2阀门连接3.P1,P2为计量泵向灌1供应油和水4.SV1阀门通向灌1底部&n…

    SIMATIC S7-200 2020年11月1日

发表回复

登录后才能评论