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日 上午10:33
下一篇 2021年7月5日 上午10:34

相关推荐

  • 200的程序如何转成SMART的?

    200的程序怎么最简单地转成SMART的? 最佳答案 楼主可以用STEP 7-MicroWIN SMART软件打开S7 200的程序:打开STEP&n…

    SIMATIC S7-200 2017年6月27日
  • 200PLC控制多台伺服电机

    现在想用200PLC控制8台西门子的V80伺服电机,那么我怎么配置,CPU选用CP224XPSi CN的 问题补充:那么如果是能由4个CPU来控制,它们之间采用PPI通讯…

    SIMATIC S7-200 2020年11月1日
  • s7-200中指令含义?

    图片中的指令做什么用的?哪位老师能提供下相关资料的网址,谢谢了…… 图片说明:    最佳答案 S7-200 PLC 脉冲输出MAP&nbs…

    2017年12月10日
  • 西门子200的梯形图编程资料

    请问前辈们,谁有200的梯形图编程资料,能否提供? 最佳答案 1、系统手册里就要:<S7-200 可编程控制器系统手册>下载:http://www.ad.si…

    SIMATIC S7-200 2017年6月27日
  • s7-200的PID问题

    我现在要用s7-200的PID控制温度,在用PID向导时有一些疑惑:1、我在给定的数值范围的低限设为-150.0,给定值范围的高限设为1200.0(摄氏度)2。在回路输入选项,因为…

    SIMATIC S7-200 2020年11月1日
  • S7 200 SMART 上载程序报错

    上传程序时始终提示未知指令错误,只能上传系统和数据块,程序块上传不了,检查程序看不出明显错误,求解 问题补充:没有设置不允许上传 图片说明:    最佳答案 这…

    2021年7月5日
  • n和p跳变信号

    请教各位,我看到书上写的n是负跳变信号,我有点不明白什么样的信号就是跳变信号呢?最好能举例。谢谢啦! 最佳答案 P为上升沿触发信号,取值一个脉冲信号,只动作一次。N为下降沿触发信号…

    2020年10月31日
  • 200与300MPI通讯

    初学,问个简单问题,楼下不要骂我。 我现在想用200和300做mpi通讯,200是否必须加EM277模块? 我手头上有连接的步骤文档,但是没说明这个问题。200…

    SIMATIC S7-200 2021年7月5日
  • STEP 7-MicroWIN SMART 可以使用 pc adapter usb 连接S7-200 226CN的CPU吗?

    win7 系统,已经安装了step 7 5.5v,但是在SMART软件界面,只有网卡和无线网卡选择,无法选择 pc adapter…

    SIMATIC S7-200 2017年7月25日
  • 按钮的设置

    我在编程软件中编制了一个启动/停止的程序,如下: Network 1 // 网络标题 // 网络注释 LD&n…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论