一通道输入多个数据的处理

各高手,现有这样一问题:一个通道采集N次数据,每次数据存入不同寄存器地址,并且,在采集数据同时,在上位机实时显示最大两个数据。
望各位高手提供思路。

问题补充:
客户要求是这样:
假若采集5次数据:第一次数据为4,存入VW0
                 上位机显示:最大值:4,第二大值0
                 第二次数据为3,存入VW2
                 上位机显示:最大值:4,第二大值3
                 第三次数据为8,存入VW4
                 上位机显示:最大值:8,第二大值4
                 第四次数据为8,存入VW6
                 上位机显示:最大值:8,第二大值4
                 第五次数据为9,存入VW8
                 上位机显示:最大值:9,第二大值8
恳请大家支招。

最佳答案

学习之中1先生:按您“一个通道采集N次数据,每次数据存入不同寄存器地址,并且,在采集数据同时,在上位机实时显示最大两个数据”的要求,编制如下程序。输入通道为AIW2(您可按自己意愿设定),采样周期500ms,采样大值分别存入VW100、VW104,采样较小值分别存入VW102、VW106。比较两大值,把最大值存入VW108,次大值存入VW110。当两大值相等时,把其中之一存入VW108作为最大值;再比较两较小值,把其中大的存入VW110作为次大值;若两较小值
相等时,把其中之一存入VW110作为次大值。这样,所有采样的最大、次大值一直都存在VW108、VW110存储器中,您可以随时调用。程序有注释便于您理解,程序如下:
换一种方式
LD     SM0.0
LPS
AN     M10.0
TON    T32, 500           //1ms定时器,设置500ms
LRD
A      T32
=      M10.0              //M10.0与T32组成500ms脉冲开关
LRD
A      M10.0
INCB   VB10               //T32导通VB10加1
LRD
AB>=   VB10, 1
MOVB   0, VB10            //VB=1时VB复位
INCB   VB10
LRD
AB=    VB10, 0            //vb=0导通
LPS
AW>=   AIW2, VW100        //采集信号与大值比较
MOVW   AIW2, VW100        //采集信号大值存VW100
LPP
AW<    AIW2, VW100        //采集信号与大值比较
MOVW   AIW2, VW102        //采集信号小值存VW102             
LRD
AB=    VB10, 1            //vb=1导通
LPS
AW>=   AIW2, VW104        //采集信号与大值比较
MOVW   AIW2, VW104        //采集信号大值存VW104
LPP
AW<    AIW2, VW104        //采集信号与大值比较
MOVW   AIW2, VW106        //采集信号小值存VW106
LRD
AW>    VW100, VW104       //采集大值比较
MOVW   VW100, VW108       //最大值存VW108
MOVW   VW104, VW110       //次大值存VW110
LRD
AW>    VW104, VW100       //采集大值比较
MOVW   VW104, VW108       //最大值存VW108
MOVW   VW100, VW110       //次大值存VW110
LPP
AW=    VW100, VW104       //采集大值相等时
LPS
MOVW   VW100, VW108       //最大值存VW108
AW>    VW102, VW106       //采集较小值比较
MOVW   VW102, VW110       //校大值存即次大值存VW110
LRD
AW>    VW106, VW102       //采集较小值比较
MOVW   VW106, VW110       //校大值存即次大值存VW110
LPP

AW=    VW102, VW106       //采集较小值相等时
MOVW   VW102, VW110       //次大值存VW110

东方探索

提问者对于答案的评价:
非常感谢“东方探索”,您的程序给我提供了很好的思路,谢谢您的辛苦。我模拟了您编写的程序,结果如下:最大值能实时正确的显示,次最大值不是真正意义上的次最大值,是一个比最大值小的实时值(我是在改动VB10复位语句位置的结果,我把VB10复位语句放在程序的结尾),因时间较紧,我模拟很可能出现偏差,望见谅!
现在我的问题已经解决,因为客户对工件需要连续采集多次数据,除开最大值和次最大值,其它数据还需要作另外运算,所以我编写程序思路如下:把实时数据分别存入连续地址的寄存器,采用间接寻址和循环比较找出最大值和次最大值,经过几次模拟,最大值和次最大值能够实时准确的显示。
感谢“0不是1”,看了您的“中值循环滤波”,获益匪浅。也谢谢其他热情回答者。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月1日 下午3:34
下一篇 2020年11月1日 下午3:35

相关推荐